aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Hesse <mail@eworm.de>2017-01-11 10:50:02 +0100
committerChristian Hesse <mail@eworm.de>2017-01-11 22:40:38 +0100
commit3a6788c0d0b50e0cae902cfdc737d1b2624202ba (patch)
treed59d106c171a7b9746906283b007844313b7a52e
parent0a1b23e2a2467eb11673f507c044088f66386a55 (diff)
downloadvis-3a6788c0d0b50e0cae902cfdc737d1b2624202ba.tar.gz
vis-3a6788c0d0b50e0cae902cfdc737d1b2624202ba.tar.xz
single: allow to build self-extracting executable
This allows to create a self extracting executable. The standalone binary and lua files are extracted to /tmp/.vis-XXXXXX, vis is started with the given command line arguments, finally temporary files are removed. Signed-off-by: Christian Hesse <mail@eworm.de>
-rw-r--r--.gitignore1
-rw-r--r--GNUmakefile5
-rwxr-xr-xvis-single.sh14
3 files changed, 20 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 103b097..63eab3f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@
/dependency
/vis
/vis-menu
+/vis-single
*.css
*.gcda
*.gcno
diff --git a/GNUmakefile b/GNUmakefile
index dba2952..052c300 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -185,4 +185,9 @@ standalone: clean
CFLAGS="-I$(DEPS_INC) --static -Wl,--as-needed" LDFLAGS="-L$(DEPS_LIB)" CC=musl-gcc
PATH=$(DEPS_BIN):$$PATH $(MAKE)
+single: standalone
+ cp vis-single.sh vis-single
+ strip vis
+ tar c vis lua/ | gzip -9 >> vis-single
+
.PHONY: standalone local dependencies-common dependencies-local dependencies-clean
diff --git a/vis-single.sh b/vis-single.sh
new file mode 100755
index 0000000..b6ff69e
--- /dev/null
+++ b/vis-single.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+
+VISTMP="$(mktemp -d -p "${TMPDIR:-/tmp}" .vis-XXXXXX)"
+trap 'rm -rf "$VISTMP"' EXIT INT QUIT TERM HUP
+
+sed '1,/^__TAR_GZ_ARCHIVE_BELOW__$/d' "$0" | gzip -d | tar xC "$VISTMP"
+
+"$VISTMP/vis" "$@"
+
+exit $?
+
+__TAR_GZ_ARCHIVE_BELOW__