all: deps apps .PHONY: all APPS = $(patsubst apps/*/src/%.app.src,%,$(wildcard apps/*/src/*.app.src)) ### DEPS -- Fetches & compiles deps recursively then moves every dep to deps/ deps: $(patsubst dep_%,deps/%/,$(filter dep_%,$(.VARIABLES))) | deps-dir $(if $(wildcard deps/*/deps/), \ mv -v deps/*/deps/* deps/ 2>/dev/null ; rmdir $(wildcard deps/*/deps/)) .PHONY: deps deps-dir: $(if $(wildcard deps/),,mkdir deps/) deps/%/: git clone -n -- $(word 1,$(dep_$*)) $@ cd $@ && git checkout -q $(word 2,$(dep_$*)) && cd ../.. @bash -c "if [[ -f $@/Makefile ]]; \ then echo 'make -C $@ all' ; make -C $@ all ; \ else echo 'cd $@ && rebar get-deps compile && cd ../..' ; \ cd $@ && rebar get-deps compile && cd ../.. ; fi" ### APP -- Compiles src/ into ebin/ apps: $(APPS) $(foreach ext, erl xrl yrl S core, \ $(patsubst apps/*/src/%.$(ext), apps/*/ebin/%.beam, $(wildcard apps/*/src/*.$(ext)))) \ $(patsubst apps/*/templates/%.dtl, apps/*/ebin/%_dtl.beam,$(wildcard apps/*/templates/*.dtl)) echo "-> $@" .PHONY: apps apps/*/ebin/%.app: apps/*/src/%.app.src | apps/*/ebin/ @erl -noshell \ -eval 'case file:consult("$<") of {ok,_} -> ok ; \ {error,{_,_,M}} -> io:format("$<: ~s~s\n",M), halt(1) end.' \ -s init stop cp $< $@ echo "application -> $@" apps/*/ebin/%.beam: apps/*/src/%.erl $(wildcard apps/*/include/*) | apps/*/ebin/ | deps/*/ebin/ erlc -o ebin/ $(ERLCFLAGS) -v -Iinclude/ -Ideps/ $< echo "compile -> $@" apps/*/ebin/%_view.beam: apps/*/priv/templates/%.html | apps/*/ebin/ $(if $(wildcard deps/erlydtl/),, \ $(error Error compiling $<: deps/erlydtl/ not found)) @erl -noshell -pa ebin/ -pa deps/*/ebin/ \ -eval 'io:format("Compiling ErlyDTL template: $< -> $@\n").' \ -eval 'erlydtl:compile("$<", $*_view, [{out_dir,"ebin/"},{auto_escape,false}]).' \ -s init stop echo "template -> $@" apps/*/ebin/: mkdir ebin/ echo "-> $@" #clean: # $(if $(wildcard apps/*/ebin/),rm -r ebin/) #.PHONY: clean