mirror of
https://github.com/correl/melpa.git
synced 2024-12-22 11:08:54 +00:00
Extract code for single and multi-file package builds into helper fns
This commit is contained in:
parent
80e99703d3
commit
2ffb028ccd
1 changed files with 76 additions and 73 deletions
149
package-build.el
149
package-build.el
|
@ -1029,82 +1029,85 @@ Returns the archive entry for the package."
|
||||||
((not version)
|
((not version)
|
||||||
(error "Unable to check out repository for %s" package-name))
|
(error "Unable to check out repository for %s" package-name))
|
||||||
((= 1 (length files))
|
((= 1 (length files))
|
||||||
(let* ((pkg-source (expand-file-name (caar files) source-dir))
|
(pb/build-single-file-package package-name version (caar files) source-dir target-dir))
|
||||||
(pkg-target (expand-file-name
|
|
||||||
(concat package-name "-" version ".el")
|
|
||||||
target-dir))
|
|
||||||
(pkg-info (pb/merge-package-info
|
|
||||||
(pb/get-package-info pkg-source)
|
|
||||||
package-name
|
|
||||||
version)))
|
|
||||||
(unless (string-equal (downcase (concat package-name ".el"))
|
|
||||||
(downcase (file-name-nondirectory pkg-source)))
|
|
||||||
(error "Single file %s does not match package name %s"
|
|
||||||
(file-name-nondirectory pkg-source) package-name))
|
|
||||||
(when (file-exists-p pkg-target)
|
|
||||||
(delete-file pkg-target))
|
|
||||||
(copy-file pkg-source pkg-target)
|
|
||||||
(let ((enable-local-variables nil)
|
|
||||||
(make-backup-files nil))
|
|
||||||
(with-current-buffer (find-file pkg-target)
|
|
||||||
(pb/update-or-insert-version version)
|
|
||||||
(pb/ensure-ends-here-line pkg-source)
|
|
||||||
(write-file pkg-target nil)
|
|
||||||
(condition-case err
|
|
||||||
(pb/package-buffer-info-vec)
|
|
||||||
(error
|
|
||||||
(pb/message "Warning: %S" err)))
|
|
||||||
(kill-buffer)))
|
|
||||||
|
|
||||||
(pb/write-pkg-readme target-dir
|
|
||||||
(pb/find-package-commentary pkg-source)
|
|
||||||
package-name)
|
|
||||||
(pb/archive-entry pkg-info 'single)))
|
|
||||||
((< 1 (length files))
|
((< 1 (length files))
|
||||||
(let* ((tmp-dir (file-name-as-directory (make-temp-file package-name t)))
|
(pb/build-multi-file-package package-name version files source-dir target-dir))
|
||||||
(pkg-dir-name (concat package-name "-" version))
|
|
||||||
(pkg-tmp-dir (expand-file-name pkg-dir-name tmp-dir))
|
|
||||||
(pkg-file (concat package-name "-pkg.el"))
|
|
||||||
(pkg-file-source (or (pb/find-source-file pkg-file files)
|
|
||||||
pkg-file))
|
|
||||||
(file-source (concat package-name ".el"))
|
|
||||||
(pkg-source (or (pb/find-source-file file-source files)
|
|
||||||
file-source))
|
|
||||||
(pkg-info (pb/merge-package-info
|
|
||||||
(let ((default-directory source-dir))
|
|
||||||
(or (pb/get-pkg-file-info pkg-file-source)
|
|
||||||
;; some packages (like magit) provide name-pkg.el.in
|
|
||||||
(pb/get-pkg-file-info
|
|
||||||
(expand-file-name (concat pkg-file ".in")
|
|
||||||
(file-name-directory pkg-source)))
|
|
||||||
(pb/get-package-info pkg-source)))
|
|
||||||
package-name
|
|
||||||
version)))
|
|
||||||
|
|
||||||
|
|
||||||
(pb/copy-package-files files source-dir pkg-tmp-dir)
|
|
||||||
(pb/write-pkg-file (expand-file-name pkg-file
|
|
||||||
(file-name-as-directory pkg-tmp-dir))
|
|
||||||
pkg-info)
|
|
||||||
|
|
||||||
(pb/generate-info-files files source-dir pkg-tmp-dir)
|
|
||||||
(pb/generate-dir-file files pkg-tmp-dir)
|
|
||||||
|
|
||||||
(let ((default-directory tmp-dir))
|
|
||||||
(pb/create-tar (expand-file-name (concat package-name "-" version ".tar")
|
|
||||||
target-dir)
|
|
||||||
pkg-dir-name))
|
|
||||||
|
|
||||||
(let ((default-directory source-dir))
|
|
||||||
(pb/write-pkg-readme target-dir
|
|
||||||
(pb/find-package-commentary pkg-source)
|
|
||||||
package-name))
|
|
||||||
|
|
||||||
(delete-directory pkg-tmp-dir t nil)
|
|
||||||
(pb/archive-entry pkg-info 'tar)))
|
|
||||||
|
|
||||||
(t (error "Unable to find files matching recipe patterns")))))
|
(t (error "Unable to find files matching recipe patterns")))))
|
||||||
|
|
||||||
|
(defun pb/build-single-file-package (package-name version file source-dir target-dir)
|
||||||
|
(let* ((pkg-source (expand-file-name file source-dir))
|
||||||
|
(pkg-target (expand-file-name
|
||||||
|
(concat package-name "-" version ".el")
|
||||||
|
target-dir))
|
||||||
|
(pkg-info (pb/merge-package-info
|
||||||
|
(pb/get-package-info pkg-source)
|
||||||
|
package-name
|
||||||
|
version)))
|
||||||
|
(unless (string-equal (downcase (concat package-name ".el"))
|
||||||
|
(downcase (file-name-nondirectory pkg-source)))
|
||||||
|
(error "Single file %s does not match package name %s"
|
||||||
|
(file-name-nondirectory pkg-source) package-name))
|
||||||
|
(when (file-exists-p pkg-target)
|
||||||
|
(delete-file pkg-target))
|
||||||
|
(copy-file pkg-source pkg-target)
|
||||||
|
(let ((enable-local-variables nil)
|
||||||
|
(make-backup-files nil))
|
||||||
|
(with-current-buffer (find-file pkg-target)
|
||||||
|
(pb/update-or-insert-version version)
|
||||||
|
(pb/ensure-ends-here-line pkg-source)
|
||||||
|
(write-file pkg-target nil)
|
||||||
|
(condition-case err
|
||||||
|
(pb/package-buffer-info-vec)
|
||||||
|
(error
|
||||||
|
(pb/message "Warning: %S" err)))
|
||||||
|
(kill-buffer)))
|
||||||
|
|
||||||
|
(pb/write-pkg-readme target-dir
|
||||||
|
(pb/find-package-commentary pkg-source)
|
||||||
|
package-name)
|
||||||
|
(pb/archive-entry pkg-info 'single)))
|
||||||
|
|
||||||
|
(defun pb/build-multi-file-package (package-name version files source-dir target-dir)
|
||||||
|
(let* ((tmp-dir (file-name-as-directory (make-temp-file package-name t)))
|
||||||
|
(pkg-dir-name (concat package-name "-" version))
|
||||||
|
(pkg-tmp-dir (expand-file-name pkg-dir-name tmp-dir))
|
||||||
|
(pkg-file (concat package-name "-pkg.el"))
|
||||||
|
(pkg-file-source (or (pb/find-source-file pkg-file files)
|
||||||
|
pkg-file))
|
||||||
|
(file-source (concat package-name ".el"))
|
||||||
|
(pkg-source (or (pb/find-source-file file-source files)
|
||||||
|
file-source))
|
||||||
|
(pkg-info (pb/merge-package-info
|
||||||
|
(let ((default-directory source-dir))
|
||||||
|
(or (pb/get-pkg-file-info pkg-file-source)
|
||||||
|
;; some packages (like magit) provide name-pkg.el.in
|
||||||
|
(pb/get-pkg-file-info
|
||||||
|
(expand-file-name (concat pkg-file ".in")
|
||||||
|
(file-name-directory pkg-source)))
|
||||||
|
(pb/get-package-info pkg-source)))
|
||||||
|
package-name
|
||||||
|
version)))
|
||||||
|
(pb/copy-package-files files source-dir pkg-tmp-dir)
|
||||||
|
(pb/write-pkg-file (expand-file-name pkg-file
|
||||||
|
(file-name-as-directory pkg-tmp-dir))
|
||||||
|
pkg-info)
|
||||||
|
|
||||||
|
(pb/generate-info-files files source-dir pkg-tmp-dir)
|
||||||
|
(pb/generate-dir-file files pkg-tmp-dir)
|
||||||
|
|
||||||
|
(let ((default-directory tmp-dir))
|
||||||
|
(pb/create-tar (expand-file-name (concat package-name "-" version ".tar")
|
||||||
|
target-dir)
|
||||||
|
pkg-dir-name))
|
||||||
|
|
||||||
|
(let ((default-directory source-dir))
|
||||||
|
(pb/write-pkg-readme target-dir
|
||||||
|
(pb/find-package-commentary pkg-source)
|
||||||
|
package-name))
|
||||||
|
|
||||||
|
(delete-directory pkg-tmp-dir t nil)
|
||||||
|
(pb/archive-entry pkg-info 'tar)))
|
||||||
|
|
||||||
|
|
||||||
;; In future we should provide a hook, and perform this step in a separate package.
|
;; In future we should provide a hook, and perform this step in a separate package.
|
||||||
;; Note also that it would be straightforward to generate the SVG ourselves, which would
|
;; Note also that it would be straightforward to generate the SVG ourselves, which would
|
||||||
|
|
Loading…
Reference in a new issue