summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2016-09-21 12:47:39 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2016-09-21 12:47:39 (GMT)
commit0ebd7554bc836009e405ac818f367ff175ce9fc5 (patch)
tree67fd474f74979518ae8950714a54baea254e2c8d
parentca4eec29f916aa0af38378afd6a32f669bb12aae (diff)
parent7b5f85677c8aa067a5fef1cc68f4d8c8600693fa (diff)
downloadCMake-0ebd7554bc836009e405ac818f367ff175ce9fc5.zip
CMake-0ebd7554bc836009e405ac818f367ff175ce9fc5.tar.gz
CMake-0ebd7554bc836009e405ac818f367ff175ce9fc5.tar.bz2
Merge topic 'refactor-fortran-module-dir-lookup'
7b5f8567 Fortran: Use module dir flag if needed for default module directory 1777570f cmGeneratorTarget: Refactor Fortran module directory lookup
-rw-r--r--Source/cmGeneratorTarget.cxx22
-rw-r--r--Source/cmGeneratorTarget.h5
-rw-r--r--Source/cmLocalCommonGenerator.cxx3
-rw-r--r--Source/cmMakefileTargetGenerator.cxx6
4 files changed, 27 insertions, 9 deletions
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 1e21ac4..f181cf6 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -3883,23 +3883,35 @@ void cmGeneratorTarget::GetTargetVersion(bool soversion, int& major,
}
}
-std::string cmGeneratorTarget::GetFortranModuleDirectory() const
+std::string cmGeneratorTarget::GetFortranModuleDirectory(
+ std::string const& working_dir) const
{
if (!this->FortranModuleDirectoryCreated) {
this->FortranModuleDirectory = true;
- this->FortranModuleDirectory = this->CreateFortranModuleDirectory();
+ this->FortranModuleDirectory =
+ this->CreateFortranModuleDirectory(working_dir);
}
return this->FortranModuleDirectory;
}
-std::string cmGeneratorTarget::CreateFortranModuleDirectory() const
+std::string cmGeneratorTarget::CreateFortranModuleDirectory(
+ std::string const& working_dir) const
{
std::string mod_dir;
- const char* target_mod_dir = this->GetProperty("Fortran_MODULE_DIRECTORY");
+ std::string target_mod_dir;
+ if (const char* prop = this->GetProperty("Fortran_MODULE_DIRECTORY")) {
+ target_mod_dir = prop;
+ } else {
+ std::string const& default_mod_dir =
+ this->LocalGenerator->GetCurrentBinaryDirectory();
+ if (default_mod_dir != working_dir) {
+ target_mod_dir = default_mod_dir;
+ }
+ }
const char* moddir_flag =
this->Makefile->GetDefinition("CMAKE_Fortran_MODDIR_FLAG");
- if (target_mod_dir && moddir_flag) {
+ if (!target_mod_dir.empty() && moddir_flag) {
// Compute the full path to the module directory.
if (cmSystemTools::FileIsFullPath(target_mod_dir)) {
// Already a full path.
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index 715220e..8e17b8f 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -537,12 +537,13 @@ public:
void GetTargetVersion(bool soversion, int& major, int& minor,
int& patch) const;
- std::string GetFortranModuleDirectory() const;
+ std::string GetFortranModuleDirectory(std::string const& working_dir) const;
private:
void AddSourceCommon(const std::string& src);
- std::string CreateFortranModuleDirectory() const;
+ std::string CreateFortranModuleDirectory(
+ std::string const& working_dir) const;
mutable bool FortranModuleDirectoryCreated;
mutable std::string FortranModuleDirectory;
diff --git a/Source/cmLocalCommonGenerator.cxx b/Source/cmLocalCommonGenerator.cxx
index 97323c9..b75ce62 100644
--- a/Source/cmLocalCommonGenerator.cxx
+++ b/Source/cmLocalCommonGenerator.cxx
@@ -54,7 +54,8 @@ std::string cmLocalCommonGenerator::GetTargetFortranFlags(
}
// Add a module output directory flag if necessary.
- std::string mod_dir = target->GetFortranModuleDirectory();
+ std::string mod_dir =
+ target->GetFortranModuleDirectory(this->WorkingDirectory);
if (!mod_dir.empty()) {
mod_dir = this->ConvertToOutputFormat(
this->ConvertToRelativePath(this->WorkingDirectory, mod_dir),
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index 014feb9..e0d9fda 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -993,12 +993,16 @@ void cmMakefileTargetGenerator::WriteTargetDependRules()
*this->InfoFileStream << " )\n";
}
+ std::string const& working_dir =
+ this->LocalGenerator->GetCurrentBinaryDirectory();
+
/* clang-format off */
*this->InfoFileStream
<< "\n"
<< "# Fortran module output directory.\n"
<< "set(CMAKE_Fortran_TARGET_MODULE_DIR \""
- << this->GeneratorTarget->GetFortranModuleDirectory() << "\")\n";
+ << this->GeneratorTarget->GetFortranModuleDirectory(working_dir)
+ << "\")\n";
/* clang-format on */
// and now write the rule to use it