{ lib, stdenv, fetchbzr, autoreconfHook, texinfo, help2man, imagemagick, pkg-config
, curl, gnome2, gpsd, gtk2, wrapGAppsHook3
, intltool, libexif, python3Packages, sqlite }:

let
  srcs = {
    foxtrot = fetchbzr {
      url = "lp:foxtrotgps";
      rev = "331";
      sha256 = "sha256-/kJv6a3MzAzzwIl98Mqi7jrUJC1kDvouigf9kGtv868=";
    };
    screenshots = fetchbzr {
      url = "lp:foxtrotgps/screenshots";
      rev = "2";
      sha256 = "1sgysn3dhfhrv7rj7wf8f2119vmhc1s1zzsp4r3nlrr45d20wmsv";
    };
  };
in stdenv.mkDerivation rec {
  pname = "foxtrotgps";
  version = "1.2.2+331";

  # Pull directly from bzr because gpsd API version 9 is not supported on latest release
  src = srcs.foxtrot;

  nativeBuildInputs = [
    pkg-config autoreconfHook texinfo help2man
    imagemagick wrapGAppsHook3 intltool
  ];

  buildInputs = [
    curl.dev
    gnome2.libglade.dev
    gpsd
    gtk2.dev
    libexif
    sqlite.dev
    (python3Packages.python.withPackages (pythonPackages: with python3Packages;
    [ beautifulsoup4 feedparser sqlalchemy ]))
  ];

  postUnpack = ''
    cp -R ${srcs.screenshots} $sourceRoot/doc/screenshots
    chmod -R u+w $sourceRoot/doc/screenshots
  '';

  # Remove when foxtrotgps supports gpsd 3.23.1
  # Patch for compatibility with gpsd 3.23.1. This was added for foxtrotgps
  # 1.2.2+331. The command can be removed if the build of a newer version
  # succeeds without it.
  postPatch = ''
    substituteInPlace src/gps_functions.c --replace "STATUS_NO_FIX" "STATUS_UNK"
  '';

  preConfigure = ''
    intltoolize --automake --copy --force
  '';

  meta = with lib; {
    description = "GPS/GIS application optimized for small screens";
    longDescription = ''
      An easy to use, free & open-source GPS/GIS application that works well on
      small screens, and is especially suited to touch input. It spun off of
      tangoGPS in 2010 with a focus on cooperation and fostering community
      innovation.
    '';
    homepage = "https://www.foxtrotgps.org/";
    license = licenses.gpl2Plus;
    platforms = platforms.unix;
    maintainers = with maintainers; [ wucke13 ];
  };
}
