summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battlemap/Makefile87
-rw-r--r--src/battlemap/mk/debug.mk39
-rw-r--r--src/battlemap/mk/erlang.mk28
-rw-r--r--src/battlemap/mk/preprocessor.mk28
-rw-r--r--src/battlemap/mk/yaws.mk28
-rw-r--r--src/battlemap/module.conf0
6 files changed, 163 insertions, 47 deletions
diff --git a/src/battlemap/Makefile b/src/battlemap/Makefile
index c5bb150..4eca95a 100644
--- a/src/battlemap/Makefile
+++ b/src/battlemap/Makefile
@@ -1,15 +1,18 @@
-## Directories
-SRC_DIR ?= src
-BIN_DIR ?= ebin
-CONF_DIR ?= conf
-INCLUDE_DIR ?= include
-UNUSED_WWW_DIR ?= www
-
+################################################################################
+## CONFIG ######################################################################
+################################################################################
YAWS_CONF ?= $(CONF_DIR)/yaws.conf
YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl
DIALYZER_PLT_FILE ?= tacticians-server.plt
+## Main Directories
+SRC_DIR ?= src
+CONF_DIR ?= conf
+#### Optional Dirs
+BIN_DIR ?= ebin
+INCLUDE_DIR ?= include
+
## Binaries
YAWS ?= yaws
ERLC ?= erlc
@@ -17,56 +20,46 @@ ERLC_OPTS ?=
DIALYZER ?= dialyzer
################################################################################
+## MAKEFILE MAGIC ##############################################################
+################################################################################
+OPTIONAL_DIRS = $(BIN_DIR) $(INCLUDE_DIR)
REQUIRED_HEADERS = $(INCLUDE_DIR)/yaws_api.hrl
-SRC_FILES = $(wildcard $(SRC_DIR)/*.erl)
-MODULES = $(patsubst %.erl,%,$(SRC_FILES))
-SUB_DIRS = $(filter-out $(MODULES),$(sort $(dir $(wildcard $(SRC_DIR)/*/))))
-BIN_FILES = $(patsubst $(SRC_DIR)/%.erl,$(BIN_DIR)/%.beam,$(SRC_FILES))
+################################################################################
+## SANITY CHECKS ###############################################################
+################################################################################
+YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl
+DIALYZER_PLT_FILE ?= tacticians-server.plt
+
+## Main Directories
+SRC_DIR ?= src
+CONF_DIR ?= conf
-export
################################################################################
-all:
- for subdir in $(SUB_DIRS) ; do \
- echo "Building dir $$subdir" ; \
- $(MAKE) build SRC_DIR=$$subdir || exit 1;\
- done
+## INCLUDES ####################################################################
+################################################################################
+main_target: all
-debug: $(DIALYZER_PLT_FILE)
- $(MAKE) build_debug
- $(DIALYZER) --check_plt --plt $(DIALYZER_PLT_FILE)
- $(DIALYZER) --get_warnings $(SRC_DIR)/*.erl $(SRC_DIR)/*/*.erl \
- --src --plt $(DIALYZER_PLT_FILE)
+include ${CURDIR}/mk/debug.mk
+include ${CURDIR}/mk/erlang.mk
+include ${CURDIR}/mk/preprocessor.mk
+include ${CURDIR}/mk/yaws.mk
+################################################################################
+## TARGET RULES ################################################################
+################################################################################
+all: build
-build_debug:
- $(MAKE) clean
- $(MAKE) ERLC_OPTS=+debug_info
+debug: debug_run
-build: $(BIN_DIR) $(REQUIRED_HEADERS) $(BIN_FILES)
+build: $(PREPROCESSOR_RESULT) $(ERLANG_RESULT)
-run: all $(UNUSED_WWW_DIR)
- $(YAWS) --conf $(YAWS_CONF)
+run: yaws_run
clean:
rm -rf $(BIN_DIR)/*
-$(DIALYZER_PLT_FILE):
- $(DIALYZER) --build_plt --apps erts kernel stdlib jiffy --output_plt $@
- $(MAKE) build_debug
- $(DIALYZER) --add_to_plt --plt $@ -r $(BIN_DIR)
-
-$(INCLUDE_DIR)/yaws_api.hrl: $(YAWS_API_HEADER) $(INCLUDE_DIR)
- cp $< $@
-
-$(BIN_DIR):
- mkdir -p $@
-
-$(UNUSED_WWW_DIR):
- mkdir -p $@
-
-$(INCLUDE_DIR):
+################################################################################
+## INTERNAL RULES ##############################################################
+################################################################################
+$(OPTIONAL_DIRS): %:
mkdir -p $@
-
-.SECONDEXPANSION:
-$(BIN_FILES): $(BIN_DIR)/%.beam : $(SRC_DIR)/%.erl $$(wildcard $$(SRC_DIR)/%/.)
- $(ERLC) $(ERLC_OPTS) -o $(BIN_DIR) $<
diff --git a/src/battlemap/mk/debug.mk b/src/battlemap/mk/debug.mk
new file mode 100644
index 0000000..2b98ff3
--- /dev/null
+++ b/src/battlemap/mk/debug.mk
@@ -0,0 +1,39 @@
+################################################################################
+## CONFIG ######################################################################
+################################################################################
+DIALYZER_PLT_FILE ?= tacticians-server.plt
+DIALYZER ?= dialyzer
+
+################################################################################
+## MAKEFILE MAGIC ##############################################################
+################################################################################
+SRC_FILES ?= $(wildcard $(SRC_DIR)/*.erl $(SRC_DIR)/*/*.erl)
+
+################################################################################
+## SANITY CHECKS ###############################################################
+################################################################################
+
+################################################################################
+## TARGET RULES ################################################################
+################################################################################
+DEBUG_RESULT = $(DIALYZER_PLT_FILE)
+
+debug_rebuild:
+ $(MAKE) clean
+ $(MAKE) ERLC_OPTS=+debug_info
+
+################################################################################
+## INTERNAL RULES ##############################################################
+################################################################################
+ifeq ($(wildcard $(DIALYZER_PLT_FILE)),)
+debug_run:
+ $(DIALYZER) --build_plt --apps erts kernel stdlib jiffy --output_plt $@
+ $(MAKE) debug_rebuild
+ $(DIALYZER) --add_to_plt --plt $@ -r $(BIN_DIR)
+else
+debug_run:
+ $(MAKE) debug_rebuild
+ $(DIALYZER) --check_plt --plt $(DIALYZER_PLT_FILE)
+ $(DIALYZER) --get_warnings $(SRC_DIR)/*.erl $(SRC_DIR)/*/*.erl \
+ --src --plt $(DIALYZER_PLT_FILE)
+endif
diff --git a/src/battlemap/mk/erlang.mk b/src/battlemap/mk/erlang.mk
new file mode 100644
index 0000000..9150f63
--- /dev/null
+++ b/src/battlemap/mk/erlang.mk
@@ -0,0 +1,28 @@
+################################################################################
+## CONFIG ######################################################################
+################################################################################
+ERLC ?= erlc
+ERLC_OPTS ?=
+
+################################################################################
+## MAKEFILE MAGIC ##############################################################
+################################################################################
+SRC_FILES ?= $(wildcard $(SRC_DIR)/*.erl $(SRC_DIR)/*/*.erl)
+BIN_FILES = \
+ $(patsubst %.erl,$(BIN_DIR)/%.beam,$(notdir $(SRC_FILES)))
+
+################################################################################
+## SANITY CHECKS ###############################################################
+################################################################################
+
+################################################################################
+## TARGET RULES ################################################################
+################################################################################
+ERLANG_RESULT = $(BIN_DIR) $(BIN_FILES)
+
+################################################################################
+## INTERNAL RULES ##############################################################
+################################################################################
+.SECONDEXPANSION:
+$(BIN_FILES): $(BIN_DIR)/%.beam : $$(wildcard $(SRC_DIR)/*/%.erl $(SRC_DIR)/%.erl)
+ $(ERLC) $(ERLC_OPTS) -o $(BIN_DIR) $<
diff --git a/src/battlemap/mk/preprocessor.mk b/src/battlemap/mk/preprocessor.mk
new file mode 100644
index 0000000..2b332a4
--- /dev/null
+++ b/src/battlemap/mk/preprocessor.mk
@@ -0,0 +1,28 @@
+################################################################################
+## CONFIG ######################################################################
+################################################################################
+CONFIG_FILE ?= ${CURDIR}/module.conf
+
+################################################################################
+## MAKEFILE MAGIC ##############################################################
+################################################################################
+PREPROCESSOR_FILES = $(shell find ${CURDIR} -name "*.m4")
+PREPROCESSED_FILES = $(patsubst %.m4,%,$(PREPROCESSOR_FILES))
+
+################################################################################
+## SANITY CHECKS ###############################################################
+################################################################################
+ifeq ($(wildcard $(CONFIG_FILE)),)
+$(error "Missing CONFIG_FILE ($(CONFIG_FILE)).")
+endif
+
+################################################################################
+## TARGET RULES ################################################################
+################################################################################
+PREPROCESSOR_RESULT = $(PREPROCESSED_FILES)
+
+################################################################################
+## INTERNAL RULES ##############################################################
+################################################################################
+$(PREPROCESSED_FILES): %: $(CONFIG_FILE) %.m4
+ m4 -P $^ > $@
diff --git a/src/battlemap/mk/yaws.mk b/src/battlemap/mk/yaws.mk
new file mode 100644
index 0000000..0c479bf
--- /dev/null
+++ b/src/battlemap/mk/yaws.mk
@@ -0,0 +1,28 @@
+################################################################################
+## CONFIG ######################################################################
+################################################################################
+YAWS_CONF ?= $(CONF_DIR)/yaws.conf
+YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl
+
+YAWS ?= yaws
+
+################################################################################
+## MAKEFILE MAGIC ##############################################################
+################################################################################
+
+################################################################################
+## SANITY CHECKS ###############################################################
+################################################################################
+YAWS_API_HEADER ?= /my/src/yaws/include/yaws_api.hrl
+
+################################################################################
+## TARGET RULES ################################################################
+################################################################################
+yaws_run: all $(UNUSED_WWW_DIR)
+ $(YAWS) --conf $(YAWS_CONF)
+
+################################################################################
+## INTERNAL RULES ##############################################################
+################################################################################
+$(INCLUDE_DIR)/yaws_api.hrl: $(YAWS_API_HEADER) $(INCLUDE_DIR)
+ cp $< $@
diff --git a/src/battlemap/module.conf b/src/battlemap/module.conf
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/battlemap/module.conf