[Lldb-commits] [lldb] r212785 - Get the python scripting interface working on Windows.
Zachary Turner
zturner at google.com
Thu Jul 10 16:47:42 PDT 2014
Author: zturner
Date: Thu Jul 10 18:47:42 2014
New Revision: 212785
URL: http://llvm.org/viewvc/llvm-project?rev=212785&view=rev
Log:
Get the python scripting interface working on Windows.
This patch fixes a number of issues with embedded Python on
Windows. In particular:
1) The script that builds the python modules was normalizing the
case of python filenames during copies. The module name is
the filename, and is case-sensitive, so this was breaking code.
2) Changes the build to not attempt to link against python27.lib
(e.g. the release library) when linking against msvcrt debug
library. Doing a debug build of LLDB with embedded python
support now requires you to provide your own self-compiled
debug version of python.
3) Don't import termios when initializing the interpreter. This
is part of a larger effort to remove the dependency on termios
since it is not available on Windows. This particular instance
was unnecessary and unused.
Reviewed by: Todd Fiala
Differential Revision: http://reviews.llvm.org/D4441
Modified:
lldb/trunk/CMakeLists.txt
lldb/trunk/include/lldb/lldb-python.h
lldb/trunk/scripts/Python/finishSwigPythonLLDB.py
lldb/trunk/source/CMakeLists.txt
lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
Modified: lldb/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/CMakeLists.txt?rev=212785&r1=212784&r2=212785&view=diff
==============================================================================
--- lldb/trunk/CMakeLists.txt (original)
+++ lldb/trunk/CMakeLists.txt Thu Jul 10 18:47:42 2014
@@ -108,10 +108,6 @@ macro(add_lldb_definitions)
endmacro(add_lldb_definitions)
if (NOT LLDB_DISABLE_PYTHON)
- if (MSVC)
- # this definition will stop python from auto linking python27_d.lib when Python.h is included
- add_definitions( -DSWIG_PYTHON_INTERPRETER_NO_DEBUG )
- endif()
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
endif()
Modified: lldb/trunk/include/lldb/lldb-python.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-python.h?rev=212785&r1=212784&r2=212785&view=diff
==============================================================================
--- lldb/trunk/include/lldb/lldb-python.h (original)
+++ lldb/trunk/include/lldb/lldb-python.h Thu Jul 10 18:47:42 2014
@@ -15,44 +15,17 @@
#ifdef LLDB_DISABLE_PYTHON
// Python is disabled in this build
#else
- // If this is a visual studio build
- #if defined( _MSC_VER )
- // Special case for debug build since python unfortunately
- // adds library to the linker path through a #pragma directive
- #if defined( _DEBUG )
- // Python forces a header link to python27_d.lib when building debug.
- // To get around this (because most python packages for Windows
- // don't come with debug python libraries), we undefine _DEBUG, include
- // python.h and then restore _DEBUG.
-
- // The problem with this is that any system level headers included from
- // python.h were also effectively included in 'release' mode when we undefined
- // _DEBUG. To work around this we include headers that python includes
- // before undefining _DEBUG.
- # include <stdlib.h>
- // Undefine to force python to link against the release distro
- # undef _DEBUG
- # include <Python.h>
- # define _DEBUG
-
- #else
- #include <Python.h>
- #endif
-
- #else
- #if defined(__linux__)
- // features.h will define _POSIX_C_SOURCE if _GNU_SOURCE is defined. This value
- // may be different from the value that Python defines it to be which results
- // in a warning. Undefine _POSIX_C_SOURCE before including Python.h The same
- // holds for _XOPEN_SOURCE.
- #undef _POSIX_C_SOURCE
- #undef _XOPEN_SOURCE
- #endif
-
- // Include python for non windows machines
- #include <Python.h>
-
+ #if defined(__linux__)
+ // features.h will define _POSIX_C_SOURCE if _GNU_SOURCE is defined. This value
+ // may be different from the value that Python defines it to be which results
+ // in a warning. Undefine _POSIX_C_SOURCE before including Python.h The same
+ // holds for _XOPEN_SOURCE.
+ #undef _POSIX_C_SOURCE
+ #undef _XOPEN_SOURCE
#endif
+
+ // Include python for non windows machines
+ #include <Python.h>
#endif // LLDB_DISABLE_PYTHON
#endif // LLDB_lldb_python_h_
Modified: lldb/trunk/scripts/Python/finishSwigPythonLLDB.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/scripts/Python/finishSwigPythonLLDB.py?rev=212785&r1=212784&r2=212785&view=diff
==============================================================================
--- lldb/trunk/scripts/Python/finishSwigPythonLLDB.py (original)
+++ lldb/trunk/scripts/Python/finishSwigPythonLLDB.py Thu Jul 10 18:47:42 2014
@@ -71,7 +71,7 @@ strMsgFrameWkPyExists = "Python output f
strMsgFrameWkPyMkDir = "Python output folder '%s' will be created";
strErrMsgCreateFrmWkPyDirFailed = "Unable to create directory '%s' error: %s";
strMsglldbsoExists = "Symlink '%s' already exists";
-strMsglldbsoMk = "Creating symlink for _lldb.so";
+strMsglldbsoMk = "Creating symlink for _lldb.so (%s -> %s)";
strErrMsgCpLldbpy = "copying lldb to lldb package directory";
strErrMsgCreatePyPkgMissingSlash = "Parameter 3 fn create_py_pkg() missing slash";
strErrMsgMkLinkExecute = "Command mklink failed: %s";
@@ -135,7 +135,6 @@ def create_py_pkg( vDictArgs, vstrFramew
strPkgName = vstrPkgDir;
strPkgName = "lldb" + strPkgName.replace( "/", "." );
- strPkgName = os.path.normcase( strPkgName );
strPkgDir = vstrFrameworkPythonDir;
strPkgDir += vstrPkgDir;
@@ -148,10 +147,9 @@ def create_py_pkg( vDictArgs, vstrFramew
for strPkgFile in vListPkgFiles:
if os.path.exists( strPkgFile ) and os.path.isfile( strPkgFile ):
- strPyFile = os.path.normcase( strPkgFile );
if bDbg:
print(strMsgCreatePyPkgCopyPkgFile % (strPkgFile, strPkgDir));
- shutil.copy( strPyFile, strPkgDir );
+ shutil.copy( strPkgFile, strPkgDir );
# Create a packet init files if there wasn't one
strPkgIniFile = strPkgDir + "/__init__.py";
@@ -162,8 +160,7 @@ def create_py_pkg( vDictArgs, vstrFramew
strPyScript = "__all__ = [";
strDelimiter = "";
for strPkgFile in vListPkgFiles:
- strPyFile = os.path.normcase( strPkgFile );
- if os.path.exists( strPyFile ) and os.path.isfile( strPyFile ):
+ if os.path.exists( strPkgFile ) and os.path.isfile( strPkgFile ):
strBaseName = os.path.basename( strPkgFile );
nPos = strBaseName.find( "." );
if nPos != -1:
@@ -257,7 +254,7 @@ def make_symlink_windows( vDictArgs, vst
return (bOk, strMsg);
if bDbg:
- print strMsglldbsoMk;
+ print strMsglldbsoMk % (os.path.abspath(strSrc), os.path.abspath(strTarget));
try:
csl = ctypes.windll.kernel32.CreateHardLinkW
Modified: lldb/trunk/source/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/CMakeLists.txt?rev=212785&r1=212784&r2=212785&view=diff
==============================================================================
--- lldb/trunk/source/CMakeLists.txt (original)
+++ lldb/trunk/source/CMakeLists.txt Thu Jul 10 18:47:42 2014
@@ -327,6 +327,18 @@ endif ()
# FIXME: implement svn/git revision and repository parsing solution on Windows. There is an SVN-only
# revision parsing solution in tools/clang/lib/Basic/CMakelists.txt.
+if ( LLDB_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION )
+ # Add a Post-Build Event to copy over Python files and create the symlink to liblldb.so for the Python API(hardlink on Windows)
+ if ( NOT LLDB_DISABLE_PYTHON )
+ message("Adding post build step to run finishSwigWrapperClasses.py")
+ add_custom_command( TARGET liblldb
+ POST_BUILD
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/finishSwigWrapperClasses.py
+ COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/finishSwigWrapperClasses.py "--srcRoot=${LLDB_SOURCE_DIR}" "--targetDir=${CMAKE_CURRENT_BINARY_DIR}/../scripts" "--cfgBldDir=${CMAKE_CURRENT_BINARY_DIR}/../scripts" "--prefix=${CMAKE_BINARY_DIR}" "--cmakeBuildConfiguration=${CMAKE_CFG_INTDIR}" -m
+ COMMENT "Python script sym-linking LLDB Python API")
+ endif ()
+endif ()
+
install(TARGETS liblldb
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
Modified: lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp?rev=212785&r1=212784&r2=212785&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp (original)
+++ lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp Thu Jul 10 18:47:42 2014
@@ -2621,7 +2621,7 @@ ScriptInterpreterPython::InitializePriva
}
}
- PyRun_SimpleString ("sys.dont_write_bytecode = 1; import lldb.embedded_interpreter; from lldb.embedded_interpreter import run_python_interpreter; from lldb.embedded_interpreter import run_one_line; from termios import *");
+ PyRun_SimpleString ("sys.dont_write_bytecode = 1; import lldb.embedded_interpreter; from lldb.embedded_interpreter import run_python_interpreter; from lldb.embedded_interpreter import run_one_line");
if (threads_already_initialized) {
if (log)
More information about the lldb-commits
mailing list