|  | @@ -1,353 +0,0 @@
 | 
	
		
			
				|  |  | -#!/bin/bash
 | 
	
		
			
				|  |  | -#
 | 
	
		
			
				|  |  | -# This is a "compiler" for Amber code. Run without arguments for help.
 | 
	
		
			
				|  |  | -#
 | 
	
		
			
				|  |  | -# Get Amber root directory from the location of this script so that
 | 
	
		
			
				|  |  | -# we can find the st and js directories etc.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Earlier we used this but it does not work on Mac
 | 
	
		
			
				|  |  | -# Amber=$(readlink -f `dirname ${0}`/..)
 | 
	
		
			
				|  |  | -TARGET=`dirname ${0}`/..
 | 
	
		
			
				|  |  | -pushd . >/dev/null
 | 
	
		
			
				|  |  | -cd $TARGET
 | 
	
		
			
				|  |  | -AMBER="`\pwd -P`"
 | 
	
		
			
				|  |  | -popd >/dev/null
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -function usage {
 | 
	
		
			
				|  |  | -	cat <<ENDOFHELP
 | 
	
		
			
				|  |  | -Usage: $0 [-l lib1,lib2...] [-i file] [-m class] [-M file]
 | 
	
		
			
				|  |  | -          [-o] [-O|-A] [-d] [-s suffix] [-S suffix] [file1 [file2 ...]] [Program]
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -   Will compile Amber files - either separately or into a runnable complete
 | 
	
		
			
				|  |  | -   program. If no .st files are listed only a linking stage is performed.
 | 
	
		
			
				|  |  | -   Files listed will be handled using these rules:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -   *.js
 | 
	
		
			
				|  |  | -     Files are linked (concatenated) in listed order.
 | 
	
		
			
				|  |  | -     If not found we look in $AMBER/js
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -   *.st
 | 
	
		
			
				|  |  | -     Files are compiled into .js files before concatenated.
 | 
	
		
			
				|  |  | -     If not found we look in $AMBER/st.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -     NOTE: Each file is currently considered to be a fileout of a single class
 | 
	
		
			
				|  |  | -     category of the same name as the file!
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -   If no Program is specified each given .st file will be compiled into
 | 
	
		
			
				|  |  | -   a .js file. Otherwise a <Program>.js file is linked together based on
 | 
	
		
			
				|  |  | -   the options:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  -l library1,library2
 | 
	
		
			
				|  |  | -     Additionally add listed libraries (no spaces or .js) in listed order.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  -i file
 | 
	
		
			
				|  |  | -     Add library initializer <file> instead of default $AMBER/js/init.js 
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  -m class
 | 
	
		
			
				|  |  | -     Add at end a call to #main in class <class>. 
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  -M file
 | 
	
		
			
				|  |  | -     Add at end javascript file <file> acting as main.
 | 
	
		
			
				|  |  | -        
 | 
	
		
			
				|  |  | -  -o
 | 
	
		
			
				|  |  | -     Optimize each js file using the Google closure compiler.
 | 
	
		
			
				|  |  | -     Using Closure compiler found at ~/compiler.jar    
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  -O
 | 
	
		
			
				|  |  | -     Optimize final <Program>.js using the Google closure compiler.
 | 
	
		
			
				|  |  | -     Using Closure compiler found at ~/compiler.jar
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  -A Same as -O but use --compilation_level ADVANCED_OPTIMIZATIONS
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  -d
 | 
	
		
			
				|  |  | -     Additionally export code for deploy - stripped from source etc.
 | 
	
		
			
				|  |  | -     Uses suffix ".deploy.js" in addition to any explicit given suffic using -s.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  -s suffix
 | 
	
		
			
				|  |  | -     Add <suffix> to compiled js files so that File.st is compiled into
 | 
	
		
			
				|  |  | -     File.<suffix>.js.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  -S suffix
 | 
	
		
			
				|  |  | -     Use <suffix> for all libraries accessed using -L or -l. This makes it possible
 | 
	
		
			
				|  |  | -     to have multiple flavors of Amber and libraries in the same place.
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -     Example invocations:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -     Just compile Kernel-Objects.st to Kernel-Objects.js:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        amberc Kernel-Objects.st
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -     Compile Hello.st to Hello.js and create complete program called
 | 
	
		
			
				|  |  | -     Program.js and adding a call to class method #main in class Hello:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        amberc -m Hello Hello.st Program
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -     Compile two .st files into corresponding .js files,
 | 
	
		
			
				|  |  | -     and link with specific myboot.js, myKernel.js, myinit.js
 | 
	
		
			
				|  |  | -     and main.js and create complete program called Program.js:
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        amberc -M main.js myinit.js myboot.js myKernel.js Cat1.st Cat2.st Program
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -ENDOFHELP
 | 
	
		
			
				|  |  | -	exit 1;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Check we at least got one argument
 | 
	
		
			
				|  |  | -if [ -z $1 ] ; then
 | 
	
		
			
				|  |  | -   usage
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Define our predefined library combinations
 | 
	
		
			
				|  |  | -KERNEL="boot Kernel-Objects Kernel-Classes Kernel-Methods Kernel-Collections Kernel-Exceptions Kernel-Transcript Kernel-Announcements"
 | 
	
		
			
				|  |  | -COMPILER="$KERNEL parser Compiler Compiler-Exceptions"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Predefined initializer
 | 
	
		
			
				|  |  | -INITIALIZER="$AMBER/js/init.js"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Default values
 | 
	
		
			
				|  |  | -ENV=
 | 
	
		
			
				|  |  | -INIT=$INITIALIZER
 | 
	
		
			
				|  |  | -MAIN=
 | 
	
		
			
				|  |  | -MAINFILE=
 | 
	
		
			
				|  |  | -BASE=$KERNEL
 | 
	
		
			
				|  |  | -LOAD=
 | 
	
		
			
				|  |  | -CLOSUREOPTS=
 | 
	
		
			
				|  |  | -# Ok, bad coding practice but hey, who would use such a suffix?
 | 
	
		
			
				|  |  | -SUFFIX=no-silly-suffix
 | 
	
		
			
				|  |  | -SUFFIXUSED=
 | 
	
		
			
				|  |  | -DEPLOY=false
 | 
	
		
			
				|  |  | -NODECOMPILE=nodecompile
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Read options and shift them away
 | 
	
		
			
				|  |  | -while getopts "l:i:m:M:oOAds:S:h?" o; do
 | 
	
		
			
				|  |  | -case "$o" in
 | 
	
		
			
				|  |  | -   l) LOAD=$OPTARG;;
 | 
	
		
			
				|  |  | -   i) INIT=$OPTARG;;
 | 
	
		
			
				|  |  | -   m) MAIN=$OPTARG;;
 | 
	
		
			
				|  |  | -   M) MAINFILE=$OPTARG;;
 | 
	
		
			
				|  |  | -   o) CLOSURE=true
 | 
	
		
			
				|  |  | -      CLOSUREPARTS=true;;
 | 
	
		
			
				|  |  | -   O) CLOSURE=true
 | 
	
		
			
				|  |  | -      CLOSUREFULL=true;;
 | 
	
		
			
				|  |  | -   A) CLOSURE=true
 | 
	
		
			
				|  |  | -      CLOSUREOPTS="$CLOSUREOPTS --compilation_level ADVANCED_OPTIMIZATIONS"
 | 
	
		
			
				|  |  | -      CLOSUREFULL=true;;
 | 
	
		
			
				|  |  | -   d) DEPLOY=true;;
 | 
	
		
			
				|  |  | -   s) SUFFIX=$OPTARG
 | 
	
		
			
				|  |  | -      SUFFIXUSED=$SUFFIX;;
 | 
	
		
			
				|  |  | -   S) LOADSUFFIX=$OPTARG
 | 
	
		
			
				|  |  | -      SUFFIXUSED=$SUFFIX;;
 | 
	
		
			
				|  |  | -   h) usage;;
 | 
	
		
			
				|  |  | -   [?])  usage;;
 | 
	
		
			
				|  |  | -   esac
 | 
	
		
			
				|  |  | -done
 | 
	
		
			
				|  |  | -shift $(($OPTIND - 1))
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Check for Closure compiler and Java
 | 
	
		
			
				|  |  | -if [ ! -z $CLOSURE ]; then
 | 
	
		
			
				|  |  | -  java > /dev/null
 | 
	
		
			
				|  |  | -  if [ $? -eq 0 ]; then 
 | 
	
		
			
				|  |  | -    if [ ! -f ~/compiler.jar ]; then
 | 
	
		
			
				|  |  | -      echo "Can not find Closure compiler at ~/compiler.jar"
 | 
	
		
			
				|  |  | -      exit 1
 | 
	
		
			
				|  |  | -    fi
 | 
	
		
			
				|  |  | -  else
 | 
	
		
			
				|  |  | -   echo "java is not installed and is needed for -O, -A or -o (Closure compiler)."
 | 
	
		
			
				|  |  | -   exit 1
 | 
	
		
			
				|  |  | -  fi
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Function for looking up listed js files
 | 
	
		
			
				|  |  | -function resolvejs {
 | 
	
		
			
				|  |  | -  FNAME="$1$LOADSUFFIX.js"
 | 
	
		
			
				|  |  | -  if [ -f $FNAME ]; then
 | 
	
		
			
				|  |  | -    RESOLVED="$FNAME" 
 | 
	
		
			
				|  |  | -  else
 | 
	
		
			
				|  |  | -    if [ -f $AMBER/js/$FNAME ]; then
 | 
	
		
			
				|  |  | -      RESOLVED="$AMBER/js/$FNAME"
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -      echo "Javascript file not found: $FNAME"
 | 
	
		
			
				|  |  | -      exit 1
 | 
	
		
			
				|  |  | -    fi
 | 
	
		
			
				|  |  | -  fi
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Resolve listed libraries in $BASE deparated by spaces
 | 
	
		
			
				|  |  | -for FILE in $BASE
 | 
	
		
			
				|  |  | -do
 | 
	
		
			
				|  |  | -   resolvejs $FILE
 | 
	
		
			
				|  |  | -   TOBASE="$TOBASE $RESOLVED"
 | 
	
		
			
				|  |  | -done
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Resolve listed libraries in $LOAD separated by ,
 | 
	
		
			
				|  |  | -LOAD=${LOAD//,/\ }
 | 
	
		
			
				|  |  | -for FILE in $LOAD
 | 
	
		
			
				|  |  | -do
 | 
	
		
			
				|  |  | -   resolvejs $FILE
 | 
	
		
			
				|  |  | -   TOLOAD="$TOLOAD $RESOLVED"
 | 
	
		
			
				|  |  | -done
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Resolve COMPILER
 | 
	
		
			
				|  |  | -for FILE in $COMPILER
 | 
	
		
			
				|  |  | -do
 | 
	
		
			
				|  |  | -   resolvejs $FILE
 | 
	
		
			
				|  |  | -   TOCOMPILER="$TOCOMPILER $RESOLVED"
 | 
	
		
			
				|  |  | -done
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Add supplied libraries we have not already loaded (they are already resolved)
 | 
	
		
			
				|  |  | -#for FILE in $EXTRA
 | 
	
		
			
				|  |  | -#do
 | 
	
		
			
				|  |  | -#   resolvejs $FILE
 | 
	
		
			
				|  |  | -#   TOEXTRA="$TOEXTRA $RESOLVED"
 | 
	
		
			
				|  |  | -#done
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -TOCOMPILER="$TOCOMPILER$TOLOAD"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Resolve init and nodecompile
 | 
	
		
			
				|  |  | -THEREST="init $AMBER/bin/$NODECOMPILE"
 | 
	
		
			
				|  |  | -for FILE in $THEREST
 | 
	
		
			
				|  |  | -do
 | 
	
		
			
				|  |  | -   resolvejs $FILE
 | 
	
		
			
				|  |  | -   TOCOMPILER="$TOCOMPILER $RESOLVED"
 | 
	
		
			
				|  |  | -done
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Add supplied libraries
 | 
	
		
			
				|  |  | -LIBS="$TOBASE $TOLOAD"
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Get a unique tempdir and make it get auto removed on exit
 | 
	
		
			
				|  |  | -TMPDIR=`mktemp -d amberc.XXXXXX 2>>/dev/null` ||\
 | 
	
		
			
				|  |  | -    TMPDIR=/tmp/amberc.$$.`date +%s` && mkdir -p $TMPDIR
 | 
	
		
			
				|  |  | -trap "rm -rf $TMPDIR" EXIT
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# --------------------------------------------------
 | 
	
		
			
				|  |  | -# Collect libraries and Smalltalk files looking
 | 
	
		
			
				|  |  | -# both locally and in $AMBER/js and $AMBER/st 
 | 
	
		
			
				|  |  | -# --------------------------------------------------
 | 
	
		
			
				|  |  | -PROGRAM=
 | 
	
		
			
				|  |  | -until [ "$*" = "" ]
 | 
	
		
			
				|  |  | -do
 | 
	
		
			
				|  |  | -  case $1 in
 | 
	
		
			
				|  |  | -     *.st)
 | 
	
		
			
				|  |  | -        CATEGORY=`basename $1 .st`
 | 
	
		
			
				|  |  | -        if [ -f "$1" ]; then
 | 
	
		
			
				|  |  | -           COMPILE="$COMPILE $1 $CATEGORY"
 | 
	
		
			
				|  |  | -           COMPILED="$COMPILED $CATEGORY$SUFFIXUSED.js"
 | 
	
		
			
				|  |  | -        else
 | 
	
		
			
				|  |  | -           if [ -f $AMBER/st/$1 ]; then
 | 
	
		
			
				|  |  | -             COMPILE="$COMPILE $AMBER/st/$1 $CATEGORY"
 | 
	
		
			
				|  |  | -             COMPILED="$COMPILED $CATEGORY$SUFFIXUSED.js"
 | 
	
		
			
				|  |  | -           else
 | 
	
		
			
				|  |  | -             echo "Amber file not found: $1"
 | 
	
		
			
				|  |  | -             exit 1
 | 
	
		
			
				|  |  | -           fi
 | 
	
		
			
				|  |  | -        fi
 | 
	
		
			
				|  |  | -        ;;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -     *.js)
 | 
	
		
			
				|  |  | -        resolvejs $1
 | 
	
		
			
				|  |  | -	LIBS="$LIBS $RESOLVED" 
 | 
	
		
			
				|  |  | -        ;;
 | 
	
		
			
				|  |  | -      *)
 | 
	
		
			
				|  |  | -        # Will end up being the last non js/st argument
 | 
	
		
			
				|  |  | -        PROGRAM=$1
 | 
	
		
			
				|  |  | -        ;;
 | 
	
		
			
				|  |  | -  esac
 | 
	
		
			
				|  |  | -  shift
 | 
	
		
			
				|  |  | -done
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# --------------------------------------------------
 | 
	
		
			
				|  |  | -# Actual compilation phase of collected .st files
 | 
	
		
			
				|  |  | -# --------------------------------------------------
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Create compiler dynamically
 | 
	
		
			
				|  |  | -cat $TOCOMPILER > $TMPDIR/compiler.js
 | 
	
		
			
				|  |  | - 
 | 
	
		
			
				|  |  | -# Compile all collected .st files to .js
 | 
	
		
			
				|  |  | -echo "Loading libraries$TOCOMPILER and compiling ..."
 | 
	
		
			
				|  |  | -node $TMPDIR/compiler.js $DEPLOY $SUFFIX $COMPILE
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Verify all .js files corresponding to .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
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -if [ ! -z $CLOSUREPARTS ]; then
 | 
	
		
			
				|  |  | -  echo "Compiling all js files using Google closure compiler."
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  ALLJSFILES="$COMPILED $LIBS"
 | 
	
		
			
				|  |  | -  for FILE in $ALLJSFILES
 | 
	
		
			
				|  |  | -  do
 | 
	
		
			
				|  |  | -    mv $FILE $FILE.original
 | 
	
		
			
				|  |  | -    java -jar ~/compiler.jar $CLOSUREOPTS --js $FILE.original --js_output_file $FILE
 | 
	
		
			
				|  |  | -    rm $FILE.original
 | 
	
		
			
				|  |  | -  done
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -if [ -z $PROGRAM ]; then
 | 
	
		
			
				|  |  | -  echo "Done."
 | 
	
		
			
				|  |  | -  exit 0
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# --------------------------------------------------
 | 
	
		
			
				|  |  | -# Now we start composing resulting javascript file.
 | 
	
		
			
				|  |  | -# --------------------------------------------------
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Add collected libraries to libs.js file.
 | 
	
		
			
				|  |  | -if [ ! -z "$LIBS" ]; then
 | 
	
		
			
				|  |  | -  echo "Adding libraries $LIBS ..."
 | 
	
		
			
				|  |  | -  cat $LIBS > $TMPDIR/libs.js
 | 
	
		
			
				|  |  | -  LIBS=$TMPDIR/libs.js
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -echo "Adding Amber code$COMPILED ..."
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Check for init file
 | 
	
		
			
				|  |  | -if [ ! -z "$INIT" ]; then
 | 
	
		
			
				|  |  | -   if [ -f "$INIT" ]; then
 | 
	
		
			
				|  |  | -      echo "Adding initializer $INIT ..."
 | 
	
		
			
				|  |  | -   else
 | 
	
		
			
				|  |  | -      echo "Can not find init file $INIT, exiting."
 | 
	
		
			
				|  |  | -      exit 1
 | 
	
		
			
				|  |  | -   fi 
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Check for adding main
 | 
	
		
			
				|  |  | -if [ ! -z "$MAIN" ]; then
 | 
	
		
			
				|  |  | -  echo "Adding call to $MAIN class >> main ..."
 | 
	
		
			
				|  |  | -  echo "smalltalk.$MAIN._main()" > $TMPDIR/main.js
 | 
	
		
			
				|  |  | -  MAIN=$TMPDIR/main.js
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# Check for adding main file
 | 
	
		
			
				|  |  | -if [ ! -z "$MAINFILE" ]; then
 | 
	
		
			
				|  |  | -   if [ -f "$MAINFILE" ]; then
 | 
	
		
			
				|  |  | -      echo "Adding main as $MAINFILE ..."
 | 
	
		
			
				|  |  | -   else
 | 
	
		
			
				|  |  | -      echo "Can not find main file $MAINFILE, exiting."
 | 
	
		
			
				|  |  | -      exit 1
 | 
	
		
			
				|  |  | -   fi 
 | 
	
		
			
				|  |  | -   MAIN=$MAINFILE
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -# And finally concatenate Program.js
 | 
	
		
			
				|  |  | -echo "Writing $PROGRAM.js ..."
 | 
	
		
			
				|  |  | -cat $LIBS $COMPILED $INIT $MAIN > $PROGRAM.js
 | 
	
		
			
				|  |  | -echo "Done."
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -if [ ! -z $CLOSUREFULL ]; then
 | 
	
		
			
				|  |  | -  echo "Compiling $PROGRAM.js file using Google closure compiler."
 | 
	
		
			
				|  |  | -  mv $PROGRAM.js $PROGRAM.js.original
 | 
	
		
			
				|  |  | -  java -jar ~/compiler.jar $CLOSUREOPTS --js $PROGRAM.js.original --js_output_file $PROGRAM.js
 | 
	
		
			
				|  |  | -  rm $PROGRAM.js.original
 | 
	
		
			
				|  |  | -  echo "Done."
 | 
	
		
			
				|  |  | -fi
 | 
	
		
			
				|  |  | -
 |