|
@@ -2,22 +2,19 @@
|
|
|
# Copyright (c) 2014, Dave Cottlehuber <dch@skunkwerks.at>
|
|
|
# This file is part of erlang.mk and subject to the terms of the ISC License.
|
|
|
|
|
|
-.PHONY: distclean-escript escript
|
|
|
+.PHONY: distclean-escript escript escript-zip
|
|
|
|
|
|
# Configuration.
|
|
|
|
|
|
ESCRIPT_NAME ?= $(PROJECT)
|
|
|
ESCRIPT_FILE ?= $(ESCRIPT_NAME)
|
|
|
|
|
|
+ESCRIPT_SHEBANG ?= /usr/bin/env escript
|
|
|
ESCRIPT_COMMENT ?= This is an -*- erlang -*- file
|
|
|
+ESCRIPT_EMU_ARGS ?= -escript main $(ESCRIPT_NAME)
|
|
|
|
|
|
-ESCRIPT_BEAMS ?= "ebin/*", "deps/*/ebin/*"
|
|
|
-ESCRIPT_SYS_CONFIG ?= "rel/sys.config"
|
|
|
-ESCRIPT_EMU_ARGS ?= -pa . \
|
|
|
- -sasl errlog_type error \
|
|
|
- -escript main $(ESCRIPT_NAME)
|
|
|
-ESCRIPT_SHEBANG ?= /usr/bin/env escript
|
|
|
-ESCRIPT_STATIC ?= "deps/*/priv/**", "priv/**"
|
|
|
+ESCRIPT_ZIP ?= 7z a -tzip -mx=9 -mtc=off $(if $(filter-out 0,$(V)),,> /dev/null)
|
|
|
+ESCRIPT_ZIP_FILE ?= $(ERLANG_MK_TMP)/escript.zip
|
|
|
|
|
|
# Core targets.
|
|
|
|
|
@@ -30,38 +27,22 @@ help::
|
|
|
|
|
|
# Plugin-specific targets.
|
|
|
|
|
|
-# Based on https://github.com/synrc/mad/blob/master/src/mad_bundle.erl
|
|
|
-# Copyright (c) 2013 Maxim Sokhatsky, Synrc Research Center
|
|
|
-# Modified MIT License, https://github.com/synrc/mad/blob/master/LICENSE :
|
|
|
-# Software may only be used for the great good and the true happiness of all
|
|
|
-# sentient beings.
|
|
|
-
|
|
|
-define ESCRIPT_RAW
|
|
|
-'Read = fun(F) -> {ok, B} = file:read_file(filename:absname(F)), B end,'\
|
|
|
-'Files = fun(L) -> A = lists:concat([filelib:wildcard(X)||X<- L ]),'\
|
|
|
-' [F || F <- A, not filelib:is_dir(F) ] end,'\
|
|
|
-'Squash = fun(L) -> [{filename:basename(F), Read(F) } || F <- L ] end,'\
|
|
|
-'Zip = fun(A, L) -> {ok,{_,Z}} = zip:create(A, L, [{compress,all},memory]), Z end,'\
|
|
|
-'Ez = fun(Escript) ->'\
|
|
|
-' Static = Files([$(ESCRIPT_STATIC)]),'\
|
|
|
-' Beams = Squash(Files([$(ESCRIPT_BEAMS), $(ESCRIPT_SYS_CONFIG)])),'\
|
|
|
-' Archive = Beams ++ [{ "static.gz", Zip("static.gz", Static)}],'\
|
|
|
-' escript:create(Escript, [ $(ESCRIPT_OPTIONS)'\
|
|
|
-' {archive, Archive, [memory]},'\
|
|
|
-' {shebang, "$(ESCRIPT_SHEBANG)"},'\
|
|
|
-' {comment, "$(ESCRIPT_COMMENT)"},'\
|
|
|
-' {emu_args, " $(ESCRIPT_EMU_ARGS)"}'\
|
|
|
-' ]),'\
|
|
|
-' file:change_mode(Escript, 8#755)'\
|
|
|
-'end,'\
|
|
|
-'Ez("$(ESCRIPT_FILE)"),'\
|
|
|
-'halt().'
|
|
|
-endef
|
|
|
-
|
|
|
-ESCRIPT_COMMAND = $(subst ' ',,$(ESCRIPT_RAW))
|
|
|
-
|
|
|
-escript:: distclean-escript deps app
|
|
|
- $(gen_verbose) $(ERL) -eval $(ESCRIPT_COMMAND)
|
|
|
+escript-zip:: deps app
|
|
|
+ $(verbose) mkdir -p $(dir $(ESCRIPT_ZIP))
|
|
|
+ $(verbose) rm -f $(ESCRIPT_ZIP_FILE)
|
|
|
+ $(gen_verbose) cd .. && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) $(PROJECT)/ebin/*
|
|
|
+ifneq ($(DEPS),)
|
|
|
+ $(verbose) cd $(DEPS_DIR) && $(ESCRIPT_ZIP) $(ESCRIPT_ZIP_FILE) \
|
|
|
+ `cat $(ERLANG_MK_TMP)/deps.log | sed 's/^$(subst /,\/,$(DEPS_DIR))\///' | sed 's/$$/\/ebin\/\*/'`
|
|
|
+endif
|
|
|
+
|
|
|
+escript:: escript-zip
|
|
|
+ $(gen_verbose) printf "%s\n" \
|
|
|
+ "#!$(ESCRIPT_SHEBANG)" \
|
|
|
+ "%% $(ESCRIPT_COMMENT)" \
|
|
|
+ "%%! $(ESCRIPT_EMU_ARGS)" > $(ESCRIPT_FILE)
|
|
|
+ $(verbose) cat $(ESCRIPT_ZIP_FILE) >> $(ESCRIPT_FILE)
|
|
|
+ $(verbose) chmod +x $(ESCRIPT_FILE)
|
|
|
|
|
|
distclean-escript:
|
|
|
$(gen_verbose) rm -f $(ESCRIPT_NAME)
|