Subject: [bug#72316] [PATCH v2 1/3] Add guile-pam.

From: Felix Lechner <[email-masked]>
Date: Thu, 1 May 2025 06:42:35 -0700

Change-Id: I991ca32c8696de0e6751b0f4225bf24151ba22f2
---
 gnu/packages/linux.scm | 71 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 71 insertions(+)

diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm
index b4adf0c2b43..35ae4558043 100644
--- a/gnu/packages/linux.scm
+++ b/gnu/packages/linux.scm
@@ -113,6 +113,7 @@ (define-module (gnu packages linux)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages bison)
   #:use-module (gnu packages boost)
+  #:use-module (gnu packages build-tools)
   #:use-module (gnu packages calendar)
   #:use-module (gnu packages check)
   #:use-module (gnu packages cpio)
@@ -145,6 +146,7 @@ (define-module (gnu packages linux)
   #:use-module (gnu packages graphviz)
   #:use-module (gnu packages gstreamer)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages guile)
   #:use-module (gnu packages haskell-apps)
   #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages image)
@@ -158,6 +160,7 @@ (define-module (gnu packages linux)
   #:use-module (gnu packages m4)
   #:use-module (gnu packages man)
   #:use-module (gnu packages maths)
+  #:use-module (gnu packages mes)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages netpbm)
@@ -2412,6 +2415,74 @@ (define-public vendor-reset-linux-module
 ;;; Pluggable authentication modules (PAM).
 ;;;
 
+(define-public guile-pam
+  (let ((commit "5ea70a5d88e7ade27ba9f231acab7d363b6400fb")
+        (revision "0"))
+    (package
+      (name "guile-pam")
+      (version (git-version "0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://codeberg.org/lechner/guile-pam")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "1i034f42wnmnsz76pcniif2ikpbamh0cki3ib2zwmbnvif4656av"))))
+      (native-inputs (list
+                      autoconf
+                      automake
+                      gnulib
+                      guile-3.0
+                      libtool
+                      linux-pam
+                      nyacc-2.01
+                      pkg-config
+                      texinfo))
+      (inputs (list
+               guile-3.0
+               linux-pam))
+      (propagated-inputs (list
+                          nyacc-2.01))
+      (build-system gnu-build-system)
+      (arguments
+       (list
+        #:make-flags
+        #~(list (string-append "ENTRY_POINT_DIR=" #$output "/share/entry-points"))
+        #:phases
+        #~(modify-phases %standard-phases
+            (add-after 'unpack 'install-gnulib
+              ;; per https://lists.gnu.org/archive/html/guile-devel/2012-08/msg00042.html
+              (lambda* (#:key inputs #:allow-other-keys)
+                (let ((gnulib-build-aux (dirname
+                                         (search-input-file inputs
+                                                            "/src/gnulib/build-aux/config.rpath"))))
+                  (mkdir-p "build-aux")
+                  (copy-recursively gnulib-build-aux "build-aux"))
+                (let ((gnulib-m4 (dirname (search-input-file inputs
+                                                             "/src/gnulib/m4/lib-link.m4"))))
+                  (mkdir-p "m4")
+                  (copy-recursively gnulib-m4 "m4"))))
+            (add-after 'patch-source-shebangs 'fix-paths
+              (lambda* (#:key inputs #:allow-other-keys)
+                (for-each (lambda (file)
+                            (substitute* file
+                              (("/usr/bin/env -S guile ")
+                               (string-append (search-input-file inputs "/bin/guile") " \\\n"))))
+                          '("test/legacy-control-strings"))
+                (substitute* "scm/pam.scm"
+                  (("[.]/wrap/c/[.]libs/conversation.so")
+                   (string-append #$output "/lib/guile-pam/wrapper/conversation.so"))))))))
+      (home-page "https://codeberg.org/lechner/guile-pam")
+      (synopsis "Write your Linux-PAM authentication logic in Guile Scheme")
+      (description
+       "Guile-PAM provides a way to rewrite your authentication logic in the
+Linux PAM (pluggable authentication modules) in Guile Scheme. It should make
+those modules more transparent to the administrator and more intuitive to
+use.")
+      (license license:gpl3+))))
+
 (define-public linux-pam
   (package
     (name "linux-pam")
-- 
2.49.0