diff options
Diffstat (limited to 'lldb/scripts/Python')
-rw-r--r-- | lldb/scripts/Python/buildSwigPython.py | 782 |
1 files changed, 0 insertions, 782 deletions
diff --git a/lldb/scripts/Python/buildSwigPython.py b/lldb/scripts/Python/buildSwigPython.py deleted file mode 100644 index 1b1c8c68cb6..00000000000 --- a/lldb/scripts/Python/buildSwigPython.py +++ /dev/null @@ -1,782 +0,0 @@ -""" Python SWIG wrapper creation script Windows/LINUX/OSX platform - - -------------------------------------------------------------------------- - File: buildSwigPython.py - - Overview: Creates SWIG Python C++ Script Bridge wrapper code. This - script is called by build-swig-wrapper-classes.py in turn. - - Gotchas: Python debug complied pythonXX_d.lib is required for SWIG - to build correct LLDBWrapperPython.cpp in order for Visual - Studio to compile successfully. The release version of the - Python lib will not work. - LLDB (dir) CMakeLists.txt uses windows environmental - variables $PYTHON_INCLUDE and $PYTHON_LIB to locate - Python files required for the build. - - Copyright: None. - -------------------------------------------------------------------------- - -""" - -# Python modules: -import os # Provide directory and file handling, determine OS information -import sys # sys.executable -import subprocess # Call external programs -import shutil # File handling - -# Third party modules: - -# In-house modules: -import utilsOsType # Determine the OS type this script is running on -import utilsDebug # Debug Python scripts - -# User facing text: -strMsgLldbDisablePythonEnv = "Python build aborted as LLDB_DISABLE_PYTHON \ -environmental variable is defined" -strMsgLldbDisableGccEnv = "Python build aborted as GCC_PREPROCESSOR_DEFINITIONS \ -environmental variable is defined" -strMsgHdrFiles = "Header files are:" -strMsgIFaceFiles = "SWIG interface files are" -strErrMsgProgFail = "Program failure: " -strMsgFileNewrSwigOpFile = "\'%s\' is newer than \'%s\'\nSWIG file will need to be re-built" -strMsgFileNotExist = "\'%s\' could not be found\nSWIG file will need to be re-built" -strErrMsgOsTypeUnknown = "Unable to determine current OS type" -strMsgNotNeedUpdate = "Everything is up-to-date" -strMsgSwigNeedRebuild = "SWIG needs to be re-run" -strErrMsgSwigParamsMissing = "This script was not passed '--swigExecutable' as required." -strMsgSwigExecute = "SWIG executing the following:\n\'%s'" -strErrMsgSwigExecute = "SWIG failed: %s" -strErrMsgPythonExecute = "Python script '%s' failed: %s" -strMsgSwigNoGenDep = "SWIG ran with no generated dependencies, script exit early" -strMsgSwigGenDep = "SWIG ran and generated dependencies, script exit early, deleted '%s'" -strErrMsgFrameWkPyDirNotExist = "Unable to find the LLDB. Framework directory is '%s'" -strMsgFoundLldbFrameWkDir = "Found '%s'" -strErrMsgModifyPythonLldbPyFileNotFound = "Unable to find '%s' in '%s'" - -#++--------------------------------------------------------------------------- -# Details: Retrieve the list of hard coded lldb header file names and -# put in the program's dictArgs map container. Make paths compatible -# with the current OS. -# Note this does not necessarily match the content of those -# directories. The resultant header string is inserted into the -# dictionary vDictArgs key "--headerFiles". -# Args: vDictArgs - (RW) Program input parameters. -# Returns: Bool - True = success, False = failure. -# Throws: None. -#-- -def get_header_files(vDictArgs): - dbg = utilsDebug.CDebugFnVerbose("Python script get_header_files()") - listHeaderFiles = ["/include/lldb/API/lldb.h", # .sh has /include/lldb/lldb.h 21/11/2013 - "/include/lldb/lldb-defines.h", - "/include/lldb/lldb-enumerations.h", - "/include/lldb/lldb-forward.h", - "/include/lldb/lldb-forward-rtti.h", - "/include/lldb/lldb-types.h", - "/include/lldb/API/SBAddress.h", - "/include/lldb/API/SBAttachInfo.h", - "/include/lldb/API/SBBlock.h", - "/include/lldb/API/SBBreakpoint.h", - "/include/lldb/API/SBBreakpointLocation.h", - "/include/lldb/API/SBBroadcaster.h", - "/include/lldb/API/SBCommandInterpreter.h", - "/include/lldb/API/SBCommandReturnObject.h", - "/include/lldb/API/SBCommunication.h", - "/include/lldb/API/SBCompileUnit.h", - "/include/lldb/API/SBData.h", - "/include/lldb/API/SBDebugger.h", - "/include/lldb/API/SBError.h", - "/include/lldb/API/SBEvent.h", - "/include/lldb/API/SBExpressionOptions.h", - "/include/lldb/API/SBFileSpec.h", - "/include/lldb/API/SBFrame.h", - "/include/lldb/API/SBFunction.h", - "/include/lldb/API/SBHostOS.h", - "/include/lldb/API/SBInputReader.h", - "/include/lldb/API/SBInstruction.h", - "/include/lldb/API/SBInstructionList.h", - "/include/lldb/API/SBLanguageRuntime.h", - "/include/lldb/API/SBLaunchInfo.h", - "/include/lldb/API/SBLineEntry.h", - "/include/lldb/API/SBListener.h", - "/include/lldb/API/SBModule.h", - "/include/lldb/API/SBModuleSpec.h", - "/include/lldb/API/SBProcess.h", - "/include/lldb/API/SBSourceManager.h", - "/include/lldb/API/SBStream.h", - "/include/lldb/API/SBStringList.h", - "/include/lldb/API/SBSymbol.h", - "/include/lldb/API/SBSymbolContext.h", - "/include/lldb/API/SBSymbolContextList.h", - "/include/lldb/API/SBTarget.h", - "/include/lldb/API/SBThread.h", - "/include/lldb/API/SBThreadCollection.h", - "/include/lldb/API/SBType.h", - "/include/lldb/API/SBTypeCategory.h", - "/include/lldb/API/SBTypeFilter.h", - "/include/lldb/API/SBTypeFormat.h", - "/include/lldb/API/SBTypeNameSpecifier.h", - "/include/lldb/API/SBTypeSummary.h", - "/include/lldb/API/SBTypeSynthetic.h", - "/include/lldb/API/SBValue.h", - "/include/lldb/API/SBValueList.h", - "/include/lldb/API/SBWatchpoint.h"] - bDebug = "-d" in vDictArgs - strRt = vDictArgs["--srcRoot"] - strRt = os.path.normcase(strRt) - - strHeaderFiles = "" - for strHdr in listHeaderFiles[0: len(listHeaderFiles)]: - strHdr = os.path.normcase(strHdr) - strHeaderFiles += " %s%s" % (strRt, strHdr) - - if bDebug: - print(strMsgHdrFiles) - print(strHeaderFiles) - - vDictArgs["--headerFiles"] = strHeaderFiles - - return True - -#++--------------------------------------------------------------------------- -# Details: Retrieve the list of hard coded lldb SWIG interface file names and -# put in the program's dictArgs map container. Make paths compatible -# with the current OS. -# Note this does not necessarily match the content of those -# directories. The resultant interface string is inserted into the -# dictionary vDictArgs key "--ifaceFiles". -# Args: vDictArgs - (RW) Program input parameters. -# Returns: Bool - True = success, False = failure. -# Throws: None. -#-- -def get_interface_files(vDictArgs): - dbg = utilsDebug.CDebugFnVerbose("Python script get_interface_files()") - listIFaceFiles = ["/scripts/interface/SBAddress.i", - "/scripts/interface/SBAttachInfo.i", - "/scripts/interface/SBBlock.i", - "/scripts/interface/SBBreakpoint.i", - "/scripts/interface/SBBreakpointLocation.i", - "/scripts/interface/SBBroadcaster.i", - "/scripts/interface/SBCommandInterpreter.i", - "/scripts/interface/SBCommandReturnObject.i", - "/scripts/interface/SBCommunication.i", - "/scripts/interface/SBCompileUnit.i", - "/scripts/interface/SBData.i", - "/scripts/interface/SBDebugger.i", - "/scripts/interface/SBDeclaration.i", - "/scripts/interface/SBError.i", - "/scripts/interface/SBEvent.i", - "/scripts/interface/SBExpressionOptions.i", - "/scripts/interface/SBFileSpec.i", - "/scripts/interface/SBFrame.i", - "/scripts/interface/SBFunction.i", - "/scripts/interface/SBHostOS.i", - "/scripts/interface/SBInputReader.i", - "/scripts/interface/SBInstruction.i", - "/scripts/interface/SBInstructionList.i", - "/scripts/interface/SBLanguageRuntime.i", - "/scripts/interface/SBLaunchInfo.i", - "/scripts/interface/SBLineEntry.i", - "/scripts/interface/SBListener.i", - "/scripts/interface/SBModule.i", - "/scripts/interface/SBModuleSpec.i", - "/scripts/interface/SBProcess.i", - "/scripts/interface/SBSourceManager.i", - "/scripts/interface/SBStream.i", - "/scripts/interface/SBStringList.i", - "/scripts/interface/SBSymbol.i", - "/scripts/interface/SBSymbolContext.i", - "/scripts/interface/SBTarget.i", - "/scripts/interface/SBThread.i", - "/scripts/interface/SBThreadCollection.i", - "/scripts/interface/SBType.i", - "/scripts/interface/SBTypeCategory.i", - "/scripts/interface/SBTypeFilter.i", - "/scripts/interface/SBTypeFormat.i", - "/scripts/interface/SBTypeNameSpecifier.i", - "/scripts/interface/SBTypeSummary.i", - "/scripts/interface/SBTypeSynthetic.i", - "/scripts/interface/SBValue.i", - "/scripts/interface/SBValueList.i", - "/scripts/interface/SBWatchpoint.i"] - bDebug = "-d" in vDictArgs - strRt = vDictArgs["--srcRoot"] - strRt = os.path.normcase(strRt) - - strInterfaceFiles = "" - for strIFace in listIFaceFiles[0: len(listIFaceFiles)]: - strIFace = os.path.normcase(strIFace) - strInterfaceFiles += " %s%s" % (strRt, strIFace) - - if bDebug: - print(strMsgIFaceFiles) - print(strInterfaceFiles) - - vDictArgs["--ifaceFiles"] = strInterfaceFiles - - return True - -#++--------------------------------------------------------------------------- -# Details: Compare which file is newer. -# Args: vFile1 - (R) File name path. -# vFile2 - (R) File name path. -# Returns: Int - 0 = both not exist, 1 = file 1 newer, 2 = file 2 newer, -# 3 = file 1 not exist. -# Throws: None. -#-- -def which_file_is_newer(vFile1, vFile2): - bF1 = os.path.exists(vFile1) - bF2 = os.path.exists(vFile2) - if bF1 == False and bF2 == False: - return 0 # Both files not exist - if bF1 == False: - return 3 # File 1 not exist - if bF2 == False: - return 1 # File 1 is newer / file 2 not exist - f1Stamp = os.path.getmtime(vFile1) - f2Stamp = os.path.getmtime(vFile2) - if f1Stamp > f2Stamp: - return 1 # File 1 is newer - - return 2 # File 2 is newer than file 1 - -#++--------------------------------------------------------------------------- -# Details: Determine whether the specified file exists. -# Args: vDictArgs - (R) Program input parameters. -# vstrFileNamePath - (R) Check this file exists. -# Returns: Bool - True = Files exists, false = not found. -# Throws: None. -#-- -def check_file_exists(vDictArgs, vstrFileNamePath): - bExists = False - bDebug = "-d" in vDictArgs - - if os.path.exists(vstrFileNamePath): - bExists = True - elif bDebug: - print((strMsgFileNotExist % vstrFileNamePath)) - - return bExists - -#++--------------------------------------------------------------------------- -# Details: Determine whether the specified file is newer than the -# LLDBWrapPython.cpp file. -# Args: vDictArgs - (R) Program input parameters. -# vstrSwigOpFileNamePath - (R) LLDBWrapPython.cpp file. -# vstrFileNamePath - (R) Specific file. -# Returns: Bool - True = SWIG update required, false = no update required. -# Throws: None. -#-- -def check_newer_file(vDictArgs, vstrSwigOpFileNamePath, vstrFileNamePath): - bNeedUpdate = False - bDebug = "-d" in vDictArgs - - strMsg = "" - nResult = which_file_is_newer(vstrFileNamePath, vstrSwigOpFileNamePath) - if nResult == 1: - strMsg = strMsgFileNewrSwigOpFile % (vstrFileNamePath, - vstrSwigOpFileNamePath) - bNeedUpdate = True - elif nResult == 3: - strMsg = strMsgFileNotExist % vstrFileNamePath - bNeedUpdate = True - - if bNeedUpdate and bDebug: - print(strMsg) - - return bNeedUpdate - -#++--------------------------------------------------------------------------- -# Details: Determine whether the any files in the list are newer than the -# LLDBWrapPython.cpp file. -# Args: vDictArgs - (R) Program input parameters. -# vstrSwigOpFileNamePath - (R) LLDBWrapPython.cpp file. -# vstrFiles - (R) Multi string file names ' ' delimiter. -# Returns: Bool - True = SWIG update required, false = no update required. -# Throws: None. -#-- -def check_newer_files(vDictArgs, vstrSwigOpFileNamePath, vstrFiles): - bNeedUpdate = False - - listFiles = vstrFiles.split() - for strFile in listFiles: - if check_newer_file(vDictArgs, vstrSwigOpFileNamePath, strFile): - bNeedUpdate = True - break - - return bNeedUpdate - -#++--------------------------------------------------------------------------- -# Details: Retrieve the directory path for Python's dist_packages/ -# site_package folder on a Windows platform. -# Args: vDictArgs - (R) Program input parameters. -# Returns: Bool - True = function success, False = failure. -# Str - Python Framework directory path. -# strErrMsg - Error description on task failure. -# Throws: None. -#-- -def get_framework_python_dir_windows(vDictArgs): - dbg = utilsDebug.CDebugFnVerbose("Python script get_framework_python_dir_windows()") - bOk = True - strWkDir = "" - strErrMsg = "" - - # We are being built by LLVM, 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. - from distutils.sysconfig import get_python_lib - strPythonInstallDir = "" - bHaveArgPrefix = "--prefix" in vDictArgs - if bHaveArgPrefix: - strPythonInstallDir = vDictArgs["--prefix"] - if strPythonInstallDir.__len__() != 0: - strWkDir = get_python_lib(True, False, strPythonInstallDir) - else: - strWkDir = get_python_lib(True, False) - strWkDir += "/lldb" - strWkDir = os.path.normcase(strWkDir) - - return (bOk, strWkDir, strErrMsg) - -#++--------------------------------------------------------------------------- -# Details: Retrieve the directory path for Python's dist_packages/ -# site_package folder on a UNIX style platform. -# Args: vDictArgs - (R) Program input parameters. -# Returns: Bool - True = function success, False = failure. -# Str - Python Framework directory path. -# strErrMsg - Error description on task failure. -# Throws: None. -#-- -def get_framework_python_dir_other_platforms(vDictArgs): - dbg = utilsDebug.CDebugFnVerbose("Python script get_framework_python_dir_other_platform()") - bOk = True - strWkDir = "" - strErrMsg = "" - bDbg = "-d" in vDictArgs - - bMakeFileCalled = "-m" in vDictArgs - if bMakeFileCalled: - dbg.dump_text("Built by LLVM") - return get_framework_python_dir_windows(vDictArgs) - else: - dbg.dump_text("Built by XCode") - # We are being built by XCode, so all the lldb Python files can go - # into the LLDB.framework/Resources/Python subdirectory. - strWkDir = vDictArgs["--targetDir"] - strWkDir += "/LLDB.framework" - if os.path.exists(strWkDir): - if bDbg: - print((strMsgFoundLldbFrameWkDir % strWkDir)) - strWkDir += "/Resources/Python/lldb" - strWkDir = os.path.normcase(strWkDir) - else: - bOk = False - strErrMsg = strErrMsgFrameWkPyDirNotExist % strWkDir - - return (bOk, strWkDir, strErrMsg) - -#++--------------------------------------------------------------------------- -# Details: Retrieve the directory path for Python's dist_packages/ -# site_package folder depending on the type of OS platform being -# used. -# Args: vDictArgs - (R) Program input parameters. -# Returns: Bool - True = function success, False = failure. -# Str - Python Framework directory path. -# strErrMsg - Error description on task failure. -# Throws: None. -#-- -def get_framework_python_dir(vDictArgs): - dbg = utilsDebug.CDebugFnVerbose("Python script get_framework_python_dir()") - bOk = True - strWkDir = "" - strErrMsg = "" - - eOSType = utilsOsType.determine_os_type() - if eOSType == utilsOsType.EnumOsType.Unknown: - bOk = False - strErrMsg = strErrMsgOsTypeUnknown - elif eOSType == utilsOsType.EnumOsType.Windows: - bOk, strWkDir, strErrMsg = get_framework_python_dir_windows(vDictArgs) - else: - bOk, strWkDir, strErrMsg = get_framework_python_dir_other_platforms(vDictArgs) - - return (bOk, strWkDir, strErrMsg) - -#++--------------------------------------------------------------------------- -# Details: Retrieve the configuration build path if present and valid (using -# parameter --cfgBlddir or copy the Python Framework directory. -# Args: vDictArgs - (R) Program input parameters. -# vstrFrameworkPythonDir - (R) Python framework directory. -# Returns: Bool - True = function success, False = failure. -# Str - Config directory path. -# strErrMsg - Error description on task failure. -# Throws: None. -#-- -def get_config_build_dir(vDictArgs, vstrFrameworkPythonDir): - dbg = utilsDebug.CDebugFnVerbose("Python script get_config_build_dir()") - bOk = True - strErrMsg = "" - - strConfigBldDir = "" - bHaveConfigBldDir = "--cfgBldDir" in vDictArgs - if bHaveConfigBldDir: - strConfigBldDir = vDictArgs["--cfgBldDir"] - if (bHaveConfigBldDir == False) or (strConfigBldDir.__len__() == 0): - strConfigBldDir = vstrFrameworkPythonDir - - return (bOk, strConfigBldDir, strErrMsg) - -""" -Removes given file, ignoring error if it doesn't exist. -""" -def remove_ignore_enoent(filename): - try: - os.remove(filename) - except OSError as e: - import errno - if e.errno != errno.ENOENT: - raise - -#++--------------------------------------------------------------------------- -# Details: Do a SWIG code rebuild. Any number returned by SWIG which is not -# zero is treated as an error. The generate dependencies flag decides -# how SWIG is rebuilt and if set false will cause the script to exit -# immediately with the exit status + 200 if status is not zero. -# Args: vDictArgs - (R) Program input parameters. -# vstrSwigDepFile - (R) SWIG dependency file. -# vstrCfgBldDir - (R) Configuration build directory. -# vstrSwigOpFile - (R) SWIG output file. -# vstrSwigIpFile - (R) SWIG input file. -# Returns: Bool - True = function success, False = failure. -# strMsg - Error or status message. -# nExitResult - Exit result of SWIG executable. -# - 0 = Success. -# - 1 = Success, exit this script and parent script. -# - +200 = A SWIG error status result. -# Throws: None. -#-- -def do_swig_rebuild(vDictArgs, vstrSwigDepFile, vstrCfgBldDir, - vstrSwigOpFile, vstrSwigIpFile): - dbg = utilsDebug.CDebugFnVerbose("Python script do_swig_rebuild()") - bOk = True - strMsg = "" - bDbg = "-d" in vDictArgs - bGenDependencies = "-M" in vDictArgs - strSwig = vDictArgs["--swigExecutable"] - strSrcRoot = vDictArgs["--srcRoot"] - - strCfg = vstrCfgBldDir - strOp = vstrSwigOpFile - strIp = vstrSwigIpFile - strSi = os.path.normcase("./.") - strRoot = strSrcRoot + "/include" - strRoot = os.path.normcase(strRoot) - strDep = "" - if bGenDependencies: - strDep = vstrSwigDepFile + ".tmp" - - # Build the SWIG args list - strCmd = "%s " % strSwig - strCmd += "-c++ " - strCmd += "-shadow " - strCmd += "-python " - strCmd += "-threads " - strCmd += "-I\"%s\" " % strRoot - strCmd += "-I\"%s\" " % strSi - strCmd += "-D__STDC_LIMIT_MACROS " - strCmd += "-D__STDC_CONSTANT_MACROS " - if bGenDependencies: - strCmd += "-MMD -MF \"%s\" " % strDep - strCmd += "-outdir \"%s\" " % strCfg - strCmd += "-o \"%s\" " % strOp - strCmd += "\"%s\" " % strIp - if bDbg: - print((strMsgSwigExecute % strCmd)) - - # Execute SWIG - process = subprocess.Popen(strCmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, shell=True) - # Wait for SWIG process to terminate - strStdOut, strStdErr = process.communicate() - nResult = process.returncode - if nResult != 0: - bOk = False - nResult += 200 - strMsg = strErrMsgSwigExecute % strStdErr - else: - if bDbg and (strStdOut.__len__() != 0): - strMsg = strStdOut - - if bGenDependencies: - if bOk: - if os.path.exists(strDep): - shutil.move(strDep, vstrSwigDepFile) - else: - os.remove(strDep) - nResult = 1 # Exit this script and parent script - if bDbg: - strMsg = strMsgSwigGenDep % strDep - else: - strMsg = strMsgSwigNoGenDep + strMsg - - return bOk, strMsg, nResult - -#++--------------------------------------------------------------------------- -# Details: Execute another Python script from this script in a separate -# process. No data is passed back to the caller script. It is -# assumed should any exit result be returned that -ve numbers are -# error conditions. A zero or +ve numbers mean ok/warning/status. -# Args: vDictArgs - (R) Program input parameters. -# vstrArgs - (R) Space separated parameters passed to python. -# Returns: Bool - True = function success, False = failure. -# strMsg - Error or status message. -# Throws: None. -#-- -def run_python_script(vDictArgs, vstrArgs): - dbg = utilsDebug.CDebugFnVerbose("Python script run_python_script()") - bOk = True - strMsg = "" - bDbg = "-d" in vDictArgs - - strPy = "%s %s" % (sys.executable, vstrArgs) - process = subprocess.Popen(strPy, shell=True) - strStdOut, strStdErr = process.communicate() - nResult = process.returncode - if nResult < 0: - bOk = False - strErr = strStdErr - if strErr == None: - strErr = "No error given" - strMsg = strErrMsgPythonExecute % (vstrArgs, strErr) - else: - if bDbg: - strOut = strStdOut - if strOut == None: - strOut = "No status given" - strMsg = strOut - - return bOk, strMsg - -#++--------------------------------------------------------------------------- -# Details: Implement the iterator protocol and/or eq/ne operators for some -# lldb objects. -# Append global variable to lldb Python module. -# And initialize the lldb debugger subsystem. -# Args: vDictArgs - (R) Program input parameters. -# vstrCfgBldDir - (R) Configuration build directory. -# Returns: Bool - True = function success, False = failure. -# strMsg - Error or status message. -# Throws: None. -#-- -def do_modify_python_lldb(vDictArgs, vstrCfgBldDir): - dbg = utilsDebug.CDebugFnVerbose("Python script do_modify_python_lldb()") - bOk = True - strMsg = "" - bDbg = "-d" in vDictArgs - strCwd = vDictArgs["--srcRoot"] # /llvm/tools/lldb - strCwd += "/scripts/Python" - strPyScript = "modify-python-lldb.py" - strPath = "%s/%s" % (strCwd, strPyScript) - strPath = os.path.normcase(strPath) - - bOk = os.path.exists(strPath) - if not bOk: - strMsg = strErrMsgModifyPythonLldbPyFileNotFound % (strPyScript, strPath) - return bOk, strMsg - - strPyArgs = "%s %s" % (strPath, vstrCfgBldDir) - bOk, strMsg = run_python_script(vDictArgs, strPyArgs) - - return bOk, strMsg - -#----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- - -""" Details: Program main entry point fn. Called by another Python script. - - -------------------------------------------------------------------------- - Details: This script is to be called by another Python script. It is not - intended to be called directly i.e from the command line. - If environmental variable "LLDB_DISABLE_PYTHON" is defined/exists - it will cause the script to end early creating nothing. - If environmental variable "GCC_PREPROCESSOR_DEFINITIONS" is - defined/exists it will cause the script to end early creating - nothing. - Args: vDictArgs - (R) Map of parameter names to values. Used to for the - the SWIG required parameters to create code. Note - this container does get amended with more data. - -d (optional) Determines whether or not this script - outputs additional information when running. - -m (optional) Specify called from Makefile system. If given locate - the LLDBWrapPython.cpp in --srcRoot/source folder - else in the --targetDir folder. - -M (optional) Specify want SWIG to generate a dependency file. - --srcRoot The root of the lldb source tree. - --targetDir Where the lldb framework/shared library gets put. - --cfgBldDir Where the buildSwigPythonLLDB.py program will - (optional) put the lldb.py file it generated from running - SWIG. - --prefix Is the root directory used to determine where - (optional) third-party modules for scripting languages should - be installed. Where non-Darwin systems want to put - the .py and .so files so that Python can find them - automatically. Python install directory. - --swigExecutable Full path to the SWIG executable. (Determined and - passed by buildSwigWrapperClasses.py to here) - Results: 0 Success - 1 Success, generated dependencies removed - LLDBWrapPython.cpp.d. - -100+ Error from this script to the caller script. - -100 Error program failure with optional message. - -200+ - 200 +- the SWIG exit result. - - -------------------------------------------------------------------------- - -""" -def main(vDictArgs): - dbg = utilsDebug.CDebugFnVerbose("Python script main()") - bOk = True - strMsg = "" - - if not "--swigExecutable" in vDictArgs: - strErrMsgProgFail += strErrMsgSwigParamsMissing - return (-100, strErrMsgProgFail) - - bDebug = "-d" in vDictArgs - - strSwigDepFile = "" - strSwigDepOptions = "" - bGenDependencies = "-M" in vDictArgs - if bGenDependencies: - strSwigDepFile = vDictArgs["--targetDir"] + "/LLDBWrapPython.cpp.d" - strSwigDepOptions = "-MMD -MF \"%s.tmp\"" % strSwigDepFile - strSwigDepFile = os.path.normcase(strSwigDepFile) - strSwigDepOptions = os.path.normcase(strSwigDepOptions) - - bMakeFileCalled = "-m" in vDictArgs - strSwigOutputFile = "" - if bMakeFileCalled: - strSwigOutputFile = vDictArgs["--targetDir"] + "/LLDBWrapPython.cpp" - else: - strSwigOutputFile = vDictArgs["--srcRoot"] + "/source/LLDBWrapPython.cpp" - strSwigOutputFile = os.path.normcase(strSwigOutputFile) - - strRt = vDictArgs["--srcRoot"] - strSwigInputFile = strRt + "/scripts/lldb.swig" - strSwigPythonExtensions = strRt + "/scripts/Python/python-extensions.swig" - strSwigPythonWrapper = strRt + "/scripts/Python/python-wrapper.swig" - strSwigPythonTypemaps = strRt + "/scripts/Python/python-typemaps.swig" - strSwigPythonSwigsafecast = strRt + "/scripts/Python/python-swigsafecast.swig" - strSwigInputFile = os.path.normcase(strSwigInputFile) - strSwigPythonExtensions = os.path.normcase(strSwigPythonExtensions) - strSwigPythonWrapper = os.path.normcase(strSwigPythonWrapper) - strSwigPythonTypemaps = os.path.normcase(strSwigPythonTypemaps) - strSwigPythonSwigsafecast = os.path.normcase(strSwigPythonSwigsafecast) - - strEnvVarLLDBDisablePython = os.getenv("LLDB_DISABLE_PYTHON", None) - # We don't want Python for this build, but touch the output file so we - # don't have to conditionalize the build on this as well. - # Note, at present iOS doesn't have Python, so if you're building for - # iOS be sure to set LLDB_DISABLE_PYTHON to 1. - if (strEnvVarLLDBDisablePython != None) and \ - (strEnvVarLLDBDisablePython == "1"): - remove_ignore_enoent(strSwigOutputFile) - open(strSwigOutputFile, 'w').close() # Touch the file - if bDebug: - strMsg = strMsgLldbDisablePythonEnv - return (0, strMsg) - - # If this project is being built with LLDB_DISABLE_PYTHON defined, - # don't bother generating Python swig bindings -- we don't have - # Python available. - strEnvVarGccPreprocessDefs = os.getenv("GCC_PREPROCESSOR_DEFINITIONS", - None) - if (strEnvVarGccPreprocessDefs != None) or \ - (strEnvVarLLDBDisablePython != None): - remove_ignore_enoent(strSwigOutputFile) - open(strSwigOutputFile, 'w').close() # Touch the file - if bDebug: - strMsg = strMsgLldbDisableGccEnv - return (0, strMsg) - - bOk = bOk and get_header_files(vDictArgs) - bOk = bOk and get_interface_files(vDictArgs) - - strFrameworkPythonDir = "" - if bOk: - bNeedUpdate = (check_file_exists(vDictArgs, strSwigOutputFile) == False) - dbg.dump_object("check_file_exists strSwigOutputFile, bNeedUpdate =", bNeedUpdate) - if bNeedUpdate == False: - bNeedUpdate = check_newer_files(vDictArgs, strSwigOutputFile, vDictArgs["--headerFiles"]) - dbg.dump_object("check_newer_files header files than strSwigOutputFile, bNeedUpdate =", bNeedUpdate) - if bNeedUpdate == False: - bNeedUpdate = check_newer_files(vDictArgs, strSwigOutputFile, vDictArgs["--ifaceFiles"]) - dbg.dump_object("check_newer_files iface files than strSwigOutputFile, bNeedUpdate =", bNeedUpdate) - if bNeedUpdate == False: - bNeedUpdate = check_newer_file(vDictArgs, strSwigOutputFile, strSwigInputFile) - dbg.dump_object("check_newer_files strSwigInputFile than strSwigOutputFile, bNeedUpdate =", bNeedUpdate) - if bNeedUpdate == False: - bNeedUpdate = check_newer_file(vDictArgs, strSwigOutputFile, strSwigPythonExtensions) - dbg.dump_object("check_newer_files strSwigPythonExtensions than strSwigOutputFile, bNeedUpdate =", bNeedUpdate) - if bNeedUpdate == False: - bNeedUpdate = check_newer_file(vDictArgs, strSwigOutputFile, strSwigPythonWrapper) - dbg.dump_object("check_newer_files strSwigPythonWrapper than strSwigOutputFile, bNeedUpdate =", bNeedUpdate) - if bNeedUpdate == False: - bNeedUpdate = check_newer_file(vDictArgs, strSwigOutputFile, strSwigPythonTypemaps) - dbg.dump_object("check_newer_files strSwigPythonTypemaps than strSwigOutputFile, bNeedUpdate =", bNeedUpdate) - if bNeedUpdate == False: - bNeedUpdate = check_newer_file(vDictArgs, strSwigOutputFile, strSwigPythonSwigsafecast) - dbg.dump_object("check_newer_files strSwigPythonSwigsafecast than strSwigOutputFile, bNeedUpdate =", bNeedUpdate) - - # Determine where to put the files - bOk, strFrameworkPythonDir, strMsg = get_framework_python_dir(vDictArgs) - - if bOk: - bOk, strCfgBldDir, strMsg = get_config_build_dir(vDictArgs, strFrameworkPythonDir) - - if bOk and (bNeedUpdate == False): - strDllPath = strFrameworkPythonDir + "/_lldb.so" - strDllPath = os.path.normcase(strDllPath) - bSymbolicLink = check_file_exists(vDictArgs, strDllPath) and os.path.islink(strDllPath) - bNeedUpdate = not bSymbolicLink - dbg.dump_object("check_file_exists(vDictArgs, strDllPath) and os.path.islink(strDllPath), bNeedUpdate =", bNeedUpdate) - - if bOk and (bNeedUpdate == False): - strInitPiPath = strFrameworkPythonDir + "/__init__.py" - strInitPiPath = os.path.normcase(strInitPiPath) - print(strInitPiPath) - bNeedUpdate = not check_file_exists(vDictArgs, strInitPiPath) - dbg.dump_object("check_file_exists(vDictArgs, strInitPiPath), bNeedUpdate =", bNeedUpdate) - - if bOk: - if bNeedUpdate == False: - strMsg = strMsgNotNeedUpdate - return (0, strMsg) - else: - print(strMsgSwigNeedRebuild) - bOk, strMsg, nExitResult = do_swig_rebuild(vDictArgs, strSwigDepFile, - strCfgBldDir, - strSwigOutputFile, - strSwigInputFile) - bGenDependencies = "-M" in vDictArgs - if bGenDependencies == True: - return (nExitResult, strMsg) - - if bOk: - bOk, strMsg = do_modify_python_lldb(vDictArgs, strCfgBldDir) - - if bOk: - return (0, strMsg) - else: - strErrMsgProgFail += strMsg - return (-100, strErrMsgProgFail) - -#----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- -#----------------------------------------------------------------------------- - -# This script can be called by another Python script by calling the main() -# function directly -if __name__ == "__main__": - print("Script cannot be called directly, called by buildSwigWrapperClasses.py") |