about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/mail/spamassassin/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/servers/mail/spamassassin/default.nix')
-rw-r--r--nixpkgs/pkgs/servers/mail/spamassassin/default.nix91
1 files changed, 91 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/servers/mail/spamassassin/default.nix b/nixpkgs/pkgs/servers/mail/spamassassin/default.nix
new file mode 100644
index 000000000000..8b6623200eba
--- /dev/null
+++ b/nixpkgs/pkgs/servers/mail/spamassassin/default.nix
@@ -0,0 +1,91 @@
+{ lib, fetchurl, perlPackages, makeBinaryWrapper, gnupg, re2c, gcc, gnumake, libxcrypt, openssl, coreutils, poppler_utils, tesseract, iana-etc }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "SpamAssassin";
+  version = "4.0.0";
+  rulesRev = "r1905950";
+
+  src = fetchurl {
+    url = "mirror://apache/spamassassin/source/Mail-${pname}-${version}.tar.bz2";
+    hash = "sha256-5aoXBQowvHK6qGr9xgSMrepNHsLsxh14dxegWbgxnog=";
+  };
+  defaultRulesSrc = fetchurl {
+    url = "mirror://apache/spamassassin/source/Mail-${pname}-rules-${version}.${rulesRev}.tgz";
+    hash = "sha256-rk/7uRfrx/76ckD8W7UVHdpmP45AWRYa18m0Lu0brG0=";
+  };
+
+  patches = [
+    ./satest-no-clean-path.patch
+    ./sa_compile-use-perl5lib.patch
+  ];
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+  buildInputs = (with perlPackages; [
+    HTMLParser NetCIDRLite NetDNS NetAddrIP DBFile HTTPDate MailDKIM LWP
+    LWPProtocolHttps IOSocketSSL DBI EncodeDetect IPCountry NetIdent
+    Razor2ClientAgent MailSPF NetDNSResolverProgrammable Socket6
+    ArchiveZip EmailAddressXS NetLibIDN2 MaxMindDBReader GeoIP MailDMARC
+    MaxMindDBReaderXS
+  ]) ++ [
+    openssl
+  ];
+
+  makeFlags = [ "PERL_BIN=${perlPackages.perl}/bin/perl" "ENABLE_SSL=yes" ];
+
+  makeMakerFlags = [ "SYSCONFDIR=/etc LOCALSTATEDIR=/var/lib/spamassassin" ];
+
+  checkInputs = (with perlPackages; [
+    TextDiff  # t/strip2.t
+  ]) ++ [
+    coreutils  # date, t/basic_meta.t
+    poppler_utils  # pdftotext, t/extracttext.t
+    tesseract  # tesseract, t/extracttext.t
+    iana-etc  # t/dnsbl_subtests.t (/etc/protocols used by Net::DNS::Nameserver)
+    re2c gcc gnumake
+  ];
+  preCheck = ''
+    substituteInPlace t/spamc_x_e.t \
+      --replace "/bin/echo" "${coreutils}/bin/echo"
+    export C_INCLUDE_PATH='${lib.makeSearchPathOutput "include" "include" [ libxcrypt ]}'
+    export HARNESS_OPTIONS="j''${NIX_BUILD_CORES}"
+
+    export HOME=$NIX_BUILD_TOP/home
+    mkdir -p $HOME
+    mkdir t/log  # pre-create to avoid race conditions
+
+    # https://bz.apache.org/SpamAssassin/show_bug.cgi?id=8068
+    checkFlagsArray+=(TEST_FILES='$(shell find t -name *.t -not -name spamd_ssl_accept_fail.t)')
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/spamassassin
+    mv "rules/"* $out/share/spamassassin/
+
+    tar -xzf ${defaultRulesSrc} -C $out/share/spamassassin/
+    local moduleversion="$(${perlPackages.perl}/bin/perl -I lib -e 'use Mail::SpamAssassin; print $Mail::SpamAssassin::VERSION')"
+    sed -i -e "s/@@VERSION@@/$moduleversion/" $out/share/spamassassin/*.cf
+
+    for n in "$out/bin/"*; do
+      # Skip if this isn't a perl script
+      if ! head -n1 "$n" | grep -q bin/perl; then
+        continue
+      fi
+      echo "Wrapping $n for taint mode"
+      orig="$out/bin/.$(basename "$n")-wrapped"
+      mv "$n" "$orig"
+      # We don't inherit argv0 so that $^X works properly in e.g. sa-compile
+      makeWrapper "${perlPackages.perl}/bin/perl" "$n" \
+        --add-flags "-T $perlFlags $orig" \
+        --prefix PATH : ${lib.makeBinPath [ gnupg re2c gcc gnumake ]} \
+        --prefix C_INCLUDE_PATH : ${lib.makeSearchPathOutput "include" "include" [ libxcrypt ]}
+    done
+  '';
+
+  meta = {
+    homepage = "https://spamassassin.apache.org/";
+    description = "Open-Source Spam Filter";
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ qknight qyliss ];
+  };
+}