{ stdenv, fetchFromGitHub, autoconf, automake, libtool_2 , llvm, libcxx, libcxxabi, clang, openssl, libuuid , libobjc ? null }: let baseParams = rec { name = "cctools-port-${version}"; version = "877.5"; src = fetchFromGitHub { owner = "tpoechtrager"; repo = "cctools-port"; rev = "7d405492b09fa27546caaa989b8493829365deab"; sha256 = "0nj1q5bqdx5jm68dispybxc7wnkb6p8p2igpnap9q6qyv2r9p07w"; }; buildInputs = [ autoconf automake libtool_2 openssl libuuid ] ++ # Only need llvm and clang if the stdenv isn't already clang-based (TODO: just make a stdenv.cc.isClang) stdenv.lib.optionals (!stdenv.isDarwin) [ llvm clang ] ++ stdenv.lib.optionals stdenv.isDarwin [ libcxxabi libobjc ]; patches = [ ./ld-rpath-nonfinal.patch ./ld-ignore-rpath-link.patch ]; enableParallelBuilding = true; configureFlags = stdenv.lib.optionals (!stdenv.isDarwin) [ "CXXFLAGS=-I${libcxx}/include/c++/v1" ]; postPatch = '' sed -i -e 's/addStandardLibraryDirectories = true/addStandardLibraryDirectories = false/' cctools/ld64/src/ld/Options.cpp # FIXME: there are far more absolute path references that I don't want to fix right now substituteInPlace cctools/configure.ac \ --replace "-isystem /usr/local/include -isystem /usr/pkg/include" "" \ --replace "-L/usr/local/lib" "" \ substituteInPlace cctools/include/Makefile \ --replace "/bin/" "" patchShebangs tools sed -i -e 's/which/type -P/' tools/*.sh # Workaround for https://www.sourceware.org/bugzilla/show_bug.cgi?id=11157 cat > cctools/include/unistd.h <$out/bin/dsymutil << EOF #!${stdenv.shell} EOF chmod +x $out/bin/dsymutil ''; }); cross = { cross, maloader, makeWrapper, xctoolchain}: stdenv.mkDerivation (baseParams // { configureFlags = baseParams.configureFlags ++ [ "--target=${cross.config}" ]; postInstall = '' for tool in dyldinfo dwarfdump dsymutil; do ${makeWrapper}/bin/makeWrapper "${maloader}/bin/ld-mac" "$out/bin/${cross.config}-$tool" \ --add-flags "${xctoolchain}/bin/$tool" ln -s "$out/bin/${cross.config}-$tool" "$out/bin/$tool" done ''; }); }