From 6f84b47de725a9a3b55de6847e090fb6c52f96c4 Mon Sep 17 00:00:00 2001 From: "Michael Bradley, Jr" Date: Tue, 20 Oct 2020 12:48:38 -0500 Subject: [PATCH] test: should build and test for SQLITE/SSL_STATIC default (=true) and =false Refactor the Makefile as necessary. --- .github/workflows/test.yml | 117 ++++++++++++++++++++++++++++++++++++- Makefile | 46 ++++++++++----- 2 files changed, 146 insertions(+), 17 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f34f634..f9af7aa 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -56,7 +56,7 @@ jobs: "${M}" -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" V=1 update "${M}" -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" V=1 deps - - name: Generate the sqlite.nim wrapper for SQLCipher + - name: Generate the sqlite.nim wrapper for SQLCipher (static) shell: bash run: | [[ ${{ matrix.platform }} = macos* ]] && \ @@ -73,7 +73,7 @@ jobs: V=1 \ sqlite.nim - - name: Run tests + - name: Run tests (static) shell: bash run: | [[ ${{ matrix.platform }} = macos* ]] && \ @@ -89,3 +89,116 @@ jobs: SSL_LIB_DIR="${SSL_LIB_DIR}" \ V=1 \ test + + - name: Generate the sqlite.nim wrapper for SQLCipher (shared) + shell: bash + run: | + rm -rf nimcache sqlcipher sqlite test/build + [[ ${{ matrix.platform }} = macos* ]] && \ + SSL_INCLUDE_DIR=/usr/local/opt/openssl@1.1/include && \ + SSL_LIB_DIR=/usr/local/opt/openssl@1.1/lib + [[ ${{ matrix.platform }} = windows* ]] && \ + export PATH="${PATH}:${HOME}/scoop/shims" && \ + SSL_INCLUDE_DIR="${HOME}/scoop/apps/openssl-mingw/current/include" && \ + SSL_LIB_DIR="${HOME}/scoop/apps/openssl-mingw/current/lib" + export M="$(which mingw32-make || echo make)" + "${M}" -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" \ + SQLITE_STATIC=false \ + SSL_INCLUDE_DIR="${SSL_INCLUDE_DIR}" \ + SSL_LIB_DIR="${SSL_LIB_DIR}" \ + SSL_STATIC=false \ + V=1 \ + sqlite.nim + + - name: Run tests (shared) + shell: bash + run: | + [[ ${{ matrix.platform }} = macos* ]] && \ + SSL_INCLUDE_DIR=/usr/local/opt/openssl@1.1/include && \ + SSL_LIB_DIR=/usr/local/opt/openssl@1.1/lib + [[ ${{ matrix.platform }} = windows* ]] && \ + export PATH="${PATH}:${HOME}/scoop/shims" && \ + SSL_INCLUDE_DIR="${HOME}/scoop/apps/openssl-mingw/current/include" && \ + SSL_LIB_DIR="${HOME}/scoop/apps/openssl-mingw/current/lib" + export M="$(which mingw32-make || echo make)" + "${M}" -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" \ + SQLITE_STATIC=false \ + SSL_INCLUDE_DIR="${SSL_INCLUDE_DIR}" \ + SSL_LIB_DIR="${SSL_LIB_DIR}" \ + SSL_STATIC=false \ + V=1 \ + test + + - name: "Generate the sqlite.nim wrapper for SQLCipher (mixed: shared SQLITE)" + shell: bash + run: | + rm -rf nimcache sqlcipher sqlite test/build + [[ ${{ matrix.platform }} = macos* ]] && \ + SSL_INCLUDE_DIR=/usr/local/opt/openssl@1.1/include && \ + SSL_LIB_DIR=/usr/local/opt/openssl@1.1/lib + [[ ${{ matrix.platform }} = windows* ]] && \ + export PATH="${PATH}:${HOME}/scoop/shims" && \ + SSL_INCLUDE_DIR="${HOME}/scoop/apps/openssl-mingw/current/include" && \ + SSL_LIB_DIR="${HOME}/scoop/apps/openssl-mingw/current/lib" + export M="$(which mingw32-make || echo make)" + "${M}" -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" \ + SQLITE_STATIC=false \ + SSL_INCLUDE_DIR="${SSL_INCLUDE_DIR}" \ + SSL_LIB_DIR="${SSL_LIB_DIR}" \ + V=1 \ + sqlite.nim + + - name: "Run tests (mixed: shared SQLITE)" + shell: bash + run: | + [[ ${{ matrix.platform }} = macos* ]] && \ + SSL_INCLUDE_DIR=/usr/local/opt/openssl@1.1/include && \ + SSL_LIB_DIR=/usr/local/opt/openssl@1.1/lib + [[ ${{ matrix.platform }} = windows* ]] && \ + export PATH="${PATH}:${HOME}/scoop/shims" && \ + SSL_INCLUDE_DIR="${HOME}/scoop/apps/openssl-mingw/current/include" && \ + SSL_LIB_DIR="${HOME}/scoop/apps/openssl-mingw/current/lib" + export M="$(which mingw32-make || echo make)" + "${M}" -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" \ + SQLITE_STATIC=false \ + SSL_INCLUDE_DIR="${SSL_INCLUDE_DIR}" \ + SSL_LIB_DIR="${SSL_LIB_DIR}" \ + V=1 \ + test + + - name: "Generate the sqlite.nim wrapper for SQLCipher (mixed: shared SSL)" + shell: bash + run: | + rm -rf nimcache sqlcipher sqlite test/build + [[ ${{ matrix.platform }} = macos* ]] && \ + SSL_INCLUDE_DIR=/usr/local/opt/openssl@1.1/include && \ + SSL_LIB_DIR=/usr/local/opt/openssl@1.1/lib + [[ ${{ matrix.platform }} = windows* ]] && \ + export PATH="${PATH}:${HOME}/scoop/shims" && \ + SSL_INCLUDE_DIR="${HOME}/scoop/apps/openssl-mingw/current/include" && \ + SSL_LIB_DIR="${HOME}/scoop/apps/openssl-mingw/current/lib" + export M="$(which mingw32-make || echo make)" + "${M}" -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" \ + SSL_INCLUDE_DIR="${SSL_INCLUDE_DIR}" \ + SSL_LIB_DIR="${SSL_LIB_DIR}" \ + SSL_STATIC=false \ + V=1 \ + sqlite.nim + + - name: "Run tests (mixed: shared SSL)" + shell: bash + run: | + [[ ${{ matrix.platform }} = macos* ]] && \ + SSL_INCLUDE_DIR=/usr/local/opt/openssl@1.1/include && \ + SSL_LIB_DIR=/usr/local/opt/openssl@1.1/lib + [[ ${{ matrix.platform }} = windows* ]] && \ + export PATH="${PATH}:${HOME}/scoop/shims" && \ + SSL_INCLUDE_DIR="${HOME}/scoop/apps/openssl-mingw/current/include" && \ + SSL_LIB_DIR="${HOME}/scoop/apps/openssl-mingw/current/lib" + export M="$(which mingw32-make || echo make)" + "${M}" -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" \ + SSL_INCLUDE_DIR="${SSL_INCLUDE_DIR}" \ + SSL_LIB_DIR="${SSL_LIB_DIR}" \ + SSL_STATIC=false \ + V=1 \ + test diff --git a/Makefile b/Makefile index b33f5ad..03a0cb2 100644 --- a/Makefile +++ b/Makefile @@ -70,8 +70,10 @@ update: | update-common SQLITE_CDEFS ?= -DSQLITE_HAS_CODEC -DSQLITE_TEMP_STORE=3 SQLITE_CFLAGS ?= -pthread ifndef SQLITE_LDFLAGS - ifneq ($(detected_OS),macOS) - SQLITE_LDFLAGS := -pthread + ifeq ($(detected_OS),Windows) + SQLITE_LDFLAGS := -lwinpthread + else + SQLITE_LDFLAGS := -lpthread endif endif SQLITE_STATIC ?= true @@ -99,7 +101,7 @@ ifndef SSL_LDFLAGS endif SQLITE3_C ?= sqlite/sqlite3.c -SQLITE3_H ?= $(CURDIR)/sqlite/sqlite3.h +SQLITE3_H ?= $(shell pwd)/sqlite/sqlite3.h $(SQLITE3_C): | deps ifeq ($(detected_OS),Windows) @@ -125,7 +127,7 @@ endif sqlite3.c: $(SQLITE3_C) -SQLITE_STATIC_LIB ?= $(CURDIR)/sqlite/sqlite3.a +SQLITE_STATIC_LIB ?= $(shell pwd)/sqlite/sqlite3.a $(SQLITE_STATIC_LIB): $(SQLITE3_C) echo -e $(BUILD_MSG) "SQLCipher static library" @@ -148,27 +150,31 @@ ifndef SHARED_LIB_EXT endif endif -SQLITE_SHARED_LIB ?= $(CURDIR)/sqlite/libsqlite3.$(SHARED_LIB_EXT) +SQLITE_SHARED_LIB ?= $(shell pwd)/sqlite/libsqlite3.$(SHARED_LIB_EXT) -ifndef PLATFORM_LINKER_FLAGS +ifndef PLATFORM_FLAGS ifeq ($(detected_OS),macOS) - PLATFORM_LINKER_FLAGS := -dylib + ifeq ($(SSL_STATIC),false) + PLATFORM_FLAGS := -shared -dylib -undefined dynamic_lookup + else + PLATFORM_FLAGS := -shared -dylib -undefined dynamic_lookup $(SSL_LDFLAGS) + endif + else ifeq ($(detected_OS),Windows) + PLATFORM_FLAGS := -shared $(SSL_LDFLAGS) + else + PLATFORM_FLAGS := -shared -fPIC endif endif $(SQLITE_SHARED_LIB): $(SQLITE3_C) echo -e $(BUILD_MSG) "SQLCipher shared library" + $(ENV_SCRIPT) $(CC) \ - -c -fPIC \ - sqlite/sqlite3.c \ $(SQLITE_CDEFS) \ $(SQLITE_CFLAGS) \ $(SSL_CFLAGS) \ - -o sqlite/sqlite3.o $(HANDLE_OUTPUT) - $(ENV_SCRIPT) ld \ - $(PLATFORM_LINKER_FLAGS) \ - -undefined dynamic_lookup \ - sqlite/sqlite3.o \ + sqlite/sqlite3.c \ + $(SQLITE_LDFLAGS) \ + $(PLATFORM_FLAGS) \ -o $(SQLITE_SHARED_LIB) $(HANDLE_OUTPUT) ifndef SQLITE_LIB @@ -206,7 +212,7 @@ SQLITE_NIM ?= sqlcipher/sqlite.nim $(SQLITE_NIM): $(NIMTEROP_TOAST) $(SQLITE_LIB) echo -e $(BUILD_MSG) "Nim wrapper for SQLCipher" + mkdir -p sqlcipher - SQLITE_CDEFS="$(SQLITE_CDEFS)"\ + SQLITE_CDEFS="$(SQLITE_CDEFS)" \ SQLITE_STATIC="$(SQLITE_STATIC)" \ SQLITE3_H="$(SQLITE3_H)" \ SQLITE_LIB="$(SQLITE_LIB)" \ @@ -219,7 +225,17 @@ $(SQLITE_NIM): $(NIMTEROP_TOAST) $(SQLITE_LIB) sqlite.nim: $(SQLITE_NIM) test: $(SQLITE_NIM) +ifeq ($(detected_OS),macOS) SSL_LDFLAGS="$(SSL_LDFLAGS)" \ $(ENV_SCRIPT) nimble tests +else ifeq ($(detected_OS),Windows) + PATH="$(shell dirname $(SQLITE_SHARED_LIB)):$${PATH}" \ + SSL_LDFLAGS="$(SSL_LDFLAGS)" \ + $(ENV_SCRIPT) nimble tests +else + LD_LIBRARY_PATH="$(shell pwd)/sqlite$${LD_LIBRARY_PATH:+:$${LD_LIBRARY_PATH}}" \ + SSL_LDFLAGS="$(SSL_LDFLAGS)" \ + $(ENV_SCRIPT) nimble tests +endif endif # "variables.mk" was not included