1# Makefile for Sequoia's bindings. 2 3# Configuration. 4PREFIX ?= /usr/local 5DESTDIR ?= 6 7CARGO ?= cargo 8CARGO_TARGET_DIR ?= $(shell pwd)/../target 9# We currently only support absolute paths. 10CARGO_TARGET_DIR := $(abspath $(CARGO_TARGET_DIR)) 11 12VERSION ?= $(shell grep '^version[[:space:]]*=[[:space:]]*' Cargo.toml | cut -d'"' -f2) 13VERSION_MAJOR = $(shell echo $(VERSION) | cut -d'.' -f1) 14 15# Build the right library 16ifeq ($(shell uname -s), Darwin) 17 _SEQ_LIB_EXT = dylib 18else 19 _SEQ_LIB_EXT = so 20endif 21 22# Tools. 23ifneq ($(filter Darwin FreeBSD,$(shell uname -s)),"") 24 INSTALL ?= ginstall 25else 26 INSTALL ?= install 27endif 28 29# Make sure subprocesses pick these up. 30export PREFIX 31export DESTDIR 32 33# $(1) = install dir 34# $(2) = whether to set libdir and prefix to $(1) (empty string = false) 35sequoia_openpgp_pc = \ 36 sed -e 's|VERSION|$(VERSION)|g' \ 37 $(if $(2),-e 's|PREFIX|$(shell pwd)|g',-e's|PREFIX|$(PREFIX)|g') \ 38 $(if $(2),-e 's|libdir=.*|libdir=$(1)|g') \ 39 sequoia-openpgp.pc.in \ 40 > $(1)/sequoia-openpgp.pc 41 42all: build 43 44.PHONY: build 45build: 46 $(call sequoia_openpgp_pc,$(CARGO_TARGET_DIR)/debug,true) 47 48.PHONY: force-build 49force-build: 50 cd .. ; cargo build -p sequoia-openpgp-ffi 51 52# Testing and examples. 53.PHONY: test check 54test check: check-headers 55 56# Header files. 57.PHONY: check-headers 58check-headers: force-build 59 nm -g --defined-only \ 60 $(CARGO_TARGET_DIR)/debug/libsequoia_openpgp_ffi.$(_SEQ_LIB_EXT) \ 61 | cut -d' ' -f3 | sed s/^_// | sort -u | grep pgp_ \ 62 | while read SYM ; \ 63 do grep -r -q "$$SYM" include || echo $$SYM ; \ 64 done | tee $(CARGO_TARGET_DIR)/debug/.check-headers ; \ 65 ! test -s $(CARGO_TARGET_DIR)/debug/.check-headers 66 67.PHONY: examples 68examples: 69 $(MAKE) -Cexamples --always-make 70 71# Installation. 72.PHONY: build-release 73build-release: 74 CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \ 75 $(CARGO) build $(CARGO_FLAGS) --release --package sequoia-openpgp-ffi 76 $(call sequoia_openpgp_pc,$(CARGO_TARGET_DIR)/release,true) 77 78.PHONY: install 79install: build-release 80 $(INSTALL) -d $(DESTDIR)$(PREFIX)/share/pkgconfig 81 $(call sequoia_openpgp_pc,$(DESTDIR)$(PREFIX)/share/pkgconfig,) 82 $(INSTALL) -d $(DESTDIR)$(PREFIX)/include 83 $(INSTALL) -d $(DESTDIR)$(PREFIX)/include/sequoia 84 $(INSTALL) -t $(DESTDIR)$(PREFIX)/include/sequoia \ 85 include/sequoia/*.h 86 $(INSTALL) -d $(DESTDIR)$(PREFIX)/include/sequoia/openpgp 87 $(INSTALL) -t $(DESTDIR)$(PREFIX)/include/sequoia/openpgp \ 88 include/sequoia/openpgp/*.h 89 $(INSTALL) -d $(DESTDIR)$(PREFIX)/lib 90 $(INSTALL) $(CARGO_TARGET_DIR)/release/libsequoia_openpgp_ffi.$(_SEQ_LIB_EXT) \ 91 $(DESTDIR)$(PREFIX)/lib/libsequoia_openpgp_ffi.$(_SEQ_LIB_EXT).$(VERSION) 92 ln -fs libsequoia_openpgp_ffi.$(_SEQ_LIB_EXT).$(VERSION) \ 93 $(DESTDIR)$(PREFIX)/lib/libsequoia_openpgp_ffi.$(_SEQ_LIB_EXT).$(VERSION_MAJOR) 94 ln -fs libsequoia_openpgp_ffi.$(_SEQ_LIB_EXT).$(VERSION) \ 95 $(DESTDIR)$(PREFIX)/lib/libsequoia_openpgp_ffi.$(_SEQ_LIB_EXT) 96 $(INSTALL) $(CARGO_TARGET_DIR)/release/libsequoia_openpgp_ffi.a \ 97 $(DESTDIR)$(PREFIX)/lib/libsequoia_openpgp_ffi.a 98 99# Housekeeping. 100.PHONY: clean 101clean: 102 $(MAKE) -Cexamples clean 103