about summary refs log tree commit diff
path: root/nixpkgs/pkgs/desktops/gnome/core/evolution-data-server/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/desktops/gnome/core/evolution-data-server/default.nix')
-rw-r--r--nixpkgs/pkgs/desktops/gnome/core/evolution-data-server/default.nix193
1 files changed, 193 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/desktops/gnome/core/evolution-data-server/default.nix b/nixpkgs/pkgs/desktops/gnome/core/evolution-data-server/default.nix
new file mode 100644
index 000000000000..a6fccb8713b3
--- /dev/null
+++ b/nixpkgs/pkgs/desktops/gnome/core/evolution-data-server/default.nix
@@ -0,0 +1,193 @@
+{ stdenv
+, lib
+, fetchurl
+, substituteAll
+, pkg-config
+, gnome
+, _experimental-update-script-combinators
+, python3
+, gobject-introspection
+, gettext
+, libsoup_3
+, libxml2
+, libsecret
+, icu
+, sqlite
+, tzdata
+, libcanberra-gtk3
+, p11-kit
+, db
+, nspr
+, nss
+, libical
+, gperf
+, wrapGAppsHook
+, glib-networking
+, gsettings-desktop-schemas
+, pcre
+, vala
+, cmake
+, ninja
+, libkrb5
+, openldap
+, enableOAuth2 ? stdenv.isLinux
+, webkitgtk_4_1
+, webkitgtk_6_0
+, json-glib
+, glib
+, gtk3
+, gtk4
+, withGtk3 ? true
+, withGtk4 ? false
+, libphonenumber
+, gnome-online-accounts
+, libgweather
+, boost
+, protobuf
+, libiconv
+, makeHardcodeGsettingsPatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "evolution-data-server";
+  version = "3.50.3";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/evolution-data-server/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-Il1wtqQCaPIlwqxCjuXrUtWm/aJgKVXVCiSXBSb+JFI=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit tzdata;
+    })
+
+    # Avoid using wrapper function, which the hardcode gsettings
+    # patch generator cannot handle.
+    ./drop-tentative-settings-constructor.patch
+  ];
+
+  prePatch = ''
+    substitute ${./hardcode-gsettings.patch} hardcode-gsettings.patch \
+      --subst-var-by EDS ${glib.makeSchemaPath "$out" "${pname}-${version}"} \
+      --subst-var-by GDS ${glib.getSchemaPath gsettings-desktop-schemas}
+    patches="$patches $PWD/hardcode-gsettings.patch"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    pkg-config
+    gettext
+    python3
+    gperf
+    wrapGAppsHook
+    gobject-introspection
+    vala
+  ];
+
+  buildInputs = [
+    glib
+    libsecret
+    libsoup_3
+    gnome-online-accounts
+    p11-kit
+    libgweather
+    icu
+    sqlite
+    libkrb5
+    openldap
+    glib-networking
+    libcanberra-gtk3
+    pcre
+    libphonenumber
+    boost
+    protobuf
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+  ] ++ lib.optionals withGtk3 [
+    gtk3
+  ] ++ lib.optionals (withGtk3 && enableOAuth2) [
+    webkitgtk_4_1
+  ] ++ lib.optionals withGtk4 [
+    gtk4
+  ] ++ lib.optionals (withGtk4 && enableOAuth2) [
+    webkitgtk_6_0
+  ];
+
+  propagatedBuildInputs = [
+    db
+    nss
+    nspr
+    libical
+    libsoup_3
+    libxml2
+    json-glib
+  ];
+
+  cmakeFlags = [
+    "-DENABLE_UOA=OFF"
+    "-DENABLE_VALA_BINDINGS=ON"
+    "-DENABLE_INTROSPECTION=ON"
+    "-DINCLUDE_INSTALL_DIR=${placeholder "dev"}/include"
+    "-DWITH_PHONENUMBER=ON"
+    "-DENABLE_GTK=${lib.boolToString withGtk3}"
+    "-DENABLE_EXAMPLES=${lib.boolToString withGtk3}"
+    "-DENABLE_CANBERRA=${lib.boolToString withGtk3}"
+    "-DENABLE_GTK4=${lib.boolToString withGtk4}"
+    "-DENABLE_OAUTH2_WEBKITGTK=${lib.boolToString (withGtk3 && enableOAuth2)}"
+    "-DENABLE_OAUTH2_WEBKITGTK4=${lib.boolToString (withGtk4 && enableOAuth2)}"
+  ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace cmake/modules/SetupBuildFlags.cmake \
+      --replace "-Wl,--no-undefined" ""
+    substituteInPlace src/services/evolution-alarm-notify/e-alarm-notify.c \
+      --replace "G_OS_WIN32" "__APPLE__"
+  '' + lib.optionalString stdenv.cc.isClang ''
+    # https://gitlab.gnome.org/GNOME/evolution-data-server/-/issues/513
+    substituteInPlace src/addressbook/libebook-contacts/e-phone-number-private.cpp \
+      --replace "std::auto_ptr" "std::unique_ptr"
+  '';
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    ln -s $out/lib/${pname}/*.dylib $out/lib/
+  '';
+
+  passthru = {
+    hardcodeGsettingsPatch = makeHardcodeGsettingsPatch {
+      schemaIdToVariableMapping = {
+        "org.gnome.Evolution.DefaultSources" = "EDS";
+        "org.gnome.evolution.shell.network-config" = "EDS";
+        "org.gnome.evolution-data-server.addressbook" = "EDS";
+        "org.gnome.evolution-data-server.calendar" = "EDS";
+        "org.gnome.evolution-data-server" = "EDS";
+        "org.gnome.desktop.interface" = "GDS";
+      };
+      inherit src patches;
+    };
+    updateScript =
+      let
+        updateSource = gnome.updateScript {
+          packageName = "evolution-data-server";
+          versionPolicy = "odd-unstable";
+        };
+        updatePatch = _experimental-update-script-combinators.copyAttrOutputToFile "evolution-data-server.hardcodeGsettingsPatch" ./hardcode-gsettings.patch;
+      in
+      _experimental-update-script-combinators.sequence [
+        updateSource
+        updatePatch
+      ];
+  };
+
+  meta = with lib; {
+    description = "Unified backend for programs that work with contacts, tasks, and calendar information";
+    homepage = "https://wiki.gnome.org/Apps/Evolution";
+    license = licenses.lgpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.unix;
+  };
+}