From 6034ebb9ff1c4694fc8ac31ddef76e3590d08241 Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Wed, 10 May 2023 22:26:38 +0300 Subject: [PATCH] gprbuild: fix rpath only when targeting darwin --- .../tools/build-managers/gprbuild/boot.nix | 9 ++++++++- .../tools/build-managers/gprbuild/default.nix | 2 +- .../gprbuild/gpr-project-darwin-rpath-hook.sh | 10 ++++++++++ .../gprbuild/gpr-project-path-hook.sh | 13 ------------- 4 files changed, 19 insertions(+), 15 deletions(-) create mode 100644 pkgs/development/tools/build-managers/gprbuild/gpr-project-darwin-rpath-hook.sh diff --git a/pkgs/development/tools/build-managers/gprbuild/boot.nix b/pkgs/development/tools/build-managers/gprbuild/boot.nix index 795bb4407d58..9cdfb27c8893 100644 --- a/pkgs/development/tools/build-managers/gprbuild/boot.nix +++ b/pkgs/development/tools/build-managers/gprbuild/boot.nix @@ -53,7 +53,14 @@ stdenv.mkDerivation { # introducing a wrapper for it in the future remains TODO. # For the moment this doesn't matter since we have no situation # were gprbuild is used to build something used at build time. - setupHook = ./gpr-project-path-hook.sh; + setupHooks = [ + ./gpr-project-path-hook.sh + ] ++ lib.optionals stdenv.targetPlatform.isDarwin [ + # This setupHook replaces the paths of shared libraries starting + # with @rpath with the absolute paths on Darwin, so that the + # binaries can be run without additional setup. + ./gpr-project-darwin-rpath-hook.sh + ]; installPhase = '' runHook preInstall diff --git a/pkgs/development/tools/build-managers/gprbuild/default.nix b/pkgs/development/tools/build-managers/gprbuild/default.nix index 3155151ae0f8..5b3d45bf62d5 100644 --- a/pkgs/development/tools/build-managers/gprbuild/default.nix +++ b/pkgs/development/tools/build-managers/gprbuild/default.nix @@ -17,7 +17,7 @@ stdenv.mkDerivation { inherit (gprbuild-boot) version src - setupHook + setupHooks meta ; diff --git a/pkgs/development/tools/build-managers/gprbuild/gpr-project-darwin-rpath-hook.sh b/pkgs/development/tools/build-managers/gprbuild/gpr-project-darwin-rpath-hook.sh new file mode 100644 index 000000000000..73be2eb5960a --- /dev/null +++ b/pkgs/development/tools/build-managers/gprbuild/gpr-project-darwin-rpath-hook.sh @@ -0,0 +1,10 @@ +fixGprProjectDarwinRpath() { + for f in $(find $out -type f -executable); do + install_name_tool -id $f $f || true + for rpath in $(otool -L $f | grep @rpath | awk '{print $1}'); do + install_name_tool -change $rpath ${!outputLib}/lib/$(basename $rpath) $f || true + done + done +} + +preFixupPhases+=" fixGprProjectDarwinRpath" diff --git a/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh b/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh index bd562b925e22..f98b2ab9e58d 100644 --- a/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh +++ b/pkgs/development/tools/build-managers/gprbuild/gpr-project-path-hook.sh @@ -6,16 +6,3 @@ addAdaObjectsPath() { } addEnvHooks "$targetOffset" addAdaObjectsPath - -fixDarwinRpath() { - for f in $(find $out -type f -executable); do - install_name_tool -id $f $f || true - for rpath in $(otool -L $f | grep rpath | awk '{print $1}'); do - install_name_tool -change $rpath $out/lib/$(basename $rpath) $f || true - done - done -} - -if [ "$(uname)" = "Darwin" ]; then - preFixupPhases+=" fixDarwinRpath" -fi