diff options
Diffstat (limited to 'lldb/scripts/Python/finishSwigPythonLLDB.py')
-rw-r--r-- | lldb/scripts/Python/finishSwigPythonLLDB.py | 624 |
1 files changed, 624 insertions, 0 deletions
diff --git a/lldb/scripts/Python/finishSwigPythonLLDB.py b/lldb/scripts/Python/finishSwigPythonLLDB.py new file mode 100644 index 00000000000..5e2f2fefaa0 --- /dev/null +++ b/lldb/scripts/Python/finishSwigPythonLLDB.py @@ -0,0 +1,624 @@ +""" Python SWIG post process script for each language + + -------------------------------------------------------------------------- + File: finishSwigPythonLLDB.py + + Overview: Python script(s) to post process SWIG Python C++ Script + Bridge wrapper code on the Windows/LINUX/OSX platform. + The Python scripts are equivalent to the shell script (.sh) + files. + 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 some place 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. + + Environment: OS: Windows Vista or newer, LINUX, OSX. + IDE: Visual Studio 2013 Plugin Python Tools (PTVS) + Script: Python 2.6/2.7.5 x64 + Other: None. + + 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 (20/12/2013). + 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 # System specific parameters and functions +import errno # OS error results +import shutil # High-level operations on files and collections of files +import subprocess # Call external programs +import ctypes # Invoke Windows API for creating symlinks + +# 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: +strMsgOsVersion = "The current OS is %s"; +strMsgPyVersion = "The Python version is %d.%d"; +strErrMsgProgFail = "Program failure: "; +strErrMsgFrameWkPyDirNotExist = "Unable to find the LLDB.framework directory '%s'"; +strMsgFoundLldbFrameWkDir = "Found '%s'"; +strMsgPyFileLocatedHere = "Python file will be put in '%s'"; +strMsgFrameWkPyExists = "'%s' already exists"; +strMsgFrameWkPyMkDir = "Making directory '%s'"; +strErrMsgCreateFrmWkPyDirFailed = "Unable to create directory '%s' error: %s"; +strMsglldbsoExists = "'%s' already exists"; +strMsglldbsoMk = "Creating symlink for _lldb.so"; +strErrMsgCpLldbpy = "copying lldb to lldb package directory"; +strErrMsgCreatePyPkgMissingSlash = "Parameter 3 fn create_py_pkg() missing slash"; +strErrMsgMkLinkExecute = "Command mklink failed: %s"; +strErrMsgMakeSymlink = "creating symbolic link"; +strErrMsgUnexpected = "Unexpected error: %s"; + +#++--------------------------------------------------------------------------- +# Details: Copy files needed by lldb/macosx/heap.py to build libheap.dylib. +# Args: vDictArgs - (R) Program input parameters. +# vstrFrameworkPythonDir - (R) Python framework directory. +# Returns: Bool - True = function success, False = failure. +# Str - Error description on task failure. +# Throws: None. +#-- +def macosx_copy_file_for_heap( vDictArgs, vstrFrameworkPythonDir ): + dbg = utilsDebug.CDebugFnVerbose( "Python script macosx_copy_file_for_heap()" ); + bOk = True; + strMsg = ""; + + eOSType = utilsOsType.determine_os_type(); + if eOSType != utilsOsType.EnumOsType.Darwin: + return (bOk, strMsg); + + strHeapDir = vstrFrameworkPythonDir + "/macosx/heap"; + strHeapDir = os.path.normcase( strHeapDir ); + if (os.path.exists( strHeapDir ) and os.path.isdir( strHeapDir )): + return (bOk, strMsg); + + os.makedirs( strHeapDir ); + + strRoot = vDictArgs[ "--srcRoot" ]; + strSrc = strRoot + "/examples/darwin/heap_find/heap/heap_find.cpp"; + shutil.copy( strSrc, strHeapDir ); + strSrc = strRoot + "/examples/darwin/heap_find/heap/Makefile"; + shutil.copy( strSrc, strHeapDir ); + + return (bOk, strMsg); + +#++--------------------------------------------------------------------------- +# Details: Create Python packages and Python __init__ files. +# Args: vDictArgs - (R) Program input parameters. +# vstrFrameworkPythonDir - (R) Python framework directory. +# vstrPkgDir - (R) Destination for copied Python files. +# vListPkgFiles - (R) List of source Python files. +# Returns: Bool - True = function success, False = failure. +# Str - Error description on task failure. +# Throws: None. +#-- +def create_py_pkg( vDictArgs, vstrFrameworkPythonDir, vstrPkgDir, vListPkgFiles ): + dbg = utilsDebug.CDebugFnVerbose( "Python script create_py_pkg()" ); + dbg.dump_object( "Package file(s):", vListPkgFiles ); + + bOk = True; + strMsg = ""; + + if vstrPkgDir.__len__() != 0 and vstrPkgDir[ 0 ] != "/": + bOk = False; + strMsg = strErrMsgCreatePyPkgMissingSlash; + return (bOk, strMsg); + + strPkgName = vstrPkgDir; + strPkgName = "lldb" + strPkgName.replace( "/", "." ); + strPkgName = os.path.normcase( strPkgName ); + + strPkgDir = vstrFrameworkPythonDir; + strPkgDir += vstrPkgDir; + strPkgDir = os.path.normcase( strPkgDir ); + + if not(os.path.exists( strPkgDir ) and os.path.isdir( strPkgDir )): + os.makedirs( strPkgDir ); + + for strPkgFile in vListPkgFiles: + if os.path.exists( strPkgFile ) and os.path.isfile( strPkgFile ): + strPyFile = os.path.normcase( strPkgFile ); + shutil.copy( strPyFile, strPkgDir ); + + # Create a packet init files if there wasn't one + strPkgIniFile = strPkgDir + "/__init__.py"; + strPkgIniFile = os.path.normcase( strPkgIniFile ); + if os.path.exists( strPkgIniFile ) and os.path.isfile( strPkgIniFile ): + return (bOk, strMsg); + + strPyScript = "__all__ = ["; + strDelimiter = ""; + for strPkgFile in vListPkgFiles: + strPyFile = os.path.normcase( strPkgFile ); + if os.path.exists( strPyFile ) and os.path.isfile( strPyFile ): + strBaseName = os.path.basename( strPkgFile ); + nPos = strBaseName.find( "." ); + if nPos != -1: + strBaseName = strBaseName[ 0 : nPos ]; + strPyScript += "%s\"%s\"" % (strDelimiter, strBaseName); + strDelimiter = ","; + strPyScript += "]\n"; + strPyScript += "for x in __all__:\n"; + strPyScript += "\t__import__('%s.' + x)" % strPkgName; + + file = open( strPkgIniFile, "w" ); + file.write( strPyScript ); + file.close(); + + return (bOk, strMsg); + +#++--------------------------------------------------------------------------- +# Details: Copy the lldb.py file into the lldb package directory and rename +# to __init_.py. +# Args: vstrFrameworkPythonDir - (R) Python framework directory. +# vstrCfgBldDir - (R) Config directory path. +# Returns: Bool - True = function success, False = failure. +# Str - Error description on task failure. +# Throws: None. +#-- +def copy_lldbpy_file_to_lldb_pkg_dir( vstrFrameworkPythonDir, vstrCfgBldDir ): + dbg = utilsDebug.CDebugFnVerbose( "Python script copy_lldbpy_file_to_lldb_pkg_dir()" ); + bOk = True; + strMsg = ""; + + strSrc = vstrCfgBldDir + "/lldb.py"; + strSrc = os.path.normcase( strSrc ); + strDst = vstrFrameworkPythonDir + "/__init__.py"; + strDst = os.path.normcase( strDst ); + + if not os.path.exists( strSrc ): + return (bOk, strMsg); + + try: + shutil.copyfile( strSrc, strDst ); + except IOError as e: + bOk = False; + strMsg = "I/O error( %d ): %s %s" % (e.errno, e.strerror, strErrMsgCpLldbpy); + if e.errno == 2: + strMsg += " Src:'%s' Dst:'%s'" % (strSrc, strDst); + except: + bOk = False; + strMsg = strErrMsgUnexpected % sys.exec_info()[ 0 ]; + + return (bOk, strMsg); + +#++--------------------------------------------------------------------------- +# Details: Make the symbolic that the script bridge for Python will need in +# the Python framework directory. Code for specific to Windows. +# Args: vDictArgs - (R) Program input parameters. +# vstrFrameworkPythonDir - (R) Python framework directory. +# vstrDllName - (R) File name for _lldb.dll. +# Returns: Bool - True = function success, False = failure. +# Str - Error description on task failure. +# Throws: None. +#-- +def make_symlink_windows( vDictArgs, vstrFrameworkPythonDir, vstrDllName ): + dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_windows()" ); + bOk = True; + strMsg = ""; + + bDbg = vDictArgs.has_key( "-d" ); + strTarget = vstrDllName + ".pyd"; + strDLLPath = "%s\\%s" % (vstrFrameworkPythonDir, strTarget); + strTarget = os.path.normcase( strDLLPath ); + strSrc = ""; + + os.chdir( vstrFrameworkPythonDir ); + bMakeFileCalled = vDictArgs.has_key( "-m" ); + if not bMakeFileCalled: + strSrc = os.path.normcase( "../../../LLDB" ); + else: + strLibFileExtn = ".dll"; + strSrc = os.path.normcase( "../../../bin/liblldb%s" % strLibFileExtn ); + + if os.path.isfile( strTarget ): + if bDbg: + print strMsglldbsoExists % strTarget; + return (bOk, strMsg); + + if bDbg: + print strMsglldbsoMk; + + try: + csl = ctypes.windll.kernel32.CreateHardLinkW + csl.argtypes = (ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_uint32) + csl.restype = ctypes.c_ubyte + if csl(strTarget, strSrc, 0) == 0: + raise ctypes.WinError() + except Exception as e: + bOk = False; + strMsg = "WinError( %d ): %s %s" % (e.errno, e.strerror, strErrMsgMakeSymlink); + strMsg += " Src:'%s' Target:'%s'" % (strSrc, strTarget); + + return (bOk, strMsg); + +#++--------------------------------------------------------------------------- +# Details: Make the symbolic link that the script bridge for Python will need in +# the Python framework directory. Code for all platforms apart from +# Windows. +# Args: vDictArgs - (R) Program input parameters. +# vstrFrameworkPythonDir - (R) Python framework directory. +# vstrSoName - (R) File name for _lldb.so. +# Returns: Bool - True = function success, False = failure. +# Str - Error description on task failure. +# Throws: None. +#-- +def make_symlink_other_platforms( vDictArgs, vstrFrameworkPythonDir, vstrSoPath ): + dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink_other_platforms()" ); + bOk = True; + strMsg = ""; + bDbg = vDictArgs.has_key( "-d" ); + strTarget = vstrSoPath + ".so"; + strSoPath = "%s/%s" % (vstrFrameworkPythonDir, strTarget); + strTarget = os.path.normcase( strSoPath ); + strSrc = ""; + + os.chdir( vstrFrameworkPythonDir ); + bMakeFileCalled = vDictArgs.has_key( "-m" ); + if not bMakeFileCalled: + strSrc = os.path.normcase( "../../../LLDB" ); + else: + strLibFileExtn = ""; + eOSType = utilsOsType.determine_os_type(); + if eOSType == utilsOsType.EnumOsType.Linux: + strLibFileExtn = ".so"; + elif eOSType == utilsOsType.EnumOsType.Darwin: + strLibFileExtn = ".dylib"; + strSrc = os.path.normcase( "../../../liblldb%s" % strLibFileExtn ); + + if os.path.islink( strTarget ): + if bDbg: + print strMsglldbsoExists % strTarget; + return (bOk, strMsg); + + if bDbg: + print strMsglldbsoMk; + + try: + os.symlink( strSrc, strTarget ); + except OSError as e: + bOk = False; + strMsg = "OSError( %d ): %s %s" % (e.errno, e.strerror, strErrMsgMakeSymlink); + strMsg += " Src:'%s' Target:'%s'" % (strSrc, strTarget); + except: + bOk = False; + strMsg = strErrMsgUnexpected % sys.exec_info()[ 0 ]; + + return (bOk, strMsg); + +#++--------------------------------------------------------------------------- +# Details: Make the symlink that the script bridge for Python will need in +# the Python framework directory. +# Args: vDictArgs - (R) Program input parameters. +# vstrFrameworkPythonDir - (R) Python framework directory. +# Returns: Bool - True = function success, False = failure. +# strErrMsg - Error description on task failure. +# Throws: None. +#-- +def make_symlink( vDictArgs, vstrFrameworkPythonDir ): + dbg = utilsDebug.CDebugFnVerbose( "Python script make_symlink()" ); + bOk = True; + strWkDir = ""; + strErrMsg = ""; + strSoFileName = "_lldb"; + + eOSType = utilsOsType.determine_os_type(); + if eOSType == utilsOsType.EnumOsType.Unknown: + bOk = False; + strErrMsg = strErrMsgOsTypeUnknown; + elif eOSType == utilsOsType.EnumOsType.Windows: + bOk, strErrMsg = make_symlink_windows( vDictArgs, + vstrFrameworkPythonDir, + strSoFileName ); + else: + bOk, strErrMsg = make_symlink_other_platforms( vDictArgs, + vstrFrameworkPythonDir, + strSoFileName ); + return (bOk, strErrMsg); + +#++--------------------------------------------------------------------------- +# Details: Look for the directory in which to put the Python files; if it +# does not already exist, attempt to make it. +# Args: vDictArgs - (R) Program input parameters. +# vstrFrameworkPythonDir - (R) Python framework directory. +# Returns: Bool - True = function success, False = failure. +# Str - Error description on task failure. +# Throws: None. +#-- +def find_or_create_python_dir( vDictArgs, vstrFrameworkPythonDir ): + dbg = utilsDebug.CDebugFnVerbose( "Python script find_or_create_python_dir()" ); + bOk = True; + strMsg = ""; + bDbg = vDictArgs.has_key( "-d" ); + + if os.path.isdir( vstrFrameworkPythonDir ): + if bDbg: + print strMsgFrameWkPyExists % vstrFrameworkPythonDir; + return (bOk, strMsg); + + if bDbg: + print strMsgFrameWkPyMkDir % vstrFrameworkPythonDir; + + try: + os.makedirs( vstrFrameworkPythonDir ); + except OSError as exception: + bOk = False; + strMsg = strErrMsgCreateFrmWkPyDirFailed % (vstrFrameworkPythonDir, + os.strerror( exception.errno )); + + return (bOk, strMsg); + +#++--------------------------------------------------------------------------- +# 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 = vDictArgs.has_key( "--cfgBldDir" ); + if bHaveConfigBldDir: + strConfigBldDir = vDictArgs[ "--cfgBldDir" ]; + if (bHaveConfigBldDir == False) or (strConfigBldDir.__len__() == 0): + strConfigBldDir = vstrFrameworkPythonDir; + + return (bOk, strConfigBldDir, strErrMsg); + +#++--------------------------------------------------------------------------- +# Details: Determine where to put the files. 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 = vDictArgs.has_key( "--prefix" ); + if bHaveArgPrefix: + strPythonInstallDir = vDictArgs[ "--prefix" ]; + + bHaveArgCmakeBuildConfiguration = vDictArgs.has_key( "--cmakeBuildConfiguration" ); + if bHaveArgCmakeBuildConfiguration: + strPythonInstallDir += '/' + vDictArgs[ "--cmakeBuildConfiguration" ]; + + 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 = vDictArgs.has_key( "-d" ); + + bMakeFileCalled = vDictArgs.has_key( "-m" ); + 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: 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. + Args: vDictArgs - (R) Map of parameter names to values. + -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. + --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. + Results: 0 Success + -100+ Error from this script to the caller script. + -100 Error program failure with optional message. + + -------------------------------------------------------------------------- + +""" +def main( vDictArgs ): + dbg = utilsDebug.CDebugFnVerbose( "Python script main()" ); + bOk = True; + strMsg = ""; + strErrMsgProgFail = ""; + + bDbg = vDictArgs.has_key( "-d" ); + + eOSType = utilsOsType.determine_os_type(); + if bDbg: + pyVersion = sys.version_info; + print strMsgOsVersion % utilsOsType.EnumOsType.name_of( eOSType ); + print strMsgPyVersion % (pyVersion[ 0 ], pyVersion[ 1 ]); + + bOk, strFrameworkPythonDir, strMsg = get_framework_python_dir( vDictArgs ); + + if bOk: + bOk, strCfgBldDir, strMsg = get_config_build_dir( vDictArgs, strFrameworkPythonDir ); + if bOk and bDbg: + print strMsgPyFileLocatedHere % strFrameworkPythonDir; + + if bOk: + bOk, strMsg = find_or_create_python_dir( vDictArgs, strFrameworkPythonDir ); + + if bOk: + bOk, strMsg = make_symlink( vDictArgs, strFrameworkPythonDir ); + + if bOk: + bOk, strMsg = copy_lldbpy_file_to_lldb_pkg_dir( strFrameworkPythonDir, + strCfgBldDir ); + strRoot = vDictArgs[ "--srcRoot" ]; + if bOk: + # lldb + listPkgFiles = [ strRoot + "/source/Interpreter/embedded_interpreter.py" ]; + bOk, strMsg = create_py_pkg( vDictArgs, strFrameworkPythonDir, "", listPkgFiles ); + + if bOk: + # lldb/formatters/cpp + listPkgFiles = [ strRoot + "/examples/synthetic/gnu_libstdcpp.py", + strRoot + "/examples/synthetic/libcxx.py" ]; + bOk, strMsg = create_py_pkg( vDictArgs, strFrameworkPythonDir, "/formatters/cpp", listPkgFiles ); + + if bOk: + # Make an empty __init__.py in lldb/runtime as this is required for + # Python to recognize lldb.runtime as a valid package (and hence, + # lldb.runtime.objc as a valid contained package) + listPkgFiles = []; + bOk, strMsg = create_py_pkg( vDictArgs, strFrameworkPythonDir, "/runtime", listPkgFiles ); + + if bOk: + # lldb/formatters + # Having these files copied here ensure that lldb/formatters is a + # valid package itself + listPkgFiles = [ strRoot + "/examples/summaries/cocoa/cache.py", + strRoot + "/examples/summaries/cocoa/metrics.py", + strRoot + "/examples/summaries/cocoa/attrib_fromdict.py", + strRoot + "/examples/summaries/cocoa/Logger.py" ]; + bOk, strMsg = create_py_pkg( vDictArgs, strFrameworkPythonDir, "/formatters", listPkgFiles ); + + if bOk: + # lldb/utils + listPkgFiles = [ strRoot + "/examples/python/symbolication.py" ]; + bOk, strMsg = create_py_pkg( vDictArgs, strFrameworkPythonDir, "/utils", listPkgFiles ); + + if bOk and (eOSType == utilsOsType.EnumOsType.Darwin): + # lldb/macosx + listPkgFiles = [ strRoot + "/examples/python/crashlog.py", + strRoot + "/examples/darwin/heap_find/heap.py" ]; + bOk, strMsg = create_py_pkg( vDictArgs, strFrameworkPythonDir, "/macosx", listPkgFiles ); + + if bOk and (eOSType == utilsOsType.EnumOsType.Darwin): + # lldb/diagnose + listPkgFiles = [ strRoot + "/examples/python/diagnose_unwind.py", + strRoot + "/examples/python/diagnose_nsstring.py" ]; + bOk, strMsg = create_py_pkg( vDictArgs, strFrameworkPythonDir, "/diagnose", listPkgFiles ); + + if bOk: + bOk, strMsg = macosx_copy_file_for_heap( vDictArgs, strFrameworkPythonDir ); + + 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 finishSwigWrapperClasses.py"; + |