summary refs log tree commit diff
path: root/pkgs/os-specific
diff options
context:
space:
mode:
authorLudovic Courtès2010-05-19 21:28:57 +0000
committerLudovic Courtès2010-05-19 21:28:57 +0000
commite5571e9cd4739543c0ce4d56affc90469dc749f0 (patch)
treeeaf8c386cc931e03f3bcb8b403852ef2763c1540 /pkgs/os-specific
parent2534ea88b1a2a5203a3069201a89d680da392233 (diff)
GNU Hurd: Add libpthread.
svn path=/nixpkgs/trunk/; revision=21900
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r--pkgs/os-specific/gnu/libpthread/default.nix65
1 files changed, 65 insertions, 0 deletions
diff --git a/pkgs/os-specific/gnu/libpthread/default.nix b/pkgs/os-specific/gnu/libpthread/default.nix
new file mode 100644
index 000000000000..11adc6187912
--- /dev/null
+++ b/pkgs/os-specific/gnu/libpthread/default.nix
@@ -0,0 +1,65 @@
+{ fetchgit, stdenv, autoconf, automake, libtool
+, machHeaders, hurdHeaders, hurd
+, cross ? null, gccCross ? null, glibcCross ? null }:
+
+assert (cross != null) -> (gccCross != null) && (glibcCross != null);
+
+let
+  date = "2010-05-12";
+
+  # Use the weird branch prescribed in
+  # <http://www.gnu.org/software/hurd/hurd/building/cross-compiling.html>.
+  rev = "tschwinge/Peter_Herbolzheimer@{${date}}";
+in
+stdenv.mkDerivation ({
+  name = "libpthread-hurd-${date}";
+
+  src = fetchgit {
+    url = "git://git.sv.gnu.org/hurd/libpthread.git";
+    sha256 = "1wya9kfmqgn04l995a25p4hxfwddjahfmhdzljb4cribw0bqdizg";
+    inherit rev;
+  };
+
+  buildNativeInputs = [ autoconf automake libtool ];
+  buildInputs = [ machHeaders hurdHeaders hurd ]
+   ++ stdenv.lib.optional (gccCross != null) gccCross;
+
+  preConfigure = "autoreconf -vfi";
+
+  meta = {
+    description = "GNU Hurd's libpthread";
+
+    license = "LGPLv2+";
+
+    maintainers = [ stdenv.lib.maintainers.ludo ];
+  };
+}
+
+//
+
+(if cross != null
+ then {
+   crossConfig = cross.config;
+
+   # Tell gcc where to find `crt1.o' et al.  This is specified in two
+   # different ways: one for gcc as run from `configure', and one for linking
+   # libpthread.so (by default `libtool --mode=link' swallows `-B', hence
+   # this workaround; see
+   # <http://lists.gnu.org/archive/html/bug-libtool/2010-05/msg00012.html>.)
+   LDFLAGS = "-B${glibcCross}/lib";
+   makeFlags = [ "LDFLAGS=-Wc,-B${glibcCross}/lib" ];
+
+   # Help the linker find glibc.
+   CPATH = "${glibcCross}/include";
+   LIBRARY_PATH = "${glibcCross}/lib";
+
+   passthru = {
+     # Extra target LDFLAGS to allow the cross-linker to find the
+     # dependencies of the cross libpthread.so, namely libihash.so.
+     #
+     # This is actually only useful while building the final cross-gcc, since
+     # afterwards gcc-cross-wrapper should add the relevant flags.
+     TARGET_LDFLAGS = "-Wl,-rpath-link=${hurd}/lib";
+   };
+ }
+ else { }))