aboutsummaryrefslogtreecommitdiffstats
path: root/test/plugin_c_src.mk
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2015-10-26 22:40:04 +0100
committerLoïc Hoguin <[email protected]>2015-10-26 22:40:04 +0100
commit9bd5ec4f4797f0c11df4e75f78b10208e1287c03 (patch)
tree21633adfaf469be73c01595a0c4f6787f3ac2873 /test/plugin_c_src.mk
parentd7b4e589f1716e2de5087a491ea1701d294dccbc (diff)
downloaderlang.mk-9bd5ec4f4797f0c11df4e75f78b10208e1287c03.tar.gz
erlang.mk-9bd5ec4f4797f0c11df4e75f78b10208e1287c03.tar.bz2
erlang.mk-9bd5ec4f4797f0c11df4e75f78b10208e1287c03.zip
Add new-nif target and related tests
Pushing this now so I can figure out Windows.
Diffstat (limited to 'test/plugin_c_src.mk')
-rw-r--r--test/plugin_c_src.mk82
1 files changed, 82 insertions, 0 deletions
diff --git a/test/plugin_c_src.mk b/test/plugin_c_src.mk
new file mode 100644
index 0000000..bedbc3f
--- /dev/null
+++ b/test/plugin_c_src.mk
@@ -0,0 +1,82 @@
+# C source plugin.
+
+C_SRC_CASES = cpp custom dir env nif port
+C_SRC_TARGETS = $(addprefix c-src-,$(C_SRC_CASES))
+C_SRC_CLEAN_TARGETS = $(addprefix clean-,$(C_SRC_TARGETS))
+
+.PHONY: c-src $(C_SRC_TARGETS) clean-c-src $(C_SRC_CLEAN_TARGETS)
+
+clean-c-src: $(C_SRC_CLEAN_TARGETS)
+
+$(C_SRC_CLEAN_TARGETS):
+ $t rm -rf $(APP_TO_CLEAN)/
+
+c-src: $(C_SRC_TARGETS)
+
+c-src-nif: build clean-c-src-nif
+
+ $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 "Generate a NIF from templates"
+ $t $(MAKE) -C $(APP) new-nif n=$(APP) $v
+
+ $i "Build the application"
+ $t $(MAKE) -C $(APP) $v
+
+ $i "Check that all compiled files exist"
+ $t test -f $(APP)/$(APP).d
+ $t test -f $(APP)/c_src/$(APP).o
+ $t test -f $(APP)/c_src/env.mk
+ $t test -f $(APP)/ebin/$(APP).app
+ $t test -f $(APP)/ebin/$(APP).beam
+ $t test -f $(APP)/priv/$(APP).so
+
+ $i "Check that the application was compiled correctly"
+ $t $(ERL) -pa $(APP)/ebin/ -eval " \
+ ok = application:start($(APP)), \
+ {ok, [$(APP)]} = application:get_key($(APP), modules), \
+ {module, $(APP)} = code:load_file($(APP)), \
+ {hello, joe} = $(APP):hello(joe), \
+ {hello, mike} = $(APP):hello(mike), \
+ {hello, robert} = $(APP):hello(robert), \
+ halt()"
+
+ $i "Re-build the application"
+ $t $(MAKE) -C $(APP) $v
+
+ $i "Check that all compiled files exist"
+ $t test -f $(APP)/$(APP).d
+ $t test -f $(APP)/c_src/$(APP).o
+ $t test -f $(APP)/c_src/env.mk
+ $t test -f $(APP)/ebin/$(APP).app
+ $t test -f $(APP)/ebin/$(APP).beam
+ $t test -f $(APP)/priv/$(APP).so
+
+ $i "Check that the application was compiled correctly"
+ $t $(ERL) -pa $(APP)/ebin/ -eval " \
+ ok = application:start($(APP)), \
+ {ok, [$(APP)]} = application:get_key($(APP), modules), \
+ {module, $(APP)} = code:load_file($(APP)), \
+ {hello, joe} = $(APP):hello(joe), \
+ {hello, mike} = $(APP):hello(mike), \
+ {hello, robert} = $(APP):hello(robert), \
+ halt()"
+
+ $i "Clean the application"
+ $t $(MAKE) -C $(APP) clean $v
+
+ $i "Check that all intermediate files were removed"
+ $t test ! -e $(APP)/$(APP).d
+ $t test ! -e $(APP)/c_src/$(APP).o
+ $t test ! -e $(APP)/ebin/$(APP).app
+ $t test ! -e $(APP)/ebin/$(APP).beam
+ $t test ! -e $(APP)/priv/$(APP).so
+
+ $i "Distclean the application"
+ $t $(MAKE) -C $(APP) distclean $v
+
+ $i "Check that all files were removed"
+ $t test ! -e $(APP)/c_src/env.mk