diff --git a/polymer/synthesis.sh b/polymer/synthesis.sh new file mode 100755 index 000000000..2202f6b97 --- /dev/null +++ b/polymer/synthesis.sh @@ -0,0 +1,89 @@ +#!/bin/bash + +# some paths +top=/home/pgriffais/src/eduke32 +source=$top/polymer/eduke32 +output=/home/pgriffais/src/synthesis/output +make=( make PLATFORM=WINDOWS CC='wine gcc' CXX='wine g++' AS='wine nasm' RC='wine windres' STRIP='wine strip' AR='wine ar' RANLIB='wine ranlib' PRETTY_OUTPUT=0 ) +clean=veryclean +# the following file paths are relative to $source +targets=( eduke32.exe mapster32.exe ) +packaged=( eduke32.exe mapster32.exe names.h tiles.cfg buildlic.txt GNU.TXT m32help.hlp ror.map a.m32 ) + + +# some variables +dobuild= +buildfailed= + +# if the output dir doesn't exist, create it +if [ ! -e $output ] +then + mkdir -p $output +fi + +# update the code repository and get the last revision number from SVN +cd $top +head=`svn update | tail -n1 | awk '{ print $NF }' | cut -d. -f1` +echo "HEAD is revision $head." + +lastrevision=`ls -A1 $output | tail -n1 | cut -d- -f2` + +# if the output dir is empty, we build no matter what +if [ ! $lastrevision ] +then + echo "No builds yet." + dobuild=1 +else + echo "Last built revision is $lastrevision." + # if the last built revision is less than HEAD, we also build + if [ $lastrevision -lt $head ] + then + echo "Need a new build." + dobuild=1 + fi +fi + +if [ $dobuild ] +then + echo "Launching a build..." + cd $source +# # clean the tree +# echo "${make[@]}" $clean +# "${make[@]}" $clean + # build + echo "${make[@]}" + "${make[@]}" + # make sure all the targets were produced + for i in "${targets[@]}"; do + if [ ! -e $i ] + then + buildfailed=1 + fi + done + # bail out if the build is failed + if [ $buildfailed ] + then + echo "Build failed! Bailing out..." + exit + fi + # get the date in the YYYYMMDD format (ex: 20091001) + date=`date +%Y%m%d` + # create the output directory + mkdir $output/$date-$head + # package the binary snapshot + echo zip $output/$date-$head/eduke32_win32_$date-$head.zip ${packaged[@]} + zip $output/$date-$head/eduke32_win32_$date-$head.zip ${packaged[@]} + # hack to restore [e]obj/keep.me + echo svn update -r $head + svn update -r $head + # export the source tree into the output directory + svn export . $output/$date-$head/eduke32_$date-$head + echo svn export . $output/$date-$head/eduke32_$date-$head + # package the source + cd $output/$date-$head + echo tar cvzf eduke32_src_$date-$head.tar.gz eduke32_$date-$head + tar cvzf eduke32_src_$date-$head.tar.gz eduke32_$date-$head + rm -r eduke32_$date-$head +else + echo "Nothing to do." +fi \ No newline at end of file