Browse Source

Improve the erlydtl plugin

Among the improvements:

* Work with current versions of ErlyDTL
* Add DTL_PATH, defaulting to templates/
* Add DTL_SUFFIX, defaulting to _dtl (suffix of output module names)
* Simplify the Erlang code and port to the erlang function

The erlang function can now accept any command-line argument for
erl as optional second argument.
Loïc Hoguin 9 years ago
parent
commit
e88092a674
2 changed files with 22 additions and 14 deletions
  1. 1 1
      core/core.mk
  2. 21 13
      plugins/erlydtl.mk

+ 1 - 1
core/core.mk

@@ -136,7 +136,7 @@ endef
 
 
 # Adding erlang.mk to make Erlang scripts who call init:get_plain_arguments() happy.
 # Adding erlang.mk to make Erlang scripts who call init:get_plain_arguments() happy.
 define erlang
 define erlang
-$(ERL) -pz $(ERLANG_MK_TMP)/rebar/ebin -eval "$(subst $(newline),,$(subst ",\",$(1)))" -- erlang.mk
+$(ERL) $(2) -pz $(ERLANG_MK_TMP)/rebar/ebin -eval "$(subst $(newline),,$(subst ",\",$(1)))" -- erlang.mk
 endef
 endef
 
 
 ifeq ($(shell which wget 2>/dev/null | wc -l), 1)
 ifeq ($(shell which wget 2>/dev/null | wc -l), 1)

+ 21 - 13
plugins/erlydtl.mk

@@ -4,6 +4,8 @@
 # Configuration.
 # Configuration.
 
 
 DTL_FULL_PATH ?= 0
 DTL_FULL_PATH ?= 0
+DTL_PATH ?= templates/
+DTL_SUFFIX ?= _dtl
 
 
 # Verbosity.
 # Verbosity.
 
 
@@ -12,20 +14,26 @@ dtl_verbose = $(dtl_verbose_$(V))
 
 
 # Core targets.
 # Core targets.
 
 
-define compile_erlydtl
-	$(dtl_verbose) $(ERL) -pa ebin/ $(DEPS_DIR)/erlydtl/ebin/ -eval ' \
-		Compile = fun(F) -> \
-			S = fun (1) -> re:replace(filename:rootname(string:sub_string(F, 11), ".dtl"), "/",  "_",  [{return, list}, global]); \
-				(0) -> filename:basename(F, ".dtl") \
-			end, \
-			Module = list_to_atom(string:to_lower(S($(DTL_FULL_PATH))) ++ "_dtl"), \
-			{ok, _} = erlydtl:compile(F, Module, [{out_dir, "ebin/"}, return_errors, {doc_root, "templates"}]) \
-		end, \
-		_ = [Compile(F) || F <- string:tokens("$(1)", " ")], \
-		halt().'
+define erlydtl_compile.erl
+	[begin
+		Module0 = case $(DTL_FULL_PATH) of
+			0 ->
+				filename:basename(F, ".dtl");
+			1 ->
+				"$(DTL_PATH)" ++ F2 = filename:rootname(F, ".dtl"),
+				re:replace(F2, "/",  "_",  [{return, list}, global])
+		end,
+		Module = list_to_atom(string:to_lower(Module0) ++ "$(DTL_SUFFIX)"),
+		case erlydtl:compile(F, Module, [{out_dir, "ebin/"}, return_errors, {doc_root, "templates"}]) of
+			ok -> ok;
+			{ok, _} -> ok
+		end
+	end || F <- string:tokens("$(1)", " ")],
+	halt().
 endef
 endef
 
 
 ifneq ($(wildcard src/),)
 ifneq ($(wildcard src/),)
-ebin/$(PROJECT).app:: $(sort $(call core_find,templates/,*.dtl))
-	$(if $(strip $?),$(call compile_erlydtl,$?))
+ebin/$(PROJECT).app:: $(sort $(call core_find,$(DTL_PATH),*.dtl))
+	$(if $(strip $?),\
+		$(dtl_verbose) $(call erlang,$(call erlydtl_compile.erl,$?,-pa ebin/ $(DEPS_DIR)/erlydtl/ebin/)))
 endif
 endif