Re: s6: compatibility with make<3.82

From: Guillermo <>
Date: Sat, 8 Aug 2015 15:29:04 -0300


2015-08-07 20:29 GMT-03:00 Buck Evan:
> s6-user_at_696f14e9c9bd:~/scratch$ /opt/make/make
> make: *** No rule to make target '-lc', needed by 'all'. Stop.
> s6-user_at_696f14e9c9bd:~/scratch$ /opt/make/make --version
> GNU Make 4.1
> Built for x86_64-unknown-linux-gnu

That's not strange. This is how -l-style prerequisites work:

(I believe the documentation is partially wrong, it should say
'libdir' instead of 'prefix/lib', with 'libdir' being the value
specified for the --libdir option of the configure script. But if it
is not specified, it does default to 'prefix/lib')

Your distribution has in /usr/lib/x86_64-linux-gnu; that's not
/lib, not /usr/lib, and probably not $prefix/lib either, for whatever
--prefix you specified to the configure script. So is not
found, and because there is no rule in the makefile for building it,
make fails. Saying '/opt/make/make VPATH=/usr/lib/x86_64-linux-gnu'
would probably make the example work.

> s6-user_at_696f14e9c9bd:~/scratch$ make
> echo /usr/lib/x86_64-linux-gnu/
> /usr/lib/x86_64-linux-gnu/
> s6-user_at_696f14e9c9bd:~/scratch$ make --version
> GNU Make 3.81

This is actually the surprising result for me :) But then again, if
this is the Debian-provided make, who knows what the distribution's
developers do to build and package it.

Anyway, the package's configure scripts generate makefile
fragments with appropriate explicit vpath directives, so all libraries
specified via -l-style prerequisites would be found. Therefore, things
like the one in this example shouldn't happen if correct --with-lib or
--with-dynlib options are specified, should they be needed for a
particular setup.

I do not like the package build system's use of vpath
magic instead of relying on the compiler's library search algorithm,
and I will confess I have occasionally patched it to remove the vpath
stuff. But that being said, the build system should normally work
(well, mostly [1]). And I agree with what was said about treating GNU
make version >= 4.0 as just another dependency, building it from
source using ./configure --prefix=some-throwaway-temporary-dir, and
then adding some-throwaway-temporary-dir/bin to PATH to build skalibs,
execline and finally s6, being really the fastest way to get s6
installed on an OS that does not have a sufficiently recent version of
GNU make.


P.S.: The last three messages from this thread for some reason do not
show up in They do in's local

That's the only real bug I believe the build system has so
far, i.e. make's prerequisite search algorithm getting confused if
libraries with the same name as the ones about to be installed are
already present in the target directories. But that report also
presents a simple and clever (but ugly) workaround that doesn't
involve patching the build system.
Received on Sat Aug 08 2015 - 18:29:04 UTC

This archive was generated by hypermail 2.3.0 : Sun May 09 2021 - 19:44:19 UTC