1CFLAGS=-W -Wall -Wextra -ansi -pedantic -std=c++11
2OBJ=obj
3LIB=lib
4ZLIB_VERSION=1.2.11
5ZLIB=$(LIB)/zlib-$(ZLIB_VERSION)
6LIBZIP_VERSION=1.8.0
7LIBZIP=$(LIB)/libzip-$(LIBZIP_VERSION)
8LIBZIP_CMAKE=-DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF
9CRYPTO_FLAGS=-lssl -lcrypto
10
11# for optimal compilation speed, should be <nb_proc>+1
12NBPROC=5
13
14all: libzippp-static libzippp-shared
15
16libzippp-compile:
17	rm -rf $(OBJ)
18	mkdir $(OBJ)
19	$(CXX) -g -fPIC -c -I$(LIBZIP)/lib -I$(LIBZIP)/build -o $(OBJ)/libzippp.o $(CFLAGS) src/libzippp.cpp
20
21libzippp-static: libzippp-compile
22	ar rvs libzippp.a $(OBJ)/libzippp.o
23
24libzippp-shared: libzippp-compile
25	$(CXX) -shared -o libzippp.so $(OBJ)/libzippp.o
26
27libzippp-tests: libzippp-static libzippp-shared
28	if [ -d $(ZLIB) ]; then \
29		$(CXX) -o test_static -g -I$(ZLIB) -I$(LIBZIP)/lib -I$(LIBZIP)/build -Isrc $(CFLAGS) tests/tests.cpp libzippp.a $(LIBZIP)/build/lib/libzip.a $(ZLIB)/libz.a -lbz2 -llzma $(CRYPTO_FLAGS); \
30		$(CXX) -o test_shared -g -I$(ZLIB) -I$(LIBZIP)/lib -I$(LIBZIP)/build -Isrc $(CFLAGS) tests/tests.cpp -L. -L$(LIBZIP)/build/lib -L$(ZLIB) -lzippp -lzip -lz -lbz2 -llzma $(CRYPTO_FLAGS) -Wl,-rpath=.; \
31	else \
32		$(CXX) -o test_static -g -I$(LIBZIP)/lib -Isrc $(CFLAGS) tests/tests.cpp libzippp.a $(LIBZIP)/build/lib/libzip.a -lz -lbz2 -llzma $(CRYPTO_FLAGS); \
33		$(CXX) -o test_shared -g -I$(LIBZIP)/lib -Isrc $(CFLAGS) tests/tests.cpp -L. -L$(LIBZIP)/build/lib -lzippp -lzip -lz -lbz2 -llzma $(CRYPTO_FLAGS) -Wl,-rpath=.; \
34	fi;
35
36clean-tests:
37	@rm -rf *.zip
38
39tests: libzippp-tests clean-tests
40	LD_LIBRARY_PATH="$(LIBZIP)/build/lib" valgrind --suppressions=ld.supp --leak-check=full ./test_shared
41	valgrind --suppressions=ld.supp --leak-check=full ./test_static
42
43clean:
44	@rm -rf libzippp.a libzippp.so
45	@rm -rf $(OBJ)
46	@rm -rf test_shared test_static
47	@rm -f windows-ready_to_compile.zip
48
49mrproper: clean
50	@rm -rf $(LIBZIP)
51	@rm -rf $(LIB)/libzip-$(LIBZIP_VERSION)
52	@rm -rf $(LIB)/zlib-$(ZLIB_VERSION)
53	@rm -rf $(LIB)/*.tar.gz
54
55# ZLIB targets
56
57zlib-init:
58	mkdir -p $(LIB)
59
60zlib-download: zlib-init
61	wget -c -O "$(ZLIB).tar.gz" "https://github.com/madler/zlib/archive/v$(ZLIB_VERSION).tar.gz"
62
63zlib-unzip: zlib-download
64	cd $(LIB) && tar -xf zlib-$(ZLIB_VERSION).tar.gz
65
66zlib-configure: zlib-unzip
67	cd $(ZLIB) && ./configure
68
69zlib-compile: zlib-configure
70	cd $(ZLIB) && make -j$(NBPROC)
71
72zlib: zlib-compile
73
74# LIZIP targets
75
76libzip-init:
77	mkdir -p $(LIB)
78
79libzip-download: libzip-init
80	wget -c -O "$(LIBZIP).tar.gz" "https://www.nih.at/libzip/libzip-$(LIBZIP_VERSION).tar.gz"
81
82libzip-unzip: libzip-download
83	cd $(LIB) && tar -xf libzip-$(LIBZIP_VERSION).tar.gz
84
85libzip-patch: libzip-unzip
86	if [ -f $(LIB)/libzip-$(LIBZIP_VERSION)-windows.patch ]; then \
87		cd $(LIB)/libzip-$(LIBZIP_VERSION) && patch -p1 < ../libzip-$(LIBZIP_VERSION)-windows.patch; \
88	fi;
89
90libzip-build-folder:
91	mkdir -p $(LIBZIP)/build;
92
93libzip-build-shared: libzip-patch libzip-build-folder
94	if [ -d "$(ZLIB)" ]; then \
95		cd $(LIBZIP)/build && cmake .. -DZLIB_LIBRARY_RELEASE=../../../$(ZLIB)/libz.so -DZLIB_INCLUDE_DIR=../../../$(ZLIB) -DBUILD_SHARED_LIBS=ON $(LIBZIP_CMAKE) && make -j$(NBPROC);  \
96	else \
97		cd $(LIBZIP)/build && cmake .. -DBUILD_SHARED_LIBS=ON $(LIBZIP_CMAKE) && make -j$(NBPROC);  \
98	fi;
99
100libzip-build-static: libzip-patch libzip-build-folder
101	if [ -d "$(ZLIB)" ]; then \
102		cd $(LIBZIP)/build && cmake .. -DZLIB_LIBRARY_RELEASE=../../../$(ZLIB)/libz.a -DZLIB_INCLUDE_DIR=../../../$(ZLIB) -DBUILD_SHARED_LIBS=OFF $(LIBZIP_CMAKE) && make -j$(NBPROC);  \
103	else \
104		cd $(LIBZIP)/build && cmake .. -DBUILD_SHARED_LIBS=OFF $(LIBZIP_CMAKE) && make -j$(NBPROC);  \
105	fi;
106
107libzip: libzip-build-shared libzip-build-static
108
109# LIBRARIES TARGET
110
111libraries: zlib libzip
112
113libraries-download: zlib-download libzip-download
114
115# Windows compilation preparation
116
117windows: mrproper zlib-download zlib-unzip libzip-download libzip-unzip libzip-patch
118	zip -r windows-ready_to_compile.zip lib src tests cmake compile.bat CMakeLists.txt Config.cmake.in
119