Subject: [bug#42899] [PATCH v2 02/10] gnu: dovecot: Patch and provide a static path for module directory.

From: Efraim Flashner <[email-masked]>
Date: Sun, 23 Aug 2020 23:45:35 +0300

On Wed, Aug 19, 2020 at 11:44:20AM +0200, Alexey Abramov wrote:
> Hi,
> 
> Efraim Flashner <[email-masked]> writes:
> 
> > How are all the XXX_MODULE_DIR variables set? Would it be possible to
> > just set MODULE_DIR to /etc/dovecot/modules and leave the others as-is?
> > They seem to just use a file/folder under MODULE_DIR.
> 
> They set during compilation time. If I pass it as a configuration option, dovecot will try to install libraries there which won't work.

This was enough to jog my memory that we have a couple of packages (with
services) that have configure flags for one directory and install to
%outputs as expected. I came up with the attached patch to make that
happen.

> 
> For example:
> 
> --8<---------------cut here---------------start------------->8---
> -*- mode: rg; default-directory: "~/factory/dovecot/" -*-
> rg started at Wed Aug 19 10:35:00
> 
> /gnu/store/cxy9n8aic4c9zd0r372m6b6yzw3dhcyl-ripgrep-12.1.1/bin/rg --color always --colors match:fg:red -n --type-add gn\:\*.gn --type-add gn\:\*.gni --type-add gyp\:\*.gyp --type-add gyp\:\*.gypi --no-heading --type all -e AUTH_MODULE_DIR
> 
> src/auth/Makefile.am:42:	-DAUTH_MODULE_DIR=\""$(auth_moduledir)"\" \
> src/auth/main.c:195:	modules = module_dir_load(AUTH_MODULE_DIR, NULL, &mod_set);
> src/auth/main.c:226:	modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, names,
> src/doveadm/doveadm-pw.c:40:	modules = module_dir_load_missing(modules, AUTH_MODULE_DIR, NULL, &mod_set);
> src/doveadm/Makefile.am:28:	-DAUTH_MODULE_DIR=\""$(moduledir)/auth"\" \
> 
> rg finished (5 matches found) at Wed Aug 19 10:35:00
> --8<---------------cut here---------------end--------------->8---
> 
> --8<---------------cut here---------------start------------->8---
> -*- mode: rg; default-directory: "~/factory/dovecot/" -*-
> rg started at Wed Aug 19 11:33:25
> 
> /gnu/store/cxy9n8aic4c9zd0r372m6b6yzw3dhcyl-ripgrep-12.1.1/bin/rg --color always --colors match:fg:red -n --type-add gn\:\*.gn --type-add gn\:\*.gni --type-add gyp\:\*.gyp --type-add gyp\:\*.gypi --no-heading --type all -e DOVEADM_MODULEDIR
> 
> src/doveadm/doveadm-util.c:36:	modules = module_dir_load_missing(modules, DOVEADM_MODULEDIR,
> src/doveadm/doveadm-util.c:61:	dir = opendir(DOVEADM_MODULEDIR);
> src/doveadm/Makefile.am:29:	-DDOVEADM_MODULEDIR=\""$(doveadm_moduledir)"\" \
> 
> rg finished (3 matches found) at Wed Aug 19 11:33:25
> --8<---------------cut here---------------end--------------->8---
> 
> --
> Alexey

-- 
Efraim Flashner   <[email-masked]>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
From e4dd3230739bca94896343d64c6756d346016296 Mon Sep 17 00:00:00 2001
From: Efraim Flashner <[email-masked]>
Date: Sun, 23 Aug 2020 23:43:43 +0300
Subject: [PATCH] gnu: dovecot: Set moduledir to global directory.

* gnu/packages/mail.scm (dovecot)[arguments]: Add configure-flag to set
moduledir. Adjust custom 'install phase to override moduledir so it
successfully installs.
---
 gnu/packages/mail.scm | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/mail.scm b/gnu/packages/mail.scm
index 01ba9dc057..d3d1bda1b6 100644
--- a/gnu/packages/mail.scm
+++ b/gnu/packages/mail.scm
@@ -1442,7 +1442,8 @@ facilities for checking incoming mail.")
      `(#:configure-flags '("--sysconfdir=/etc"
                            "--localstatedir=/var"
                            "--with-sqlite"  ; not auto-detected
-                           "--with-lucene")
+                           "--with-lucene"
+                           "--with-moduledir=/etc/dovecot/modules")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'patch-file-names
@@ -1459,9 +1460,13 @@ facilities for checking incoming mail.")
                (("cat") (which "cat")))
              #t))
          (replace 'install
-           (lambda* (#:key make-flags #:allow-other-keys)
+           (lambda* (#:key outputs make-flags #:allow-other-keys)
+             ;; The .la files don't like having the moduledir moved.
+             (for-each delete-file (find-files "." "\\.la"))
              ;; Simple hack to avoid installing a trivial README in /etc.
              (apply invoke "make" "install" "sysconfdir=/tmp/bogus"
+                    (string-append "moduledir=" (assoc-ref outputs "out")
+                                   "/lib/dovecot")
                     make-flags))))))
     (home-page "https://www.dovecot.org")
     (synopsis "Secure POP3/IMAP server")
-- 
2.28.0