Skip to content

Commit

Permalink
gcc: use special native system headers for darwin
Browse files Browse the repository at this point in the history
Darwin systems need to be able to find CoreFoundation headers as well as
libc headers. Somehow, gcc doesn't accept any "framework" parameters
that would normally be used to include CoreFoundation in this
situation.

HACK: Instead, this adds a derivation that combines the two. The result
works but probably not a good long term solution.

ALTERNATIVES: Maybe sending patches in to GCC to allow
"native-system-framework" configure flag to get this found.
  • Loading branch information
matthewbauer committed Sep 15, 2016
1 parent c7e0fbc commit 8610a34
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 4 deletions.
5 changes: 4 additions & 1 deletion pkgs/development/compilers/gcc/4.8/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
, libpthread ? null, libpthreadCross ? null # required for GNU/Hurd
, stripped ? true
, gnused ? null
, darwin ? null
}:

assert langJava -> zip != null && unzip != null
Expand Down Expand Up @@ -358,7 +359,9 @@ stdenv.mkDerivation ({
)
}
${if cross == null
then " --with-native-system-header-dir=${getDev stdenv.libc}/include"
then if stdenv.isDarwin
then " --with-native-system-header-dir=${darwin.usr-include}"
else " --with-native-system-header-dir=${getDev stdenv.libc}/include"
else ""}
${if langAda then " --enable-libada" else ""}
${if cross == null && stdenv.isi686 then "--with-arch=i686" else ""}
Expand Down
5 changes: 4 additions & 1 deletion pkgs/development/compilers/gcc/4.9/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
, libpthread ? null, libpthreadCross ? null # required for GNU/Hurd
, stripped ? true
, gnused ? null
, darwin ? null
}:

assert langJava -> zip != null && unzip != null
Expand Down Expand Up @@ -365,7 +366,9 @@ stdenv.mkDerivation ({
)
}
${if cross == null
then " --with-native-system-header-dir=${getDev stdenv.libc}/include"
then if stdenv.isDarwin
then " --with-native-system-header-dir=${darwin.usr-include}"
else " --with-native-system-header-dir=${getDev stdenv.libc}/include"
else ""}
${if langAda then " --enable-libada" else ""}
${if cross == null && stdenv.isi686 then "--with-arch=i686" else ""}
Expand Down
5 changes: 4 additions & 1 deletion pkgs/development/compilers/gcc/5/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
, gnused ? null
, binutils ? null
, cloog # unused; just for compat with gcc4, as we override the parameter on some places
, darwin ? null
}:

assert langJava -> zip != null && unzip != null
Expand Down Expand Up @@ -363,7 +364,9 @@ stdenv.mkDerivation ({
)
}
${if cross == null
then " --with-native-system-header-dir=${getDev stdenv.libc}/include"
then if stdenv.isDarwin
then " --with-native-system-header-dir=${darwin.usr-include}"
else " --with-native-system-header-dir=${getDev stdenv.libc}/include"
else ""}
${if langAda then " --enable-libada" else ""}
${if cross == null && stdenv.isi686 then "--with-arch=i686" else ""}
Expand Down
5 changes: 4 additions & 1 deletion pkgs/development/compilers/gcc/6/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
, gnused ? null
, binutils ? null
, cloog # unused; just for compat with gcc4, as we override the parameter on some places
, darwin ? null
}:

assert langJava -> zip != null && unzip != null
Expand Down Expand Up @@ -361,7 +362,9 @@ stdenv.mkDerivation ({
)
}
${if cross == null
then " --with-native-system-header-dir=${getDev stdenv.libc}/include"
then if stdenv.isDarwin
then " --with-native-system-header-dir=${darwin.usr-include}"
else " --with-native-system-header-dir=${getDev stdenv.libc}/include"
else ""}
${if langAda then " --enable-libada" else ""}
${if cross == null && stdenv.isi686 then "--with-arch=i686" else ""}
Expand Down
21 changes: 21 additions & 0 deletions pkgs/os-specific/darwin/usr-include/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{stdenv, darwin}:

/*
* This is needed to build GCC on Darwin.
*
* These are the collection of headers that would normally be available under
* /usr/include in OS X machines with command line tools installed. They need
* to be in one folder for gcc to use them correctly.
*/

stdenv.mkDerivation {
name = "darwin-usr-include";
buildInputs = [ darwin.CF stdenv.libc ];
buildCommand = ''
mkdir -p $out
cd $out
ln -sf ${stdenv.libc}/include/* .
mkdir CoreFoundation
ln -sf ${darwin.CF}/Library/Frameworks/CoreFoundation.framework/Headers/* CoreFoundation
'';
}
2 changes: 2 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -10958,6 +10958,8 @@ in
libobjc = apple-source-releases.objc4;

stubs = callPackages ../os-specific/darwin/stubs {};

usr-include = callPackage ../os-specific/darwin/macheaders.nix {};
};

devicemapper = lvm2;
Expand Down

0 comments on commit 8610a34

Please sign in to comment.