nixpkgs/pkgs/desktops/gnustep/wrapGNUstepAppsHook.sh
2024-03-03 20:15:34 +01:00

96 lines
3.2 KiB
Bash

if [[ -z "${__nix_wrapGNUstepAppsHook-}" ]]; then
__nix_wrapGNUstepAppsHook=1 # Don't run this hook more than once.
# Inherit arguments given in mkDerivation
gnustepWrapperArgs=(${gnustepWrapperArgs-})
gnustepConfigVars+=(
GNUSTEP_MAKEFILES
NIX_GNUSTEP_SYSTEM_APPS
NIX_GNUSTEP_SYSTEM_ADMIN_APPS
NIX_GNUSTEP_SYSTEM_WEB_APPS
NIX_GNUSTEP_SYSTEM_TOOLS
NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS
NIX_GNUSTEP_SYSTEM_LIBRARY
NIX_GNUSTEP_SYSTEM_HEADERS
NIX_GNUSTEP_SYSTEM_LIBRARIES
NIX_GNUSTEP_SYSTEM_DOC
NIX_GNUSTEP_SYSTEM_DOC_MAN
NIX_GNUSTEP_SYSTEM_DOC_INFO
)
wrapGNUstepApp() {
wrapProgram "$1" \
--set GNUSTEP_CONFIG_FILE "$out/GNUstep.conf" \
"${gnustepWrapperArgs[@]}"
}
ensureGNUstepConfig() (
if [[ -f "$out/GNUstep.conf" ]]; then
return
fi
echo "writing GNUstep config file"
gsAddToSearchPath() {
if [[ -d "$2" && "${!1-}" != *"$2"* ]]; then
addToSearchPath "$1" "$2"
fi
}
gsAddToIncludeSearchPath() {
local -n ref="$1"
if [[ -d "$2" && "${ref-}" != *"$2"* ]]; then
if [[ "${ref-}" != "" ]]; then
ref+=" "
fi
ref+="$2"
fi
}
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_APPS "$out/lib/GNUstep/Applications"
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_APPS "$out/lib/GNUstep/Applications"
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_WEB_APPS "$out/lib/GNUstep/WebApplications"
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_TOOLS "$out/bin"
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_ADMIN_TOOLS "$out/sbin"
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARY "$out/lib/GNUstep"
gsAddToIncludeSearchPath NIX_GNUSTEP_SYSTEM_HEADERS "$out/include"
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_LIBRARIES "$out/lib"
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_DOC "$out/share/GNUstep/Documentation"
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_DOC_MAN "$out/share/man"
gsAddToSearchPath NIX_GNUSTEP_SYSTEM_DOC_INFO "$out/share/info"
for var in "${gnustepConfigVars[@]}"; do
if [[ -n "${!var-}" ]]; then
printf '%s="%s"\n' "$var" "${!var}"
fi
done > "$out/GNUstep.conf"
)
# Note: $gnustepWrapperArgs still gets defined even if ${dontWrapGNUstepApps-} is set.
wrapGNUstepAppsHook() {
# skip this hook when requested
[[ -z "${dontWrapGNUstepApps-}" ]] || return 0
# guard against running multiple times (e.g. due to propagation)
[[ -z "$wrapGNUstepAppsHookHasRun" ]] || return 0
wrapGNUstepAppsHookHasRun=1
local targetDirs=("$prefix/bin")
echo "wrapping GNUstep applications in ${targetDirs[@]}"
for targetDir in "${targetDirs[@]}"; do
[[ -d "$targetDir" ]] || continue
while IFS= read -r -d '' file; do
ensureGNUstepConfig
echo "wrapping $file"
wrapGNUstepApp "$file"
done < <(find "$targetDir" ! -type d -executable -print0)
done
}
fixupOutputHooks+=(wrapGNUstepAppsHook)
fi