aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.config1
-rw-r--r--plugins/sfx.mk45
2 files changed, 46 insertions, 0 deletions
diff --git a/build.config b/build.config
index 6a8d567..0ba1245 100644
--- a/build.config
+++ b/build.config
@@ -37,6 +37,7 @@ plugins/xref
# Plugins enhancing the functionality of other plugins.
plugins/cover
+plugins/sfx
# Core modules which can use variables from plugins.
core/deps-tools
diff --git a/plugins/sfx.mk b/plugins/sfx.mk
new file mode 100644
index 0000000..ab9761c
--- /dev/null
+++ b/plugins/sfx.mk
@@ -0,0 +1,45 @@
+# Copyright (c) 2016, Loïc Hoguin <[email protected]>
+# This file is part of erlang.mk and subject to the terms of the ISC License.
+
+.PHONY: sfx
+
+ifdef RELX_RELEASE
+ifdef SFX
+
+# Configuration.
+
+SFX_OUTPUT = $(RELX_OUTPUT_DIR)/$(RELX_RELEASE).run
+
+# Core targets.
+
+rel:: sfx
+
+# Plugin-specific targets.
+
+define sfx_stub
+#!/bin/sh
+
+TMPDIR=`mktemp -d`
+ARCHIVE=`awk '/^__ARCHIVE_BELOW__$$/ {print NR + 1; exit 0;}' $$0`
+FILENAME=$$(basename $$0)
+REL=$${FILENAME%.*}
+
+tail -n+$$ARCHIVE $$0 | tar xz -C $$TMPDIR
+
+$$TMPDIR/$$REL/bin/$$REL console
+RET=$$?
+
+rm -rf $$TMPDIR
+
+exit $$RET
+
+__ARCHIVE_BELOW__
+endef
+
+sfx:
+ $(call render_template,sfx_stub,$(SFX_OUTPUT))
+ $(gen_verbose) tar -C $(RELX_OUTPUT_DIR) -czO $(RELX_RELEASE) >> $(SFX_OUTPUT)
+ $(verbose) chmod +x $(SFX_OUTPUT)
+
+endif
+endif