How to manage local patches to the FreeBSD ports tree?

5

1

What is the preferred way to manage local patches in the FreeBSD ports tree. As an example look at textproc/urlview. This port installs the url_handler.sh script. This script defines applications to be used for different url types. The default applications do not match my system.

So, what to do? I used two rather unsatisfying ways in the past:

  1. Build and install the vanilla port and edit `/usr/local/bin/url_handler.sh` directly. This messes up the deletion of the installed port as the checksum has changed. This can be avoided by messing with the files in `/var/db/pkg` directly but that's as hackish as it can get.
  2. Create a patch file in `/usr/ports/textproc/urlview/files` that patches the script in the `patch` phase accordingly. However this fails if you are using `portsnap` as it wipes the directory clean before updating the ports tree.

How are you guys handling this kind of things?

tatt

Posted 2009-09-21T07:50:25.653

Reputation:

Check out the port from AnonCVS, then you can add local files to your port. – arved – 2011-12-09T12:53:07.063

maybe this is worth asking on server fault. I am also interested after upgrading a few of the packages myself. – Andrew Cox – 2009-10-24T00:42:40.597

Answers

2

I have started to use the git repo (https://github.com/freebsd/freebsd-ports.git) and then have local branch with the changes I need. I also use this when I create my own ports that isn't available in the ports tree.

Peter

Posted 2009-09-21T07:50:25.653

Reputation: 178

2

Option 2. I have a handful of patches to particular ports. If one has a newer version, update your ports tree, then copy in the modified patches and manually run 'make patch' to see if it patches cleanly. Then 'make' to see if builds.

jyap

Posted 2009-09-21T07:50:25.653

Reputation: 249

2

I would say option 2 but use a script to copy your patches. A script helps document a procedure, which really helps when you go back in a year and try to figure out what you did.

Although you could write something fancy which "overlays" a directory structure onto the ports tree, I find that simpler is better:

#/bin/sh
PORTSTREE="/usr/ports"
MYPATCHDIR="/wherever/you/put/these"

# my textproc/urlview patch
cp ${MYPATCHDIR}/myurlview.patch ${PORTSTREE}/textproc/urlview/files

Now you can list all your modifications in one file, and have all your patches in one directory. Run the script after you portsnap or (nowdays) svn a new ports tree.

Dave Hayes

Posted 2009-09-21T07:50:25.653

Reputation: 41