compiling ports with more than one job

Thomas Sparrevohn Thomas.Sparrevohn at
Mon Mar 5 22:45:55 UTC 2007

There really two answers possible here - 

1) Let's call it one depth e.g. make -j - Which works with some not all
ports - Nice when it works and I guess ports/Mk could hold a flag
2) Let's call it width - e.g. the ability to compile packages at the same
time given that all dependencies has been resolved
3) combination of 1 and 2 

In practical terms option 2 is much more attractive as it is possible to
determine that just from the INDEX file and the installed ports. 
However due to the way compilation options are treated e.g. I am not sure
that it is completely safe - I will require some locking 
during the make (de/re)install phase but possible to handle - It would still
cut portupgrade significantly 

With 15-16000+ ports I think that 1 and 3 are unpractical - however it could
make sense to have some packages (kde/gnome) handled with
make -j and it seems to work with at least some of the kde packages - but
only I think if make extract/patch/configure are run without -j    

-----Original Message-----
From: owner-freebsd-questions at
[mailto:owner-freebsd-questions at] On Behalf Of RW
Sent: 05 March 2007 21:21
To: freebsd-questions at
Subject: Re: compiling ports with more than one job

On Sat, 3 Mar 2007 13:55:53 +0100 (CET)
Christian Baer <christian.baer at> wrote:

> On Wed, 28 Feb 2007 18:37:33 +0000 RW wrote:
> > There are two problems here. The first is that not all of the
> > underlying builds support this. The second is that we are using
> > Make as our ports scripting language - I'm guessing that in Gentoo
> > no-one expects portage itself to be parallel.  
> I don't actually *expect* anything. :-) I'm not sure why you think
> that Gentoo should be an exeption here, but that won't hold up
> forever - on any OS. 

I don't, it was an analogy. Gentoo has a portage system based on
Python that mostly builds software using Gnu make, FreeBSD has a ports
system based on BSD make that also mostly builds software using Gnu
make. Gentoo can make use of parallel processes by passing -j to gnu
make,and IMO this is how it should be done in FreeBSD. 

The fact that FreeBSD uses Make as its ports scripting language confuses
the issue, people expect to be able to type make -j in a ports
directory, but when they do that they are applying the -j to the wrong
make - it's analogous the python part of Gentoo portage. 

I don't see any good reason why the ports system *itself* should ever
support -j, there's nothing to be gained by it. All that's needed is
a better mechanism to tell  the underlying build to use multiple

> So you mean a MAKE_ARGS= -j 4 would help?

Worth a try, a few ports already do this

> > Probably you would want to set it conditionally in make.conf, so you
> > can exclude any problematical ports.
> What do you mean with that?

You wouldn't want to use it on ports that are known to fail would you?
freebsd-questions at mailing list
To unsubscribe, send any mail to "freebsd-questions-unsubscribe at"

More information about the freebsd-questions mailing list