diff --git a/Source/cmExportInstallPackageInfoGenerator.cxx b/Source/cmExportInstallPackageInfoGenerator.cxx index ed23115614..caf9fbcbb7 100644 --- a/Source/cmExportInstallPackageInfoGenerator.cxx +++ b/Source/cmExportInstallPackageInfoGenerator.cxx @@ -220,21 +220,19 @@ std::string cmExportInstallPackageInfoGenerator::GetCxxModulesDirectory() const cm::optional cmExportInstallPackageInfoGenerator::GetFileSetDirectory( - cmGeneratorTarget* gte, cmTargetExport const* te, + cmGeneratorTarget const* target, cmTargetExport const* targetExport, cmGeneratorFileSet const* fileSet, cm::optional const& config) { - cmInstallFileSetGenerator::DestinationContext result = - te->FileSetGenerators.at(fileSet->GetName()) - ->GetDestination(gte, config.value_or("")); + cmInstallFileSetGenerator const* const fsg = + targetExport->FileSetGenerators.at(fileSet->GetName()); + cmInstallFileSetGenerator::DestinationContext const result = + fsg->GetDestination(target, config.value_or("")); - if (config && !result.HadContextSensitiveCondition) { - return {}; - } - if (!config && result.HadContextSensitiveCondition) { - this->RequiresConfigFiles = true; + if (!config == result.HadContextSensitiveCondition) { return {}; } + // Use cm::optional here to enable NRVO. cm::optional dest = cmOutputConverter::EscapeForCMake( result.UnescapedDestination, cmOutputConverter::WrapQuotes::NoWrap); @@ -267,8 +265,11 @@ bool cmExportInstallPackageInfoGenerator::GenerateFileSetProperties( this->GetFileSetDirectory(gte, te, fileSet, config); if (fileSet->GetType() == cm::FileSetMetadata::HEADERS) { - if (fileSetDirectory && - !cm::contains(seenIncludeDirectories, *fileSetDirectory)) { + if (!fileSetDirectory) { + if (!config) { + this->RequiresConfigFiles = true; + } + } else if (!cm::contains(seenIncludeDirectories, *fileSetDirectory)) { component["includes"].append(*fileSetDirectory); seenIncludeDirectories.insert(*fileSetDirectory); } diff --git a/Source/cmExportInstallPackageInfoGenerator.h b/Source/cmExportInstallPackageInfoGenerator.h index da7f4e305b..a43413acdb 100644 --- a/Source/cmExportInstallPackageInfoGenerator.h +++ b/Source/cmExportInstallPackageInfoGenerator.h @@ -70,8 +70,8 @@ protected: std::string GetCxxModulesDirectory() const override; - cm::optional GetFileSetDirectory( - cmGeneratorTarget* gte, cmTargetExport const* te, + static cm::optional GetFileSetDirectory( + cmGeneratorTarget const* target, cmTargetExport const* targetExport, cmGeneratorFileSet const* fileSet, cm::optional const& config = {}); diff --git a/Source/cmInstallFileSetGenerator.cxx b/Source/cmInstallFileSetGenerator.cxx index 250f207c69..5f503828a3 100644 --- a/Source/cmInstallFileSetGenerator.cxx +++ b/Source/cmInstallFileSetGenerator.cxx @@ -106,7 +106,7 @@ std::string cmInstallFileSetGenerator::GetDestination( } cmInstallFileSetGenerator::DestinationContext -cmInstallFileSetGenerator::GetDestination(cmGeneratorTarget* gte, +cmInstallFileSetGenerator::GetDestination(cmGeneratorTarget const* gte, std::string const& config) const { cmGeneratorExpression ge(*gte->Makefile->GetCMakeInstance()); diff --git a/Source/cmInstallFileSetGenerator.h b/Source/cmInstallFileSetGenerator.h index 72b9682d6a..7844ef093b 100644 --- a/Source/cmInstallFileSetGenerator.h +++ b/Source/cmInstallFileSetGenerator.h @@ -35,7 +35,7 @@ public: bool HadContextSensitiveCondition; }; std::string GetDestination(std::string const& config) const; - DestinationContext GetDestination(cmGeneratorTarget* gt, + DestinationContext GetDestination(cmGeneratorTarget const* gt, std::string const& config) const; bool GetOptional() const { return this->Optional; } std::string GetFileSetName() const { return this->FileSetName; } diff --git a/Source/cmInstallGenerator.cxx b/Source/cmInstallGenerator.cxx index 912e474a08..2da13b2843 100644 --- a/Source/cmInstallGenerator.cxx +++ b/Source/cmInstallGenerator.cxx @@ -230,8 +230,8 @@ std::string cmInstallGenerator::ConvertToAbsoluteDestination( return result; } -void cmInstallGenerator::CheckAbsoluteDestination(std::string const& dest, - cmLocalGenerator* lg) const +void cmInstallGenerator::CheckAbsoluteDestination( + std::string const& dest, cmLocalGenerator const* lg) const { if (!cmSystemTools::FileIsFullPath(dest)) { return; diff --git a/Source/cmInstallGenerator.h b/Source/cmInstallGenerator.h index e8f2cd35cf..282e03b195 100644 --- a/Source/cmInstallGenerator.h +++ b/Source/cmInstallGenerator.h @@ -58,7 +58,7 @@ public: installation script. */ static std::string ConvertToAbsoluteDestination(std::string const& dest); void CheckAbsoluteDestination(std::string const& dest, - cmLocalGenerator* lg) const; + cmLocalGenerator const* lg) const; /** Test if this generator installs something for a given configuration. */ bool InstallsForConfig(std::string const& config);