Apart from the previous ones, two new patches are added. One for
reducing the runtime closure size by removing reference to cmake, the
other for fixing the linker flags in generated qmake files.
The qt build system embeds information about compilers used during
building qtbase into the generated cmake files, to avoid mixing
different compilers when building qt modules, however this greatly
bloats the closure size of qtbase and the mixed use of compilers is
sometimes desired in Nixpkgs.
The qt build system locates header files, libraries and other installed
components with paths relative to the cmake files. Thus the default
behavior of moving them to the "dev" output breaks these expectations
and is now disabled.
The "multiple-outputs.sh" setup hook moves "include", "lib/cmake" and
other folders into the "dev" output if it exists, thus breaking the
invariants expected by the qt build system and we used to patch cmake to
fixup the generated cmake files. In a series of changes to rework qt
packaging, we are now setting "moveToDev" to false to suppress that
behavior, and the cmake patch is no longer required.
The primary motivating example is openssl:
Before the change full package build took 1m54s minutes.
After the change full package build takes 59s.
About a 2x speedup.
The difference is visible because openssl builds hundreds of manpages
spawning a perl process per manual in `install` phase. Such a workload
is very easy to parallelize.
Another example would be `autotools`+`libtool` based build system where
install step requires relinking. The more binaries there are to relink
the more gain it will be to do it in parallel.
The change enables parallel installs by default only for buiilds that
already have parallel builds enabled. There is a high chance those build
systems already handle parallelism well but some packages will fail.
Consistently propagated the enableParallelBuilding to:
- cmake (enabled by default, similar to builds)
- ninja (set parallelism explicitly, don't rely on default)
- bmake (enable when requested)
- scons (enable when requested)
- meson (set parallelism explicitly, don't rely on default)
- waf (set parallelism explicitly, don't rely on default)
- qmake-4/5/6 (enable by default, similar to builds)
- xorg (always enable, similar to builds)
with structuredAttrs lists will be bash arrays which cannot be exported
which will be a issue with some patches and some wrappers like cc-wrapper
this makes it clearer that NIX_CFLAGS_COMPILE must be a string as lists
in env cause a eval failure