Merge tag 'upstream/2.8.11.1'

Upstream version 2.8.11.1
ci/unstable
Modestas Vainius 12 years ago
commit ce3556a1e8

@ -1,3 +1,26 @@
Changes in CMake 2.8.11.1 (since 2.8.11)
----------------------------------------
Brad King (5):
ExternalData: Do not re-stage staged object files
try_compile: Fix quoting of libraries in generated CMakeLists.txt
KWSys: Fix SystemTools::FileIsDirectory with long paths (#14176)
FindBoost: Fix handling of \ in input paths (#14179)
Xcode: Fix framework search paths in STATIC library targets (#14191)
Modestas Vainius (1):
Fix test failures caused by regexp-sensitive characters in the build paths
Stephen Kelly (9):
include_directories: Fix handling of empty or space-only entries
try_compile: Trim whitespace from LINK_LIBRARIES entries
cmTarget: Remove some hardcoding of transitive property names.
GenexEval: Extract a getLinkedTargetsContent from TargetPropertyNode.
GenexEval: Fix evaluation of INCLUDE_DIRECTORIES target property.
GenexEval: Test evaluation of INCLUDE_DIRECTORIES target property.
FindQt4: Don't fail if certain Qt modules are unavailable.
Qt4Macros: Handle Qt ActiveX libraries in qt4_use_modules.
Genex: Fix the HEAD target used for evaluated expressions
Changes in CMake 2.8.11 (since 2.8.11-rc4) Changes in CMake 2.8.11 (since 2.8.11-rc4)
---------------------------------------- ----------------------------------------
None None

@ -551,7 +551,10 @@ function(_ExternalData_arg_find_files pattern regex)
set(relname "${entry}") set(relname "${entry}")
set(alg "") set(alg "")
endif() endif()
if("x${relname}" MATCHES "^x${regex}$" AND NOT IS_DIRECTORY "${top_src}/${entry}") if("x${relname}" MATCHES "^x${regex}$" # matches
AND NOT IS_DIRECTORY "${top_src}/${entry}" # not a directory
AND NOT "x${relname}" MATCHES "(^x|/)\\.ExternalData_" # not staged obj
)
set(name "${top_src}/${relname}") set(name "${top_src}/${relname}")
set(file "${top_bin}/${relname}") set(file "${top_bin}/${relname}")
if(alg) if(alg)

@ -928,9 +928,13 @@ foreach(COMPONENT ${Boost_FIND_COMPONENTS})
message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
"Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}") "Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}")
endif() endif()
# Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS}")
_Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_RELEASE
NAMES ${_boost_RELEASE_NAMES} NAMES ${_boost_RELEASE_NAMES}
HINTS ${_boost_LIBRARY_SEARCH_DIRS} HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
NAMES_PER_DIR NAMES_PER_DIR
DOC "${_boost_docstring_release}" DOC "${_boost_docstring_release}"
) )
@ -960,9 +964,13 @@ foreach(COMPONENT ${Boost_FIND_COMPONENTS})
message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
"Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}") "Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}")
endif() endif()
# Avoid passing backslashes to _Boost_FIND_LIBRARY due to macro re-parsing.
string(REPLACE "\\" "/" _boost_LIBRARY_SEARCH_DIRS_tmp "${_boost_LIBRARY_SEARCH_DIRS}")
_Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG _Boost_FIND_LIBRARY(Boost_${UPPERCOMPONENT}_LIBRARY_DEBUG
NAMES ${_boost_DEBUG_NAMES} NAMES ${_boost_DEBUG_NAMES}
HINTS ${_boost_LIBRARY_SEARCH_DIRS} HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
NAMES_PER_DIR NAMES_PER_DIR
DOC "${_boost_docstring_debug}" DOC "${_boost_docstring_debug}"
) )

@ -881,16 +881,20 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
endforeach() endforeach()
if(Q_WS_WIN) if(Q_WS_WIN)
set(QT_MODULES ${QT_MODULES} QAxContainer QAxServer) if (QT_QAXCONTAINER_FOUND)
# Set QT_AXCONTAINER_INCLUDE_DIR and QT_AXSERVER_INCLUDE_DIR set(QT_MODULES ${QT_MODULES} QAxContainer)
find_path(QT_QAXCONTAINER_INCLUDE_DIR ActiveQt # Set QT_AXCONTAINER_INCLUDE_DIR and QT_AXSERVER_INCLUDE_DIR
PATHS ${QT_HEADERS_DIR}/ActiveQt find_path(QT_QAXCONTAINER_INCLUDE_DIR ActiveQt
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH PATHS ${QT_HEADERS_DIR}/ActiveQt
) NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
find_path(QT_QAXSERVER_INCLUDE_DIR ActiveQt )
PATHS ${QT_HEADERS_DIR}/ActiveQt endif()
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH if (QT_QAXSERVER_FOUND)
) find_path(QT_QAXSERVER_INCLUDE_DIR ActiveQt
PATHS ${QT_HEADERS_DIR}/ActiveQt
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
)
endif()
endif() endif()
# Set QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR # Set QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR
@ -1051,14 +1055,18 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
if(Q_WS_WIN) if(Q_WS_WIN)
_QT4_ADJUST_LIB_VARS(qtmain) _QT4_ADJUST_LIB_VARS(qtmain)
_QT4_ADJUST_LIB_VARS(QAxServer) if(QT_QAXSERVER_FOUND)
set_property(TARGET Qt4::QAxServer PROPERTY _QT4_ADJUST_LIB_VARS(QAxServer)
INTERFACE_QT4_NO_LINK_QTMAIN ON set_property(TARGET Qt4::QAxServer PROPERTY
) INTERFACE_QT4_NO_LINK_QTMAIN ON
set_property(TARGET Qt4::QAxServer APPEND PROPERTY )
COMPATIBLE_INTERFACE_BOOL QT4_NO_LINK_QTMAIN) set_property(TARGET Qt4::QAxServer APPEND PROPERTY
COMPATIBLE_INTERFACE_BOOL QT4_NO_LINK_QTMAIN)
endif()
_QT4_ADJUST_LIB_VARS(QAxContainer) if(QT_QAXCONTAINER_FOUND)
_QT4_ADJUST_LIB_VARS(QAxContainer)
endif()
endif() endif()
# Only public dependencies are listed here. # Only public dependencies are listed here.
@ -1080,7 +1088,9 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
_qt4_add_target_depends(QtWebKit Gui Network) _qt4_add_target_depends(QtWebKit Gui Network)
_qt4_add_target_private_depends(Qt3Support Xml) _qt4_add_target_private_depends(Qt3Support Xml)
_qt4_add_target_private_depends(QtSvg Xml) if(QT_VERSION VERSION_GREATER 4.6)
_qt4_add_target_private_depends(QtSvg Xml)
endif()
_qt4_add_target_private_depends(QtDBus Xml) _qt4_add_target_private_depends(QtDBus Xml)
_qt4_add_target_private_depends(QtUiTools Xml Gui) _qt4_add_target_private_depends(QtUiTools Xml Gui)
_qt4_add_target_private_depends(QtHelp Sql Xml Network) _qt4_add_target_private_depends(QtHelp Sql Xml Network)
@ -1090,8 +1100,12 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
_qt4_add_target_private_depends(QtDeclarative XmlPatterns Svg Sql Gui) _qt4_add_target_private_depends(QtDeclarative XmlPatterns Svg Sql Gui)
_qt4_add_target_private_depends(QtMultimedia Gui) _qt4_add_target_private_depends(QtMultimedia Gui)
_qt4_add_target_private_depends(QtOpenGL Gui) _qt4_add_target_private_depends(QtOpenGL Gui)
_qt4_add_target_private_depends(QAxServer Gui) if(QT_QAXSERVER_FOUND)
_qt4_add_target_private_depends(QAxContainer Gui) _qt4_add_target_private_depends(QAxServer Gui)
endif()
if(QT_QAXCONTAINER_FOUND)
_qt4_add_target_private_depends(QAxContainer Gui)
endif()
_qt4_add_target_private_depends(phonon Gui) _qt4_add_target_private_depends(phonon Gui)
if(QT_QTDBUS_FOUND) if(QT_QTDBUS_FOUND)
_qt4_add_target_private_depends(phonon DBus) _qt4_add_target_private_depends(phonon DBus)

