From b857459bdbce58c833845b6adfdc68b1a204bed5 Mon Sep 17 00:00:00 2001 From: Nikolay Amiantov Date: Sun, 17 Apr 2016 02:22:45 +0300 Subject: qt5.qmakeHook: init, move from qtbase's setup hook --- pkgs/development/libraries/qt-5/5.5/default.nix | 4 +- pkgs/development/libraries/qt-5/5.5/qmake-hook.sh | 120 +++++++++++++++++++++ .../libraries/qt-5/5.5/qtbase/default.nix | 1 - .../libraries/qt-5/5.5/qtbase/setup-hook.sh | 109 ------------------- 4 files changed, 122 insertions(+), 112 deletions(-) create mode 100644 pkgs/development/libraries/qt-5/5.5/qmake-hook.sh (limited to 'pkgs/development/libraries/qt-5/5.5') diff --git a/pkgs/development/libraries/qt-5/5.5/default.nix b/pkgs/development/libraries/qt-5/5.5/default.nix index 955d57350c294..abbbe8ef7a04b 100644 --- a/pkgs/development/libraries/qt-5/5.5/default.nix +++ b/pkgs/development/libraries/qt-5/5.5/default.nix @@ -42,10 +42,9 @@ let inherit src; propagatedBuildInputs = args.qtInputs ++ (args.propagatedBuildInputs or []); - nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ self.fixQtModuleCMakeConfig ]; + nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ self.fixQtModuleCMakeConfig self.qmakeHook ]; NIX_QT_SUBMODULE = args.NIX_QT_SUBMODULE or true; - dontAddPrefix = args.dontAddPrefix or true; dontFixLibtool = args.dontFixLibtool or true; configureScript = args.configureScript or "qmake"; @@ -115,6 +114,7 @@ let makeQtWrapper = makeSetupHook { deps = [ makeWrapper ]; } ./make-qt-wrapper.sh; fixQtModuleCMakeConfig = makeSetupHook { } ./fix-qt-module-cmake-config.sh; + qmakeHook = makeSetupHook { substitutions = { qt_dev = qtbase.dev; lndir = pkgs.xorg.lndir; }; } ./qmake-hook.sh; }; diff --git a/pkgs/development/libraries/qt-5/5.5/qmake-hook.sh b/pkgs/development/libraries/qt-5/5.5/qmake-hook.sh new file mode 100644 index 0000000000000..209dcd8a062a1 --- /dev/null +++ b/pkgs/development/libraries/qt-5/5.5/qmake-hook.sh @@ -0,0 +1,120 @@ +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" +} + +_qtPropagateRuntimeDependencies() { + for dir in "lib/qt5/plugins" "lib/qt5/qml" "lib/qt5/imports"; do + if [ -d "$1/$dir" ]; then + propagateOnce propagatedBuildInputs "$1" + propagateOnce propagatedUserEnvPkgs "$1" + break + fi + done + addToSearchPathOnce QT_PLUGIN_PATH "$1/lib/qt5/plugins" + addToSearchPathOnce QML_IMPORT_PATH "$1/lib/qt5/imports" + addToSearchPathOnce QML2_IMPORT_PATH "$1/lib/qt5/qml" +} + +_qtRmQmake() { + rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf" +} + +_qtSetQmakePath() { + export PATH="$qtOut/bin${PATH:+:}$PATH" +} + +_qtMultioutModuleDevs() { + # 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}" +} + +_qtMultioutDevs() { + # This is necessary whether the package is a Qt module or not + moveToOutput "mkspecs" "${!outputDev}" +} + +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" <> "$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" -} - addToSearchPathOnceWithCustomDelimiter() { local delim="$1" local search="$2" @@ -62,77 +24,6 @@ propagateOnce() { addToSearchPathOnceWithCustomDelimiter ' ' "$@" } -_qtPropagateRuntimeDependencies() { - for dir in "lib/qt5/plugins" "lib/qt5/qml" "lib/qt5/imports"; do - if [ -d "$1/$dir" ]; then - propagateOnce propagatedBuildInputs "$1" - propagateOnce propagatedUserEnvPkgs "$1" - break - fi - done - addToSearchPathOnce QT_PLUGIN_PATH "$1/lib/qt5/plugins" - addToSearchPathOnce QML_IMPORT_PATH "$1/lib/qt5/imports" - addToSearchPathOnce QML2_IMPORT_PATH "$1/lib/qt5/qml" -} - -_qtRmQmake() { - rm "$qtOut/bin/qmake" "$qtOut/bin/qt.conf" -} - -_qtSetQmakePath() { - export PATH="$qtOut/bin${PATH:+:}$PATH" -} - -_qtMultioutModuleDevs() { - # 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}" -} - -_qtMultioutDevs() { - # This is necessary whether the package is a Qt module or not - moveToOutput "mkspecs" "${!outputDev}" -} - -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 "@dev@/bin/qmake" "$qtOut/bin" -cat >"$qtOut/bin/qt.conf" <