#!/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

shift 4

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

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

#
# Check to see if we were called from the Makefile system. If we were, check
# if the caller wants swig to generate a dependency file.
#

if [ -n "$1" -a "$1" = "-m" ]
then
    makefile_flag="$1"
    shift
    if [ -n "$1" -a "$1" = "-M" ]
    then
        dependency_flag="$1"
        shift
    else
        dependency_flag=""
    fi
else
    makefile_flag=""
    dependency_flag=""
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 -eq 1 ]
then
    echo "Found lldb.swig file"
fi

#
# Next look for swig
#

SWIG=`which swig`
if [ ! -x "$SWIG" -a -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 -eq 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 -eq 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 -eq 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}" "${makefile_flag}" "${dependency_flag}" || exit $?
        fi
    fi
done

