export RUSTC := rustc RUSTDOC := rustdoc export RUSTFLAGS := -O --cfg ndebug BUILDDIR := build INSTALL_DIR := %PREFIX% ############################################################################### # Reconfiguration ############################################################################### CONFIGURE_ARGS := %CONFIGURE_ARGS% NEED_GIT_RECONFIG := $(shell git submodule status | grep -c '^\(+|-\)') ifeq ($(NEED_GIT_RECONFIG),0) else .PHONY: config.stamp endif Makefile: config.stamp config.stamp: configure Makefile.in ./configure $(CONFIGURE_ARGS) ############################################################################### # Dependencies ############################################################################### PHF_DIR := submodules/rust-phf PHF := $(foreach file,$(shell $(MAKE) -s -C $(PHF_DIR) print-targets),$(PHF_DIR)/$(file)) OPENSSL_DIR := submodules/rust-openssl OPENSSL := $(foreach file,$(shell $(MAKE) -s -C $(OPENSSL_DIR) print-target),$(OPENSSL_DIR)/$(file)) $(PHF): config.stamp $(MAKE) -C $(PHF_DIR) touch $(PHF) $(OPENSSL): config.stamp $(MAKE) -C $(OPENSSL_DIR) touch $(OPENSSL) ############################################################################### # Main targets ############################################################################### POSTGRES_LIB_FILE := src/lib.rs POSTGRES_LIB := $(foreach file,$(shell $(RUSTC) --crate-file-name $(POSTGRES_LIB_FILE)),$(BUILDDIR)/$(file)) POSTGRES_TEST := $(BUILDDIR)/$(shell $(RUSTC) --test --crate-file-name $(POSTGRES_LIB_FILE)) POSTGRES_LIB_DEPS := $(BUILDDIR)/postgres.d POSTGRES_TEST_DEPS := $(BUILDDIR)/postgres_test.d LINK_ARGS := $(foreach file,$(OPENSSL),-L $(dir $(file))) $(foreach file,$(PHF),-L $(dir $(file))) -include $(POSTGRES_LIB_DEPS) -include $(POSTGRES_TEST_DEPS) $(BUILDDIR): mkdir -p $@ $(POSTGRES_LIB): $(POSTGRES_LIB_FILE) $(PHF) $(OPENSSL) | $(BUILDDIR) $(RUSTC) $(RUSTFLAGS) $(LINK_ARGS) --dep-info $(POSTGRES_LIB_DEPS) \ --out-dir $(@D) $< $(POSTGRES_TEST): $(POSTGRES_LIB_FILE) $(PHF) $(OPENSSL) | $(BUILDDIR) $(RUSTC) $(RUSTFLAGS) $(LINK_ARGS) --dep-info $(POSTGRES_TEST_DEPS) \ --out-dir $(@D) --test $< all: $(POSTGRES_LIB) .DEFAULT_GOAL := all .PHONY: all ############################################################################### # Utility ############################################################################### check: $(POSTGRES_TEST) $(POSTGRES_TEST) clean: rm -rf $(BUILDDIR) clean-deps: $(MAKE) -C $(PHF_DIR) clean $(MAKE) -C $(OPENSSL_DIR) clean doc: $(OPENSSL) $(PHF) $(RUSTDOC) $(LINK_ARGS) $(POSTGRES_LIB_FILE) install: $(POSTGRES_LIB) $(MAKE) -C $(PHF_DIR) install INSTALL_DIR=$(abspath $(INSTALL_DIR)) $(MAKE) -C $(PHF_DIR) install INSTALL_DIR=$(abspath $(INSTALL_DIR)) install $(POSTGRES_LIB) $(INSTALL_DIR) .PHONY: check clean doc install