From 44beb565409b496fa6763a246e15edf5d0155ea0 Mon Sep 17 00:00:00 2001 From: Yegor Timoshenko Date: Tue, 26 Sep 2017 11:04:27 +0000 Subject: [PATCH] sct: fix segfault when DISPLAY is empty, clean up derivation --- pkgs/tools/X11/sct/DISPLAY-segfault.patch | 10 ++++++ pkgs/tools/X11/sct/default.nix | 41 ++++++++++------------- 2 files changed, 28 insertions(+), 23 deletions(-) create mode 100644 pkgs/tools/X11/sct/DISPLAY-segfault.patch diff --git a/pkgs/tools/X11/sct/DISPLAY-segfault.patch b/pkgs/tools/X11/sct/DISPLAY-segfault.patch new file mode 100644 index 00000000000..6b83afa332b --- /dev/null +++ b/pkgs/tools/X11/sct/DISPLAY-segfault.patch @@ -0,0 +1,10 @@ +--- a/sct.c 2017-09-22 00:44:20.270421881 +0000 ++++ b/sct.c 2017-09-26 10:50:38.964562740 +0000 +@@ -36,6 +36,7 @@ + main(int argc, char **argv) + { + Display *dpy = XOpenDisplay(NULL); ++ if (!dpy) exit(1); + int screen = DefaultScreen(dpy); + Window root = RootWindow(dpy, screen); + diff --git a/pkgs/tools/X11/sct/default.nix b/pkgs/tools/X11/sct/default.nix index 1890e9c5266..9f45bbe3087 100644 --- a/pkgs/tools/X11/sct/default.nix +++ b/pkgs/tools/X11/sct/default.nix @@ -1,31 +1,26 @@ -{stdenv, fetchurl, libX11, libXrandr}: +{ stdenv, fetchurl, libX11, libXrandr }: + stdenv.mkDerivation rec { name = "sct"; - buildInputs = [libX11 libXrandr]; + src = fetchurl { url = http://www.tedunangst.com/flak/files/sct.c; sha256 = "01f3ndx3s6d2qh2xmbpmhd4962dyh8yp95l87xwrs4plqdz6knhd"; - - # Discussion regarding the checksum and the source code can be found in issue #17163 - # The code seems unmaintained, yet an unknown (probably small change) in the code caused - # failed builds as the checksum had changed. - # The checksum is updated for now, however, this is unpractical and potentially unsafe - # so any future changes might warrant a fork of the (feature complete) project. - # The code is under public domain. - }; - phases = ["patchPhase" "buildPhase" "installPhase"]; - patchPhase = '' - sed -re "/Xlibint/d" ${src} > sct.c - ''; - buildPhase = "gcc -std=c99 sct.c -o sct -lX11 -lXrandr -lm"; - installPhase = '' - mkdir -p "$out/bin" - cp sct "$out/bin" - ''; - meta = { - description = ''A minimal utility to set display colour temperature''; - maintainers = [stdenv.lib.maintainers.raskin]; - platforms = with stdenv.lib.platforms; linux ++ freebsd ++ openbsd; + + unpackPhase = "cat ${src} > sct.c"; + patches = [ ./DISPLAY-segfault.patch ]; + + buildInputs = [ libX11 libXrandr ]; + buildPhase = "cc sct.c -o sct -lm -lX11 -lXrandr"; + + installPhase = "install -Dt $out/bin sct"; + + meta = with stdenv.lib; { + homepage = https://www.tedunangst.com/flak/post/sct-set-color-temperature; + description = "A minimal utility to set display colour temperature"; + maintainers = [ maintainers.raskin ]; + license = licenses.publicDomain; + platforms = with platforms; linux ++ freebsd ++ openbsd; }; }