1 # Default options 2 USE_BSDIFF ?= y 3 4 BINARIES-y = bspatch 5 BINARIES-$(USE_BSDIFF) += bsdiff 6 7 BINARIES += $(BINARIES-y) 8 9 INSTALL = install 10 CFLAGS += -O3 -Wall -Werror 11 CXXFLAGS += -std=c++11 12 13 DESTDIR ?= 14 PREFIX = /usr 15 BINDIR = $(PREFIX)/bin 16 DATADIR = $(PREFIX)/share 17 MANDIR = $(DATADIR)/man 18 MAN1DIR = $(MANDIR)/man1 19 INSTALL_PROGRAM ?= $(INSTALL) -c -m 755 20 INSTALL_MAN ?= $(INSTALL) -c -m 444 21 22 .PHONY: all test clean 23 all: $(BINARIES) 24 test: unittests 25 clean: 26 rm -f *.o $(BINARIES) unittests 27 28 BSDIFF_LIBS = -lbz2 -ldivsufsort -ldivsufsort64 29 BSDIFF_OBJS = \ 30 bsdiff.o 31 32 BSPATCH_LIBS = -lbz2 33 BSPATCH_OBJS = \ 34 bspatch.o \ 35 buffer_file.o \ 36 extents.o \ 37 extents_file.o \ 38 file.o \ 39 memory_file.o \ 40 sink_file.o 41 42 UNITTEST_LIBS = -lgmock -lgtest -lpthread 43 UNITTEST_OBJS = \ 44 bsdiff_unittest.o \ 45 bspatch_unittest.o \ 46 extents_file_unittest.o \ 47 extents_unittest.o \ 48 test_utils.o \ 49 testrunner.o 50 51 bsdiff: $(BSDIFF_OBJS) bsdiff_main.o 52 bsdiff: LDLIBS += $(BSDIFF_LIBS) 53 54 bspatch: $(BSPATCH_OBJS) bspatch_main.o 55 bspatch: LDLIBS += $(BSPATCH_LIBS) 56 57 unittests: LDLIBS += $(BSDIFF_LIBS) $(BSPATCH_LIBS) $(UNITTEST_LIBS) 58 unittests: $(BSPATCH_OBJS) $(BSDIFF_OBJS) $(UNITTEST_OBJS) 59 60 unittests bsdiff bspatch: 61 $(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $^ $(LDLIBS) 62 63 # Source file dependencies. 64 bsdiff.o: bsdiff.cc 65 bsdiff_main.o: bsdiff_main.cc bsdiff.h 66 bsdiff_unittest.o: bsdiff_unittest.cc bsdiff.h test_utils.h 67 bspatch.o: bspatch.cc bspatch.h extents.h extents_file.h file_interface.h \ 68 file.h 69 bspatch_main.o: bspatch_main.cc bspatch.h 70 bspatch_unittest.o: bspatch_unittest.cc bspatch.h test_utils.h 71 buffer_file.o: buffer_file.cc buffer_file.h file_interface.h bspatch.h 72 extents.o: extents.cc extents.h extents_file.h file_interface.h 73 extents_file.o: extents_file.cc extents_file.h file_interface.h 74 extents_file_unittest.o: extents_file_unittest.cc extents_file.h \ 75 file_interface.h 76 extents_unittest.o: extents_unittest.cc extents.h extents_file.h \ 77 file_interface.h 78 file.o: file.cc file.h file_interface.h 79 memory_file.o: memory_file.cc memory_file.h file_interface.h 80 sink_file.o: sink_file.cc sink_file.h file_interface.h 81 testrunner.o: testrunner.cc 82 test_utils.o: test_utils.cc test_utils.h 83 84 install: 85 mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(MAN1DIR) 86 $(INSTALL_PROGRAM) $(BINARIES) $(DESTDIR)$(BINDIR) 87 ifndef WITHOUT_MAN 88 $(INSTALL_MAN) $(BINARIES:=.1) $(DESTDIR)$(MAN1DIR) 89 endif 90