diff options
author | Brad King <brad.king@kitware.com> | 2016-02-05 08:55:15 -0500 |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-02-05 09:26:44 -0500 |
commit | c5eb21b6d1f4187778ad49545761a818e1126541 (patch) | |
tree | 1ee13587cb37984b90e9bd4cbcab178a2c0ed5b8 | |
parent | a5a5a6857241c21d306661d723b749839f4c6e1a (diff) | |
download | cmake-c5eb21b6d1f4187778ad49545761a818e1126541.tar.gz |
Fix dependency scanning configuration in subdirectories
Refactoring in commit v3.5.0-rc1~347^2~2 (Set the current dirs on the
snapshot before creating the cmMakefile) accidentally changed the
source and binary directories configured in `cmake -E cmake_depends`
for use during dependency scanning. This can cause the wrong directory
information to be loaded. It also breaks Fortran module dependency
scanning for modules provided by targets in subdirectories that do
not have Fortran_MODULE_DIRECTORY set.
Fix the dependency scanning directory configuration and add a test to
cover the Fortran module case in which the breakage was observed.
Reported-by: Kelly Thompson <kgt@lanl.gov>
-rw-r--r-- | Source/cmcmd.cxx | 6 | ||||
-rw-r--r-- | Tests/Fortran/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Tests/Fortran/Executable/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Tests/Fortran/Executable/main.f90 | 1 | ||||
-rw-r--r-- | Tests/Fortran/Subdir/CMakeLists.txt | 2 | ||||
-rw-r--r-- | Tests/Fortran/Subdir/subdir.f90 | 2 |
6 files changed, 9 insertions, 5 deletions
diff --git a/Source/cmcmd.cxx b/Source/cmcmd.cxx index 1dc304c3a6..e9d77b250b 100644 --- a/Source/cmcmd.cxx +++ b/Source/cmcmd.cxx @@ -813,10 +813,8 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args) { cm.SetGlobalGenerator(ggd); cmState::Snapshot snapshot = cm.GetCurrentSnapshot(); - snapshot.GetDirectory().SetCurrentBinary - (cmSystemTools::GetCurrentWorkingDirectory()); - snapshot.GetDirectory().SetCurrentSource - (cmSystemTools::GetCurrentWorkingDirectory()); + snapshot.GetDirectory().SetCurrentBinary(startOutDir); + snapshot.GetDirectory().SetCurrentSource(startDir); cmsys::auto_ptr<cmMakefile> mf(new cmMakefile(ggd, snapshot)); cmsys::auto_ptr<cmLocalGenerator> lgd( ggd->CreateLocalGenerator(mf.get())); diff --git a/Tests/Fortran/CMakeLists.txt b/Tests/Fortran/CMakeLists.txt index 753ce2796e..ecf38a6054 100644 --- a/Tests/Fortran/CMakeLists.txt +++ b/Tests/Fortran/CMakeLists.txt @@ -223,5 +223,6 @@ if(TEST_MODULE_DEPENDS) endif() add_subdirectory(Library) + add_subdirectory(Subdir) add_subdirectory(Executable) endif() diff --git a/Tests/Fortran/Executable/CMakeLists.txt b/Tests/Fortran/Executable/CMakeLists.txt index 55f21ad462..de08d8605d 100644 --- a/Tests/Fortran/Executable/CMakeLists.txt +++ b/Tests/Fortran/Executable/CMakeLists.txt @@ -3,6 +3,6 @@ include_directories(${External_BINARY_DIR}) link_directories(${External_BINARY_DIR}) add_executable(subdir_exe2 main.f90) -target_link_libraries(subdir_exe2 subdir_mods) +target_link_libraries(subdir_exe2 subdir_mods subdir_mods2) add_dependencies(subdir_exe2 ExternalTarget) target_link_libraries(subdir_exe2 myext) diff --git a/Tests/Fortran/Executable/main.f90 b/Tests/Fortran/Executable/main.f90 index f21156cda7..640259c124 100644 --- a/Tests/Fortran/Executable/main.f90 +++ b/Tests/Fortran/Executable/main.f90 @@ -1,6 +1,7 @@ PROGRAM MAINF90 USE libraryModuleA USE libraryModuleB + USE subdirModuleA USE externalMod CALL printExtModGreeting END PROGRAM MAINF90 diff --git a/Tests/Fortran/Subdir/CMakeLists.txt b/Tests/Fortran/Subdir/CMakeLists.txt new file mode 100644 index 0000000000..52683e5877 --- /dev/null +++ b/Tests/Fortran/Subdir/CMakeLists.txt @@ -0,0 +1,2 @@ +add_library(subdir_mods2 subdir.f90) +target_include_directories(subdir_mods2 INTERFACE ${CMAKE_CURRENT_BINARY_DIR}) diff --git a/Tests/Fortran/Subdir/subdir.f90 b/Tests/Fortran/Subdir/subdir.f90 new file mode 100644 index 0000000000..68955f6b5c --- /dev/null +++ b/Tests/Fortran/Subdir/subdir.f90 @@ -0,0 +1,2 @@ +MODULE subdirModuleA +END MODULE |