summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-06-06 15:54:18 +0200
committernsensfel <SpamShield0@noot-noot.org>2018-06-06 15:54:18 +0200
commitee9c2ac044cc77b80f30420c8f0788cad4281084 (patch)
tree6ce9c45b6c0f0c556839b6f462f84eab06e26594 /Makefile
parent97f7511e61cebae3676a83aa9c0dc2efb15d8d8c (diff)
Figuring out how to organize the src folder(s)...
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile99
1 files changed, 65 insertions, 34 deletions
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) $<