summaryrefslogtreecommitdiff
path: root/scripts/Python/finishSwigPythonLLDB.py
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/Python/finishSwigPythonLLDB.py')
-rw-r--r--scripts/Python/finishSwigPythonLLDB.py945
1 files changed, 0 insertions, 945 deletions
diff --git a/scripts/Python/finishSwigPythonLLDB.py b/scripts/Python/finishSwigPythonLLDB.py
deleted file mode 100644
index ff6a1318a19a..000000000000
--- a/scripts/Python/finishSwigPythonLLDB.py
+++ /dev/null
@@ -1,945 +0,0 @@
-""" 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.
-
- 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 shutil # High-level operations on files and collections of files
-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: "
-strErrMsgLLDBPyFileNotNotFound = "Unable to locate lldb.py at path '%s'"
-strMsgCopyLLDBPy = "Copying lldb.py from '%s' to '%s'"
-strErrMsgFrameWkPyDirNotExist = "Unable to find the LLDB.framework directory '%s'"
-strMsgCreatePyPkgCopyPkgFile = "create_py_pkg: Copied file '%s' to folder '%s'"
-strMsgCreatePyPkgInitFile = "create_py_pkg: Creating pakage init file '%s'"
-strMsgCreatePyPkgMkDir = "create_py_pkg: Created folder '%s'"
-strMsgConfigBuildDir = "Configuration build directory located at '%s'"
-strMsgFoundLldbFrameWkDir = "Found '%s'"
-strMsgPyFileLocatedHere = "Python file will be put in '%s'"
-strMsgFrameWkPyExists = "Python output folder '%s' already exists"
-strMsgFrameWkPyMkDir = "Python output folder '%s' will be created"
-strErrMsgCreateFrmWkPyDirFailed = "Unable to create directory '%s' error: %s"
-strMsgSymlinkExists = "Symlink for '%s' already exists"
-strMsgSymlinkMk = "Creating symlink for %s (%s -> %s)"
-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"
-strMsgCopySixPy = "Copying six.py from '%s' to '%s'"
-strErrMsgCopySixPyFailed = "Unable to copy '%s' to '%s'"
-
-
-def is_debug_interpreter():
- return hasattr(sys, 'gettotalrefcount')
-
-#++---------------------------------------------------------------------------
-# 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 = os.path.join(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 = os.path.normpath(vDictArgs["--srcRoot"])
- strSrc = os.path.join(
- strRoot,
- "examples",
- "darwin",
- "heap_find",
- "heap",
- "heap_find.cpp")
- shutil.copy(strSrc, strHeapDir)
- strSrc = os.path.join(
- 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)
- bDbg = "-d" in vDictArgs
-
- bOk = True
- strMsg = ""
-
- if vstrPkgDir.__len__() != 0 and vstrPkgDir[0] != "/":
- bOk = False
- strMsg = strErrMsgCreatePyPkgMissingSlash
- return (bOk, strMsg)
-
- strPkgName = vstrPkgDir
- strPkgName = "lldb" + strPkgName.replace("/", ".")
-
- strPkgDir = vstrFrameworkPythonDir
- strPkgDir += vstrPkgDir
- strPkgDir = os.path.normcase(strPkgDir)
-
- if not(os.path.exists(strPkgDir) and os.path.isdir(strPkgDir)):
- if bDbg:
- print((strMsgCreatePyPkgMkDir % strPkgDir))
- os.makedirs(strPkgDir)
-
- for strPkgFile in vListPkgFiles:
- if os.path.exists(strPkgFile) and os.path.isfile(strPkgFile):
- if bDbg:
- print((strMsgCreatePyPkgCopyPkgFile % (strPkgFile, strPkgDir)))
- shutil.copy(strPkgFile, strPkgDir)
-
- # Create a packet init files if there wasn't one
- strPkgIniFile = os.path.normpath(os.path.join(strPkgDir, "__init__.py"))
- if os.path.exists(strPkgIniFile) and os.path.isfile(strPkgIniFile):
- return (bOk, strMsg)
-
- strPyScript = "__all__ = ["
- strDelimiter = ""
- for strPkgFile in vListPkgFiles:
- if os.path.exists(strPkgFile) and os.path.isfile(strPkgFile):
- 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
-
- if bDbg:
- print((strMsgCreatePyPkgInitFile % strPkgIniFile))
- 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: vDictArgs - (R) Program input parameters.
-# 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(
- vDictArgs,
- vstrFrameworkPythonDir,
- vstrCfgBldDir):
- dbg = utilsDebug.CDebugFnVerbose(
- "Python script copy_lldbpy_file_to_lldb_pkg_dir()")
- bOk = True
- bDbg = "-d" in vDictArgs
- strMsg = ""
-
- strSrc = os.path.join(vstrCfgBldDir, "lldb.py")
- strSrc = os.path.normcase(strSrc)
- strDst = os.path.join(vstrFrameworkPythonDir, "__init__.py")
- strDst = os.path.normcase(strDst)
-
- if not os.path.exists(strSrc):
- strMsg = strErrMsgLLDBPyFileNotNotFound % strSrc
- return (bOk, strMsg)
-
- try:
- if bDbg:
- print((strMsgCopyLLDBPy % (strSrc, strDst)))
- 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 link on a Windows platform.
-# Args: vstrSrcFile - (R) Source file name.
-# vstrTargetFile - (R) Destination file name.
-# Returns: Bool - True = function success, False = failure.
-# Str - Error description on task failure.
-# Throws: None.
-#--
-
-
-def make_symlink_windows(vstrSrcPath, vstrTargetPath):
- print(("Making symlink from %s to %s" % (vstrSrcPath, vstrTargetPath)))
- dbg = utilsDebug.CDebugFnVerbose("Python script make_symlink_windows()")
- bOk = True
- strErrMsg = ""
- # If the src file doesn't exist, this is an error and we should throw.
- src_stat = os.stat(vstrSrcPath)
-
- try:
- target_stat = os.stat(vstrTargetPath)
- # If the target file exists but refers to a different file, delete it so that we can
- # re-create the link. This can happen if you run this script once (creating a link)
- # and then delete the source file (so that a brand new file gets created the next time
- # you compile and link), and then re-run this script, so that both the target hardlink
- # and the source file exist, but the target refers to an old copy of
- # the source.
- if (target_stat.st_ino == src_stat.st_ino) and (
- target_stat.st_dev == src_stat.st_dev):
- return (bOk, strErrMsg)
-
- os.remove(vstrTargetPath)
- except:
- # If the target file don't exist, ignore this exception, we will link
- # it shortly.
- pass
-
- 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(vstrTargetPath, vstrSrcPath, 0) == 0:
- raise ctypes.WinError()
- except Exception as e:
- if e.errno != 17:
- bOk = False
- strErrMsg = "WinError(%d): %s %s" % (
- e.errno, e.strerror, strErrMsgMakeSymlink)
- strErrMsg += " Src:'%s' Target:'%s'" % (
- vstrSrcPath, vstrTargetPath)
-
- return (bOk, strErrMsg)
-
-#++---------------------------------------------------------------------------
-# Details: Make the symbolic link on a UNIX style platform.
-# Args: vstrSrcFile - (R) Source file name.
-# vstrTargetFile - (R) Destination file name.
-# Returns: Bool - True = function success, False = failure.
-# Str - Error description on task failure.
-# Throws: None.
-#--
-
-
-def make_symlink_other_platforms(vstrSrcPath, vstrTargetPath):
- dbg = utilsDebug.CDebugFnVerbose(
- "Python script make_symlink_other_platforms()")
- bOk = True
- strErrMsg = ""
-
- try:
- os.symlink(vstrSrcPath, vstrTargetPath)
- except OSError as e:
- bOk = False
- strErrMsg = "OSError(%d): %s %s" % (
- e.errno, e.strerror, strErrMsgMakeSymlink)
- strErrMsg += " Src:'%s' Target:'%s'" % (vstrSrcPath, vstrTargetPath)
- except:
- bOk = False
- strErrMsg = strErrMsgUnexpected % sys.exec_info()[0]
-
- return (bOk, strErrMsg)
-
-
-def make_symlink_native(vDictArgs, strSrc, strTarget):
- eOSType = utilsOsType.determine_os_type()
- bDbg = "-d" in vDictArgs
- bOk = True
- strErrMsg = ""
-
- target_filename = os.path.basename(strTarget)
- if eOSType == utilsOsType.EnumOsType.Unknown:
- bOk = False
- strErrMsg = strErrMsgOsTypeUnknown
- elif eOSType == utilsOsType.EnumOsType.Windows:
- if bDbg:
- print((strMsgSymlinkMk % (target_filename, strSrc, strTarget)))
- bOk, strErrMsg = make_symlink_windows(strSrc,
- strTarget)
- else:
- if os.path.islink(strTarget):
- if bDbg:
- print((strMsgSymlinkExists % target_filename))
- return (bOk, strErrMsg)
- if bDbg:
- print((strMsgSymlinkMk % (target_filename, strSrc, strTarget)))
- bOk, strErrMsg = make_symlink_other_platforms(strSrc,
- strTarget)
-
- return (bOk, strErrMsg)
-
-#++---------------------------------------------------------------------------
-# Details: Make the symbolic link.
-# Args: vDictArgs - (R) Program input parameters.
-# vstrFrameworkPythonDir - (R) Python framework directory.
-# vstrSrcFile - (R) Source file name.
-# vstrTargetFile - (R) Destination file name.
-# Returns: Bool - True = function success, False = failure.
-# Str - Error description on task failure.
-# Throws: None.
-#--
-
-
-def make_symlink(
- vDictArgs,
- vstrFrameworkPythonDir,
- vstrSrcFile,
- vstrTargetFile):
- dbg = utilsDebug.CDebugFnVerbose("Python script make_symlink()")
- bOk = True
- strErrMsg = ""
- bDbg = "-d" in vDictArgs
- strTarget = os.path.join(vstrFrameworkPythonDir, vstrTargetFile)
- strTarget = os.path.normcase(strTarget)
- strSrc = ""
-
- os.chdir(vstrFrameworkPythonDir)
- bMakeFileCalled = "-m" in vDictArgs
- eOSType = utilsOsType.determine_os_type()
- if not bMakeFileCalled:
- strBuildDir = os.path.join("..", "..", "..")
- else:
- # Resolve vstrSrcFile path relatively the build directory
- if eOSType == utilsOsType.EnumOsType.Windows:
- # On a Windows platform the vstrFrameworkPythonDir looks like:
- # llvm\\build\\Lib\\site-packages\\lldb
- strBuildDir = os.path.join("..", "..", "..")
- else:
- # On a UNIX style platform the vstrFrameworkPythonDir looks like:
- # llvm/build/lib/python2.7/site-packages/lldb
- strBuildDir = os.path.join("..", "..", "..", "..")
- strSrc = os.path.normcase(os.path.join(strBuildDir, vstrSrcFile))
-
- return make_symlink_native(vDictArgs, strSrc, strTarget)
-
-
-#++---------------------------------------------------------------------------
-# Details: Make the symbolic that the script bridge for Python will need in
-# the Python framework directory.
-# Args: vDictArgs - (R) Program input parameters.
-# vstrFrameworkPythonDir - (R) Python framework directory.
-# vstrLiblldbName - (R) File name for _lldb library.
-# vstrLiblldbDir - (R) liblldb directory.
-# Returns: Bool - True = function success, False = failure.
-# Str - Error description on task failure.
-# Throws: None.
-#--
-def make_symlink_liblldb(
- vDictArgs,
- vstrFrameworkPythonDir,
- vstrLiblldbFileName,
- vstrLldbLibDir):
- dbg = utilsDebug.CDebugFnVerbose("Python script make_symlink_liblldb()")
- bOk = True
- strErrMsg = ""
- strTarget = vstrLiblldbFileName
- strSrc = ""
-
- eOSType = utilsOsType.determine_os_type()
- if eOSType == utilsOsType.EnumOsType.Windows:
- # When importing an extension module using a debug version of python, you
- # write, for example, "import foo", but the interpreter searches for
- # "foo_d.pyd"
- if is_debug_interpreter():
- strTarget += "_d"
- strTarget += ".pyd"
- else:
- strTarget += ".so"
-
- bMakeFileCalled = "-m" in vDictArgs
- if not bMakeFileCalled:
- strSrc = "LLDB"
- else:
- strLibFileExtn = ""
- if eOSType == utilsOsType.EnumOsType.Windows:
- strSrc = os.path.join("bin", "liblldb.dll")
- else:
- if eOSType == utilsOsType.EnumOsType.Darwin:
- strLibFileExtn = ".dylib"
- else:
- strLibFileExtn = ".so"
- strSrc = os.path.join(vstrLldbLibDir, "liblldb" + strLibFileExtn)
-
- bOk, strErrMsg = make_symlink(
- vDictArgs, vstrFrameworkPythonDir, strSrc, strTarget)
-
- return (bOk, strErrMsg)
-
-#++---------------------------------------------------------------------------
-# Details: Make the symbolic link to the lldb-argdumper.
-# Args: vDictArgs - (R) Program input parameters.
-# vstrFrameworkPythonDir - (R) Python framework directory.
-# vstrArgdumperFileName - (R) File name for lldb-argdumper.
-# Returns: Bool - True = function success, False = failure.
-# Str - Error description on task failure.
-# Throws: None.
-#--
-
-
-def make_symlink_lldb_argdumper(
- vDictArgs,
- vstrFrameworkPythonDir,
- vstrArgdumperFileName):
- dbg = utilsDebug.CDebugFnVerbose(
- "Python script make_symlink_lldb_argdumper()")
- bOk = True
- strErrMsg = ""
- strTarget = vstrArgdumperFileName
- strSrc = ""
-
- eOSType = utilsOsType.determine_os_type()
- if eOSType == utilsOsType.EnumOsType.Windows:
- strTarget += ".exe"
-
- bMakeFileCalled = "-m" in vDictArgs
- if not bMakeFileCalled:
- return (bOk, strErrMsg)
- else:
- strExeFileExtn = ""
- if eOSType == utilsOsType.EnumOsType.Windows:
- strExeFileExtn = ".exe"
- strSrc = os.path.join("bin", "lldb-argdumper" + strExeFileExtn)
-
- bOk, strErrMsg = make_symlink(
- vDictArgs, vstrFrameworkPythonDir, strSrc, strTarget)
-
- return (bOk, strErrMsg)
-
-#++---------------------------------------------------------------------------
-# 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.
-# vstrLldbLibDir - (R) liblldb directory.
-# Returns: Bool - True = function success, False = failure.
-# strErrMsg - Error description on task failure.
-# Throws: None.
-#--
-
-
-def create_symlinks(vDictArgs, vstrFrameworkPythonDir, vstrLldbLibDir):
- dbg = utilsDebug.CDebugFnVerbose("Python script create_symlinks()")
- bOk = True
- strErrMsg = ""
- eOSType = utilsOsType.determine_os_type()
-
- # Make symlink for _lldb
- strLibLldbFileName = "_lldb"
- if bOk:
- bOk, strErrMsg = make_symlink_liblldb(vDictArgs,
- vstrFrameworkPythonDir,
- strLibLldbFileName,
- vstrLldbLibDir)
-
- # Make symlink for lldb-argdumper
- strArgdumperFileName = "lldb-argdumper"
- if bOk:
- bOk, strErrMsg = make_symlink_lldb_argdumper(vDictArgs,
- vstrFrameworkPythonDir,
- strArgdumperFileName)
-
- return (bOk, strErrMsg)
-
-
-def copy_six(vDictArgs, vstrFrameworkPythonDir):
- dbg = utilsDebug.CDebugFnVerbose("Python script copy_six()")
- bDbg = "-d" in vDictArgs
- bOk = True
- strMsg = ""
- site_packages_dir = os.path.dirname(vstrFrameworkPythonDir)
- six_module_filename = "six.py"
- src_file = os.path.join(
- vDictArgs['--srcRoot'],
- "third_party",
- "Python",
- "module",
- "six",
- six_module_filename)
- src_file = os.path.normpath(src_file)
- target = os.path.join(site_packages_dir, six_module_filename)
-
- if bDbg:
- print((strMsgCopySixPy % (src_file, target)))
- try:
- shutil.copyfile(src_file, target)
- except:
- bOk = False
- strMsg = strErrMsgCopySixPyFailed % (src_file, target)
-
- return (bOk, strMsg)
-
-#++---------------------------------------------------------------------------
-# 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 = "-d" in vDictArgs
-
- 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 = "--cfgBldDir" in vDictArgs
- 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 = "--prefix" in vDictArgs
- if bHaveArgPrefix:
- strPythonInstallDir = os.path.normpath(vDictArgs["--prefix"])
-
- bHaveArgCmakeBuildConfiguration = "--cmakeBuildConfiguration" in vDictArgs
- if bHaveArgCmakeBuildConfiguration:
- strPythonInstallDir = os.path.join(
- strPythonInstallDir,
- vDictArgs["--cmakeBuildConfiguration"])
-
- if strPythonInstallDir.__len__() != 0:
- strWkDir = get_python_lib(True, False, strPythonInstallDir)
- else:
- strWkDir = get_python_lib(True, False)
- strWkDir = os.path.normcase(os.path.join(strWkDir, "lldb"))
-
- 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 = os.path.join(strWkDir, "LLDB.framework")
- if os.path.exists(strWkDir):
- if bDbg:
- print((strMsgFoundLldbFrameWkDir % strWkDir))
- strWkDir = os.path.join(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 liblldb directory path, if it exists and is valid.
-# Args: vDictArgs - (R) Program input parameters.
-# Returns: Bool - True = function success, False = failure.
-# Str - liblldb directory path.
-# strErrMsg - Error description on task failure.
-# Throws: None.
-#--
-
-
-def get_liblldb_dir(vDictArgs):
- dbg = utilsDebug.CDebugFnVerbose("Python script get_liblldb_dir()")
- bOk = True
- strErrMsg = ""
-
- strLldbLibDir = ""
- bHaveLldbLibDir = "--lldbLibDir" in vDictArgs
- if bHaveLldbLibDir:
- strLldbLibDir = vDictArgs["--lldbLibDir"]
- if (bHaveLldbLibDir == False) or (strLldbLibDir.__len__() == 0):
- strLldbLibDir = "lib"
-
- return (bOk, strLldbLibDir, 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.
- --lldbLibDir The name of the directory containing liblldb.so.
- (optional) "lib" by default.
- 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 = "-d" in vDictArgs
-
- 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))
- print((strMsgConfigBuildDir % strCfgBldDir))
-
- if bOk:
- bOk, strLldbLibDir, strMsg = get_liblldb_dir(vDictArgs)
-
- if bOk:
- bOk, strMsg = find_or_create_python_dir(
- vDictArgs, strFrameworkPythonDir)
-
- if bOk:
- bOk, strMsg = create_symlinks(
- vDictArgs, strFrameworkPythonDir, strLldbLibDir)
-
- bUseSystemSix = "--useSystemSix" in vDictArgs
-
- if not bUseSystemSix and bOk:
- bOk, strMsg = copy_six(vDictArgs, strFrameworkPythonDir)
-
- if bOk:
- bOk, strMsg = copy_lldbpy_file_to_lldb_pkg_dir(vDictArgs,
- strFrameworkPythonDir,
- strCfgBldDir)
- strRoot = os.path.normpath(vDictArgs["--srcRoot"])
- if bOk:
- # lldb
- listPkgFiles = [
- os.path.join(
- strRoot,
- "source",
- "Interpreter",
- "embedded_interpreter.py")]
- bOk, strMsg = create_py_pkg(
- vDictArgs, strFrameworkPythonDir, "", listPkgFiles)
-
- if bOk:
- # lldb/formatters/cpp
- listPkgFiles = [
- os.path.join(
- strRoot,
- "examples",
- "synthetic",
- "gnu_libstdcpp.py"),
- os.path.join(
- 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 = [
- os.path.join(
- strRoot, "examples", "summaries", "cocoa", "cache.py"), os.path.join(
- strRoot, "examples", "summaries", "synth.py"), os.path.join(
- strRoot, "examples", "summaries", "cocoa", "metrics.py"), os.path.join(
- strRoot, "examples", "summaries", "cocoa", "attrib_fromdict.py"), os.path.join(
- strRoot, "examples", "summaries", "cocoa", "Logger.py")]
- bOk, strMsg = create_py_pkg(
- vDictArgs, strFrameworkPythonDir, "/formatters", listPkgFiles)
-
- if bOk:
- # lldb/utils
- listPkgFiles = [
- os.path.join(
- strRoot,
- "examples",
- "python",
- "symbolication.py")]
- bOk, strMsg = create_py_pkg(
- vDictArgs, strFrameworkPythonDir, "/utils", listPkgFiles)
-
- if bOk and (eOSType == utilsOsType.EnumOsType.Darwin):
- # lldb/macosx
- listPkgFiles = [
- os.path.join(
- strRoot,
- "examples",
- "python",
- "crashlog.py"),
- os.path.join(
- 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 = [
- os.path.join(
- strRoot,
- "examples",
- "python",
- "diagnose_unwind.py"),
- os.path.join(
- 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")