[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] elpa-admin c497b5b 083/357: * GNUmakefile: Rename from Makefile.
From: |
Stefan Monnier |
Subject: |
[elpa] elpa-admin c497b5b 083/357: * GNUmakefile: Rename from Makefile. Add targets for in-place use. |
Date: |
Thu, 10 Dec 2020 18:06:20 -0500 (EST) |
branch: elpa-admin
commit c497b5ba363bcd92d5e7bbb716e87e16356d9235
Author: Stefan Monnier <monnier@iro.umontreal.ca>
Commit: Stefan Monnier <monnier@iro.umontreal.ca>
* GNUmakefile: Rename from Makefile. Add targets for in-place use.
(all, all-in-place): New targets.
* admin/archive-contents.el (archive--simple-package-p): Ignore autosave
files.
(archive--refresh-pkg-file): New function.
(archive--write-pkg-file): Print with ' and ` shorthands.
* packages/company/company-pysmell.el: Don't require pysmell during compile.
* packages/muse/htmlize-hack.el: Don't require htmlize during compile.
* packages/shen-mode/shen-mode.el (shen-functions): Define during compile.
* smart-operator/smart-operator.el (smart-operator-insert-1): Use pcase.
---
GNUmakefile | 149 ++++++++++++++++++++++++++++++++++++++++++++++
admin/archive-contents.el | 18 +++++-
2 files changed, 164 insertions(+), 3 deletions(-)
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..5d45065
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,149 @@
+# Makefile for GNU Emacs Lisp Package Archive.
+
+EMACS=emacs
+
+ARCHIVE_TMP=archive-tmp
+SITE_DIR=site
+
+.PHONY: archive-tmp changelogs process-archive archive-full org-fetch clean
all do-it
+
+all: all-in-place
+
+## Set up the source files for direct usage, by pointing
+## `package-directory-list' to the site/ directory.
+site: packages
+ mkdir -p $(SITE_DIR)
+ $(EMACS) -batch -l $(CURDIR)/admin/archive-contents.el \
+ --eval "(batch-make-site-dir \"packages\" \"$(SITE_DIR)\")"
+
+site/%: do-it
+ $(EMACS) -batch -l $(CURDIR)/admin/archive-contents.el \
+ --eval "(progn (setq debug-on-error t) (batch-make-site-package
\"$@\"))"
+
+## Deploy the package archive to archive/, with packages in
+## archive/packages/:
+archive: archive-tmp
+ $(MAKE) $(MFLAGS) process-archive
+
+archive-tmp: packages changelogs
+ -rm -r $(ARCHIVE_TMP)
+ mkdir -p $(ARCHIVE_TMP)
+ cp -a packages/. $(ARCHIVE_TMP)/packages
+
+# Refresh the ChangeLog files. This needs to be done in
+# the source tree, because it needs the Bzr data!
+changelogs:
+ cd packages; \
+ $(EMACS) -batch -l $(CURDIR)/admin/archive-contents.el \
+ -f batch-prepare-packages
+
+process-archive:
+ # FIXME, we could probably speed this up significantly with
+ # rules like "%.tar: ../%/ChangeLog" so we only rebuild the packages
+ # that have indeed changed.
+ cd $(ARCHIVE_TMP)/packages; $(EMACS) -batch -l
$(CURDIR)/admin/archive-contents.el -f batch-make-archive
+ @cd $(ARCHIVE_TMP)/packages; \
+ for pt in *; do \
+ if [ -d $$pt ]; then \
+ echo "Creating tarball $${pt}.tar" && \
+ tar -cf $${pt}.tar $$pt --remove-files; \
+ fi; \
+ done
+ mkdir -p archive/packages
+ mv archive/packages archive/packages-old
+ mv $(ARCHIVE_TMP)/packages archive/packages
+ chmod -R a+rX archive/packages
+ rm -rf archive/packages-old
+ rm -rf $(ARCHIVE_TMP)
+
+## Deploy the package archive to archive/ including the Org daily:
+archive-full: archive-tmp org-fetch
+ $(MAKE) $(MFLAGS) process-archive
+ #mkdir -p archive/admin
+ #cp admin/* archive/admin/
+
+org-fetch: archive-tmp
+ cd $(ARCHIVE_TMP)/packages; \
+ pkgname=`curl -s http://orgmode.org/elpa/|perl -ne 'push @f, $$1 if
m/(org-\d{8})\.tar/; END { @f = sort @f; print "$$f[-1]\n"}'`; \
+ wget -q http://orgmode.org/elpa/$${pkgname}.tar -O $${pkgname}.tar; \
+ if [ -f $${pkgname}.tar ]; then \
+ tar xf $${pkgname}.tar; \
+ rm -f $${pkgname}.tar; \
+ mv $${pkgname} org; \
+ fi
+
+clean:
+ rm -rf archive $(ARCHIVE_TMP) $(SITE_DIR)
+
+########## Rules for in-place installation ##########
+pkgs := $(foreach pkg, $(wildcard packages/*), \
+ $(if $(shell [ -d "$(pkg)" ] && echo true), $(pkg)))
+
+define SET-diff
+$(shell echo "$(1)" "$(2)" "$(2)" | tr ' ' '\n' | sort | uniq -u)
+endef
+
+define FILTER-nonsrc
+$(filter-out %-autoloads.el %-pkg.el, $(1))
+endef
+
+define RULE-srcdeps
+$(1): $$(call FILTER-nonsrc, $$(wildcard $$(dir $(1))/*.el))
+endef
+
+# Compute the set of autolods files and their dependencies.
+autoloads := $(foreach pkg, $(pkgs), $(pkg)/$(notdir $(pkg))-autoloads.el)
+
+$(foreach al, $(autoloads), $(eval $(call RULE-srcdeps, $(al))))
+%-autoloads.el:
+ @echo 'EMACS -f package-generate-autoloads $@'
+ @cd $(dir $@); \
+ $(EMACS) --batch \
+ -l $(CURDIR)/admin/archive-contents.el \
+ --eval "(archive--refresh-pkg-file)" \
+ --eval "(require 'package)" \
+ --eval "(package-generate-autoloads '$$(basename $$(pwd)) \
+ \"$$(pwd)\")"
+
+# Put into elcs the set of elc files we need to keep up-to-date.
+# I.e. one for each .el file except for the -pkg.el, the -autoloads.el, and
+# the .el files that are marked "no-byte-compile".
+els := $(call FILTER-nonsrc, $(wildcard packages/*/*.el))
+naive_elcs := $(patsubst %.el, %.elc, $(els))
+current_elcs := $(wildcard packages/*/*.elc)
+
+extra_els := $(call SET-diff, $(els), $(patsubst %.elc, %.el, $(current_elcs)))
+nbc_els := $(foreach el, $(extra_els), \
+ $(if $(shell grep '^;.*no-byte-compile: t' "$(el)"), $(el)))
+elcs := $(call SET-diff, $(naive_elcs), $(patsubst %.el, %.elc, $(nbc_els)))
+
+# '(dolist (al (quote ($(patsubst %, "%", $(autoloads))))) (load
(expand-file-name al) nil t))'
+%.elc: %.el $(autoloads)
+ @echo 'EMACS -f batch-byte-compile $<'
+ @$(EMACS) --batch \
+ --eval "(setq package-directory-list '(\"$(abspath packages)\"))" \
+ --eval '(package-initialize)' \
+ -L $(dir $@) -f batch-byte-compile $<
+
+# Remove .elc files that don't have a corresponding .el file any more.
+extra_elcs := $(call SET-diff, $(current_elcs), $(naive_elcs))
+.PHONY: $(extra_elcs)
+$(extra_elcs):; rm $@
+
+# # Put into single_pkgs the set of -pkg.el files we need to keep up-to-date.
+# # I.e. all the -pkg.el files for the single-file packages.
+# single_pkgs:=$(foreach pkg, $(pkgs), \
+# $(word $(words $(call FILTER-nonsrc, \
+# $(wildcard $(pkg)/*.el))), \
+# $(pkg)/$(notdir $(pkg))-pkg.el))
+# #$(foreach al, $(single_pkgs), $(eval $(call RULE-srcdeps, $(al))))
+# %-pkg.el: %.el
+# @echo 'EMACS -f package-generate-description-file $@'
+# @$(EMACS) --batch \
+# --eval '(require (quote package))' \
+# --eval '(setq b (find-file-noselect "$<"))' \
+# --eval '(setq d (with-current-buffer b (package-buffer-info)))' \
+# --eval '(package-generate-description-file d "$(dir $@)")'
+
+
+all-in-place: $(extra_elcs) $(autoloads) $(elcs) # $(single_pkgs)
diff --git a/admin/archive-contents.el b/admin/archive-contents.el
index 28a949d..56daa8e 100644
--- a/admin/archive-contents.el
+++ b/admin/archive-contents.el
@@ -1,6 +1,6 @@
;;; archive-contents.el --- Auto-generate an Emacs Lisp package archive.
-;; Copyright (C) 2011, 2012 Free Software Foundation, Inc
+;; Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc
;; Author: Stefan Monnier <monnier@iro.umontreal.ca>
@@ -132,7 +132,7 @@ Otherwise, return nil."
(files (directory-files dir nil archive-re-no-dot))
version description req commentary)
(dolist (file (prog1 files (setq files ())))
- (unless (string-match "\\.elc\\'" file)
+ (unless (string-match "\\(?:\\.elc\\|~\\)\\'" file)
(push file files)))
(setq files (delete (concat pkg "-pkg.el") files))
(setq files (delete (concat pkg "-autoloads.el") files))
@@ -242,7 +242,7 @@ PKG-readme.txt. Return the descriptor."
(cons (intern pkg) (vector (version-to-list vers) req (nth 3 exp) 'tar))))
(defun archive--multi-file-package-def (dir pkg)
- "Reurn the `define-package' form in the file DIR/PKG-pkg.el."
+ "Return the `define-package' form in the file DIR/PKG-pkg.el."
(let ((pkg-file (expand-file-name (concat pkg "-pkg.el") dir)))
(with-temp-buffer
(unless (file-exists-p pkg-file)
@@ -284,6 +284,17 @@ PKG-readme.txt. Return the descriptor."
;; FIXME: Don't compile the -pkg.el files!
(byte-recompile-directory dir 0))))))
+(defun archive--refresh-pkg-file ()
+ (let* ((dir (directory-file-name default-directory))
+ (pkg (file-name-nondirectory dir))
+ (simple-p (archive--simple-package-p dir pkg)))
+ (if simple-p
+ (progn
+ ;; (message "Refreshing pkg description of %s" pkg)
+ (apply 'archive--write-pkg-file dir pkg simple-p))
+ ;; (message "Not refreshing pkg description of %s" pkg)
+ )))
+
(defun batch-make-site-package (sdir)
(let* ((dest (car (file-attributes sdir)))
(pkg (file-name-nondirectory (directory-file-name (or dest sdir))))
@@ -297,6 +308,7 @@ PKG-readme.txt. Return the descriptor."
(defun archive--write-pkg-file (pkg-dir name version desc requires &rest
ignored)
(let ((pkg-file (expand-file-name (concat name "-pkg.el") pkg-dir))
(print-level nil)
+ (print-quoted t)
(print-length nil))
(write-region
(concat (format ";; Generated package description from %s.el\n"
- [elpa] elpa-admin ce02925 001/357: Initial revision, (continued)
- [elpa] elpa-admin ce02925 001/357: Initial revision, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin b824440 047/357: Minor rephrasing in README, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin b25e1bf 039/357: Rephrase documentation and comments, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 285d815 049/357: Fix last change., Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 303f2c9 075/357: * admin/archive-contents.el (batch-make-site-package): New function., Stefan Monnier, 2020/12/10
- [elpa] elpa-admin dfa5808 053/357: Rework archive-contents.el to handle new packages/ structure., Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 6c94727 068/357: archive-contents.el (archive--simple-package-p): Fix prop-line matching., Stefan Monnier, 2020/12/10
- [elpa] elpa-admin da7456c 065/357: write README in markdown, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 49fce77 070/357: Rename README to README.rst, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin cbd75c6 082/357: README.md, load-relative.el: Go over documentation. Makefile.am: add targets test and test-short, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin c497b5b 083/357: * GNUmakefile: Rename from Makefile. Add targets for in-place use.,
Stefan Monnier <=
- [elpa] elpa-admin 42c5112 084/357: * GNUmakefile (%.elc): Don't depend on $(autoloads) since that causes, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 480283a 089/357: Move check_copyright to the makefile, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin bffc4a6 090/357: Don't create local branches, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 2ebff0e 093/357: Use README.{rst,md,org}; Auto-generate foo-pkg.el., Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 55c3f5d 100/357: Add YAsnippet metadata., Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 21e1b0e 101/357: Sync with yasnippet/master, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 4f4a301 104/357: * GNUmakefile: Obey a .elpaignore file in a package's root directory., Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 0ed260a 107/357: add :keywords to extra package properties, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 52e4af0 105/357: Add new element to the archive-contents vector, and put, Stefan Monnier, 2020/12/10
- [elpa] elpa-admin 9f93862 109/357: seems to be generally usable, added a README, Stefan Monnier, 2020/12/10