blob: 21ff0058fbe8a44b90947a0036e421c03beb2a07 [file] [log] [blame]
Chris Lattner24943d22010-06-08 16:52:24 +00001#!/bin/sh
2
3# build-swig-Python.sh
4
Caroline Tice9dbe7172010-06-16 19:26:52 +00005# SRC_ROOT is the root of the lldb source tree.
6# TARGET_DIR is where the lldb framework/shared library gets put.
7# CONFIG_BUILD_DIR is where the build-swig-Python-LLDB.sh shell script
8# put the lldb.py file it was generated from running SWIG.
9# PREFIX is the root directory used to determine where third-party modules
10# for scripting languages should be installed.
11# debug_flag (optional) determines whether or not this script outputs
12# additional information when running.
Chris Lattner24943d22010-06-08 16:52:24 +000013
Caroline Tice9dbe7172010-06-16 19:26:52 +000014SRC_ROOT=$1
15TARGET_DIR=$2
16CONFIG_BUILD_DIR=$3
17PYTHON_INSTALL_DIR=$4
18debug_flag=$5
Jim Ingham2396b9f2011-03-01 01:39:04 +000019SWIG=$6
Caroline Tice9dbe7172010-06-16 19:26:52 +000020
21swig_output_file=${SRC_ROOT}/source/LLDBWrapPython.cpp
22swig_input_file=${SRC_ROOT}/scripts/lldb.swig
Johnny Chenf530bfe2011-08-22 22:10:57 +000023swig_python_extensions=${SRC_ROOT}/scripts/Python/python-extensions.swig
24swig_python_wrapper=${SRC_ROOT}/scripts/Python/python-wrapper.swig
Chris Lattner24943d22010-06-08 16:52:24 +000025
26if [ -n "$debug_flag" -a "$debug_flag" == "-debug" ]
27then
28 Debug=1
29else
30 Debug=0
31fi
32
33
Greg Claytonb3448432011-03-24 21:19:54 +000034HEADER_FILES="${SRC_ROOT}/include/lldb/lldb.h"\
Caroline Ticec8b0e902010-10-18 23:00:51 +000035" ${SRC_ROOT}/include/lldb/lldb-defines.h"\
36" ${SRC_ROOT}/include/lldb/lldb-enumerations.h"\
37" ${SRC_ROOT}/include/lldb/lldb-forward.h"\
38" ${SRC_ROOT}/include/lldb/lldb-forward-rtti.h"\
39" ${SRC_ROOT}/include/lldb/lldb-types.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000040" ${SRC_ROOT}/include/lldb/API/SBAddress.h"\
41" ${SRC_ROOT}/include/lldb/API/SBBlock.h"\
42" ${SRC_ROOT}/include/lldb/API/SBBreakpoint.h"\
43" ${SRC_ROOT}/include/lldb/API/SBBreakpointLocation.h"\
44" ${SRC_ROOT}/include/lldb/API/SBBroadcaster.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000045" ${SRC_ROOT}/include/lldb/API/SBCommandInterpreter.h"\
46" ${SRC_ROOT}/include/lldb/API/SBCommandReturnObject.h"\
Greg Claytond8c62532010-10-07 04:19:01 +000047" ${SRC_ROOT}/include/lldb/API/SBCommunication.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000048" ${SRC_ROOT}/include/lldb/API/SBCompileUnit.h"\
Enrico Granata91544802011-09-06 19:20:51 +000049" ${SRC_ROOT}/include/lldb/API/SBData.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000050" ${SRC_ROOT}/include/lldb/API/SBDebugger.h"\
51" ${SRC_ROOT}/include/lldb/API/SBError.h"\
52" ${SRC_ROOT}/include/lldb/API/SBEvent.h"\
Johnny Chen4ead2e92010-08-27 22:35:26 +000053" ${SRC_ROOT}/include/lldb/API/SBFileSpec.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000054" ${SRC_ROOT}/include/lldb/API/SBFrame.h"\
55" ${SRC_ROOT}/include/lldb/API/SBFunction.h"\
Greg Claytond8c62532010-10-07 04:19:01 +000056" ${SRC_ROOT}/include/lldb/API/SBHostOS.h"\
57" ${SRC_ROOT}/include/lldb/API/SBInputReader.h"\
Greg Clayton5c4c7462010-10-06 03:09:58 +000058" ${SRC_ROOT}/include/lldb/API/SBInstruction.h"\
59" ${SRC_ROOT}/include/lldb/API/SBInstructionList.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000060" ${SRC_ROOT}/include/lldb/API/SBLineEntry.h"\
61" ${SRC_ROOT}/include/lldb/API/SBListener.h"\
62" ${SRC_ROOT}/include/lldb/API/SBModule.h"\
63" ${SRC_ROOT}/include/lldb/API/SBProcess.h"\
64" ${SRC_ROOT}/include/lldb/API/SBSourceManager.h"\
Caroline Tice1ca48b02010-09-22 16:41:52 +000065" ${SRC_ROOT}/include/lldb/API/SBStream.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000066" ${SRC_ROOT}/include/lldb/API/SBStringList.h"\
67" ${SRC_ROOT}/include/lldb/API/SBSymbol.h"\
68" ${SRC_ROOT}/include/lldb/API/SBSymbolContext.h"\
Greg Claytond8c62532010-10-07 04:19:01 +000069" ${SRC_ROOT}/include/lldb/API/SBSymbolContextList.h"\
Caroline Tice9dbe7172010-06-16 19:26:52 +000070" ${SRC_ROOT}/include/lldb/API/SBTarget.h"\
71" ${SRC_ROOT}/include/lldb/API/SBThread.h"\
72" ${SRC_ROOT}/include/lldb/API/SBType.h"\
Caroline Tice1ca48b02010-09-22 16:41:52 +000073" ${SRC_ROOT}/include/lldb/API/SBValue.h"\
74" ${SRC_ROOT}/include/lldb/API/SBValueList.h"
Chris Lattner24943d22010-06-08 16:52:24 +000075
Enrico Granata91544802011-09-06 19:20:51 +000076INTERFACE_FILES = "${SRC_ROOT}/scripts/Python/interface/SBAddress.i"\
77" ${SRC_ROOT}/scripts/Python/interface/SBBlock.i" \
78" ${SRC_ROOT}/scripts/Python/interface/SBBreakpoint.i" \
79" ${SRC_ROOT}/scripts/Python/interface/SBBreakpointLocation.i" \
80" ${SRC_ROOT}/scripts/Python/interface/SBBroadcaster.i" \
81" ${SRC_ROOT}/scripts/Python/interface/SBCommandInterpreter.i" \
82" ${SRC_ROOT}/scripts/Python/interface/SBCommandReturnObject.i" \
83" ${SRC_ROOT}/scripts/Python/interface/SBCommunication.i" \
84" ${SRC_ROOT}/scripts/Python/interface/SBCompileUnit.i" \
85" ${SRC_ROOT}/scripts/Python/interface/SBData.i" \
86" ${SRC_ROOT}/scripts/Python/interface/SBDebugger.i" \
87" ${SRC_ROOT}/scripts/Python/interface/SBError.i" \
88" ${SRC_ROOT}/scripts/Python/interface/SBEvent.i" \
89" ${SRC_ROOT}/scripts/Python/interface/SBFileSpec.i" \
90" ${SRC_ROOT}/scripts/Python/interface/SBFrame.i" \
91" ${SRC_ROOT}/scripts/Python/interface/SBFunction.i" \
92" ${SRC_ROOT}/scripts/Python/interface/SBHostOS.i" \
93" ${SRC_ROOT}/scripts/Python/interface/SBInputReader.i" \
94" ${SRC_ROOT}/scripts/Python/interface/SBInstruction.i" \
95" ${SRC_ROOT}/scripts/Python/interface/SBInstructionList.i" \
96" ${SRC_ROOT}/scripts/Python/interface/SBLineEntry.i" \
97" ${SRC_ROOT}/scripts/Python/interface/SBListener.i" \
98" ${SRC_ROOT}/scripts/Python/interface/SBModule.i" \
99" ${SRC_ROOT}/scripts/Python/interface/SBProcess.i" \
100" ${SRC_ROOT}/scripts/Python/interface/SBSourceManager.i" \
101" ${SRC_ROOT}/scripts/Python/interface/SBStream.i" \
102" ${SRC_ROOT}/scripts/Python/interface/SBStringList.i" \
103" ${SRC_ROOT}/scripts/Python/interface/SBSymbol.i" \
104" ${SRC_ROOT}/scripts/Python/interface/SBSymbolContext.i" \
105" ${SRC_ROOT}/scripts/Python/interface/SBTarget.i" \
106" ${SRC_ROOT}/scripts/Python/interface/SBThread.i" \
107" ${SRC_ROOT}/scripts/Python/interface/SBType.i" \
108" ${SRC_ROOT}/scripts/Python/interface/SBValue.i" \
109" ${SRC_ROOT}/scripts/Python/interface/SBValueList.i"
Chris Lattner24943d22010-06-08 16:52:24 +0000110
111if [ $Debug == 1 ]
112then
113 echo "Header files are:"
114 echo ${HEADER_FILES}
115fi
116
Enrico Granata91544802011-09-06 19:20:51 +0000117if [ $Debug == 1 ]
118then
119 echo "SWIG interface files are:"
120 echo ${INTERFACE_FILES}
121fi
122
Chris Lattner24943d22010-06-08 16:52:24 +0000123NeedToUpdate=0
124
Chris Lattner24943d22010-06-08 16:52:24 +0000125
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000126if [ ! -f ${swig_output_file} ]
Chris Lattner24943d22010-06-08 16:52:24 +0000127then
128 NeedToUpdate=1
129 if [ $Debug == 1 ]
130 then
131 echo "Failed to find LLDBWrapPython.cpp"
132 fi
133fi
134
135if [ $NeedToUpdate == 0 ]
136then
137 for hdrfile in ${HEADER_FILES}
138 do
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000139 if [ $hdrfile -nt ${swig_output_file} ]
Chris Lattner24943d22010-06-08 16:52:24 +0000140 then
141 NeedToUpdate=1
142 if [ $Debug == 1 ]
143 then
144 echo "${hdrfile} is newer than ${swig_output_file}"
145 echo "swig file will need to be re-built."
146 fi
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000147 break
Chris Lattner24943d22010-06-08 16:52:24 +0000148 fi
149 done
150fi
151
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000152if [ $NeedToUpdate == 0 ]
153then
Enrico Granata91544802011-09-06 19:20:51 +0000154 for intffile in ${INTERFACE_FILES}
155 do
156 if [ $intffile -nt ${swig_output_file} ]
157 then
158 NeedToUpdate=1
159 if [ $Debug == 1 ]
160 then
161 echo "${intffile} is newer than ${swig_output_file}"
162 echo "swig file will need to be re-built."
163 fi
164 break
165 fi
166 done
167fi
168
169if [ $NeedToUpdate == 0 ]
170then
Johnny Chenb4d1fff2010-08-26 20:04:17 +0000171 if [ ${swig_input_file} -nt ${swig_output_file} ]
172 then
173 NeedToUpdate=1
174 if [ $Debug == 1 ]
175 then
176 echo "${swig_input_file} is newer than ${swig_output_file}"
177 echo "swig file will need to be re-built."
178 fi
179 fi
180fi
181
Caroline Tice7826c882010-10-26 03:11:13 +0000182if [ $NeedToUpdate == 0 ]
183then
Johnny Chenf530bfe2011-08-22 22:10:57 +0000184 if [ ${swig_python_extensions} -nt ${swig_output_file} ]
Caroline Tice7826c882010-10-26 03:11:13 +0000185 then
186 NeedToUpdate=1
187 if [ $Debug == 1 ]
188 then
Johnny Chenf530bfe2011-08-22 22:10:57 +0000189 echo "${swig_python_extensions} is newer than ${swig_output_file}"
190 echo "swig file will need to be re-built."
191 fi
192 fi
193fi
194
195if [ $NeedToUpdate == 0 ]
196then
197 if [ ${swig_python_wrapper} -nt ${swig_output_file} ]
198 then
199 NeedToUpdate=1
200 if [ $Debug == 1 ]
201 then
202 echo "${swig_python_wrapper} is newer than ${swig_output_file}"
Caroline Tice7826c882010-10-26 03:11:13 +0000203 echo "swig file will need to be re-built."
204 fi
205 fi
206fi
207
Caroline Tice9dbe7172010-06-16 19:26:52 +0000208os_name=`uname -s`
209python_version=`/usr/bin/python --version 2>&1 | sed -e 's,Python ,,' -e 's,[.][0-9],,2' -e 's,[a-z][a-z][0-9],,'`
210
211if [ "$os_name" == "Darwin" ]
212then
213 framework_python_dir="${TARGET_DIR}/LLDB.framework/Resources/Python"
214else
215 framework_python_dir="${PYTHON_INSTALL_DIR}/python${python_version}"
216fi
217
Chris Lattner24943d22010-06-08 16:52:24 +0000218
219if [ ! -L "${framework_python_dir}/_lldb.so" ]
220then
221 NeedToUpdate=1
222fi
223
224if [ ! -f "${framework_python_dir}/lldb.py" ]
225then
226 NeedToUpdate=1
227fi
228
229
230if [ $NeedToUpdate == 0 ]
231then
232 echo "Everything is up-to-date."
233 exit 0
234else
235 echo "SWIG needs to be re-run."
Caroline Tice7826c882010-10-26 03:11:13 +0000236 if [ -f ${swig_output_file} ]
237 then
238 rm ${swig_output_file}
239 fi
Chris Lattner24943d22010-06-08 16:52:24 +0000240fi
241
242
243# Build the SWIG C++ wrapper file for Python.
244
Jim Ingham2396b9f2011-03-01 01:39:04 +0000245$SWIG -c++ -shadow -python -I"/usr/include" -I"${SRC_ROOT}/include" -I./. -outdir "${CONFIG_BUILD_DIR}" -o "${swig_output_file}" "${swig_input_file}"
Chris Lattner24943d22010-06-08 16:52:24 +0000246
Johnny Chen22e418a2011-04-29 19:22:24 +0000247# Implement the iterator protocol and/or eq/ne operators for some lldb objects.
Caroline Tice558be582010-06-30 16:22:25 +0000248# Append global variable to lldb Python module.
Johnny Chen14097802011-04-28 21:31:18 +0000249# And initialize the lldb debugger subsystem.
Caroline Tice558be582010-06-30 16:22:25 +0000250current_dir=`pwd`
Johnny Chen14097802011-04-28 21:31:18 +0000251if [ -f "${current_dir}/modify-python-lldb.py" ]
Caroline Tice558be582010-06-30 16:22:25 +0000252then
Johnny Chen14097802011-04-28 21:31:18 +0000253 python ${current_dir}/modify-python-lldb.py ${CONFIG_BUILD_DIR}
Caroline Tice558be582010-06-30 16:22:25 +0000254fi
Caroline Tice5790e062010-10-28 21:51:20 +0000255
256# Fix the "#include" statement in the swig output file
257
258if [ -f "${current_dir}/edit-swig-python-wrapper-file.py" ]
259then
260 python ${current_dir}/edit-swig-python-wrapper-file.py
261 if [ -f "${swig_output_file}.edited" ]
262 then
263 mv "${swig_output_file}.edited" ${swig_output_file}
264 fi
265fi