Index: lldb/trunk/CMakeLists.txt =================================================================== --- lldb/trunk/CMakeLists.txt +++ lldb/trunk/CMakeLists.txt @@ -108,10 +108,6 @@ 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() Index: lldb/trunk/include/lldb/lldb-python.h =================================================================== --- lldb/trunk/include/lldb/lldb-python.h +++ lldb/trunk/include/lldb/lldb-python.h @@ -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 - // Undefine to force python to link against the release distro - # undef _DEBUG - # include - # define _DEBUG - - #else - #include - #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 - + #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 #endif // LLDB_DISABLE_PYTHON #endif // LLDB_lldb_python_h_ Index: lldb/trunk/scripts/Python/finishSwigPythonLLDB.py =================================================================== --- lldb/trunk/scripts/Python/finishSwigPythonLLDB.py +++ lldb/trunk/scripts/Python/finishSwigPythonLLDB.py @@ -71,7 +71,7 @@ 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 @@ strPkgName = vstrPkgDir; strPkgName = "lldb" + strPkgName.replace( "/", "." ); - strPkgName = os.path.normcase( strPkgName ); strPkgDir = vstrFrameworkPythonDir; strPkgDir += vstrPkgDir; @@ -148,10 +147,9 @@ 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 @@ 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 @@ return (bOk, strMsg); if bDbg: - print strMsglldbsoMk; + print strMsglldbsoMk % (os.path.abspath(strSrc), os.path.abspath(strTarget)); try: csl = ctypes.windll.kernel32.CreateHardLinkW Index: lldb/trunk/source/CMakeLists.txt =================================================================== --- lldb/trunk/source/CMakeLists.txt +++ lldb/trunk/source/CMakeLists.txt @@ -327,6 +327,18 @@ # 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 Index: lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp =================================================================== --- lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp +++ lldb/trunk/source/Interpreter/ScriptInterpreterPython.cpp @@ -2621,7 +2621,7 @@ } } - 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)