File initialbobcatlib of Package libbobcat

#!/bin/bash

##############################################################################
# This script must be run as root
#
# If icmake and the bobcat library haven't yet been installed on your system 
# execute the folllowing steps to install them.
# Once the following steps have been executed they don't need to be executed
# again as from that point onward icmake and the bobcat library are available
# on your system, and new versions can be constructed using the available 
# icmake and bobcat versions.
#   
#   1. extract the bobcat tar to its construction directory
#   2. copy this file to that directory
#   3. chdir to bobcat's construction directory
#   4. call ./initialbobcatlib
#      this constructs /usr/lib/libicmake.a
#      and installs the bobcat header files in 
#      /usr/include/bobcat
#   5. chdir to icmake's construction directory
#   6. run ./icm_prepare ./icm_bootstrap, and ./icm_install as described in 
#      icmake's QUICKINSTALL
#
#   Following this, icmake is available, using its dedicated bobcat library
#   Next construct and install the bobcat (shared) library as described in
#   bobcat's INSTALL file
#   When the full library is installed, rebuild icmake so it'll use the 
#   shared bobcat library by executing, in icmake's construction directory:
#       ./build distclean
#       ./icm_prepare /
#       ./build                     (uses icmake, or use ./icm_bootstrap x)
#       ./icm_install strip all
#   as described in icmake's QUICKINSTALL file
#
# These steps only have to be performed once. Thereafter, with new versions of
# either bobcat or icmake, the then available versions of bobcat and icmake
# can be used.
##############################################################################

[[ -z "${CXX}" ]] && CXX="g++"
[[ -z "${CXXFLAGS}" ]] && CXXFLAGS="-O2 -Wall"

tools_list="ar cat grep g++"
tools_missing=""
for tool in $tools_list; do
    $tool --version > /dev/null 2>&1
    [[ $? -ne 0 ]] && tools_missing+="$tool"
done
if [ "$tools_missing" ]; then
    echo "tools missing: $tools_missing"
    exit 0
fi

# Check if used tools are installed

if [ ! -e /usr/bin/find ]; then
    echo -e "You need to install find"
    exit 0
fi

dirs="arg glob level log mstream onekey exception pattern selector stat \
    string tempstream datetime fork gs ifdbuf iostream log logbuf mbuf \
    ofdbuf pipe processenums signal eoibuf fswap iobuf eoi \
    iuo redirector process"

if [ -e /usr/lib/libbobcat.a -o -e /usr/include/bobcat ] ; then
    echo '
/usr/lib/libbobcat.a and/or /usr/include/bobcat are already available
executing this script should not be required.
'
    exit 0
fi

# construction destination directory
mkdir -p tmp/bobcat

# copy all necessary headers and replace all #include "file.h"
for dir in $dirs
do
    if [ -e $dir/$dir ]; then
        cp $dir/$dir tmp/bobcat
        _f_files=$(grep -o "#include \".*.f\"" tmp/bobcat/$dir | cut -d\" -f2)
        while [ "$_f_files" != "" ]; do
            for file in $_f_files
            do
                if [ -e $dir/$file ]; then
                    _contents_file=$(<$dir/$file)
                    _contents_header=$(<tmp/bobcat/$dir)
                    echo "${_contents_header//#include \"$file\"/"${_contents_file}"}" > tmp/bobcat/$dir
                fi
            done
            _f_files=$(grep -o "#include \".*.f\"" tmp/bobcat/$dir | cut -d\" -f2)
        done
    fi
done

#for dir in $dirs
#do
#    cp $dir/$dir tmp/bobcat
#done

count=0     # use o-file numbers to avoid name collisions
# all directories to process
for dir in $dirs
do
    cd $dir

    echo -e "\ncompiling files in $dir, count = $count"

     for file in *.cc            # compile all .cc files in $dir
     do
        # define the object file's name
        object=../tmp/$count`basename $file .cc`.o

        if [ $file -nt $object ] ; then     #compile new(er) files
            gcc_options="-isystem ../tmp"
            # check classes required for specific classe
            #deps=$(cat ../dependencies/required.classes | grep "^$dir ")
            #for dep in $deps
            #do
            #    [[ "$dep" != "$dir" ]] && gcc_options+=" -iquote ../$dep"
            #done
            echo "$CXX $CXXFLAGS $gcc_options -o $object -c $file"
            $CXX $CXXFLAGS  $gcc_options -o $object -c $file || exit 1
            compiled=1
        fi
    done   
    let count=$count+1          # next directory nr.
   
    cd ..
done

echo -e "\nar cr tmp/libbobcat.a \*.o > /tmp/ar.list"
ar cr tmp/libbobcat.a tmp/*.o > tmp/ar.list          || exit 1
openSUSE Build Service is sponsored by