The old way doesn't seem to work with multiple outputs.
TODO: this seems to be a recurring pattern with openssl, maybe the
splitting isn't done correctly?
We need to override BITMAPDIR, since the default:
-DBITMAPDIR=\"$(includedir)/X11/bitmaps\"
would cause cycles between the outputs. Setting it to a nonexistent path
doesn't affect the code logic, since the corresponding single-output
directory $out/include/X11/bitmaps doesn't exist either.
(cherry picked from commit 15007c88108d9c6a3bc82b22eff53175bbddf75e)
The current default multiple-output propagation rules don't seem to work
too well if the dev output isn't the first one; without this we get an
unnecessary runtime reference to the kernel headers.
This way the binary gets stripped & rpath-shrinked etc. as usual.
We'd seem to get a runtime reference to gcc otherwise.
TODO: Maybe we should be able to set e.g. 'dontUnpack = true;'
to make this more pretty.
Our cc-wrapper is broken whenever the '-x' flag is used:
'gcc -x c foo.c -o bar' doesn't work the same way as 'gcc foo.c -o bar'
does. (Try both with NIX_DEBUG=1.)
What happens is that passing '-x' causes linker-related flags (such as
-Wl,-dynamic-linker) not to be added, just like if '-c' is passed.
The bug happens outside the multiple-outputs branch as well, but it
doesn't break imake there. It only breaks in multiple-outputs because
linking without -Wl,-dynamic-linker produces a binary with an invalid
ELF interpreter path. (Which arguably, is a bug in its own.)
Without this, python will silently build without native extensions (e.g
openssl); this causes wget to fail its tests for instance.
vcunat added python-3.5.
- $out/libexec/ now contains subdirectories that we want to patchelf too
- $out/libexec/ now contains some .so and a related .la file, which must
not be passed to patchelf
'[[ ! -v "$propagatedOutputs" ]]' is incorrect and always evaluates to
true. The correct form using double brackets would be
'[[ ! -v propagatedOutputs ]]', but I strongly dislike '[[ ]]' due to
the totally different quoting rules compared to everything else in bash.