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_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.pc.in \
40	  >$(1)/sequoia.pc
41
42all: build
43
44.PHONY: build
45build:
46	$(MAKE) -Clang/python build
47	$(call sequoia_pc,$(CARGO_TARGET_DIR)/debug,true)
48
49# Testing and examples.
50.PHONY: test check
51test check:
52	$(MAKE) -Clang/python test
53
54.PHONY: examples
55examples:
56	$(MAKE) -Cexamples --always-make
57
58# Installation.
59.PHONY: build-release
60build-release:
61	CARGO_TARGET_DIR=$(CARGO_TARGET_DIR) \
62	    $(CARGO) build $(CARGO_FLAGS) --release --package sequoia-ffi
63	$(MAKE) -Clang/python build-release
64	$(call sequoia_pc,$(CARGO_TARGET_DIR)/release,true)
65	$(MAKE) -C../store install
66
67.PHONY: install
68install: build-release
69	$(INSTALL) -d $(DESTDIR)$(PREFIX)/share/pkgconfig
70	$(call sequoia_pc,$(DESTDIR)$(PREFIX)/share/pkgconfig,)
71	$(INSTALL) -d $(DESTDIR)$(PREFIX)/include
72	$(INSTALL) -t $(DESTDIR)$(PREFIX)/include include/sequoia.h
73	$(INSTALL) -d $(DESTDIR)$(PREFIX)/include/sequoia
74	$(INSTALL) -t $(DESTDIR)$(PREFIX)/include/sequoia \
75		include/sequoia/*.h
76	$(INSTALL) -d $(DESTDIR)$(PREFIX)/lib
77	$(INSTALL) $(CARGO_TARGET_DIR)/release/libsequoia_ffi.$(_SEQ_LIB_EXT) \
78		$(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.$(_SEQ_LIB_EXT).$(VERSION)
79	ln -fs libsequoia_ffi.$(_SEQ_LIB_EXT).$(VERSION) \
80		$(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.$(_SEQ_LIB_EXT).$(VERSION_MAJOR)
81	ln -fs libsequoia_ffi.$(_SEQ_LIB_EXT).$(VERSION) \
82		$(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.$(_SEQ_LIB_EXT)
83	$(INSTALL) $(CARGO_TARGET_DIR)/release/libsequoia_ffi.a \
84		$(DESTDIR)$(PREFIX)/lib/libsequoia_ffi.a
85	$(MAKE) -C../store install
86	# Now the bindings.
87	$(MAKE) -Clang/python install
88
89# Housekeeping.
90.PHONY: clean
91clean:
92	$(MAKE) -Cexamples clean
93	$(MAKE) -Clang/python clean
94