Create an _d suffixed symlink when doing a debug Windows build.
authorZachary Turner <zturner@google.com>
Thu, 17 Jul 2014 20:36:14 +0000 (20:36 +0000)
committerZachary Turner <zturner@google.com>
Thu, 17 Jul 2014 20:36:14 +0000 (20:36 +0000)
_lldb is built as an extension module on Windows.  Normally to load
an extension module named 'foo', Python would look for the file
'foo.pyd'.  However, when a debug interpreter is used, Python will
look for the file 'foo_d.pyd'.  This change checks the build
configuration and creates the correct symlink name based on the
build configuration.

llvm-svn: 213306

lldb/scripts/CMakeLists.txt
lldb/scripts/Python/finishSwigPythonLLDB.py
lldb/scripts/finishSwigWrapperClasses.py
lldb/source/CMakeLists.txt

index b11f2fc..773a5b7 100644 (file)
@@ -18,14 +18,6 @@ if ( LLDB_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION )
 
        # Install the LLDB python module on all operating systems
        install(SCRIPT lldb_python_module.cmake -DCMAKE_INSTALL_PREFIX=\"${CMAKE_INSTALL_PREFIX}\" -DCMAKE_BUILD_DIR=\"${CMAKE_BUILD_DIR}\")
-
-       # Add a Post-Build Event to copy over Python files and create the symlink to liblldb.so for the Python API(hardlink on Windows)
-       add_custom_command( TARGET liblldb
-         POST_BUILD
-         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/finishSwigWrapperClasses.py
-         DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/Python/finishSwigPythonLLDB.py
-         COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/finishSwigWrapperClasses.py -d "--srcRoot=${LLDB_SOURCE_DIR}" "--targetDir=${CMAKE_CURRENT_BINARY_DIR}" "--cfgBldDir=${CMAKE_CURRENT_BINARY_DIR}" "--prefix=${CMAKE_BINARY_DIR}" "--cmakeBuildConfiguration=${CMAKE_CFG_INTDIR}" -m
-         COMMENT "Python script sym-linking LLDB Python API")
 else ()
        add_custom_command(
          OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/LLDBWrapPython.cpp
index a2e35c5..f17b915 100644 (file)
@@ -235,7 +235,13 @@ def make_symlink_windows( vDictArgs, vstrFrameworkPythonDir, vstrDllName ):
        strMsg = "";
 
        bDbg = vDictArgs.has_key( "-d" );
-       strTarget = vstrDllName + ".pyd";
+       strTarget = vstrDllName;
+       # 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 vDictArgs["--buildConfig"].lower() == "debug":
+               strTarget += "_d";
+       strTarget += ".pyd";
        strDLLPath = "%s\\%s" % (vstrFrameworkPythonDir, strTarget);
        strTarget = os.path.normcase( strDLLPath );
        strSrc = "";
@@ -525,6 +531,7 @@ def get_framework_python_dir( vDictArgs ):
                        -m (optional)   Specify called from Makefile system. If given locate
                                                        the LLDBWrapPython.cpp in --srcRoot/source folder 
                                                        else in the     --targetDir folder.
+                       --buildConfig   The LLDB build configuration (e.g. debug/release).
                        --srcRoot               The root of the lldb source tree.
                        --targetDir     Where the lldb framework/shared library gets put.
                        --cfgBlddir     Where the buildSwigPythonLLDB.py program will 
index 8b9552b..0fe7dec 100644 (file)
@@ -165,13 +165,14 @@ def validate_arguments( vArgv ):
        nResult = 0;
        strListArgs = "hdm"; # Format "hiox:" = -h -i -o -x <arg>
        listLongArgs = ["srcRoot=", "targetDir=", "cfgBldDir=", "prefix=", "cmakeBuildConfiguration=",
-                                       "argsFile"];
+                                       "argsFile", "buildConfig="];
        dictArgReq = {  "-h": "o",                      # o = optional, m = mandatory
                                        "-d": "o",
                                        "-m": "o",
                                        "--srcRoot": "m",
                                        "--targetDir": "m",
                                        "--cfgBldDir": "o",
+                                       "--buildConfig": "m",
                                        "--prefix": "o",
                                        "--cmakeBuildConfiguration": "o",
                                        "--argsFile": "o" };
index 1b464a3..c83638f 100644 (file)
@@ -335,7 +335,7 @@ if ( LLDB_ENABLE_PYTHON_SCRIPTS_SWIG_API_GENERATION )
            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
+               COMMAND python ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/finishSwigWrapperClasses.py --buildConfig=${CMAKE_BUILD_TYPE} "--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 ()