Skip to content

Commit f5a8eb3

Browse files
committed
Make libcxxabi mapping work across multiple nixpkgs
1 parent 4d2710e commit f5a8eb3

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

compiler/ghc/default.nix

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -671,11 +671,16 @@ stdenv.mkDerivation (rec {
671671
${hadrian}/bin/hadrian ${hadrianArgs} _build/stage0/compiler/build/$a
672672
cp _build/stage0/compiler/build/$a compiler/GHC/Builtin/$a
673673
done
674-
'' + lib.optionalString stdenv.isDarwin ''
674+
'' + lib.optionalString stdenv.isDarwin && (__tryEval libcxxabi).success ''
675675
substituteInPlace mk/system-cxx-std-lib-1.0.conf \
676676
--replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib ${libcxxabi}/lib'
677677
find . -name 'system*.conf*'
678678
cat mk/system-cxx-std-lib-1.0.conf
679+
'' + lib.optionalString stdenv.isDarwin && !(__tryEval libcxxabi).success ''
680+
substituteInPlace mk/system-cxx-std-lib-1.0.conf \
681+
--replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib'
682+
find . -name 'system*.conf*'
683+
cat mk/system-cxx-std-lib-1.0.conf
679684
'' + lib.optionalString (installStage1 && stdenv.targetPlatform.isMusl) ''
680685
substituteInPlace hadrian/cfg/system.config \
681686
--replace 'cross-compiling = YES' \
@@ -756,11 +761,16 @@ stdenv.mkDerivation (rec {
756761
export XATTR=$(mktemp -d)/nothing
757762
'';
758763
} // lib.optionalAttrs useHadrian {
759-
postConfigure = lib.optionalString stdenv.isDarwin ''
764+
postConfigure = lib.optionalString (stdenv.isDarwin && (__tryEval libcxxabi).success) ''
760765
substituteInPlace mk/system-cxx-std-lib-1.0.conf \
761766
--replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib ${libcxxabi}/lib'
762767
find . -name 'system*.conf*'
763768
cat mk/system-cxx-std-lib-1.0.conf
769+
'' + lib.optionalString (stdenv.isDarwin && !(__tryEval libcxxabi).success) ''
770+
substituteInPlace mk/system-cxx-std-lib-1.0.conf \
771+
--replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib'
772+
find . -name 'system*.conf*'
773+
cat mk/system-cxx-std-lib-1.0.conf
764774
'' + lib.optionalString (installStage1 && !haskell-nix.haskellLib.isCrossTarget && stdenv.targetPlatform.isMusl) ''
765775
substituteInPlace hadrian/cfg/system.config \
766776
--replace 'cross-compiling = YES' \
@@ -820,12 +830,18 @@ stdenv.mkDerivation (rec {
820830
${hadrian}/bin/hadrian ${hadrianArgs} binary-dist-dir
821831
cd _build/bindist/ghc-*
822832
./configure --prefix=$out ${lib.concatStringsSep " " configureFlags}
823-
${lib.optionalString stdenv.isDarwin ''
833+
${lib.optionalString (stdenv.isDarwin && (__tryEval libcxxabi).success) ''
824834
substituteInPlace mk/system-cxx-std-lib-1.0.conf \
825835
--replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib ${libcxxabi}/lib'
826836
substituteInPlace lib/package.conf.d/system-cxx-std-lib-1.0.conf \
827837
--replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib ${libcxxabi}/lib'
828838
''}
839+
${lib.optionalString (stdenv.isDarwin && !(__tryEval libcxxabi).success) ''
840+
substituteInPlace mk/system-cxx-std-lib-1.0.conf \
841+
--replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib'
842+
substituteInPlace lib/package.conf.d/system-cxx-std-lib-1.0.conf \
843+
--replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib'
844+
''}
829845
mkdir -p utils
830846
cp -r ../../../utils/completion utils
831847
make install

lib/system-nixpkgs-map.nix

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ in
2121
# -- linux
2222
{ crypto = [ openssl ];
2323
"c++" = [ libcxx ];
24-
"c++abi" = [ libcxxabi ];
24+
# at some point this happened:
25+
#
26+
# error: 'libcxxabi' was merged into 'libcxx'
27+
#
28+
"c++abi" = [ if (__tryEval libcxxabi).success then libcxxabi else libcxx ];
2529
system-cxx-std-lib = [];
2630
"stdc++" = gcclibs;
2731
"stdc++-6" = gcclibs;

0 commit comments

Comments
 (0)