summary refs log tree commit diff
path: root/pkgs/os-specific/linux/read-edid
diff options
context:
space:
mode:
authorSergei Trofimovich <slyich@gmail.com>2022-05-06 08:36:57 +0100
committerSergei Trofimovich <slyich@gmail.com>2022-05-06 08:48:10 +0100
commit6b75fe063838adeba35d2e93a457972835d978b0 (patch)
treea69d0298a08df205238b608630e638197580fab6 /pkgs/os-specific/linux/read-edid
parentbb074513be0ca2abfd48481af855d10311db370d (diff)
downloadnixpkgs-6b75fe063838adeba35d2e93a457972835d978b0.tar
nixpkgs-6b75fe063838adeba35d2e93a457972835d978b0.tar.gz
nixpkgs-6b75fe063838adeba35d2e93a457972835d978b0.tar.bz2
nixpkgs-6b75fe063838adeba35d2e93a457972835d978b0.tar.lz
nixpkgs-6b75fe063838adeba35d2e93a457972835d978b0.tar.xz
nixpkgs-6b75fe063838adeba35d2e93a457972835d978b0.tar.zst
nixpkgs-6b75fe063838adeba35d2e93a457972835d978b0.zip
read-edid: fix build on -fno-common toolchains
Without the change build fails on toolchains like clang-13 which
switch to -fno-common by default:

    $ nix build -L --impure --expr 'with import ./. {}; read-edid.override { stdenv = clang13Stdenv; }'
    ...
    read-edid> ld: CMakeFiles/get-edid.dir/classic.c.o:(.bss+0x0):
      multiple definition of `quiet'; CMakeFiles/get-edid.dir/get-edid.c.o:(.bss+0x0): first defined here
    read-edid> ld: CMakeFiles/get-edid.dir/i2c.c.o:(.bss+0x0):
      multiple definition of `quiet'; CMakeFiles/get-edid.dir/get-edid.c.o:(.bss+0x0): first defined here
Diffstat (limited to 'pkgs/os-specific/linux/read-edid')
-rw-r--r--pkgs/os-specific/linux/read-edid/default.nix9
-rw-r--r--pkgs/os-specific/linux/read-edid/fno-common.patch22
2 files changed, 28 insertions, 3 deletions
diff --git a/pkgs/os-specific/linux/read-edid/default.nix b/pkgs/os-specific/linux/read-edid/default.nix
index 7f6d224ff4d..6e040d3cbff 100644
--- a/pkgs/os-specific/linux/read-edid/default.nix
+++ b/pkgs/os-specific/linux/read-edid/default.nix
@@ -9,14 +9,17 @@ stdenv.mkDerivation rec {
     sha256 = "0vqqmwsgh2gchw7qmpqk6idgzcm5rqf2fab84y7gk42v1x2diin7";
   };
 
+  patches = [ ./fno-common.patch ];
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt --replace 'COPYING' 'LICENSE'
+  '';
+
   nativeBuildInputs = [ cmake ];
   buildInputs = lib.optional stdenv.hostPlatform.isx86 libx86;
 
   cmakeFlags = [ "-DCLASSICBUILD=${if stdenv.hostPlatform.isx86 then "ON" else "OFF"}" ];
 
-  patchPhase = ''
-    substituteInPlace CMakeLists.txt --replace 'COPYING' 'LICENSE'
-  '';
 
   meta = with lib; {
     description = "Tool for reading and parsing EDID data from monitors";
diff --git a/pkgs/os-specific/linux/read-edid/fno-common.patch b/pkgs/os-specific/linux/read-edid/fno-common.patch
new file mode 100644
index 00000000000..336b48b66ad
--- /dev/null
+++ b/pkgs/os-specific/linux/read-edid/fno-common.patch
@@ -0,0 +1,22 @@
+--- a/get-edid/classic.c
++++ b/get-edid/classic.c
+@@ -26,7 +26,7 @@ typedef byte* real_ptr;
+ #define dosmemput(buffer,length,offset) memcpy(offset,buffer,length)
+ 
+ #define display(...) if (quiet == 0) { fprintf(stderr, __VA_ARGS__); }
+-int quiet;
++extern int quiet;
+ 
+ real_ptr far_ptr_to_real_ptr( uint32 farptr )
+ {
+--- a/get-edid/i2c.c
++++ b/get-edid/i2c.c
+@@ -15,7 +15,7 @@
+ 
+ //Ideas (but not too much actual code) taken from i2c-tools. Thanks guys.
+ 
+-int quiet;
++extern int quiet;
+ 
+ #define display(...) if (quiet == 0) { fprintf(stderr, __VA_ARGS__); }
+