nixpkgs/pkgs/applications/networking/msmtp/default.nix
Adam Joseph 42815b4a0c treewide: systemdSupport: use lib.meta.availableOn
Many packages have some kind of flag indicating whether or not to build with
systemd support.  Most of these default to `stdenv.isLinux`, but systemd does
not build on (and is marked `broken` for) `isStatic`.  Only a few packages have
the needed `&& !isStatic` in the default value for their parameter.

This commit moves the logic for the default value of these flags into
`systemd.meta.{platforms,badPlatforms}` and evaluates those conditions using
`lib.meta.availableOn`.

This provides three benefits:

1. The default values are set correctly (i.e. including `&& isStatic`)

2. The default values are set consistently

3. The way is paved for any future non-Linux systemd platforms (FreeBSD is
   reported to have experimental systemd support)
2023-01-22 00:27:19 -08:00

133 lines
3.2 KiB
Nix

{ resholve
, stdenv
, symlinkJoin
, lib
, fetchFromGitHub
, autoreconfHook
, pkg-config
, bash
, coreutils
, gnugrep
, gnutls
, gsasl
, libidn2
, netcat-gnu
, texinfo
, which
, Security
, withKeyring ? true
, libsecret
, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd
, systemd
}:
let
inherit (lib) getBin getExe optionals;
version = "1.8.22";
src = fetchFromGitHub {
owner = "marlam";
repo = "msmtp-mirror";
rev = "msmtp-${version}";
hash = "sha256-Jt/uvGBrYYr6ua6LVPiP0nuRiIkxBJASdgHBNHivzxQ=";
};
meta = with lib; {
description = "Simple and easy to use SMTP client with excellent sendmail compatibility";
homepage = "https://marlam.de/msmtp/";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ peterhoeg ];
platforms = platforms.unix;
};
binaries = stdenv.mkDerivation {
pname = "msmtp-binaries";
inherit version src meta;
configureFlags = [ "--sysconfdir=/etc" "--with-libgsasl" ]
++ optionals stdenv.isDarwin [ "--with-macosx-keyring" ];
buildInputs = [ gnutls gsasl libidn2 ]
++ optionals stdenv.isDarwin [ Security ]
++ optionals withKeyring [ libsecret ];
nativeBuildInputs = [ autoreconfHook pkg-config texinfo ];
enableParallelBuilding = true;
postInstall = ''
install -Dm444 -t $out/share/doc/msmtp doc/*.example
ln -s msmtp $out/bin/sendmail
'';
};
scripts = resholve.mkDerivation {
pname = "msmtp-scripts";
inherit version src meta;
patches = [ ./paths.patch ];
postPatch = ''
substituteInPlace scripts/msmtpq/msmtpq \
--replace @journal@ ${if withSystemd then "Y" else "N"}
'';
dontConfigure = true;
dontBuild = true;
installPhase = ''
runHook preInstall
install -Dm555 -t $out/bin scripts/msmtpq/msmtp*
install -Dm444 -t $out/share/doc/msmtp/scripts scripts/msmtpq/README*
install -Dm444 -t $out/share/doc/msmtp/scripts scripts/{find_alias,msmtpqueue,set_sendmail}/*
if grep --quiet -E '@.+@' $out/bin/*; then
echo "Unsubstituted variables found. Aborting!"
grep -E '@.+@' $out/bin/*
exit 1
fi
runHook postInstall
'';
solutions = {
msmtpq = {
scripts = [ "bin/msmtpq" ];
interpreter = getExe bash;
inputs = [
binaries
coreutils
gnugrep
netcat-gnu
which
] ++ optionals withSystemd [ systemd ];
execer = [
"cannot:${getBin binaries}/bin/msmtp"
"cannot:${getBin netcat-gnu}/bin/nc"
] ++ optionals withSystemd [
"cannot:${getBin systemd}/bin/systemd-cat"
];
fix."$MSMTP" = [ "msmtp" ];
fake.external = [ "ping" ]
++ optionals (!withSystemd) [ "systemd-cat" ];
};
msmtp-queue = {
scripts = [ "bin/msmtp-queue" ];
interpreter = getExe bash;
inputs = [ "${placeholder "out"}/bin" ];
execer = [ "cannot:${placeholder "out"}/bin/msmtpq" ];
};
};
};
in
symlinkJoin {
name = "msmtp-${version}";
inherit version meta;
paths = [ binaries scripts ];
passthru = { inherit binaries scripts; };
}