# m2SQLITE — GNU Modula-2 bindings for SQLite GM2 ?= gm2 # Prefer pkg-config when the dev package exists, else fall back to the # runtime library path (no header needed: the binding links by symbol). PKGLIBS := $(shell pkg-config --libs sqlite3 2>/dev/null) ifeq ($(strip $(PKGLIBS)),) ifneq ($(wildcard /usr/lib/x86_64-linux-gnu/libsqlite3.so.0),) SQLITELIBS := /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 else SQLITELIBS := -lsqlite3 endif else SQLITELIBS := $(PKGLIBS) endif SQLITECFLAGS := $(shell pkg-config --cflags sqlite3 2>/dev/null) GM2FLAGS ?= SRC_DIR := src LIB_DIR := lib BLD := build OBJDIR := $(BLD)/objs OBJS := $(OBJDIR)/SQLiteUtils.o INCLUDES := -I$(SRC_DIR) -I$(LIB_DIR) TESTS := test_version test_open test_exec test_prepare test_func test_blob test_codes EXAMPLES := version hello_db SHOWCASES := showcase_all .PHONY: all tests examples showcases clean check local-sqlite all: tests examples showcases $(OBJDIR): mkdir -p $(OBJDIR) $(BLD)/tests: mkdir -p $(BLD)/tests $(BLD)/examples: mkdir -p $(BLD)/examples $(OBJDIR)/SQLiteUtils.o: $(LIB_DIR)/SQLiteUtils.mod $(LIB_DIR)/SQLiteUtils.def $(SRC_DIR)/SQLite.def | $(OBJDIR) $(GM2) $(INCLUDES) $(GM2FLAGS) -c $< -o $@ tests: $(BLD)/tests $(OBJS) $(addprefix $(BLD)/tests/,$(TESTS)) $(BLD)/tests/%: tests/%.mod $(OBJS) | $(BLD)/tests $(GM2) $(INCLUDES) $(GM2FLAGS) $(SQLITECFLAGS) $< $(OBJS) -o $@ $(SQLITELIBS) examples: $(BLD)/examples $(OBJS) $(addprefix $(BLD)/examples/,$(EXAMPLES)) $(BLD)/examples/%: examples/%.mod $(OBJS) | $(BLD)/examples $(GM2) $(INCLUDES) $(GM2FLAGS) $(SQLITECFLAGS) $< $(OBJS) -o $@ $(SQLITELIBS) $(BLD)/showcases: mkdir -p $(BLD)/showcases showcases: $(BLD)/showcases $(OBJS) $(addprefix $(BLD)/showcases/,$(SHOWCASES)) $(BLD)/showcases/%: showcases/%.mod $(OBJS) | $(BLD)/showcases $(GM2) $(INCLUDES) $(GM2FLAGS) $(SQLITECFLAGS) $< $(OBJS) -o $@ $(SQLITELIBS) check: tests ./tests/run_tests.sh clean: rm -rf $(BLD) # Optional: build a local amalgamation from the (git-ignored) # sqlite-master/ reference tree into build/. Requires tclsh (present) # and a C compiler; takes a few minutes. After this, link with: # gm2 ... build/sqlite3.o -lpthread -ldl -lm local-sqlite: mkdir -p $(BLD)/sqlite cd sqlite-master && ./configure --disable-tcl && make sqlite3.c cp sqlite-master/sqlite3.c sqlite-master/sqlite3.h $(BLD)/sqlite/ rm -f sqlite-master/sqlite3.c sqlite-master/sqlite3.h cc -O2 -DSQLITE_THREADSAFE=1 -c $(BLD)/sqlite/sqlite3.c -o $(BLD)/sqlite/sqlite3.o