mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-28 00:24:18 +00:00
2c8c8f2961
Adding empty variables can lead to this problem: ```diff wrapProgram \ ./pye_menu_shell \ --prefix PATH : /nix/store/4c3z5r6yxsf2cxwwyazhdn92xixn4j5b-python3-3.7.5/bin:/nix/store/b3l3niilvqcxcsbxmd6sgqk1dy1rk81c-pye-menu-1.0/bin:/nix/store/y8j1cfj8d9r5rbbxc22w7hnfjw5f4fd3-cairo-1.16.0-dev/bin:/nix/store/6mg7lfbdh9pgx7pbxr3544qqbrigdl1q-freetype-2.10.1-dev/bin:/nix/store/gpszqcy0xi0lavbbjdq82zkkjp3jbp2a-bzip2-1.0.6.0.1-bin/bin:/nix/store/031c5pk5lzabgmpqpyd46hzi625as6bp-libpng-apng-1.6.37-dev/bin:/nix/store/f8kl7kmpv130aw9zm542p74a3hg0yc13-fontconfig-2.12.6-bin/bin:/nix/store/bqp30vkncmm222mjvwggz0s7p318sflj-expat-2.2.7-dev/bin:/nix/store/w57xa8g4s4aviwmqwgra7m5hwj2b005m-glib-2.60.7-dev/bin:/nix/store/v5d4966ahvfir2hwpv003022f3pb7vik-gettext-0.19.8.1/bin:/nix/store/qpvxhl1jr0fxnrx9idnpdagqs00m5m2z-glib-2.60.7/bin \ --set PYTHONNOUSERSITE true \ --set GDK_PIXBUF_MODULE_FILE /nix/store/7ddlakx6xjczqbfs80xjd14f30fzadws-gdk-pixbuf-2.38.1/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \ --prefix XDG_DATA_DIRS : /nix/store/0snjc1qg89zqn3v35l9d55xrykh9nj5c-gtk+3-3.24.10/share/gsettings-schemas/gtk+3-3.24.10:/nix/store/b41z51vdv11n6df8ki5vj8dynxw98f9l-gsettings-desktop-schemas-3.32.0/share/gsettings-schemas/gsettings-desktop-schemas-3.32.0:/nix/store/0snjc1qg89zqn3v35l9d55xrykh9nj5c-gtk+3-3.24.10/share/gsettings-schemas/gtk+3-3.24.10 \ - --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : \ + --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "" \ --prefix GI_TYPELIB_PATH : /nix/store/0snjc1qg89zqn3v35l9d55xrykh9nj5c-gtk+3-3.24.10/lib/girepository-1.0:/nix/store/z29l5xaaxh1s0697mcldj71ab0zshry1-librsvg-2.44.15/lib/girepository-1.0:/nix/store/pija1xzm7izxfb5m2hvhvlwp1l38ffxa-gobject-introspection-1.60.2/lib/girepository-1.0 \ - --prefix GRL_PLUGIN_PATH : + --prefix GRL_PLUGIN_PATH : "" ``` Where the diff is to highlight the problem: we don't have a valid value for GST_PLUGIN_SYSTEM_PATH_1_0 or GRL_PLUGIN_PATH, and instead of passing the empy string, the empty string gets unquoted somewhere, so we end up passing no arguments, thus the parser in wrapProgram takes --prefix as the argument of GST_PLUGIN_SYSTEM_PATH_1_0, and then GI_TYPELIB_PATH is missing it's --prefix so wrapProgram complains/dies. The easiest change is to not add empty arguments to the wrapper
89 lines
2.7 KiB
Bash
89 lines
2.7 KiB
Bash
# shellcheck shell=bash
|
|
gappsWrapperArgs=()
|
|
|
|
find_gio_modules() {
|
|
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
|
|
|
|
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)
|
|
[ -z "$wrapGAppsHookHasRun" ] || return 0
|
|
wrapGAppsHookHasRun=1
|
|
|
|
if [ -n "$GDK_PIXBUF_MODULE_FILE" ]; then
|
|
gappsWrapperArgs+=(--set GDK_PIXBUF_MODULE_FILE "$GDK_PIXBUF_MODULE_FILE")
|
|
fi
|
|
|
|
if [ -n "$XDG_ICON_DIRS" ]; then
|
|
gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS")
|
|
fi
|
|
|
|
if [ -n "$GSETTINGS_SCHEMAS_PATH" ]; then
|
|
gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH")
|
|
fi
|
|
|
|
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
|
|
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
|
|
if [ -n "${!v}" ]; then
|
|
gappsWrapperArgs+=(--prefix "$v" : "${!v}")
|
|
fi
|
|
done
|
|
|
|
if [[ -z "${dontWrapGApps:-}" ]]; then
|
|
targetDirsThatExist=()
|
|
targetDirsRealPath=()
|
|
|
|
# wrap binaries
|
|
targetDirs=( "${prefix}/bin" "${prefix}/libexec" )
|
|
for targetDir in "${targetDirs[@]}"; do
|
|
if [[ -d "${targetDir}" ]]; then
|
|
targetDirsThatExist+=("${targetDir}")
|
|
targetDirsRealPath+=("$(realpath "${targetDir}")/")
|
|
find "${targetDir}" -type f -executable -print0 \
|
|
| while IFS= read -r -d '' file; do
|
|
echo "Wrapping program '${file}'"
|
|
wrapGApp "${file}"
|
|
done
|
|
fi
|
|
done
|
|
|
|
# wrap links to binaries that point outside targetDirs
|
|
# Note: links to binaries within targetDirs do not need
|
|
# to be wrapped as the binaries have already been wrapped
|
|
if [[ ${#targetDirsThatExist[@]} -ne 0 ]]; then
|
|
find "${targetDirsThatExist[@]}" -type l -xtype f -executable -print0 \
|
|
| while IFS= read -r -d '' linkPath; do
|
|
linkPathReal=$(realpath "${linkPath}")
|
|
for targetPath in "${targetDirsRealPath[@]}"; do
|
|
if [[ "$linkPathReal" == "$targetPath"* ]]; then
|
|
echo "Not wrapping link: '$linkPath' (already wrapped)"
|
|
continue 2
|
|
fi
|
|
done
|
|
echo "Wrapping link: '$linkPath'"
|
|
wrapGApp "${linkPath}"
|
|
done
|
|
fi
|
|
fi
|
|
}
|
|
|
|
fixupOutputHooks+=(wrapGAppsHook)
|