diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2018-03-12 17:29:09 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2018-03-13 15:52:18 +0100 |
commit | 80942fa56215781c38a9289261f4f7d7694891e3 (patch) | |
tree | 6e12161d772f8fb0919ed32035e0128389b8666f /Makefile | |
parent | 9ea51d170815dc0c3ee6b089265ce6aa82f8b0ae (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-- | Makefile | 117 |
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 |