# Default options USE_BSDIFF ?= y EXECUTABLES-y := bspatch LIBRARIES-y := libbspatch.so EXECUTABLES-$(USE_BSDIFF) += bsdiff LIBRARIES-$(USE_BSDIFF) += libbsdiff.so BINARIES := $(EXECUTABLES-y) $(LIBRARIES-y) INSTALL = install CPPFLAGS += -Iinclude -I.. CXXFLAGS += -std=c++11 -O3 -Wall -Werror -fPIC DESTDIR ?= PREFIX = /usr BINDIR = $(PREFIX)/bin DATADIR = $(PREFIX)/share MANDIR = $(DATADIR)/man MAN1DIR = $(MANDIR)/man1 INCLUDEDIR ?= $(PREFIX)/include GENTOO_LIBDIR ?= lib LIBDIR ?= $(PREFIX)/$(GENTOO_LIBDIR) INSTALL_PROGRAM ?= $(INSTALL) -c -m 755 INSTALL_MAN ?= $(INSTALL) -c -m 444 .PHONY: all test clean install all: $(BINARIES) test: bsdiff_unittest clean: rm -f *.o $(BINARIES) bsdiff_unittest .deps ### List of source files for each project. Keep in sync with the Android.mk. # "bsdiff" program. bsdiff_src_files := \ brotli_compressor.cc \ bsdiff.cc \ bz2_compressor.cc \ compressor_buffer.cc \ diff_encoder.cc \ endsley_patch_writer.cc \ logging.cc \ patch_writer.cc \ patch_writer_factory.cc \ split_patch_writer.cc \ suffix_array_index.cc # "bspatch" program. bspatch_src_files := \ brotli_decompressor.cc \ bspatch.cc \ bz2_decompressor.cc \ buffer_file.cc \ decompressor_interface.cc \ extents.cc \ extents_file.cc \ file.cc \ logging.cc \ memory_file.cc \ patch_reader.cc \ sink_file.cc \ utils.cc # Unit test files. bsdiff_common_unittests := \ brotli_compressor_unittest.cc \ brotli_decompressor_unittest.cc \ bsdiff_arguments.cc \ bsdiff_arguments_unittest.cc \ bsdiff_unittest.cc \ bspatch_unittest.cc \ bz2_decompressor_unittest.cc \ diff_encoder_unittest.cc \ endsley_patch_writer_unittest.cc \ extents_file_unittest.cc \ extents_unittest.cc \ patch_reader_unittest.cc \ patch_writer_unittest.cc \ split_patch_writer_unittest.cc \ suffix_array_index_unittest.cc \ test_utils.cc \ testrunner.cc BSDIFF_LIBS := -lbz2 -lbrotlienc -ldivsufsort -ldivsufsort64 BSDIFF_OBJS := $(bsdiff_src_files:.cc=.o) BSPATCH_LIBS := -lbz2 -lbrotlidec BSPATCH_OBJS := $(bspatch_src_files:.cc=.o) UNITTEST_LIBS = -lgmock -lgtest -lpthread UNITTEST_OBJS := $(bsdiff_common_unittests:.cc=.o) bsdiff: $(BSDIFF_OBJS) bsdiff_arguments.o bsdiff_main.o bsdiff: LDLIBS += $(BSDIFF_LIBS) libbsdiff.so: $(BSDIFF_OBJS) libbsdiff.so: LDLIBS += $(BSDIFF_LIBS) bspatch: $(BSPATCH_OBJS) bspatch_main.o bspatch: LDLIBS += $(BSPATCH_LIBS) libbspatch.so: $(BSPATCH_OBJS) libbspatch.so: LDLIBS += $(BSPATCH_LIBS) bsdiff_unittest: LDLIBS += $(BSDIFF_LIBS) $(BSPATCH_LIBS) $(UNITTEST_LIBS) bsdiff_unittest: $(BSPATCH_OBJS) $(BSDIFF_OBJS) $(UNITTEST_OBJS) bsdiff_unittest bsdiff bspatch: $(CXX) $(CXXFLAGS) -o $@ $^ $(LDLIBS) libbsdiff.so libbspatch.so: $(CXX) $(CXXFLAGS) $(LDFLAGS) -Wl,-soname,$@ -shared -o $@ $^ $(LDLIBS) # Source file dependencies. .deps: $(bsdiff_src_files) $(bspatch_src_files) $(bsdiff_common_unittests) \ bsdiff_main.cc bspatch_main.cc $(CXX) $(CPPFLAGS) $(CXXFLAGS) -MM $^ >$@ || (rm -f $@; false) -include .deps install: mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(MAN1DIR) \ $(DESTDIR)/$(INCLUDEDIR)/bsdiff $(INSTALL_PROGRAM) $(EXECUTABLES-y) $(DESTDIR)$(BINDIR) $(INSTALL_PROGRAM) $(LIBRARIES-y) $(DESTDIR)$(LIBDIR) $(INSTALL) -c -m 644 include/bsdiff/*.h $(DESTDIR)/$(INCLUDEDIR)/bsdiff ifndef WITHOUT_MAN $(INSTALL_MAN) $(EXECUTABLES-y:=.1) $(DESTDIR)$(MAN1DIR) endif