# Makefile for GNU Emacs Lisp Package Archive.
-EMACS=emacs
+EMACS=emacs --batch
ARCHIVE_TMP=archive-tmp
SITE_DIR=site
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 \"$@\"))"
+CR_EXCEPTIONS=copyright_exceptions
+.PHONY: check_copyrights
+check_copyrights:
+ @echo "Compute exceptions >$(CR_EXCEPTIONS)~"
+ @export LANG=C; \
+ (cd packages; \
+ find . -name '*.el' -print0 | \
+ xargs -0 grep -L 'Free Software Foundation, Inc' | \
+ grep -v '\(\.dir-locals\|.-\(pkg\|autoloads\)\)\.el$$'; \
+ find . -name '*.el' -print | \
+ while read f; do \
+ fquoted="$$(echo $$f|tr '|' '_')"; \
+ sed -n -e '/[Cc]opyright.*, *[1-9][-0-9]*,\?$$/N' \
+ -e '/Free Software Foundation/d' \
+ -e "s|^\\(.*[Cc]opyright\\)|$$fquoted:\\1|p" \
+ "$$f"; \
+ done) | sort >$(CR_EXCEPTIONS)~
+ diff -u "$(CR_EXCEPTIONS)" "$(CR_EXCEPTIONS)~"
## Deploy the package archive to archive/, with packages in
## archive/packages/:
archive: archive-tmp
$(MAKE) $(MFLAGS) process-archive
-archive-tmp: packages changelogs
+archive-tmp: packages
-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
+ cd $(ARCHIVE_TMP)/packages; \
+ $(EMACS) -l $(CURDIR)/admin/archive-contents.el \
+ -f batch-make-archive
+ @cd $(ARCHIVE_TMP)/packages; \
+ for pt in *; do \
+ if [ -f "$${pt}/.elpaignore" ]; then \
+ ignore="$${pt}/.elpaignore"; \
+ else \
+ ignore="/dev/null"; \
+ fi; \
+ if [ -d $$pt ]; then \
+ echo "Creating tarball $${pt}.tar" && \
+ tar -cf $${pt}.tar $$pt -X "$$ignore"; \
+ rm -r $${pt}; \
+ fi; \
+ done
mkdir -p archive/packages
mv archive/packages archive/packages-old
mv $(ARCHIVE_TMP)/packages archive/packages
#mkdir -p archive/admin
#cp admin/* archive/admin/
+# FIXME: Turn it into an `external', which will require adding the notion of
+# "snapshot" packages.
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"}'`; \
clean:
rm -rf archive $(ARCHIVE_TMP) $(SITE_DIR)
-########## Rules for in-place installation ##########
+########## Rules for in-place installation ####################################
pkgs := $(foreach pkg, $(wildcard packages/*), \
$(if $(shell [ -d "$(pkg)" ] && echo true), $(pkg)))
%-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)\")"
+ $(EMACS) -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
# '(dolist (al (quote ($(patsubst %, "%", $(autoloads))))) (load (expand-file-name al) nil t))'
%.elc: %.el
@echo 'EMACS -f batch-byte-compile $<'
- @$(EMACS) --batch \
+ @$(EMACS) \
--eval "(setq package-directory-list '(\"$(abspath packages)\"))" \
--eval '(package-initialize)' \
-L $(dir $@) -f batch-byte-compile $<
# #$(foreach al, $(single_pkgs), $(eval $(call RULE-srcdeps, $(al))))
# %-pkg.el: %.el
# @echo 'EMACS -f package-generate-description-file $@'
-# @$(EMACS) --batch \
+# @$(EMACS) \
# --eval '(require (quote package))' \
# --eval '(setq b (find-file-noselect "$<"))' \
# --eval '(setq d (with-current-buffer b (package-buffer-info)))' \
all-in-place: $(extra_elcs) $(autoloads) # $(single_pkgs)
# Do them in a sub-make, so that autoloads are done first.
$(MAKE) elcs
+
+
+############### Rules to prepare the externals ################################
+
+.PHONY:
+externals:
+ $(EMACS) -l admin/archive-contents.el \
+ -f archive-add/remove/update-externals