浏览代码

ENH: fixes for borland with spaces in the path

Bill Hoffman 23 年之前
父节点
当前提交
e74377dcd8
共有 2 个文件被更改,包括 14 次插入2 次删除
  1. 2 2
      Modules/Platform/Windows-bcc32.cmake
  2. 12 0
      Source/cmLocalUnixMakefileGenerator.cxx

+ 2 - 2
Modules/Platform/Windows-bcc32.cmake

@@ -26,7 +26,7 @@ SET(CMAKE_END_TEMP_FILE "\n|")
 # create a shared C++ library
 # create a shared C++ library
 SET(CMAKE_CXX_CREATE_SHARED_LIBRARY 
 SET(CMAKE_CXX_CREATE_SHARED_LIBRARY 
  "<CMAKE_CXX_COMPILER>  ${CMAKE_START_TEMP_FILE}-e<TARGET>  -tWD  <LINK_FLAGS> -tWR <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
  "<CMAKE_CXX_COMPILER>  ${CMAKE_START_TEMP_FILE}-e<TARGET>  -tWD  <LINK_FLAGS> -tWR <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
- "implib ${CMAKE_START_TEMP_FILE}-w <TARGET_BASE>.lib <TARGET_BASE>.dll${CMAKE_END_TEMP_FILE}"
+ "implib -w <TARGET_BASE>.lib <TARGET_BASE>.dll"
 )
 )
 
 
 SET(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_LIBRARY})
 SET(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_LIBRARY})
@@ -34,7 +34,7 @@ SET(CMAKE_CXX_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_LIBRARY})
 # create a C shared library
 # create a C shared library
 SET(CMAKE_C_CREATE_SHARED_LIBRARY 
 SET(CMAKE_C_CREATE_SHARED_LIBRARY 
  "<CMAKE_C_COMPILER> ${CMAKE_START_TEMP_FILE}-e<TARGET> -tWD  <LINK_FLAGS> -tWR <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
  "<CMAKE_C_COMPILER> ${CMAKE_START_TEMP_FILE}-e<TARGET> -tWD  <LINK_FLAGS> -tWR <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
- "implib ${CMAKE_START_TEMP_FILE}-w <TARGET_BASE>.lib <TARGET_BASE>.dll${CMAKE_END_TEMP_FILE}"
+ "implib -w <TARGET_BASE>.lib <TARGET_BASE>.dll"
 )
 )
 
 
 # create a C shared module just copy the shared library rule
 # create a C shared module just copy the shared library rule

+ 12 - 0
Source/cmLocalUnixMakefileGenerator.cxx

@@ -768,6 +768,18 @@ cmLocalUnixMakefileGenerator::ExpandRuleVariables(std::string& s,
     }
     }
   if(targetBase)
   if(targetBase)
     {
     {
+    // special case for quoted paths with spaces 
+    // if you see <TARGET_BASE>.lib then put the .lib inside
+    // the quotes, same for .dll
+    if((strlen(targetBase) > 1) && targetBase[0] == '\"')
+      {
+      std::string base = targetBase;
+      base[base.size()-1] = '.';
+      std::string baseLib = base + "lib\"";
+      std::string baseDll = base + "dll\"";
+      cmSystemTools::ReplaceString(s, "<TARGET_BASE>.lib", baseLib.c_str());
+      cmSystemTools::ReplaceString(s, "<TARGET_BASE>.dll", baseDll.c_str());
+      }
     cmSystemTools::ReplaceString(s, "<TARGET_BASE>", targetBase);
     cmSystemTools::ReplaceString(s, "<TARGET_BASE>", targetBase);
     }
     }
   if(linkLibs)
   if(linkLibs)