diff mbox series

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

Message ID 20200823204535.GA1392@E5400
State New
Headers show
Series None | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job

Commit Message

Efraim Flashner Aug. 23, 2020, 8:45 p.m. UTC
On Wed, Aug 19, 2020 at 11:44:20AM +0200, Alexey Abramov wrote:
> Hi,
> 
> Efraim Flashner <efraim@flashner.co.il> 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

Comments

Alexey Abramov Aug. 24, 2020, 10:01 a.m. UTC | #1
Efraim Flashner <efraim@flashner.co.il> writes:

> On Wed, Aug 19, 2020 at 11:44:20AM +0200, Alexey Abramov wrote:
>> Hi,
>> 
>> Efraim Flashner <efraim@flashner.co.il> 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.

Thank you very much! I have just tested it, and as you might probably know everything works as expected. I will push your updated patch as soon as guys review the services part.
diff mbox series

Patch

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")