From ee9c2ac044cc77b80f30420c8f0788cad4281084 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Wed, 6 Jun 2018 15:54:18 +0200 Subject: Figuring out how to organize the src folder(s)... --- Makefile | 99 ++++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 65 insertions(+), 34 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 8eabe6b..abe6817 100644 --- a/Makefile +++ b/Makefile @@ -1,57 +1,88 @@ ################################################################################ -## CONFIG ###################################################################### +## USER CONFIGURATION OPTIONS ################################################## ################################################################################ -MODULES ?= battlemap db -MODULES_DIR ?= ${CURDIR}/src +## Main Directories +SRC_DIR ?= ${CURDIR}/src +CONFIG_DIR ?= ${CURDIR}/conf + +## Optional Directories +BIN_DIR ?= ${CURDIR}/ebin +INCLUDE_DIR ?= ${CURDIR}/include +WWW_DIR ?= ${CURDIR}/www +LOG_DIR ?= ${CURDIR}/log + +## Binaries +YAWS ?= yaws +YAWS_OPTS ?= + +ERLC ?= erlc +ERLC_OPTS ?= + +ERL ?= erl +ERL_OPTS ?= + +DIALYZER ?= dialyzer +DIALYZER_OPTS ?= + +M4 ?= m4 +M4_OPTS ?= + +## Filenames +DIALYZER_PLT_FILE ?= tacticians-server.plt -YAWS_CONFIG_TEMPLATE ?= ${CURDIR}/conf/yaws.conf.m4 -YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl ################################################################################ ## MAKEFILE MAGIC ############################################################## ################################################################################ -MODULES_SRC = $(addprefix $(MODULES_DIR)/,$(MODULES)) +## General +OPTIONAL_DIRS = $(BIN_DIR) $(INCLUDE_DIR) $(WWW_DIR) $(LOG_DIR) + +## Preprocessor +PREPROCESSOR_CONFIG_FILES = $(shell find $(CONFIG_DIR) -name "*.m4.conf") +PREPROCESSABLE_FILES = $(shell find ${CURDIR} -name "*.m4") +PREPROCESSED_FILES = $(patsubst %.m4,%,$(PREPROCESSABLE_FILES)) + +## Erlang +ERL_SRC_FILES = $(shell find $(SRC_DIR) -name "*.erl") +ERL_BIN_FILES = $(patsubst %.erl,$(BIN_DIR)/%.beam,$(notdir $(ERL_SRC_FILES))) + +## Yaws +REQUIRED_HEADERS = $(INCLUDE_DIR)/yaws_api.hrl ################################################################################ ## SANITY CHECKS ############################################################### ################################################################################ -MISSING_MODULES_DIR = \ - $(filter-out $(wildcard $(MODULES_SRC)),$(MODULES_SRC)) - -ifneq ($(MISSING_MODULES_DIR),) -$(error "The following modules are missing: $(MISSING_MODULES_DIR)") -endif ################################################################################ ## TARGET RULES ################################################################ ################################################################################ -export - -all: - for module in $(MODULES_SRC) ; do \ - $(MAKE) -C $$module all; \ - done +all: build -debug: - for module in $(MODULES_SRC) ; do \ - $(MAKE) -C $$module debug ; \ - done +debug: debug_run -build: - for module in $(MODULES_SRC) ; do \ - $(MAKE) -C $$module build ; \ - done +build: $(OPTIONAL_DIRS) $(REQUIRED_HEADERS) $(PREPROCESSED_FILES) $(ERL_BIN_FILES) -run_battlemap: - $(MAKE) -C $(MODULES_DIR)/battlemap/ run - -run_db: - $(MAKE) -C $(MODULES_DIR)/db/ run +run: yaws_run clean: - for module in $(MODULES_SRC) ; do \ - $(MAKE) -C $$module clean; \ - done + # Preprocessor + rm -rf $(PREPROCESSED_FILES) + # Erlang + rm -rf $(BIN_DIR)/* + +reset: + # Preprocessor + rm -rf $(PREPROCESSED_FILES) + rm -rf $(OPTIONAL_DIRS) ################################################################################ ## INTERNAL RULES ############################################################## ################################################################################ +$(PREPROCESSED_FILES): %: $(PREPROCESSOR_CONFIG_FILES) %.m4 + $(M4) -P $^ > $@ + +$(OPTIONAL_DIRS): %: + mkdir -p $@ + +.SECONDEXPANSION: +$(ERL_BIN_FILES): $(BIN_DIR)/%.beam: $$(shell find $(SRC_DIR) -name "%.erl") + $(ERLC) $(ERLC_OPTS) -o $(BIN_DIR) $< -- cgit v1.2.3-70-g09d2