#! /bin/sh

# finish-swig-Python.sh
#
# For the Python script interpreter (external to liblldb) to be able to import
# and use the lldb module, there must be two files, lldb.py and _lldb.so, that
# it can find. lldb.py is generated by SWIG at the same time it generates the
# C++ file.  _lldb.so is actually a symlink file that points to the 
# LLDB shared library/framework.
#
# The Python script interpreter needs to be able to automatically find 
# these two files. On Darwin systems it searches in the LLDB.framework, as
# well as in all the normal Python search paths.  On non-Darwin systems
# these files will need to be put someplace where Python will find them.
#
# This shell script creates the _lldb.so symlink in the appropriate place,
# and copies the lldb.py (and embedded_interpreter.py) file to the correct
# directory.
#

# 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.
# PYTHON_INSTALL_DIR 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
PYTHON_INSTALL_DIR=$4
debug_flag=$5

# Make sure SDKROOT is not set, since if it is this is an iOS build where python
# is disabled
if [ "x$SDKROOT" = "x" ] ; then

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

OS_NAME=`uname -s`
PYTHON_VERSION=`/usr/bin/python --version 2>&1 | sed -e 's,Python ,,' -e 's,[.][0-9],,2' -e 's,[a-z][a-z][0-9],,'`


if [ $Debug == 1 ]
then
    echo "The current OS is $OS_NAME"
    echo "The Python version is $PYTHON_VERSION"
fi

#
#  Determine where to put the files.

if [ ${OS_NAME} == "Darwin" ]
then
    # We are on a Darwin system, so all the lldb Python files can go 
    # into the LLDB.framework/Resources/Python subdirectory.

    if [ ! -d "${TARGET_DIR}/LLDB.framework" ]
    then
        echo "Error:  Unable to find LLDB.framework" >&2
        exit 1
    else
        if [ $Debug == 1 ]
        then
            echo "Found ${TARGET_DIR}/LLDB.framework."
        fi
    fi

    # Make the Python directory in the framework if it doesn't already exist

    framework_python_dir="${TARGET_DIR}/LLDB.framework/Resources/Python"
else
    # We are on a non-Darwin system, so use the PYTHON_INSTALL_DIR argument,
    # and append the python version directory to the end of it.  Depending on
    # the system other stuff may need to be put here as well.

    framework_python_dir="${PYTHON_INSTALL_DIR}/python${PYTHON_VERSION}"
fi

#
# Look for the directory in which to put the Python files;  if it does not
# already exist, attempt to make it.
#

if [ $Debug == 1 ]
then
    echo "Python files will be put in ${framework_python_dir}"
fi

if [ ! -d "${framework_python_dir}" ]
then
    if [ $Debug == 1 ]
    then
        echo "Making directory ${framework_python_dir}"
    fi
    mkdir -p "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "${framework_python_dir} already exists."
    fi
fi

if [ ! -d "${framework_python_dir}" ]
then
    echo "Error: Unable to find or create ${framework_python_dir}" >&2
    exit 1
fi

# Make the symlink that the script bridge for Python will need in the
# Python framework directory

if [ ! -L "${framework_python_dir}/_lldb.so" ]
then
    if [ $Debug == 1 ]
    then
        echo "Creating symlink for _lldb.so"
    fi
    if [ ${OS_NAME} == "Darwin" ]
    then
        cd "${framework_python_dir}"
        ln -s "../../LLDB" _lldb.so
    else
        cd "${TARGET_DIR}"
        ln -s "./LLDB" _lldb.so
    fi
else
    if [ $Debug == 1 ]
    then
        echo "${framework_python_dir}/_lldb.so already exists."
    fi
fi

# Copy the python module (lldb.py) that was generated by SWIG 
# over to the framework Python directory
if [ -f "${CONFIG_BUILD_DIR}/lldb.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying lldb.py to ${framework_python_dir}"
    fi
    cp "${CONFIG_BUILD_DIR}/lldb.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${CONFIG_BUILD_DIR}/lldb.py"
    fi
fi

# Copy the embedded interpreter script over to the framework Python directory
if [ -f "${SRC_ROOT}/source/Interpreter/embedded_interpreter.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying embedded_interpreter.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/source/Interpreter/embedded_interpreter.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/source/Interpreter/embedded_interpreter.py"
    fi
fi

# Copy the C++ STL formatters over to the framework Python directory
if [ -f "${SRC_ROOT}/examples/synthetic/gnu_libstdcpp.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying gnu_libstdcpp.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/synthetic/gnu_libstdcpp.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/synthetic/gnu_libstdcpp.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/synthetic/libcxx.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying libcxx.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/synthetic/libcxx.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/synthetic/libcxx.py"
    fi
fi

# Copy the ObjC formatters over to the framework Python directory
if [ -f "${SRC_ROOT}/examples/summaries/objc.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying objc.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/objc.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/objc.py"
    fi
fi

# Copy the Cocoa formatters over to the framework Python directory
if [ -f "${SRC_ROOT}/examples/summaries/cocoa/CFArray.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying CFArray.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/CFArray.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/CFArray.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/CFDictionary.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying CFDictionary.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/CFDictionary.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/CFDictionary.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/CFString.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying CFString.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/CFString.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/CFString.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSData.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSData.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSData.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSData.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSMachPort.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSMachPort.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSMachPort.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSMachPort.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSSet.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSSet.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSSet.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSSet.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSNotification.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSNotification.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSNotification.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSNotification.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSException.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSException.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSException.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSException.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/CFBag.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying CFBag.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/CFBag.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/CFBag.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/CFBinaryHeap.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying CFBinaryHeap.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/CFBinaryHeap.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/CFBinaryHeap.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSURL.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSURL.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSURL.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSURL.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSBundle.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSBundle.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSBundle.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSBundle.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSNumber.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSNumber.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSNumber.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSNumber.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSDate.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSDate.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSDate.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSDate.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/NSIndexSet.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying NSIndexSet.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/NSIndexSet.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/NSIndexSet.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/CFBitVector.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying CFBitVector.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/CFBitVector.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/CFBitVector.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/Selector.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying Selector.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/Selector.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/Selector.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/Class.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying Class.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/Class.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/Class.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/cache.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying cache.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/cache.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/cache.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/metrics.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying metrics.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/metrics.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/metrics.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/attrib_fromdict.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying attrib_fromdict.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/attrib_fromdict.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/attrib_fromdict.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/Logger.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying Logger.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/Logger.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/Logger.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/objc_lldb.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying objc_lldb.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/objc_lldb.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/objc_lldb.py"
    fi
fi

if [ -f "${SRC_ROOT}/examples/summaries/cocoa/objc_runtime.py" ]
then
    if [ $Debug == 1 ]
    then
        echo "Copying objc_runtime.py to ${framework_python_dir}"
    fi
    cp "${SRC_ROOT}/examples/summaries/cocoa/objc_runtime.py" "${framework_python_dir}"
else
    if [ $Debug == 1 ]
    then
        echo "Unable to find ${SRC_ROOT}/examples/summaries/cocoa/objc_runtime.py"
    fi
fi

fi

exit 0

