From 3c1563f49da173948f5150619233a97277a267e0 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 10 Sep 2019 07:11:53 +0200 Subject: [PATCH 1/5] wrapGAppsHook: add wrapGApp helper --- doc/languages-frameworks/gnome.xml | 10 ++++++++++ pkgs/build-support/setup-hooks/wrap-gapps-hook.sh | 10 ++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/doc/languages-frameworks/gnome.xml b/doc/languages-frameworks/gnome.xml index 9e0f21a6c74..e9310d7c1ae 100644 --- a/doc/languages-frameworks/gnome.xml +++ b/doc/languages-frameworks/gnome.xml @@ -258,6 +258,16 @@ mkDerivation { + + + I need to wrap a binary outside bin and libexec directories. + + + + You can manually trigger the wrapping with wrapGApp in preFixup phase. It takes a path to a program as a first argument; the remaining arguments are passed directly to wrapProgram function. + + + diff --git a/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh b/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh index 906b1db9d10..26a1107b85f 100644 --- a/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh +++ b/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh @@ -8,6 +8,12 @@ find_gio_modules() { addEnvHooks "$targetOffset" find_gio_modules +wrapGApp() { + local program="$1" + shift 1 + wrapProgram "$program" "${gappsWrapperArgs[@]}" "$@" +} + # Note: $gappsWrapperArgs still gets defined even if $dontWrapGApps is set. wrapGAppsHook() { # guard against running multiple times (e.g. due to propagation) @@ -52,7 +58,7 @@ wrapGAppsHook() { find "${targetDir}" -type f -executable -print0 \ | while IFS= read -r -d '' file; do echo "Wrapping program '${file}'" - wrapProgram "${file}" "${gappsWrapperArgs[@]}" + wrapGApp "${file}" done fi done @@ -71,7 +77,7 @@ wrapGAppsHook() { fi done echo "Wrapping link: '$linkPath'" - wrapProgram "${linkPath}" "${gappsWrapperArgs[@]}" + wrapGApp "${linkPath}" done fi fi From c54ba9aec997005fd41305a4b44b8cd35fea20ce Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 10 Sep 2019 07:12:31 +0200 Subject: [PATCH 2/5] wrapGAppsHook: simplify taking env vars using indirect variable access must be better than eval --- pkgs/build-support/setup-hooks/wrap-gapps-hook.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh b/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh index 26a1107b85f..98e2ec9c2e5 100644 --- a/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh +++ b/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh @@ -41,8 +41,7 @@ wrapGAppsHook() { fi for v in $wrapPrefixVariables GST_PLUGIN_SYSTEM_PATH_1_0 GI_TYPELIB_PATH GRL_PLUGIN_PATH; do - eval local dummy="\$$v" - gappsWrapperArgs+=(--prefix $v : "$dummy") + gappsWrapperArgs+=(--prefix $v : "${!v}") done if [[ -z "$dontWrapGApps" ]]; then From f2718dbbc028dfcf323b61ea321badb30e972a0b Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 10 Sep 2019 07:15:37 +0200 Subject: [PATCH 3/5] wrapGAppsHook: address some shellcheck suggestions These should not cause issues in practice but it is good idea to handle them. * prefix and targetOffset are mandatory, as they are always set by the generic builder. * wrapPrefixVariables and dontWrapGApps are now defaulting to empty value, as they are not mandatory. --- pkgs/build-support/setup-hooks/wrap-gapps-hook.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh b/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh index 98e2ec9c2e5..717740f1f20 100644 --- a/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh +++ b/pkgs/build-support/setup-hooks/wrap-gapps-hook.sh @@ -1,12 +1,13 @@ +# shellcheck shell=bash gappsWrapperArgs=() find_gio_modules() { - if [ -d "$1"/lib/gio/modules ] && [ -n "$(ls -A $1/lib/gio/modules)" ] ; then + if [ -d "$1/lib/gio/modules" ] && [ -n "$(ls -A "$1/lib/gio/modules")" ] ; then gappsWrapperArgs+=(--prefix GIO_EXTRA_MODULES : "$1/lib/gio/modules") fi } -addEnvHooks "$targetOffset" find_gio_modules +addEnvHooks "${targetOffset:?}" find_gio_modules wrapGApp() { local program="$1" @@ -32,19 +33,19 @@ wrapGAppsHook() { gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH") fi - if [ -d "$prefix/share" ]; then + if [ -d "${prefix:?}/share" ]; then gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$prefix/share") fi - if [ -d "$prefix/lib/gio/modules" ] && [ -n "$(ls -A $prefix/lib/gio/modules)" ] ; then + if [ -d "$prefix/lib/gio/modules" ] && [ -n "$(ls -A "$prefix/lib/gio/modules")" ] ; then gappsWrapperArgs+=(--prefix GIO_EXTRA_MODULES : "$prefix/lib/gio/modules") fi - for v in $wrapPrefixVariables GST_PLUGIN_SYSTEM_PATH_1_0 GI_TYPELIB_PATH GRL_PLUGIN_PATH; do - gappsWrapperArgs+=(--prefix $v : "${!v}") + for v in ${wrapPrefixVariables:-} GST_PLUGIN_SYSTEM_PATH_1_0 GI_TYPELIB_PATH GRL_PLUGIN_PATH; do + gappsWrapperArgs+=(--prefix "$v" : "${!v}") done - if [[ -z "$dontWrapGApps" ]]; then + if [[ -z "${dontWrapGApps:-}" ]]; then targetDirsThatExist=() targetDirsRealPath=() From 9d152886ab7276d1c229133c15be170486f78cdd Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 10 Sep 2019 07:47:11 +0200 Subject: [PATCH 4/5] nixos/doc/gnome: fix example --- doc/languages-frameworks/gnome.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/languages-frameworks/gnome.xml b/doc/languages-frameworks/gnome.xml index e9310d7c1ae..8b3151d5bf9 100644 --- a/doc/languages-frameworks/gnome.xml +++ b/doc/languages-frameworks/gnome.xml @@ -210,7 +210,7 @@ mkDerivation { dontWrapGApps = true; # Arguments to be passed to `makeWrapper`, only used by qt5’s mkDerivation - qtWrapperArgs [ + qtWrapperArgs = [ "\${gappsWrapperArgs[@]}" ]; } From 9b6789de7386edd9e7d199a8e15cb1c3c1f026b3 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 10 Sep 2019 08:13:10 +0200 Subject: [PATCH 5/5] tree-wide: replace wrapProgram with wrapGApp where appropriate --- pkgs/applications/graphics/gnome-photos/default.nix | 2 +- pkgs/applications/misc/mysql-workbench/default.nix | 4 ++-- pkgs/applications/science/electronics/kicad/default.nix | 2 +- pkgs/desktops/deepin/dde-daemon/default.nix | 2 +- pkgs/desktops/gnome-3/apps/gnome-characters/default.nix | 2 +- pkgs/desktops/gnome-3/extensions/gsconnect/default.nix | 4 ++-- pkgs/os-specific/linux/firmware/fwupd/default.nix | 6 +++--- pkgs/tools/graphics/zbar/default.nix | 4 +++- 8 files changed, 14 insertions(+), 12 deletions(-) diff --git a/pkgs/applications/graphics/gnome-photos/default.nix b/pkgs/applications/graphics/gnome-photos/default.nix index f591dd5a60d..ea4cf986f39 100644 --- a/pkgs/applications/graphics/gnome-photos/default.nix +++ b/pkgs/applications/graphics/gnome-photos/default.nix @@ -102,7 +102,7 @@ stdenv.mkDerivation rec { ''; postFixup = '' - wrapProgram "${placeholder "installedTests"}/libexec/installed-tests/gnome-photos/basic.py" "''${gappsWrapperArgs[@]}" + wrapGApp "${placeholder "installedTests"}/libexec/installed-tests/gnome-photos/basic.py" ''; passthru = { diff --git a/pkgs/applications/misc/mysql-workbench/default.nix b/pkgs/applications/misc/mysql-workbench/default.nix index 172f999223a..135745feec3 100644 --- a/pkgs/applications/misc/mysql-workbench/default.nix +++ b/pkgs/applications/misc/mysql-workbench/default.nix @@ -85,8 +85,8 @@ in stdenv.mkDerivation rec { find -L "$out/bin" -type f -executable -print0 \ | while IFS= read -r -d ''' file; do if [[ "''${file}" != *-bin ]]; then - echo "Wrapping program ''${file}" - wrapProgram "''${file}" "''${gappsWrapperArgs[@]}" + echo "Wrapping program $file" + wrapGApp "$file" fi done ''; diff --git a/pkgs/applications/science/electronics/kicad/default.nix b/pkgs/applications/science/electronics/kicad/default.nix index 3d169f50104..ac9362990a8 100644 --- a/pkgs/applications/science/electronics/kicad/default.nix +++ b/pkgs/applications/science/electronics/kicad/default.nix @@ -107,7 +107,7 @@ in stdenv.mkDerivation rec { buildPythonPath "$out $pythonPath" gappsWrapperArgs+=(--set PYTHONPATH "$program_PYTHONPATH") - wrapProgram "$out/bin/kicad" "''${gappsWrapperArgs[@]}" + wrapGApp "$out/bin/kicad" ''; meta = { diff --git a/pkgs/desktops/deepin/dde-daemon/default.nix b/pkgs/desktops/deepin/dde-daemon/default.nix index 19089a6b050..da217186e27 100644 --- a/pkgs/desktops/deepin/dde-daemon/default.nix +++ b/pkgs/desktops/deepin/dde-daemon/default.nix @@ -115,7 +115,7 @@ buildGoPackage rec { postFixup = '' # wrapGAppsHook does not work with binaries outside of $out/bin or $out/libexec for binary in $out/lib/deepin-daemon/*; do - wrapProgram $binary "''${gappsWrapperArgs[@]}" + wrapGApp "$binary" done searchHardCodedPaths $out # debugging diff --git a/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix b/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix index ac1e9ee85c0..9e44573d2e3 100644 --- a/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix +++ b/pkgs/desktops/gnome-3/apps/gnome-characters/default.nix @@ -64,7 +64,7 @@ stdenv.mkDerivation rec { sed -e $"2iimports.package._findEffectiveEntryPointName = () => \'$(basename $file)\' " \ -i $file - wrapProgram $file "''${gappsWrapperArgs[@]}" + wrapGApp "$file" done ''; diff --git a/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix b/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix index cff0db665bb..cef00513df1 100644 --- a/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix +++ b/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix @@ -76,8 +76,8 @@ stdenv.mkDerivation rec { postFixup = '' # Let’s wrap the daemons for file in $out/share/gnome-shell/extensions/gsconnect@andyholmes.github.io/service/{{daemon,nativeMessagingHost}.js,components/folks.py}; do - echo "Wrapping program ''${file}" - wrapProgram "''${file}" "''${gappsWrapperArgs[@]}" + echo "Wrapping program $file" + wrapGApp "$file" done ''; diff --git a/pkgs/os-specific/linux/firmware/fwupd/default.nix b/pkgs/os-specific/linux/firmware/fwupd/default.nix index 9fdf9ca0bc1..75144799d01 100644 --- a/pkgs/os-specific/linux/firmware/fwupd/default.nix +++ b/pkgs/os-specific/linux/firmware/fwupd/default.nix @@ -237,9 +237,9 @@ stdenv.mkDerivation rec { postFixup = '' find -L "$out/bin" "$out/libexec" -type f -executable -print0 \ | while IFS= read -r -d ''' file; do - if [[ "''${file}" != *.efi ]]; then - echo "Wrapping program ''${file}" - wrapProgram "''${file}" "''${gappsWrapperArgs[@]}" + if [[ "$file" != *.efi ]]; then + echo "Wrapping program $file" + wrapGApp "$file" fi done ''; diff --git a/pkgs/tools/graphics/zbar/default.nix b/pkgs/tools/graphics/zbar/default.nix index cb5ea25211c..e2b9f534ae5 100644 --- a/pkgs/tools/graphics/zbar/default.nix +++ b/pkgs/tools/graphics/zbar/default.nix @@ -8,6 +8,7 @@ , qtbase , qtx11extras , wrapQtAppsHook +, wrapGAppsHook , gtk3 , xmlto , docbook_xsl @@ -36,6 +37,7 @@ stdenv.mkDerivation rec { autoreconfHook docbook_xsl wrapQtAppsHook + wrapGAppsHook ]; buildInputs = [ @@ -68,7 +70,7 @@ stdenv.mkDerivation rec { dontWrapGApps = true; postFixup = lib.optionalString enableVideo '' - wrapProgram "$out/bin/zbarcam-gtk" "''${gappsWrapperArgs[@]}" + wrapGApp "$out/bin/zbarcam-gtk" wrapQtApp "$out/bin/zbarcam-qt" '';