Applying local patches after updating FreeBSD source

Conrad J. Sabatier conrads at
Tue Jan 24 17:50:54 UTC 2012

On Mon, 23 Jan 2012 14:13:49 -0500
Maxim Khitrov <max at> wrote:

> On Mon, Jan 23, 2012 at 1:25 PM, Matthew Seaman
> <m.seaman at> wrote:
> > On 23/01/2012 18:03, Maxim Khitrov wrote:
> >> Hi all,
> >>
> >> When I need to apply a custom patch to a port, I can set
> >> EXTRA_PATCHES make variable in /usr/local/etc/ports.conf (when
> >> using portconf), and the patch will be automatically applied
> >> whenever that port is built. Is there equivalent functionality for
> >> building FreeBSD world and kernel?
> >>
> >> When I run 'make update' in /usr/src, csup overwrites all local
> >> changes. There is a LOCAL_PATCHES variable, but it seems to apply
> >> only to 'make release'.
> >>
> >> If possible, I would like to avoid writing custom scripts for
> >> updating and building world, because at some point I will forget
> >> to use the script and build everything without the patches. How
> >> can I preserve the current behavior of running 'make update &&
> >> make buildworld buildkernel' while automatically applying custom
> >> patches in between?
> >
> > Check the system sources out of svn?
> >
> > This way, you can apply your patches and the result is automatically
> > merged when you update the sources by 'svn up' -- unless there has
> > been a conflicting commit to the same file, when you may be
> > required to intervene manually.
> I don't have subversion installed on any of my servers and that's a
> dependency that I would prefer to do without.
> Are there any changes I could make to /etc/make.conf that would allow
> me to execute an arbitrary command after the 'update' task is
> finished?

My own preferred methodology that I've been using for quite some time
now is to use csup to update a local copy of the doc, ports and src
areas of the official CVS repository, from which I can then
update /usr/{doc,ports,src} via local CVS.  This basically has the
same perks as what Matthew described for subversion.

In my case, I mainly want the flexibility to tinker with ports and not
have all of my customizations and patches I'm working on for later
submission overwritten with every update.  Doing cvs updates will merge
my local changes with whatever updates come in from the official repo.
Only very rarely will some conflict arise, but as long as you keep
an eye on your mail from your cron jobs, it's very easy to spot them
and fix them.

Having the local CVS repo is especially nice for creating very
clean, conforming patches for ports, ready to submit via send-pr, with
no worries about any little oddities in the pathnames used to diff the
files, since you're diffing against a clone of the actual FreeBSD CVS

Of course, everyone has their own tastes when it comes to this sort of
thing.  I've just been doing it this way for so long now, I'm reluctant
to try anything else.  Gettin' set in mah ways, I reckon.  :-)

Conrad J. Sabatier
conrads at

More information about the freebsd-questions mailing list