# codesystem: the extension (PGXS), plus development targets for the engine and the loaders, which need no PostgreSQL. EXTENSION = codesystem EXTVERSION = 0.2.0 MODULE_big = codesystem OBJS = codesystem.o engine/cs_pattern.o DATA = codesystem--0.1.0.sql codesystem--0.1.0--0.2.0.sql codesystem--0.2.0.sql REGRESS = define types hierarchy revisions derive pattern PG_CPPFLAGS = -I engine -std=c99 -Wall -Wno-declaration-after-statement -DEXTVERSION=$(EXTVERSION) EXTRA_CLEAN = build data/prepared PG_CONFIG ?= pg_config PGXS := $(shell $(PG_CONFIG) --pgxs 2>/dev/null) ifneq ($(PGXS),) include $(PGXS) else # no PostgreSQL development files here (the Mac this is written on): the engine and loader targets below still work .DEFAULT_GOAL := test endif # The install script of 0.2.0 is the install script of 0.1.0 followed by the upgrade: committed, and checked to be exactly that. codesystem--0.2.0.sql: codesystem--0.1.0.sql codesystem--0.1.0--0.2.0.sql cat codesystem--0.1.0.sql codesystem--0.1.0--0.2.0.sql > $@ .PHONY: verify-install-script verify-install-script: @cat codesystem--0.1.0.sql codesystem--0.1.0--0.2.0.sql | cmp - codesystem--0.2.0.sql || { echo "codesystem--0.2.0.sql is out of date: run make codesystem--0.2.0.sql" >&2; exit 1; } CC ?= cc CFLAGS_ENGINE = -std=c99 -Wall -Wno-declaration-after-statement -Wpedantic -D_POSIX_C_SOURCE=200809L -O1 -I engine ENGINE_TESTS = lists listbuild pattern parts .PHONY: test engine-test tools-test prepare sanitize test: engine-test tools-test build/test_cs_%: test/test_cs_%.c engine/cs_pattern.c engine/cs_pattern.h @mkdir -p build $(CC) $(CFLAGS_ENGINE) -o $@ test/test_cs_$*.c engine/cs_pattern.c engine-test: $(addprefix build/test_cs_,$(ENGINE_TESTS)) @for t in $(ENGINE_TESTS); do printf '%-9s ' $$t; ./build/test_cs_$$t | tail -1 || exit 1; done tools-test: python3 -m unittest discover -s test -p 'test_prepare.py' # the prepared form of the source files (needs data/raw/, see data/SOURCES.md) prepare: data/prepared/isic_rev4.csv data/prepared/isco_08.csv data/prepared/nace_rev2.csv data/prepared/uk_soc_2020.csv data/prepared/isic_rev4.csv: data/raw/ISIC_Rev_4_english_structure.Txt tools/prepare_isic.py tools/csmodel.py @mkdir -p data/prepared python3 tools/prepare_isic.py $< $@ data/prepared/nace_rev2.csv: data/raw/NACERev.2_EN_CTI_20070214_131821_utf8.csv tools/prepare_nace.py tools/csmodel.py @mkdir -p data/prepared python3 tools/prepare_nace.py $< $@ data/prepared/uk_soc_2020.csv: data/raw/Extended_SOC_framework.csv tools/prepare_soc.py tools/csmodel.py @mkdir -p data/prepared python3 tools/prepare_soc.py $< data/prepared/uk_soc_2020.csv data/prepared/uk_soc_2020_extended.csv data/prepared/isco_08.csv: data/raw/ISCO-08_EN.csv tools/prepare_isco.py tools/csmodel.py @mkdir -p data/prepared python3 tools/prepare_isco.py $< $@ # the engine tests under AddressSanitizer and UBSan. Run this on Linux: on the Mac this was written on, ASan hangs at start-up. sanitize: @mkdir -p build @for t in $(ENGINE_TESTS); do \ $(CC) -std=c99 -g -O1 -fsanitize=address,undefined -fno-sanitize-recover=undefined -D_POSIX_C_SOURCE=200809L -I engine \ -o build/san_$$t test/test_cs_$$t.c engine/cs_pattern.c && printf '%-9s ' $$t && ASAN_OPTIONS=detect_leaks=0 ./build/san_$$t | tail -1 || exit 1; \ done