Browse Source

Add self-extracting/running archives for releases

This is a proof of concept at the moment. It only runs
the release in 'console' mode at the moment. I am expecting
users to want a mix of both self extracting (without removing
when done) and self running (with removal when done) archives.
There is currently no way to configure the behavior and so
the files get deleted when the release terminates (self running
use case).

The SFX archive will only be created when the SFX variable
is set (either in the Makefile or through the command-line).

There are currently no documentation. Just "make SFX=1".
Loïc Hoguin 8 years ago
parent
commit
55b74f5d01
2 changed files with 46 additions and 0 deletions
  1. 1 0
      build.config
  2. 45 0
      plugins/sfx.mk

+ 1 - 0
build.config

@@ -37,6 +37,7 @@ plugins/xref
 
 
 # Plugins enhancing the functionality of other plugins.
 # Plugins enhancing the functionality of other plugins.
 plugins/cover
 plugins/cover
+plugins/sfx
 
 
 # Core modules which can use variables from plugins.
 # Core modules which can use variables from plugins.
 core/deps-tools
 core/deps-tools

+ 45 - 0
plugins/sfx.mk

@@ -0,0 +1,45 @@
+# Copyright (c) 2016, Loïc Hoguin <essen@ninenines.eu>
+# 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