about summary refs log tree commit diff
path: root/pkgs/development/libraries/qt-5/5.6/qmake-hook.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/libraries/qt-5/5.6/qmake-hook.sh')
-rw-r--r--pkgs/development/libraries/qt-5/5.6/qmake-hook.sh121
1 files changed, 121 insertions, 0 deletions
diff --git a/pkgs/development/libraries/qt-5/5.6/qmake-hook.sh b/pkgs/development/libraries/qt-5/5.6/qmake-hook.sh
new file mode 100644
index 0000000000000..cf3803a1b9ce7
--- /dev/null
+++ b/pkgs/development/libraries/qt-5/5.6/qmake-hook.sh
@@ -0,0 +1,121 @@
+if [[ -z "$QMAKE" ]]; then
+
+_qtLinkDependencyDir() {
+    @lndir@/bin/lndir -silent "$1/$2" "$qtOut/$2"
+    if [ -n "$NIX_QT_SUBMODULE" ]; then
+        find "$1/$2" -printf "$2/%P\n" >> "$out/nix-support/qt-inputs"
+    fi
+}
+
+_qtLinkModule() {
+    if [ -d "$1/mkspecs" ]; then
+        # $1 is a Qt module
+        _qtLinkDependencyDir "$1" mkspecs
+
+        for dir in bin include lib share; do
+            if [ -d "$1/$dir" ]; then
+                _qtLinkDependencyDir "$1" "$dir"
+            fi
+        done
+    fi
+}
+
+_qtRmModules() {
+    cat "$out/nix-support/qt-inputs" | while read file; do
+      if [ -h "$out/$file" ]; then
+        rm "$out/$file"
+      fi
+    done
+
+    cat "$out/nix-support/qt-inputs" | while read file; do
+      if [ -d "$out/$file" ]; then
+        rmdir --ignore-fail-on-non-empty -p "$out/$file"
+      fi
+    done
+
+    rm "$out/nix-support/qt-inputs"
+}
+
+_qtRmQmake() {
+    rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf"
+}
+
+_qtSetQmakePath() {
+    export PATH="$qtOut/bin${PATH:+:}$PATH"
+}
+
+_qtModuleMultioutDevsPre() {
+    # We cannot simply set these paths in configureFlags because libQtCore retains
+    # references to the paths it was built with.
+    moveToOutput "bin" "${!outputDev}"
+    moveToOutput "include" "${!outputDev}"
+
+    # The destination directory must exist or moveToOutput will do nothing
+    mkdir -p "${!outputDev}/share"
+    moveToOutput "share/doc" "${!outputDev}"
+}
+
+_qtModuleMultioutDevsPost() {
+    # Move libtool archives and qmake project files to $dev/lib
+    if [ "z${!outputLib}" != "z${!outputDev}" ]; then
+        pushd "${!outputLib}"
+        if [ -d "lib" ]; then
+            find lib \( -name '*.a' -o -name '*.la' -o -name '*.prl' \) -print0 | \
+                while read -r -d $'\0' file; do
+                    mkdir -p "${!outputDev}/$(dirname "$file")"
+                    mv "${!outputLib}/$file" "${!outputDev}/$file"
+                done
+
+            # Ensure that CMake can find the shared libraries
+            mkdir -p "${!outputDev}/lib"
+            @lndir@/bin/lndir -silent "${!outputLib}/lib" "${!outputDev}/lib"
+        fi
+        popd
+    fi
+}
+
+qmakeConfigurePhase() {
+    runHook preConfigure
+
+    qmake PREFIX=$out $qmakeFlags
+
+    runHook postConfigure
+}
+
+qtOut=""
+if [[ -z "$NIX_QT_SUBMODULE" ]]; then
+    qtOut=`mktemp -d`
+else
+    qtOut=$out
+fi
+
+mkdir -p "$qtOut/bin" "$qtOut/mkspecs" "$qtOut/include" "$qtOut/nix-support" "$qtOut/lib" "$qtOut/share"
+
+cp "@qt_dev@/bin/qmake" "$qtOut/bin"
+cat >"$qtOut/bin/qt.conf" <<EOF
+[Paths]
+Prefix = $qtOut
+Plugins = lib/qt5/plugins
+Imports = lib/qt5/imports
+Qml2Imports = lib/qt5/qml
+Documentation = share/doc/qt5
+EOF
+
+export QMAKE="$qtOut/bin/qmake"
+
+envHooks+=(_qtLinkModule)
+# Set PATH to find qmake first in a preConfigure hook
+# It must run after all the envHooks!
+postHooks+=(_qtSetQmakePath)
+
+if [ -z "$dontUseQmakeConfigure" -a -z "$configurePhase" ]; then
+    configurePhase=qmakeConfigurePhase
+fi
+
+if [ -n "$NIX_QT_SUBMODULE" ]; then
+    postInstallHooks+=(_qtRmQmake _qtRmModules)
+    preFixupHooks+=(_qtModuleMultioutDevsPre)
+    postFixupHooks+=(_qtModuleMultioutDevsPost)
+fi
+
+fi