From 0100b270694ecab8aaa13fa5f3d30639b50d7777 Mon Sep 17 00:00:00 2001 From: Tuomas Tynkkynen Date: Fri, 21 Aug 2015 02:12:27 +0300 Subject: [PATCH] imake: Add uberhack to workaround broken 'gcc -x c' Our cc-wrapper is broken whenever the '-x' flag is used: 'gcc -x c foo.c -o bar' doesn't work the same way as 'gcc foo.c -o bar' does. (Try both with NIX_DEBUG=1.) What happens is that passing '-x' causes linker-related flags (such as -Wl,-dynamic-linker) not to be added, just like if '-c' is passed. The bug happens outside the multiple-outputs branch as well, but it doesn't break imake there. It only breaks in multiple-outputs because linking without -Wl,-dynamic-linker produces a binary with an invalid ELF interpreter path. (Which arguably, is a bug in its own.) --- .../x11/xorg/imake-cc-wrapper-uberhack.patch | 13 +++++++++++++ pkgs/servers/x11/xorg/overrides.nix | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 pkgs/servers/x11/xorg/imake-cc-wrapper-uberhack.patch diff --git a/pkgs/servers/x11/xorg/imake-cc-wrapper-uberhack.patch b/pkgs/servers/x11/xorg/imake-cc-wrapper-uberhack.patch new file mode 100644 index 000000000000..fe079eeb42a7 --- /dev/null +++ b/pkgs/servers/x11/xorg/imake-cc-wrapper-uberhack.patch @@ -0,0 +1,13 @@ +diff --git a/imake.c b/imake.c +index c20cd4a..ec2589b 100644 +--- a/imake.c ++++ b/imake.c +@@ -959,7 +959,7 @@ get_libc_version(FILE *inFile) + { + char aout[4096], *tmpdir; + FILE *fp; +- const char *format = "%s -o %s -x c -"; ++ const char *format = "f=$(mktemp imakeXXXXXX.c); cat > $f; %s $f -o %s"; + char *cc; + int len; + char *command; diff --git a/pkgs/servers/x11/xorg/overrides.nix b/pkgs/servers/x11/xorg/overrides.nix index 607023f6f8e7..bbd78c886cf1 100644 --- a/pkgs/servers/x11/xorg/overrides.nix +++ b/pkgs/servers/x11/xorg/overrides.nix @@ -48,7 +48,7 @@ in imake = attrs: attrs // { inherit (xorg) xorgcffiles; x11BuildHook = ./imake.sh; - patches = [./imake.patch]; + patches = [./imake.patch ./imake-cc-wrapper-uberhack.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"