mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-08 06:40:48 -06:00
Refactor: Add new methods to retrieve prefix and suffix
This commit is contained in:
@@ -464,6 +464,134 @@ std::string cmGeneratorTarget::GetOutputName(
|
||||
return i->second;
|
||||
}
|
||||
|
||||
std::string cmGeneratorTarget::GetFilePrefix(
|
||||
const std::string& config, cmStateEnums::ArtifactType artifact) const
|
||||
{
|
||||
if (this->IsImported()) {
|
||||
const char* prefix = this->GetFilePrefixInternal(artifact);
|
||||
|
||||
return prefix ? prefix : std::string();
|
||||
}
|
||||
|
||||
std::string prefix, suffix, base;
|
||||
this->GetFullNameInternal(config, artifact, prefix, base, suffix);
|
||||
return prefix;
|
||||
}
|
||||
std::string cmGeneratorTarget::GetFileSuffix(
|
||||
const std::string& config, cmStateEnums::ArtifactType artifact) const
|
||||
{
|
||||
if (this->IsImported()) {
|
||||
const char* suffix = this->GetFileSuffixInternal(artifact);
|
||||
|
||||
return suffix ? suffix : std::string();
|
||||
}
|
||||
|
||||
std::string prefix, suffix, base;
|
||||
this->GetFullNameInternal(config, artifact, prefix, base, suffix);
|
||||
return suffix;
|
||||
}
|
||||
|
||||
const char* cmGeneratorTarget::GetFilePrefixInternal(
|
||||
cmStateEnums::ArtifactType artifact, const std::string& language) const
|
||||
{
|
||||
// no prefix for non-main target types.
|
||||
if (this->GetType() != cmStateEnums::STATIC_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::SHARED_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::MODULE_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::EXECUTABLE) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const bool isImportedLibraryArtifact =
|
||||
(artifact == cmStateEnums::ImportLibraryArtifact);
|
||||
|
||||
// Return an empty prefix for the import library if this platform
|
||||
// does not support import libraries.
|
||||
if (isImportedLibraryArtifact &&
|
||||
!this->Makefile->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX")) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// The implib option is only allowed for shared libraries, module
|
||||
// libraries, and executables.
|
||||
if (this->GetType() != cmStateEnums::SHARED_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::MODULE_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::EXECUTABLE) {
|
||||
artifact = cmStateEnums::RuntimeBinaryArtifact;
|
||||
}
|
||||
|
||||
// Compute prefix value.
|
||||
const char* targetPrefix =
|
||||
(isImportedLibraryArtifact ? this->GetProperty("IMPORT_PREFIX")
|
||||
: this->GetProperty("PREFIX"));
|
||||
|
||||
if (!targetPrefix) {
|
||||
const char* prefixVar = this->Target->GetPrefixVariableInternal(artifact);
|
||||
if (!language.empty() && prefixVar && *prefixVar) {
|
||||
std::string langPrefix = prefixVar + std::string("_") + language;
|
||||
targetPrefix = this->Makefile->GetDefinition(langPrefix);
|
||||
}
|
||||
|
||||
// if there is no prefix on the target nor specific language
|
||||
// use the cmake definition.
|
||||
if (!targetPrefix && prefixVar) {
|
||||
targetPrefix = this->Makefile->GetDefinition(prefixVar);
|
||||
}
|
||||
}
|
||||
|
||||
return targetPrefix;
|
||||
}
|
||||
const char* cmGeneratorTarget::GetFileSuffixInternal(
|
||||
cmStateEnums::ArtifactType artifact, const std::string& language) const
|
||||
{
|
||||
// no suffix for non-main target types.
|
||||
if (this->GetType() != cmStateEnums::STATIC_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::SHARED_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::MODULE_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::EXECUTABLE) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const bool isImportedLibraryArtifact =
|
||||
(artifact == cmStateEnums::ImportLibraryArtifact);
|
||||
|
||||
// Return an empty suffix for the import library if this platform
|
||||
// does not support import libraries.
|
||||
if (isImportedLibraryArtifact &&
|
||||
!this->Makefile->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX")) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// The implib option is only allowed for shared libraries, module
|
||||
// libraries, and executables.
|
||||
if (this->GetType() != cmStateEnums::SHARED_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::MODULE_LIBRARY &&
|
||||
this->GetType() != cmStateEnums::EXECUTABLE) {
|
||||
artifact = cmStateEnums::RuntimeBinaryArtifact;
|
||||
}
|
||||
|
||||
// Compute suffix value.
|
||||
const char* targetSuffix =
|
||||
(isImportedLibraryArtifact ? this->GetProperty("IMPORT_SUFFIX")
|
||||
: this->GetProperty("SUFFIX"));
|
||||
|
||||
if (!targetSuffix) {
|
||||
const char* suffixVar = this->Target->GetSuffixVariableInternal(artifact);
|
||||
if (!language.empty() && suffixVar && *suffixVar) {
|
||||
std::string langSuffix = suffixVar + std::string("_") + language;
|
||||
targetSuffix = this->Makefile->GetDefinition(langSuffix);
|
||||
}
|
||||
|
||||
// if there is no suffix on the target nor specific language
|
||||
// use the cmake definition.
|
||||
if (!targetSuffix && suffixVar) {
|
||||
targetSuffix = this->Makefile->GetDefinition(suffixVar);
|
||||
}
|
||||
}
|
||||
|
||||
return targetSuffix;
|
||||
}
|
||||
|
||||
void cmGeneratorTarget::ClearSourcesCache()
|
||||
{
|
||||
this->KindedSourcesMap.clear();
|
||||
@@ -3788,6 +3916,11 @@ void cmGeneratorTarget::GetFullNameInternal(
|
||||
return;
|
||||
}
|
||||
|
||||
// retrieve prefix and suffix
|
||||
std::string ll = this->GetLinkerLanguage(config);
|
||||
const char* targetPrefix = this->GetFilePrefixInternal(artifact, ll);
|
||||
const char* targetSuffix = this->GetFileSuffixInternal(artifact, ll);
|
||||
|
||||
// The implib option is only allowed for shared libraries, module
|
||||
// libraries, and executables.
|
||||
if (this->GetType() != cmStateEnums::SHARED_LIBRARY &&
|
||||
@@ -3797,12 +3930,6 @@ void cmGeneratorTarget::GetFullNameInternal(
|
||||
}
|
||||
|
||||
// Compute the full name for main target types.
|
||||
const char* targetPrefix =
|
||||
(isImportedLibraryArtifact ? this->GetProperty("IMPORT_PREFIX")
|
||||
: this->GetProperty("PREFIX"));
|
||||
const char* targetSuffix =
|
||||
(isImportedLibraryArtifact ? this->GetProperty("IMPORT_SUFFIX")
|
||||
: this->GetProperty("SUFFIX"));
|
||||
const char* configPostfix = nullptr;
|
||||
if (!config.empty()) {
|
||||
std::string configProp = cmSystemTools::UpperCase(config);
|
||||
@@ -3814,30 +3941,6 @@ void cmGeneratorTarget::GetFullNameInternal(
|
||||
configPostfix = nullptr;
|
||||
}
|
||||
}
|
||||
const char* prefixVar = this->Target->GetPrefixVariableInternal(artifact);
|
||||
const char* suffixVar = this->Target->GetSuffixVariableInternal(artifact);
|
||||
|
||||
// Check for language-specific default prefix and suffix.
|
||||
std::string ll = this->GetLinkerLanguage(config);
|
||||
if (!ll.empty()) {
|
||||
if (!targetSuffix && suffixVar && *suffixVar) {
|
||||
std::string langSuff = suffixVar + std::string("_") + ll;
|
||||
targetSuffix = this->Makefile->GetDefinition(langSuff);
|
||||
}
|
||||
if (!targetPrefix && prefixVar && *prefixVar) {
|
||||
std::string langPrefix = prefixVar + std::string("_") + ll;
|
||||
targetPrefix = this->Makefile->GetDefinition(langPrefix);
|
||||
}
|
||||
}
|
||||
|
||||
// if there is no prefix on the target use the cmake definition
|
||||
if (!targetPrefix && prefixVar) {
|
||||
targetPrefix = this->Makefile->GetSafeDefinition(prefixVar).c_str();
|
||||
}
|
||||
// if there is no suffix on the target use the cmake definition
|
||||
if (!targetSuffix && suffixVar) {
|
||||
targetSuffix = this->Makefile->GetSafeDefinition(suffixVar).c_str();
|
||||
}
|
||||
|
||||
// frameworks have directory prefix but no suffix
|
||||
std::string fw_prefix;
|
||||
|
||||
@@ -534,6 +534,15 @@ public:
|
||||
std::string GetOutputName(const std::string& config,
|
||||
cmStateEnums::ArtifactType artifact) const;
|
||||
|
||||
/** Get target file prefix */
|
||||
std::string GetFilePrefix(const std::string& config,
|
||||
cmStateEnums::ArtifactType artifact =
|
||||
cmStateEnums::RuntimeBinaryArtifact) const;
|
||||
/** Get target file prefix */
|
||||
std::string GetFileSuffix(const std::string& config,
|
||||
cmStateEnums::ArtifactType artifact =
|
||||
cmStateEnums::RuntimeBinaryArtifact) const;
|
||||
|
||||
/** Clears cached meta data for local and external source files.
|
||||
* The meta data will be recomputed on demand.
|
||||
*/
|
||||
@@ -728,6 +737,11 @@ private:
|
||||
|
||||
mutable std::map<std::string, bool> DebugCompatiblePropertiesDone;
|
||||
|
||||
const char* GetFilePrefixInternal(cmStateEnums::ArtifactType artifact,
|
||||
const std::string& language = "") const;
|
||||
const char* GetFileSuffixInternal(cmStateEnums::ArtifactType artifact,
|
||||
const std::string& language = "") const;
|
||||
|
||||
std::string GetFullNameInternal(const std::string& config,
|
||||
cmStateEnums::ArtifactType artifact) const;
|
||||
void GetFullNameInternal(const std::string& config,
|
||||
|
||||
Reference in New Issue
Block a user