The rewrite achieves three goals. First, all the installation paths are
set correctly for multiple outputs. Second, the correct search paths are
set for all types of shared data. Third, packages are installed through
propagatedUserEnvPkgs as required.
The included patch from upstream fixes the issue described here:
https://bugreports.qt.io/browse/QTBUG-48321
The backing store of certain widgets was being improperly invalidated,
leading to display bugs in, e.g. VLC.
This patch is included in Qt 5.6, so we should remove it when we
upgrade.
The documentation cannot be built as part of the split-module build
anyway. After all the modules are built, we could build the
documentation as a separate package.
The documentation cannot be built as part of the split-module build
anyway. After all the modules are built, we could build the
documentation as a separate package.
The most complex problems were from dealing with switches reverted in
the meantime (gcc5, gmp6, ncurses6).
It's likely that darwin is (still) broken nontrivially.
Without this, configure will say:
Checking for openal... no
/tmp/nix-build-qtmultimedia-5.5.0.drv-0/qtmultimedia-opensource-src-5.5.0/qtmultimedia.pro:28:
Variable GST_VERSION is not defined.
Checking for resourcepolicy... no
And there may be application runtime errors like
defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.camera"
After this fix, configure will say:
Checking for openal... no
Checking for gstreamer... yes
Checking for gstreamer_photography... no
Checking for gstreamer_encodingprofiles... yes
Checking for gstreamer_appsrc... yes
Checking for linux_v4l... yes
Checking for resourcepolicy... no
And the above runtime error will not appear.
This fix is similar to 449b6028 ("qt5.multimedia: fix gstreamer
support."), except with Qt 5.5 we also need to set GST_VERSION.
The runtime paths QT_PLUGIN_PATH, QML_IMPORT_PATH, QML2_IMPORT_PATH, and
XDG_DATA_DIRS did not include the appropriate paths from the current
package being built because addToSearchPath does not add directories
which don't exist.
Try to build e.g. the Qt5 Camera Example[1] and see that qmake fails to
find <GL/gl.h>. This fixes it.
[1] http://doc.qt.io/qt-5/qtmultimediawidgets-camera-example.html
(Although since nixpkgs qtcreator still lacks 'examples', we have to
download the sources manually and use "qmake && make".)
This seems to have been confusing people, using both xlibs and xorg, etc.
- Avoided renaming local (and different) xlibs binding in gcc*.
- Fixed cases where both xorg and xlibs were used.
Hopefully everything still works as before.
Fixes this problem, when building apps in QtCreator:
...(compile output window)
g++ -Wl,-rpath,/nix/store/1w7h7p6s2srfw2ady90k7072991lrnpp-qtbase-5.4.2/lib \
-o qt-test3 main.o mainwindow.o moc_mainwindow.o \
-L/nix/store/1w7h7p6s2srfw2ady90k7072991lrnpp-qtbase-5.4.2/lib \
-lQt5Widgets -lQt5Gui -lQt5Core -lGL -lpthread
/nix/store/b8qhjrwf8sf9ggkjxqqav7f1m6w83bh0-binutils-2.23.1/bin/ld: cannot find -lGL
collect2: error: ld returned 1 exit status
mesa is already in the closure of Qt, so there is no size increase.
The patch is copied into both qt-5.3 and qt-5.4 directories, like other
patches are.
Note that programs still can _run_ against a different libGL (e.g. one
provided by nvidia) by configuring the dynamic linker. For instance,
NixOS sets the LD_LIBRARY_PATH environment variable to
/run/opengl-driver/lib/, meaning that whatever libGL is found there
will be used instead of the default (mesa).
Set QT_PLUGIN_PATH, QML_IMPORT_PATH, and QML2_IMPORT_PATH during build
so that Qt programs may easily be wrapped for use outside NixOS. The
paths are set appropriately for the dependencies of the package.
Due to a bug somewhere, the qt documentation is by default placed in
$out/share/doc although "qmake -query" reports $out/doc. That
discrepancy causes qtcreator withDocumentation builds to fail. This
fixes it.
If not explicitly disabled, Qt tries to detect support for the various
instruction sets. As a result, binaries built on Hydra may use
instruction sets unsupported by clients.
This disables propagated of Qt 5 build inputs at the request of
@edolstra. If this breaks your build, you need to add the missing
dependencies yourself. If this breaks your package at runtime, you need
to wrap your package to set either the plugin path or the QML import
path.
This commit also removes the 5.2 branch in favor of 5.3. Several
components of KDE5 require Qt 5.3, so it doesn't make much sense to have
the rest of the system on an older version. Also, the application styles
may not be compatible because Qt breaks ABI compatibility between versions.
Qt5 currently hardcodes /usr/{share,lib}/X11/locale/. Fix it to use
paths from the nix store. Qt4 is unaffected.
This fixes a startup warning for applications built with qt5 (e.g.
qtcreator, shotcut):
Qt Warning: Could not find a location of the system's Compose files. Consider setting the QTCOMPOSE environment variable.
The file $out/mkspecs/qconfig.pri contains a list of all include /
library paths used during the build, including build-time-only
packages like GDB and Ruby. So get rid of those.
Building the tests (which as far as I can tell we don't even run)
makes the build take > 19 GiB of disk space, which is a bit
excessive. Without the tests, it takes 2.6 GiB.
Consider this as a first step towards the integration of Qt5 into nixpkgs,
it does not yet intends to replace Qt4 on every packages even if possible.
My goal here is to have a first derivation in common between people who
needs qt5 for development purposes.
The derivation has been written from scratch but I took care to read at the
version 4 to re-integrate some patches which are still compatible. However,
I did not had enough time to test gtkStyle and flashplayerFix as I do not
use any of them. Also, OSX users will have to do some extra work because
I do not have any mac.
Finally, as some configure flags have changed and in an hope to provide a
clear package definition before it becomes mature, I voluntary added some
flags which are default. Once every option will be mastered, we will just
have to redo a pass on qt5 configure flags and remove the ones which are
set by default.