Merge topic 'PLATFORM_ID-genex'

dcc00ec Genex: Add the PLATFORM_ID expression.
This commit is contained in:
Brad King 2013-10-07 15:41:39 -04:00 committed by CMake Topic Stage
commit 058af7a6ce
4 changed files with 51 additions and 0 deletions

View File

@ -40,6 +40,9 @@
"is exported using export(), or when the target is used by another " \
"target in the same buildsystem. Expands to the empty string " \
"otherwise.\n" \
" $<PLATFORM_ID> = The CMake-id of the platform " \
" $<PLATFORM_ID:comp> = '1' if the The CMake-id of the " \
"platform matches comp, otherwise '0'.\n" \
" $<C_COMPILER_ID> = The CMake-id of the C compiler " \
"used.\n" \
" $<C_COMPILER_ID:comp> = '1' if the CMake-id of the C " \

View File

@ -437,6 +437,39 @@ static const struct CxxCompilerVersionNode : public CompilerVersionNode
} cxxCompilerVersionNode;
//----------------------------------------------------------------------------
struct PlatformIdNode : public cmGeneratorExpressionNode
{
PlatformIdNode() {}
virtual int NumExpectedParameters() const { return ZeroOrMoreParameters; }
std::string Evaluate(const std::vector<std::string> &parameters,
cmGeneratorExpressionContext *context,
const GeneratorExpressionContent *,
cmGeneratorExpressionDAGChecker *) const
{
const char *platformId = context->Makefile ?
context->Makefile->GetSafeDefinition(
"CMAKE_SYSTEM_NAME") : "";
if (parameters.size() == 0)
{
return platformId ? platformId : "";
}
if (!platformId)
{
return parameters.front().empty() ? "1" : "0";
}
if (cmsysString_strcasecmp(parameters.begin()->c_str(), platformId) == 0)
{
return "1";
}
return "0";
}
} platformIdNode;
//----------------------------------------------------------------------------
static const struct VersionGreaterNode : public cmGeneratorExpressionNode
{
@ -1356,6 +1389,8 @@ cmGeneratorExpressionNode* GetNode(const std::string &identifier)
return &cCompilerVersionNode;
else if (identifier == "CXX_COMPILER_VERSION")
return &cxxCompilerVersionNode;
else if (identifier == "PLATFORM_ID")
return &platformIdNode;
else if (identifier == "CONFIGURATION")
return &configurationNode;
else if (identifier == "CONFIG")

View File

@ -186,6 +186,11 @@ add_custom_target(check-part3 ALL
-Dtest_alias_target_name=$<STREQUAL:$<TARGET_PROPERTY:Alias::SomeLib,NAME>,$<TARGET_PROPERTY:empty1,NAME>>
-Dtest_early_termination_1=$<$<1:>:
-Dtest_early_termination_2=$<$<1:>:,
-Dsystem_name=${CMAKE_HOST_SYSTEM_NAME}
-Dtest_platform_id=$<PLATFORM_ID>
-Dtest_platform_id_Linux=$<PLATFORM_ID:Linux>
-Dtest_platform_id_Windows=$<PLATFORM_ID:Windows>
-Dtest_platform_id_Darwin=$<PLATFORM_ID:Darwin>
-P ${CMAKE_CURRENT_SOURCE_DIR}/check-part3.cmake
COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 3)"
VERBATIM

View File

@ -26,3 +26,11 @@ check(test_alias_file_lib "1")
check(test_alias_target_name "1")
check(test_early_termination_1 "$<:")
check(test_early_termination_2 "$<:,")
check(test_platform_id "${system_name}")
foreach(system Linux Windows Darwin)
if(system_name STREQUAL system)
check(test_platform_id_${system} 1)
else()
check(test_platform_id_${system} 0)
endif()
endforeach()