-
Notifications
You must be signed in to change notification settings - Fork 3
/
Makefile
145 lines (119 loc) · 4.29 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
# Test configuration.
GROUPS := bullseye stable nightly oldest
DOCKER_FILES := $(patsubst %,test/Dockerfile.%,$(GROUPS))
DOCKER_STAMPS := $(patsubst %,test/Dockerfile.%.stamp,$(GROUPS))
CI_TARGETS := $(patsubst %,ci-%,$(GROUPS))
INCLUDES := $(wildcard test/include/*.erb)
# Set this to a Docker target to build for a specific platform.
PLATFORM ?=
ifneq ($(PLATFORM),)
PLATFORM_ARG := --platform $(PLATFORM)
else
PLATFORM_ARG :=
endif
FEATURES ?=
ifneq ($(FEATURES),)
FEATURE_ARG := --features $(FEATURES)
else
FEATURE_ARG :=
endif
ASCIIDOCTOR ?= asciidoctor
CARGO_DEB_VERSION = 1.28.0
FREEBSD_VERSION ?= 13
NETBSD_VERSION ?= 9
all:
cargo build --release $(FEATURE_ARG)
clean:
cargo clean
$(RM) -fr target tmp
for i in "$(DOCKER_STAMPS)"; \
do \
[ ! -f "$$i" ] || docker image rm -f "$$i"; \
done
$(RM) -f $(DOCKER_FILES) $(DOCKER_STAMPS)
$(RM) -f *.md *.md+
$(RM) -fr tmp
$(RM) -fr doc/man/*.1
test:
cargo test $(FEATURE_ARG)
doc: doc/man/muter.1 doc/man/muter.1.gz
deb: all doc
cargo deb
test-deb: deb
lintian target/debian/muter_*.deb
%.1: %.adoc
$(ASCIIDOCTOR) -b manpage -a compat-mode -o $@ $^
%.1.gz: %.1
gzip -9fnk $^
%.md: %.adoc
asciidoctor -o $@+ -b docbook5 $^
pandoc -f docbook -t commonmark -o $@ $@+
$(RM) $@+
package: README.md
cargo package --locked --allow-dirty
# We do not require both of these commands here since nightly Rust may be
# missing one or more of these. When run under CI, they should be present for
# stable Rust and catch any issues.
#
# Note if we're using rustup, cargo-clippy may exist in the PATH even if clippy
# isn't installed, but it may be a wrapper that just fails when invoked. Check
# that it can successfully print help output to check if we really have clippy.
# The same goes for rustfmt.
lint:
if command -v cargo-clippy && cargo-clippy --help >/dev/null 2>&1; \
then \
$(MAKE) clippy; \
fi
if command -v rustfmt && rustfmt --help >/dev/null 2>&1; \
then \
$(MAKE) fmt; \
fi
ci: $(CI_TARGETS)
ci-%: test/Dockerfile.%.stamp
mkdir -p target/assets
docker run --rm \
$(PLATFORM_ARG) \
-v "$(PWD)/target/assets:/usr/src/muter/target/debian" \
-e CARGO_NET_GIT_FETCH_WITH_CLI=true \
$$(cat "$<") \
sh -c 'cd /usr/src/muter && make test-full && ([ "$*" = oldest ] || expr "$$(uname -m)" : arm || (cargo install --version=$(CARGO_DEB_VERSION) --locked cargo-deb && make package test-deb))'
ci-freebsd:
vagrant init generic/freebsd$(FREEBSD_VERSION)
vagrant up
vagrant ssh -- sudo pkg install -y curl gettext git gmake rubygem-asciidoctor rust
vagrant ssh -- git init /home/vagrant/muter
GIT_SSH_COMMAND='f() { shift; vagrant ssh -- "$$@"; };f' git push vagrant@localhost:/home/vagrant/muter HEAD:refs/heads/dev
vagrant ssh -- "cd /home/vagrant/muter && git checkout $$(git rev-parse HEAD) && gmake test-full FEATURES=$(FEATURES)"
ci-netbsd:
vagrant init generic/netbsd$(NETBSD_VERSION)
vagrant up
vagrant ssh -- sudo /usr/pkg/bin/pkgin update
vagrant ssh -- sudo /usr/pkg/bin/pkgin -y install mozilla-rootcerts-openssl curl gettext gettext-lib git gmake ruby31-asciidoctor rust
vagrant ssh -- git init /home/vagrant/muter
GIT_SSH_COMMAND='f() { shift; vagrant ssh -- "$$@"; };f' git push vagrant@localhost:/home/vagrant/muter HEAD:refs/heads/dev
vagrant ssh -- "cd /home/vagrant/muter && git checkout $$(git rev-parse HEAD) && gmake test-full ASCIIDOCTOR=asciidoctor31 CARGO_HTTP_MULTIPLEXING=false FEATURES=$(FEATURES) GETTEXT_DIR=/usr/pkg LD_LIBRARY_PATH=/usr/pkg/lib"
test-full:
$(MAKE) all
$(MAKE) doc
$(MAKE) test
$(MAKE) lint
test/Dockerfile.%.stamp: test/Dockerfile.% $(SRC)
docker build $(PLATFORM_ARG) --iidfile="$@" -f "$<" .
test/Dockerfile.%: test/Dockerfile.%.erb $(INCLUDES)
test/template "$<" >"$@"
clippy:
rm -rf target/debug target/release
@# We exclude these lints here instead of in the file because Rust 1.24
@# doesn't support excluding clippy warnings. Similarly, it doesn't support
@# the syntax these lints suggest.
cargo clippy $(FEATURE_ARG) -- \
-A clippy::range-plus-one -A clippy::needless-lifetimes -A clippy::unknown-clippy-lints \
-D warnings
fmt:
if rustfmt --help | grep -qse --check; \
then \
rustfmt --check $$(find . -name '*.rs' | grep -v '^./target'); \
else \
rustfmt --write-mode diff $$(find . -name '*.rs' | grep -v '^./target'); \
fi
.PHONY: all lint ci clean doc clippy fmt test