-
Notifications
You must be signed in to change notification settings - Fork 2
/
Makefile
112 lines (84 loc) · 3.39 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
SHELL := /bin/bash
PKGDIR := ./packages
RCPDIR := ./recipes
HTMLDIR := ./html
WORKDIR := ./working
WEBROOT := $$HOME/www
EMACS_COMMAND ?= emacs
SLEEP ?= 0
SANDBOX := ./sandbox
STABLE ?= nil
EVAL := $(EMACS_COMMAND)
## Check for needing to initialize CL-LIB from ELPA
NEED_CL-LIB := $(shell $(EMACS_COMMAND) --no-site-file --batch --eval '(prin1 (version< emacs-version "24.3"))')
ifeq ($(NEED_CL-LIB), t)
EMACS_COMMAND := $(EMACS_COMMAND) --eval "(package-initialize)"
endif
EVAL := $(EMACS_COMMAND) --no-site-file --batch -l package-build.el --eval
TIMEOUT := $(shell which timeout && echo "-k 60 600")
all: packages packages/archive-contents json index
## General rules
html: index
index: json
@echo " • Building html index ..."
$(MAKE) -C $(HTMLDIR)
## Cleanup rules
clean-working:
@echo " • Removing package sources ..."
git clean -dffX $(WORKDIR)/.
clean-packages:
@echo " • Removing packages ..."
git clean -dffX $(PKGDIR)/.
clean-json:
@echo " • Removing json files ..."
-rm -vf html/archive.json html/recipes.json
clean-sandbox:
@echo " • Removing sandbox files ..."
if [ -d '$(SANDBOX)' ]; then \
rm -rfv '$(SANDBOX)/elpa'; \
rmdir '$(SANDBOX)'; \
fi
sync:
rsync -avz --delete $(PKGDIR)/ $(WEBROOT)/packages
rsync -avz --safe-links --delete $(HTMLDIR)/* $(WEBROOT)/
chmod -R go+rx $(WEBROOT)/packages/*
clean: clean-working clean-packages clean-json clean-sandbox
packages: $(RCPDIR)/*
packages/archive-contents: $(PKGDIR)/*.entry
@echo " • Updating $@ ..."
$(EVAL) '(package-build-dump-archive-contents)'
cleanup:
$(EVAL) '(let ((package-build-stable $(STABLE)) (package-build-archive-dir (expand-file-name "$(PKGDIR)/" package-build--this-dir))) (package-build-cleanup))'
## Json rules
html/archive.json: $(PKGDIR)/archive-contents
@echo " • Building $@ ..."
$(EVAL) '(let ((package-build-stable $(STABLE)) (package-build-archive-dir (expand-file-name "$(PKGDIR)/" package-build--this-dir))) (package-build-archive-alist-as-json "html/archive.json"))'
html/recipes.json: $(RCPDIR)/.dirstamp
@echo " • Building $@ ..."
$(EVAL) '(let ((package-build-stable $(STABLE)) (package-build-archive-dir (expand-file-name "$(PKGDIR)/" package-build--this-dir))) (package-build-recipe-alist-as-json "html/recipes.json"))'
json: html/archive.json html/recipes.json
$(RCPDIR)/.dirstamp: .FORCE
@[[ ! -e $@ || "$$(find $(@D) -newer $@ -print -quit)" != "" ]] \
&& touch $@ || exit 0
## Recipe rules
$(RCPDIR)/%: .FORCE
@echo " • Building recipe $(@F) ..."
- $(TIMEOUT) $(EVAL) "(let ((package-build-stable $(STABLE)) (package-build-write-melpa-badge-images t) (package-build-archive-dir (expand-file-name \"$(PKGDIR)\" package-build--this-dir))) (package-build-archive '$(@F)))"
@echo " ✓ Wrote $$(ls -lsh $(PKGDIR)/$(@F)-*) "
@echo " Sleeping for $(SLEEP) ..."
sleep $(SLEEP)
@echo
## Sandbox
sandbox: packages/archive-contents
@echo " • Building sandbox ..."
mkdir -p $(SANDBOX)
$(EMACS_COMMAND) -Q \
--eval '(setq user-emacs-directory "$(SANDBOX)")' \
-l package \
--eval "(add-to-list 'package-archives '(\"gnu\" . \"http://elpa.gnu.org/packages/\") t)" \
--eval "(add-to-list 'package-archives '(\"melpa\" . \"https://melpa.org/packages/\") t)" \
--eval "(add-to-list 'package-archives '(\"sandbox\" . \"$(shell pwd)/$(PKGDIR)/\") t)" \
--eval "(package-refresh-contents)" \
--eval "(package-initialize)"
.PHONY: clean build index html json sandbox
.FORCE: