OILS / devtools / xshar.sh View on Github | oilshell.org

92 lines, 30 significant
1#!/usr/bin/env bash
2#
3# xshar - Executable shell archive
4#
5# Usage:
6# devtools/xshar.sh <function name>
7#
8# devtools/
9# xshar.sh # this file
10# test-oils.sh # can run benchmarks
11#
12# Results in:
13#
14# _release/test-oils.xshar
15#
16# Runtime deps:
17#
18# /bin/sh
19# tar, gzip -d
20# base64
21
22set -o nounset
23set -o pipefail
24set -o errexit
25
26source devtools/run-task.sh # run-task
27
28print-shell() {
29 local tar=$1
30 local main=$2
31
32 cat <<'EOF'
33#!/bin/sh
34
35change_dir() {
36 local name
37 name=$(basename $0) # e.g. hello-xshar.xshar
38
39 local dir=/tmp/$name.$$
40 mkdir -p "$dir"
41 cd "$dir"
42}
43
44extract_data() {
45 base64 -d >tmp.tar.gz <<'XSHAR_DATA'
46EOF
47
48 # Print code that extracts here doc
49 base64 < $tar
50
51 cat <<EOF
52XSHAR_DATA
53
54 tar -x -z < tmp.tar.gz
55}
56
57change_dir
58extract_data
59EOF
60 echo "$main" '"$@"'
61
62 # We don't bother to clean up after, it's in /tmp
63}
64
65create() {
66 local main=${1:-devtools/test-oils.sh}
67 # Include the main file
68 #shift
69
70 local name
71 name=$(basename $main .sh)
72
73 local tar=_tmp/$name.tar.gz
74
75 tar --create --gzip --file $tar "$main" "$@"
76 ls -l $tar
77
78 local out=_release/$name.xshar
79
80 print-shell $tar $main > $out
81 chmod +x $out
82 ls -l $out
83}
84
85demo() {
86 find yaks/ -name '*.py' | xargs -- $0 create devtools/hello-xshar.sh
87 ls -l _release
88
89 _release/hello-xshar.xshar main a b c
90}
91
92run-task "$@"