From df430ab2ea31052a8b258fe533662e665b82d7fb Mon Sep 17 00:00:00 2001
From: Shea Levy <shea@shealevy.com>
Date: Wed, 4 Feb 2015 10:00:50 +0000
Subject: [PATCH] Fix imake on darwin.

Taken from joelteon/nixpkgs@6b3f7e6fb06426e3535ddbcc3fce05c74a1c7588

Original author Mike Sperber <sperber@deinprogramm.de>
---
 .../x11/xorg/darwin-imake-setup-hook.sh       |  1 +
 pkgs/servers/x11/xorg/imake.patch             | 22 +++++++++----------
 pkgs/servers/x11/xorg/overrides.nix           |  6 +++++
 pkgs/top-level/all-packages.nix               |  2 +-
 4 files changed, 19 insertions(+), 12 deletions(-)
 create mode 100644 pkgs/servers/x11/xorg/darwin-imake-setup-hook.sh

diff --git a/pkgs/servers/x11/xorg/darwin-imake-setup-hook.sh b/pkgs/servers/x11/xorg/darwin-imake-setup-hook.sh
new file mode 100644
index 000000000000..6dbaf724092b
--- /dev/null
+++ b/pkgs/servers/x11/xorg/darwin-imake-setup-hook.sh
@@ -0,0 +1 @@
+export IMAKECPP="@tradcpp@/bin/tradcpp"
diff --git a/pkgs/servers/x11/xorg/imake.patch b/pkgs/servers/x11/xorg/imake.patch
index 0426e448215f..1d0ec88761d4 100644
--- a/pkgs/servers/x11/xorg/imake.patch
+++ b/pkgs/servers/x11/xorg/imake.patch
@@ -1,15 +1,15 @@
-diff -ru -x '*~' imake-1.0.3-orig/imake.c imake-1.0.3/imake.c
---- imake-1.0.3-orig/imake.c	2009-10-16 23:45:43.000000000 +0200
-+++ imake-1.0.3/imake.c	2010-07-19 12:17:12.000000000 +0200
-@@ -1035,6 +1035,7 @@
+diff -Naur imake-1.0.7-orig/imake.c imake-1.0.7/imake.c
+--- imake-1.0.7-orig/imake.c	2013-08-17 10:11:50.000000000 +0000
++++ imake-1.0.7/imake.c	2015-02-04 09:41:59.000000000 +0000
+@@ -1045,6 +1045,7 @@
  static void
  get_distrib(FILE *inFile)
  {
 +#if 0
    struct stat sb;
  
-   static char* suse = "/etc/SuSE-release";
-@@ -1080,6 +1081,7 @@
+   static const char*   suse = "/etc/SuSE-release";
+@@ -1090,6 +1091,7 @@
       * at the content of /etc/debian_version */
      return;
    }
@@ -17,21 +17,21 @@ diff -ru -x '*~' imake-1.0.3-orig/imake.c imake-1.0.3/imake.c
    /* what's the definitive way to tell what any particular distribution is? */
  
    fprintf (inFile, "%s\n", "#define DefaultLinuxDistribution LinuxUnknown");
-@@ -1328,6 +1330,7 @@
+@@ -1337,6 +1339,7 @@
  static boolean
  get_gcc(char *cmd)
  {
 +#if 0
    struct stat sb;
-     static char* gcc_path[] = {
+     static const char* gcc_path[] = {
  #if defined(linux) || \
-@@ -1376,6 +1379,9 @@
+@@ -1385,6 +1388,9 @@
  	}
        }
      return FALSE;
 +#endif
-+    strcpy (cmd, "gcc");
++    strcpy (cmd, IMAKE_COMPILETIME_CPP);
 +    return TRUE;
  }
  
- #if defined CROSSCOMPILE || !defined __UNIXOS2__
+ #ifdef CROSSCOMPILE
diff --git a/pkgs/servers/x11/xorg/overrides.nix b/pkgs/servers/x11/xorg/overrides.nix
index 45122780cddf..eebb33fae634 100644
--- a/pkgs/servers/x11/xorg/overrides.nix
+++ b/pkgs/servers/x11/xorg/overrides.nix
@@ -49,6 +49,12 @@ in
     inherit (xorg) xorgcffiles;
     x11BuildHook = ./imake.sh;
     patches = [./imake.patch];
+    setupHook = if stdenv.isDarwin then ./darwin-imake-setup-hook.sh else null;
+    CFLAGS = [ "-DIMAKE_COMPILETIME_CPP=\\\"${if stdenv.isDarwin
+      then "${args.tradcpp}/bin/cpp"
+      else "gcc"}\\\""
+    ];
+    tradcpp = if stdenv.isDarwin then args.tradcpp else null;
   };
 
   mkfontdir = attrs: attrs // {
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 1d2a68cfd24e..55ec7c72bdce 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -8191,7 +8191,7 @@ let
   xorg = recurseIntoAttrs (import ../servers/x11/xorg/default.nix {
     inherit clangStdenv fetchurl fetchgit fetchpatch stdenv pkgconfig intltool freetype fontconfig
       libxslt expat libpng zlib perl mesa_drivers spice_protocol
-      dbus libuuid openssl gperf m4 libevdev
+      dbus libuuid openssl gperf m4 libevdev tradcpp
       autoconf automake libtool xmlto asciidoc flex bison python mtdev pixman;
     mesa = mesa_noglu;
     udev = if stdenv.isLinux then udev else null;