From b597d8bfb6ada257826ab17bc65583f839067b1a Mon Sep 17 00:00:00 2001
From: Shea Levy <shea@shealevy.com>
Date: Wed, 16 Nov 2011 19:03:52 +0000
Subject: [PATCH] openssl: Fix target settings when building for GNU/hurd

GNU/hurd cross-build succeeds now!

svn path=/nixpkgs/trunk/; revision=30452
---
 pkgs/development/libraries/openssl/default.nix       | 12 ++++++++++--
 pkgs/development/libraries/openssl/hurd-target.patch | 12 ++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)
 create mode 100644 pkgs/development/libraries/openssl/hurd-target.patch

diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix
index fc748100325e..c8b7aece86eb 100644
--- a/pkgs/development/libraries/openssl/default.nix
+++ b/pkgs/development/libraries/openssl/default.nix
@@ -7,7 +7,6 @@ let
     (throw "openssl needs its platform name cross building" null)
     stdenv.cross;
 
-  # openssl only defines _GNU_SOURCE on Linux by default, but we need it on GNU
   hurdGNUSourcePatch = fetchurl {
     url = http://patch-tracker.debian.org/patch/series/dl/openssl/1.0.0e-2.1/gnu_source.patch;
     sha256 = "0zp4x8bql92fbqywnigqfsfj2vvabb66wv6g6zgzh0y6js1ic4pn";
@@ -48,7 +47,16 @@ stdenv.mkDerivation {
       export configureFlags="--libdir=lib --cross-compile-prefix=${stdenv.cross.config}- shared ${opensslCrossSystem}"
     '';
 
-    patches = stdenv.lib.optional (opensslCrossSystem == "hurd-x86") hurdGNUSourcePatch;
+    patches = stdenv.lib.optionals (opensslCrossSystem == "hurd-x86") [
+      # OpenSSL only defines _GNU_SOURCE on Linux, but we need it on GNU
+      hurdGNUSourcePatch
+
+      # Use the target settings from Debian's "debian-hurd-i386" target.
+      # see http://patch-tracker.debian.org/patch/series/view/openssl/1.0.0e-2.1/debian-targets.patch
+      # In particular, this sets the shared library extension properly so that
+      # make install succeeds
+      ./hurd-target.patch
+    ];
 
     postInstall = ''
       # Openssl installs readonly files, which otherwise we can't strip.
diff --git a/pkgs/development/libraries/openssl/hurd-target.patch b/pkgs/development/libraries/openssl/hurd-target.patch
new file mode 100644
index 000000000000..399a37a69ed9
--- /dev/null
+++ b/pkgs/development/libraries/openssl/hurd-target.patch
@@ -0,0 +1,12 @@
+diff -Naur openssl-1.0.0d-orig/Configure openssl-1.0.0d/Configure
+--- openssl-1.0.0d-orig/Configure	2010-11-30 17:19:26.000000000 -0500
++++ openssl-1.0.0d/Configure	2011-11-16 13:52:57.614416683 -0500
+@@ -563,7 +563,7 @@
+ "newsos4-gcc","gcc:-O -DB_ENDIAN::(unknown):NEWS4:-lmld -liberty:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_RISC1 DES_UNROLL BF_PTR::::",
+ 
+ ##### GNU Hurd
+-"hurd-x86",  "gcc:-DL_ENDIAN -DTERMIOS -O3 -fomit-frame-pointer -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC",
++"hurd-x86","gcc:-DL_ENDIAN -DTERMIOS -O3 -Wa,--noexecstack -g -mtune=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+ 
+ ##### OS/2 EMX
+ "OS2-EMX", "gcc::::::::",