{ lib
, stdenv
, fetchFromGitLab
, meson
, ninja
, pkg-config
, ronn
, withGeo ? true
, geoip
}:

# In order for the geoip part to work, you need to set up a link from
# geoip.dataDir to a directory containing the data files This would typically be
# /var/lib/geoip-databases pointing to geoip-legacy/share/GeoIP

stdenv.mkDerivation rec {
  pname = "ipcalc";
  version = "1.0.3";

  src = fetchFromGitLab {
    owner = "ipcalc";
    repo = "ipcalc";
    rev = version;
    hash = "sha256-9eaR1zG8tjSGlkpyY1zTHAVgN5ypuyRfeRq6ct6zsLU=";
  };

  patches = [
    # disable tests which fail in NixOS sandbox (trying to access the network)
    ./sandbox_tests.patch
  ];

  # technically not needed as we do not support the paid maxmind databases, but
  # keep it around if someone wants to add support and /usr/share/GeoIP is
  # broken anyway
  postPatch = ''
    substituteInPlace ipcalc-maxmind.c \
      --replace /usr/share/GeoIP /var/lib/GeoIP
  '';

  nativeBuildInputs = [ meson ninja pkg-config ronn ];

  buildInputs = [ geoip ];

  mesonFlags = [
    "-Duse_geoip=${if withGeo then "en" else "dis"}abled"
    "-Duse_maxminddb=disabled"
    # runtime linking doesn't work on NixOS anyway
    "-Duse_runtime_linking=disabled"
  ];

  doCheck = true;

  meta = with lib; {
    description = "Simple IP network calculator";
    homepage = "https://gitlab.com/ipcalc/ipcalc";
    license = licenses.gpl2Plus;
    maintainers = with maintainers; [ peterhoeg ];
    platforms = platforms.unix;
    mainProgram = "ipcalc";
  };
}
