#!/bin/sh

# build-swig-wrapper-classes.sh
#
# For each scripting language liblldb supports, we need to create the
# appropriate Script Bridge wrapper classes for that language so that 
# users can call Script Bridge functions from within the script interpreter.
# 
# We use SWIG to help create the appropriate wrapper classes/functions for
# the scripting language.  In some cases the file generated by SWIG may
# need some tweaking before it is completely ready to use.

# Below are the arguments/parameters that this script takes (and passes along
# to all the language-specific build scripts that it calls):
#
# SRC_ROOT is the root of the lldb source tree.
# TARGET_DIR is where the lldb framework/shared library gets put.
# CONFIG_BUILD_DIR is where the build-swig-Python-LLDB.sh  shell script 
#           put the lldb.py file it was generated from running SWIG.
# PREFIX is where non-Darwin systems want to put the .py and .so
#           files so that Python can find them automatically.
# debug_flag (optional) determines whether or not this script outputs 
#           additional information when running.

SRC_ROOT=$1
TARGET_DIR=$2
CONFIG_BUILD_DIR=$3
PREFIX=$4
debug_flag=$5

#
# Check to see if we are in debug-mode or not.
#

if [ -n "$debug_flag" -a "$debug_flag" == "-debug" ]
then
    Debug=1
else
    Debug=0
fi

#
# Verify that 'lldb.swig' exists.
#

if [ ! -f ${SRC_ROOT}/scripts/lldb.swig ]
then
    echo Error: unable to find file 'lldb.swig' >&2
    exit 1
fi

if [ $Debug == 1 ]
then
    echo "Found lldb.swig file"
fi

#
# Next look for swig
#

SWIG=
if [ -f /usr/bin/swig ]
then
    SWIG=/usr/bin/swig
else
    if [ -f /usr/local/bin/swig ]
    then
        SWIG=/usr/local/bin/swig
    fi
fi

if [ ${SWIG}a == a ]
then
    echo Error: could not find the swig binary
    exit 1
fi

#
# For each scripting language, make sure the build script for that language
# exists, and if so, call it.
#
# For now the only language we support is Python, but we expect this to
# change.

languages="Python"
cwd=${SRC_ROOT}/scripts

for curlang in $languages
do
    if [ $Debug == 1 ]
    then
        echo "Current language is $curlang"
    fi

    if [ ! -d "$cwd/$curlang" ]
    then
        echo "Error:  unable to find $curlang script sub-dirctory" >&2
        continue
    else

        if [ $Debug == 1 ]
        then
            echo "Found $curlang sub-directory"
        fi

        cd $cwd/$curlang

        filename="./build-swig-${curlang}.sh"

        if [ ! -f $filename ]
        then
            echo "Error: unable to find swig build script for $curlang: $filename" >&2
            continue
        else

            if [ $Debug == 1 ]
            then
                echo "Found $curlang build script."
                echo "Executing $curlang build script..."
            fi

            ./build-swig-${curlang}.sh  $SRC_ROOT $TARGET_DIR $CONFIG_BUILD_DIR "${PREFIX}" "${debug_flag}" "${SWIG}"
        fi
    fi
done

