pas2js/scripts/buildpas2js
2019-05-21 15:11:28 +00:00

265 lines
5.3 KiB
Bash
Executable File

#!/bin/bash
# Some variables
BASEURL="https://svn.freepascal.org/svn/projects/pas2js/"
function info {
if [ -z "$QUIET" ]; then
echo "Info: $*"
fi
}
function header {
if [ -z "$QUIET" ]; then
echo ""
echo "Info: $*"
echo "---"
echo ""
fi
}
function usage {
echo "usage $0 [options] [FPC [SVN]]"
echo '-c compiler set compiler to use'
echo '-d directory set base directory for checkout'
echo '-h help this help message'
echo '-o OPTS extra compiler options'
echo "-q be more quiet"
echo '-s name build snapshot with name'
echp '-nd skip demo test compilation'
echo '-z URL set url for checkout. Can be relative to pas2js repo'
}
function doCompile {
info "Compiler command line: $*"
$FPC $*
}
function doStrip {
info "Stripping binary: $*"
strip $*
}
set -e
while test $# != 0
do
f=$1
case $f in
'-c') shift
FPC="$1";;
'-d') shift
DIR="$1";;
'-z') shift
SVN="$1";;
'-o') shift
EXTRAOPTS="$1";;
'-q') QUIET=1;;
'-s') shift
SNAPSHOT="$1";;
'-nd') SKIPDEMO=1;;
'-h') usage
exit;;
*)
if [ -z "$FPC" ]; then
FPC=$1
else
if [ -z "$SVN" ]; then
SVN=$1
else
usage
fi
fi
esac
shift
done
#
# Collect some info , set defaults
#
if [ -z "$FPC" ]; then
FPC=fpc
fi
if [ -z "$SVN" ]; then
SVN=${BASEURL}trunk
else
PROT=$(echo $SVN | sed -n '/.*:\/\//p')
if [ -z "$PROT" ]; then
SVN="${BASEURL}${SVN}"
fi
fi
if [ -z "$DIR" ]; then
DIR=$TMP
if [ -z "$DIR" ]; then
DIR=$TEMP
fi
if [ -z "$DIR" ]; then
DIR=~/tmp
fi
fi
FPCVER=$($FPC -iV)
FPCVER30=$(echo $FPCVER | (grep '3.0' || echo))
FPCCPU=$($FPC -iTP)
case "$OSTYPE" in
linux*)
SNAPSHOTOS=linux
LIBEXT=so
;;
darwin*)
SNAPSHOTOS=macos
LIBEXT=dylib
;;
*) SNAPSHOTOS=unknown
LIBEXT=dll
;;
esac
#
# Get started
#
info "SVN URL: $SVN"
info "Compiler version: $FPCVER"
info "Base directory: $DIR"
info "Snaphot: $SNAPSHOT"
info ""
#
# Change to base dir
#
info Changing directory to base dir $DIR
mkdir -p $DIR
cd $DIR
if [ -d daily ]; then
info Removing previous dir
rm -rf daily
fi
#
# Export sources
#
info "Exporting SVN $SVN to $DIR/daily"
svn export -q $SVN daily
BUILDDIR="$DIR/daily"
PKGDIR="$BUILDDIR/compiler/packages"
UNITPATH="$PKGDIR/fcl-js/src/;$PKGDIR/fcl-json/src/;$PKGDIR/fcl-passrc/src/;$PKGDIR/pastojs/src/"
if [ ! -z "$FPCVER30" ]; then
UNITPATH="${UNITPATH};$PKGDIR/compat"
fi
OPTS="-FU. -B -O1 -Schi -v0 -ve $EXTRAOPT"
if [ "$FPCCPU" = "x86_64" ]; then
LIBOPT="-fPIC"
fi
COMPDIR=$BUILDDIR/compiler/utils/pas2js
#
# Output dir is basis for zip
#
OUTDIR=$BUILDDIR/output
INSTALLDIR=$OUTDIR
if [ ! -z "$SNAPSHOT" ]; then
SNAPSHOTDIR="pas2js-snapshot-$SNAPSHOTOS-$FPCCPU"
INSTALLDIR="$OUTDIR/$SNAPSHOTDIR"
fi
if [ -d "$INSTALLDIR" ]; then
info "Output dir $INSTALLDIR exists. Cleaning up"
rm -rf "$INSTALLDIR"/*
else
info "Creating output dir $INSTALLDIR"
mkdir -p "$INSTALLDIR"
fi
#
# Binaries are put here
#
BINDIR=$INSTALLDIR/bin/
if [ -d "$BINDIR" ]; then
info Removing previous binaries from "$BINDIR"
rm -rf "$BINDIR"/*
else
info Creating output dir "$BINDIR"
mkdir -p "$BINDIR"
fi
# pas2js
header Build pas2js in $COMPDIR
cd "$COMPDIR"
doCompile -Fu"$UNITPATH" $OPTS -FE$BINDIR pas2js.pp
doStrip $BINDIR/pas2js
# libpas2js
header Build libpas2js in $COMPDIR
cd "$COMPDIR"
doCompile -Fu"$UNITPATH" $OPTS $LIBOPT -FE$BINDIR pas2jslib.pp
if [ "$OSTYPE" ne "darwin" ]; then
doStrip $BINDIR/libpas2jslib.$LIBEXT
fi
# compileserver
if [ ! -z "$FPCVER30" ]; then
header Version 3.0.x detected: Skipping compileserver build.
else
header Build compileserver in $COMPDIR
cd "$COMPDIR"
doCompile -Fu"$UNITPATH" $OPTS -FE$BINDIR compileserver.pp
doStrip $BINDIR/compileserver
fi
# webidl
header Build webidl2pas in $COMPDIR
cd "$COMPDIR"
doCompile -Fu"$UNITPATH" $OPTS -FE$BINDIR -Fu$PKGDIR/webidl/src webidl2pas.pp
doStrip $BINDIR/webidl2pas
# all done
header Compiled binaries:
ls -l $BINDIR
#
# Copy files for snapZip snapshot
#
if [ ! -z "$SNAPSHOT" ]; then
header Copying packages and demos for snapshot
cp -rp $BUILDDIR/demo $INSTALLDIR/demo
cp -rp $BUILDDIR/packages $INSTALLDIR/packages
fi
#
# Test demos
#
if [ -z "$SKIPDEMO" ]; then
header Build demos in $snvdir/demo without webcompiler
cd "$BUILDDIR/demo"
make SKIPWEBCOMPILER=1 P2JS=$BINDIR/pas2js
header Build webcompiler in demos dir
cd "$BUILDDIR/demo"
make demowebcompiler P2JS=$BINDIR/pas2js
fi
if [ -z "$SNAPSHOT" ]; then
header That\'s all folks!
exit;
fi
header Building snapshot
cd $BINDIR
info Creating config file
cat > pas2js.cfg << EOC
# Logo and options
-l
-vwnh
# If you don't want so much verbosity use
#-vw
# Allow C-operators
-Sc
-Fu\$CfgDir/../packages/*
#IFDEF nodejs
-Jirtl.js
#ENDIF
EOC
cd $OUTDIR
BASENAME=pas2js-snapshot
SUFFIX=$SNAPSHOT-$SNAPSHOTOS-$FPCCPU
ZIPFILE=$BUILDDIR/$BASENAME-$SUFFIX.zip
TSFILE=$BUILDDIR/$BASENAME-$SUFFIX-date.txt
MDFILE=$BUILDDIR/$BASENAME-$SUFFIX.md5
info Creating zip file $ZIPFILE
zip -qr $ZIPFILE $SNAPSHOTDIR
cd $BUILDDIR
md5sum -b $ZIPFILE > $MDFILE
date > $TSFILE
info "Zip file: " $ZIPFILE
info "Timestamp file: " $TSFILE
info "Checksum file: " $MDFILE