diff options
author | Thomas Tuegel <ttuegel@gmail.com> | 2016-07-30 16:16:36 -0500 |
---|---|---|
committer | Thomas Tuegel <ttuegel@gmail.com> | 2016-07-30 16:16:36 -0500 |
commit | c122f791c95db53a0d86d0dffc9e4a7b2fda12bd (patch) | |
tree | a2c7aed8e83609ffa01711713c51918cfd561fdd /pkgs/development/libraries | |
parent | 795cfd578a4ec8c9b78b39cf60102904a23af993 (diff) | |
download | nixlib-c122f791c95db53a0d86d0dffc9e4a7b2fda12bd.tar nixlib-c122f791c95db53a0d86d0dffc9e4a7b2fda12bd.tar.gz nixlib-c122f791c95db53a0d86d0dffc9e4a7b2fda12bd.tar.bz2 nixlib-c122f791c95db53a0d86d0dffc9e4a7b2fda12bd.tar.lz nixlib-c122f791c95db53a0d86d0dffc9e4a7b2fda12bd.tar.xz nixlib-c122f791c95db53a0d86d0dffc9e4a7b2fda12bd.tar.zst nixlib-c122f791c95db53a0d86d0dffc9e4a7b2fda12bd.zip |
Add kdeEnv and kdeWrapper
Diffstat (limited to 'pkgs/development/libraries')
4 files changed, 129 insertions, 85 deletions
diff --git a/pkgs/development/libraries/kde-frameworks/default.nix b/pkgs/development/libraries/kde-frameworks/default.nix index 74e9df114f0b..d5164297161a 100644 --- a/pkgs/development/libraries/kde-frameworks/default.nix +++ b/pkgs/development/libraries/kde-frameworks/default.nix @@ -24,7 +24,10 @@ let let in stdenv.mkDerivation (args // { - outputs = args.outputs or [ "dev" "out" ]; + outputs = args.outputs or [ "dev" "out" "bin" ]; + + propagatedUserEnvPkgs = + builtins.map lib.getBin (args.propagatedBuildInputs or []); cmakeFlags = (args.cmakeFlags or []) @@ -50,6 +53,17 @@ let } // (args.meta or {}); }); + kdeEnv = import ./kde-env.nix { + inherit (pkgs) stdenv lib; + inherit (pkgs.xorg) lndir; + inherit ecmNoHooks; + }; + + kdeWrapper = import ./kde-wrapper.nix { + inherit (pkgs) stdenv lib makeWrapper; + inherit kdeEnv; + }; + attica = callPackage ./attica.nix {}; baloo = callPackage ./baloo.nix {}; bluez-qt = callPackage ./bluez-qt.nix {}; diff --git a/pkgs/development/libraries/kde-frameworks/kde-env.nix b/pkgs/development/libraries/kde-frameworks/kde-env.nix new file mode 100644 index 000000000000..f4ad528454b2 --- /dev/null +++ b/pkgs/development/libraries/kde-frameworks/kde-env.nix @@ -0,0 +1,34 @@ +{ stdenv, lib, lndir, ecmNoHooks }: + +name: pkgs: + +let + inherit (builtins.parseDrvName ecmNoHooks.name) version; +in +stdenv.mkDerivation { + name = "kde-env-${name}"; + nativeBuildInputs = [ lndir ]; + propagatedUserEnvPkgs = builtins.map lib.getBin pkgs; + unpackPhase = "true"; + configurePhase = "runHook preConfigure; runHook postConfigure"; + buildPhase = "true"; + installPhase = '' + runHook preInstall + + propagated="" + for i in $propagatedUserEnvPkgs; do + findInputs $i propagated propagated-user-env-packages + done + + for tgt in bin etc/xdg lib/libexec lib/qt5 share; do + mkdir -p "$out/$tgt" + for p in $propagated; do + if [ -d "$p/$tgt" ]; then + lndir -silent "$p/$tgt" "$out/$tgt" >/dev/null 2>&1 + fi + done + done + + runHook postInstall + ''; +} diff --git a/pkgs/development/libraries/kde-frameworks/kde-wrapper.nix b/pkgs/development/libraries/kde-frameworks/kde-wrapper.nix new file mode 100644 index 000000000000..3d0c104c9053 --- /dev/null +++ b/pkgs/development/libraries/kde-frameworks/kde-wrapper.nix @@ -0,0 +1,47 @@ +{ stdenv, lib, makeWrapper, kdeEnv }: + +drv: + +{ targets, paths }: + +let + env = kdeEnv drv.name ([ drv ] ++ paths); +in +stdenv.mkDerivation { + inherit (drv) name; + + drv = lib.getBin drv; + inherit env targets; + passthru = { unwrapped = drv; }; + + nativeBuildInputs = [ makeWrapper ]; + + unpackPhase = "true"; + configurePhase = "runHook preConfigure; runHook postConfigure"; + buildPhase = "true"; + + installPhase = '' + for t in $targets; do + if [ -a "$drv/$t" ]; then + makeWrapper "$drv/$t" "$out/$t" \ + --argv0 '"$0"' \ + --suffix PATH : "$env/bin" \ + --prefix XDG_CONFIG_DIRS : "$env/etc/xdg" \ + --prefix XDG_DATA_DIRS : "$env/share" \ + --set QML_IMPORT_PATH "$env/lib/qt5/imports" \ + --set QML2_IMPORT_PATH "$env/lib/qt5/qml" \ + --set QT_PLUGIN_PATH "$env/lib/qt5/plugins" + else + echo "no such file or directory: $drv/$t" + exit 1 + fi + done + + for s in applications dbus-1 desktop-directories icons mime polkit-1; do + if [ -d "$env/share/$s" ]; then + mkdir -p "$out/share" + ln -s "$env/share/$s" "$out/share/$s" + fi + done + ''; +} diff --git a/pkgs/development/libraries/kde-frameworks/setup-hook.sh b/pkgs/development/libraries/kde-frameworks/setup-hook.sh index 285ad5522533..a1638ca541be 100644 --- a/pkgs/development/libraries/kde-frameworks/setup-hook.sh +++ b/pkgs/development/libraries/kde-frameworks/setup-hook.sh @@ -1,60 +1,9 @@ _ecmSetXdgDirs() { addToSearchPathOnce XDG_DATA_DIRS "$1/share" addToSearchPathOnce XDG_CONFIG_DIRS "$1/etc/xdg" - addToSearchPathOnce RUNTIME_XDG_CONFIG_DIRS "$1/etc/xdg" } -_ecmSharePaths=( \ - "appdata" \ - "applications" \ - "config.cfg" \ - "dbus-1" \ - "desktop-directories" \ - "doc" \ - "icons" \ - "kconf_update" \ - "kservices5" \ - "kservicetypes5" \ - "knotifications5" \ - "kxmlgui5" \ - "locale" \ - "mime" \ - "polkit-1" \ - "sounds" \ - "templates" \ - "wallpapers" ) - -_ecmPropagateNative() { - local target - for dir in ${_ecmSharePaths[@]}; do - target=$(readlink -m "$1/share/$dir") - if [ "$target" != "$1/share" ] && [ -d "$target" ]; then - propagateOnce propagatedNativeBuildInputs "$1" - if [ -z "$crossConfig" ]; then - propagateOnce propagatedUserEnvPkgs "$1" - addToSearchPathOnce RUNTIME_XDG_DATA_DIRS "$1/share" - fi - break - fi - done -} - -envHooks+=(_ecmSetXdgDirs _ecmPropagate) - -_ecmPropagate() { - local target - for dir in ${_ecmSharePaths[@]}; do - target=$(readlink -m "$1/share/$dir") - if [ "$target" != "$1/share" ] && [ -d "$target" ]; then - propagateOnce propagatedBuildInputs "$1" - propagateOnce propagatedUserEnvPkgs "$1" - addToSearchPathOnce RUNTIME_XDG_DATA_DIRS "$1/share" - break - fi - done -} - -crossEnvHooks+=(_ecmPropagate) +envHooks+=(_ecmSetXdgDirs) _ecmConfig() { # Because we need to use absolute paths here, we must set *all* the paths. @@ -62,41 +11,41 @@ _ecmConfig() { cmakeFlags+=" -DKDE_INSTALL_BINDIR=${!outputBin}/bin" cmakeFlags+=" -DKDE_INSTALL_SBINDIR=${!outputBin}/sbin" cmakeFlags+=" -DKDE_INSTALL_LIBDIR=${!outputLib}/lib" - cmakeFlags+=" -DKDE_INSTALL_LIBEXECDIR=${!outputLib}/lib/libexec" + cmakeFlags+=" -DKDE_INSTALL_LIBEXECDIR=${!outputBin}/lib/libexec" cmakeFlags+=" -DKDE_INSTALL_CMAKEPACKAGEDIR=${!outputDev}/lib/cmake" - cmakeFlags+=" -DKDE_INSTALL_QTPLUGINDIR=${!outputLib}/lib/qt5/plugins" - cmakeFlags+=" -DKDE_INSTALL_PLUGINDIR=${!outputLib}/lib/qt5/plugins" - cmakeFlags+=" -DKDE_INSTALL_QTQUICKIMPORTSDIR=${!outputLib}/lib/qt5/imports" - cmakeFlags+=" -DKDE_INSTALL_QMLDIR=${!outputLib}/lib/qt5/qml" + cmakeFlags+=" -DKDE_INSTALL_QTPLUGINDIR=${!outputBin}/lib/qt5/plugins" + cmakeFlags+=" -DKDE_INSTALL_PLUGINDIR=${!outputBin}/lib/qt5/plugins" + cmakeFlags+=" -DKDE_INSTALL_QTQUICKIMPORTSDIR=${!outputBin}/lib/qt5/imports" + cmakeFlags+=" -DKDE_INSTALL_QMLDIR=${!outputBin}/lib/qt5/qml" cmakeFlags+=" -DKDE_INSTALL_INCLUDEDIR=${!outputInclude}/include" cmakeFlags+=" -DKDE_INSTALL_LOCALSTATEDIR=/var" - cmakeFlags+=" -DKDE_INSTALL_DATAROOTDIR=${!outputLib}/share" - cmakeFlags+=" -DKDE_INSTALL_DATADIR=${!outputLib}/share" - cmakeFlags+=" -DKDE_INSTALL_DOCBUNDLEDIR=${!outputLib}/share/doc/HTML" - cmakeFlags+=" -DKDE_INSTALL_KCFGDIR=${!outputLib}/share/config.kcfg" - cmakeFlags+=" -DKDE_INSTALL_KCONFUPDATEDIR=${!outputLib}/share/kconf_update" - cmakeFlags+=" -DKDE_INSTALL_KSERVICES5DIR=${!outputLib}/share/kservices5" - cmakeFlags+=" -DKDE_INSTALL_KSERVICETYPES5DIR=${!outputLib}/share/kservicetypes5" - cmakeFlags+=" -DKDE_INSTALL_KXMLGUI5DIR=${!outputLib}/share/kxmlgui5" - cmakeFlags+=" -DKDE_INSTALL_KNOTIFY5RCDIR=${!outputLib}/share/knotifications5" - cmakeFlags+=" -DKDE_INSTALL_ICONDIR=${!outputLib}/share/icons" - cmakeFlags+=" -DKDE_INSTALL_LOCALEDIR=${!outputLib}/share/locale" - cmakeFlags+=" -DKDE_INSTALL_SOUNDDIR=${!outputLib}/share/sounds" - cmakeFlags+=" -DKDE_INSTALL_TEMPLATEDIR=${!outputLib}/share/templates" - cmakeFlags+=" -DKDE_INSTALL_WALLPAPERDIR=${!outputLib}/share/wallpapers" - cmakeFlags+=" -DKDE_INSTALL_APPDIR=${!outputLib}/share/applications" - cmakeFlags+=" -DKDE_INSTALL_DESKTOPDIR=${!outputLib}/share/desktop-directories" - cmakeFlags+=" -DKDE_INSTALL_MIMEDIR=${!outputLib}/share/mime/packages" - cmakeFlags+=" -DKDE_INSTALL_METAINFODIR=${!outputLib}/share/appdata" - cmakeFlags+=" -DKDE_INSTALL_MANDIR=${!outputLib}/share/man" - cmakeFlags+=" -DKDE_INSTALL_INFODIR=${!outputLib}/share/info" - cmakeFlags+=" -DKDE_INSTALL_DBUSDIR=${!outputLib}/share/dbus-1" - cmakeFlags+=" -DKDE_INSTALL_DBUSINTERFACEDIR=${!outputLib}/share/dbus-1/interfaces" - cmakeFlags+=" -DKDE_INSTALL_DBUSSERVICEDIR=${!outputLib}/share/dbus-1/services" - cmakeFlags+=" -DKDE_INSTALL_DBUSSYSTEMSERVICEDIR=${!outputLib}/share/dbus-1/system-services" - cmakeFlags+=" -DKDE_INSTALL_SYSCONFDIR=${!outputLib}/etc" - cmakeFlags+=" -DKDE_INSTALL_CONFDIR=${!outputLib}/etc/xdg" - cmakeFlags+=" -DKDE_INSTALL_AUTOSTARTDIR=${!outputLib}/etc/xdg/autostart" + cmakeFlags+=" -DKDE_INSTALL_DATAROOTDIR=${!outputBin}/share" + cmakeFlags+=" -DKDE_INSTALL_DATADIR=${!outputBin}/share" + cmakeFlags+=" -DKDE_INSTALL_DOCBUNDLEDIR=${!outputBin}/share/doc/HTML" + cmakeFlags+=" -DKDE_INSTALL_KCFGDIR=${!outputBin}/share/config.kcfg" + cmakeFlags+=" -DKDE_INSTALL_KCONFUPDATEDIR=${!outputBin}/share/kconf_update" + cmakeFlags+=" -DKDE_INSTALL_KSERVICES5DIR=${!outputBin}/share/kservices5" + cmakeFlags+=" -DKDE_INSTALL_KSERVICETYPES5DIR=${!outputBin}/share/kservicetypes5" + cmakeFlags+=" -DKDE_INSTALL_KXMLGUI5DIR=${!outputBin}/share/kxmlgui5" + cmakeFlags+=" -DKDE_INSTALL_KNOTIFY5RCDIR=${!outputBin}/share/knotifications5" + cmakeFlags+=" -DKDE_INSTALL_ICONDIR=${!outputBin}/share/icons" + cmakeFlags+=" -DKDE_INSTALL_LOCALEDIR=${!outputBin}/share/locale" + cmakeFlags+=" -DKDE_INSTALL_SOUNDDIR=${!outputBin}/share/sounds" + cmakeFlags+=" -DKDE_INSTALL_TEMPLATEDIR=${!outputBin}/share/templates" + cmakeFlags+=" -DKDE_INSTALL_WALLPAPERDIR=${!outputBin}/share/wallpapers" + cmakeFlags+=" -DKDE_INSTALL_APPDIR=${!outputBin}/share/applications" + cmakeFlags+=" -DKDE_INSTALL_DESKTOPDIR=${!outputBin}/share/desktop-directories" + cmakeFlags+=" -DKDE_INSTALL_MIMEDIR=${!outputBin}/share/mime/packages" + cmakeFlags+=" -DKDE_INSTALL_METAINFODIR=${!outputBin}/share/appdata" + cmakeFlags+=" -DKDE_INSTALL_MANDIR=${!outputBin}/share/man" + cmakeFlags+=" -DKDE_INSTALL_INFODIR=${!outputBin}/share/info" + cmakeFlags+=" -DKDE_INSTALL_DBUSDIR=${!outputBin}/share/dbus-1" + cmakeFlags+=" -DKDE_INSTALL_DBUSINTERFACEDIR=${!outputBin}/share/dbus-1/interfaces" + cmakeFlags+=" -DKDE_INSTALL_DBUSSERVICEDIR=${!outputBin}/share/dbus-1/services" + cmakeFlags+=" -DKDE_INSTALL_DBUSSYSTEMSERVICEDIR=${!outputBin}/share/dbus-1/system-services" + cmakeFlags+=" -DKDE_INSTALL_SYSCONFDIR=${!outputBin}/etc" + cmakeFlags+=" -DKDE_INSTALL_CONFDIR=${!outputBin}/etc/xdg" + cmakeFlags+=" -DKDE_INSTALL_AUTOSTARTDIR=${!outputBin}/etc/xdg/autostart" } preConfigureHooks+=(_ecmConfig) |