biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / servers / gpsd / default.nix
blob224ce41d185ee22c894830c7ab52a60173b1f707
1 { stdenv
2 , lib
3 , fetchurl
5 # nativeBuildInputs
6 , scons
7 , pkg-config
9 # buildInputs
10 , dbus
11 , libusb1
12 , ncurses
13 , kppsSupport ? stdenv.isLinux, pps-tools
14 , python3Packages
16 # optional deps for GUI packages
17 , guiSupport ? true
18 , dbus-glib
19 , libX11
20 , libXt
21 , libXpm
22 , libXaw
23 , libXext
24 , gobject-introspection
25 , pango
26 , gdk-pixbuf
27 , atk
28 , wrapGAppsHook
30 , gpsdUser ? "gpsd", gpsdGroup ? "dialout"
33 stdenv.mkDerivation rec {
34   pname = "gpsd";
35   version = "3.25";
37   src = fetchurl {
38     url = "mirror://savannah/${pname}/${pname}-${version}.tar.gz";
39     sha256 = "sha256-s2i2owXj96Y4LSOgy/wdeJIwYLa39Uz3mHpzx7Spr8I=";
40   };
42   # TODO: render & install HTML documentation using asciidoctor
43   nativeBuildInputs = [
44     pkg-config
45     python3Packages.wrapPython
46     scons
47   ] ++ lib.optionals guiSupport [
48     gobject-introspection
49     wrapGAppsHook
50   ];
52   buildInputs = [
53     dbus
54     libusb1
55     ncurses
56     python3Packages.python
57   ] ++ lib.optionals kppsSupport [
58     pps-tools
59   ] ++ lib.optionals guiSupport [
60     atk
61     dbus-glib
62     gdk-pixbuf
63     libX11
64     libXaw
65     libXext
66     libXpm
67     libXt
68     pango
69   ];
71   pythonPath = lib.optionals guiSupport [
72     python3Packages.pygobject3
73     python3Packages.pycairo
74   ];
76   patches = [
77     ./sconstruct-env-fixes.patch
78   ];
80   preBuild = ''
81     patchShebangs .
82     sed -e "s|systemd_dir = .*|systemd_dir = '$out/lib/systemd/system'|" -i SConscript
83     export TAR=noop
84     substituteInPlace SConscript --replace "env['CCVERSION']" "env['CC']"
86     sconsFlags+=" udevdir=$out/lib/udev"
87     sconsFlags+=" python_libdir=$out/${python3Packages.python.sitePackages}"
88   '';
90   # - leapfetch=no disables going online at build time to fetch leap-seconds
91   #   info. See <gpsd-src>/build.txt for more info.
92   sconsFlags = [
93     "leapfetch=no"
94     "gpsd_user=${gpsdUser}"
95     "gpsd_group=${gpsdGroup}"
96     "systemd=yes"
97     "xgps=${if guiSupport then "True" else "False"}"
98   ];
100   preCheck = ''
101     export LD_LIBRARY_PATH="$PWD"
102   '';
104   # TODO: the udev rules file and the hotplug script need fixes to work on NixOS
105   preInstall = ''
106     mkdir -p "$out/lib/udev/rules.d"
107   '';
109   installTargets = [ "install" "udev-install" ];
111   # remove binaries for x-less install because xgps sconsflag is partially broken
112   postFixup = ''
113     wrapPythonProgramsIn $out/bin "$out $pythonPath"
114   '';
116   meta = with lib; {
117     description = "GPS service daemon";
118     longDescription = ''
119       gpsd is a service daemon that monitors one or more GPSes or AIS
120       receivers attached to a host computer through serial or USB ports,
121       making all data on the location/course/velocity of the sensors
122       available to be queried on TCP port 2947 of the host computer. With
123       gpsd, multiple location-aware client applications (such as navigational
124       and wardriving software) can share access to receivers without
125       contention or loss of data. Also, gpsd responds to queries with a
126       format that is substantially easier to parse than the NMEA 0183 emitted
127       by most GPSes. The gpsd distribution includes a linkable C service
128       library, a C++ wrapper class, and a Python module that developers of
129       gpsd-aware applications can use to encapsulate all communication with
130       gpsd. Third-party client bindings for Java and Perl also exist.
132       Besides gpsd itself, the project provides auxiliary tools for
133       diagnostic monitoring and profiling of receivers and feeding
134       location-aware applications GPS/AIS logs for diagnostic purposes.
135     '';
136     homepage = "https://gpsd.gitlab.io/gpsd/index.html";
137     changelog = "https://gitlab.com/gpsd/gpsd/-/blob/release-${version}/NEWS";
138     license = licenses.bsd2;
139     platforms = platforms.unix;
140     maintainers = with maintainers; [ bjornfor rasendubi ];
141   };