[Lldb-commits] [lldb] r212785 - Get the python scripting interface working on Windows.
Greg Clayton
gclayton at apple.com
Mon Jul 14 11:08:10 PDT 2014
Looks good.
> On Jul 10, 2014, at 4:47 PM, Zachary Turner <zturner at google.com> wrote:
>
> 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)
>
>
> _______________________________________________
> lldb-commits mailing list
> lldb-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
More information about the lldb-commits
mailing list