@ -451,14 +451,22 @@ function(qt4_use_modules _target _link_type)
endif() endif()
foreach(_module ${modules}) foreach(_module ${modules})
string(TOUPPER ${_module} _ucmodule) string(TOUPPER ${_module} _ucmodule)
if (NOT QT_QT${_ucmodule}_FOUND) set(_targetPrefix QT_QT${_ucmodule})
message(FATAL_ERROR "Can not use \"${_module}\" module which has not yet been found.") if (_ucmodule STREQUAL QAXCONTAINER OR _ucmodule STREQUAL QAXSERVER)
endif() if (NOT QT_Q${_ucmodule}_FOUND)
if ("${_ucmodule}" STREQUAL "MAIN") message(FATAL_ERROR "Can not use \"${_module}\" module which has not yet been found.")
message(FATAL_ERROR "Can not use \"${_module}\" module with qt4_use_modules.") endif()
set(_targetPrefix QT_Q${_ucmodule})
else()
if (NOT QT_QT${_ucmodule}_FOUND)
message(FATAL_ERROR "Can not use \"${_module}\" module which has not yet been found.")
endif()
if ("${_ucmodule}" STREQUAL "MAIN")
message(FATAL_ERROR "Can not use \"${_module}\" module with qt4_use_modules.")
endif()
endif() endif()
target_link_libraries(${_target} ${link_type} ${QT_QT${_ucmodule}_LIBRARY}) target_link_libraries(${_target} ${link_type} ${${_targetPrefix}_LIBRARIES})
set_property(TARGET ${_target} APPEND PROPERTY INCLUDE_DIRECTORIES ${QT_QT${_ucmodule}_INCLUDE_DIR} ${QT_HEADERS_DIR} ${QT_MKSPECS_DIR}/default) set_property(TARGET ${_target} APPEND PROPERTY INCLUDE_DIRECTORIES ${${_targetPrefix}_INCLUDE_DIR} ${QT_HEADERS_DIR} ${QT_MKSPECS_DIR}/default)
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS ${QT_QT${_ucmodule}_COMPILE_DEFINITIONS}) set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS ${${_targetPrefix}_COMPILE_DEFINITIONS})
endforeach() endforeach()
endfunction() endfunction()

@ -2,5 +2,5 @@
set(CMake_VERSION_MAJOR 2) set(CMake_VERSION_MAJOR 2)
set(CMake_VERSION_MINOR 8) set(CMake_VERSION_MINOR 8)
set(CMake_VERSION_PATCH 11) set(CMake_VERSION_PATCH 11)
set(CMake_VERSION_TWEAK 0) set(CMake_VERSION_TWEAK 1)
#set(CMake_VERSION_RC 0) #set(CMake_VERSION_RC 0)

