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>
This commit is contained in:
Brad King 2016-02-05 08:55:15 -05:00
parent a5a5a68572
commit c5eb21b6d1
6 changed files with 9 additions and 5 deletions

View File

@ -813,10 +813,8 @@ int cmcmd::ExecuteCMakeCommand(std::vector<std::string>& args)
{ {
cm.SetGlobalGenerator(ggd); cm.SetGlobalGenerator(ggd);
cmState::Snapshot snapshot = cm.GetCurrentSnapshot(); cmState::Snapshot snapshot = cm.GetCurrentSnapshot();
snapshot.GetDirectory().SetCurrentBinary snapshot.GetDirectory().SetCurrentBinary(startOutDir);
(cmSystemTools::GetCurrentWorkingDirectory()); snapshot.GetDirectory().SetCurrentSource(startDir);
snapshot.GetDirectory().SetCurrentSource
(cmSystemTools::GetCurrentWorkingDirectory());
cmsys::auto_ptr<cmMakefile> mf(new cmMakefile(ggd, snapshot)); cmsys::auto_ptr<cmMakefile> mf(new cmMakefile(ggd, snapshot));
cmsys::auto_ptr<cmLocalGenerator> lgd( cmsys::auto_ptr<cmLocalGenerator> lgd(
ggd->CreateLocalGenerator(mf.get())); ggd->CreateLocalGenerator(mf.get()));

View File

@ -223,5 +223,6 @@ if(TEST_MODULE_DEPENDS)
endif() endif()
add_subdirectory(Library) add_subdirectory(Library)
add_subdirectory(Subdir)
add_subdirectory(Executable) add_subdirectory(Executable)
endif() endif()

View File

@ -3,6 +3,6 @@ include_directories(${External_BINARY_DIR})
link_directories(${External_BINARY_DIR}) link_directories(${External_BINARY_DIR})
add_executable(subdir_exe2 main.f90) 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) add_dependencies(subdir_exe2 ExternalTarget)
target_link_libraries(subdir_exe2 myext) target_link_libraries(subdir_exe2 myext)

View File

@ -1,6 +1,7 @@
PROGRAM MAINF90 PROGRAM MAINF90
USE libraryModuleA USE libraryModuleA
USE libraryModuleB USE libraryModuleB
USE subdirModuleA
USE externalMod USE externalMod
CALL printExtModGreeting CALL printExtModGreeting
END PROGRAM MAINF90 END PROGRAM MAINF90

View File

@ -0,0 +1,2 @@
add_library(subdir_mods2 subdir.f90)
target_include_directories(subdir_mods2 INTERFACE ${CMAKE_CURRENT_BINARY_DIR})

View File

@ -0,0 +1,2 @@
MODULE subdirModuleA
END MODULE