From 9c4fbf9cb18bc37fab7d498ac4dc586f53a90194 Mon Sep 17 00:00:00 2001 From: Matthew Bauer Date: Tue, 5 May 2020 22:23:26 -0500 Subject: [PATCH] =?UTF-8?q?gcc:=20don=E2=80=99t=20require=20"lib"=20output?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit libgccjit is a library but is used as a compiler. So it references a bunch of compiler things in $out. To avoid a cycle, we need to put everything in $out, so referenced to $lib need to be replaced with ${!outputLib}. --- pkgs/development/compilers/gcc/6/default.nix | 4 +-- pkgs/development/compilers/gcc/7/default.nix | 4 +-- pkgs/development/compilers/gcc/8/default.nix | 4 +-- pkgs/development/compilers/gcc/9/default.nix | 6 ++-- pkgs/development/compilers/gcc/builder.sh | 34 ++++++++++---------- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/pkgs/development/compilers/gcc/6/default.nix b/pkgs/development/compilers/gcc/6/default.nix index c04e424b2fa..d5bb7aa8f4a 100644 --- a/pkgs/development/compilers/gcc/6/default.nix +++ b/pkgs/development/compilers/gcc/6/default.nix @@ -147,10 +147,10 @@ stdenv.mkDerivation ({ --replace 'if (stdinc)' 'if (0)' substituteInPlace libgcc/config/t-slibgcc-darwin \ - --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name $lib/lib/\$(SHLIB_INSTALL_NAME)" + --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name ''${!outputLib}/lib/\$(SHLIB_INSTALL_NAME)" substituteInPlace libgfortran/configure \ - --replace "-install_name \\\$rpath/\\\$soname" "-install_name $lib/lib/\\\$soname" + --replace "-install_name \\\$rpath/\\\$soname" "-install_name ''${!outputLib}/lib/\\\$soname" ''; postPatch = diff --git a/pkgs/development/compilers/gcc/7/default.nix b/pkgs/development/compilers/gcc/7/default.nix index 2ae2f8e758c..59ae40e6fa0 100644 --- a/pkgs/development/compilers/gcc/7/default.nix +++ b/pkgs/development/compilers/gcc/7/default.nix @@ -105,10 +105,10 @@ stdenv.mkDerivation ({ --replace 'if (stdinc)' 'if (0)' substituteInPlace libgcc/config/t-slibgcc-darwin \ - --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name $lib/lib/\$(SHLIB_INSTALL_NAME)" + --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name ''${!outputLib}/lib/\$(SHLIB_INSTALL_NAME)" substituteInPlace libgfortran/configure \ - --replace "-install_name \\\$rpath/\\\$soname" "-install_name $lib/lib/\\\$soname" + --replace "-install_name \\\$rpath/\\\$soname" "-install_name ''${!outputLib}/lib/\\\$soname" ''; postPatch = '' diff --git a/pkgs/development/compilers/gcc/8/default.nix b/pkgs/development/compilers/gcc/8/default.nix index c2edba0ba90..ce0cf8c2540 100644 --- a/pkgs/development/compilers/gcc/8/default.nix +++ b/pkgs/development/compilers/gcc/8/default.nix @@ -97,10 +97,10 @@ stdenv.mkDerivation ({ --replace 'if (stdinc)' 'if (0)' substituteInPlace libgcc/config/t-slibgcc-darwin \ - --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name $lib/lib/\$(SHLIB_INSTALL_NAME)" + --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name ''${!outputLib}/lib/\$(SHLIB_INSTALL_NAME)" substituteInPlace libgfortran/configure \ - --replace "-install_name \\\$rpath/\\\$soname" "-install_name $lib/lib/\\\$soname" + --replace "-install_name \\\$rpath/\\\$soname" "-install_name ''${!outputLib}/lib/\\\$soname" ''; postPatch = '' diff --git a/pkgs/development/compilers/gcc/9/default.nix b/pkgs/development/compilers/gcc/9/default.nix index 5785782a671..9a0fdb6f29e 100644 --- a/pkgs/development/compilers/gcc/9/default.nix +++ b/pkgs/development/compilers/gcc/9/default.nix @@ -85,7 +85,7 @@ stdenv.mkDerivation ({ inherit patches; - outputs = [ "out" "lib" "man" "info" ]; + outputs = [ "out" "man" "info" ] ++ lib.optional langJit "lib"; setOutputFlags = false; NIX_NO_SELF_RPATH = true; @@ -100,10 +100,10 @@ stdenv.mkDerivation ({ --replace 'if (stdinc)' 'if (0)' substituteInPlace libgcc/config/t-slibgcc-darwin \ - --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name $lib/lib/\$(SHLIB_INSTALL_NAME)" + --replace "-install_name @shlib_slibdir@/\$(SHLIB_INSTALL_NAME)" "-install_name ''${!outputLib}/lib/\$(SHLIB_INSTALL_NAME)" substituteInPlace libgfortran/configure \ - --replace "-install_name \\\$rpath/\\\$soname" "-install_name $lib/lib/\\\$soname" + --replace "-install_name \\\$rpath/\\\$soname" "-install_name ''${!outputLib}/lib/\\\$soname" ''; postPatch = '' diff --git a/pkgs/development/compilers/gcc/builder.sh b/pkgs/development/compilers/gcc/builder.sh index 8d03e010464..b806f5a6e50 100644 --- a/pkgs/development/compilers/gcc/builder.sh +++ b/pkgs/development/compilers/gcc/builder.sh @@ -202,34 +202,34 @@ postConfigure() { preInstall() { mkdir -p "$out/${targetConfig}/lib" - mkdir -p "$lib/${targetConfig}/lib" + mkdir -p "${!outputLib}/${targetConfig}/lib" # Make ‘lib64’ symlinks to ‘lib’. if [ -n "$is64bit" -a -z "$enableMultilib" ]; then ln -s lib "$out/${targetConfig}/lib64" - ln -s lib "$lib/${targetConfig}/lib64" + ln -s lib "${!outputLib}/${targetConfig}/lib64" fi } postInstall() { - # Move runtime libraries to $lib. - moveToOutput "${targetConfig+$targetConfig/}lib/lib*.so*" "$lib" - moveToOutput "${targetConfig+$targetConfig/}lib/lib*.la" "$lib" - moveToOutput "${targetConfig+$targetConfig/}lib/lib*.dylib" "$lib" - moveToOutput "${targetConfig+$targetConfig/}lib/lib*.dll.a" "$lib" - moveToOutput "share/gcc-*/python" "$lib" + # Move runtime libraries to lib output. + moveToOutput "${targetConfig+$targetConfig/}lib/lib*.so*" "${!outputLib}" + moveToOutput "${targetConfig+$targetConfig/}lib/lib*.la" "${!outputLib}" + moveToOutput "${targetConfig+$targetConfig/}lib/lib*.dylib" "${!outputLib}" + moveToOutput "${targetConfig+$targetConfig/}lib/lib*.dll.a" "${!outputLib}" + moveToOutput "share/gcc-*/python" "${!outputLib}" - for i in "$lib/${targetConfig}"/lib/*.{la,py}; do - substituteInPlace "$i" --replace "$out" "$lib" + for i in "${!outputLib}/${targetConfig}"/lib/*.{la,py}; do + substituteInPlace "$i" --replace "$out" "${!outputLib}" done if [ -n "$enableMultilib" ]; then - moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.so*" "$lib" - moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.la" "$lib" - moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.dylib" "$lib" + moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.so*" "${!outputLib}" + moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.la" "${!outputLib}" + moveToOutput "${targetConfig+$targetConfig/}lib64/lib*.dylib" "${!outputLib}" - for i in "$lib/${targetConfig}"/lib64/*.{la,py}; do - substituteInPlace "$i" --replace "$out" "$lib" + for i in "${!outputLib}/${targetConfig}"/lib64/*.{la,py}; do + substituteInPlace "$i" --replace "$out" "${!outputLib}" done fi @@ -251,10 +251,10 @@ postInstall() { fi if type "install_name_tool"; then - for i in "$lib"/lib/*.*.dylib; do + for i in "${!outputLib}"/lib/*.*.dylib; do install_name_tool -id "$i" "$i" || true for old_path in $(otool -L "$i" | grep "$out" | awk '{print $1}'); do - new_path=`echo "$old_path" | sed "s,$out,$lib,"` + new_path=`echo "$old_path" | sed "s,$out,${!outputLib},"` install_name_tool -change "$old_path" "$new_path" "$i" || true done done