blob: ceff5502e50dc24379d286b9e736f278502c4368 (
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
|
# Makefile for Sequoia.
# Configuration.
PREFIX ?= /usr/local
DESTDIR ?=
# 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 = ' Cargo.toml | cut -d'"' -f2)
LIB_VERSION ?= $(shell grep '^version = ' ffi/Cargo.toml | cut -d'"' -f2)
LIB_VERSION_MAJ = $(shell echo $(LIB_VERSION) | cut -d'.' -f1)
# Make sure subprocesses pick these up.
export PREFIX
export DESTDIR
all: build ffi/examples
.PHONY: build
build:
$(CARGO) build --all
$(MAKE) -Cffi build
# Testing and examples.
.PHONY: test check
test check:
$(CARGO) test --all
$(MAKE) -Cffi test
$(MAKE) examples
.PHONY: examples
examples:
$(CARGO) build --examples
$(MAKE) -Cffi examples
# Documentation.
.PHONY: doc
doc:
$(CARGO) doc --no-deps --all
.PHONY: deploy-doc
deploy-doc: doc
$(RSYNC) $(RSYNC_FLAGS) -r target/doc/* $(DOC_TARGET)
# Installation.
.PHONY: build-release
build-release:
$(CARGO) build --release --all
$(MAKE) -Cffi build-release
.PHONY: install
install: build-release
$(INSTALL) -d $(DESTDIR)$(PREFIX)/include
$(INSTALL) -t $(DESTDIR)$(PREFIX)/include ffi/include/sequoia.h
$(INSTALL) -d $(DESTDIR)$(PREFIX)/include/sequoia
$(INSTALL) -t $(DESTDIR)$(PREFIX)/include/sequoia \
ffi/include/sequoia/*.h
$(INSTALL) -d $(DESTDIR)$(PREFIX)/lib
$(INSTALL) target/release/libsequoia_ffi.so \
$(DESTDIR)$(PREFIX)/lib/libsequoia.so.$(LIB_VERSION)
ln -fs libsequoia.so.$(LIB_VERSION) \
$(DESTDIR)$(PREFIX)/lib/libsequoia.so.$(LIB_VERSION_MAJ)
$(INSTALL) -d $(DESTDIR)$(PREFIX)/lib/sequoia
$(INSTALL) -t $(DESTDIR)$(PREFIX)/lib/sequoia target/release/keystore
$(INSTALL) -d $(DESTDIR)$(PREFIX)/bin
$(INSTALL) -t $(DESTDIR)$(PREFIX)/bin target/release/sq
$(MAKE) -Cffi install
# Infrastructure for creating source distributions.
.PHONY: dist
dist: target/dist/sequoia-$(VERSION).tar.xz.sig
target/dist/sequoia-$(VERSION):
$(GIT) clone . target/dist/sequoia-$(VERSION)
cd target/dist/sequoia-$(VERSION) && \
mkdir .cargo && \
$(CARGO) vendor \
| sed 's/^directory = ".*"$$/directory = "vendor"/' \
> .cargo/config && \
rm -rf .git
target/dist/sequoia-$(VERSION).tar: target/dist/sequoia-$(VERSION)
$(TAR) cf $@ -C target/dist sequoia-$(VERSION)
%.xz: %
$(XZ) -c $< >$@
%.sig: %
$(GPG) --local-user $(SIGN_WITH) --detach-sign --armor $<
.PHONY: dist-test dist-check
dist-test dist-check: target/dist/sequoia-$(VERSION).tar.xz
rm -rf target/dist-check/sequoia-$(VERSION)
mkdir -p target/dist-check
$(TAR) xf $< -C target/dist-check
cd target/dist-check/sequoia-$(VERSION) && \
CARGO_HOME=$$(mktemp -d) $(MAKE) test
rm -rf target/dist-check/sequoia-$(VERSION)
# Housekeeping.
.PHONY: clean
clean:
rm -rf target
$(MAKE) -Cffi clean
|