summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2018-03-12 17:29:09 +0100
committerJustus Winter <justus@sequoia-pgp.org>2018-03-13 15:52:18 +0100
commit80942fa56215781c38a9289261f4f7d7694891e3 (patch)
tree6e12161d772f8fb0919ed32035e0128389b8666f /Makefile
parent9ea51d170815dc0c3ee6b089265ce6aa82f8b0ae (diff)
Add a Makefile.
- This adds some convenience for building Sequoia. - It also integrates other build systems and test frameworks for the bindings. - Furthermore, it helps with creating releases.
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile117
1 files changed, 117 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..b7bf5bad
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,117 @@
+# 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
+
+.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 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