#!/bin/bash BUSRC="stack.cpp string.cpp hash.cpp list.cpp trace.cpp stream.cpp formatter.cpp util.cpp sharedcore.cpp exceptionbase.cpp heap.cpp archivebase.cpp archive.cpp queue.cpp archival.cpp sio.cpp stdstream.cpp process.cpp plugger.cpp optparser.cpp signals.cpp array.cpp membuf.cpp file.cpp variant.cpp random.cpp randombasic.cpp randombase.cpp streamstack.cpp exceptioninvaliditerator.cpp exceptionindexoutofbounds.cpp" BUHDR="stack.h string.h hash.h list.h trace.h stream.h formatter.h util.h sharedcore.h exceptionbase.h heap.h archivebase.h archive.h queue.h archival.h sio.h stdstream.h process.h plugger.h singleton.h optparser.h array.h membuf.h file.h variant.h fmt.h extratypes.h random.h randombasic.h randombase.h streamstack.h exceptioninvaliditerator.h exceptionindexoutofbounds.h" BUEXPSRC="regex.cpp" BUEXPHDR="regex.h" BUUNSSRC="blob.cpp blobbuilder.cpp" BUUNSHDR="blob.h blobbuilder.h" BUCOMPAT="config.h compat/linux.h compat/win32.h compat/osx.h" if [ -z "${CXX}" ]; then CXX="g++" fi function bld() { OUTFILE="$1" if [ ! -e "$OUTFILE" ]; then return 1 fi shift for INFILE in $*; do if [ "$INFILE" -nt "$OUTFILE" ]; then return 1 fi done return 0 } function cmd() { printf "%8s $2\n" $1 shift 2 $* || exit } function gpp() { bld "$1" "$2" || cmd CXX "$1" ${CXX} -ggdb -fPIC -W -Wall -Iminibu -c -o "$1" "$2" } function presetup() { for dir in minibu/src minibu/bu minibu/bu/compat; do cmd MKDIR ${dir} mkdir -p ${dir} done cmd FAKE minibu/bu/autoconfig.h touch minibu/bu/autoconfig.h for file in $(cd bootstrap; ls); do cmd BOOTSTRAP minibu/bu/${file} cp bootstrap/${file} minibu/bu done for F in $BUSRC; do bld minibu/src/$F || cmd CP minibu/src/$F cp ../libbu++/src/stable/$F minibu/src/$F done for F in $BUHDR; do bld minibu/bu/$F || cmd CP minibu/bu/$F cp ../libbu++/src/stable/$F minibu/bu/$F done for F in $BUEXPSRC; do bld minibu/src/$F || cmd CP minibu/src/$F cp ../libbu++/src/experimental/$F minibu/src/$F done for F in $BUEXPHDR; do bld minibu/bu/$F || cmd CP minibu/bu/$F cp ../libbu++/src/experimental/$F minibu/bu/$F done for F in $BUUNSSRC; do bld minibu/src/$F || cmd CP minibu/src/$F cp ../libbu++/src/unstable/$F minibu/src/$F done for F in $BUUNSHDR; do bld minibu/bu/$F || cmd CP minibu/bu/$F cp ../libbu++/src/unstable/$F minibu/bu/$F done for F in $BUCOMPAT; do bld minibu/bu/$F || cmd CP minibu/bu/$F cp ../libbu++/src/$F minibu/bu/$F done bld src/build.tab.c src/build.y || cmd BISON src/build.tab.c bison -bsrc/build src/build.y bld src/build.yy.c src/build.l || cmd FLEX src/build.yy.c flex src/build.l } if [ ! -z "$1" ]; then if [ "$1" == "clean" -o "$1" == "-c" ]; then echo "Cleaning up, deleting all object code and downloaded source code..." echo rm -Rf minibu src/*.o exit elif [ "$1" == "setup" -o "$1" == "-s" ]; then echo "Only preforming download / setup" echo presetup exit else echo "Without parameters build.sh will download extra components and" echo "compile build." echo echo "Parameters:" echo " clean | -c Delete all opbject code and downloaded source." echo " setup | -s Download and perform initial setup, but do not" echo " compile." echo echo "Using ${CXX} to complie code." echo exit fi fi presetup for F in $BUSRC $BUEXPSRC $BUUNSSRC; do OUTPUT=${F%.*}.o bld minibu/src/$OUTPUT || gpp minibu/src/$OUTPUT minibu/src/$F done for F in src/*.c src/*.cpp; do OUTPUT=${F%.*}.o gpp "$OUTPUT" "$F" done bld build src/*.o minibu/src/*.o || cmd LINK build ${CXX} -fPIC -rdynamic -Wl,-export-dynamic -o build src/*.o minibu/src/*.o -ldl bld build~ build || cmd CP build~ cp build build~