Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
206 lines (168 loc) · 6.56 KB
/
Copy pathMakefile
File metadata and controls
206 lines (168 loc) · 6.56 KB
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
R := https://github.com/makeplus/makes
M := .cache/makes
$(shell [ -d '$M' ] || git clone -q $R '$M')
MAKES_LOCAL_DIR ?= $(CURDIR)/.cache/local
GRENADINE-VERSION := 0.1.15
ifdef GLOAT_DIR
GLOAT-DIR := $(GLOAT_DIR)
endif
CLJ_CONFIG := $(CURDIR)/.cache/clojure
export CLJ_CONFIG
JOLT_CACHE_DIR := $(CURDIR)/.cache/jolt
JOLT_GITLIBS_DIR := $(CURDIR)/.cache/jolt/gitlibs
JOLT_MAVEN_REPOSITORY := $(CURDIR)/.cache/m2
export JOLT_CACHE_DIR JOLT_GITLIBS_DIR JOLT_MAVEN_REPOSITORY
JOLT_SOURCE_DIR ?= $(abspath $(CURDIR)/../jolt)
GOBB_SOURCE_DIR ?= $(abspath $(CURDIR)/../gobb)
include $M/init.mk
include $M/clojure.mk
include $M/cljr.mk
include $M/glojure.mk
include $M/gloat.mk
include $M/gobb.mk
include $M/jolt.mk
include $M/gh.mk
include $M/powershell.mk
include $M/shellcheck.mk
include $M/yq.mk
include $M/clean.mk
include $M/shell.mk
GRENADINE := $(CURDIR)/bin/grenadine
SOURCE-STAGE := $(CURDIR)/.cache/source-stage
SOURCE-STAGE-STAMP := $(SOURCE-STAGE)/.stamp
STAGE-SOURCES := $(CURDIR)/util/stage-sources
RELEASE := $(CURDIR)/util/release
RELEASE-DIST := $(CURDIR)/util/release-dist
BREW-UPDATE := $(CURDIR)/util/brew-update
DIST := $(CURDIR)/dist
RELEASE-BUILD := $(CURDIR)/.cache/release
SOURCE-PATCHES := $(CURDIR)/util/source-patches
SOURCE-MANIFEST := $(CURDIR)/patch/sources.yaml
PREFIX ?= $(if $(filter 0,$(shell id -u)),/usr/local,$(HOME)/.local)
GRENADINE-SOURCES := $(wildcard src/grenadine/*.clj src/grenadine/*.cljc src/grenadine/host/*.clj)
.PHONY: src patch src-check src-clean version
version:
@echo '$(GRENADINE-VERSION)'
src: $(YQ) $(SOURCE-PATCHES) $(SOURCE-MANIFEST)
$Q YQ='$(YQ)' FORCE='$(FORCE)' '$(SOURCE-PATCHES)' src '$(CURDIR)' '$(YQ)'
patch: $(YQ) $(SOURCE-PATCHES) $(SOURCE-MANIFEST)
$Q YQ='$(YQ)' '$(SOURCE-PATCHES)' patch '$(CURDIR)' '$(YQ)'
src-check: $(YQ) $(SOURCE-PATCHES) $(SOURCE-MANIFEST)
$Q YQ='$(YQ)' '$(SOURCE-PATCHES)' check '$(CURDIR)' '$(YQ)'
src-clean: $(YQ) $(SOURCE-PATCHES) $(SOURCE-MANIFEST)
$Q YQ='$(YQ)' '$(SOURCE-PATCHES)' clean '$(CURDIR)' '$(YQ)'
default:: build
$(SOURCE-STAGE-STAMP): src $(GRENADINE-SOURCES) Makefile $(STAGE-SOURCES)
@$(ECHO) "* Staging Grenadine sources"
$Q '$(STAGE-SOURCES)' \
'$(CURDIR)' '$(SOURCE-STAGE)' '$(GRENADINE-VERSION)'
$Q touch '$@'
@$(ECHO)
stage: $(SOURCE-STAGE-STAMP)
$(GRENADINE): $(SOURCE-STAGE-STAMP) $(GLOAT)
@$(ECHO) "* Building Grenadine"
$Q mkdir -p '$(@D)'
$Q $(GLOAT) '$(SOURCE-STAGE)' \
--out='$@' \
--force \
--quiet \
--module=github.com/clojurestar/grenadine
@$(ECHO)
build: $(GRENADINE)
jar: src $(CLOJURE) util/build.clj deps.edn Makefile
GRENADINE_VERSION='$(GRENADINE-VERSION)' \
$(CLOJURE) -T:build jar
test-jar: jar
test/jar 'target/grenadine-$(GRENADINE-VERSION).jar'
deploy-clojars: jar
@$(if $(filter command line,$(origin VERSION)),,\
$(error VERSION is required on the command line))
@$(if $(filter $(GRENADINE-VERSION),$(VERSION)),,\
$(error VERSION=$(VERSION) does not match GRENADINE-VERSION=$(GRENADINE-VERSION)))
$(CLOJURE) -X:deploy \
:artifact '"target/grenadine-$(GRENADINE-VERSION).jar"' \
:sign-releases? false
install: $(GRENADINE)
$Q install -d '$(DESTDIR)$(PREFIX)/bin'
$Q install -m 0755 '$(GRENADINE)' '$(DESTDIR)$(PREFIX)/bin/grenadine'
test: test-all test-cli test-cljr test-scripts test-jar test-release
test-glj: src $(GLJ)
GLJ_CLASSPATH=src:test $(GLJ) -e \
"(require 'grenadine.test-runner) (grenadine.test-runner/-main)"
ifneq (,$(wildcard $(JOLT_SOURCE_DIR)/Makefile))
test-jolt: src
$(MAKE) -C '$(JOLT_SOURCE_DIR)' testbin
JOLT_PWD=. '$(JOLT_SOURCE_DIR)/target/release/jolt' \
run test/jolt_runner.clj
else
test-jolt: src $(JOLT)
JOLT_PWD=. $(JOLT) run test/jolt_runner.clj
endif
test-all: test-glj test-jolt
test-gobb: src
@test -f '$(GOBB_SOURCE_DIR)/Makefile' || { \
echo 'test-gobb requires a Gobb source checkout at $(GOBB_SOURCE_DIR)' >&2; \
exit 1; \
}
$(MAKE) -C '$(GOBB_SOURCE_DIR)' build
'$(GOBB_SOURCE_DIR)/bin/gobb' --classpath src:test -e \
"(load-file \"src/clojurestar/deps.cljc\") \
(require 'grenadine.test-runner) \
(grenadine.test-runner/-main)"
test-ecosystem: test-all test-gobb
oracle: src $(CLOJURE)
$(CLOJURE) -M:oracle -m grenadine.oracle
test-cli: $(GRENADINE)
GRENADINE='$(GRENADINE)' test/cli
test-cljr: $(GRENADINE) $(CLJR)
GRENADINE='$(GRENADINE)' CLJR='$(CLJR)' test/cljr
test-release: $(YQ)
YQ='$(YQ)' test/release
test-scripts: src-check $(SHELLCHECK) $(PWSH)
$(SHELLCHECK) \
util/brew-update util/source-patches util/stage-sources \
util/release util/release-dist \
test/cli test/cljr test/homebrew test/installer test/jar \
test/provenance test/release \
www/docs/get www/docs/install
test/homebrew
test/installer
test/provenance
$(PWSH) -NoProfile -Command '$$tokens = $$null; $$errors = $$null; [System.Management.Automation.Language.Parser]::ParseFile("www/docs/get.ps1", [ref] $$tokens, [ref] $$errors) > $$null; if ($$errors.Count) { $$errors | Out-String | Write-Error; exit 1 }'
site:
$(MAKE) -C www site
serve:
$(MAKE) -C www serve
publish publish-www:
$(MAKE) -C www publish
release-prep:
@$(if $(filter command line,$(origin VERSION)),,\
$(error VERSION is required on the command line))
$Q '$(RELEASE)' prepare '$(VERSION)'
release-dist: src-check $(SOURCE-STAGE-STAMP) $(GLOAT)
@$(if $(filter command line,$(origin VERSION)),,\
$(error VERSION is required on the command line))
$Q '$(RELEASE-DIST)' \
'$(VERSION)' '$(GLOAT)' '$(SOURCE-STAGE)' \
'$(CURDIR)' '$(DIST)' '$(RELEASE-BUILD)' \
'$(GRENADINE-VERSION)'
release-homebrew:
@$(if $(filter command line,$(origin VERSION)),,\
$(error VERSION is required on the command line))
$Q '$(BREW-UPDATE)' '$(VERSION)'
release: $(GH) $(YQ)
@$(if $(and $(strip $(or $(VERSION),$(v))),\
$(filter command line,$(origin VERSION) $(origin v))),,\
$(error VERSION or v is required on the command line))
@$(if $(and $(filter command line,$(origin a)),\
$(filter-out 1,$(a))),\
$(error a must be 1 when specified),)
$Q RELEASE_ALLOW_BRANCH='$(if $(and \
$(filter command line,$(origin a)),$(filter 1,$(a))),1,0)' \
YQ='$(YQ)' GH='$(GH)' '$(RELEASE)' release '$(or $(VERSION),$(v))'
release-mark-deployed:
@$(if $(and $(filter 1,$(DEPLOYED)),$(filter command line,$(origin VERSION))),,\
$(error usage: make release-mark-deployed VERSION=x.y.z DEPLOYED=1))
$Q '$(RELEASE)' mark-deployed '$(VERSION)'
MAKES-CLEAN += .cache/clojure .cache/jolt .cache/source-stage .cache/release .cpcache target bin dist www/site pom.xml src/grenadine/basis.cljc src/grenadine/coordinate.cljc src/grenadine/expander.cljc src/grenadine/gitlibs.cljc
MAKES-REALCLEAN += .cache/homebrew-grenadine www/venv