# Copyright (c) 2014 Dave Cottlehuber # This file is part of erlang.mk and subject to the terms of the ISC License. .PHONY: distclean-escript escript # Configuration. ESCRIPT_NAME ?= $(PROJECT) ESCRIPT_COMMENT ?= This is an -*- erlang -*- file 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/**" # Core targets. distclean:: distclean-escript help:: @printf "%s\n" "" \ "Escript targets:" \ " escript Build an executable escript archive" \ # 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_NAME)"),'\ 'halt().' endef ESCRIPT_COMMAND = $(subst ' ',,$(ESCRIPT_RAW)) escript:: distclean-escript deps app $(gen_verbose) $(ERL) -eval $(ESCRIPT_COMMAND) distclean-escript: $(gen_verbose) rm -f $(ESCRIPT_NAME)