Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
97 lines
3.5 KiB
Bash
97 lines
3.5 KiB
Bash
# SPDX-License-Identifier: MIT
|
|
# SPDX-FileCopyrightText: Lily Foster <lily@lily.flowers>
|
|
# Portions of this code are adapted from nixos-cosmic
|
|
# https://github.com/lilyinstarlight/nixos-cosmic
|
|
|
|
# shellcheck shell=bash
|
|
libcosmicAppWrapperArgs=()
|
|
|
|
libcosmicAppVergenHook() {
|
|
if [ -z "${VERGEN_GIT_COMMIT_DATE-}" ]; then
|
|
# shellcheck disable=SC2155
|
|
export VERGEN_GIT_COMMIT_DATE="$(date --utc --date=@"$SOURCE_DATE_EPOCH" '+%Y-%m-%d')"
|
|
fi
|
|
}
|
|
|
|
libcosmicAppLinkerArgsHook() {
|
|
# Force linking to certain libraries like libEGL, which are always dlopen()ed
|
|
local flags="CARGO_TARGET_@cargoLinkerVar@_RUSTFLAGS"
|
|
|
|
export "$flags"="${!flags-} -C link-arg=-Wl,--push-state,--no-as-needed"
|
|
# shellcheck disable=SC2043
|
|
for lib in @cargoLinkLibs@; do
|
|
export "$flags"="${!flags} -C link-arg=-l${lib}"
|
|
done
|
|
export "$flags"="${!flags} -C link-arg=-Wl,--pop-state"
|
|
}
|
|
|
|
preConfigurePhases+=" libcosmicAppVergenHook libcosmicAppLinkerArgsHook"
|
|
|
|
# Add shell hook for use in dev shells
|
|
if [ -n "${IN_NIX_SHELL-}" ] && [ -z "${shellHook-}" ]; then
|
|
shellHook="libcosmicAppLinkerArgsHook && export RUSTFLAGS=\$CARGO_TARGET_@cargoLinkerVar@_RUSTFLAGS CARGO_TARGET_@cargoLinkerVar@_RUSTFLAGS="
|
|
fi
|
|
|
|
libcosmicAppWrapperArgsHook() {
|
|
if [ -d "${prefix:?}/share" ]; then
|
|
libcosmicAppWrapperArgs+=(--suffix XDG_DATA_DIRS : "$prefix/share")
|
|
fi
|
|
|
|
# add fallback schemas, icons, and settings paths
|
|
libcosmicAppWrapperArgs+=(--suffix XDG_DATA_DIRS : "@fallbackXdgDirs@")
|
|
}
|
|
|
|
preFixupPhases+=" libcosmicAppWrapperArgsHook"
|
|
|
|
wrapLibcosmicApp() {
|
|
local program="$1"
|
|
shift 1
|
|
wrapProgram "$program" "${libcosmicAppWrapperArgs[@]}" "$@"
|
|
}
|
|
|
|
# Note: $libcosmicAppWrapperArgs still gets defined even if ${dontWrapLibcosmicApp-} is set
|
|
libcosmicAppWrapHook() {
|
|
# guard against running multiple times (e.g. due to propagation)
|
|
[ -z "$libcosmicAppWrapHookHasRun" ] || return 0
|
|
libcosmicAppWrapHookHasRun=1
|
|
|
|
if [[ -z "${dontWrapLibcosmicApp:-}" ]]; 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}'"
|
|
wrapLibcosmicApp "${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'"
|
|
wrapLibcosmicApp "${linkPath}"
|
|
done
|
|
fi
|
|
fi
|
|
}
|
|
|
|
fixupOutputHooks+=(libcosmicAppWrapHook)
|