diff options
Diffstat (limited to 'plugins/escript.mk')
-rw-r--r-- | plugins/escript.mk | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/plugins/escript.mk b/plugins/escript.mk index 1790dcb..4eac352 100644 --- a/plugins/escript.mk +++ b/plugins/escript.mk @@ -27,17 +27,45 @@ help:: # Plugin-specific targets. -escript-zip:: FULL=1 -escript-zip:: deps app +ALL_ESCRIPT_DEPS_DIRS = $(LOCAL_DEPS_DIRS) $(addprefix $(DEPS_DIR)/,$(foreach dep,$(filter-out $(IGNORE_DEPS),$(DEPS)),$(call query_name,$(dep)))) + +ESCRIPT_RUNTIME_DEPS_FILE ?= $(ERLANG_MK_TMP)/escript-deps.log + +escript-list-runtime-deps: +ifeq ($(IS_DEP),) + $(verbose) rm -f $(ESCRIPT_RUNTIME_DEPS_FILE) +endif + $(verbose) touch $(ESCRIPT_RUNTIME_DEPS_FILE) + $(verbose) set -e; for dep in $(ALL_ESCRIPT_DEPS_DIRS) ; do \ + if ! grep -qs ^$$dep$$ $(ESCRIPT_RUNTIME_DEPS_FILE); then \ + echo $$dep >> $(ESCRIPT_RUNTIME_DEPS_FILE); \ + if grep -qs -E "^[[:blank:]]*include[[:blank:]]+(erlang\.mk|.*/erlang\.mk|.*ERLANG_MK_FILENAME.*)$$" \ + $$dep/GNUmakefile $$dep/makefile $$dep/Makefile; then \ + $(MAKE) -C $$dep escript-list-runtime-deps \ + IS_DEP=1 \ + ESCRIPT_RUNTIME_DEPS_FILE=$(ESCRIPT_RUNTIME_DEPS_FILE); \ + fi \ + fi \ + done +ifeq ($(IS_DEP),) + $(verbose) sort < $(ESCRIPT_RUNTIME_DEPS_FILE) | uniq > $(ESCRIPT_RUNTIME_DEPS_FILE).sorted + $(verbose) mv $(ESCRIPT_RUNTIME_DEPS_FILE).sorted $(ESCRIPT_RUNTIME_DEPS_FILE) +endif + +escript-prepare: deps app + $(MAKE) escript-list-runtime-deps + +escript-zip:: escript-prepare $(verbose) mkdir -p $(dir $(abspath $(ESCRIPT_ZIP_FILE))) $(verbose) rm -f $(abspath $(ESCRIPT_ZIP_FILE)) - $(gen_verbose) cd .. && $(ESCRIPT_ZIP) $(abspath $(ESCRIPT_ZIP_FILE)) $(PROJECT)/ebin/* + $(gen_verbose) cd .. && $(ESCRIPT_ZIP) $(abspath $(ESCRIPT_ZIP_FILE)) $(notdir $(CURDIR))/ebin/* ifneq ($(DEPS),) $(verbose) cd $(DEPS_DIR) && $(ESCRIPT_ZIP) $(abspath $(ESCRIPT_ZIP_FILE)) \ $(subst $(DEPS_DIR)/,,$(addsuffix /*,$(wildcard \ - $(addsuffix /ebin,$(shell cat $(ERLANG_MK_TMP)/deps.log))))) + $(addsuffix /ebin,$(shell cat $(ESCRIPT_RUNTIME_DEPS_FILE)))))) endif +# @todo Only generate the zip file if there were changes. escript:: escript-zip $(gen_verbose) printf "%s\n" \ "#!$(ESCRIPT_SHEBANG)" \ |