summaryrefslogtreecommitdiff
path: root/Makefile
blob: 0c40f6b3135d66a8fcb365571e306b577331cd50 (plain) (blame)
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
.POSIX:
DATE         = 1970-01-01
VERSION      = 0.1.0
NAME         = sjs
NAME_UC      = $(NAME)
## Installation prefix.  Defaults to "/usr".
PREFIX       = /usr
BINDIR       = $(PREFIX)/bin
LIBDIR       = $(PREFIX)/lib
JSLIBDIR     = $(LIBDIR)/node/$(NAME)
INCLUDEDIR   = $(PREFIX)/include
SRCDIR       = $(PREFIX)/src/$(NAME)
SHAREDIR     = $(PREFIX)/share
LOCALEDIR    = $(SHAREDIR)/locale
MANDIR       = $(SHAREDIR)/man
EXEC         = ./
## Where to store the installation.  Empty by default.
DESTDIR      =
LDLIBS       =
JSIMPL       = node



.SUFFIXES:
.SUFFIXES: .mjs .mjs-check



all:
include deps.mk

sources = \
	src/$(NAME).mjs                \


derived-assets = \
	src/$(NAME).exported.mjs       \

side-assets = \



## Default target.  Builds all artifacts required for testing
## and installation.
all: $(derived-assets)


src/$(NAME).exported.mjs: src/$(NAME).mjs Makefile
	cp src/$(NAME).mjs $@
	printf '\n\nexport {\n'                                   >> $@
	awk '/^const / { printf "\t%s,\n", $$2 }' src/$(NAME).mjs >> $@
	printf '}\n'                                              >> $@



tests/$(NAME).mjs-check: src/$(NAME).exported.mjs
	$(JSIMPL) $*.mjs

check-unit: tests/$(NAME).mjs-check


integration-tests = \

.PRECIOUS: $(integration-tests)
$(integration-tests): ALWAYS
	sh $@

check-integration: $(integration-tests)


## Run all tests.  Each test suite is isolated, so that a parallel
## build can run tests at the same time.  The required artifacts
## are created if missing.
check: check-unit check-integration



## Remove *all* derived artifacts produced during the build.
## A dedicated test asserts that this is always true.
clean:
	rm -rf $(derived-assets) $(side-assets)


## Installs into $(DESTDIR)$(PREFIX).  Its dependency target
## ensures that all installable artifacts are crafted beforehand.
install: all
	mkdir -p \
		'$(DESTDIR)$(BINDIR)'       \
		'$(DESTDIR)$(JSLIBDIR)'/src \
		'$(DESTDIR)$(SRCDIR)'       \

	cp src/$(NAME).mjs   '$(DESTDIR)$(JSLIBDIR)'/src
	cp package.json      '$(DESTDIR)$(JSLIBDIR)'
	cp $(sources)        '$(DESTDIR)$(SRCDIR)'

## Uninstalls from $(DESTDIR)$(PREFIX).  This is a perfect mirror
## of the "install" target, and removes *all* that was installed.
## A dedicated test asserts that this is always true.
uninstall:
	rm -rf \
		'$(DESTDIR)$(JSLIBDIR)'               \
		'$(DESTDIR)$(SRCDIR)'                 \



ALWAYS: