Imported Upstream version 2.8.11.1
This commit is contained in:
parent
584510569f
commit
9885828817
@ -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)
|
||||
----------------------------------------
|
||||
None
|
||||
|
@ -551,7 +551,10 @@ function(_ExternalData_arg_find_files pattern regex)
|
||||
set(relname "${entry}")
|
||||
set(alg "")
|
||||
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(file "${top_bin}/${relname}")
|
||||
if(alg)
|
||||
|
@ -928,9 +928,13 @@ foreach(COMPONENT ${Boost_FIND_COMPONENTS})
|
||||
message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
|
||||
"Searching for ${UPPERCOMPONENT}_LIBRARY_RELEASE: ${_boost_RELEASE_NAMES}")
|
||||
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
|
||||
NAMES ${_boost_RELEASE_NAMES}
|
||||
HINTS ${_boost_LIBRARY_SEARCH_DIRS}
|
||||
HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
|
||||
NAMES_PER_DIR
|
||||
DOC "${_boost_docstring_release}"
|
||||
)
|
||||
@ -960,9 +964,13 @@ foreach(COMPONENT ${Boost_FIND_COMPONENTS})
|
||||
message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] "
|
||||
"Searching for ${UPPERCOMPONENT}_LIBRARY_DEBUG: ${_boost_DEBUG_NAMES}")
|
||||
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
|
||||
NAMES ${_boost_DEBUG_NAMES}
|
||||
HINTS ${_boost_LIBRARY_SEARCH_DIRS}
|
||||
HINTS ${_boost_LIBRARY_SEARCH_DIRS_tmp}
|
||||
NAMES_PER_DIR
|
||||
DOC "${_boost_docstring_debug}"
|
||||
)
|
||||
|
@ -881,16 +881,20 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
|
||||
endforeach()
|
||||
|
||||
if(Q_WS_WIN)
|
||||
set(QT_MODULES ${QT_MODULES} QAxContainer QAxServer)
|
||||
# Set QT_AXCONTAINER_INCLUDE_DIR and QT_AXSERVER_INCLUDE_DIR
|
||||
find_path(QT_QAXCONTAINER_INCLUDE_DIR ActiveQt
|
||||
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
|
||||
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
|
||||
)
|
||||
if (QT_QAXCONTAINER_FOUND)
|
||||
set(QT_MODULES ${QT_MODULES} QAxContainer)
|
||||
# Set QT_AXCONTAINER_INCLUDE_DIR and QT_AXSERVER_INCLUDE_DIR
|
||||
find_path(QT_QAXCONTAINER_INCLUDE_DIR ActiveQt
|
||||
PATHS ${QT_HEADERS_DIR}/ActiveQt
|
||||
NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH
|
||||
)
|
||||
endif()
|
||||
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()
|
||||
|
||||
# Set QT_QTDESIGNERCOMPONENTS_INCLUDE_DIR
|
||||
@ -1051,14 +1055,18 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
|
||||
if(Q_WS_WIN)
|
||||
_QT4_ADJUST_LIB_VARS(qtmain)
|
||||
|
||||
_QT4_ADJUST_LIB_VARS(QAxServer)
|
||||
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)
|
||||
if(QT_QAXSERVER_FOUND)
|
||||
_QT4_ADJUST_LIB_VARS(QAxServer)
|
||||
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)
|
||||
endif()
|
||||
|
||||
_QT4_ADJUST_LIB_VARS(QAxContainer)
|
||||
if(QT_QAXCONTAINER_FOUND)
|
||||
_QT4_ADJUST_LIB_VARS(QAxContainer)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# 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_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(QtUiTools Xml Gui)
|
||||
_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(QtMultimedia Gui)
|
||||
_qt4_add_target_private_depends(QtOpenGL Gui)
|
||||
_qt4_add_target_private_depends(QAxServer Gui)
|
||||
_qt4_add_target_private_depends(QAxContainer Gui)
|
||||
if(QT_QAXSERVER_FOUND)
|
||||
_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)
|
||||
if(QT_QTDBUS_FOUND)
|
||||
_qt4_add_target_private_depends(phonon DBus)
|
||||
|
@ -451,14 +451,22 @@ function(qt4_use_modules _target _link_type)
|
||||
endif()
|
||||
foreach(_module ${modules})
|
||||
string(TOUPPER ${_module} _ucmodule)
|
||||
if (NOT QT_QT${_ucmodule}_FOUND)
|
||||
message(FATAL_ERROR "Can not use \"${_module}\" module which has not yet been found.")
|
||||
set(_targetPrefix QT_QT${_ucmodule})
|
||||
if (_ucmodule STREQUAL QAXCONTAINER OR _ucmodule STREQUAL QAXSERVER)
|
||||
if (NOT QT_Q${_ucmodule}_FOUND)
|
||||
message(FATAL_ERROR "Can not use \"${_module}\" module which has not yet been found.")
|
||||
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()
|
||||
if ("${_ucmodule}" STREQUAL "MAIN")
|
||||
message(FATAL_ERROR "Can not use \"${_module}\" module with qt4_use_modules.")
|
||||
endif()
|
||||
target_link_libraries(${_target} ${link_type} ${QT_QT${_ucmodule}_LIBRARY})
|
||||
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 COMPILE_DEFINITIONS ${QT_QT${_ucmodule}_COMPILE_DEFINITIONS})
|
||||
target_link_libraries(${_target} ${link_type} ${${_targetPrefix}_LIBRARIES})
|
||||
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 ${${_targetPrefix}_COMPILE_DEFINITIONS})
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
@ -2,5 +2,5 @@
|
||||
set(CMake_VERSION_MAJOR 2)
|
||||
set(CMake_VERSION_MINOR 8)
|
||||
set(CMake_VERSION_PATCH 11)
|
||||
set(CMake_VERSION_TWEAK 0)
|
||||
set(CMake_VERSION_TWEAK 1)
|
||||
#set(CMake_VERSION_RC 0)
|
||||
|
@ -111,7 +111,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
|
||||
++i)
|
||||
{
|
||||
extraArgs++;
|
||||
libsToLink += argv[i] + " ";
|
||||
libsToLink += "\"" + cmSystemTools::TrimWhitespace(argv[i]) + "\" ";
|
||||
cmTarget *tgt = this->Makefile->FindTargetToUse(argv[i].c_str());
|
||||
if (!tgt)
|
||||
{
|
||||
|
@ -313,6 +313,60 @@ static const char* targetPropertyTransitiveWhitelist[] = {
|
||||
, "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
|
||||
{
|
||||
@ -485,49 +539,40 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||
interfacePropertyName = "INTERFACE_COMPILE_DEFINITIONS";
|
||||
}
|
||||
|
||||
if (interfacePropertyName == "INTERFACE_INCLUDE_DIRECTORIES"
|
||||
|| interfacePropertyName == "INTERFACE_COMPILE_DEFINITIONS")
|
||||
cmTarget *headTarget = context->HeadTarget ? context->HeadTarget : target;
|
||||
|
||||
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(
|
||||
context->Config,
|
||||
context->HeadTarget);
|
||||
headTarget);
|
||||
if(iface)
|
||||
{
|
||||
cmGeneratorExpression ge(context->Backtrace);
|
||||
|
||||
std::string sep;
|
||||
std::string depString;
|
||||
for (std::vector<std::string>::const_iterator
|
||||
it = iface->Libraries.begin();
|
||||
it != iface->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);
|
||||
linkedTargetsContent = cge->Evaluate(context->Makefile,
|
||||
context->Config,
|
||||
context->Quiet,
|
||||
context->HeadTarget,
|
||||
target,
|
||||
&dagChecker);
|
||||
if (cge->GetHadContextSensitiveCondition())
|
||||
{
|
||||
context->HadContextSensitiveCondition = true;
|
||||
}
|
||||
linkedTargetsContent =
|
||||
getLinkedTargetsContent(iface->Libraries, target,
|
||||
headTarget,
|
||||
context, &dagChecker,
|
||||
interfacePropertyName);
|
||||
}
|
||||
}
|
||||
else if (std::find_if(transBegin, transEnd,
|
||||
TransitiveWhitelistCompare(interfacePropertyName)) != transEnd)
|
||||
{
|
||||
const cmTarget::LinkImplementation *impl = target->GetLinkImplementation(
|
||||
context->Config,
|
||||
headTarget);
|
||||
if(impl)
|
||||
{
|
||||
linkedTargetsContent =
|
||||
getLinkedTargetsContent(impl->Libraries, target,
|
||||
headTarget,
|
||||
context, &dagChecker,
|
||||
interfacePropertyName);
|
||||
}
|
||||
}
|
||||
|
||||
@ -574,7 +619,7 @@ static const struct TargetPropertyNode : public cmGeneratorExpressionNode
|
||||
std::string result = cge->Evaluate(context->Makefile,
|
||||
context->Config,
|
||||
context->Quiet,
|
||||
context->HeadTarget,
|
||||
headTarget,
|
||||
target,
|
||||
&dagChecker);
|
||||
|
||||
|
@ -2028,20 +2028,16 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
|
||||
dirs.Add(incpath.c_str());
|
||||
}
|
||||
}
|
||||
if(target.GetType() != cmTarget::OBJECT_LIBRARY &&
|
||||
target.GetType() != cmTarget::STATIC_LIBRARY)
|
||||
// Add framework search paths needed for linking.
|
||||
if(cmComputeLinkInformation* cli = target.GetLinkInformation(configName))
|
||||
{
|
||||
// Add framework search paths needed for linking.
|
||||
if(cmComputeLinkInformation* cli = target.GetLinkInformation(configName))
|
||||
std::vector<std::string> const& fwDirs = cli->GetFrameworkPaths();
|
||||
for(std::vector<std::string>::const_iterator fdi = fwDirs.begin();
|
||||
fdi != fwDirs.end(); ++fdi)
|
||||
{
|
||||
std::vector<std::string> const& fwDirs = cli->GetFrameworkPaths();
|
||||
for(std::vector<std::string>::const_iterator fdi = fwDirs.begin();
|
||||
fdi != fwDirs.end(); ++fdi)
|
||||
if(emitted.insert(*fdi).second)
|
||||
{
|
||||
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);
|
||||
this->NormalizeInclude(inc);
|
||||
incs.push_back(inc);
|
||||
if (!inc.empty())
|
||||
{
|
||||
incs.push_back(inc);
|
||||
}
|
||||
}
|
||||
lastPos = pos + 1;
|
||||
}
|
||||
std::string inc = arg.substr(lastPos);
|
||||
this->NormalizeInclude(inc);
|
||||
incs.push_back(inc);
|
||||
if (!inc.empty())
|
||||
{
|
||||
incs.push_back(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
|
||||
}
|
||||
else
|
||||
{
|
||||
inc = "";
|
||||
return;
|
||||
}
|
||||
|
||||
if (!cmSystemTools::IsOff(inc.c_str()))
|
||||
{
|
||||
|
@ -2742,14 +2742,23 @@ bool SystemTools::FileIsDirectory(const char* 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;
|
||||
if(last > 0 && (name[last] == '/' || name[last] == '\\')
|
||||
&& strcmp(name, "/") !=0)
|
||||
{
|
||||
memcpy(buffer, name, last);
|
||||
buffer[last] = 0;
|
||||
name = buffer;
|
||||
if(last < sizeof(local_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.
|
||||
|
@ -15,10 +15,7 @@ macro(ADD_TEST_MACRO NAME COMMAND)
|
||||
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}")
|
||||
endmacro()
|
||||
|
||||
macro(REGEX_ESCAPE_STRING _OUT _IN)
|
||||
# Escape special regex metacharacters with a backslash
|
||||
string(REGEX REPLACE "([$^.[|*+?()]|])" "\\\\\\1" ${_OUT} "${_IN}")
|
||||
endmacro()
|
||||
include(${CMAKE_CURRENT_SOURCE_DIR}/RegexEscapeString.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'")
|
||||
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-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
|
||||
Missing-Argument
|
||||
)
|
||||
|
||||
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
|
||||
Bad-Scope
|
||||
)
|
||||
|
||||
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
|
||||
Bad-Argument
|
||||
)
|
||||
|
||||
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
|
||||
No-Property
|
||||
)
|
||||
|
||||
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
|
||||
Global-Name
|
||||
)
|
||||
|
||||
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
|
||||
Bad-Directory
|
||||
)
|
||||
|
||||
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
|
||||
No-Target
|
||||
)
|
||||
|
||||
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
|
||||
Bad-Target
|
||||
)
|
||||
|
||||
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
|
||||
No-Source
|
||||
)
|
||||
|
||||
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
|
||||
No-Test
|
||||
)
|
||||
|
||||
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
|
||||
Bad-Test
|
||||
)
|
||||
|
||||
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
|
||||
Variable-Name
|
||||
)
|
||||
|
||||
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
|
||||
No-Cache
|
||||
|
@ -7,6 +7,9 @@ foreach(_arg "" 0 1 2 ${TRUE_NAMES} ${FALSE_NAMES})
|
||||
set(VAR_${_arg} "${_arg}")
|
||||
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)
|
||||
# Variables set to false or not set.
|
||||
foreach(_var "" 0 ${FALSE_NAMES} UNDEFINED)
|
||||
@ -158,7 +161,7 @@ endforeach()
|
||||
test_vars("")
|
||||
|
||||
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")
|
||||
check_cmake_test(If
|
||||
|
@ -1,5 +1,8 @@
|
||||
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)
|
||||
if("x${result}" STREQUAL "x${expected}")
|
||||
#message("TEST \"${command}\" success: \"${result}\" expected: \"${expected}\"")
|
||||
@ -101,7 +104,7 @@ list(SORT result)
|
||||
TEST("SORT empty result" "")
|
||||
|
||||
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
|
||||
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()
|
||||
|
||||
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-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-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-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-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)
|
||||
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()
|
||||
|
||||
foreach(cmd Remove_Item Reverse Remove_Duplicates Sort Remove_At)
|
||||
string(TOUPPER ${cmd} Cmd)
|
||||
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()
|
||||
|
||||
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
|
||||
No-Arguments
|
||||
|
@ -1,6 +1,9 @@
|
||||
set(NUMBERS "")
|
||||
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)
|
||||
set(NUMBERS "${NUMBERS} ${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}'")
|
||||
endif()
|
||||
|
||||
|
||||
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")
|
||||
check_cmake_test(While
|
||||
@ -25,28 +29,28 @@ check_cmake_test(While
|
||||
)
|
||||
|
||||
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
|
||||
Missing-Endwhile
|
||||
)
|
||||
|
||||
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
|
||||
Endwhile-Mismatch
|
||||
)
|
||||
|
||||
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
|
||||
Endwhile-Alone
|
||||
)
|
||||
|
||||
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
|
||||
Endwhile-Alone-Args
|
||||
|
@ -1,3 +1,5 @@
|
||||
REGEX_ESCAPE_STRING(CTEST_ESCAPED_CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
||||
|
||||
foreach (_retval 0 1)
|
||||
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ret${_retval}.c" "int main(){return ${_retval};}\n")
|
||||
endforeach ()
|
||||
@ -49,7 +51,7 @@ string(REPLACE "+" "\\+" CMAKE_COMMAND_ESCAPED "${CMAKE_COMMAND_ESCAPED}")
|
||||
|
||||
foreach (_unkn Unknown UnknownQuoted)
|
||||
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 ()
|
||||
|
||||
set_tests_properties(CTestTestMemcheckNotExist PROPERTIES
|
||||
@ -67,7 +69,7 @@ foreach (_pp Pre Post)
|
||||
string(TOLOWER ${_pp} _pp_lower)
|
||||
set_tests_properties(CTestTestMemcheckDummyValgrindFail${_pp}
|
||||
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 ()
|
||||
|
||||
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}")
|
||||
|
||||
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
|
||||
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 "")
|
||||
message(SEND_ERROR "Clearing DIRECTORY property failed.")
|
||||
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"
|
||||
)
|
||||
|
||||
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")
|
||||
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;
|
||||
}
|
4
Tests/IncludeDirectories/empty.cpp
Normal file
4
Tests/IncludeDirectories/empty.cpp
Normal file
@ -0,0 +1,4 @@
|
||||
#ifdef _WIN32
|
||||
__declspec(dllexport)
|
||||
#endif
|
||||
int empty() { return 0; }
|
4
Tests/RegexEscapeString.cmake
Normal file
4
Tests/RegexEscapeString.cmake
Normal file
@ -0,0 +1,4 @@
|
||||
macro(REGEX_ESCAPE_STRING _OUT _IN)
|
||||
# Escape special regex metacharacters with a backslash
|
||||
string(REGEX REPLACE "([$^.[|*+?()]|])" "\\\\\\1" ${_OUT} "${_IN}")
|
||||
endmacro()
|
5
Tests/RunCMake/ExternalData/LinkDirectory1-stdout.txt
Normal file
5
Tests/RunCMake/ExternalData/LinkDirectory1-stdout.txt
Normal file
@ -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!
|
37
Tests/RunCMake/ExternalData/LinkDirectory1.cmake
Normal file
37
Tests/RunCMake/ExternalData/LinkDirectory1.cmake
Normal file
@ -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(LinkContentMD5)
|
||||
run_cmake(LinkContentSHA1)
|
||||
run_cmake(LinkDirectory1)
|
||||
run_cmake(MissingData)
|
||||
run_cmake(NoLinkInSource)
|
||||
run_cmake(NoURLTemplates)
|
||||
|
Loading…
x
Reference in New Issue
Block a user