| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | 
							- #!/bin/bash
 
- #
 
- # This is a trivial "compiler" for JTalk code. Run without arguments for help.
 
- # Get JTalk root directory from the location of this script.
 
- JTALK=`dirname ${0}`/..
 
- USAGE="Usage: $0 [-r] file1 file2 ... file3 Program
 
-    Will compile a JTalk program into a single javascript file called
 
-    <Program>.js by concatenating listed files using these rules:
 
-      *.js files are concatenated as is. If not found we look in $JTALK/js
 
-      *.st files are compiled into .js files. If not found we look in $JTALK/st.
 
-      Each file is currently considered to be a fileout of a single class
 
-      category of the same name as the file.
 
-      NOTE: boot.js and Kernel.js is always added first and init.js
 
-      is always added last. Finally main.js is added if found.
 
-      If -r is used we also run node with the resulting Program.js.
 
-      Example invocations:
 
-      Compile Hello.st to Hello.js and create
 
-      complete program called Program.js:
 
-         ntalkc Hello.st Program
 
-      Compile two different class categories into corresponding .js files,
 
-      link with two existing javascript libraries and create complete
 
-      program called Program.js:
 
-         ntalkc lib1.js lib2.js CategoryOne.st CategoryTwo.st Program
 
- "
 
- if [ "$#" == "0" ]; then
 
- 	echo "$USAGE"
 
- 	exit 1
 
- fi
 
- if [ $1 == "-r" ]; then
 
-   RUN=true
 
-   shift
 
- fi
 
- # Get a unique tempdir and make sure it gets nuked later
 
- TMPDIR=`mktemp -d`
 
- trap "rm -rf $TMPDIR" EXIT
 
- # Collect libraries and Smalltalk files
 
- until [ "$*" = "" ]
 
- do
 
-   case $1 in
 
-      *.st)
 
-         CATEGORY=`basename $1 .st`
 
-         if [ -f "$1" ]; then
 
-            COMPILE="$COMPILE $1 $CATEGORY"
 
-            COMPILED="$COMPILED $CATEGORY.js"
 
-         else
 
-            if [ -f $JTALK/st/$1 ]; then
 
-              COMPILE="$COMPILE $JTALK/st/$1 $CATEGORY"
 
-              COMPILED="$COMPILED $CATEGORY.js"
 
-            else
 
-              echo "JTalk file not found: $1"
 
-            fi
 
-         fi
 
-         shift
 
-         ;;
 
-      *.js)
 
-         if [ -f "$1" ]; then
 
-            LIBS="$LIBS $1" 
 
-         else
 
-            if [ -f $JTALK/js/$1 ]; then
 
-              LIBS="$LIBS $JTALK/js/$1"
 
-            else
 
-              echo "Javascript file not found: $1"
 
-            fi
 
-         fi
 
-         ;;
 
-   esac
 
-   # Will end up being the last argument
 
-   PROGRAM=$1
 
-   shift
 
- done
 
- # Create compiler dynamically
 
- cat $JTALK/js/boot.js $JTALK/js/Kernel.js $JTALK/js/Parser.js $JTALK/js/Compiler.js $JTALK/js/init.js $JTALK/nodejs/nodecompile.js > $TMPDIR/compiler-all.js
 
- # Compile all collected .st files to .js
 
- echo "Compiling$COMPILED ..."
 
- node $TMPDIR/compiler-all.js $COMPILE
 
- # Verify all .js files corresponding .st files were created, otherwise exit
 
- IFS=" "
 
- for FILE in $COMPILED
 
- do
 
-   if [ ! -f "$FILE" ]; then
 
-     echo "Failed compilation of $FILE, exiting."
 
-     exit 1
 
-   fi 
 
- done
 
- # We must have these first...
 
- echo "Adding boot.js and Kernel.js ..."
 
- BOOT="$JTALK/js/boot.js $JTALK/js/Kernel.js"
 
- # Compose the complete libs.js file from collected .js filenames.
 
- if [ -n "$LIBS" ]; then
 
-   echo "Adding libraries $LIBS ..."
 
-   cat $LIBS > $TMPDIR/libs.js
 
-   LIBS=$TMPDIR/libs.js
 
- fi
 
- # Check for init.js
 
- if [ -f "init.js" ]; then
 
-   echo "Adding init.js ..."
 
-   INIT="init.js"
 
- else
 
-   echo "Adding $JTALK/js/init.js ..."
 
-   INIT=$JTALK/js/init.js
 
- fi
 
- # Check for main.js
 
- if [ -f "main.js" ]; then
 
-   echo "Adding main.js ..."
 
-   MAIN="main.js"
 
- fi
 
- # And finally concatenate Program.js
 
- echo "Writing $PROGRAM.js ..."
 
- cat $BOOT $LIBS $COMPILED $INIT $MAIN > $PROGRAM.js
 
- echo "Done."
 
- # Optionally run Program and give all args left to it
 
- if [ -n "$RUN" ]; then
 
-   echo "Running program"
 
-   echo "---------------"
 
-   node $PROGRAM.js $@
 
- fi
 
 
  |