diff -ru a/Makefile c/Makefile --- a/Makefile 2022-01-29 20:52:43.000000000 +0300 +++ c/Makefile 2023-06-28 03:17:58.385308974 +0300 @@ -4,28 +4,22 @@ AR ?= ar MKDIR = mkdir MKDIR_P = mkdir -p -CMAKE ?= cmake -CMAKE_FLAGS = -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-fPIC -ARCH := $(shell $(CC) -print-multiarch) +INSTALL = install VER_MAJ = 0 VERSION = 0.3.7 -AX_DIR=./lib/libsignal-protocol-c -AX_BDIR=$(AX_DIR)/build -AX_PATH=$(AX_BDIR)/src/libsignal-protocol-c.a - -PKG_CONFIG ?= pkg-config -GLIB_CFLAGS ?= $(shell $(PKG_CONFIG) --cflags glib-2.0) -GLIB_LDFLAGS ?= $(shell $(PKG_CONFIG) --libs glib-2.0) +PKG_CONFIG := pkg-config +GLIB_CFLAGS := $(shell $(PKG_CONFIG) --cflags glib-2.0) +GLIB_LDFLAGS := $(shell $(PKG_CONFIG) --libs glib-2.0) -SQLITE3_CFLAGS ?= $(shell $(PKG_CONFIG) --cflags sqlite3) -SQLITE3_LDFLAGS ?= $(shell $(PKG_CONFIG) --libs sqlite3) +SQLITE3_CFLAGS := $(shell $(PKG_CONFIG) --cflags sqlite3) +SQLITE3_LDFLAGS := $(shell $(PKG_CONFIG) --libs sqlite3) -SIGNAL_CFLAGS ?= $(shell $(PKG_CONFIG) --cflags libsignal-protocol-c) -SIGNAL_LDFLAGS ?= $(shell $(PKG_CONFIG) --libs libsignal-protocol-c) +SIGNAL_CFLAGS := $(shell $(PKG_CONFIG) --cflags libsignal-protocol-c) +SIGNAL_LDFLAGS := $(shell $(PKG_CONFIG) --libs libsignal-protocol-c) -LIBGCRYPT_CONFIG ?= libgcrypt-config -LIBGCRYPT_LDFLAGS ?= $(shell $(LIBGCRYPT_CONFIG) --libs) +LIBGCRYPT_CONFIG := libgcrypt-config +LIBGCRYPT_LDFLAGS := $(shell $(LIBGCRYPT_CONFIG) --libs) SDIR = src @@ -35,76 +29,54 @@ TFN = test_all CDIR = coverage -PKGCFG_C=$(GLIB_CFLAGS) \ +cflags=$(GLIB_CFLAGS) \ $(SQLITE3_CFLAGS) \ - $(LIBGCRYPT_CFLAGS) + $(LIBGCRYPT_CFLAGS) \ + $(SIGNAL_CFLAGS) -PKGCFG_L=$(GLIB_LDFLAGS) \ +libs=$(GLIB_LDFLAGS) \ $(SQLITE3_LDFLAGS) \ - $(LIBGCRYPT_LDFLAGS) + $(LIBGCRYPT_LDFLAGS) \ + $(SIGNAL_LDFLAGS) -REQPKG=libsignal-protocol-c -REQPKG:=$(shell $(PKG_CONFIG) --exists $(REQPKG) && echo '$(REQPKG)') -ifneq ($(REQPKG),) - AX_PATH_AS_NEEDED = - PKGCFG_C += $(SIGNAL_CFLAGS) - PKGCFG_L += $(SIGNAL_LDFLAGS) -else - AX_PATH_AS_NEEDED = $(AX_PATH) - HEADERS=-I$(AX_DIR)/src - PKGCFG_C +=$(HEADERS) - PKGCFG_L +=$(AX_PATH) -endif - -ifeq ($(PREFIX),) - PREFIX := /usr/local -endif - -CPPFLAGS += -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE -D_DEFAULT_SOURCE -CFLAGS += $(PKGCFG_C) -std=c11 -g -Wall -Wextra -Wpedantic \ +PREFIX = /usr/local +LIBDIR = $(PREFIX)/lib +INCLUDEDIR = $(PREFIX)/include + +cppflags = -D_XOPEN_SOURCE=700 -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE -D_DEFAULT_SOURCE +cppflags += $(CPPFLAGS) +cflags += -std=c11 -g -Wall -Wextra -Wpedantic \ -Wstrict-overflow -fno-strict-aliasing -funsigned-char \ -fno-builtin-memset -fstack-protector-strong -Wformat -Werror=format-security -TESTFLAGS=$(PKGCFG_C) -g -O0 --coverage -Wall -Wextra -Wpedantic -Wstrict-overflow -fstack-protector-strong -Wformat -Werror=format-security -LDFLAGS += -pthread -ldl $(PKGCFG_L) -lm -LDFLAGS_T= -lcmocka $(LDFLAGS) -PICFLAGS=-fPIC $(CFLAGS) - +cflags += $(CFLAGS) +libs += -pthread -ldl -lm -all: $(BDIR)/libaxc.a shared +all: shared $(BDIR): $(MKDIR_P) $@ -client: $(SDIR)/message_client.c $(BDIR)/axc_store.o $(BDIR)/axc_crypto.o $(BDIR)/axc.o $(AX_PATH_AS_NEEDED) +client: $(SDIR)/message_client.c $(BDIR)/axc_store.o $(BDIR)/axc_crypto.o $(BDIR)/axc.o $(MKDIR_P) $@ - $(CC) $(CPPFLAGS) $(CFLAGS) $^ -o $@/$@.o $(LDFLAGS) - -$(BDIR)/axc.o: $(SDIR)/axc.c $(AX_PATH_AS_NEEDED) | $(BDIR) - $(CC) $(PICFLAGS) $(CPPFLAGS) -c $< -o $@ - -$(BDIR)/axc-nt.o: $(SDIR)/axc.c $(AX_PATH_AS_NEEDED) | $(BDIR) - $(CC) $(PICFLAGS) $(CPPFLAGS) -DNO_THREADS -c $< -o $@ - -$(BDIR)/axc_crypto.o: $(SDIR)/axc_crypto.c $(AX_PATH_AS_NEEDED) | $(BDIR) - $(CC) $(PICFLAGS) $(CPPFLAGS) -c $< -o $@ + $(CC) $(cppflags) $(cflags) $^ -o $@/$@.o $(libs) -$(BDIR)/axc_store.o: $(SDIR)/axc_store.c $(AX_PATH_AS_NEEDED) | $(BDIR) - $(CC) $(PICFLAGS) $(CPPFLAGS) -c $< -o $@ +$(BDIR)/axc.o: $(SDIR)/axc.c | $(BDIR) + $(CC) $(cppflags) $(cflags) -c $< -o $@ -$(BDIR)/libaxc.a: $(BDIR)/axc.o $(BDIR)/axc_crypto.o $(BDIR)/axc_store.o - $(AR) rcs $@ $^ +$(BDIR)/axc_crypto.o: $(SDIR)/axc_crypto.c | $(BDIR) + $(CC) $(cppflags) $(cflags) -c $< -o $@ -$(BDIR)/libaxc-nt.a: $(BDIR)/axc-nt.o $(BDIR)/axc_crypto.o $(BDIR)/axc_store.o - $(AR) rcs $@ $^ +$(BDIR)/axc_store.o: $(SDIR)/axc_store.c | $(BDIR) + $(CC) $(cppflags) $(cflags) -c $< -o $@ -$(BDIR)/libaxc.so: $(AX_PATH_AS_NEEDED) | $(BDIR) - $(CC) -shared -Wl,-soname,libaxc.so.$(VER_MAJ) -o $@ $(PICFLAGS) $(SDIR)/axc.c $(SDIR)/axc_crypto.c $(SDIR)/axc_store.c $(LDFLAGS) $(CPPFLAGS) +$(BDIR)/libaxc.so: | $(BDIR) + $(CC) -fPIC $(cppflags) $(cflags) $(LDFLAGS) \ + -shared -Wl,-soname,libaxc.so.$(VER_MAJ) -o $@ \ + $(SDIR)/axc.c $(SDIR)/axc_crypto.c $(SDIR)/axc_store.c $(BDIR)/libaxc.pc: $(BDIR) - echo 'prefix='$(PREFIX) > $@ - echo 'exec_prefix=$${prefix}' >> $@ - echo 'libdir=$${prefix}/lib/$(ARCH)' >> $@ - echo 'includedir=$${prefix}/include' >> $@ + echo 'libdir=$(LIBDIR)' > $@ + echo 'includedir=$(INCLUDEDIR)' >> $@ echo 'Name: libaxc' >> $@ echo 'Version: ${VERSION}' >> $@ echo 'Description: client library for libsignal-protocol-c' >> $@ @@ -112,46 +84,39 @@ echo 'Cflags: -I$${includedir}/axc' >> $@ echo 'Libs: -L$${libdir} -laxc' >> $@ -$(AX_DIR): - @echo "ERROR: Git submodules are not initialized, please run e.g. 'git submodule update --init --recursive' first" >&2 ; false - -$(AX_BDIR): | $(AX_DIR) - $(MKDIR_P) $@ - -$(AX_PATH): | $(AX_BDIR) - cd $(AX_BDIR) && $(CMAKE) $(CMAKE_FLAGS) .. - $(MAKE) -C $(AX_BDIR) - shared: $(BDIR)/libaxc.so $(BDIR)/libaxc.pc -install: $(BDIR) - install -d $(DESTDIR)/$(PREFIX)/lib/$(ARCH)/pkgconfig/ - install -m 644 $(BDIR)/libaxc.a $(DESTDIR)/$(PREFIX)/lib/$(ARCH)/libaxc.a - install -m 644 $(BDIR)/libaxc.so $(DESTDIR)/$(PREFIX)/lib/$(ARCH)/libaxc.so.$(VERSION) - ln -s libaxc.so.$(VERSION) $(DESTDIR)/$(PREFIX)/lib/$(ARCH)/libaxc.so.$(VER_MAJ) - ln -s libaxc.so.$(VERSION) $(DESTDIR)/$(PREFIX)/lib/$(ARCH)/libaxc.so - install -m 644 $(BDIR)/libaxc.pc $(DESTDIR)/$(PREFIX)/lib/$(ARCH)/pkgconfig/ - install -d $(DESTDIR)/$(PREFIX)/include/axc/ - install -m 644 $(SDIR)/axc.h $(DESTDIR)/$(PREFIX)/include/axc/ - install -m 644 $(SDIR)/axc_crypto.h $(DESTDIR)/$(PREFIX)/include/axc/ - install -m 644 $(SDIR)/axc_store.h $(DESTDIR)/$(PREFIX)/include/axc/ +install: $(BDIR)/libaxc.so $(BDIR)/libaxc.pc $(SDIR)/axc.h $(SDIR)/axc_crypto.h $(SDIR)/axc_store.h + $(INSTALL) -d $(DESTDIR)$(LIBDIR)/pkgconfig/ + $(INSTALL) -m 755 $(BDIR)/libaxc.so $(DESTDIR)$(LIBDIR)/libaxc.so.$(VERSION) + ln -s libaxc.so.$(VERSION) $(DESTDIR)$(LIBDIR)/libaxc.so.$(VER_MAJ) + ln -s libaxc.so.$(VERSION) $(DESTDIR)$(LIBDIR)/libaxc.so + $(INSTALL) -m 644 $(BDIR)/libaxc.pc $(DESTDIR)$(LIBDIR)/pkgconfig/ + $(INSTALL) -d $(DESTDIR)$(INCLUDEDIR)/axc/ + $(INSTALL) -m 644 $(SDIR)/axc.h $(DESTDIR)$(INCLUDEDIR)/axc/ + $(INSTALL) -m 644 $(SDIR)/axc_crypto.h $(DESTDIR)$(INCLUDEDIR)/axc/ + $(INSTALL) -m 644 $(SDIR)/axc_store.h $(DESTDIR)$(INCLUDEDIR)/axc/ -.PHONY: test +.PHONY: test test_store test_client test: test_store test_client -.PHONY: test_store -test_store: $(SDIR)/axc_store.c $(SDIR)/axc_crypto.c $(TDIR)/test_store.c $(AX_PATH_AS_NEEDED) - $(CC) $(TESTFLAGS) -o $(TDIR)/$@.o $(TDIR)/test_store.c $(SDIR)/axc_crypto.c $(LDFLAGS_T) - -$(TDIR)/$@.o - find . -maxdepth 1 -iname 'test*.g*' -exec mv {} $(TDIR) \; - -.PHONY: test_client -test_client: $(SDIR)/axc.c $(SDIR)/axc_crypto.c $(SDIR)/axc_store.c $(TDIR)/test_client.c $(AX_PATH_AS_NEEDED) - $(CC) $(TESTFLAGS) -o $(TDIR)/$@.o $(SDIR)/axc_crypto.c $(TDIR)/test_client.c $(LDFLAGS_T) - -$(TDIR)/$@.o - find . -maxdepth 1 -iname 'test*.g*' -exec mv {} $(TDIR) \; +test_store: $(TDIR)/test_store + $(TDIR)/test_store + # find . -maxdepth 1 -iname 'test*.g*' -exec mv {} $(TDIR) \; + +$(TDIR)/test_store: $(SDIR)/axc_store.c $(SDIR)/axc_crypto.c $(TDIR)/test_store.c + $(CC) $(cppflags) $(cflags) -lcmocka $(libs) -o $@ \ + $(TDIR)/test_store.c $(SDIR)/axc_crypto.c + +test_client: $(TDIR)/test_client + $(TDIR)/test_client + # find . -maxdepth 1 -iname 'test*.g*' -exec mv {} $(TDIR) \; + +$(TDIR)/test_client: $(SDIR)/axc.c $(SDIR)/axc_crypto.c $(SDIR)/axc_store.c $(TDIR)/test_client.c + $(CC) $(cppflags) $(cflags) -lcmocka $(libs) -o $@ \ + $(SDIR)/axc_crypto.c $(TDIR)/test_client.c .PHONY: coverage coverage: test @@ -164,9 +129,9 @@ clean: rm -f $(TDIR)/*.o rm -f $(TDIR)/*.gcno $(TDIR)/*.gcda $(TDIR)/*.sqlite - + .PHONY: clean-all clean-all: clean - rm -rf client $(BDIR) $(CDIR) $(AX_BDIR) + rm -rf client $(BDIR) $(CDIR)