472 lines
10 KiB
Text
472 lines
10 KiB
Text
|
|
#!/bin/bash
|
||
|
|
#
|
||
|
|
#{{IS_NOTE
|
||
|
|
# Purpose:
|
||
|
|
# To build java projects
|
||
|
|
# Description:
|
||
|
|
# 'build help' for more descriptions
|
||
|
|
# History:
|
||
|
|
# March 29 15:11 2001, Created by tomyeh
|
||
|
|
# August 21 13:59 2002, Rewritten by tomyeh
|
||
|
|
#}}IS_NOTE
|
||
|
|
#
|
||
|
|
#Copyright (C) 2002 Potix Corporation. All Rights Reserved.
|
||
|
|
#
|
||
|
|
#{{IS_RIGHT
|
||
|
|
# This program is distributed under GPL Version 2.0 in the hope that
|
||
|
|
# it will be useful, but WITHOUT ANY WARRANTY.
|
||
|
|
#}}IS_RIGHT
|
||
|
|
#
|
||
|
|
|
||
|
|
#-- precondition check
|
||
|
|
setting=build.setting.local
|
||
|
|
if [ ! -f $setting ] ; then
|
||
|
|
setting=build.setting
|
||
|
|
if [ ! -f $setting ] ; then
|
||
|
|
echo $setting must be specified. Refer to $setting.sample.
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
#-- help, verbose or continue
|
||
|
|
if [ "$1" = "help" ] ; then
|
||
|
|
more build.txt
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
#nojc is obsolete
|
||
|
|
#if [ "$1" = "nojc" ] ; then
|
||
|
|
# shift
|
||
|
|
# nojc="-Dnojc=true"
|
||
|
|
#else
|
||
|
|
# nojc="-Dnojc=false"
|
||
|
|
#fi
|
||
|
|
if [ "$1" = "verbose" ] ; then
|
||
|
|
shift
|
||
|
|
verbose="-verbose -Dverbose.required=true"
|
||
|
|
fi
|
||
|
|
if [ "$1" = "continue" ] ; then
|
||
|
|
shift
|
||
|
|
haltonerror=off
|
||
|
|
else
|
||
|
|
haltonerror=on
|
||
|
|
fi
|
||
|
|
if [ "$1" = "unzip" ] ; then
|
||
|
|
shift
|
||
|
|
unzip=true
|
||
|
|
else
|
||
|
|
unzip=$(grep '^unzip=' $setting)
|
||
|
|
unzip=${unzip#unzip=}
|
||
|
|
if [ "$unzip" = "false" ] ; then
|
||
|
|
unzip=
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
jboss_profile=$(grep '^jboss.deploy' $setting)
|
||
|
|
jboss_profile=${jboss_profile#jboss.deploy=}
|
||
|
|
if [ "$jboss_profile" != "" ] ; then
|
||
|
|
jboss_ear=${jboss_profile#*/}
|
||
|
|
if [ "$jboss_ear" = "" ] ; then
|
||
|
|
echo "Illegal jboss.deploy: $jboss_profile. It must be xxx/yyy."
|
||
|
|
fi
|
||
|
|
jboss_profile=${jboss_profile%/*}
|
||
|
|
fi
|
||
|
|
jboss_home=/usr/jboss
|
||
|
|
tomcat_home="$CATALINA_HOME"
|
||
|
|
if [ ! -d "$tomcat_home" ]; then
|
||
|
|
tomcat_home=/usr/tomcat
|
||
|
|
fi
|
||
|
|
if [ "$TERM" = "cygwin" ] ; then
|
||
|
|
jboss_home=$(cygpath -w $jboss_home)
|
||
|
|
jboss_home=${jboss_home%\\}
|
||
|
|
tomcat_home=$(cygpath -w $tomcat_home)
|
||
|
|
tomcat_home=${tomcat_home%\\}
|
||
|
|
fi
|
||
|
|
|
||
|
|
start_service=$(grep '^start.service' $setting)
|
||
|
|
start_service=${start_service#start.service=}
|
||
|
|
|
||
|
|
#-- parsing dbglfag
|
||
|
|
dbgflag=$(grep '^D.ON' $setting)
|
||
|
|
dbgflag=${dbgflag#D.ON=}
|
||
|
|
if [ "$dbgflag" = "true" ] ; then
|
||
|
|
cmd=build.debug
|
||
|
|
jstrim=false
|
||
|
|
elif [ "$dbgflag" = "false" ] ; then
|
||
|
|
cmd=build.release
|
||
|
|
jstrim=true
|
||
|
|
else
|
||
|
|
echo D.ON in $setting must be either true or false -- not $dbgflag
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
#-- parsing cmd
|
||
|
|
cmdList=" bd br cd cr ud ur doc jsrc build.debug build.release clean clean.debug clean.release utest.debug utest.release javadoc help"
|
||
|
|
if [ \( $# != 0 \) -a \( "${cmdList#* $1 }" != "$cmdList" \) ] ; then
|
||
|
|
cmd=$1
|
||
|
|
shift
|
||
|
|
fi
|
||
|
|
|
||
|
|
case $cmd in
|
||
|
|
bd) cmd=build.debug ;;
|
||
|
|
br) cmd=build.release ;;
|
||
|
|
cd) cmd=clean.debug ;;
|
||
|
|
cr) cmd=clean.release ;;
|
||
|
|
ud) cmd=utest.debug ;;
|
||
|
|
ur) cmd=utest.release ;;
|
||
|
|
doc) cmd=javadoc ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
outdir=${cmd#*\.}
|
||
|
|
cmd=${cmd%\.*}
|
||
|
|
if [ "$outdir" = "$cmd" ] ; then
|
||
|
|
if [ "$dbgflag" = "true" ] ; then
|
||
|
|
outdir=debug
|
||
|
|
else
|
||
|
|
outdir=release
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
#-- adjust javac debug and optimize flags
|
||
|
|
dflag=$(grep '^debug=' $setting)
|
||
|
|
dflag=${dflag#debug=}
|
||
|
|
if [ "$dflag" = "true" ] ; then
|
||
|
|
dflag=on
|
||
|
|
elif [ "$dflag" = "false" ] ; then
|
||
|
|
dflag=off
|
||
|
|
elif [ "$dflag" != "" ] ; then
|
||
|
|
echo Illegal setting: debug=$dflag
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
oflag=$(grep '^optimize=' $setting)
|
||
|
|
oflag=${oflag#optimize=}
|
||
|
|
if [ "$oflag" = "true" ] ; then
|
||
|
|
oflag=on
|
||
|
|
elif [ "$oflag" = "false" ] ; then
|
||
|
|
oflag=off
|
||
|
|
elif [ "$oflag" != "" ] ; then
|
||
|
|
echo Illegal setting: optimize=$oflag
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ "$outdir" = "release" ] ; then
|
||
|
|
if [ "$dflag" = "" ] ; then
|
||
|
|
dflag="off"
|
||
|
|
fi
|
||
|
|
if [ "$oflag" = "" ] ; then
|
||
|
|
oflag="on"
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
if [ "$dflag" = "" ] ; then
|
||
|
|
dflag="on"
|
||
|
|
fi
|
||
|
|
if [ "$oflag" = "" ] ; then
|
||
|
|
oflag="off"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
echo "dflag=$dflag, oflag=$oflag"
|
||
|
|
|
||
|
|
#-- Prepare define list
|
||
|
|
dfnList=
|
||
|
|
if [ $# != 0 ] ; then
|
||
|
|
while [ "$1" != "${1#*=}" ] ; do
|
||
|
|
dfnList="$dfnList -D$1"
|
||
|
|
shift
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
#-- Prepare $targetList
|
||
|
|
#Add a project to the target list (the redudant ones won't be added)
|
||
|
|
if [ $# != 0 ] ; then
|
||
|
|
for target in $* ; do
|
||
|
|
target=${target%/}
|
||
|
|
targetListOld="$targetListOld $target"
|
||
|
|
if [ \( ! -d $target \) -a \( ! -d ${target}Test \) ] ; then
|
||
|
|
echo "Error: $target doesn't exist"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
else
|
||
|
|
if [ ! -f build.projects ] ; then
|
||
|
|
echo build.projects not found
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
targetListOld="$(cat build.projects | tr '\n' ' ')"
|
||
|
|
targetListOld="${targetListOld% }"
|
||
|
|
doall="-Ddo.all=true"
|
||
|
|
#denote all projects are built; passed to build.xml
|
||
|
|
fi
|
||
|
|
|
||
|
|
function addToTargetList
|
||
|
|
{
|
||
|
|
if [ \( "${targetList#* $1 }" = "${targetList}" \) -a \
|
||
|
|
\( "${targetList% $1}" = "${targetList}" \) -a \
|
||
|
|
\( "${targetList#$1 }" = "${targetList}" \) ] ; then
|
||
|
|
targetList="$targetList $1"
|
||
|
|
|
||
|
|
#check wether the project is defined correctly
|
||
|
|
mustList="format"
|
||
|
|
if [ -d $target ] ; then
|
||
|
|
for v in $mustList ; do
|
||
|
|
if [ ! -f $target/$v ] ; then
|
||
|
|
echo "Error: $target/$v doesn't exist"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
targetList=
|
||
|
|
if [ "${cmd#utest}" != "$cmd" ] ; then #utest
|
||
|
|
for target in $targetListOld ; do
|
||
|
|
if [ "${target%Test}" = "$target" ] ; then
|
||
|
|
target=${target}Test
|
||
|
|
fi
|
||
|
|
addToTargetList $target
|
||
|
|
done
|
||
|
|
else
|
||
|
|
for target in $targetListOld ; do
|
||
|
|
addToTargetList $target
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
|
||
|
|
#-- prepare javadocdir ...
|
||
|
|
if [ "$cmd" = "javadoc" ] ; then
|
||
|
|
javadocdir=$(grep '^javadoc' $setting)
|
||
|
|
javadocdir=${javadocdir#javadoc=}
|
||
|
|
if [ "$javadocdir" = "" ] ; then
|
||
|
|
echo javadoc must be specified in $setting
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
javadocdir=${javadocdir/\~/$HOME}
|
||
|
|
else
|
||
|
|
javadocdir=nonexist
|
||
|
|
fi
|
||
|
|
|
||
|
|
#-- subroutine safe_cygpath
|
||
|
|
#$1: cygpath option
|
||
|
|
#$2: path
|
||
|
|
#split path to chunks of $size size and do cygpath
|
||
|
|
#this is a work around for the cygpath bug which cannot handle too long a path
|
||
|
|
function safe_cygpath
|
||
|
|
{
|
||
|
|
local path=$2
|
||
|
|
local size=400
|
||
|
|
local newpath=
|
||
|
|
while [ ${#path} -gt $size ] ; do
|
||
|
|
path1=${path:0:$size}
|
||
|
|
path1=${path1%:*}
|
||
|
|
offset=$((${#path1}+1))
|
||
|
|
newpath="$newpath;$(cygpath $1 $path1)"
|
||
|
|
path=${path:$offset}
|
||
|
|
done
|
||
|
|
if [ ${#path} -gt 0 ] ; then
|
||
|
|
newpath="$newpath;$(cygpath $1 $path)"
|
||
|
|
fi
|
||
|
|
newpath=${newpath#;}
|
||
|
|
echo ${newpath%;}
|
||
|
|
}
|
||
|
|
|
||
|
|
#-- subroutine invoke_ant
|
||
|
|
#$1: cmd
|
||
|
|
#$2: target
|
||
|
|
function invoke_ant
|
||
|
|
{
|
||
|
|
echo "$1.$outdir $2..."
|
||
|
|
cd $2
|
||
|
|
|
||
|
|
#handle class.test.local
|
||
|
|
local class_test=
|
||
|
|
if [ "${cmd#utest}" != "$cmd" ] ; then #utest
|
||
|
|
if [ -f class.test.local ] ; then
|
||
|
|
ctOrg=$(cat class.test.local | tr '\n' ' ')
|
||
|
|
class_test=
|
||
|
|
for cls in $ctOrg ; do
|
||
|
|
if [ "${cls#\#}" = "$cls" ] ; then
|
||
|
|
fl=$(echo $cls | tr '.' '/').java
|
||
|
|
if [ "$class_test" = "" ] ; then
|
||
|
|
class_test="-Dclass.test=$fl"
|
||
|
|
else
|
||
|
|
class_test="$class_test,$fl"
|
||
|
|
#Don't use whitespace
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
local CP=
|
||
|
|
if [ -f classpath ] ; then
|
||
|
|
#retrieve path
|
||
|
|
CP=$(cat classpath | tr '\n' ':')
|
||
|
|
CP=${CP%:}
|
||
|
|
|
||
|
|
#javadoc.class.path shall not contain '.', because xdoclet will
|
||
|
|
#ignore files that are found in classpath
|
||
|
|
DCP=$(echo $CP | sed -e 's/:\.:/:/g' -e 's/^\.://' -e 's/:\.$//')
|
||
|
|
if [ "$TERM" = "cygwin" ] ; then
|
||
|
|
DCP=$(safe_cygpath "-mp" "$DCP")
|
||
|
|
#Don't convert CP because it is used by bash directly
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
if [ "$verbose" != "" ] ; then
|
||
|
|
echo "CP: $CP"
|
||
|
|
echo "DCP: $DCP"
|
||
|
|
fi
|
||
|
|
|
||
|
|
local war_libs=
|
||
|
|
if [ -f war.libs ] ; then
|
||
|
|
war_libs=$(cat war.libs | tr '\n' ',')
|
||
|
|
war_libs=${war_libs%,}
|
||
|
|
fi
|
||
|
|
if [ "$war_libs" = "" ] ; then
|
||
|
|
war_libs=nonexist
|
||
|
|
fi
|
||
|
|
|
||
|
|
local server_libs=
|
||
|
|
if [ -f server.libs ] ; then
|
||
|
|
server_libs=$(cat server.libs | tr '\n' ',')
|
||
|
|
server_libs=${server_libs%,}
|
||
|
|
fi
|
||
|
|
if [ "$server_libs" = "" ] ; then
|
||
|
|
server_libs="nonexist"
|
||
|
|
fi
|
||
|
|
|
||
|
|
local ear_libs=
|
||
|
|
if [ -f ear.libs ] ; then
|
||
|
|
ear_libs=$(cat ear.libs | tr '\n' ',')
|
||
|
|
ear_libs=${ear_libs%,}
|
||
|
|
fi
|
||
|
|
if [ "$ear_libs" = "" ] ; then
|
||
|
|
ear_libs=nonexist
|
||
|
|
fi
|
||
|
|
|
||
|
|
local import_libs=
|
||
|
|
if [ -f import.libs ] ; then
|
||
|
|
import_libs=$(cat import.libs | tr '\n' ',')
|
||
|
|
import_libs=${import_libs%,}
|
||
|
|
fi
|
||
|
|
if [ "$import_libs" = "" ] ; then
|
||
|
|
import_libs=nonexist
|
||
|
|
fi
|
||
|
|
|
||
|
|
local deploy=
|
||
|
|
local unziplist=
|
||
|
|
if [ -f deploy ] ; then
|
||
|
|
deploy=$(head -1 deploy)
|
||
|
|
if [ "$deploy" = "server" ] || [ "${cmd#utest}" != "$cmd" ] ; then
|
||
|
|
app=$(grep '^app=' deploy)
|
||
|
|
app=${app#app=}
|
||
|
|
if [ "$app" = "" ] ; then
|
||
|
|
echo "You must specify app=xxx in deploy, because deploy target is server or utest is required"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
echo Application: $app
|
||
|
|
fi
|
||
|
|
if [ "$deploy" = "server" ] ; then
|
||
|
|
rootContext=$(grep '^root-context=' deploy)
|
||
|
|
rootContext=${rootContext#root-context=}
|
||
|
|
|
||
|
|
if [ "$unzip" != "" ]; then
|
||
|
|
unziplist=$(grep '^unzip' deploy|tr -d ' ')
|
||
|
|
unziplist=${unziplist#unzip=}
|
||
|
|
if [ "$unziplist" != "" ] ; then
|
||
|
|
unziplist=-Ddeploy.unzip.list="$unziplist"
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
zipjslist=$(grep '^zipjs=' deploy)
|
||
|
|
zipjslist=${zipjslist#zipjs=}
|
||
|
|
else
|
||
|
|
deploy=unknown
|
||
|
|
fi
|
||
|
|
if [ "${zipjslist}" = "" ] ; then
|
||
|
|
zipjslist=_na_dir_
|
||
|
|
fi
|
||
|
|
|
||
|
|
prjver="$(head -1 version)"
|
||
|
|
srcver=$(grep '^source=' version)
|
||
|
|
srcver=${srcver#source=}
|
||
|
|
if [ "$srcver" = "" ] ; then
|
||
|
|
srcver=1.4
|
||
|
|
fi
|
||
|
|
tgtver=$(grep '^target=' version)
|
||
|
|
tgtver=${tgtver#target=}
|
||
|
|
if [ "$tgtver" = "" ] ; then
|
||
|
|
tgtver=1.4
|
||
|
|
fi
|
||
|
|
|
||
|
|
this_dflag=$dflag
|
||
|
|
dflagtmp=$(grep '^debug=' version)
|
||
|
|
dflagtmp=${dflagtmp#debug=}
|
||
|
|
if [ "$dflagtmp" = "true" ] ; then
|
||
|
|
this_dflag=on
|
||
|
|
elif [ "$dflagtmp" = "false" ] ; then
|
||
|
|
this_dflag=off
|
||
|
|
fi
|
||
|
|
this_oflag=$oflag
|
||
|
|
oflagtmp=$(grep '^optimize=' version)
|
||
|
|
oflagtmp=${oflagtmp#optimize=}
|
||
|
|
if [ "$oflagtmp" = "true" ] ; then
|
||
|
|
this_oflag=on
|
||
|
|
elif [ "$oflagtmp" = "false" ] ; then
|
||
|
|
this_oflag=off
|
||
|
|
fi
|
||
|
|
|
||
|
|
format="$(head -1 format)"
|
||
|
|
if [ "$format" = "cpp" ] ; then
|
||
|
|
if [ ! -d $outdir ] ; then
|
||
|
|
mkdir $outdir
|
||
|
|
fi
|
||
|
|
if [ \( "${cmd#build}" != "$cmd" \) -o \( "${cmd#clean}" != "$cmd" \) ] ; then
|
||
|
|
(
|
||
|
|
cd $outdir
|
||
|
|
DEPLOY_DIR=../../dist/lib make -f ../src/Makefile $1
|
||
|
|
)
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
CLASSPATH="$CP" ANT_OPTS=-Xmx160M ant $verbose $class_test \
|
||
|
|
$doall -Dformat="$format" -Ddeploy="$deploy" \
|
||
|
|
-Dserver.libs="$server_libs" -Dstart.service="$start_service" \
|
||
|
|
-Djboss.profile="$jboss_profile" -Djboss.ear="$jboss_ear" \
|
||
|
|
-Djboss.home="$jboss_home" -Dtomcat.home="$tomcat_home" \
|
||
|
|
-Djs.trim=$jstrim -Dzipjs=$zipjslist\
|
||
|
|
-Dwar.libs="$war_libs" -Dbasedir=. \
|
||
|
|
-Dear.libs="$ear_libs" -Dimport.libs="$import_libs" \
|
||
|
|
-Dproject.name="$2" -Dproject.version="$prjver" \
|
||
|
|
-Dsource.version="$srcver" -Dtarget.version="$tgtver" \
|
||
|
|
-Dhaltonerror=$haltonerror -Dout.dir=$outdir \
|
||
|
|
-Ddebug=$this_dflag -Doptimize=$this_oflag ${nojc} \
|
||
|
|
-Dshare.javadoc.dir="$javadocdir" \
|
||
|
|
-Djavadoc.class.path="$DCP" -Dapp.name=$app $unziplist \
|
||
|
|
-Droot.context=$rootContext \
|
||
|
|
$dfnList -buildfile ../build.xml $1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ $? != 0 ] ; then
|
||
|
|
exit $?
|
||
|
|
fi
|
||
|
|
|
||
|
|
rm -rf velocity.log junit*.properties
|
||
|
|
cd ..
|
||
|
|
}
|
||
|
|
|
||
|
|
start=`date +%s`
|
||
|
|
echo "targets: ${targetList}"
|
||
|
|
for target in $targetList ; do
|
||
|
|
if [ -d $target ] ; then
|
||
|
|
invoke_ant $cmd $target
|
||
|
|
else
|
||
|
|
echo "Ignore: $target doesn't exist"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
end=`date +%s`
|
||
|
|
buildTime=$(( $end - $start ))
|
||
|
|
buildTimeMM=$(( $buildTime / 60 ))
|
||
|
|
buildTimeSS=$(( $buildTime % 60 ))
|
||
|
|
echo ""
|
||
|
|
echo "Total build process time: ${buildTimeMM} min ${buildTimeSS} sec."
|