From 7a020d9dc33053fc630a38b88cec81d870fb595f Mon Sep 17 00:00:00 2001 From: Moraxyc Date: Sun, 31 Mar 2024 17:24:35 +0800 Subject: [PATCH] cyrus-imapd: init at 3.10.0 Co-authored-by: jtbx Co-authored-by: drupol --- pkgs/by-name/cy/cyrus-imapd/package.nix | 204 ++++++++++++++++++++++++ test | 0 2 files changed, 204 insertions(+) create mode 100644 pkgs/by-name/cy/cyrus-imapd/package.nix create mode 100644 test diff --git a/pkgs/by-name/cy/cyrus-imapd/package.nix b/pkgs/by-name/cy/cyrus-imapd/package.nix new file mode 100644 index 000000000000..860eaf162016 --- /dev/null +++ b/pkgs/by-name/cy/cyrus-imapd/package.nix @@ -0,0 +1,204 @@ +{ + # build tools + stdenv, + autoreconfHook, + makeWrapper, + pkg-config, + + # check hook + versionCheckHook, + + # fetchers + fetchFromGitHub, + fetchpatch, + fetchurl, + + # build inputs + bison, + brotli, + coreutils, + cunit, + cyrus_sasl, + fig2dev, + flex, + icu, + jansson, + lib, + libbsd, + libcap, + libchardet, + libical, + libmysqlclient, + libsrs2, + libuuid, + libxml2, + nghttp2, + openssl, + pcre2, + perl, + postgresql, + rsync, + shapelib, + sqlite, + unixtools, + valgrind, + wslay, + xapian, + zlib, + + # feature flags + enableAutoCreate ? true, + enableBackup ? true, + enableCalalarmd ? true, + enableHttp ? true, + enableIdled ? true, + enableJMAP ? true, + enableMurder ? true, + enableNNTP ? false, + enableReplication ? true, + enableSrs ? true, + enableUnitTests ? true, + enableXapian ? true, + withLibcap ? true, + withMySQL ? false, + withOpenssl ? true, + withPgSQL ? false, + withSQLite ? true, + withZlib ? true, +}: +stdenv.mkDerivation (finalAttrs: { + pname = "cyrus-imapd"; + version = "3.10.0"; + + src = fetchFromGitHub { + owner = "cyrusimap"; + repo = "cyrus-imapd"; + rev = "refs/tags/cyrus-imapd-${finalAttrs.version}"; + hash = "sha256-dyybRqmrVX+ERGpToS5JjGC6S/B0t967dLCWfeUrLKA="; + }; + + nativeBuildInputs = [ + makeWrapper + pkg-config + autoreconfHook + ]; + buildInputs = + [ + unixtools.xxd + pcre2 + flex + valgrind + fig2dev + perl + cyrus_sasl.dev + icu + jansson + libbsd + libuuid + openssl + zlib + bison + libsrs2 + ] + ++ lib.optionals stdenv.isLinux [ libcap ] + ++ lib.optionals (enableHttp || enableCalalarmd || enableJMAP) [ + brotli.dev + libical.dev + libxml2.dev + nghttp2.dev + shapelib + ] + ++ lib.optionals enableJMAP [ + libchardet + wslay + ] + ++ lib.optionals enableXapian [ + rsync + xapian + ] + ++ lib.optionals withMySQL [ libmysqlclient ] + ++ lib.optionals withPgSQL [ postgresql ] + ++ lib.optionals withSQLite [ sqlite ]; + + enableParallelBuilding = true; + + postPatch = + let + managesieveLibs = + [ + zlib + cyrus_sasl + ] + # Darwin doesn't have libuuid, try to build without it + ++ lib.optional (!stdenv.isDarwin) libuuid; + imapLibs = managesieveLibs ++ [ pcre2 ]; + mkLibsString = lib.strings.concatMapStringsSep " " (l: "-L${lib.getLib l}/lib"); + in + '' + patchShebangs cunit/*.pl + patchShebangs imap/promdatagen + patchShebangs tools/* + + echo ${finalAttrs.version} > VERSION + + substituteInPlace cunit/command.testc \ + --replace-fail /usr/bin/touch ${lib.getExe' coreutils "touch"} \ + --replace-fail /bin/echo ${lib.getExe' coreutils "echo"} \ + --replace-fail /usr/bin/tr ${lib.getExe' coreutils "tr"} \ + --replace-fail /bin/sh ${stdenv.shell} + + # fix for https://github.com/cyrusimap/cyrus-imapd/issues/3893 + substituteInPlace perl/imap/Makefile.PL.in \ + --replace-fail '"$LIB_SASL' '"${mkLibsString imapLibs} -lpcre2-posix $LIB_SASL' + substituteInPlace perl/sieve/managesieve/Makefile.PL.in \ + --replace-fail '"$LIB_SASL' '"${mkLibsString managesieveLibs} $LIB_SASL' + ''; + + postFixup = '' + wrapProgram $out/bin/cyradm --set PERL5LIB $(find $out/lib/perl5 -type d | tr "\\n" ":") + ''; + + configureFlags = [ + "--with-pidfile=/run/cyrus/master.pid" + (lib.enableFeature enableAutoCreate "autocreate") + (lib.enableFeature enableSrs "srs") + (lib.enableFeature enableIdled "idled") + (lib.enableFeature enableMurder "murder") + (lib.enableFeature enableBackup "backup") + (lib.enableFeature enableReplication "replication") + (lib.enableFeature enableUnitTests "unit-tests") + (lib.enableFeature (enableHttp || enableCalalarmd || enableJMAP) "http") + (lib.enableFeature enableJMAP "jmap") + (lib.enableFeature enableNNTP "nntp") + (lib.enableFeature enableXapian "xapian") + (lib.enableFeature enableCalalarmd "calalarmd") + (lib.withFeature withZlib "zlib=${zlib}") + (lib.withFeature withOpenssl "openssl") + (lib.withFeature withLibcap "libcap=${libcap}") + (lib.withFeature withMySQL "mysql") + (lib.withFeature withPgSQL "pgsql") + (lib.withFeature withSQLite "sqlite") + ]; + + checkInputs = [ cunit ]; + doCheck = true; + + versionCheckProgram = "${builtins.placeholder "out"}/libexec/master"; + versionCheckProgramArg = "-V"; + nativeInstallCheckInputs = [ + versionCheckHook + ]; + doInstallCheck = true; + + meta = { + homepage = "https://www.cyrusimap.org"; + description = "Email, contacts and calendar server"; + license = with lib.licenses; [ bsdOriginal ]; + mainProgram = "cyrus"; + maintainers = with lib.maintainers; [ + moraxyc + pingiun + ]; + platforms = lib.platforms.unix; + }; +}) diff --git a/test b/test new file mode 100644 index 000000000000..e69de29bb2d1