With `__structuredAttrs = true`, `qtWrapperArgs` is provided as an
array; without it, it is provided as a string.
Use stdenv's `concatTo` helper to normalize `qtWrapperArgs` to a bash
array, regardless of its representation.
Adjust the hook's tests to cover both __structuredAttrs true and false.
the `wrapQtAppsHook` function is called for each output, with prefix set
to the path of the output. As a result, with the previous code it would
only wrap the first output. Instead, ensure the code is called only once
on each output.
The base windowing integration for Wayland lives in qtbase now,
and qtwayland only provides libadwaita decorations, which are
only relevant on GNOME-likes without server-side decoration support,
and should probably be installed by the appropriate modules.
- move patches to their corresponding modules
- inline patches list for qtbase into the expression itself
- don't treat patches as series, as they are not
- clean up outdated headers from all the patches
- drop doc tools patch, replace it with setting newly added cmake var in a hook
- add a new patch to disable SBOM generation that's very broken with split installs
Always specify the postPhases attribute as a list instead of a string.
Append elements to the postPhases Bash variable using appendToVar
instead of string or Bash array concatenation.
Always specify the prePhases attribute as a list instead of a string.
Append elements to the prePhases Bash variable using appendToVar
instead of string or Bash array concatenation.
Qt is smart enough to figure out the target Qt version for native plugins.
However, Qt is _not_ smart enough to figure out the target Qt version for
QML imports, which causes all kinds of funny breakage when you start running
Qt 5 applications from Qt 6 ones and vice versa.
So, do some minimally invasive surgery to make different Qt versions pick up
different QML import path variables, so they don't mess with each other.
This is kind of very cursed, but what can you do.
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)