summaryrefslogtreecommitdiffstats
path: root/lldb/scripts/build-swig-wrapper-classes.sh
blob: d15af40f12b3c86db0a3ac7e55051c2d4f568091 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/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

OpenPOWER on IntegriCloud