{ fetchurl
, lib
, stdenv
, meson
, ninja
, vala
, gtk-doc
, docbook_xsl
, docbook_xml_dtd_412
, pkg-config
, glib
, gtk3
, cairo
, sqlite
, gnome
, clutter-gtk
, libsoup
, libsoup_3
, gobject-introspection /*, libmemphis */
, withLibsoup3 ? false
}:

stdenv.mkDerivation rec {
  pname = "libchamplain";
  version = "0.12.21";

  outputs = [ "out" "dev" ]
    ++ lib.optionals (stdenv.buildPlatform == stdenv.hostPlatform) [ "devdoc" ];

  src = fetchurl {
    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
    sha256 = "qRXNFyoMUpRMVXn8tGg/ioeMVxv16SglS12v78cn5ac=";
  };

  nativeBuildInputs = [
    meson
    ninja
    pkg-config
    gobject-introspection
    vala
  ] ++ lib.optionals (stdenv.buildPlatform == stdenv.hostPlatform) [
    gtk-doc
    docbook_xsl
    docbook_xml_dtd_412
  ];

  buildInputs = [
    sqlite
    (if withLibsoup3 then libsoup_3 else libsoup)
  ];

  propagatedBuildInputs = [
    glib
    gtk3
    cairo
    clutter-gtk
  ];

  mesonFlags = [
    (lib.mesonBool "gtk_doc" (stdenv.buildPlatform == stdenv.hostPlatform))
    "-Dvapi=true"
    (lib.mesonBool "libsoup3" withLibsoup3)
  ];

  passthru = {
    updateScript = gnome.updateScript {
      packageName = pname;
      versionPolicy = "odd-unstable";
    };
  };

  meta = with lib; {
    homepage = "https://gitlab.gnome.org/GNOME/libchamplain";
    license = licenses.lgpl2Plus;

    description = "C library providing a ClutterActor to display maps";

    longDescription = ''
      libchamplain is a C library providing a ClutterActor to display
       maps.  It also provides a GTK widget to display maps in GTK
       applications.  Python and Perl bindings are also available.  It
       supports numerous free map sources such as OpenStreetMap,
       OpenCycleMap, OpenAerialMap, and Maps for free.
    '';

    maintainers = teams.gnome.members ++ teams.pantheon.members;
    platforms = platforms.unix;
  };
}
