4589701 [rkeene@sledge /home/rkeene/tmp]$ cat -n starkit2exe.sh
  1 #! /bin/bash
  2 
  3 # Setup paths
  4 WORKDIR="${TMPDIR:-/tmp}/starkit2exe-$$${RANDOM}${RANDOM}${RANDOM}${RANDOM}"
  5 STARTDIR="$(readlink -f "$(pwd)")"
  6 
  7 # Process script arguments and expand to fully qualified names where appropriate
  8 OURSCP="$(readlink -f "$0" 2>/dev/null)"
  9 OURSCPDIR="$(dirname "${OURSCP}" 2>/dev/null)"
 10 FINDTCLKITSCP="${OURSCPDIR}/support/find-tclkit"
 11 TCLKIT=$("${FINDTCLKITSCP}")
 12 SDXPATH="${OURSCPDIR}/support/sdx-1nrl.kit"
 13 
 14 NOTK=0
 15 if [ "$1" = "--notk" ]; then
 16     shift
 17     NOTK=1
 18 fi
 19 
 20 SRCSTARKIT="$(readlink -f "$1" 2>/dev/null)"
 21 OUTPUT="$2"
 22 DESTTCLKIT="$3"
 23 if [ -z "${TCLKIT}" ]; then
 24     echo 'Unable to locate a suitable Tclkit' >&2
 25     exit 1
 26 fi
 27 if [ -f "${SRCSTARKIT}" -o -d "${SRCSTARKIT}" ]; then
 28     true
 29 else
 30     echo 'SRCSTARKIT is not a regular file or directory' >&2
 31     SRCSTARKIT=""
 32 fi
 33 if [ -z "${SRCSTARKIT}" -o -z "${OUTPUT}" ]; then
 34     echo 'Usage: starkit2exe [--notk] <srckit> <output> [<dest_tclkit>]' >&2
 35 
 36     exit 1
 37 fi
 38 
 39 if [ -n "${DESTTCLKIT}" ]; then
 40     if [ ! -f "${DESTTCLKIT}" ]; then
 41         if [ "${NOTK}" = "1" ]; then
 42             DESTTCLKIT=$("${FINDTCLKITSCP}" --notk "${DESTTCLKIT}")
 43         else
 44             DESTTCLKIT=$("${FINDTCLKITSCP}" "${DESTTCLKIT}")
 45         fi
 46         if [ -z "${DESTTCLKIT}" ]; then
 47             echo "Unable to find Tclkit matching requested pattern" >&2
 48             exit 1
 49         fi
 50     fi
 51     DESTTCLKIT="$(readlink -f "${DESTTCLKIT}")"
 52 fi
 53 
 54 if [ -z "${DESTTCLKIT}" ]; then
 55     echo "Using Tclkit: $(basename "${TCLKIT}" 2>/dev/null)"
 56 else
 57     echo "Using Tclkit: $(basename "${TCLKIT}" 2>/dev/null), generating with $(basename "${DESTTCLKIT}" 2>/dev/null)"
 58 fi
 59 
 60 # Abort on failure of any command
 61 set -e
 62 
 63 # Create working area
 64 mkdir -p "${WORKDIR}"
 65 chmod 700 "${WORKDIR}"
 66 cd "${WORKDIR}"
 67 
 68 # Extract starkit and rename to make things easier
 69 if [ -d "${SRCSTARKIT}" ]; then
 70     cp -r "${SRCSTARKIT}" output.vfs
 71 else
 72     "${TCLKIT}" "${SDXPATH}" unwrap "${SRCSTARKIT}"
 73     mv *.vfs output.vfs
 74 fi
 75 
 76 # Create temporary Tclkit if needed
 77 if [ -n "${DESTTCLKIT}" ]; then
 78     if [ "$(readlink -f "${TCLKIT}")" = "$(readlink -f "${DESTTCLKIT}")" ]; then
 79         DESTTCLKIT=""
 80     fi
 81 fi
 82 if [ -z "${DESTTCLKIT}" ]; then
 83     DESTTCLKIT="${WORKDIR}/copykit"
 84     cp "${TCLKIT}" "${DESTTCLKIT}"
 85 fi
 86 
 87 # Determine platform of destination starpack
 88 DESTPLATFORM_FILE=$(file "${DESTTCLKIT}" | sed 's@^[^:]*: *@@')
 89 DESTOS="Unknown"
 90 case "${DESTPLATFORM_FILE}" in
 91     Mach-O\ *|compiled\ Java\ class\ data,\ version\ 2.0)
 92         DESTOS="MacOS"
 93         ;;
 94     ELF\ 32-bit\ *\ version\ 1\ \(SYSV\),\ *)
 95         DESTOS="Linux"
 96         ;;
 97     ELF\ 32-bit\ *\ version\ 1\ \(FreeBSD\),\ *)
 98         DESTOS="FreeBSD"
 99         ;;
100     MS-DOS\ executable\ *|PE32+\ executable\ *)
101         DESTOS="Windows"
102         ;;
103 esac
104 
105 # Create starpack
106 if unzip -l "${DESTTCLKIT}" 2>&1 | grep 'boot\.tcl' >/dev/null; then
107     cp "${DESTTCLKIT}" output.zip
108 
109     (
110         cd output.vfs
111         unzip ../output.zip >/dev/null 2>/dev/null
112     ) || true
113 
114     strip output.zip
115 
116     (
117         cd output.vfs
118         zip -r ../vfs.zip * >/dev/null 2>/dev/null
119     )
120 
121     cat output.zip vfs.zip > output
122     chmod +x output
123 else
124     "${TCLKIT}" "${SDXPATH}" wrap output -runtime "${DESTTCLKIT}"
125 fi
126 
127 # Enable platform-specific fix-ups (post-wrap)
128 case "${DESTOS}" in
129     MacOS)
130         if [ "${NOTK}" = "0" ]; then
131             APPNAME=$(basename "${OUTPUT}" .zip)
132             mkdir -p "${APPNAME}.app/Contents/MacOS"
133             mv output "${APPNAME}.app/Contents/MacOS/${APPNAME}"
134             zip -r output.zip "${APPNAME}.app"
135             mv output.zip output
136         fi
137         ;;
138 esac
139 
140 # Copy starpack to output
141 STARPACKFILE="$(readlink -f output 2>/dev/null)"
142 if [ -z "${STARPACKFILE}" ]; then
143     echo 'Failed to create starpack, leaving temporary directory intact for inspection.' >&2
144     exit 1
145 fi
146 cd "${STARTDIR}"
147 cp -r "${STARPACKFILE}" "${OUTPUT}"
148 
149 # Cleanup
150 rm -rf "${WORKDIR}"
4589702 [rkeene@sledge /home/rkeene/tmp]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2010-09-13 19:26:57