@ -111,7 +111,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
++i) ++i)
{ {
extraArgs++; extraArgs++;
libsToLink += argv[i] + " "; libsToLink += "\"" + cmSystemTools::TrimWhitespace(argv[i]) + "\" ";
cmTarget *tgt = this->Makefile->FindTargetToUse(argv[i].c_str()); cmTarget *tgt = this->Makefile->FindTargetToUse(argv[i].c_str());
if (!tgt) if (!tgt)
{ {

@ -313,6 +313,60 @@ static const char* targetPropertyTransitiveWhitelist[] = {
, "INTERFACE_COMPILE_DEFINITIONS" , "INTERFACE_COMPILE_DEFINITIONS"
}; };
std::string getLinkedTargetsContent(const std::vector<std::string> &libraries,
cmTarget *target,
cmTarget *headTarget,
cmGeneratorExpressionContext *context,
cmGeneratorExpressionDAGChecker *dagChecker,
const std::string &interfacePropertyName)
{
cmGeneratorExpression ge(context->Backtrace);
std::string sep;
std::string depString;
for (std::vector<std::string>::const_iterator
it = libraries.begin();
it != libraries.end(); ++it)
{
if (*it == target->GetName())
{
// Broken code can have a target in its own link interface.
// Don't follow such link interface entries so as not to create a
// self-referencing loop.
continue;
}
if (context->Makefile->FindTargetToUse(it->c_str()))
{
depString +=
sep + "$<TARGET_PROPERTY:" + *it + "," + interfacePropertyName + ">";
sep = ";";
}
}
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge = ge.Parse(depString);
std::string linkedTargetsContent = cge->Evaluate(context->Makefile,
context->Config,
context->Quiet,
headTarget,
target,
dagChecker);
if (cge->GetHadContextSensitiveCondition())
{
context->HadContextSensitiveCondition = true;
}
return linkedTargetsContent;
}
//----------------------------------------------------------------------------
struct TransitiveWhitelistCompare
{
explicit TransitiveWhitelistCompare(const std::string &needle)
: Needle(needle) {}
bool operator() (const char *item)
{ return strcmp(item, this->Needle.c_str()) == 0; }
private:
std::string Needle;
};
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
static const struct TargetPropertyNode : public cmGeneratorExpressionNode static const struct TargetPropertyNode : public cmGeneratorExpressionNode
{ {
@ -485,49 +539,40 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
interfacePropertyName = "INTERFACE_COMPILE_DEFINITIONS"; interfacePropertyName = "INTERFACE_COMPILE_DEFINITIONS";
} }
if (interfacePropertyName == "INTERFACE_INCLUDE_DIRECTORIES" cmTarget *headTarget = context->HeadTarget ? context->HeadTarget : target;
|| interfacePropertyName == "INTERFACE_COMPILE_DEFINITIONS")
const char **transBegin = targetPropertyTransitiveWhitelist;
const char **transEnd = targetPropertyTransitiveWhitelist
+ (sizeof(targetPropertyTransitiveWhitelist) /
sizeof(*targetPropertyTransitiveWhitelist));
if (std::find_if(transBegin, transEnd,
TransitiveWhitelistCompare(propertyName)) != transEnd)
{ {
const cmTarget::LinkInterface *iface = target->GetLinkInterface( const cmTarget::LinkInterface *iface = target->GetLinkInterface(
context->Config, context->Config,
context->HeadTarget); headTarget);
if(iface) if(iface)
{ {
cmGeneratorExpression ge(context->Backtrace); linkedTargetsContent =
getLinkedTargetsContent(iface->Libraries, target,
std::string sep; headTarget,
std::string depString; context, &dagChecker,
for (std::vector<std::string>::const_iterator interfacePropertyName);
it = iface->Libraries.begin(); }
it != iface->Libraries.end(); ++it) }
{ else if (std::find_if(transBegin, transEnd,
if (*it == target->GetName()) TransitiveWhitelistCompare(interfacePropertyName)) != transEnd)
{ {
// Broken code can have a target in its own link interface. const cmTarget::LinkImplementation *impl = target->GetLinkImplementation(
// Don't follow such link interface entries so as not to create a context->Config,
// self-referencing loop. headTarget);
continue; if(impl)
} {
if (context->Makefile->FindTargetToUse(it->c_str())) linkedTargetsContent =
{ getLinkedTargetsContent(impl->Libraries, target,
depString += headTarget,
sep + "$<TARGET_PROPERTY:" + *it + "," context, &dagChecker,
+ interfacePropertyName + ">"; interfacePropertyName);
sep = ";";
}
}
cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
ge.Parse(depString);
linkedTargetsContent = cge->Evaluate(context->Makefile,
context->Config,
context->Quiet,
context->HeadTarget,
target,
&dagChecker);
if (cge->GetHadContextSensitiveCondition())
{
context->HadContextSensitiveCondition = true;
}
} }
} }
@ -574,7 +619,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
std::string result = cge->Evaluate(context->Makefile, std::string result = cge->Evaluate(context->Makefile,
context->Config, context->Config,
context->Quiet, context->Quiet,
context->HeadTarget, headTarget,
target, target,
&dagChecker); &dagChecker);

@ -2028,20 +2028,16 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
dirs.Add(incpath.c_str()); dirs.Add(incpath.c_str());
} }
} }
if(target.GetType() != cmTarget::OBJECT_LIBRARY && // Add framework search paths needed for linking.
target.GetType() != cmTarget::STATIC_LIBRARY) if(cmComputeLinkInformation* cli = target.GetLinkInformation(configName))
{ {
// Add framework search paths needed for linking. std::vector<std::string> const& fwDirs = cli->GetFrameworkPaths();
if(cmComputeLinkInformation* cli = target.GetLinkInformation(configName)) for(std::vector<std::string>::const_iterator fdi = fwDirs.begin();
fdi != fwDirs.end(); ++fdi)
{ {
std::vector<std::string> const& fwDirs = cli->GetFrameworkPaths(); if(emitted.insert(*fdi).second)
for(std::vector<std::string>::const_iterator fdi = fwDirs.begin();
fdi != fwDirs.end(); ++fdi)
{ {
if(emitted.insert(*fdi).second) fdirs.Add(this->XCodeEscapePath(fdi->c_str()).c_str());
{
fdirs.Add(this->XCodeEscapePath(fdi->c_str()).c_str());
}
} }
} }
} }

