# Root makefile that can be used to build/run tests and examples for some # or all databases: # make - build tests and examples for all the databases # make test - build and run tests and examples for all the databases # make <db> - build tests and examples for <db> # make <db>-test - build and run tests and examples for <db> # db := oracle pgsql sqlite mysql .PHONY: all test clean $(db) $(addsuffix -test,$(db)) $(addsuffix -clean,$(db)) all: $(db) test: $(addsuffix -test,$(db)) test: $(addsuffix -clean,$(db)) define set_dirs edir := $$(wildcard examples-$1-default) tdir := $$(wildcard tests-$1-default) ifeq ($$(edir),) edir := examples-$1 endif ifeq ($$(tdir),) tdir := tests-$1 endif endef define build_rule $1: edir := $$(edir) $1: tdir := $$(tdir) $1: @$$(MAKE) -C $$(edir) @$$(MAKE) -C $$(tdir) endef define test_rule $1-test: edir := $$(edir) $1-test: tdir := $$(tdir) $1-test: @$$(MAKE) -C $$(edir) test @$$(MAKE) -C $$(tdir) test endef define clean_rule $1-clean: edir := $$(edir) $1-clean: tdir := $$(tdir) $1-clean: @$$(MAKE) -C $$(edir) clean @$$(MAKE) -C $$(tdir) clean endef # Note: empty line at the end is important. # # define rules $(call set_dirs,$1) $(call build_rule,$1) $(call test_rule,$1) $(call clean_rule,$1) endef $(eval $(foreach d,$(db),$(call rules,$d)))