[bug#54266] samba: wrap scripts with GUIX_PYTHONPATH
Commit Message
Tools like samba-tool need the python libraries installed by samba and some of
sambas inputs.
* gnu/packages/samba.scm: new buildstep
(samba)[wrap-scripts]: Add build step.
---
gnu/packages/samba.scm | 46 ++++++++++++++++++++++++++++++++++--------
1 file changed, 38 insertions(+), 8 deletions(-)
Comments
fesoj000 schreef op di 08-03-2022 om 20:26 [+0100]:
> - (list
> - #:make-flags #~(list "TEST_OPTIONS=--quick") ;some tests are very long
> - #:phases
> - #~(modify-phases %standard-phases
> + `(#:make-flags '("TEST_OPTIONS=--quick") ;some tests are very long
What's the reason for turning things from G-exps into S-exps?
fesoj000 schreef op di 08-03-2022 om 20:26 [+0100]:
> + (wrap-program (string-append out file)
> + `("GUIX_PYTHONPATH" =
> + (,(guix-pythonpath
> + (site-package-path
> + (assoc-ref inputs "python")))))))
I would expect that python always puts its own site-packages in front
of the path, though I could be mistaken, so is this necessary?
Also, it looks like some of the python stuf uses 'ldb', so 'ldb' might
need to be included as well.
Greetings,
Maxime.
[Please keep 54266@debbugs.gnu.org in CC]
fesoj000 schreef op di 08-03-2022 om 23:14 [+0100]:
> packages. If you talk about the samba package output then we can do this like
> the new diff below.
Looking at some of the python scripts, it seems that they
add samba's python libraries to the path by theirselves,
so I don't think this is necessary.
> > Also, it looks like some of the python stuf uses 'ldb', so 'ldb' might
> > need to be included as well.
> 'ldb' is included, you can look at the guix-pythonpath function which builds
> the pythonpath. In fact not only 'ldb' is need but further 'tdb' and 'talloc'.
Looking a little closer, it indeed seems fine (untested)!
Greetings,
Maxime.
@@ -40,6 +40,7 @@ (define-module (gnu packages samba)
#:use-module (gnu packages autotools)
#:use-module (gnu packages backup)
#:use-module (gnu packages base)
+ #:use-module (gnu packages bash)
#:use-module (gnu packages check)
#:use-module (gnu packages crypto)
#:use-module (gnu packages cups)
@@ -193,10 +194,13 @@ (define-public samba
(base32 "0zyid2np45kl8hzp9fjqwvn5lxj766a4f0mya58vldqrhcrmw4b9"))))
(build-system gnu-build-system)
(arguments
- (list
- #:make-flags #~(list "TEST_OPTIONS=--quick") ;some tests are very long
- #:phases
- #~(modify-phases %standard-phases
+ `(#:make-flags '("TEST_OPTIONS=--quick") ;some tests are very long
+ #:imported-modules ((guix build python-build-system)
+ ,@%gnu-build-system-modules)
+ #:modules (((guix build python-build-system) #:select (python-version))
+ ,@%gnu-build-system-modules)
+ #:phases
+ (modify-phases %standard-phases
(add-before 'configure 'setup-docbook-stylesheets
(lambda* (#:key inputs #:allow-other-keys)
;; Append Samba's own DTDs to XML_CATALOG_FILES
@@ -212,12 +216,13 @@ (define-public samba
(string-append all " $XML_CATALOG_FILES")))))
(replace 'configure
;; Samba uses a custom configuration script that runs WAF.
- (lambda* (#:key inputs #:allow-other-keys)
- (let* ((libdir (string-append #$output "/lib")))
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (libdir (string-append out "/lib")))
(invoke "./configure"
"--enable-selftest"
"--enable-fhs"
- (string-append "--prefix=" #$output)
+ (string-append "--prefix=" out)
"--sysconfdir=/etc"
"--localstatedir=/var"
;; Install public and private libraries into
@@ -231,12 +236,37 @@ (define-public samba
(add-before 'install 'disable-etc,var-samba-directories-setup
(lambda _
(substitute* "dynconfig/wscript"
- (("bld\\.INSTALL_DIR.*") "")))))
+ (("bld\\.INSTALL_DIR.*") ""))))
+ (add-after 'install 'wrap-scripts
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ (define (site-package-path python)
+ (string-append "/lib/python" (python-version python)
+ "/site-packages"))
+ (define (guix-pythonpath site-package-path)
+ (string-join
+ (append (map (lambda (input)
+ (string-append (assoc-ref inputs input)
+ site-package-path))
+ '("tdb" "ldb" "talloc"))
+ (list (string-append out site-package-path)))
+ ":"))
+ (for-each (lambda (file)
+ (wrap-program (string-append out file)
+ `("GUIX_PYTHONPATH" =
+ (,(guix-pythonpath
+ (site-package-path
+ (assoc-ref inputs "python")))))))
+ '("/bin/samba-tool" "/sbin/samba_dnsupdate"
+ "/sbin/samba_downgrade_db" "/sbin/samba-gpupdate"
+ "/sbin/samba_kcc" "/sbin/samba_spnupdate"
+ "/sbin/samba_upgradedns"))))))
;; FIXME: The test suite seemingly hangs after failing to provision the
;; test environment.
#:tests? #f))
(inputs
(list acl
+ bash-minimal
cmocka
cups
gamin