#!/bin/sh ######################################################################### # # FILE : javacompile # DATE : 2.8.1999 # LAST CHANGE : 31.10.2001 # AUTHOR : Patrick Meier / patrick.meier@gmx.net # DESCRIPTION : compile a java application which is defined in the # project.properties file. # # Copyrigth (C) 2001 by Patrick Meier, Switzerland # ######################################################################### PN=`basename "$0"` STARSTRING="==>" ######################################################################### # defines all commands ######################################################################### ECHO="echo" AWK="awk" SED="sed" FIND="find" GREP="grep" CD="cd" RM="rm" RMDIR="rm -rf" MKDIR="mkdir" MV="mv" JAR="jar" JAVAC="javac" JAVA="java" if [ -z "`echo $OSTYPE | sed 's/cygwin.*//'`" ] then CLASSSEP=";" else CLASSSEP=":" fi ######################################################################### # getValue: read a key/value from a file ######################################################################### getValue() { value="`cat $1 | $AWK -F"=" '{if("'$2'"==$1) {print $2}}'`" if( eval echo $value 2>/dev/null ) then : else echo "${STARSTRING}ERROR: file $1 not found!!!" exit fi } ######################################################################### # doCommand ######################################################################### doCommand() { echo $@ $@ > $LOGNAME 2>&1 if [ -z "`cat $LOGNAME`" ] then $RM $LOGNAME else $ECHO "" $ECHO "==============================================================================" $ECHO "${STARSTRING}failure(s):" $ECHO "==============================================================================" $VIEW_COMMAND $LOGNAME exit 1 fi } ######################################################################### # readConfiguration: get settings ######################################################################### readConfiguration() { CONFIGURATION="$1" VIEW_COMMAND="`getValue $CONFIGURATION VIEW_COMMAND`" APPLICATIONNAME="`getValue $CONFIGURATION APPLICATIONNAME`" SOURCEHOME="`getValue $CONFIGURATION SRC_HOME | $SED "s/;/ /g;s/:/ /g" `" CLASSESPATH="`getValue $CONFIGURATION CLASSESPATH`" JAVAC="`getValue $CONFIGURATION JAVAC`" JAVA="`getValue $CONFIGURATION JAVA`" LIBHOME="`getValue $CONFIGURATION LIB_HOME | $SED "s/;/ /g;s/:/ /g" `" JARSRC="`getValue $CONFIGURATION JAR_SRC`" JARPRECOMMAND="`getValue $CONFIGURATION JAR_PRECOMMAND`" JARFILENAME="`getValue $CONFIGURATION JAR_FILENAME`" JARPOSTCOMMAND="`getValue $CONFIGURATION JAR_POSTCOMMAND`" COMPILE_PARAMETER="`getValue $CONFIGURATION COMPILE_PARAMETER`" COMPILE_PARAMETER="$COMPILE_PARAMETER -d $CLASSESPATH" #echo $APPLICATIONNAME #echo $SOURCEHOME #echo $CLASSESPATH #echo $LIBHOME #echo $JARFILENAME #echo $COMPILE_PARAMETER #echo $VIEW_COMMAND #exit if [ -z "$JAVAC" ] then JAVAC="javac" fi if [ -z "$JAVA" ] then JAVA="java" fi if [ -z "$JARSRC" ] then JARSRC="$CLASSESPATH" fi if [ -d "$CLASSESPATH" ] then : else echo "${STARSTRING}create path $CLASSESPATH..." createDir $CLASSESPATH fi if [ -z "$VIEW_COMMAND" ] then if( eval "more" 2>/dev/null ) then VIEW_COMMAND="more" else VIEW_COMMAND="less" fi fi if [ -z "$APPLICATIONNAME" ] then APPLICATIONNAME="noname" fi LOGNAME="${APPLICATIONNAME##*.}.err" # read all source files for i in $SOURCEHOME do JAVAFILES="$JAVAFILES `$FIND "$i" -name "*.java" -print | $GREP -v CVS`" done # read all libraries for i in $LIBHOME do LIBPATH="$LIBPATH `$FIND "$i" -name "*.jar" -print | $GREP -v CVS`" LIBPATH="$LIBPATH `$FIND "$i" -name "*.zip" -print | $GREP -v CVS`" done export JAVAFILES CLASSESPATH LIBPATH LOGNAME } ######################################################################### # setClasspath ######################################################################### setClasspath() { CLASSPATH="${CLASSPATH}${CLASSSEP}${LIBPATH}${CLASSSEP}${CLASSESPATH}" export CLASSPATH $ECHO "${STARSTRING}setting the classpath to:$CLASSPATH" } ######################################################################### # clean up the system ######################################################################### cleanup() { $ECHO "${STARSTRING}cleaning up..." if [ "$1" = "all" ] then deleteClassFiles fi if [ -n "$CLASSESPATH" ] && [ -d "$CLASSESPATH" ] then $RMDIR $CLASSESPATH >/dev/null 2>&1 fi } ######################################################################### # delete all class files ######################################################################### deleteClassFiles() { # read all source files for i in $SOURCEHOME do CLASSFILES="$CLASSFILES `$FIND $i -name "*.class" -print | $GREP -v CVS`" done if [ -n "$CLASSFILES" ] then $RMDIR $CLASSFILES >/dev/null 2>&1 fi } ######################################################################### # create dir ######################################################################### createDir() { if [ ! -d "$1" ] then cwp="`pwd`" echo "$1" | awk -F"/" '{ num=split( $0, separatedText, "/" ); p=""; for( i=1; i<=num; i++ ) { if( separatedText[i]=="" ) { if( i==1 ) p="/"; } else { if( p=="" ) p=separatedText[i]; else if( p=="/" ) p=p separatedText[i]; else p=p"/"separatedText[i]; system( "if [ -d \""p"\" ]; then :; else mkdir "p";fi" ); } } }' cd "$cwp" fi } ######################################################################### # create jar ######################################################################### createJar() { FILENAME="$@" $ECHO "${STARSTRING}creating jar file $FILENAME...." #echo "$JAR cv0f $FILENAME -C $JARSRC . " $JAR cv0f $FILENAME -C $JARSRC . >/dev/null 2>&1 } ######################################################################### # Usage ######################################################################### Usage() { $ECHO "$PN - compile a java application which is defined in the project.properties file." $ECHO "usage: $PN " $ECHO "Possible options:" $ECHO "==>normal javac options:" $ECHO " -g Generate all debugging info" $ECHO " -g:none Generate no debugging info" $ECHO " -g:{lines,vars,source} Generate only some debugging info" $ECHO " -O Optimize; may hinder debugging or enlarge class file" $ECHO " -nowarn Generate no warnings" $ECHO " -verbose Output messages about what the compiler is doing" $ECHO " -deprecation Output source locations where deprecated APIs are used" $ECHO " -classpath Specify where to find user class files" $ECHO " -sourcepath Specify where to find input source files" $ECHO " -bootclasspath Override location of bootstrap class files" $ECHO " -extdirs Override location of installed extensions" $ECHO " -d Specify where to place generated class files" $ECHO " -encoding Specify character encoding used by source files" $ECHO " -target Generate class files for specific VM version" $ECHO "" $ECHO "==>special options:" $ECHO " --help This page" $ECHO " --p Defines another name for the project filename" $ECHO " --create Creates a new project file" $ECHO " --javac Defines another command to compiling files" $ECHO " --jar Defines another command to build a jar file" $ECHO " --clean Delete all class files in the output directory" $ECHO " -create-jar Create a jar file" } ######################################################################### # main ######################################################################### PROJECTCONFIGURATION="project.properties" LOGNAME="javacompile.err" JARFILENAME="" # test configuration file if [ -f "$PROJECTCONFIGURATION" ] then $ECHO "${STARSTRING}read project file $PROJECTCONFIGURATION...." readConfiguration $PROJECTCONFIGURATION USEPROJECTCONFIGURATION="YES" else USEPROJECTCONFIGURATION="NO" fi # read parameters while [ $# -gt 0 ] do PARAM=$1 shift case "$PARAM" in -?) Usage; exit;; -help) Usage; exit;; --help) Usage; exit;; --clean) if [ $# -gt 0 ] then cleanup $1 shift exit else cleanup all exit fi;; --p) if [ $# -gt 0 ] then if [ -f "$1" ] then PROJECTCONFIGURATION="$1" $ECHO "${STARSTRING}read project file $PROJECTCONFIGURATION...." readConfiguration "$PROJECTCONFIGURATION" USEPROJECTCONFIGURATION="YES" shift fi fi;; --create) if [ $# -gt 0 ] then PROJECTCONFIGURATION="$1" USEPROJECTCONFIGURATION="YES" shift fi $ECHO "${STARSTRING}write a project file $PROJECTCONFIGURATION...." if [ -f $PROJECTCONFIGURATION ] then $MV $PROJECTCONFIGURATION $PROJECTCONFIGURATION.old fi $ECHO "#############################################################################" > $PROJECTCONFIGURATION $ECHO "# compile settings" >> $PROJECTCONFIGURATION $ECHO "#############################################################################" >> $PROJECTCONFIGURATION $ECHO "" >> $PROJECTCONFIGURATION $ECHO "# specify the application name" >> $PROJECTCONFIGURATION $ECHO "APPLICATIONNAME=" >> $PROJECTCONFIGURATION $ECHO "" >> $PROJECTCONFIGURATION $ECHO "# defines the path to the source-code" >> $PROJECTCONFIGURATION $ECHO "SRC_HOME=." >> $PROJECTCONFIGURATION $ECHO "" >> $PROJECTCONFIGURATION $ECHO "# defines the path to additional libraries" >> $PROJECTCONFIGURATION $ECHO "LIB_HOME=" >> $PROJECTCONFIGURATION $ECHO "" >> $PROJECTCONFIGURATION $ECHO "# defines the output path for class-files" >> $PROJECTCONFIGURATION $ECHO "CLASSESPATH=classes" >> $PROJECTCONFIGURATION $ECHO "" >> $PROJECTCONFIGURATION $ECHO "# defines the name of the jar file of all class-files (leave it empty to not create the jar file)" >> $PROJECTCONFIGURATION $ECHO "JAR_FILENAME=" >> $PROJECTCONFIGURATION $ECHO "WAR_FILENAME=" >> $PROJECTCONFIGURATION $ECHO "" >> $PROJECTCONFIGURATION $ECHO "# special parameters: javac ..." >> $PROJECTCONFIGURATION $ECHO "COMPILER_PARAMETER=" >> $PROJECTCONFIGURATION $ECHO "" >> $PROJECTCONFIGURATION $ECHO "# special parameters: java ... " >> $PROJECTCONFIGURATION $ECHO "RUN_PREPARAMETER=" >> $PROJECTCONFIGURATION $ECHO "RUN_PARAMETER=" >> $PROJECTCONFIGURATION $ECHO "" >> $PROJECTCONFIGURATION $ECHO "# command which you will use to view compile errors" >> $PROJECTCONFIGURATION $ECHO "VIEW_COMMAND=" >> $PROJECTCONFIGURATION $ECHO "#############################################################################" >> $PROJECTCONFIGURATION exit;; --javac) if [ $# -gt 0 ] then JAVAC="$1" shift fi;; --jar) if [ $# -gt 0 ] then JAR="$1" shift fi;; -create-jar) if [ $# -gt 0 ] then JARFILENAME="$1" shift fi;; # javac - options -g) COMPILE_PARAMETER="$COMPILE_PARAMETER -g";; -g:none) COMPILE_PARAMETER="$COMPILE_PARAMETER -g:none";; -g:lines) COMPILE_PARAMETER="$COMPILE_PARAMETER -g:lines";; -g:vars) COMPILE_PARAMETER="$COMPILE_PARAMETER -g:vars";; -g:source) COMPILE_PARAMETER="$COMPILE_PARAMETER -g:source";; -0) COMPILE_PARAMETER="$COMPILE_PARAMETER -0";; -nowarn) COMPILE_PARAMETER="$COMPILE_PARAMETER -nowarn";; -verbose) COMPILE_PARAMETER="$COMPILE_PARAMETER -verbose";; -deprecation) COMPILE_PARAMETER="$COMPILE_PARAMETER -deprecation";; -classpath) if [ $# -gt 0 ] then LIBPATH="$LIBPATH $1" shift fi;; -sourcepath) if [ $# -gt 0 ] then JAVAFILES="$JAVAFILES $1" shift fi;; -bootclasspath) if [ $# -gt 0 ] then COMPILE_PARAMETER="$COMPILE_PARAMETER -bootclasspath $1" shift fi;; -extdirs) if [ $# -gt 0 ] then COMPILE_PARAMETER="$COMPILE_PARAMETER -extdirs $1" shift fi;; -d) if [ $# -gt 0 ] then COMPILE_PARAMETER="$COMPILE_PARAMETER -d $1" CLASSESPATH="$CLASSESPATH $1" shift fi;; -encoding) if [ $# -gt 0 ] then COMPILE_PARAMETER="$COMPILE_PARAMETER -encoding $1" shift fi;; -target) if [ $# -gt 0 ] then COMPILE_PARAMETER="$COMPILE_PARAMETER -target $1" shift fi;; *) JAVAFILES="$JAVAFILES $PARAM"; break;; esac done LIBPATH="`$ECHO $LIBPATH | sed \"s/ /$CLASSSEP/g\"`" # compile if [ "$USEPROJECTCONFIGURATION" = "YES" ] then if [ -n "$JAVAFILES" ] then setClasspath createDir $CLASSESPATH # compile $ECHO "${STARSTRING}compiling all classes..." #$ECHO "javac : $JAVAC" #$ECHO "parameter: $COMPILE_PARAMETER" #$ECHO "files : $JAVAFILES" #$ECHO "log : $LOGNAME" doCommand $JAVAC $COMPILE_PARAMETER $JAVAFILES else echo "${STARSTRING}no source files found to compile!" fi else echo "${STARSTRING}nothing to do!" fi # build jar if [ -n "$JARFILENAME" ] then if [ -n "$JARPRECOMMAND" ] then echo "${STARSTRING}do jar-pre stuff..." if( eval $JARPRECOMMAND ) then createJar $JARFILENAME fi else createJar $JARFILENAME fi if [ -n "$JARPOSTCOMMAND" ] then echo "${STARSTRING}do jar-post stuff..." eval $JARPOSTCOMMAND fi fi ######################################################################### # EOF #########################################################################