me
/
guix
Archived
1
0
Fork 0

guix: emacs-build-system: Process package source in build tree.

* guix/build/emacs-build-system.scm (ensure-package-description)
(patch-el-files, make-autoloads): Operate on the current working directory,
either implicitly, or through (getcwd).
(enable-autoloads-compilation): Deleted variable, logic moved into
make-autoloads.
(%standard-phases): Adjust accordingly.
master
Liliana Marie Prikler 2023-10-19 06:06:48 +02:00
parent 0647f308b4
commit 5de8779ad9
No known key found for this signature in database
GPG Key ID: 442A84B8C70E2F87
1 changed files with 32 additions and 49 deletions

View File

@ -132,29 +132,25 @@ environment variable\n" source-directory))
(parameterize ((%emacs emacs))
(emacs-compile-directory (elpa-directory out)))))
(define* (patch-el-files #:key outputs #:allow-other-keys)
"Substitute the absolute \"/bin/\" directory with the right location in the
store in '.el' files."
(define* (patch-el-files #:key inputs outputs #:allow-other-keys)
"Substitute the absolute \"/bin/\" and \"/sbin\" directories with the right
locations in the store in '.el' files."
(let* ((out (assoc-ref outputs "out"))
(elpa-name-ver (store-directory->elpa-name-version out))
(el-dir (string-append out %install-dir "/" elpa-name-ver))
(el-files (find-files (getcwd) "\\.el$")))
(define (substitute-program-names)
(substitute* el-files
(("\"/bin/([^.]\\S*)\"" _ cmd-name)
(let ((cmd (which cmd-name)))
(unless cmd
(error "patch-el-files: unable to locate " cmd-name))
(string-append "\"" cmd "\"")))))
(define substitute-program-names
(let ((el-files (find-files (getcwd) "\\.el$")))
(lambda ()
(substitute* el-files
(("\"/(s?bin/[^.]\\S*)\"" _ cmd)
(let ((cmd (search-input-file inputs cmd)))
(unless cmd
(error "patch-el-files: unable to locate " (basename cmd)))
(string-append "\"" cmd "\"")))))))
(with-directory-excursion el-dir
;; Some old '.el' files (e.g., tex-buf.el in AUCTeX) are still
;; ISO-8859-1-encoded.
(unless (false-if-exception (substitute-program-names))
(with-fluids ((%default-port-encoding "ISO-8859-1"))
(substitute-program-names))))
#t))
(unless (false-if-exception (substitute-program-names))
;; Some old '.el' files (e.g., tex-buf.el in AUCTeX) are still
;; ISO-8859-1-encoded.
(with-fluids ((%default-port-encoding "ISO-8859-1"))
(substitute-program-names))))
(define (find-root-library-file name)
(let loop ((parts (string-split
@ -224,10 +220,8 @@ store in '.el' files."
(emacs-batch-edit-file (string-append name ".el")
%write-pkg-file-form)))
(let* ((out (assoc-ref outputs "out"))
(elpa-name-ver (store-directory->elpa-name-version out)))
(with-directory-excursion (elpa-directory out)
(and=> (find-root-library-file elpa-name-ver) write-pkg-file))))
(let ((name (store-directory->elpa-name-version (assoc-ref outputs "out"))))
(and=> (find-root-library-file name) write-pkg-file)))
(define* (check #:key tests? (test-command '("make" "check"))
(parallel-tests? #t) #:allow-other-keys)
@ -306,24 +300,15 @@ parallel. PARALLEL-TESTS? is ignored when using a non-make TEST-COMMAND."
info-files)))
#t))
(define* (make-autoloads #:key outputs inputs #:allow-other-keys)
(define* (make-autoloads #:key outputs #:allow-other-keys)
"Generate the autoloads file."
(let* ((emacs (search-input-file inputs "/bin/emacs"))
(out (assoc-ref outputs "out"))
(elpa-name-ver (store-directory->elpa-name-version out))
(elpa-name (package-name->name+version elpa-name-ver))
(el-dir (elpa-directory out)))
(parameterize ((%emacs emacs))
(emacs-generate-autoloads elpa-name el-dir))))
(define* (enable-autoloads-compilation #:key outputs #:allow-other-keys)
"Remove the NO-BYTE-COMPILATION local variable embedded in the generated
autoload files."
(let* ((out (assoc-ref outputs "out"))
(autoloads (find-files out "-autoloads.el$")))
(substitute* autoloads
((";; no-byte-compile.*") ""))
#t))
(emacs-generate-autoloads
(package-name->name+version (store-directory->elpa-name-version
(assoc-ref outputs "out")))
(getcwd))
;; Ensure that autoloads can be byte-compiled.
(substitute* (find-files "." "-autoloads\\.el$")
((";; no-byte-compile.*") "")))
(define* (validate-compiled-autoloads #:key outputs #:allow-other-keys)
"Verify whether the byte compiled autoloads load fine."
@ -358,7 +343,11 @@ for libraries following the ELPA convention."
(define %standard-phases
(modify-phases gnu:%standard-phases
(replace 'unpack unpack)
(add-after 'unpack 'ensure-package-description
ensure-package-description)
(add-after 'unpack 'expand-load-path expand-load-path)
(add-after 'unpack 'patch-el-files patch-el-files)
(add-after 'expand-load-path 'make-autoloads make-autoloads)
(add-after 'expand-load-path 'add-install-to-native-load-path
add-install-to-native-load-path)
(delete 'bootstrap)
@ -366,14 +355,8 @@ for libraries following the ELPA convention."
(delete 'build)
(replace 'check check)
(replace 'install install)
(add-after 'install 'make-autoloads make-autoloads)
(add-after 'make-autoloads 'enable-autoloads-compilation
enable-autoloads-compilation)
(add-after 'enable-autoloads-compilation 'patch-el-files patch-el-files)
(add-after 'patch-el-files 'ensure-package-description
ensure-package-description)
;; The .el files are byte compiled directly in the store.
(add-after 'ensure-package-description 'build build)
(add-after 'install 'build build)
(add-after 'build 'validate-compiled-autoloads validate-compiled-autoloads)
(add-after 'validate-compiled-autoloads 'move-doc move-doc)))