blob: 78a2748fa05e9c06456a18675bb36932ab16de2b (
plain)
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
|
# Makefile for Sequoia.
# Configuration.
PREFIX ?= /usr/local
DESTDIR ?=
CARGO_FLAGS ?=
# cargo's "target" directory. Normally, this is in the root
# directory of the project, but it can be overriden by setting
# CARGO_TARGET_DIR.
CARGO_TARGET_DIR ?= $(shell pwd)/target
# We currently only support absolute paths.
CARGO_TARGET_DIR := $(abspath $(CARGO_TARGET_DIR))
# The tests to run.
CARGO_TEST_ARGS ?= --all
# Signing source distributions.
SIGN_WITH ?= XXXXXXXXXXXXXXXX
# Deploying documentation.
DOC_TARGET ?= sequoia-pgp.org:docs.sequoia-pgp.org
RSYNC_FLAGS ?=
# Tools.
CARGO ?= cargo
GIT ?= git
RSYNC ?= rsync
INSTALL ?= install
TAR ?= tar
XZ ?= xz
GPG ?= gpg
VERSION ?= $(shell grep '^version[[:space:]]*=[[:space:]]*' Cargo.toml | cut -d'"' -f2)
# Make sure subprocesses pick these up.
export PREFIX
export DESTDIR
export CARGO_FLAGS
export CARGO_TARGET_DIR
export CARGO_TEST_ARGS
all: build ffi/examples
.PHONY: build
build:
CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) $(CARGO) build $(CARGO_FLAGS) --all
$(MAKE) -Cffi build
# Testing and examples.
.PHONY: test check
test check:
CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) $(CARGO) test $(CARGO_FLAGS) $(CARGO_TEST_ARGS)
$(MAKE) -Cffi test
$(MAKE) examples
.PHONY: examples
examples:
CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \
$(CARGO) build $(CARGO_FLAGS) --examples
$(MAKE) -Cffi examples
# Documentation.
.PHONY: doc
doc:
RUSTDOCFLAGS="$$RUSTDOCFLAGS --html-in-header doc/highlight.js/9.12.0/inc.html" \
CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \
$(CARGO) doc $(CARGO_FLAGS) --no-deps --all
cp --recursive doc/highlight.js $(CARGO_TARGET_DIR)/doc
.PHONY: deploy-doc
deploy-doc: doc
$(RSYNC) $(RSYNC_FLAGS) -r $(CARGO_TARGET_DIR)/doc/* $(DOC_TARGET)
# Installation.
.PHONY: build-release
build-release:
CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \
$(CARGO) build $(CARGO_FLAGS) --release --all
$(MAKE) -Cffi build-release
.PHONY: install
install: build-release
$(INSTALL) -d $(DESTDIR)$(PREFIX)/lib/sequoia
$(INSTALL) -t $(DESTDIR)$(PREFIX)/lib/sequoia \
$(CARGO_TARGET_DIR)/release/sequoia-public-key-store
$(INSTALL) -d $(DESTDIR)$(PREFIX)/bin
$(INSTALL) -t $(DESTDIR)$(PREFIX)/bin \
$(CARGO_TARGET_DIR)/release/sq
$(MAKE) -Cffi install
$(MAKE) -Csqv install
# Infrastructure for creating source distributions.
.PHONY: dist
dist: $(CARGO_TARGET_DIR)/dist/sequoia-$(VERSION).tar.xz.sig
$(CARGO_TARGET_DIR)/dist/sequoia-$(VERSION):
$(GIT) clone . $(CARGO_TARGET_DIR)/dist/sequoia-$(VERSION)
cd $(CARGO_TARGET_DIR)/dist/sequoia-$(VERSION) && \
mkdir .cargo && \
CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \
$(CARGO) vendor $(CARGO_FLAGS) \
| sed 's/^directory = ".*"$$/directory = "vendor"/' \
> .cargo/config && \
rm -rf .git
$(CARGO_TARGET_DIR)/dist/sequoia-$(VERSION).tar: \
$(CARGO_TARGET_DIR)/dist/sequoia-$(VERSION)
$(TAR) cf $@ -C $(CARGO_TARGET_DIR)/dist sequoia-$(VERSION)
%.xz: %
$(XZ) -c $< >$@
%.sig: %
$(GPG) --local-user $(SIGN_WITH) --detach-sign --armor $<
.PHONY: dist-test dist-check
dist-test dist-check: $(CARGO_TARGET_DIR)/dist/sequoia-$(VERSION).tar.xz
rm -rf $(CARGO_TARGET_DIR)/dist-check/sequoia-$(VERSION)
mkdir -p $(CARGO_TARGET_DIR)/dist-check
$(TAR) xf $< -C $(CARGO_TARGET_DIR)/dist-check
cd $(CARGO_TARGET_DIR)/dist-check/sequoia-$(VERSION) && \
CARGO_HOME=$$(mktemp -d) $(MAKE) test CARGO_FLAGS=--frozen
rm -rf $(CARGO_TARGET_DIR)/dist-check/sequoia-$(VERSION)
# Housekeeping.
.PHONY: clean
clean:
CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) $(CARGO) $(CARGO_FLAGS) clean
$(MAKE) -Cffi clean
|