| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- # 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
|