Browse Source

Fix escapes in Fortran depend.make entries

Makefile dependencies must be escaped using cmLocalGenerator::Convert
with the cmLocalGenerator::MAKEFILE option.  This fixes Fortran module
dependencies with spaces in the path.  We test the fix by adding a space
to one of the module paths in the Fortran test.
Brad King 16 years ago
parent
commit
cbfbb86b58

+ 7 - 5
Source/cmDependsFortran.cxx

@@ -442,9 +442,11 @@ cmDependsFortran
   for(std::set<cmStdString>::const_iterator i = info.Includes.begin();
       i != info.Includes.end(); ++i)
     {
-    makeDepends << obj << ": "
-       << cmSystemTools::ConvertToOutputPath(i->c_str()).c_str()
-       << std::endl;
+    makeDepends << obj << ": " <<
+      this->LocalGenerator->Convert(i->c_str(),
+                                    cmLocalGenerator::HOME_OUTPUT,
+                                    cmLocalGenerator::MAKEFILE)
+                << std::endl;
     internalDepends << " " << i->c_str() << std::endl;
     }
   makeDepends << std::endl;
@@ -491,7 +493,7 @@ cmDependsFortran
       std::string stampFile =
         this->LocalGenerator->Convert(required->second.c_str(),
                                       cmLocalGenerator::HOME_OUTPUT,
-                                      cmLocalGenerator::SHELL);
+                                      cmLocalGenerator::MAKEFILE);
       makeDepends << obj << ": " << stampFile << "\n";
       }
     else
@@ -504,7 +506,7 @@ cmDependsFortran
         module =
           this->LocalGenerator->Convert(module.c_str(),
                                         cmLocalGenerator::HOME_OUTPUT,
-                                        cmLocalGenerator::SHELL);
+                                        cmLocalGenerator::MAKEFILE);
         makeDepends << obj << ": " << module << "\n";
         }
       }

+ 9 - 2
Tests/Fortran/CMakeLists.txt

@@ -171,13 +171,20 @@ if(TEST_MODULE_DEPENDS)
     set(External_CONFIG_TYPE)
     set(External_BUILD_TYPE -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE})
   endif(CMAKE_CONFIGURATION_TYPES)
+  set(External_SOURCE_DIR "${testf_SOURCE_DIR}/External")
+  set(External_BINARY_DIR "${testf_BINARY_DIR}/External")
+  if("${testf_BINARY_DIR}" MATCHES " ")
+    # Our build tree has a space, so the build tool supports spaces.
+    # Test using modules from a path with spaces.
+    set(External_BINARY_DIR "${External_BINARY_DIR} Build")
+  endif()
   add_custom_command(
     OUTPUT ${testf_BINARY_DIR}/ExternalProject
     COMMAND ${CMAKE_CTEST_COMMAND}
     ARGS ${External_CONFIG_TYPE}
          --build-and-test
-         ${testf_SOURCE_DIR}/External
-         ${testf_BINARY_DIR}/External
+         ${External_SOURCE_DIR}
+         ${External_BINARY_DIR}
          --build-noclean
          --build-two-config
          --build-project ExtFort

+ 2 - 2
Tests/Fortran/Executable/CMakeLists.txt

@@ -1,6 +1,6 @@
 include_directories(${Library_MODDIR})
-include_directories(${testf_BINARY_DIR}/External)
-link_directories(${testf_BINARY_DIR}/External)
+include_directories(${External_BINARY_DIR})
+link_directories(${External_BINARY_DIR})
 
 add_executable(subdir_exe2 main.f90)
 target_link_libraries(subdir_exe2 subdir_mods)