From 9a782cccbcf54eae063d682ac0d5eab8705050c2 Mon Sep 17 00:00:00 2001 From: Phillip Mienk Date: Tue, 13 Oct 2026 10:53:38 -0700 Subject: [PATCH 1/2] Address runpath on releases. --- .github/workflows/manual-release.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/workflows/manual-release.yml b/.github/workflows/manual-release.yml index 5bde5cf4..39ec590d 100644 --- a/.github/workflows/manual-release.yml +++ b/.github/workflows/manual-release.yml @@ -501,6 +501,7 @@ jobs: shell: bash run: > ./libbitcoin-server/builds/cmake/install-cmake.sh + -DCMAKE_SKIP_INSTALL_RPATH=${{ matrix.link == 'static' && 'ON' || 'OFF' }} --noninteractive --build-use-local-src --build-src-dir="${{ github.workspace }}" @@ -591,6 +592,28 @@ jobs: cp -L -n ${CANDIDATE} candidate/${CANONICAL} echo "candidate_identifier=${CANONICAL}" >> "$GITHUB_OUTPUT" + - name: Remove embedded RUNPATH/RPATH + if: ${{ + matrix.link == 'static' && + matrix.toolchain != 'msbuild' && + startsWith(matrix.image, 'ubuntu') && + matrix.container == '' + }} + shell: bash + run: | + sudo apt-get install -y patchelf + find candidate -type f -executable -print0 | while IFS= read -r -d '' f; do + if file "$f" | grep -q ELF; then + echo "=== $f ===" + echo "Before:" + readelf -d "$f" | grep -E 'RPATH|RUNPATH' || echo "(none)" + # or: patchelf --print-rpath "$f" + patchelf --remove-rpath "$f" || true + echo "After:" + readelf -d "$f" | grep -E 'RPATH|RUNPATH' || echo "(none)" + fi + done + - name: Strip symbols from binaries if: ${{ matrix.configuration != 'debug' && matrix.toolchain != 'msbuild' }} shell: bash From cf80aa52b8aef3afd882e22564a19a547575b2f6 Mon Sep 17 00:00:00 2001 From: Phillip Mienk Date: Tue, 13 Oct 2026 15:19:07 -0700 Subject: [PATCH 2/2] Regenerate to mitigate LD_* assignment related to RPATH. --- builds/cmake/install-cmake.sh | 20 +++++++++++--------- builds/cmake/install-presets.sh | 20 +++++++++++--------- builds/gnu/install-gnu.sh | 20 +++++++++++--------- 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/builds/cmake/install-cmake.sh b/builds/cmake/install-cmake.sh index 19615241..a150bb4b 100755 --- a/builds/cmake/install-cmake.sh +++ b/builds/cmake/install-cmake.sh @@ -285,16 +285,18 @@ main() msg_verbose "No --prefix specified, defaulting to '${PREFIX}'." else # Incorporate the custom libdir into each object, for link time resolution - if [[ -z "${LD_RUN_PATH}" ]]; then - export LD_RUN_PATH="${PREFIX}/lib" - else - export LD_RUN_PATH="${LD_RUN_PATH}:${PREFIX}/lib" - fi + if [[ "${BUILD_LINK}" == "dynamic" ]]; then + if [[ -z "${LD_RUN_PATH}" ]]; then + export LD_RUN_PATH="${PREFIX}/lib" + else + export LD_RUN_PATH="${LD_RUN_PATH}:${PREFIX}/lib" + fi - if [[ -z "${LD_LIBRARY_PATH}" ]]; then - export LD_LIBRARY_PATH="${PREFIX}/lib" - else - export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PREFIX}/lib" + if [[ -z "${LD_LIBRARY_PATH}" ]]; then + export LD_LIBRARY_PATH="${PREFIX}/lib" + else + export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PREFIX}/lib" + fi fi fi diff --git a/builds/cmake/install-presets.sh b/builds/cmake/install-presets.sh index 02a82c1d..a308a11a 100755 --- a/builds/cmake/install-presets.sh +++ b/builds/cmake/install-presets.sh @@ -301,16 +301,18 @@ main() msg_verbose "No --prefix specified, defaulting to '${PREFIX}'." else # Incorporate the custom libdir into each object, for link time resolution - if [[ -z "${LD_RUN_PATH}" ]]; then - export LD_RUN_PATH="${PREFIX}/lib" - else - export LD_RUN_PATH="${LD_RUN_PATH}:${PREFIX}/lib" - fi + if [[ "${BUILD_LINK}" == "dynamic" ]]; then + if [[ -z "${LD_RUN_PATH}" ]]; then + export LD_RUN_PATH="${PREFIX}/lib" + else + export LD_RUN_PATH="${LD_RUN_PATH}:${PREFIX}/lib" + fi - if [[ -z "${LD_LIBRARY_PATH}" ]]; then - export LD_LIBRARY_PATH="${PREFIX}/lib" - else - export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PREFIX}/lib" + if [[ -z "${LD_LIBRARY_PATH}" ]]; then + export LD_LIBRARY_PATH="${PREFIX}/lib" + else + export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PREFIX}/lib" + fi fi fi diff --git a/builds/gnu/install-gnu.sh b/builds/gnu/install-gnu.sh index 67986e7e..7e36541c 100755 --- a/builds/gnu/install-gnu.sh +++ b/builds/gnu/install-gnu.sh @@ -286,16 +286,18 @@ main() msg_verbose "No --prefix specified, defaulting to '${PREFIX}'." else # Incorporate the custom libdir into each object, for link time resolution - if [[ -z "${LD_RUN_PATH}" ]]; then - export LD_RUN_PATH="${PREFIX}/lib" - else - export LD_RUN_PATH="${LD_RUN_PATH}:${PREFIX}/lib" - fi + if [[ "${BUILD_LINK}" == "dynamic" ]]; then + if [[ -z "${LD_RUN_PATH}" ]]; then + export LD_RUN_PATH="${PREFIX}/lib" + else + export LD_RUN_PATH="${LD_RUN_PATH}:${PREFIX}/lib" + fi - if [[ -z "${LD_LIBRARY_PATH}" ]]; then - export LD_LIBRARY_PATH="${PREFIX}/lib" - else - export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PREFIX}/lib" + if [[ -z "${LD_LIBRARY_PATH}" ]]; then + export LD_LIBRARY_PATH="${PREFIX}/lib" + else + export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PREFIX}/lib" + fi fi fi