-
Notifications
You must be signed in to change notification settings - Fork 2
/
Makefile
146 lines (108 loc) · 3.25 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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# Original makefile from https://github.com/martinthomson/i-d-template
# Edited by wkumari to remove a bunch of the extra stuff I'll never use.
# The following tools are used by this file.
# All are assumed to be on the path, but you can override these
# in the environment, or command line.
# Mandatory:
# https://pypi.python.org/pypi/xml2rfc
xml2rfc ?= xml2rfc
# If you are using markdown files:
# https://github.com/cabo/kramdown-rfc2629
kramdown-rfc2629 ?= kramdown-rfc2629
# If you are using outline files:
# https://github.com/Juniper/libslax/tree/master/doc/oxtradoc
oxtradoc ?= oxtradoc.in
# For sanity checkout your draft:
# https://tools.ietf.org/tools/idnits/
idnits ?= idnits
# For diff:
# https://tools.ietf.org/tools/rfcdiff/
rfcdiff ?= rfcdiff --browse
# For generating PDF:
# https://www.gnu.org/software/enscript/
enscript ?= enscript
# http://www.ghostscript.com/
ps2pdf ?= ps2pdf
## Work out what to build
draft := $(basename $(lastword $(sort $(wildcard draft-*.xml)) $(sort $(wildcard draft-*.org)) $(sort $(wildcard draft-*.md))))
ifeq (,$(draft))
$(warning No file named draft-*.md or draft-*.xml or draft-*.org)
$(error Read README.md for setup instructions)
endif
draft_type := $(suffix $(firstword $(wildcard $(draft).md $(draft).org $(draft).xml)))
## Targets
.PHONY: latest txt html pdf submit diff clean update ghpages README.txt
latest: txt html
txt: $(draft).txt
html: $(draft).html
pdf: $(draft).pdf
README.txt: txt
cp $(draft).txt README.txt
idnits: $(draft).txt
$(idnits) $<
clean:
-rm -f $(draft).{txt,html,pdf} index.html
-rm -f $(draft)-[0-9][0-9].{xml,md,org,txt,html,pdf}
-rm -f *.diff.html
ifneq (.xml,$(draft_type))
-rm -f $(draft).xml
endif
## diff
diff:
git diff $(draft).txt
commit: $(draft).txt
read -p "Commit message: " msg; \
git commit -a -m "$$msg";
@git push
tag:
@read -p "Tag message (e.g: Version-00): " tag; \
git tag -a $$tag -m $$tag
@git push --tags
## Recipes
.INTERMEDIATE: $(draft).xml
%.xml: %.md
$(kramdown-rfc2629) $< > $@
%.xml: %.org
$(oxtradoc) -m outline-to-xml -n "$@" $< > $@
%.txt: %.xml
$(xml2rfc) $< -o $@ --text
%.html: %.xml
$(xml2rfc) $< -o $@ --html
%.pdf: %.txt
$(enscript) --margins 76::76: -B -q -p - $^ | $(ps2pdf) - $@
## Update the gh-pages branch with useful files
# Only run upload if we are local or on the master branch
IS_LOCAL := $(if $(TRAVIS),,true)
ifeq (master,$(TRAVIS_BRANCH))
IS_MASTER := $(findstring false,$(TRAVIS_PULL_REQUEST))
else
IS_MASTER :=
endif
index.html: $(draft).html
cp $< $@
ghpages: index.html $(draft).txt
ifneq (,$(or $(IS_LOCAL),$(IS_MASTER)))
mkdir $(GHPAGES_TMP)
cp -f $^ $(GHPAGES_TMP)
git clean -qfdX
ifeq (true,$(TRAVIS))
git config user.email "[email protected]"
git config user.name "Travis CI Bot"
git checkout -q --orphan gh-pages
git rm -qr --cached .
git clean -qfd
git pull -qf origin gh-pages --depth=5
else
git checkout gh-pages
git pull
endif
mv -f $(GHPAGES_TMP)/* $(CURDIR)
git add $^
if test `git status -s | wc -l` -gt 0; then git commit -m "Script updating gh-pages."; fi
ifneq (,$(GH_TOKEN))
@echo git push https://github.com/$(TRAVIS_REPO_SLUG).git gh-pages
@git push https://$(GH_TOKEN)@github.com/$(TRAVIS_REPO_SLUG).git gh-pages
endif
-git checkout -qf "$(GIT_ORIG)"
-rm -rf $(GHPAGES_TMP)
endif