# Core: Miscellaneous.
#
# The miscellaneous tests use the prefix "core-", not "core-misc-".
CORE_ELIXIR_TARGETS = $(call list_targets,core-elixir)
.PHONY: core-elixir $(CORE_ELIXIR_TARGETS)
core-elixir: $(CORE_ELIXIR_TARGETS)
core-elixir-compile-from-lib: init
$i "Bootstrap a new OTP library named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
$i "Create Elixir source file hello.ex"
$t mkdir $(APP)/lib
$t printf "%s\n" \
"defmodule HelloWorld do" \
" def hello do" \
' IO.puts("Hello, world!")' \
" end" \
"end" > $(APP)/lib/hello.ex
$i "Build the application"
$t $(MAKE) -C $(APP) $v
$i "Check that all compiled files exist"
$t test -f $(APP)/ebin/$(APP).app
$t test -f $(APP)/ebin/Elixir.HelloWorld.beam
$i "Check that the application was compiled correctly"
$t $(ERL) -pa $(APP)/ebin/ -pa $(APP)/deps/*/ebin -pa $(dir $(shell elixir -e 'IO.puts(:code.lib_dir(:elixir))'))/*/ebin -eval " \
ok = application:start($(APP)), \
{ok, Mods = ['Elixir.HelloWorld']} \
= application:get_key($(APP), modules), \
[{module, M} = code:load_file(M) || M <- Mods], \
halt()"
core-elixir-compile-from-src: init
$i "Bootstrap a new OTP library named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
$i "Create Elixir source file hello.ex"
$t printf "%s\n" \
"defmodule HelloWorld do" \
" def hello do" \
' IO.puts("Hello, world!")' \
" end" \
"end" > $(APP)/src/hello.ex
$i "Build the application"
$t $(MAKE) -C $(APP) $v
$i "Check that all compiled files exist"
$t test -f $(APP)/ebin/$(APP).app
$t test -f $(APP)/ebin/Elixir.HelloWorld.beam
$i "Check that the application was compiled correctly"
$t $(ERL) -pa $(APP)/ebin/ -pa $(APP)/deps/*/ebin -pa $(dir $(shell elixir -e 'IO.puts(:code.lib_dir(:elixir))'))/*/ebin -eval " \
ok = application:start($(APP)), \
{ok, Mods = ['Elixir.HelloWorld']} \
= application:get_key($(APP), modules), \
[{module, M} = code:load_file(M) || M <- Mods], \
halt()"
core-elixir-disable: init
$i "Bootstrap a new OTP library named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
$i "Create Elixir source file hello.ex"
$t printf "%s\n" \
"defmodule HelloWorld do" \
" def hello do" \
' IO.puts("Hello, world!")' \
" end" \
"end" > $(APP)/src/hello.ex
$i "Disable Elixir in the Makefile"
$t perl -ni.bak -e 'print;if ($$.==1) {print "ELIXIR = disable\n"}' $(APP)/Makefile
$i "Build the application"
$t $(MAKE) -C $(APP) $v
$i "Check that the Elixir file wasn't compiled"
$t test -f $(APP)/ebin/$(APP).app
$t test ! -e $(APP)/ebin/Elixir.HelloWorld.beam
$i "Check that the application was compiled correctly"
$t $(ERL) -pa $(APP)/ebin/ -pa $(APP)/deps/*/ebin -pa $(dir $(shell elixir -e 'IO.puts(:code.lib_dir(:elixir))'))/*/ebin -eval " \
ok = application:start($(APP)), \
{ok, Mods = []} \
= application:get_key($(APP), modules), \
halt()"
core-elixir-disable-autopatch-fail: init
$i "Bootstrap a new OTP library named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
$i "Add Jason to the list of dependencies"
$t perl -ni.bak -e 'print;if ($$.==1) {print "DEPS = jason\ndep_jason = git https://github.com/michalmuskala/jason.git master\n"}' $(APP)/Makefile
$i "Disable Elixir in the Makefile"
$t perl -ni.bak -e 'print;if ($$.==1) {print "ELIXIR = disable\n"}' $(APP)/Makefile
$i "Building the application should fail"
$t ! $(MAKE) -C $(APP) $v
core-elixir-disable-autopatch-make: init
$i "Bootstrap a new OTP library named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
$i "Add Reloader to the list of dependencies"
$t perl -ni.bak -e 'print;if ($$.==1) {print "DEPS = reloader\ndep_reloader = git https://github.com/2600hz/erlang-reloader de1e6c74204b61ccf3b3652f05c6a7dec9e8257d\n"}' $(APP)/Makefile
$i "Disable Elixir in the Makefile"
$t perl -ni.bak -e 'print;if ($$.==1) {print "ELIXIR = disable\n"}' $(APP)/Makefile
$i "Building the application should work as Reloader contains a proper Makefile"
$t $(MAKE) -C $(APP) $v
core-elixir-disable-autopatch-rebar3: init
$i "Bootstrap a new OTP library named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
$i "Add Jose to the list of dependencies"
$t perl -ni.bak -e 'print;if ($$.==1) {print "DEPS = jose\ndep_jose = git https://github.com/potatosalad/erlang-jose main\n"}' $(APP)/Makefile
$i "Disable Elixir in the Makefile"
$t perl -ni.bak -e 'print;if ($$.==1) {print "ELIXIR = disable\n"}' $(APP)/Makefile
$i "Building the application should work as Jose is Rebar3-compatible"
$t $(MAKE) -C $(APP) $v
core-elixir-from-dep: init
$i "Bootstrap a new OTP library named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
$i "Add Elixir, Lager, Jason, Phoenix to the list of dependencies"
$t perl -ni.bak -e 'print;if ($$.==1) {print "DEPS = elixir lager jason phoenix\ndep_elixir_commit = v1.17.3\ndep_lager = git https://github.com/erlang-lager/lager master\ndep_jason = git https://github.com/michalmuskala/jason.git master\ndep_phoenix = hex 1.7.2\n"}' $(APP)/Makefile
$i "Add the lager_transform parse_transform to ERLC_OPTS"
$t echo "ERLC_OPTS += +'{parse_transform, lager_transform}'" >> $(APP)/Makefile
ifdef LEGACY
$i "Add Elixir, Lager, Jason and Phoenix to the applications key in the .app.src file"
$t perl -ni.bak -e 'print;if ($$.==7) {print "\t\telixir,\n\t\tlager,\n\t\tjason,\n\t\tphoenix,\n"}' $(APP)/src/$(APP).app.src
endif
$i "Build the application"
$t $(MAKE) -C $(APP) $v
$i "Check that all dependencies were fetched and built"
$t test -f $(APP)/deps/elixir/ebin/dep_built
$t test -f $(APP)/deps/lager/ebin/dep_built
$t test -f $(APP)/deps/jason/ebin/dep_built
$t test -f $(APP)/deps/phoenix/ebin/dep_built
$i "Check that the application was compiled correctly"
$t cd $(APP); $(ERL) -pa ebin/ -pa deps/*/ebin -pa deps/elixir/lib/*/ebin -eval " \
{ok, Apps} = application:ensure_all_started('$(APP)'), \
true = lists:member(elixir, Apps), \
true = lists:member(lager, Apps), \
true = lists:member(jason, Apps), \
true = lists:member(phoenix, Apps), \
halt()"
$i "Check that the Jason application depends on Elixir builtins"
$t cd $(APP); $(ERL) -pa ebin/ -pa deps/*/ebin -pa deps/elixir/lib/*/ebin -eval " \
{ok, Apps} = application:ensure_all_started(jason), \
true = lists:member(elixir, Apps), \
true = lists:member(eex, Apps), \
true = lists:member(logger, Apps), \
true = lists:member(mix, Apps), \
halt()"
core-elixir-from-system: init
$i "Bootstrap a new OTP library named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
$i "Add Lager, Jason, Phoenix to the list of dependencies"
$t perl -ni.bak -e 'print;if ($$.==1) {print "DEPS = lager jason phoenix\ndep_lager = git https://github.com/erlang-lager/lager master\ndep_jason = git https://github.com/michalmuskala/jason.git master\ndep_phoenix = hex 1.7.2\nELIXIR = system\n"}' $(APP)/Makefile
$i "Add the lager_transform parse_transform to ERLC_OPTS"
$t echo "ERLC_OPTS += +'{parse_transform, lager_transform}'" >> $(APP)/Makefile
ifdef LEGACY
$i "Add Lager, Jason and Phoenix to the applications key in the .app.src file"
$t perl -ni.bak -e 'print;if ($$.==7) {print "\t\telixir,\n\t\tlager,\n\t\tjason,\n\t\tphoenix,\n"}' $(APP)/src/$(APP).app.src
endif
$i "Build the application"
$t $(MAKE) -C $(APP) $v
$i "Check that all dependencies were fetched and built"
$t ! test -e $(APP)/deps/elixir
$t test -f $(APP)/deps/lager/ebin/dep_built
$t test -f $(APP)/deps/jason/ebin/dep_built
$t test -f $(APP)/deps/phoenix/ebin/dep_built
$i "Check that the application was compiled correctly"
$t cd $(APP); $(ERL) -pa ebin/ -pa deps/*/ebin -pa $(dir $(shell elixir -e 'IO.puts(:code.lib_dir(:elixir))'))/*/ebin -eval " \
{ok, Apps} = application:ensure_all_started('$(APP)'), \
true = lists:member(lager, Apps), \
true = lists:member(jason, Apps), \
true = lists:member(phoenix, Apps), \
halt()"
$i "Check that the Jason application depends on Elixir builtins"
$t cd $(APP); $(ERL) -pa ebin/ -pa deps/*/ebin -pa $(dir $(shell elixir -e 'IO.puts(:code.lib_dir(:elixir))'))/*/ebin -eval " \
{ok, Apps} = application:ensure_all_started(jason), \
true = lists:member(elixir, Apps), \
true = lists:member(eex, Apps), \
true = lists:member(logger, Apps), \
true = lists:member(mix, Apps), \
halt()"
core-elixir-nif: init
$i "Bootstrap a new OTP library named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib $v
$i "Add Libsalty2 to the list of dependencies"
$t perl -ni.bak -e 'print;if ($$.==1) {print "DEPS = libsalty2\ndep_libsalty2 = git https://github.com/Ianleeclark/libsalty2.git b11e544\nELIXIR = system\n"}' $(APP)/Makefile
ifdef LEGACY
$i "Add Libsalty2 to the applications key in the .app.src file"
$t perl -ni.bak -e 'print;if ($$.==7) {print "\t\tlibsalty2,\n"}' $(APP)/src/$(APP).app.src
endif
$i "Build the application"
$t $(MAKE) -C $(APP) $v
$i "Check that the application was compiled correctly"
$t $(ERL) -pa $(APP)/ebin/ -pa $(APP)/deps/*/ebin -pa $(dir $(shell elixir -e 'IO.puts(:code.lib_dir(:elixir))'))/*/ebin -eval " \
{ok, Apps} = application:ensure_all_started('$(APP)'), \
true = lists:member(libsalty2, Apps), \
halt()"
core-elixir-rel: init
$i "Bootstrap a new release named $(APP)"
$t mkdir $(APP)/
$t cp ../erlang.mk $(APP)/
$t $(MAKE) -C $(APP) -f erlang.mk bootstrap-lib bootstrap-rel $v
$i "Add Lager, Jason, Phoenix to the list of dependencies"
$t perl -ni.bak -e 'print;if ($$.==1) {print "DEPS = lager jason phoenix\ndep_lager = git https://github.com/erlang-lager/lager master\ndep_jason = git https://github.com/michalmuskala/jason.git master\ndep_phoenix = hex 1.7.2\nELIXIR = system\n"}' $(APP)/Makefile
$i "Add the lager_transform parse_transform to ERLC_OPTS"
$t echo "ERLC_OPTS += +'{parse_transform, lager_transform}'" >> $(APP)/Makefile
ifdef LEGACY
$i "Add Lager, Jason and Phoenix to the applications key in the .app.src file"
$t perl -ni.bak -e 'print;if ($$.==7) {print "\t\tlager,\n\t\tjason,\n\t\tphoenix,\n"}' $(APP)/src/$(APP).app.src
endif
$i "Build the release"
$t $(MAKE) -C $(APP) $v
$i "Check that the release was built"
$t test -d $(APP)/_rel
$t test -d $(APP)/_rel/$(APP)_release
$t test -d $(APP)/_rel/$(APP)_release/bin
$t test -d $(APP)/_rel/$(APP)_release/lib
$t test -d $(APP)/_rel/$(APP)_release/releases
$t test -d $(APP)/_rel/$(APP)_release/releases/1