--- Begin Message ---
Subject: |
[PATCH] build-system: emacs: Add generation of -pkg.el files. |
Date: |
Thu, 9 Dec 2021 12:01:46 +0300 |
* guix/build/emacs-build-system.scm (%default-exclude): Add generation of
-pkg.el files for packages, which do not provide them.
---
Implemented phase, which generates -pkg.el from comments in library file. The
solution for finding main el file of the package is a little hacky, because
package name isn't available build time.
I took a part of the elisp implementation from melpa source code.
https://github.com/melpa/melpa/blob/master/package-build/package-build.el#L553
guix/build/emacs-build-system.scm | 71 ++++++++++++++++++++++++++++++-
1 file changed, 70 insertions(+), 1 deletion(-)
diff --git a/guix/build/emacs-build-system.scm
b/guix/build/emacs-build-system.scm
index f13162d6c4..ee934f4bde 100644
--- a/guix/build/emacs-build-system.scm
+++ b/guix/build/emacs-build-system.scm
@@ -154,6 +154,74 @@ (define (substitute-program-names)
(substitute-program-names))))
#t))
+(define* (find-root-library-file name)
+ (let lp ((subnames (string-split
+ (package-name-version->elpa-name-version name) #\-))
+ (possible-name ""))
+ (cond
+ ((file-exists? (string-append possible-name ".el")) possible-name)
+ ((null? subnames) #f)
+ (#t (lp (cdr subnames) (string-append
+ possible-name
+ (if (string-null? possible-name) "" "-")
+ (car subnames)))))))
+
+(define (add-pkg-expr name)
+ `(progn
+ (require 'lisp-mnt)
+ (require 'package)
+
+ (defun build-package-desc-from-library (name)
+ (package-desc-from-define
+ name
+ ;; Workaround for malformed version string (for example "24 (beta)" in
+ ;; paredit.el), try to parse version obtained by lm-version, before
+ ;; trying to create package-desc. Otherwis the whole process of
+ ;; generation -pkg.el will fail.
+ (condition-case
+ nil
+ (version-to-list (lm-version))
+ (lm-version)
+ (error "0.0.0"))
+ (or (save-excursion
+ (goto-char (point-min))
+ (and (re-search-forward
+ "^;;; [^ ]*\\.el ---[ \t]*\\(.*?\\)[ \t]*\\(-\\*-.*-\\*-[
\t]*\\)?$"
+ nil t)
+ (match-string-no-properties 1)))
+ "No description available.")
+ (when-let ((require-lines (lm-header-multiline "package-requires")))
+ (package--prepare-dependencies
+ (package-read-from-string
+ (mapconcat 'identity require-lines " "))))
+ :kind 'single
+ :url (lm-homepage)
+ :keywords (lm-keywords-list)
+ :maintainer (lm-maintainer)
+ :authors (lm-authors)))
+
+ (defun generate-package-description-file (name)
+ (package-generate-description-file
+ (build-package-desc-from-library name)
+ (concat name "-pkg.el")))
+
+ (condition-case err
+ (generate-package-description-file ,name)
+ (message (concat ,name "-pkg.el file generated."))
+ (error
+ (message "There are some errors during generation of -pkg.el file:")
+ (message "%s" (error-message-string err))))))
+
+(define* (add-pkg-file #:key name outputs #:allow-other-keys)
+ (define source (getcwd))
+ (chdir (elpa-directory (assoc-ref outputs "out")))
+ (let ((el-lib (find-root-library-file name)))
+ (when (and el-lib (not (file-exists? (string-append el-lib "-pkg.el"))))
+ (emacs-batch-edit-file (string-append el-lib ".el")
+ (add-pkg-expr el-lib))))
+ (chdir source)
+ #t)
+
(define* (check #:key tests? (test-command '("make" "check"))
(parallel-tests? #t) #:allow-other-keys)
"Run the tests by invoking TEST-COMMAND.
@@ -294,7 +362,8 @@ (define %standard-phases
enable-autoloads-compilation)
(add-after 'enable-autoloads-compilation 'patch-el-files patch-el-files)
;; The .el files are byte compiled directly in the store.
- (add-after 'patch-el-files 'build build)
+ (add-after 'patch-el-files 'add-pkg-file add-pkg-file)
+ (add-after 'add-pkg-file 'build build)
(add-after 'build 'validate-compiled-autoloads validate-compiled-autoloads)
(add-after 'validate-compiled-autoloads 'move-doc move-doc)))
--
2.34.0
signature.asc
Description: PGP signature
--- End Message ---
--- Begin Message ---
Subject: |
Re: [PATCH] build-system: emacs: Add generation of -pkg.el files. |
Date: |
Sat, 29 Jan 2022 08:53:40 +0100 |
User-agent: |
Evolution 3.42.1 |
Am Freitag, dem 28.01.2022 um 18:29 +0300 schrieb Andrew Tropin:
> Have been using your version of the patch for a week now, added a few
> more emacs packages to my config, nothing stopped to build or launch,
> so it seems to work good.
"Seems to work good" sounds good enough to me. Let's mark this bug as
done :)
--- End Message ---