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

100 lines, 55 significant
1#!/usr/bin/env bash
2#
3# Manage the bin/ directory.
4#
5# Usage:
6# devtools/bin.sh <function name>
7
8set -o nounset
9set -o pipefail
10set -o errexit
11
12# New name is ysh!
13# TODO:
14# - remove the 'oil' everywhere
15# - translation should be 'ysh-translate'. Later 'ysh-format'
16readonly OIL_OVM_NAMES=(oil ysh osh sh true false readlink)
17
18# TODO: probably delete this
19# For osh-dbg.
20ovm-snippet() {
21 local name=$1
22 echo '#!/bin/sh'
23 echo 'exec _bin/oil.ovm-dbg '$name' "$@"'
24}
25
26# For running spec tests quickly.
27make-osh-dbg() {
28 local out=_bin/osh-dbg
29 ovm-snippet osh > $out
30 chmod +x $out
31}
32
33sh-prefix() {
34 cat << 'EOF'
35#!/bin/sh
36REPO_ROOT=$(cd "$(dirname $0)/.."; pwd)
37EOF
38}
39
40make-oils-for-unix() {
41 local out=bin/oils-for-unix
42 { sh-prefix
43 echo 'PYTHONPATH=$REPO_ROOT:$REPO_ROOT/vendor exec $REPO_ROOT/bin/oils_for_unix.py "$@"'
44 } > $out
45 chmod +x $out
46 echo "Wrote $out"
47}
48
49#
50# Shell Stubs
51#
52
53sh-snippet() {
54 local wrapped=$1 # e.g. oil.py
55 local action=$2 # e.g. osh
56
57 sh-prefix
58 echo 'PYTHONPATH=$REPO_ROOT:$REPO_ROOT/vendor exec $REPO_ROOT/bin/'$wrapped' '$action' "$@"'
59}
60
61# A snippet that sets PYTHONPATH for bin/oil.py and runs it with the right
62# action.
63oil-dev-snippet() {
64 local action=$1
65 sh-snippet oils_for_unix.py $action
66}
67
68opy-dev-snippet() {
69 local action=$1
70 sh-snippet opy_.py $action
71}
72
73make-src-stubs() {
74 ### bin/ is for running with the Python interpreter.
75 mkdir -p bin
76
77 for link in "${OIL_OVM_NAMES[@]}"; do
78 # bin/ shell wrapper
79 oil-dev-snippet $link > bin/$link
80 chmod +x bin/$link
81 echo "Wrote bin/$link"
82 done
83
84 make-osh-dbg
85
86 make-oils-for-unix
87}
88
89make-ovm-links() {
90 ### _bin/ is for running with OVM app bundles.
91
92 mkdir -p _bin
93
94 for link in "${OIL_OVM_NAMES[@]}"; do
95 # _bin/ symlink
96 ln -s -f --verbose oil.ovm _bin/$link
97 done
98}
99
100"$@"