1#
2# Copyright (c) 2015 Andrew Ayer
3#
4# See COPYING file for license information.
5#
6
7CXXFLAGS ?= -Wall -pedantic -Wno-long-long -O2
8CXXFLAGS += -std=c++11
9PREFIX ?= /usr/local
10BINDIR ?= $(PREFIX)/bin
11MANDIR ?= $(PREFIX)/share/man
12
13ENABLE_MAN ?= no
14DOCBOOK_XSL ?= http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
15
16OBJFILES = \
17    git-crypt.o \
18    commands.o \
19    crypto.o \
20    gpg.o \
21    key.o \
22    util.o \
23    parse_options.o \
24    coprocess.o \
25    fhstream.o
26
27OBJFILES += crypto-openssl-10.o crypto-openssl-11.o
28LDFLAGS += -lcrypto
29
30XSLTPROC ?= xsltproc
31DOCBOOK_FLAGS += --param man.output.in.separate.dir 1 \
32		 --stringparam man.output.base.dir man/ \
33		 --param man.output.subdirs.enabled 1 \
34		 --param man.authors.section.enabled 1
35
36all: build
37
38#
39# Build
40#
41BUILD_MAN_TARGETS-yes = build-man
42BUILD_MAN_TARGETS-no =
43BUILD_TARGETS := build-bin $(BUILD_MAN_TARGETS-$(ENABLE_MAN))
44
45build: $(BUILD_TARGETS)
46
47build-bin: git-crypt
48
49git-crypt: $(OBJFILES)
50	$(CXX) $(CXXFLAGS) -o $@ $(OBJFILES) $(LDFLAGS)
51
52util.o: util.cpp util-unix.cpp util-win32.cpp
53coprocess.o: coprocess.cpp coprocess-unix.cpp coprocess-win32.cpp
54
55build-man: man/man1/git-crypt.1
56
57man/man1/git-crypt.1: man/git-crypt.xml
58	$(XSLTPROC) $(DOCBOOK_FLAGS) $(DOCBOOK_XSL) man/git-crypt.xml
59
60#
61# Clean
62#
63CLEAN_MAN_TARGETS-yes = clean-man
64CLEAN_MAN_TARGETS-no =
65CLEAN_TARGETS := clean-bin $(CLEAN_MAN_TARGETS-$(ENABLE_MAN))
66
67clean: $(CLEAN_TARGETS)
68
69clean-bin:
70	rm -f $(OBJFILES) git-crypt
71
72clean-man:
73	rm -f man/man1/git-crypt.1
74
75#
76# Install
77#
78INSTALL_MAN_TARGETS-yes = install-man
79INSTALL_MAN_TARGETS-no =
80INSTALL_TARGETS := install-bin $(INSTALL_MAN_TARGETS-$(ENABLE_MAN))
81
82install: $(INSTALL_TARGETS)
83
84install-bin: build-bin
85	install -d $(DESTDIR)$(BINDIR)
86	install -m 755 git-crypt $(DESTDIR)$(BINDIR)/
87
88install-man: build-man
89	install -d $(DESTDIR)$(MANDIR)/man1
90	install -m 644 man/man1/git-crypt.1 $(DESTDIR)$(MANDIR)/man1/
91
92.PHONY: all \
93	build build-bin build-man \
94	clean clean-bin clean-man \
95	install install-bin install-man
96