erl.mk 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. all: deps apps
  2. .PHONY: all
  3. APPS = $(patsubst apps/*/src/%.app.src,%,$(wildcard apps/*/src/*.app.src))
  4. ### DEPS -- Fetches & compiles deps recursively then moves every dep to deps/
  5. deps: $(patsubst dep_%,deps/%/,$(filter dep_%,$(.VARIABLES))) | deps-dir
  6. $(if $(wildcard deps/*/deps/), \
  7. mv -v deps/*/deps/* deps/ 2>/dev/null ; rmdir $(wildcard deps/*/deps/))
  8. .PHONY: deps
  9. deps-dir:
  10. $(if $(wildcard deps/),,mkdir deps/)
  11. deps/%/:
  12. git clone -n -- $(word 1,$(dep_$*)) $@
  13. cd $@ && git checkout -q $(word 2,$(dep_$*)) && cd ../..
  14. @bash -c "if [[ -f $@/Makefile ]]; \
  15. then echo 'make -C $@ all' ; make -C $@ all ; \
  16. else echo 'cd $@ && rebar get-deps compile && cd ../..' ; \
  17. cd $@ && rebar get-deps compile && cd ../.. ; fi"
  18. ### APP -- Compiles src/ into ebin/
  19. apps: $(APPS)
  20. $(foreach ext, erl xrl yrl S core, \
  21. $(patsubst apps/*/src/%.$(ext), apps/*/ebin/%.beam, $(wildcard apps/*/src/*.$(ext)))) \
  22. $(patsubst apps/*/templates/%.dtl, apps/*/ebin/%_dtl.beam,$(wildcard apps/*/templates/*.dtl))
  23. echo "-> $@"
  24. .PHONY: apps
  25. apps/*/ebin/%.app: apps/*/src/%.app.src | apps/*/ebin/
  26. @erl -noshell -eval 'case file:consult("$<") of {ok,_} -> ok ; \
  27. {error,{_,_,M}} -> io:format("$<: ~s~s\n",M), halt(1) end.' \
  28. -s init stop
  29. cp $< $@
  30. echo "application -> $@"
  31. apps/*/ebin/%.beam: apps/*/src/%.erl $(wildcard apps/*/include/*) | apps/*/ebin/ | deps/*/ebin/
  32. erlc -o ebin/ $(ERLCFLAGS) -v -Iinclude/ -Ideps/ $<
  33. echo "compile -> $@"
  34. apps/*/ebin/%_view.beam: apps/*/priv/templates/%.html | apps/*/ebin/
  35. $(if $(wildcard deps/erlydtl/),, \
  36. $(error Error compiling $<: deps/erlydtl/ not found))
  37. @erl -noshell -pa ebin/ -pa deps/*/ebin/ \
  38. -eval 'io:format("Compiling ErlyDTL template: $< -> $@\n").' \
  39. -eval 'erlydtl:compile("$<", $*_view, [{out_dir,"ebin/"},{auto_escape,false}]).' \
  40. -s init stop
  41. echo "template -> $@"
  42. apps/*/ebin/:
  43. mkdir ebin/
  44. echo "-> $@"
  45. #clean:
  46. # $(if $(wildcard apps/*/ebin/),rm -r ebin/)
  47. #.PHONY: clean