123456789101112131415161718192021222324252627282930313233343536373839 |
- -module(mad_bundle).
- -copyright('Maxim Sokhatsky').
- -compile(export_all).
- main(App) ->
- EmuArgs = "-noshell -noinput",
- Files = static() ++ beams(fun filename:basename/1, fun read_file/1) ++ overlay(),
- escript:create(App,[shebang,{comment,""},{emu_args,EmuArgs},{archive,Files,[memory]}]),
- file:change_mode(App, 8#764),
- false.
- id(X) -> X.
- read_file(File) -> {ok, Bin} = file:read_file(filename:absname(File)), Bin.
- static() ->
- Name = "static.gz",
- {ok,{_,Bin}} = zip:create(Name,
- [ F || F <- mad_repl:wildcards(["{apps,deps}/*/priv/**","priv/**"]), not filelib:is_dir(F) ],
- [{compress,all},memory]),
- [ { Name, Bin } ].
- beams() -> beams(fun id/1, fun read_file/1).
- beams(Fun,Read) ->
- [ { Fun(F), Read(F) } ||
- F <- mad_repl:wildcards(["ebin/*","{apps,deps}/*/ebin/*","sys.config",".applist"]) ].
- privs() -> privs(fun id/1, fun read_file/1).
- privs(Fun,Read) ->
- [ { Fun(F), Read(F) } ||
- F <- mad_repl:wildcards(["{apps,deps}/*/priv/**","priv/**"]), not filelib:is_dir(F) ].
- system_files() -> lists:flatten([system_files(A) || A<- mad_repl:applist(), lists:member(A,mad_repl:system()) ]).
- system_files(App) ->
- [ { F, mad_bundle:read_file(F) } ||
- F <- mad_repl:wildcards([lists:concat([code:lib_dir(App),"/ebin/*.{app,beam}"])]) ].
- overlay() -> overlay(fun id/1, fun read_file/1).
- overlay(Fun,Read) ->
- [ { Fun(F), Read(F) } ||
- F <- mad_repl:wildcards(["deps/ling/apps/*/ebin/*.beam"]) ].
|