Refactoring: Makefiles Generators: Add support for various depends scanners

This commit is contained in:
Marc Chevrier 2020-10-22 11:44:24 +02:00
parent bcf19af5c7
commit a97c41bf8b
4 changed files with 28 additions and 19 deletions

View File

@ -43,6 +43,13 @@ enum class cmSourceOutputKind
OutputOrByproduct
};
/** What scanner to use for dependencies lookup. */
enum class cmDependencyScannerKind
{
CMake,
Compiler
};
/** Target and source file which have a specific output. */
struct cmSourcesWithOutput
{

View File

@ -2049,16 +2049,18 @@ std::string cmLocalUnixMakefileGenerator3::GetTargetDirectory(
}
cmLocalUnixMakefileGenerator3::ImplicitDependLanguageMap const&
cmLocalUnixMakefileGenerator3::GetImplicitDepends(const cmGeneratorTarget* tgt)
cmLocalUnixMakefileGenerator3::GetImplicitDepends(
const cmGeneratorTarget* tgt, cmDependencyScannerKind scanner)
{
return this->ImplicitDepends[tgt->GetName()];
return this->ImplicitDepends[tgt->GetName()][scanner];
}
void cmLocalUnixMakefileGenerator3::AddImplicitDepends(
const cmGeneratorTarget* tgt, const std::string& lang,
const std::string& obj, const std::string& src)
const std::string& obj, const std::string& src,
cmDependencyScannerKind scanner)
{
this->ImplicitDepends[tgt->GetName()][lang][obj].push_back(src);
this->ImplicitDepends[tgt->GetName()][scanner][lang][obj].push_back(src);
}
void cmLocalUnixMakefileGenerator3::CreateCDCommand(

View File

@ -13,6 +13,7 @@
#include "cmDepends.h"
#include "cmLocalCommonGenerator.h"
#include "cmLocalGenerator.h"
class cmCustomCommand;
class cmCustomCommandGenerator;
@ -152,23 +153,21 @@ public:
// File pairs for implicit dependency scanning. The key of the map
// is the depender and the value is the explicit dependee.
struct ImplicitDependFileMap : public cmDepends::DependencyMap
{
};
struct ImplicitDependLanguageMap
: public std::map<std::string, ImplicitDependFileMap>
{
};
struct ImplicitDependTargetMap
: public std::map<std::string, ImplicitDependLanguageMap>
{
};
using ImplicitDependFileMap = cmDepends::DependencyMap;
using ImplicitDependLanguageMap =
std::map<std::string, ImplicitDependFileMap>;
using ImplicitDependScannerMap =
std::map<cmDependencyScannerKind, ImplicitDependLanguageMap>;
using ImplicitDependTargetMap =
std::map<std::string, ImplicitDependScannerMap>;
ImplicitDependLanguageMap const& GetImplicitDepends(
cmGeneratorTarget const* tgt);
cmGeneratorTarget const* tgt,
cmDependencyScannerKind scanner = cmDependencyScannerKind::CMake);
void AddImplicitDepends(cmGeneratorTarget const* tgt,
const std::string& lang, const std::string& obj,
const std::string& src);
void AddImplicitDepends(
cmGeneratorTarget const* tgt, const std::string& lang,
const std::string& obj, const std::string& src,
cmDependencyScannerKind scanner = cmDependencyScannerKind::CMake);
// write the target rules for the local Makefile into the stream
void WriteLocalAllRules(std::ostream& ruleFileStream);

View File

@ -23,6 +23,7 @@
#include "cmGlobalUnixMakefileGenerator3.h"
#include "cmLinkLineComputer.h" // IWYU pragma: keep
#include "cmLocalCommonGenerator.h"
#include "cmLocalGenerator.h"
#include "cmLocalUnixMakefileGenerator3.h"
#include "cmMakefile.h"
#include "cmMakefileExecutableTargetGenerator.h"