about summary refs log tree commit diff
path: root/pkgs/applications/networking/msmtp
diff options
context:
space:
mode:
authorPeter Hoeg <peter@hoeg.com>2022-08-06 10:34:01 +0800
committerPeter Hoeg <peter@hoeg.com>2022-08-09 08:38:37 +0800
commit603b6f6be133a5e36d509e047ce0b05f37de7446 (patch)
tree96f9950e0eb3f5397b0307518e1c3b8166874823 /pkgs/applications/networking/msmtp
parentfae17c4fe00ad935d8c512221615af1493253651 (diff)
msmtp: resholve queue scripts
Diffstat (limited to 'pkgs/applications/networking/msmtp')
-rw-r--r--pkgs/applications/networking/msmtp/default.nix154
-rw-r--r--pkgs/applications/networking/msmtp/paths.patch62
2 files changed, 127 insertions, 89 deletions
diff --git a/pkgs/applications/networking/msmtp/default.nix b/pkgs/applications/networking/msmtp/default.nix
index 418a74a62a37f..47ba4b1e69889 100644
--- a/pkgs/applications/networking/msmtp/default.nix
+++ b/pkgs/applications/networking/msmtp/default.nix
@@ -1,59 +1,131 @@
-{ stdenv, lib, fetchurl, autoreconfHook, pkg-config, texinfo
-, netcat-gnu, gnutls, gsasl, libidn2, Security
-, withKeyring ? true, libsecret ? null
-, systemd ? null }:
+{ resholve
+, stdenv
+, symlinkJoin
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, bash
+, coreutils
+, gnugrep
+, gnutls
+, gsasl
+, libidn2
+, netcat-gnu
+, texinfo
+, which
+, Security
+, withKeyring ? true
+, libsecret ? null
+, withSystemd ? stdenv.isLinux
+, systemd ? null
+}:
 
 let
-  tester = "n"; # {x| |p|P|n|s}
-  journal = if stdenv.isLinux then "y" else "n";
+  inherit (lib) getBin getExe optionals;
 