@ -116,13 +116,19 @@ void cmIncludeDirectoryCommand::GetIncludes(const std::string &arg,
{ {
std::string inc = arg.substr(lastPos,pos); std::string inc = arg.substr(lastPos,pos);
this->NormalizeInclude(inc); this->NormalizeInclude(inc);
incs.push_back(inc); if (!inc.empty())
{
incs.push_back(inc);
}
} }
lastPos = pos + 1; lastPos = pos + 1;
} }
std::string inc = arg.substr(lastPos); std::string inc = arg.substr(lastPos);
this->NormalizeInclude(inc); this->NormalizeInclude(inc);
incs.push_back(inc); if (!inc.empty())
{
incs.push_back(inc);
}
} }
void cmIncludeDirectoryCommand::NormalizeInclude(std::string &inc) void cmIncludeDirectoryCommand::NormalizeInclude(std::string &inc)
@ -133,6 +139,11 @@ void cmIncludeDirectoryCommand::NormalizeInclude(std::string &inc)
{ {
inc.assign(inc, b, 1+e-b); // copy the remaining substring inc.assign(inc, b, 1+e-b); // copy the remaining substring
} }
else
{
inc = "";
return;
}
if (!cmSystemTools::IsOff(inc.c_str())) if (!cmSystemTools::IsOff(inc.c_str()))
{ {

@ -2742,14 +2742,23 @@ bool SystemTools::FileIsDirectory(const char* name)
} }
// Remove any trailing slash from the name. // Remove any trailing slash from the name.
char buffer[KWSYS_SYSTEMTOOLS_MAXPATH]; char local_buffer[KWSYS_SYSTEMTOOLS_MAXPATH];
std::string string_buffer;
size_t last = length-1; size_t last = length-1;
if(last > 0 && (name[last] == '/' || name[last] == '\\') if(last > 0 && (name[last] == '/' || name[last] == '\\')
&& strcmp(name, "/") !=0) && strcmp(name, "/") !=0)
{ {
memcpy(buffer, name, last); if(last < sizeof(local_buffer))
buffer[last] = 0; {
name = buffer; memcpy(local_buffer, name, last);
local_buffer[last] = 0;
name = local_buffer;
}
else
{
string_buffer.append(name, last);
name = string_buffer.c_str();
}
} }
// Now check the file node type. // Now check the file node type.

@ -15,10 +15,7 @@ macro(ADD_TEST_MACRO NAME COMMAND)
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}") list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}")
endmacro() endmacro()
macro(REGEX_ESCAPE_STRING _OUT _IN) include(${CMAKE_CURRENT_SOURCE_DIR}/RegexEscapeString.cmake)
# Escape special regex metacharacters with a backslash
string(REGEX REPLACE "([$^.[|*+?()]|])" "\\\\\\1" ${_OUT} "${_IN}")
endmacro()
include(${CMAKE_CURRENT_SOURCE_DIR}/CheckFortran.cmake) include(${CMAKE_CURRENT_SOURCE_DIR}/CheckFortran.cmake)

