97 lines
3.2 KiB
Bash
97 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
|