-in stdenv.mkDerivation rec {
-  pname = "msmtp";
   version = "1.8.20";
 
-  src = fetchurl {
-    url = "https://marlam.de/${pname}/releases/${pname}-${version}.tar.xz";
-    sha256 = "sha256-2TriqvwPSK99ydCzlN8buABYi4tOjQltizzyJTROsRE=";
+  src = fetchFromGitHub {
+    owner = "marlam";
+    repo = "msmtp-mirror";
+    rev = "msmtp-${version}";
+    hash = "sha256-RcQZ7Vm8UjJJoogkmUmZ+/2fz7C4AcVYY/kTOlfz7+I=";
   };
 
-  patches = [
-    ./paths.patch
-  ];
+  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;
+  };
 
-  buildInputs = [ gnutls gsasl libidn2 ]
-    ++ lib.optional stdenv.isDarwin Security
-    ++ lib.optional withKeyring libsecret;
+  binaries = stdenv.mkDerivation rec {
+    pname = "msmtp-binaries";
+    inherit version src meta;
 
-  nativeBuildInputs = [ autoreconfHook pkg-config texinfo ];
+    configureFlags = [ "--sysconfdir=/etc" "--with-libgsasl" ]
+      ++ optionals stdenv.isDarwin [ "--with-macosx-keyring" ];
 
-  configureFlags = [ "--sysconfdir=/etc" "--with-libgsasl" ]
-    ++ lib.optional stdenv.isDarwin [ "--with-macosx-keyring" ];
+    buildInputs = [ gnutls gsasl libidn2 ]
+      ++ optionals stdenv.isDarwin [ Security ]
+      ++ optionals withKeyring [ libsecret ];
 
-  postInstall = ''
-    install -d $out/share/doc/${pname}/scripts
-    cp -r scripts/{find_alias,msmtpqueue,msmtpq,set_sendmail} $out/share/doc/${pname}/scripts
-    install -Dm644 doc/*.example $out/share/doc/${pname}
+    nativeBuildInputs = [ autoreconfHook pkg-config texinfo ];
 
-    substitute scripts/msmtpq/msmtpq $out/bin/msmtpq \
-      --replace @msmtp@      $out/bin/msmtp \
-      --replace @nc@         ${netcat-gnu}/bin/nc \
-      --replace @journal@    ${journal} \
-      ${lib.optionalString (journal == "y") "--replace @systemdcat@ ${systemd}/bin/systemd-cat" } \
-      --replace @test@       ${tester}
+    enableParallelBuilding = true;
 
-    substitute scripts/msmtpq/msmtp-queue $out/bin/msmtp-queue \
-      --replace @msmtpq@ $out/bin/msmtpq
+    postInstall = ''
+      install -Dm444 -t $out/share/doc/msmtp doc/*.example
+      ln -s msmtp $out/bin/sendmail
+    '';
+  };
 
-    ln -s msmtp $out/bin/sendmail
+  scripts = resholve.mkDerivation rec {
+    pname = "msmtp-scripts";
+    inherit version src meta;
 
-    chmod +x $out/bin/*
-  '';
+    patches = [ ./paths.patch ];
 
-  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;
+    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 ];
 }
diff --git a/pkgs/applications/networking/msmtp/paths.patch b/pkgs/applications/networking/msmtp/paths.patch
index 26ee6976d505c..72e1ecce88076 100644
--- a/pkgs/applications/networking/msmtp/paths.patch
+++ b/pkgs/applications/networking/msmtp/paths.patch
@@ -1,61 +1,40 @@
-diff --git a/scripts/msmtpq/msmtp-queue b/scripts/msmtpq/msmtp-queue
-index 1dc220d..d834241 100755
---- a/scripts/msmtpq/msmtp-queue
-+++ b/scripts/msmtpq/msmtp-queue
-@@ -27,4 +27,4 @@
- ## change the below line to be
- ##   exec /path/to/msmtpq --q-mgmt
- 
--exec msmtpq --q-mgmt "$1"
-+exec @msmtpq@ --q-mgmt "$1"
 diff --git a/scripts/msmtpq/msmtpq b/scripts/msmtpq/msmtpq
-index bdb4fb8..1363a67 100755
+index 1b39fc6..4baa19b 100755
 --- a/scripts/msmtpq/msmtpq
 +++ b/scripts/msmtpq/msmtpq
-@@ -59,7 +59,7 @@ err() { dsp '' "$@" '' ; exit 1 ; }
- ##   enter the location of the msmtp executable  (no quotes !!)
- ##   e.g. ( MSMTP=/path/to/msmtp )
- ##   and uncomment the test for its existence
--MSMTP=msmtp
-+MSMTP=@msmtp@
- #[ -x "$MSMTP" ] || \
- #  log -e 1 "msmtpq : can't find the msmtp executable [ $MSMTP ]"   # if not found - complain ; quit
- ##
-@@ -70,9 +70,9 @@ MSMTP=msmtp
+@@ -70,8 +70,8 @@ MSMTP=msmtp
  ##            ( chmod 0700 msmtp.queue )
  ##
  ## the queue dir - modify this to reflect where you'd like it to be  (no quotes !!)
 -Q=~/.msmtp.queue
 -[ -d "$Q" ] || mkdir -m 0700 "$Q" || \
--  err '' "msmtpq : can't find or create msmtp queue directory [ $Q ]" ''     # if not present - complain ; quit
 +Q=${MSMTP_QUEUE:-~/.msmtp.queue}
 +[ -d "$Q" ] || mkdir -m 0700 -p "$Q" || \
-+   err '' "msmtpq : can't find or create msmtp queue directory [ $Q ]" ''     # if not present - complain ; quit
+   err '' "msmtpq : can't find or create msmtp queue directory [ $Q ]" ''     # if not present - complain ; quit
  ##
  ## set the queue log file var to the location of the msmtp queue log file
- ##   where it is or where you'd like it to be
-@@ -84,7 +83,10 @@ Q=~/.msmtp.queue
+@@ -84,7 +84,10 @@ Q=~/.msmtp.queue
  ##     (doing so would be inadvisable under most conditions, however)
  ##
  ## the queue log file - modify (or comment out) to taste  (but no quotes !!)
 -LOG=~/log/msmtp.queue.log
 +LOG=${MSMTP_LOG:-~/log/msmtp.queue.log}
-+test -d "$(dirname $LOG)" || mkdir -p "$(dirname $LOG)"
++[ -d "$(dirname "$LOG")" ] || mkdir -p "$(dirname "$LOG")"
 +
 +JOURNAL=@journal@
  ## ======================================================================================
  
  ## msmtpq can use the following environment variables :
-@@ -108,7 +110,7 @@ LOG=~/log/msmtp.queue.log
+@@ -108,7 +111,7 @@ LOG=~/log/msmtp.queue.log
  ##
  #EMAIL_CONN_NOTEST=y                 # deprecated ; use below var
  #EMAIL_CONN_TEST={x| |p|P|n|s}       # see settings above for EMAIL_CONN_TEST
 -EMAIL_CONN_TEST=n
-+EMAIL_CONN_TEST=@test@
++EMAIL_CONN_TEST=${MSMTP_CONN_TEST:-n}
  #EMAIL_QUEUE_QUIET=t
  ## ======================================================================================
  
-@@ -138,6 +140,7 @@ on_exit() {                          # unlock the queue on exit if the lock was
+@@ -138,6 +141,7 @@ on_exit() {                          # unlock the queue on exit if the lock was
  ## display msg to user, as well
  ##
  log() {
@@ -63,15 +42,14 @@ index bdb4fb8..1363a67 100755
    local ARG RC PFX
    PFX="$('date' +'%Y %d %b %H:%M:%S')"
                                       # time stamp prefix - "2008 13 Mar 03:59:45 "
-   if [ "$1" = '-e' ] ; then          # there's an error exit code
-@@ -154,10 +157,19 @@ log() {
+@@ -155,10 +159,19 @@ log() {
      done
    fi
  
-+  if [ "$JOURNAL" == "y" ] ; then
++  if [ "$JOURNAL" == "Y" ]; then
 +    for ARG ; do
 +      [ -n "$ARG" ] && \
-+        echo "$PFX : $ARG" | @systemdcat@ -t $NAME -p info
++        echo "$ARG" | systemd-cat -t $NAME -p info
 +    done
 +  fi
 +
@@ -79,20 +57,8 @@ index bdb4fb8..1363a67 100755
      [ -n "$LKD" ] && lock_queue -u   # unlock here (if locked)
      [ -n "$LOG" ] && \
        echo "    exit code = $RC" >> "$LOG" # logging ok ; send exit code to log
-+    [ "$JOURNAL" == "y" ] && \
-+      echo "exit code= $RC" | @systemdcat@ -t $NAME -p emerg
-     exit $RC                         # exit w/return code
++    [ "$JOURNAL" == "Y" ] && \
++      echo "exit code= $RC" | systemd-cat -t $NAME -p emerg
+     exit "$RC"                       # exit w/return code
    fi
  }
-@@ -207,10 +219,7 @@ connect_test() {
-     ping -qnc1 -w4 8.8.8.8 >/dev/null 2>&1 || return 1
- 
-   elif [ "$EMAIL_CONN_TEST" = 'n' ] ; then                     # use netcat (nc) test
--    # must, of course, have netcat (nc) installed
--    which nc >/dev/null 2>&1 || \
--      log -e 1 "msmtpq : can't find netcat executable [ nc ]"  # if not found - complain ; quit
--    'nc' -vz www.debian.org 80 >/dev/null 2>&1 || return 1
-+    @nc@ -vz www.debian.org 80 >/dev/null 2>&1 || return 1
- 
-   elif [ "$EMAIL_CONN_TEST" = 's' ] ; then                     # use sh sockets test
-     # note that this does not work on debian systems