recursive 'make config'?

Jon Noack noackjr at
Tue Apr 20 14:20:24 PDT 2004

On 4/20/2004 2:46 PM, Matthew Seaman wrote:
> On Tue, Apr 20, 2004 at 02:15:19PM -0500, Jon Noack wrote:
>> I love the 'make config' option. Is there a way to recursively
>> 'make config' before installing a port with a lot of dependencies
>> (similar to the way sysutils/portupgrade can recursively fetch with
>> -RF)? If I want to install kde, for example, I'd prefer to
>> configure options for each dependent port before installing. In
>> other words, I don't want to set "BATCH=yes". However, without
>> "BATCH=yes" I have to check the progress occasionally to configure
>> some port because the build process stopped. I know this is only a
>> big deal on the first install (because the options are saved), but
>> it's rather annoying to start a kde compile before you go to bed
>> and wake up with only a few ports installed...
> You can't do a recursive make config like that I'm afraid.  What you
> can do is set the various configuration options used by make(1) before
> starting the compilation job, so that it doesn't stop to ask questions
> halfway through.  There's actually quite a number of ways you can do
> that:
>     i) Globally in /etc/make.conf -- variables set here will apply to
>        all ports you compile.
>    ii) Setting the variable in the environment before starting the
>        compilation.  Again this applies to all compilations, but only
>        certain variables can be set this way.  Many will be overridden
>        by settings in Makefiles or make.conf.
>   iii) Globally in the 'Environment' section of
>        /usr/local/etc/pkgtools.conf -- of course this only works if
>        you're a portupgrade(1) user.  Same caveats as for (ii) apply
>    iv) Locally to a port by creating a Makefile.local in the port
>        directory and putting the settings within that.  There are
>        actually several subsiduary makefile names that will be
>        automatically included like this: see /usr/ports/Mk/bsd.port/mk
>        for details.  Note however that 'Makefile.local' is the name
>        intended for human overrides of the default settings, whereas
>        '' and '../' can be machine generated
>        as part of the port's configuration, or it can be a permanent
>        file commited as part of the ports.
>     v) Locally to a port (or a series of ports matching a glob
>        expression) in the MAKE_ARGS section of pkgtools.conf
>    vi) Locally to a port if it uses the OPTIONS variable within it's
>        Makefile.  In these cases, just run 'make config' one time, and
>        the settings will be stored in /var/db/ports: you'll only get
>        the configuration dialog coming up if the port is modified to
>        use some new options.
> Option vii) is (of course) to set the options on the make(1) command
> line, as you build the port, which I include for completeness' sake
> only as it doesn't help you run your big build job unattended.
> Most people will use a combination of (i), (v) and (vi) -- for those
> ports where it applies.  You will still have to scan through all of
> the dependency ports that you will be installing, read their Makefiles
> and decide what options (if any) you wish to set.  You can get some
> lists of the dependencies by running:
>     % make pretty-print-build-depends-list
>     % make pretty-print-run-depends-list 
> from the directory of the top level port you wish to install.
> 	Cheers,
> 	Matthew

Wow -- thanks for the comprehensive response.  I'm a member of the (i) 
and (vi) club.  What I was hoping to avoid was the scan through all the 
ports.  For kde this is probably around 100 ports (no bloat jokes, 
please).  That's just too much time.  As a result, I'll continue my 
current "lazy allocation" of options.  I keep a backup of /etc/make.conf 
and the contents of /var/db/ports, which should help kick things off the 
next time I need to reinstall or install on another machine.


More information about the freebsd-questions mailing list