Export the COMPATIBLE_INTERFACE_BOOL content properties
This commit is contained in:
parent
bd82bb4787
commit
830246e841
|
@ -74,6 +74,7 @@ bool cmExportBuildFileGenerator::GenerateMainFile(std::ostream& os)
|
||||||
properties, missingTargets);
|
properties, missingTargets);
|
||||||
this->PopulateInterfaceProperty("INTERFACE_POSITION_INDEPENDENT_CODE",
|
this->PopulateInterfaceProperty("INTERFACE_POSITION_INDEPENDENT_CODE",
|
||||||
te, properties);
|
te, properties);
|
||||||
|
this->PopulateCompatibleInterfaceProperties(te, properties);
|
||||||
|
|
||||||
this->GenerateInterfaceProperties(te, os, properties);
|
this->GenerateInterfaceProperties(te, os, properties);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
#include "cmTarget.h"
|
#include "cmTarget.h"
|
||||||
#include "cmTargetExport.h"
|
#include "cmTargetExport.h"
|
||||||
#include "cmVersion.h"
|
#include "cmVersion.h"
|
||||||
|
#include "cmComputeLinkInformation.h"
|
||||||
|
|
||||||
#include <cmsys/auto_ptr.hxx>
|
#include <cmsys/auto_ptr.hxx>
|
||||||
|
|
||||||
|
@ -177,6 +178,79 @@ void cmExportFileGenerator::PopulateInterfaceProperty(const char *propName,
|
||||||
properties, missingTargets);
|
properties, missingTargets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void getPropertyContents(cmTarget *tgt, const char *prop,
|
||||||
|
std::set<std::string> &ifaceProperties)
|
||||||
|
{
|
||||||
|
const char *p = tgt->GetProperty(prop);
|
||||||
|
if (!p)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
std::vector<std::string> content;
|
||||||
|
cmSystemTools::ExpandListArgument(p, content);
|
||||||
|
for (std::vector<std::string>::const_iterator ci = content.begin();
|
||||||
|
ci != content.end(); ++ci)
|
||||||
|
{
|
||||||
|
ifaceProperties.insert(*ci);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void getCompatibleInterfaceProperties(cmTarget *target,
|
||||||
|
std::set<std::string> &ifaceProperties,
|
||||||
|
const char *config)
|
||||||
|
{
|
||||||
|
cmComputeLinkInformation *info = target->GetLinkInformation(config);
|
||||||
|
|
||||||
|
const cmComputeLinkInformation::ItemVector &deps = info->GetItems();
|
||||||
|
|
||||||
|
for(cmComputeLinkInformation::ItemVector::const_iterator li =
|
||||||
|
deps.begin();
|
||||||
|
li != deps.end(); ++li)
|
||||||
|
{
|
||||||
|
if (!li->Target)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
getPropertyContents(li->Target,
|
||||||
|
"COMPATIBLE_INTERFACE_BOOL",
|
||||||
|
ifaceProperties);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
void cmExportFileGenerator::PopulateCompatibleInterfaceProperties(
|
||||||
|
cmTarget *target,
|
||||||
|
ImportPropertyMap &properties)
|
||||||
|
{
|
||||||
|
this->PopulateInterfaceProperty("COMPATIBLE_INTERFACE_BOOL",
|
||||||
|
target, properties);
|
||||||
|
|
||||||
|
std::set<std::string> ifaceProperties;
|
||||||
|
|
||||||
|
getPropertyContents(target, "COMPATIBLE_INTERFACE_BOOL", ifaceProperties);
|
||||||
|
|
||||||
|
getCompatibleInterfaceProperties(target, ifaceProperties, 0);
|
||||||
|
|
||||||
|
std::vector<std::string> configNames;
|
||||||
|
target->GetMakefile()->GetConfigurations(configNames);
|
||||||
|
|
||||||
|
for (std::vector<std::string>::const_iterator ci = configNames.begin();
|
||||||
|
ci != configNames.end(); ++ci)
|
||||||
|
{
|
||||||
|
getCompatibleInterfaceProperties(target, ifaceProperties, ci->c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
for (std::set<std::string>::const_iterator it = ifaceProperties.begin();
|
||||||
|
it != ifaceProperties.end(); ++it)
|
||||||
|
{
|
||||||
|
this->PopulateInterfaceProperty(("INTERFACE_" + *it).c_str(),
|
||||||
|
target, properties);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmExportFileGenerator::GenerateInterfaceProperties(cmTarget *target,
|
void cmExportFileGenerator::GenerateInterfaceProperties(cmTarget *target,
|
||||||
std::ostream& os,
|
std::ostream& os,
|
||||||
|
|
|
@ -103,6 +103,8 @@ protected:
|
||||||
std::vector<std::string> &missingTargets);
|
std::vector<std::string> &missingTargets);
|
||||||
void PopulateInterfaceProperty(const char *propName, cmTarget *target,
|
void PopulateInterfaceProperty(const char *propName, cmTarget *target,
|
||||||
ImportPropertyMap &properties);
|
ImportPropertyMap &properties);
|
||||||
|
void PopulateCompatibleInterfaceProperties(cmTarget *target,
|
||||||
|
ImportPropertyMap &properties);
|
||||||
void GenerateInterfaceProperties(cmTarget *target, std::ostream& os,
|
void GenerateInterfaceProperties(cmTarget *target, std::ostream& os,
|
||||||
const ImportPropertyMap &properties);
|
const ImportPropertyMap &properties);
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,7 @@ bool cmExportInstallFileGenerator::GenerateMainFile(std::ostream& os)
|
||||||
properties, missingTargets);
|
properties, missingTargets);
|
||||||
this->PopulateInterfaceProperty("INTERFACE_POSITION_INDEPENDENT_CODE",
|
this->PopulateInterfaceProperty("INTERFACE_POSITION_INDEPENDENT_CODE",
|
||||||
te, properties);
|
te, properties);
|
||||||
|
this->PopulateCompatibleInterfaceProperties(te, properties);
|
||||||
|
|
||||||
this->GenerateInterfaceProperties(te, os, properties);
|
this->GenerateInterfaceProperties(te, os, properties);
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,6 +173,15 @@ set_property(TARGET testSharedLibRequired APPEND PROPERTY
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}"
|
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
"${CMAKE_CURRENT_SOURCE_DIR}"
|
"${CMAKE_CURRENT_SOURCE_DIR}"
|
||||||
)
|
)
|
||||||
|
set_property(TARGET testSharedLibRequired
|
||||||
|
APPEND PROPERTY
|
||||||
|
COMPATIBLE_INTERFACE_BOOL CUSTOM_PROP
|
||||||
|
)
|
||||||
|
set_property(TARGET testSharedLibRequired
|
||||||
|
PROPERTY
|
||||||
|
INTERFACE_CUSTOM_PROP ON
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
add_library(testSharedLibDepends SHARED testSharedLibDepends.cpp)
|
add_library(testSharedLibDepends SHARED testSharedLibDepends.cpp)
|
||||||
set_property(TARGET testSharedLibDepends APPEND PROPERTY
|
set_property(TARGET testSharedLibDepends APPEND PROPERTY
|
||||||
|
|
|
@ -169,6 +169,7 @@ target_compile_definitions(deps_shared_iface
|
||||||
PRIVATE
|
PRIVATE
|
||||||
testSharedLibDepends
|
testSharedLibDepends
|
||||||
$<$<BOOL:$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>>:PIC_PROPERTY_IS_ON>
|
$<$<BOOL:$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>>:PIC_PROPERTY_IS_ON>
|
||||||
|
$<$<BOOL:$<TARGET_PROPERTY:CUSTOM_PROP>>:CUSTOM_PROPERTY_IS_ON>
|
||||||
)
|
)
|
||||||
|
|
||||||
if (APPLE OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
if (APPLE OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
|
@ -199,4 +200,5 @@ target_include_directories(deps_shared_iface2 PRIVATE bld_testSharedLibDepends b
|
||||||
target_compile_definitions(deps_shared_iface2
|
target_compile_definitions(deps_shared_iface2
|
||||||
PRIVATE bld_testSharedLibDepends TEST_SUBDIR_LIB
|
PRIVATE bld_testSharedLibDepends TEST_SUBDIR_LIB
|
||||||
$<$<BOOL:$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>>:PIC_PROPERTY_IS_ON>
|
$<$<BOOL:$<TARGET_PROPERTY:POSITION_INDEPENDENT_CODE>>:PIC_PROPERTY_IS_ON>
|
||||||
|
$<$<BOOL:$<TARGET_PROPERTY:CUSTOM_PROP>>:CUSTOM_PROPERTY_IS_ON>
|
||||||
)
|
)
|
||||||
|
|
|
@ -12,6 +12,10 @@
|
||||||
#error Expected PIC_PROPERTY_IS_ON
|
#error Expected PIC_PROPERTY_IS_ON
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef CUSTOM_PROPERTY_IS_ON
|
||||||
|
#error Expected CUSTOM_PROPERTY_IS_ON
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef TEST_SUBDIR_LIB
|
#ifdef TEST_SUBDIR_LIB
|
||||||
#include "subdir.h"
|
#include "subdir.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue