File: make-executable-zip.sh

package info (click to toggle)
px 3.6.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,172 kB
  • sloc: python: 6,445; sh: 205; makefile: 4
file content (44 lines) | stat: -rwxr-xr-x 851 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env bash

set -eu -o pipefail

MYDIR="$(
    cd "$(dirname "$0")"
    pwd
)"
ROOTDIR="$MYDIR/.."
ZIPFILE="$ROOTDIR/px.pex"
export ZIPOPT="-9 -q"

ENVDIR="$(mktemp -d)"
rmdir "$ENVDIR"

WORKDIR="$(mktemp -d)"
trap 'rm -rf "$ENVDIR" "$WORKDIR" "$ZIPFILE.tmp"' EXIT

# Create a virtualenv in a temporary location
python3 -m venv "$ENVDIR"

# shellcheck source=/dev/null
. "$ENVDIR/bin/activate"

# Set up file structure in our temporary directory
echo 'import px.px; px.px.main()' >"$WORKDIR/__main__.py"

# The main attraction!
cp -a "$ROOTDIR/px" "$WORKDIR/"

# Tidy up a bit
find "$WORKDIR" -name '*.pyc' -delete

# Create zip file
cd "$WORKDIR"
zip -r "$ZIPFILE.tmp" ./*

# Add Python shebang, from: https://stackoverflow.com/a/10587688/473672
(
    echo '#!/usr/bin/env python3'
    cat "$ZIPFILE.tmp"
) >"$ZIPFILE"

chmod a+x "$ZIPFILE"