From 7492a9f55e8600d691d35b3c91aed9a545a32b97 Mon Sep 17 00:00:00 2001 From: Kajus Naujokaitis Date: Mon, 29 Jun 2026 11:06:34 +0300 Subject: [PATCH] libcosmicAppHook: fix wrapping skipped when separateDebugInfo = true With separateDebugInfo, fixupOutputHooks runs the hook for the debug output first, which has no bin/libexec, then the old boolean guard causes the real output to be skipped entirely. Switch to a per-prefix guard so each output is processed independently, while still preventing duplicate runs for the same prefix. Also adds debug logging throughout the hook to make future diagnosis easier. Signed-off-by: Kajus Naujokaitis --- .../li/libcosmicAppHook/libcosmic-app-hook.sh | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/pkgs/by-name/li/libcosmicAppHook/libcosmic-app-hook.sh b/pkgs/by-name/li/libcosmicAppHook/libcosmic-app-hook.sh index e6a523191956..2263dd3db2ca 100644 --- a/pkgs/by-name/li/libcosmicAppHook/libcosmic-app-hook.sh +++ b/pkgs/by-name/li/libcosmicAppHook/libcosmic-app-hook.sh @@ -5,24 +5,25 @@ # shellcheck shell=bash libcosmicAppWrapperArgs=() +libcosmicAppWrapHookRanFor=() 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 + 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" + # 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" + 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" @@ -51,9 +52,18 @@ wrapLibcosmicApp() { # 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 + # guard against running multiple times for the same prefix (e.g. due to propagation) + for _ranFor in "${libcosmicAppWrapHookRanFor[@]}"; do + if [[ "$_ranFor" == "$prefix" ]]; then + echo "[libcosmicAppWrapHook] already ran for prefix='${prefix}', returning early" + return 0 + fi + done + libcosmicAppWrapHookRanFor+=("$prefix") + + echo "[libcosmicAppWrapHook] prefix='${prefix}'" + echo "[libcosmicAppWrapHook] dontWrapLibcosmicApp='${dontWrapLibcosmicApp:-}'" + echo "[libcosmicAppWrapHook] libcosmicAppWrapperArgs=(${libcosmicAppWrapperArgs[*]})" if [[ -z "${dontWrapLibcosmicApp:-}" ]]; then targetDirsThatExist=() @@ -61,35 +71,47 @@ libcosmicAppWrapHook() { # wrap binaries targetDirs=("${prefix}/bin" "${prefix}/libexec") + echo "[libcosmicAppWrapHook] checking targetDirs: ${targetDirs[*]}" for targetDir in "${targetDirs[@]}"; do + echo "[libcosmicAppWrapHook] checking targetDir='${targetDir}' exists=$([ -d "${targetDir}" ] && echo yes || echo no)" if [[ -d "${targetDir}" ]]; then targetDirsThatExist+=("${targetDir}") targetDirsRealPath+=("$(realpath "${targetDir}")/") + echo "[libcosmicAppWrapHook] finding executables in '${targetDir}'" find "${targetDir}" -type f -executable -print0 | while IFS= read -r -d '' file; do - echo "Wrapping program '${file}'" + echo "[libcosmicAppWrapHook] wrapping program '${file}'" wrapLibcosmicApp "${file}" done fi done + echo "[libcosmicAppWrapHook] targetDirsThatExist=(${targetDirsThatExist[*]})" + echo "[libcosmicAppWrapHook] targetDirsRealPath=(${targetDirsRealPath[*]})" + # 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 + echo "[libcosmicAppWrapHook] finding symlinks in targetDirs" find "${targetDirsThatExist[@]}" -type l -xtype f -executable -print0 | while IFS= read -r -d '' linkPath; do linkPathReal=$(realpath "${linkPath}") + echo "[libcosmicAppWrapHook] checking link '${linkPath}' -> '${linkPathReal}'" for targetPath in "${targetDirsRealPath[@]}"; do if [[ "$linkPathReal" == "$targetPath"* ]]; then - echo "Not wrapping link: '$linkPath' (already wrapped)" + echo "[libcosmicAppWrapHook] not wrapping link: '$linkPath' (already wrapped)" continue 2 fi done - echo "Wrapping link: '$linkPath'" + echo "[libcosmicAppWrapHook] wrapping link: '$linkPath'" wrapLibcosmicApp "${linkPath}" done + else + echo "[libcosmicAppWrapHook] no targetDirs exist, skipping symlink wrapping" fi + else + echo "[libcosmicAppWrapHook] dontWrapLibcosmicApp is set, skipping all wrapping" fi }