@ -28,92 +28,95 @@ if(NOT result STREQUAL "alpha")
message(SEND_ERROR "bad value of VARIABLE PROPERTY test_var: got '${result}' instead of 'alpha'") message(SEND_ERROR "bad value of VARIABLE PROPERTY test_var: got '${result}' instead of 'alpha'")
endif() endif()
include("@CMAKE_CURRENT_SOURCE_DIR@/../RegexEscapeString.cmake")
REGEX_ESCAPE_STRING(CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@")
set(Missing-Argument-RESULT 1) set(Missing-Argument-RESULT 1)
set(Missing-Argument-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Missing-Argument.cmake:1 \\(get_property\\):.*get_property called with incorrect number of arguments.*") set(Missing-Argument-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-Missing-Argument.cmake:1 \\(get_property\\):.*get_property called with incorrect number of arguments.*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
Missing-Argument Missing-Argument
) )
set(Bad-Scope-RESULT 1) set(Bad-Scope-RESULT 1)
set(Bad-Scope-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Scope.cmake:1 \\(get_property\\):.*get_property given invalid scope FOO\\..*") set(Bad-Scope-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-Bad-Scope.cmake:1 \\(get_property\\):.*get_property given invalid scope FOO\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
Bad-Scope Bad-Scope
) )
set(Bad-Argument-RESULT 1) set(Bad-Argument-RESULT 1)
set(Bad-Argument-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Argument.cmake:1 \\(get_property\\):.*get_property given invalid argument \"FOO\"\\..*") set(Bad-Argument-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-Bad-Argument.cmake:1 \\(get_property\\):.*get_property given invalid argument \"FOO\"\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
Bad-Argument Bad-Argument
) )
set(No-Property-RESULT 1) set(No-Property-RESULT 1)
set(No-Property-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Property.cmake:1 \\(get_property\\):.*get_property not given a PROPERTY <name> argument\\..*") set(No-Property-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-No-Property.cmake:1 \\(get_property\\):.*get_property not given a PROPERTY <name> argument\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
No-Property No-Property
) )
set(Global-Name-RESULT 1) set(Global-Name-RESULT 1)
set(Global-Name-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Global-Name.cmake:1 \\(get_property\\):.*get_property given name for GLOBAL scope\\..*") set(Global-Name-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-Global-Name.cmake:1 \\(get_property\\):.*get_property given name for GLOBAL scope\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
Global-Name Global-Name
) )
set(Bad-Directory-RESULT 1) set(Bad-Directory-RESULT 1)
set(Bad-Directory-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Directory.cmake:1 \\(get_property\\):.*get_property DIRECTORY scope provided but requested directory was not.*found\\..*") set(Bad-Directory-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-Bad-Directory.cmake:1 \\(get_property\\):.*get_property DIRECTORY scope provided but requested directory was not.*found\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
Bad-Directory Bad-Directory
) )
set(No-Target-RESULT 1) set(No-Target-RESULT 1)
set(No-Target-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Target.cmake:1 \\(get_property\\):.*get_property not given name for TARGET scope\\..*") set(No-Target-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-No-Target.cmake:1 \\(get_property\\):.*get_property not given name for TARGET scope\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
No-Target No-Target
) )
set(Bad-Target-RESULT 1) set(Bad-Target-RESULT 1)
set(Bad-Target-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Target.cmake:1 \\(get_property\\):.*get_property could not find TARGET FOO\\..*") set(Bad-Target-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-Bad-Target.cmake:1 \\(get_property\\):.*get_property could not find TARGET FOO\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
Bad-Target Bad-Target
) )
set(No-Source-RESULT 1) set(No-Source-RESULT 1)
set(No-Source-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Source.cmake:1 \\(get_property\\):.*get_property not given name for SOURCE scope\\..*") set(No-Source-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-No-Source.cmake:1 \\(get_property\\):.*get_property not given name for SOURCE scope\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
No-Source No-Source
) )
set(No-Test-RESULT 1) set(No-Test-RESULT 1)
set(No-Test-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Test.cmake:1 \\(get_property\\):.*get_property not given name for TEST scope\\..*") set(No-Test-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-No-Test.cmake:1 \\(get_property\\):.*get_property not given name for TEST scope\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
No-Test No-Test
) )
set(Bad-Test-RESULT 1) set(Bad-Test-RESULT 1)
set(Bad-Test-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Test.cmake:1 \\(get_property\\):.*get_property given TEST name that does not exist: FOO.*") set(Bad-Test-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-Bad-Test.cmake:1 \\(get_property\\):.*get_property given TEST name that does not exist: FOO.*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
Bad-Test Bad-Test
) )
set(Variable-Name-RESULT 1) set(Variable-Name-RESULT 1)
set(Variable-Name-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Variable-Name.cmake:1 \\(get_property\\):.*get_property given name for VARIABLE scope\\..*") set(Variable-Name-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-Variable-Name.cmake:1 \\(get_property\\):.*get_property given name for VARIABLE scope\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
Variable-Name Variable-Name
) )
set(No-Cache-RESULT 1) set(No-Cache-RESULT 1)
set(No-Cache-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Cache.cmake:1 \\(get_property\\):.*get_property not given name for CACHE scope\\..*") set(No-Cache-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?GetProperty-No-Cache.cmake:1 \\(get_property\\):.*get_property not given name for CACHE scope\\..*")
check_cmake_test(GetProperty check_cmake_test(GetProperty
No-Cache No-Cache

@ -7,6 +7,9 @@ foreach(_arg "" 0 1 2 ${TRUE_NAMES} ${FALSE_NAMES})
set(VAR_${_arg} "${_arg}") set(VAR_${_arg} "${_arg}")
endforeach() endforeach()
include("@CMAKE_CURRENT_SOURCE_DIR@/../RegexEscapeString.cmake")
REGEX_ESCAPE_STRING(CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@")
macro(test_vars _old) macro(test_vars _old)
# Variables set to false or not set. # Variables set to false or not set.
foreach(_var "" 0 ${FALSE_NAMES} UNDEFINED) foreach(_var "" 0 ${FALSE_NAMES} UNDEFINED)
@ -158,7 +161,7 @@ endforeach()
test_vars("") test_vars("")
set(Invalid-Argument-RESULT 1) set(Invalid-Argument-RESULT 1)
set(Invalid-Argument-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?If-Invalid-Argument.cmake:1 \\(if\\):.*Unknown arguments specified.*") set(Invalid-Argument-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?If-Invalid-Argument.cmake:1 \\(if\\):.*Unknown arguments specified.*")
include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake") include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake")
check_cmake_test(If check_cmake_test(If

@ -1,5 +1,8 @@
include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake") include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake")
include("@CMAKE_CURRENT_SOURCE_DIR@/../RegexEscapeString.cmake")
REGEX_ESCAPE_STRING(CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@")
macro(TEST command expected) macro(TEST command expected)
if("x${result}" STREQUAL "x${expected}") if("x${result}" STREQUAL "x${expected}")
#message("TEST \"${command}\" success: \"${result}\" expected: \"${expected}\"") #message("TEST \"${command}\" success: \"${result}\" expected: \"${expected}\"")
@ -101,7 +104,7 @@ list(SORT result)
TEST("SORT empty result" "") TEST("SORT empty result" "")
set(No-Arguments-RESULT 1) set(No-Arguments-RESULT 1)
set(No-Arguments-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?List-No-Arguments.cmake:1 \\(list\\):.*list must be called with at least two arguments.*") set(No-Arguments-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?List-No-Arguments.cmake:1 \\(list\\):.*list must be called with at least two arguments.*")
# these trigger top-level condition # these trigger top-level condition
foreach(cmd IN ITEMS Append Find Get Insert Length Reverse Remove_At Remove_Duplicates Remove_Item Sort) foreach(cmd IN ITEMS Append Find Get Insert Length Reverse Remove_At Remove_Duplicates Remove_Item Sort)
@ -130,33 +133,33 @@ foreach(cmd IN ITEMS Find Get Insert Length Remove_At Remove_Item)
endforeach() endforeach()
set(Length-Too-Many-Arguments-RESULT 1) set(Length-Too-Many-Arguments-RESULT 1)
set(Length-Too-Many-Arguments-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?List-Length-Too-Many-Arguments.cmake:1 \\(list\\):.*list sub-command LENGTH requires two arguments.*") set(Length-Too-Many-Arguments-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?List-Length-Too-Many-Arguments.cmake:1 \\(list\\):.*list sub-command LENGTH requires two arguments.*")
set(Reverse-Too-Many-Arguments-RESULT 1) set(Reverse-Too-Many-Arguments-RESULT 1)
set(Reverse-Too-Many-Arguments-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?List-Reverse-Too-Many-Arguments.cmake:1 \\(list\\):.*list sub-command REVERSE only takes one argument.*") set(Reverse-Too-Many-Arguments-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?List-Reverse-Too-Many-Arguments.cmake:1 \\(list\\):.*list sub-command REVERSE only takes one argument.*")
set(Remove_Duplicates-Too-Many-Arguments-RESULT 1) set(Remove_Duplicates-Too-Many-Arguments-RESULT 1)
set(Remove_Duplicates-Too-Many-Arguments-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?List-Remove_Duplicates-Too-Many-Arguments.cmake:1 \\(list\\):.*list sub-command REMOVE_DUPLICATES only takes one argument.*") set(Remove_Duplicates-Too-Many-Arguments-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?List-Remove_Duplicates-Too-Many-Arguments.cmake:1 \\(list\\):.*list sub-command REMOVE_DUPLICATES only takes one argument.*")
set(Sort-Too-Many-Arguments-RESULT 1) set(Sort-Too-Many-Arguments-RESULT 1)
set(Sort-Too-Many-Arguments-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?List-Sort-Too-Many-Arguments.cmake:1 \\(list\\):.*list sub-command SORT only takes one argument.*") set(Sort-Too-Many-Arguments-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?List-Sort-Too-Many-Arguments.cmake:1 \\(list\\):.*list sub-command SORT only takes one argument.*")
set(Invalid-Subcommand-RESULT 1) set(Invalid-Subcommand-RESULT 1)
set(Invalid-Subcommand-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?List-Invalid-Subcommand.cmake:1 \\(list\\):.*list does not recognize sub-command NO_SUCH_SUBCOMMAND.*") set(Invalid-Subcommand-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?List-Invalid-Subcommand.cmake:1 \\(list\\):.*list does not recognize sub-command NO_SUCH_SUBCOMMAND.*")
foreach(cmd Get Insert Remove_At) foreach(cmd Get Insert Remove_At)
set(${cmd}-Invalid-Index-RESULT 1) set(${cmd}-Invalid-Index-RESULT 1)
set(${cmd}-Invalid-Index-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?List-${cmd}-Invalid-Index.cmake:2 \\(list\\):.*list index: 3 out of range \\(-3, 2\\).*") set(${cmd}-Invalid-Index-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?List-${cmd}-Invalid-Index.cmake:2 \\(list\\):.*list index: 3 out of range \\(-3, 2\\).*")
endforeach() endforeach()
foreach(cmd Remove_Item Reverse Remove_Duplicates Sort Remove_At) foreach(cmd Remove_Item Reverse Remove_Duplicates Sort Remove_At)
string(TOUPPER ${cmd} Cmd) string(TOUPPER ${cmd} Cmd)
set(${cmd}-Nonexistent-List-RESULT 1) set(${cmd}-Nonexistent-List-RESULT 1)
set(${cmd}-Nonexistent-List-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?List-${cmd}-Nonexistent-List.cmake:2 \\(list\\):.*sub-command ${Cmd} requires list to be present.*") set(${cmd}-Nonexistent-List-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?List-${cmd}-Nonexistent-List.cmake:2 \\(list\\):.*sub-command ${Cmd} requires list to be present.*")
endforeach() endforeach()
set(Get-CMP0007-Warn-RESULT 0) set(Get-CMP0007-Warn-RESULT 0)
set(Get-CMP0007-Warn-STDERR ".*CMake Warning \\(dev\\) at (@CMAKE_CURRENT_SOURCE_DIR@/)?List-Get-CMP0007-Warn.cmake:3 \\(list\\):.*Policy CMP0007 is not set:.*") set(Get-CMP0007-Warn-STDERR ".*CMake Warning \\(dev\\) at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?List-Get-CMP0007-Warn.cmake:3 \\(list\\):.*Policy CMP0007 is not set:.*")
check_cmake_test(List check_cmake_test(List
No-Arguments No-Arguments

@ -1,6 +1,9 @@
set(NUMBERS "") set(NUMBERS "")
set(COUNT 0) set(COUNT 0)
include("@CMAKE_CURRENT_SOURCE_DIR@/../RegexEscapeString.cmake")
REGEX_ESCAPE_STRING(CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@")
while(COUNT LESS 200) while(COUNT LESS 200)
set(NUMBERS "${NUMBERS} ${COUNT}") set(NUMBERS "${NUMBERS} ${COUNT}")
set(COUNT "2${COUNT}") set(COUNT "2${COUNT}")
@ -16,8 +19,9 @@ if(NOT NUMBERS STREQUAL " 0 3 30 20 3 30")
message(SEND_ERROR "while loop nesting error, result: '${NUMBERS}'") message(SEND_ERROR "while loop nesting error, result: '${NUMBERS}'")
endif() endif()
set(Missing-Argument-RESULT 1) set(Missing-Argument-RESULT 1)
set(Missing-Argument-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Missing-Argument.cmake:1 \\(while\\):.*while called with incorrect number of arguments.*") set(Missing-Argument-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?While-Missing-Argument.cmake:1 \\(while\\):.*while called with incorrect number of arguments.*")
include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake") include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake")
check_cmake_test(While check_cmake_test(While
@ -25,28 +29,28 @@ check_cmake_test(While
) )
set(Missing-Endwhile-RESULT 1) set(Missing-Endwhile-RESULT 1)
set(Missing-Endwhile-STDERR ".*CMake Error in (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Missing-Endwhile.cmake:.*A logical block opening on the line.*(@CMAKE_CURRENT_SOURCE_DIR@/)?While-Missing-Endwhile.cmake:1 \\(while\\).*is not closed\\..*") set(Missing-Endwhile-STDERR ".*CMake Error in (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?While-Missing-Endwhile.cmake:.*A logical block opening on the line.*(${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?While-Missing-Endwhile.cmake:1 \\(while\\).*is not closed\\..*")
check_cmake_test(While check_cmake_test(While
Missing-Endwhile Missing-Endwhile
) )
set(Endwhile-Mismatch-RESULT 0) set(Endwhile-Mismatch-RESULT 0)
set(Endwhile-Mismatch-STDERR ".*CMake Warning \\(dev\\) in (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Mismatch.cmake:.*A logical block opening on the line.*(@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Mismatch.cmake:1 \\(while\\).*with mis-matching arguments\\..*") set(Endwhile-Mismatch-STDERR ".*CMake Warning \\(dev\\) in (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?While-Endwhile-Mismatch.cmake:.*A logical block opening on the line.*(${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?While-Endwhile-Mismatch.cmake:1 \\(while\\).*with mis-matching arguments\\..*")
check_cmake_test(While check_cmake_test(While
Endwhile-Mismatch Endwhile-Mismatch
) )
set(Endwhile-Alone-RESULT 1) set(Endwhile-Alone-RESULT 1)
set(Endwhile-Alone-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Alone.cmake:1 \\(endwhile\\):.*An ENDWHILE command was found outside of a proper WHILE ENDWHILE.*structure\\.\n.*$") set(Endwhile-Alone-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?While-Endwhile-Alone.cmake:1 \\(endwhile\\):.*An ENDWHILE command was found outside of a proper WHILE ENDWHILE.*structure\\.\n.*$")
check_cmake_test(While check_cmake_test(While
Endwhile-Alone Endwhile-Alone
) )
set(Endwhile-Alone-Args-RESULT 1) set(Endwhile-Alone-Args-RESULT 1)
set(Endwhile-Alone-Args-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Alone-Args.cmake:1 \\(endwhile\\):.*An ENDWHILE command was found outside of a proper WHILE ENDWHILE.*structure\\. Or its arguments did not.*$") set(Endwhile-Alone-Args-STDERR ".*CMake Error at (${CTEST_ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/)?While-Endwhile-Alone-Args.cmake:1 \\(endwhile\\):.*An ENDWHILE command was found outside of a proper WHILE ENDWHILE.*structure\\. Or its arguments did not.*$")
check_cmake_test(While check_cmake_test(While
Endwhile-Alone-Args Endwhile-Alone-Args

@ -1,3 +1,5 @@
REGEX_ESCAPE_STRING(CTEST_ESCAPED_CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
foreach (_retval 0 1) foreach (_retval 0 1)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ret${_retval}.c" "int main(){return ${_retval};}\n") file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ret${_retval}.c" "int main(){return ${_retval};}\n")
endforeach () endforeach ()
@ -49,7 +51,7 @@ string(REPLACE "+" "\\+" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND_ESCAPED}")
foreach (_unkn Unknown UnknownQuoted) foreach (_unkn Unknown UnknownQuoted)
set_tests_properties(CTestTestMemcheck${_unkn} PROPERTIES set_tests_properties(CTestTestMemcheck${_unkn} PROPERTIES
PASS_REGULAR_EXPRESSION "Do not understand memory checker: ${CMAKE_COMMAND_ESCAPED}\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/${_unkn}/test.cmake\n") PASS_REGULAR_EXPRESSION "Do not understand memory checker: ${CMAKE_COMMAND_ESCAPED}\n(.*\n)?Error in read script: ${CTEST_ESCAPED_CMAKE_CURRENT_BINARY_DIR}/${_unkn}/test.cmake\n")
endforeach () endforeach ()
set_tests_properties(CTestTestMemcheckNotExist PROPERTIES set_tests_properties(CTestTestMemcheckNotExist PROPERTIES
@ -67,7 +69,7 @@ foreach (_pp Pre Post)
string(TOLOWER ${_pp} _pp_lower) string(TOLOWER ${_pp} _pp_lower)
set_tests_properties(CTestTestMemcheckDummyValgrindFail${_pp} set_tests_properties(CTestTestMemcheckDummyValgrindFail${_pp}
PROPERTIES PROPERTIES
PASS_REGULAR_EXPRESSION "\nProblem running command: ${CMAKE_CURRENT_BINARY_DIR}[^\n]*fail[^\n]*\n(.*\n)?Problem executing ${_pp_lower}-memcheck command\\(s\\\).\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/DummyValgrindFail${_pp}/test.cmake\n") PASS_REGULAR_EXPRESSION "\nProblem running command: ${CTEST_ESCAPED_CMAKE_CURRENT_BINARY_DIR}[^\n]*fail[^\n]*\n(.*\n)?Problem executing ${_pp_lower}-memcheck command\\(s\\\).\n(.*\n)?Error in read script: ${CTEST_ESCAPED_CMAKE_CURRENT_BINARY_DIR}/DummyValgrindFail${_pp}/test.cmake\n")
endforeach () endforeach ()
set_tests_properties(CTestTestMemcheckDummyValgrindIgnoreMemcheck set_tests_properties(CTestTestMemcheckDummyValgrindIgnoreMemcheck
@ -75,7 +77,7 @@ set_tests_properties(CTestTestMemcheckDummyValgrindIgnoreMemcheck
PASS_REGULAR_EXPRESSION "\n2/2 Test #2: RunCMakeAgain .*\n1/1 MemCheck #1: RunCMake .*${NORMAL_CTEST_OUTPUT}") PASS_REGULAR_EXPRESSION "\n2/2 Test #2: RunCMakeAgain .*\n1/1 MemCheck #1: RunCMake .*${NORMAL_CTEST_OUTPUT}")
set_tests_properties(CTestTestMemcheckDummyPurify PROPERTIES set_tests_properties(CTestTestMemcheckDummyPurify PROPERTIES
PASS_REGULAR_EXPRESSION "\nCannot find memory tester output file: ${CMAKE_CURRENT_BINARY_DIR}/DummyPurify/Testing/Temporary/MemoryChecker.log\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/DummyPurify/test.cmake\n") PASS_REGULAR_EXPRESSION "\nCannot find memory tester output file: ${CTEST_ESCAPED_CMAKE_CURRENT_BINARY_DIR}/DummyPurify/Testing/Temporary/MemoryChecker.log\n(.*\n)?Error in read script: ${CTEST_ESCAPED_CMAKE_CURRENT_BINARY_DIR}/DummyPurify/test.cmake\n")
set_tests_properties(CTestTestMemcheckDummyBC PROPERTIES set_tests_properties(CTestTestMemcheckDummyBC PROPERTIES
PASS_REGULAR_EXPRESSION "\nCannot find memory tester output file: ${CMAKE_CURRENT_BINARY_DIR}/DummyBC/Testing/Temporary/MemoryChecker.log\n(.*\n)?Error parsing XML in stream at line 1: no element found\n(.*\n)?Error in read script: ${CMAKE_CURRENT_BINARY_DIR}/DummyBC/test.cmake\n") PASS_REGULAR_EXPRESSION "\nCannot find memory tester output file: ${CTEST_ESCAPED_CMAKE_CURRENT_BINARY_DIR}/DummyBC/Testing/Temporary/MemoryChecker.log\n(.*\n)?Error parsing XML in stream at line 1: no element found\n(.*\n)?Error in read script: ${CTEST_ESCAPED_CMAKE_CURRENT_BINARY_DIR}/DummyBC/test.cmake\n")

@ -58,3 +58,14 @@ get_property(propContentAfter DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
if (NOT propContentAfter STREQUAL "") if (NOT propContentAfter STREQUAL "")
message(SEND_ERROR "Clearing DIRECTORY property failed.") message(SEND_ERROR "Clearing DIRECTORY property failed.")
endif() endif()
add_library(empty_entry_test SHARED empty.cpp)
set_target_properties(empty_entry_test PROPERTIES INCLUDE_DIRECTORIES "")
include_directories(/one/two
" "
" "
)
get_target_property(incs empty_entry_test INCLUDE_DIRECTORIES)
if (NOT incs STREQUAL ";/one/two")
message(SEND_ERROR "Empty include_directories entry was not ignored.")
endif()

@ -109,6 +109,30 @@ set_property(TARGET libbad APPEND PROPERTY
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/bad" INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/bad"
) )
add_library(lib6 SHARED other.cpp)
add_library(lib7 SHARED other.cpp)
target_link_libraries(lib7 $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:lib6>)
target_include_directories(lib7 PUBLIC $<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:/lib7/include>)
add_custom_target(head_target_test "some_bogus_custom_tool \"$<TARGET_PROPERTY:lib7,INCLUDE_DIRECTORIES>$<TARGET_PROPERTY:lib7,INTERFACE_INCLUDE_DIRECTORIES>\"")
add_library(includes_source_good empty.cpp)
target_include_directories(includes_source_good
INTERFACE
"${CMAKE_CURRENT_BINARY_DIR}/good"
"${CMAKE_CURRENT_BINARY_DIR}/othergood/"
)
add_library(includes_source_bad empty.cpp)
target_include_directories(includes_source_bad
INTERFACE
"${CMAKE_CURRENT_BINARY_DIR}/bad"
)
add_library(includes_proxy SHARED empty.cpp)
target_link_libraries(includes_proxy includes_source_good)
target_link_libraries(includes_proxy LINK_INTERFACE_LIBRARIES includes_source_bad)
add_executable(copy_includes copy_includes.cpp)
target_include_directories(copy_includes PRIVATE $<TARGET_PROPERTY:includes_proxy,INCLUDE_DIRECTORIES>)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib5.cpp" "#include \"common.h\"\n") file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib5.cpp" "#include \"common.h\"\n")
add_library(lib5 "${CMAKE_CURRENT_BINARY_DIR}/lib5.cpp") add_library(lib5 "${CMAKE_CURRENT_BINARY_DIR}/lib5.cpp")

@ -0,0 +1,7 @@
#include "common.h"
int main()
{
return 0;
}

@ -0,0 +1,7 @@
#ifdef _WIN32
__declspec(dllexport)
#endif
int empty(void)
{
return 0;
}

@ -0,0 +1,6 @@
#ifdef _WIN32
__declspec(dllexport)
#endif
int other() {
return 0;
}

@ -0,0 +1,4 @@
#ifdef _WIN32
__declspec(dllexport)
#endif
int empty() { return 0; }

@ -0,0 +1,4 @@
macro(REGEX_ESCAPE_STRING _OUT _IN)
# Escape special regex metacharacters with a backslash
string(REGEX REPLACE "([$^.[|*+?()]|])" "\\\\\\1" ${_OUT} "${_IN}")
endmacro()

@ -0,0 +1,5 @@
-- Linked Dir/ToLink.txt.md5 to ExternalData MD5/c18ff9804c8deec9eaeb17063cda8b7b
-- Raw data correctly transformed to content link!
-- Staged content exists!
-- Staged content is correct!
-- Staged content was correctly not re-staged!

@ -0,0 +1,37 @@
include(ExternalData)
set(ExternalData_LINK_CONTENT MD5)
set(ExternalData_SOURCE_ROOT ${CMAKE_CURRENT_BINARY_DIR})
set(ExternalData_BINARY_ROOT ${CMAKE_CURRENT_BINARY_DIR}/ExternalData)
set(input ${CMAKE_CURRENT_BINARY_DIR}/Dir)
set(output ${CMAKE_CURRENT_BINARY_DIR}/ExternalData/Dir)
set(staged "${input}/.ExternalData_MD5_c18ff9804c8deec9eaeb17063cda8b7b")
set(content "To be transformed into a content link.")
file(REMOVE ${staged})
file(REMOVE_RECURSE ${input})
file(WRITE ${input}/ToLink.txt "${content}")
ExternalData_Expand_Arguments(Data args "DATA{${input}/,REGEX:.*}")
if("x${args}" STREQUAL "x${output}")
message(STATUS "Raw data correctly transformed to content link!")
else()
message(FATAL_ERROR "Data reference transformed to:\n ${args}\n"
"but we expected:\n ${output}")
endif()
if(EXISTS "${staged}")
message(STATUS "Staged content exists!")
else()
message(FATAL_ERROR "Staged content missing!")
endif()
# Expand again to check whether staged content is ignored.
ExternalData_Expand_Arguments(Data args "DATA{${input}/,REGEX:.*}")
file(STRINGS "${staged}" staged_content LIMIT_INPUT 1024)
if("${content}" STREQUAL "${staged_content}")
message(STATUS "Staged content is correct!")
else()
message(STATUS "Staged content is incorrect!")
endif()
if(EXISTS "${staged}.md5")
message(FATAL_ERROR "Staged content was incorrectly re-staged!")
else()
message(STATUS "Staged content was correctly not re-staged!")
endif()

@ -13,6 +13,7 @@ run_cmake(Directory4)
run_cmake(Directory5) run_cmake(Directory5)
run_cmake(LinkContentMD5) run_cmake(LinkContentMD5)
run_cmake(LinkContentSHA1) run_cmake(LinkContentSHA1)
run_cmake(LinkDirectory1)
run_cmake(MissingData) run_cmake(MissingData)
run_cmake(NoLinkInSource) run_cmake(NoLinkInSource)
run_cmake(NoURLTemplates) run_cmake(NoURLTemplates)

Loading…
Cancel
Save