1
1
.POSIX :
2
2
3
+ # Recipes for this Makefile
4
+
5
+ # # Build shards
6
+ # # $ make
7
+ # # Build shards in release mode
8
+ # # $ make release=1
9
+ # # Run tests
10
+ # # $ make test
11
+ # # Run tests without fossil tests
12
+ # # $ make test skip_fossil=1
13
+ # # Generate docs
14
+ # # $ make docs
15
+ # # Install shards
16
+ # # $ make install
17
+ # # Uninstall shards
18
+ # # $ make uninstall
19
+ # # Build and install shards
20
+ # # $ make build && sudo make install
21
+
3
22
release ?= # # Compile in release mode
4
23
debug ?= # # Add symbolic debug info
5
24
static ?= # # Enable static linking
6
25
skip_fossil ?= # # Skip fossil tests
7
26
skip_git ?= # # Skip git tests
8
27
skip_hg ?= # # Skip hg tests
9
28
29
+ DESTDIR ?= # # Install destination dir
30
+ PREFIX ?= /usr/local# # Install path prefix
31
+
10
32
CRYSTAL ?= crystal
11
33
SHARDS ?= shards
12
34
override FLAGS += $(if $(release ) ,--release )$(if $(debug ) ,-d )$(if $(static ) ,--static )
@@ -20,8 +42,6 @@ SHARDS_CONFIG_BUILD_COMMIT := $(shell git rev-parse --short HEAD 2> /dev/null)
20
42
SHARDS_VERSION := $(shell cat VERSION)
21
43
SOURCE_DATE_EPOCH := $(shell (git show -s --format=% ct HEAD || stat -c "% Y" Makefile || stat -f "% m" Makefile) 2> /dev/null)
22
44
EXPORTS := SHARDS_CONFIG_BUILD_COMMIT="$(SHARDS_CONFIG_BUILD_COMMIT ) " SOURCE_DATE_EPOCH="$(SOURCE_DATE_EPOCH ) "
23
- DESTDIR ?=
24
- PREFIX ?= /usr/local
25
45
BINDIR ?= $(DESTDIR )$(PREFIX ) /bin
26
46
MANDIR ?= $(DESTDIR )$(PREFIX ) /share/man
27
47
INSTALL ?= /usr/bin/install
@@ -33,31 +53,38 @@ all: build
33
53
34
54
include docs.mk
35
55
56
+ build : # # Build shards
36
57
build : phony bin/shards
37
58
59
+ clean : # # Remove build artifacts
38
60
clean : phony clean_docs
39
61
rm -f bin/shards
40
62
41
63
bin/shards : $(SOURCES ) $(TEMPLATES ) lib
42
64
@mkdir -p bin
43
65
$(EXPORTS ) $(CRYSTAL ) build $(FLAGS ) src/shards.cr -o bin/shards
44
66
67
+ install : # # Install shards
45
68
install : bin/shards man/shards.1.gz man/shard.yml.5.gz phony
46
69
$(INSTALL ) -m 0755 -d " $( BINDIR) " " $( MANDIR) /man1" " $( MANDIR) /man5"
47
70
$(INSTALL ) -m 0755 bin/shards " $( BINDIR) "
48
71
$(INSTALL ) -m 0644 man/shards.1.gz " $( MANDIR) /man1"
49
72
$(INSTALL ) -m 0644 man/shard.yml.5.gz " $( MANDIR) /man5"
50
73
74
+ uninstall : # # Uninstall shards
51
75
uninstall : phony
52
76
rm -f " $( BINDIR) /shards"
53
77
rm -f " $( MANDIR) /man1/shards.1.gz"
54
78
rm -f " $( MANDIR) /man5/shard.yml.5.gz"
55
79
80
+ test : # # Run all tests
56
81
test : test_unit test_integration
57
82
83
+ test_unit : # # Run unit tests
58
84
test_unit : phony lib
59
85
$(CRYSTAL ) spec ./spec/unit/ $(if $(skip_fossil ) ,--tag ~fossil) $(if $(skip_git ) ,--tag ~git) $(if $(skip_hg ) ,--tag ~hg)
60
86
87
+ test_integration : # # Run integration tests
61
88
test_integration : bin/shards phony
62
89
$(CRYSTAL ) spec ./spec/integration/
63
90
@@ -72,3 +99,20 @@ man/%.gz: man/%
72
99
gzip -c -9 $< > $@
73
100
74
101
phony :
102
+
103
+ .PHONY : help
104
+ help : # # Show this help
105
+ @echo
106
+ @printf ' \033[34mtargets:\033[0m\n'
107
+ @grep -hE ' ^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST ) | \
108
+ sort | \
109
+ awk ' BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}'
110
+ @echo
111
+ @printf ' \033[34moptional variables:\033[0m\n'
112
+ @grep -hE ' ^[a-zA-Z_-]+ \?=.*?## .*$$' $(MAKEFILE_LIST ) | \
113
+ sort | \
114
+ awk ' BEGIN {FS = " \\?=.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}'
115
+ @echo
116
+ @printf ' \033[34mrecipes:\033[0m\n'
117
+ @grep -hE ' ^##.*$$' $(MAKEFILE_LIST ) | \
118
+ awk ' BEGIN {FS = "## "}; /^## [a-zA-Z_-]/ {printf " \033[36m%s\033[0m\n", $$2}; /^## / {printf " %s\n", $$2}'
0 commit comments