summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CTestCustom.cmake.in3
-rw-r--r--Modules/BasicConfigVersion-ExactVersion.cmake.in42
-rw-r--r--Modules/CMakePackageConfigHelpers.cmake10
-rw-r--r--Modules/FindCxxTest.cmake6
-rw-r--r--Source/CPack/cmCPackOSXX11Generator.cxx8
-rw-r--r--Source/CPack/cmCPackPackageMakerGenerator.cxx6
-rw-r--r--Source/CTest/cmCTestBuildHandler.cxx1
-rw-r--r--Source/CTest/cmCTestMemCheckHandler.cxx2
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx33
-rw-r--r--Source/cmGlobalXCodeGenerator.h3
-rw-r--r--Source/cmLocalGenerator.cxx11
-rw-r--r--Source/cmLocalGenerator.h8
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx25
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.h47
-rw-r--r--Source/cmLocalVisualStudio6Generator.cxx13
-rw-r--r--Source/cmLocalVisualStudio6Generator.h3
-rw-r--r--Source/cmLocalVisualStudio7Generator.cxx15
-rw-r--r--Source/cmLocalVisualStudio7Generator.h3
-rw-r--r--Source/cmLocalVisualStudioGenerator.cxx87
-rw-r--r--Source/cmLocalVisualStudioGenerator.h6
-rw-r--r--Source/cmLocalXCodeGenerator.cxx13
-rw-r--r--Source/cmLocalXCodeGenerator.h3
-rw-r--r--Source/cmMakefileTargetGenerator.cxx12
-rw-r--r--Source/cmTarget.cxx59
-rw-r--r--Source/cmTarget.h3
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx8
-rw-r--r--Source/kwsys/kwsysDateStamp.cmake2
-rw-r--r--Tests/CMakeCommands/CMakeLists.txt11
-rw-r--r--Tests/CMakeCommands/build_command/test.cmake86
-rw-r--r--Tests/CMakeCommands/find_package/CMakeLists.txt3
-rw-r--r--Tests/CMakeLists.txt2
-rw-r--r--Tests/FindPackageTest/CMakeLists.txt70
-rw-r--r--Tests/README13
-rw-r--r--Tests/RunCMake/CMakeLists.txt44
-rw-r--r--Tests/RunCMake/RunCMake.cmake (renamed from Tests/CMakeCommands/find_package/test.cmake)39
-rw-r--r--Tests/RunCMake/build_command/CMakeLists.txt (renamed from Tests/CMakeCommands/build_command/CMakeLists.txt)7
-rw-r--r--Tests/RunCMake/build_command/ErrorsOFF-stderr.txt1
-rw-r--r--Tests/RunCMake/build_command/ErrorsOFF-stdout.txt1
-rw-r--r--Tests/RunCMake/build_command/ErrorsOFF.cmake1
-rw-r--r--Tests/RunCMake/build_command/ErrorsON-result.txt (renamed from Tests/CMakeCommands/find_package/MixedModeOptions-result.txt)0
-rw-r--r--Tests/RunCMake/build_command/ErrorsON-stderr.txt12
-rw-r--r--Tests/RunCMake/build_command/ErrorsON-stdout.txt1
-rw-r--r--Tests/RunCMake/build_command/ErrorsON.cmake1
-rw-r--r--Tests/RunCMake/build_command/RunCMakeTest.cmake4
-rw-r--r--Tests/RunCMake/find_package/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/find_package/MissingConfig-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingConfig-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingConfig.cmake (renamed from Tests/CMakeCommands/find_package/MissingConfig.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingConfigOneName-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingConfigOneName-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingConfigOneName.cmake (renamed from Tests/CMakeCommands/find_package/MissingConfigOneName.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingConfigRequired-result.txt (renamed from Tests/CMakeCommands/find_package/MissingConfigRequired-result.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingConfigRequired-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingConfigRequired-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingConfigRequired.cmake (renamed from Tests/CMakeCommands/find_package/MissingConfigRequired.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingConfigVersion-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingConfigVersion-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingConfigVersion.cmake (renamed from Tests/CMakeCommands/find_package/MissingConfigVersion.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingModule-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingModule-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingModule.cmake (renamed from Tests/CMakeCommands/find_package/MissingModule.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingModuleRequired-result.txt (renamed from Tests/CMakeCommands/find_package/MissingModuleRequired-result.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingModuleRequired-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingModuleRequired-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingModuleRequired.cmake (renamed from Tests/CMakeCommands/find_package/MissingModuleRequired.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormal-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingNormal-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormal.cmake (renamed from Tests/CMakeCommands/find_package/MissingNormal.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormalRequired-result.txt (renamed from Tests/CMakeCommands/find_package/MissingNormalRequired-result.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormalRequired-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingNormalRequired-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormalRequired.cmake (renamed from Tests/CMakeCommands/find_package/MissingNormalRequired.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormalVersion-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingNormalVersion-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormalVersion.cmake (renamed from Tests/CMakeCommands/find_package/MissingNormalVersion.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew.cmake (renamed from Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld-stderr.txt (renamed from Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld.cmake (renamed from Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld.cmake)0
-rw-r--r--Tests/RunCMake/find_package/MixedModeOptions-result.txt1
-rw-r--r--Tests/RunCMake/find_package/MixedModeOptions-stderr.txt (renamed from Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt)0
-rw-r--r--Tests/RunCMake/find_package/MixedModeOptions.cmake (renamed from Tests/CMakeCommands/find_package/MixedModeOptions.cmake)0
-rw-r--r--Tests/RunCMake/find_package/RunCMakeTest.cmake14
-rw-r--r--Utilities/KWIML/test/test_INT_format.h.in46
75 files changed, 352 insertions, 440 deletions
diff --git a/CTestCustom.cmake.in b/CTestCustom.cmake.in
index 9eee655..9829191 100644
--- a/CTestCustom.cmake.in
+++ b/CTestCustom.cmake.in
@@ -40,8 +40,9 @@ SET(CTEST_CUSTOM_WARNING_EXCEPTION
"warning.*directory name.*CMake-Xcode.*/bin/.*does not exist.*"
"stl_deque.h:1051"
"(Lexer|Parser).*warning.*conversion.*may (alter its value|change the sign)"
+ "(Lexer|Parser).*warning.*statement is unreachable"
+ "PGC-W-0095-Type cast required for this conversion.*ProcessUNIX.c"
"[Qq]t([Cc]ore|[Gg]ui).*warning.*conversion.*may alter its value"
- "Parser.cxx.*warning.*2111-D.*statement is unreachable"
"warning:.*is.*very unsafe.*consider using.*"
"warning:.*is.*misused, please use.*"
"CMakeSetupManifest.xml.*manifest authoring warning.*Unrecognized Element"
diff --git a/Modules/BasicConfigVersion-ExactVersion.cmake.in b/Modules/BasicConfigVersion-ExactVersion.cmake.in
new file mode 100644
index 0000000..c610baa
--- /dev/null
+++ b/Modules/BasicConfigVersion-ExactVersion.cmake.in
@@ -0,0 +1,42 @@
+# This is a basic version file for the Config-mode of find_package().
+# It is used by write_basic_package_version_file() as input file for configure_file()
+# to create a version-file which can be installed along a config.cmake file.
+#
+# The created file sets PACKAGE_VERSION_EXACT if the current version string and
+# the requested version string are exactly the same and it sets
+# PACKAGE_VERSION_COMPATIBLE if the current version is equal to the requested version.
+# The tweak version component is ignored.
+# The variable CVF_VERSION must be set before calling configure_file().
+
+
+set(PACKAGE_VERSION "@CVF_VERSION@")
+
+if("@CVF_VERSION@" MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\..*") # strip the tweak version
+ set(CVF_VERSION_NO_TWEAK "${CMAKE_MATCH_1}")
+else()
+ set(CVF_VERSION_NO_TWEAK "@CVF_VERSION@")
+endif()
+
+if("${PACKAGE_FIND_VERSION}" MATCHES "^([0-9]+\\.[0-9]+\\.[0-9]+)\\..*") # strip the tweak version
+ set(REQUESTED_VERSION_NO_TWEAK "${CMAKE_MATCH_1}")
+else()
+ set(REQUESTED_VERSION_NO_TWEAK "${PACKAGE_FIND_VERSION}")
+endif()
+
+if("${REQUESTED_VERSION_NO_TWEAK}" STREQUAL "${CVF_VERSION_NO_TWEAK}")
+ set(PACKAGE_VERSION_COMPATIBLE TRUE)
+else()
+ set(PACKAGE_VERSION_COMPATIBLE FALSE)
+endif()
+
+if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
+ set(PACKAGE_VERSION_EXACT TRUE)
+endif()
+
+
+# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
+if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@")
+ math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
+ set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
+ set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()
diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake
index b174e98..98cd560 100644
--- a/Modules/CMakePackageConfigHelpers.cmake
+++ b/Modules/CMakePackageConfigHelpers.cmake
@@ -61,7 +61,7 @@
# For an example see below the documentation for WRITE_BASIC_PACKAGE_VERSION_FILE().
#
#
-# WRITE_BASIC_PACKAGE_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion) )
+# WRITE_BASIC_PACKAGE_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion|ExactVersion) )
#
# Writes a file for use as <package>ConfigVersion.cmake file to <filename>.
# See the documentation of FIND_PACKAGE() for details on this.
@@ -69,9 +69,17 @@
# major.minor.patch is the version number of the project to be installed
# The COMPATIBILITY mode AnyNewerVersion means that the installed package version
# will be considered compatible if it is newer or exactly the same as the requested version.
+# This mode should be used for packages which are fully backward compatible,
+# also across major versions.
# If SameMajorVersion is used instead, then the behaviour differs from AnyNewerVersion
# in that the major version number must be the same as requested, e.g. version 2.0 will
# not be considered compatible if 1.0 is requested.
+# This mode should be used for packages which guarantee backward compatibility within the
+# same major version.
+# If ExactVersion is used, then the package is only considered compatible if the requested
+# version matches exactly its own version number (not considering the tweak version).
+# For example, version 1.2.3 of a package is only considered compatible to requested version 1.2.3.
+# This mode is for packages without compatibility guarantees.
# If your project has more elaborated version matching rules, you will need to write your
# own custom ConfigVersion.cmake file instead of using this macro.
#
diff --git a/Modules/FindCxxTest.cmake b/Modules/FindCxxTest.cmake
index 4ff310c..a4d1504 100644
--- a/Modules/FindCxxTest.cmake
+++ b/Modules/FindCxxTest.cmake
@@ -9,6 +9,7 @@
# Only used in the case both Python & Perl
# are detected on the system to control
# which CxxTest code generator is used.
+# Valid only for CxxTest version 3.
#
# NOTE: In older versions of this Find Module,
# this variable controlled if the Python test
@@ -159,7 +160,8 @@ find_package(PythonInterp QUIET)
find_package(Perl QUIET)
find_path(CXXTEST_INCLUDE_DIR cxxtest/TestSuite.h)
-find_program(CXXTEST_PYTHON_TESTGEN_EXECUTABLE cxxtestgen.py
+find_program(CXXTEST_PYTHON_TESTGEN_EXECUTABLE
+ NAMES cxxtestgen cxxtestgen.py
PATHS ${CXXTEST_INCLUDE_DIR})
find_program(CXXTEST_PERL_TESTGEN_EXECUTABLE cxxtestgen.pl
PATHS ${CXXTEST_INCLUDE_DIR})
@@ -167,7 +169,7 @@ find_program(CXXTEST_PERL_TESTGEN_EXECUTABLE cxxtestgen.pl
if(PYTHONINTERP_FOUND OR PERL_FOUND)
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
- if(PYTHONINTERP_FOUND AND (CXXTEST_USE_PYTHON OR NOT PERL_FOUND))
+ if(PYTHONINTERP_FOUND AND (CXXTEST_USE_PYTHON OR NOT PERL_FOUND OR NOT DEFINED CXXTEST_USE_PYTHON))
set(CXXTEST_TESTGEN_EXECUTABLE ${CXXTEST_PYTHON_TESTGEN_EXECUTABLE})
set(CXXTEST_TESTGEN_INTERPRETER ${PYTHON_EXECUTABLE})
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CxxTest DEFAULT_MSG
diff --git a/Source/CPack/cmCPackOSXX11Generator.cxx b/Source/CPack/cmCPackOSXX11Generator.cxx
index 75ad640..363ccea 100644
--- a/Source/CPack/cmCPackOSXX11Generator.cxx
+++ b/Source/CPack/cmCPackOSXX11Generator.cxx
@@ -170,23 +170,25 @@ int cmCPackOSXX11Generator::PackageFiles()
<< "\" create -ov -format UDZO -srcfolder \""
<< diskImageDirectory.c_str()
<< "\" \"" << packageFileNames[0] << "\"";
- int retVal = 1;
cmCPackLogger(cmCPackLog::LOG_VERBOSE,
"Compress disk image using command: "
<< dmgCmd.str().c_str() << std::endl);
// since we get random dashboard failures with this one
// try running it more than once
- int numTries = 4;
+ int retVal = 1;
+ int numTries = 10;
bool res = false;
while(numTries > 0)
{
res = cmSystemTools::RunSingleCommand(dmgCmd.str().c_str(), &output,
&retVal, 0,
this->GeneratorVerbose, 0);
- if(res && retVal)
+ if ( res && !retVal )
{
numTries = -1;
+ break;
}
+ cmSystemTools::Delay(500);
numTries--;
}
if ( !res || retVal )
diff --git a/Source/CPack/cmCPackPackageMakerGenerator.cxx b/Source/CPack/cmCPackPackageMakerGenerator.cxx
index 0c4b1a6..327c4a6 100644
--- a/Source/CPack/cmCPackPackageMakerGenerator.cxx
+++ b/Source/CPack/cmCPackPackageMakerGenerator.cxx
@@ -319,17 +319,19 @@ int cmCPackPackageMakerGenerator::PackageFiles()
<< "\" \"" << packageFileNames[0] << "\"";
std::string output;
int retVal = 1;
- int numTries = 4;
+ int numTries = 10;
bool res = false;
while(numTries > 0)
{
res = cmSystemTools::RunSingleCommand(dmgCmd.str().c_str(), &output,
&retVal, 0, this->GeneratorVerbose,
0);
- if(res && retVal)
+ if ( res && !retVal )
{
numTries = -1;
+ break;
}
+ cmSystemTools::Delay(500);
numTries--;
}
if ( !res || retVal )
diff --git a/Source/CTest/cmCTestBuildHandler.cxx b/Source/CTest/cmCTestBuildHandler.cxx
index 34a3e60..27bb06c 100644
--- a/Source/CTest/cmCTestBuildHandler.cxx
+++ b/Source/CTest/cmCTestBuildHandler.cxx
@@ -94,6 +94,7 @@ static const char* cmCTestErrorMatches[] = {
": Invalid argument",
"^The project cannot be built\\.",
"^\\[ERROR\\]",
+ "^Command .* failed with exit code",
0
};
diff --git a/Source/CTest/cmCTestMemCheckHandler.cxx b/Source/CTest/cmCTestMemCheckHandler.cxx
index f0a98f9..035aaa9 100644
--- a/Source/CTest/cmCTestMemCheckHandler.cxx
+++ b/Source/CTest/cmCTestMemCheckHandler.cxx
@@ -679,7 +679,7 @@ bool cmCTestMemCheckHandler::ProcessMemCheckValgrindOutput(
" bytes in [0-9,]+ blocks are definitely lost"
" in loss record [0-9,]+ of [0-9,]+");
cmsys::RegularExpression vgPAR(
- "== .*Syscall param .* contains unaddressable byte\\(s\\)");
+ "== .*Syscall param .* (contains|points to) unaddressable byte\\(s\\)");
cmsys::RegularExpression vgMPK1(
"== .*[0-9,]+ bytes in [0-9,]+ blocks are possibly lost in"
" loss record [0-9,]+ of [0-9,]+");
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index cb74746..e552928 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -179,8 +179,6 @@ void cmGlobalXCodeGenerator::EnableLanguage(std::vector<std::string>const&
mf->AddDefinition("CMAKE_GENERATOR_CC", "gcc");
mf->AddDefinition("CMAKE_GENERATOR_CXX", "g++");
mf->AddDefinition("CMAKE_GENERATOR_NO_COMPILER_ENV", "1");
- // initialize Architectures so it can be used by
- // GetTargetObjectFileDirectories
this->cmGlobalGenerator::EnableLanguage(lang, mf, optional);
const char* osxArch =
mf->GetDefinition("CMAKE_OSX_ARCHITECTURES");
@@ -3363,37 +3361,6 @@ std::string cmGlobalXCodeGenerator::XCodeEscapePath(const char* p)
}
//----------------------------------------------------------------------------
-void cmGlobalXCodeGenerator::
-GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs)
-{
- std::string dir = this->CurrentMakefile->GetCurrentOutputDirectory();
- dir += "/";
- dir += this->CurrentMakefile->GetProjectName();
- dir += ".build/";
- dir += this->GetCMakeCFGInitDirectory();
- dir += "/";
- dir += target->GetName();
- dir += ".build/Objects-normal/";
- std::string dirsave = dir;
- if(this->Architectures.size())
- {
- for(std::vector<std::string>::iterator i = this->Architectures.begin();
- i != this->Architectures.end(); ++i)
- {
- dir += *i;
- dirs.push_back(dir);
- dir = dirsave;
- }
- }
- else
- {
- dirs.push_back(dir);
- }
-}
-
-//----------------------------------------------------------------------------
void
cmGlobalXCodeGenerator
::AppendDirectoryForConfig(const char* prefix,
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index ed54be3..45f62eb 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -76,9 +76,6 @@ public:
///! What is the configurations directory variable called?
virtual const char* GetCMakeCFGInitDirectory();
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
void SetCurrentLocalGenerator(cmLocalGenerator*);
/** Return true if the generated build tree may contain multiple builds.
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 8a63387..19537b5 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -2963,17 +2963,6 @@ cmLocalGenerator::GetTargetDirectory(cmTarget const&) const
return "";
}
-
-//----------------------------------------------------------------------------
-void
-cmLocalGenerator::GetTargetObjectFileDirectories(cmTarget* ,
- std::vector<std::string>&
- )
-{
- cmSystemTools::Error("GetTargetObjectFileDirectories"
- " called on cmLocalGenerator");
-}
-
//----------------------------------------------------------------------------
unsigned int cmLocalGenerator::GetBackwardsCompatibility()
{
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index 4270b2f..124747b 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -261,14 +261,6 @@ public:
};
FortranFormat GetFortranFormat(const char* value);
- /** Return the directories into which object files will be put.
- * There maybe more than one for fat binary systems like OSX.
- */
- virtual void
- GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
-
/**
* Convert the given remote path to a relative path with respect to
* the given local path. The local path must be given in component
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 75226b5..fdf59b2 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -145,6 +145,20 @@ void cmLocalUnixMakefileGenerator3::Generate()
}
//----------------------------------------------------------------------------
+void cmLocalUnixMakefileGenerator3::AddLocalObjectFile(
+ cmTarget* target, cmSourceFile* sf, std::string objNoTargetDir,
+ bool hasSourceExtension)
+{
+ if(cmSystemTools::FileIsFullPath(objNoTargetDir.c_str()))
+ {
+ objNoTargetDir = cmSystemTools::GetFilenameName(objNoTargetDir);
+ }
+ LocalObjectInfo& info = this->LocalObjectFiles[objNoTargetDir];
+ info.HasSourceExtension = hasSourceExtension;
+ info.push_back(LocalObjectEntry(target, sf->GetLanguage()));
+}
+
+//----------------------------------------------------------------------------
void cmLocalUnixMakefileGenerator3::GetIndividualFileTargets
(std::vector<std::string>& targets)
{
@@ -2267,14 +2281,3 @@ void cmLocalUnixMakefileGenerator3
}
}
}
-
-
-void cmLocalUnixMakefileGenerator3
-::GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>& dirs)
-{
- std::string dir = this->Makefile->GetCurrentOutputDirectory();
- dir += "/";
- dir += this->GetTargetDirectory(*target);
- dirs.push_back(dir);
-}
diff --git a/Source/cmLocalUnixMakefileGenerator3.h b/Source/cmLocalUnixMakefileGenerator3.h
index 45ac21d..4bde082 100644
--- a/Source/cmLocalUnixMakefileGenerator3.h
+++ b/Source/cmLocalUnixMakefileGenerator3.h
@@ -225,24 +225,9 @@ public:
// write the target rules for the local Makefile into the stream
void WriteLocalAllRules(std::ostream& ruleFileStream);
- struct LocalObjectEntry
- {
- cmTarget* Target;
- std::string Language;
- LocalObjectEntry(): Target(0), Language() {}
- LocalObjectEntry(cmTarget* t, const char* lang):
- Target(t), Language(lang) {}
- };
- struct LocalObjectInfo: public std::vector<LocalObjectEntry>
- {
- bool HasSourceExtension;
- bool HasPreprocessRule;
- bool HasAssembleRule;
- LocalObjectInfo():HasSourceExtension(false), HasPreprocessRule(false),
- HasAssembleRule(false) {}
- };
- std::map<cmStdString, LocalObjectInfo> const& GetLocalObjectFiles()
- { return this->LocalObjectFiles;}
+ void AddLocalObjectFile(cmTarget* target, cmSourceFile* sf,
+ std::string objNoTargetDir,
+ bool hasSourceExtension);
std::vector<cmStdString> const& GetLocalHelp() { return this->LocalHelp; }
@@ -257,9 +242,6 @@ public:
{
return !this->SkipAssemblySourceRules;
}
- // Get the directories into which the .o files will go for this target
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>& dirs);
// Fill the vector with the target names for the object files,
// preprocessed files and assembly files. Currently only used by the
@@ -301,9 +283,6 @@ protected:
void WriteTargetRequiresRule(std::ostream& ruleFileStream,
cmTarget& target,
const std::vector<std::string>& objects);
- void WriteObjectConvenienceRule(std::ostream& ruleFileStream,
- const char* comment, const char* output,
- LocalObjectInfo const& info);
std::string GetObjectFileName(cmTarget& target,
const cmSourceFile& source,
@@ -378,7 +357,27 @@ private:
bool SkipPreprocessedSourceRules;
bool SkipAssemblySourceRules;
+ struct LocalObjectEntry
+ {
+ cmTarget* Target;
+ std::string Language;
+ LocalObjectEntry(): Target(0), Language() {}
+ LocalObjectEntry(cmTarget* t, const char* lang):
+ Target(t), Language(lang) {}
+ };
+ struct LocalObjectInfo: public std::vector<LocalObjectEntry>
+ {
+ bool HasSourceExtension;
+ bool HasPreprocessRule;
+ bool HasAssembleRule;
+ LocalObjectInfo():HasSourceExtension(false), HasPreprocessRule(false),
+ HasAssembleRule(false) {}
+ };
std::map<cmStdString, LocalObjectInfo> LocalObjectFiles;
+ void WriteObjectConvenienceRule(std::ostream& ruleFileStream,
+ const char* comment, const char* output,
+ LocalObjectInfo const& info);
+
std::vector<cmStdString> LocalHelp;
/* does the work for each target */
diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx
index 6b31e54..678c5bf 100644
--- a/Source/cmLocalVisualStudio6Generator.cxx
+++ b/Source/cmLocalVisualStudio6Generator.cxx
@@ -337,7 +337,7 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout,
}
// Compute which sources need unique object computation.
- this->ComputeObjectNameRequirements(sourceGroups);
+ this->ComputeObjectNameRequirements(classes);
// Write the DSP file's header.
this->WriteDSPHeader(fout, libName, target, sourceGroups);
@@ -1795,17 +1795,6 @@ cmLocalVisualStudio6Generator
return "";
}
-void cmLocalVisualStudio6Generator
-::GetTargetObjectFileDirectories(cmTarget* ,
- std::vector<std::string>&
- dirs)
-{
- std::string dir = this->Makefile->GetCurrentOutputDirectory();
- dir += "/";
- dir += this->GetGlobalGenerator()->GetCMakeCFGInitDirectory();
- dirs.push_back(dir);
-}
-
std::string
cmLocalVisualStudio6Generator
::GetConfigName(std::string const& configuration) const
diff --git a/Source/cmLocalVisualStudio6Generator.h b/Source/cmLocalVisualStudio6Generator.h
index c9c5dd1..4e588c3 100644
--- a/Source/cmLocalVisualStudio6Generator.h
+++ b/Source/cmLocalVisualStudio6Generator.h
@@ -50,9 +50,6 @@ public:
void SetBuildType(BuildType, const char* libName, cmTarget&);
virtual std::string GetTargetDirectory(cmTarget const& target) const;
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
private:
std::string DSPHeaderTemplate;
std::string DSPFooterTemplate;
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index fdd58f8..c5714cc 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -1311,7 +1311,7 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout,
}
// Compute which sources need unique object computation.
- this->ComputeObjectNameRequirements(sourceGroups);
+ this->ComputeObjectNameRequirements(classes);
// open the project
this->WriteProjectStart(fout, libName, target, sourceGroups);
@@ -2118,19 +2118,6 @@ std::string cmLocalVisualStudio7Generator
return dir;
}
-void cmLocalVisualStudio7Generator::
-GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs)
-{
- std::string dir = this->Makefile->GetCurrentOutputDirectory();
- dir += "/";
- dir += this->GetTargetDirectory(*target);
- dir += "/";
- dir += this->GetGlobalGenerator()->GetCMakeCFGInitDirectory();
- dirs.push_back(dir);
-}
-
//----------------------------------------------------------------------------
#include <windows.h>
static bool cmLVS6G_IsFAT(const char* dir)
diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h
index 5b634b8..6ddf82a 100644
--- a/Source/cmLocalVisualStudio7Generator.h
+++ b/Source/cmLocalVisualStudio7Generator.h
@@ -54,9 +54,6 @@ public:
void SetBuildType(BuildType,const char *name);
void SetPlatformName(const char* n) { this->PlatformName = n;}
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
void SetExtraFlagTable(cmVS7FlagTable const* table)
{ this->ExtraFlagTable = table; }
diff --git a/Source/cmLocalVisualStudioGenerator.cxx b/Source/cmLocalVisualStudioGenerator.cxx
index de1ac30..f389b35 100644
--- a/Source/cmLocalVisualStudioGenerator.cxx
+++ b/Source/cmLocalVisualStudioGenerator.cxx
@@ -83,77 +83,50 @@ bool cmLocalVisualStudioGenerator::SourceFileCompiles(const cmSourceFile* sf)
}
//----------------------------------------------------------------------------
-void cmLocalVisualStudioGenerator::CountObjectNames(
- const std::vector<cmSourceGroup>& groups,
- std::map<cmStdString, int>& counts)
+void
+cmLocalVisualStudioGenerator::ComputeObjectNameRequirements(
+ std::vector<cmSourceFile*> const& sources
+ )
{
- for(unsigned int i = 0; i < groups.size(); ++i)
+ // Clear the current set of requirements.
+ this->NeedObjectName.clear();
+
+ // Count the number of object files with each name. Note that
+ // windows file names are not case sensitive.
+ std::map<cmStdString, int> counts;
+ for(std::vector<cmSourceFile*>::const_iterator s = sources.begin();
+ s != sources.end(); ++s)
{
- cmSourceGroup sg = groups[i];
- std::vector<const cmSourceFile*> const& srcs = sg.GetSourceFiles();
- for(std::vector<const cmSourceFile*>::const_iterator s = srcs.begin();
- s != srcs.end(); ++s)
+ const cmSourceFile* sf = *s;
+ if(this->SourceFileCompiles(sf))
{
- const cmSourceFile* sf = *s;
- if(this->SourceFileCompiles(sf))
- {
- std::string objectName = cmSystemTools::LowerCase(
- cmSystemTools::GetFilenameWithoutLastExtension(
- sf->GetFullPath()));
- objectName += ".obj";
- counts[objectName] += 1;
- }
+ std::string objectName = cmSystemTools::LowerCase(
+ cmSystemTools::GetFilenameWithoutLastExtension(
+ sf->GetFullPath()));
+ objectName += ".obj";
+ counts[objectName] += 1;
}
- this->CountObjectNames(sg.GetGroupChildren(), counts);
}
-}
-//----------------------------------------------------------------------------
-void cmLocalVisualStudioGenerator::InsertNeedObjectNames(
- const std::vector<cmSourceGroup>& groups,
- std::map<cmStdString, int>& count)
-{
- for(unsigned int i = 0; i < groups.size(); ++i)
+ // For all source files producing duplicate names we need unique
+ // object name computation.
+ for(std::vector<cmSourceFile*>::const_iterator s = sources.begin();
+ s != sources.end(); ++s)
{
- cmSourceGroup sg = groups[i];
- std::vector<const cmSourceFile*> const& srcs = sg.GetSourceFiles();
- for(std::vector<const cmSourceFile*>::const_iterator s = srcs.begin();
- s != srcs.end(); ++s)
+ const cmSourceFile* sf = *s;
+ if(this->SourceFileCompiles(sf))
{
- const cmSourceFile* sf = *s;
- if(this->SourceFileCompiles(sf))
+ std::string objectName = cmSystemTools::LowerCase(
+ cmSystemTools::GetFilenameWithoutLastExtension(sf->GetFullPath()));
+ objectName += ".obj";
+ if(counts[objectName] > 1)
{
- std::string objectName = cmSystemTools::LowerCase(
- cmSystemTools::GetFilenameWithoutLastExtension(sf->GetFullPath()));
- objectName += ".obj";
- if(count[objectName] > 1)
- {
- this->NeedObjectName.insert(sf);
- }
+ this->NeedObjectName.insert(sf);
}
}
- this->InsertNeedObjectNames(sg.GetGroupChildren(), count);
}
}
-
-//----------------------------------------------------------------------------
-void cmLocalVisualStudioGenerator::ComputeObjectNameRequirements
-(std::vector<cmSourceGroup> const& sourceGroups)
-{
- // Clear the current set of requirements.
- this->NeedObjectName.clear();
-
- // Count the number of object files with each name. Note that
- // windows file names are not case sensitive.
- std::map<cmStdString, int> objectNameCounts;
- this->CountObjectNames(sourceGroups, objectNameCounts);
-
- // For all source files producing duplicate names we need unique
- // object name computation.
- this->InsertNeedObjectNames(sourceGroups, objectNameCounts);
-}
-
//----------------------------------------------------------------------------
const char* cmLocalVisualStudioGenerator::ReportErrorLabel() const
{
diff --git a/Source/cmLocalVisualStudioGenerator.h b/Source/cmLocalVisualStudioGenerator.h
index fcf1f21..e58c757 100644
--- a/Source/cmLocalVisualStudioGenerator.h
+++ b/Source/cmLocalVisualStudioGenerator.h
@@ -65,12 +65,8 @@ protected:
MaybeCreateImplibDir(cmTarget& target, const char* config, bool isFortran);
// Safe object file name generation.
- void ComputeObjectNameRequirements(std::vector<cmSourceGroup> const&);
+ void ComputeObjectNameRequirements(std::vector<cmSourceFile*> const&);
bool SourceFileCompiles(const cmSourceFile* sf);
- void CountObjectNames(const std::vector<cmSourceGroup>& groups,
- std::map<cmStdString, int>& count);
- void InsertNeedObjectNames(const std::vector<cmSourceGroup>& groups,
- std::map<cmStdString, int>& count);
std::set<const cmSourceFile*> NeedObjectName;
friend class cmVisualStudio10TargetGenerator;
diff --git a/Source/cmLocalXCodeGenerator.cxx b/Source/cmLocalXCodeGenerator.cxx
index b989870..551ebd3 100644
--- a/Source/cmLocalXCodeGenerator.cxx
+++ b/Source/cmLocalXCodeGenerator.cxx
@@ -33,16 +33,3 @@ cmLocalXCodeGenerator::GetTargetDirectory(cmTarget const&) const
// No per-target directory for this generator (yet).
return "";
}
-
-//----------------------------------------------------------------------------
-void cmLocalXCodeGenerator::
-GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs)
-{
- cmGlobalXCodeGenerator* g =
- (cmGlobalXCodeGenerator*)this->GetGlobalGenerator();
- g->SetCurrentLocalGenerator(this);
- g->GetTargetObjectFileDirectories(target,
- dirs);
-}
diff --git a/Source/cmLocalXCodeGenerator.h b/Source/cmLocalXCodeGenerator.h
index 1ab805d..eab228f 100644
--- a/Source/cmLocalXCodeGenerator.h
+++ b/Source/cmLocalXCodeGenerator.h
@@ -27,9 +27,6 @@ public:
cmLocalXCodeGenerator();
virtual ~cmLocalXCodeGenerator();
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
virtual std::string GetTargetDirectory(cmTarget const& target) const;
private:
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index e5be4aa..b9120c4 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -489,16 +489,8 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles(cmSourceFile& source)
srcFullPath.c_str());
// add this to the list of objects for this local generator
- if(cmSystemTools::FileIsFullPath(objNoTargetDir.c_str()))
- {
- objNoTargetDir = cmSystemTools::GetFilenameName(objNoTargetDir);
- }
- cmLocalUnixMakefileGenerator3::LocalObjectInfo& info =
- this->LocalGenerator->LocalObjectFiles[objNoTargetDir];
- info.HasSourceExtension = hasSourceExtension;
- info.push_back(
- cmLocalUnixMakefileGenerator3::LocalObjectEntry(this->Target, lang)
- );
+ this->LocalGenerator->AddLocalObjectFile(
+ this->Target, &source, objNoTargetDir, hasSourceExtension);
}
//----------------------------------------------------------------------------
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index ffdb363..2fbca80 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -1106,17 +1106,6 @@ void cmTarget::DefineProperties(cmake *cm)
"better if VS_GLOBAL_QtVersion is set to the version "
"FindQt4.cmake found. For example, \"4.7.3\"");
-#if 0
- cm->DefineProperty
- ("OBJECT_FILES", cmProperty::TARGET,
- "Used to get the resulting list of object files that make up a "
- "target.",
- "This can be used to put object files from one library "
- "into another library. It is a read only property. It "
- "converts the source list for the target into a list of full "
- "paths to object names that will be produced by the target.");
-#endif
-
#define CM_TARGET_FILE_TYPES_DOC \
"There are three kinds of target files that may be built: " \
"archive, library, and runtime. " \
@@ -2618,54 +2607,6 @@ const char *cmTarget::GetProperty(const char* prop)
}
//----------------------------------------------------------------------------
-void cmTarget::ComputeObjectFiles()
-{
- if (this->IsImported())
- {
- return;
- }
-#if 0
- std::vector<std::string> dirs;
- this->Makefile->GetLocalGenerator()->
- GetTargetObjectFileDirectories(this,
- dirs);
- std::string objectFiles;
- std::string objExtensionLookup1 = "CMAKE_";
- std::string objExtensionLookup2 = "_OUTPUT_EXTENSION";
-
- for(std::vector<std::string>::iterator d = dirs.begin();
- d != dirs.end(); ++d)
- {
- for(std::vector<cmSourceFile*>::iterator s = this->SourceFiles.begin();
- s != this->SourceFiles.end(); ++s)
- {
- cmSourceFile* sf = *s;
- if(const char* lang = sf->GetLanguage())
- {
- std::string lookupObj = objExtensionLookup1 + lang;
- lookupObj += objExtensionLookup2;
- const char* obj = this->Makefile->GetDefinition(lookupObj.c_str());
- if(obj)
- {
- if(objectFiles.size())
- {
- objectFiles += ";";
- }
- std::string objFile = *d;
- objFile += "/";
- objFile += this->Makefile->GetLocalGenerator()->
- GetSourceObjectName(*sf);
- objFile += obj;
- objectFiles += objFile;
- }
- }
- }
- }
- this->SetProperty("OBJECT_FILES", objectFiles.c_str());
-#endif
-}
-
-//----------------------------------------------------------------------------
const char *cmTarget::GetProperty(const char* prop,
cmProperty::ScopeType scope)
{
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 0977332..ff05cd3 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -403,9 +403,6 @@ public:
// Define the properties
static void DefineProperties(cmake *cm);
- // Compute the OBJECT_FILES property only when requested
- void ComputeObjectFiles();
-
/** Get the macro to define when building sources in this target.
If no macro should be defined null is returned. */
const char* GetExportMacro();
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 27b83b9..66f9a36 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -877,9 +877,6 @@ void cmVisualStudio10TargetGenerator::WriteCLSources()
void cmVisualStudio10TargetGenerator::ComputeObjectNames()
{
- // We may be modifying the source groups temporarily, so make a copy.
- std::vector<cmSourceGroup> sourceGroups = this->Makefile->GetSourceGroups();
-
// get the classes from the source lists then add them to the groups
std::vector<cmSourceFile*>const & classes = this->Target->GetSourceFiles();
for(std::vector<cmSourceFile*>::const_iterator i = classes.begin();
@@ -891,13 +888,10 @@ void cmVisualStudio10TargetGenerator::ComputeObjectNames()
{
this->ModuleDefinitionFile = (*i)->GetFullPath();
}
- cmSourceGroup& sourceGroup =
- this->Makefile->FindSourceGroup(source.c_str(), sourceGroups);
- sourceGroup.AssignSource(*i);
}
// Compute which sources need unique object computation.
- this->LocalGenerator->ComputeObjectNameRequirements(sourceGroups);
+ this->LocalGenerator->ComputeObjectNameRequirements(classes);
}
bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
diff --git a/Source/kwsys/kwsysDateStamp.cmake b/Source/kwsys/kwsysDateStamp.cmake
index b00f782..449317c 100644
--- a/Source/kwsys/kwsysDateStamp.cmake
+++ b/Source/kwsys/kwsysDateStamp.cmake
@@ -18,4 +18,4 @@ SET(KWSYS_DATE_STAMP_YEAR 2012)
SET(KWSYS_DATE_STAMP_MONTH 03)
# KWSys version date day component. Format is DD.
-SET(KWSYS_DATE_STAMP_DAY 09)
+SET(KWSYS_DATE_STAMP_DAY 13)
diff --git a/Tests/CMakeCommands/CMakeLists.txt b/Tests/CMakeCommands/CMakeLists.txt
deleted file mode 100644
index aa400d0..0000000
--- a/Tests/CMakeCommands/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-macro(add_CMakeCommands_test test)
- add_test(CMakeCommands.${test} ${CMAKE_CMAKE_COMMAND}
- -DCMake_SOURCE_DIR=${CMake_SOURCE_DIR} # TODO: Remove
- -Ddir=${CMAKE_CURRENT_BINARY_DIR}/${test}
- -Dgen=${CMAKE_TEST_GENERATOR}
- -P "${CMAKE_CURRENT_SOURCE_DIR}/${test}/test.cmake"
- )
-endmacro()
-
-add_CMakeCommands_test(build_command)
-add_CMakeCommands_test(find_package)
diff --git a/Tests/CMakeCommands/build_command/test.cmake b/Tests/CMakeCommands/build_command/test.cmake
deleted file mode 100644
index 55d9359..0000000
--- a/Tests/CMakeCommands/build_command/test.cmake
+++ /dev/null
@@ -1,86 +0,0 @@
-if(NOT DEFINED CMake_SOURCE_DIR)
- message(FATAL_ERROR "CMake_SOURCE_DIR not defined")
-endif()
-
-if(NOT DEFINED dir)
- message(FATAL_ERROR "dir not defined")
-endif()
-
-if(NOT DEFINED gen)
- message(FATAL_ERROR "gen not defined")
-endif()
-
-message(STATUS "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)")
-
-# Run cmake:
-#
-function(run_cmake build_dir extra_args expected_result expected_output expected_error)
- message(STATUS "run_cmake build_dir='${build_dir}' extra_args='${extra_args}'")
-
- # Ensure build_dir exists:
- #
- execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${build_dir})
-
- # Run cmake:
- #
- execute_process(COMMAND ${CMAKE_COMMAND}
- ${extra_args}
- -G ${gen} ${CMake_SOURCE_DIR}/Tests/CMakeCommands/build_command
- RESULT_VARIABLE result
- OUTPUT_VARIABLE stdout
- ERROR_VARIABLE stderr
- WORKING_DIRECTORY ${build_dir}
- )
-
- message(STATUS "result='${result}'")
- message(STATUS "stdout='${stdout}'")
- message(STATUS "stderr='${stderr}'")
- message(STATUS "")
-
- # Verify result and output match expectations:
- #
- if("0" STREQUAL "${expected_result}")
- if(NOT "${result}" STREQUAL "0")
- message(FATAL_ERROR
- "error: result='${result}' is non-zero and different than expected_result='${expected_result}'")
- endif()
- else()
- if("${result}" STREQUAL "0")
- message(FATAL_ERROR
- "error: result='${result}' is zero and different than expected_result='${expected_result}'")
- endif()
- endif()
-
- foreach(e ${expected_output})
- if(NOT stdout MATCHES "${e}")
- message(FATAL_ERROR
- "error: stdout does not match expected_output item e='${e}'")
- else()
- message(STATUS "info: stdout matches '${e}'")
- endif()
- endforeach()
-
- foreach(e ${expected_error})
- if(NOT stderr MATCHES "${e}")
- message(FATAL_ERROR
- "error: stderr does not match expected_error item e='${e}'")
- else()
- message(STATUS "info: stderr matches '${e}'")
- endif()
- endforeach()
-
- message(STATUS "result, stdout and stderr match all expectations: test passes")
- message(STATUS "")
-endfunction()
-
-
-# Expect this case to succeed:
-run_cmake("${dir}/b1" "" 0
- "Build files have been written to:"
- "skipping cases 1, 2 and 3 because TEST_ERROR_CONDITIONS is OFF")
-
-
-# Expect this one to fail:
-run_cmake("${dir}/b2" "-DTEST_ERROR_CONDITIONS:BOOL=ON" 1
- "Configuring incomplete, errors occurred!"
- "build_command requires at least one argument naming a CMake variable;build_command unknown argument ")
diff --git a/Tests/CMakeCommands/find_package/CMakeLists.txt b/Tests/CMakeCommands/find_package/CMakeLists.txt
deleted file mode 100644
index c2deed0..0000000
--- a/Tests/CMakeCommands/find_package/CMakeLists.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-cmake_minimum_required(VERSION 2.8)
-project(${TEST} NONE)
-include(${TEST}.cmake)
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 07a6c36..cf4dc44 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -53,7 +53,7 @@ IF(BUILD_TESTING)
ADD_SUBDIRECTORY(CMakeLib)
ADD_SUBDIRECTORY(CMakeOnly)
- ADD_SUBDIRECTORY(CMakeCommands)
+ ADD_SUBDIRECTORY(RunCMake)
ADD_SUBDIRECTORY(FindPackageModeMakefileTest)
diff --git a/Tests/FindPackageTest/CMakeLists.txt b/Tests/FindPackageTest/CMakeLists.txt
index a4f213b..73f24e0 100644
--- a/Tests/FindPackageTest/CMakeLists.txt
+++ b/Tests/FindPackageTest/CMakeLists.txt
@@ -421,3 +421,73 @@ endif()
if(PACKAGE_VERSION_UNSUITABLE)
message(SEND_ERROR "PACKAGE_VERSION_UNSUITABLE set, but must not be !")
endif()
+
+#######################
+
+write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/Bar123ConfigVersion.cmake
+ VERSION 1.2.3.17
+ COMPATIBILITY ExactVersion)
+
+set(PACKAGE_VERSION_EXACT FALSE)
+set(PACKAGE_FIND_VERSION 2.3.4)
+include(${CMAKE_CURRENT_BINARY_DIR}/Bar123ConfigVersion.cmake)
+if(PACKAGE_VERSION_COMPATIBLE)
+ message(SEND_ERROR "Found Bar123 with version 1.2.3 (2.3.4 was requested) !")
+endif()
+if(PACKAGE_VERSION_EXACT)
+ message(SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !")
+endif()
+
+set(PACKAGE_FIND_VERSION 1.2)
+include(${CMAKE_CURRENT_BINARY_DIR}/Bar123ConfigVersion.cmake)
+if(PACKAGE_VERSION_COMPATIBLE)
+ message(SEND_ERROR "Found Bar123 with version 1.2.3 (1.2 was requested) !")
+endif()
+if(PACKAGE_VERSION_EXACT)
+ message(SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !")
+endif()
+
+set(PACKAGE_FIND_VERSION 1)
+include(${CMAKE_CURRENT_BINARY_DIR}/Bar123ConfigVersion.cmake)
+if(PACKAGE_VERSION_COMPATIBLE)
+ message(SEND_ERROR "Found Bar123 with version 1.2.3 (1 was requested) !")
+endif()
+if(PACKAGE_VERSION_EXACT)
+ message(SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !")
+endif()
+
+set(PACKAGE_FIND_VERSION 1.2.3.4)
+include(${CMAKE_CURRENT_BINARY_DIR}/Bar123ConfigVersion.cmake)
+if(NOT PACKAGE_VERSION_COMPATIBLE)
+ message(SEND_ERROR "Did not find Bar123 with version 1.2.3 (1.2.3.4 was requested) !")
+endif()
+if(PACKAGE_VERSION_EXACT)
+ message(SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !")
+endif()
+
+set(PACKAGE_FIND_VERSION 1.2.3)
+set(PACKAGE_VERSION_EXACT FALSE)
+set(PACKAGE_VERSION_COMPATIBLE FALSE)
+include(${CMAKE_CURRENT_BINARY_DIR}/Bar123ConfigVersion.cmake)
+if(NOT PACKAGE_VERSION_COMPATIBLE)
+ message(SEND_ERROR "Did not find Bar123 with version 1.2.3 (1.2.3 was requested) !")
+endif()
+if(PACKAGE_VERSION_EXACT)
+ message(SEND_ERROR "PACKAGE_VERSION_EXACT set, although it should not be !")
+endif()
+
+
+set(PACKAGE_FIND_VERSION 1.2.3.17)
+set(PACKAGE_VERSION_EXACT FALSE)
+set(PACKAGE_VERSION_COMPATIBLE FALSE)
+include(${CMAKE_CURRENT_BINARY_DIR}/Bar123ConfigVersion.cmake)
+if(NOT PACKAGE_VERSION_COMPATIBLE)
+ message(SEND_ERROR "Did not find Bar123 with version 1.2.3 (1.2.3.17 was requested) !")
+endif()
+if(NOT PACKAGE_VERSION_EXACT)
+ message(SEND_ERROR "PACKAGE_VERSION_EXACT not set, although it should be !")
+endif()
+
+if(PACKAGE_VERSION_UNSUITABLE)
+ message(SEND_ERROR "PACKAGE_VERSION_UNSUITABLE set, but must not be !")
+endif()
diff --git a/Tests/README b/Tests/README
index 9b0f5c1..8b2fda8 100644
--- a/Tests/README
+++ b/Tests/README
@@ -16,10 +16,15 @@ your test to the test runs.
This includes tests that will build something using try_compile() and friends,
but nothing that expects add_executable(), add_library(), or add_test() to run.
-If this matches your test you should put it into the Tests/CMakeOnly/ directory.
-Create a subdirectory named like your test and write the CMakeLists.txt you
-need into that subdirectory. Use the add_CMakeOnly_test() macro from
-Tests/CMakeOnly/CMakeLists.txt to add your test to the test runs.
+If the test configures the project only once and it must succeed then put it
+into the Tests/CMakeOnly/ directory. Create a subdirectory named like your
+test and write the CMakeLists.txt you need into that subdirectory. Use the
+add_CMakeOnly_test() macro from Tests/CMakeOnly/CMakeLists.txt to add your
+test to the test runs.
+
+If the test configures the project with multiple variations and verifies
+success or failure each time then put it into the Tests/RunCMake/ directory.
+Read the instructions in Tests/RunCMake/CMakeLists.txt to add a test.
3. If you are testing something from the Modules directory
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
new file mode 100644
index 0000000..63fc9f8
--- /dev/null
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -0,0 +1,44 @@
+# This directory contains tests that run CMake to configure a project
+# but do not actually build anything. To add a test:
+#
+# 1.) Add a subdirectory named for the test.
+#
+# 2.) Call add_RunCMake_test and pass the test directory name.
+#
+# 3.) Create a RunCMakeTest.cmake script in the directory containing
+# include(RunCMake)
+# run_cmake(SubTest1)
+# ...
+# run_cmake(SubTestN)
+# where SubTest1..SubTestN are sub-test names each corresponding to
+# an independent CMake run and project configuration.
+#
+# 3.) Create a CMakeLists.txt file in the directory containing
+# cmake_minimum_required(...)
+# project(${RunCMake_TEST} NONE) # or languages needed
+# include(${RunCMake_TEST}.cmake)
+# where "${RunCMake_TEST}" is literal. A value for RunCMake_TEST
+# will be passed to CMake by the run_cmake macro when running each
+# sub-test.
+#
+# 4.) Create a <SubTest>.cmake file for each sub-test named above
+# containing the actual test code. Optionally create files
+# containing expected test results:
+# <SubTest>-result.txt = Process result expected if not "0"
+# <SubTest>-stdout.txt = Regex matching expected stdout content
+# <SubTest>-stderr.txt = Regex matching expected stderr content
+# Note that trailing newlines will be stripped from actual test
+# output before matching against the stdout and stderr expressions.
+
+macro(add_RunCMake_test test)
+ add_test(RunCMake.${test} ${CMAKE_CMAKE_COMMAND}
+ -DCMAKE_MODULE_PATH=${CMAKE_CURRENT_SOURCE_DIR}
+ -DRunCMake_GENERATOR=${CMAKE_TEST_GENERATOR}
+ -DRunCMake_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/${test}
+ -DRunCMake_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/${test}
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/${test}/RunCMakeTest.cmake"
+ )
+endmacro()
+
+add_RunCMake_test(build_command)
+add_RunCMake_test(find_package)
diff --git a/Tests/CMakeCommands/find_package/test.cmake b/Tests/RunCMake/RunCMake.cmake
index dd1072e..2639463 100644
--- a/Tests/CMakeCommands/find_package/test.cmake
+++ b/Tests/RunCMake/RunCMake.cmake
@@ -1,15 +1,16 @@
-if(NOT DEFINED dir)
- message(FATAL_ERROR "dir not defined")
-endif()
-
-if(NOT DEFINED gen)
- message(FATAL_ERROR "gen not defined")
-endif()
+foreach(arg
+ RunCMake_GENERATOR
+ RunCMake_SOURCE_DIR
+ RunCMake_BINARY_DIR
+ )
+ if(NOT DEFINED ${arg})
+ message(FATAL_ERROR "${arg} not given!")
+ endif()
+endforeach()
-# TODO: Generalize this for other tests.
-function(run_test test)
- set(top_src "${CMAKE_CURRENT_LIST_DIR}")
- set(top_bin "${dir}")
+function(run_cmake test)
+ set(top_src "${RunCMake_SOURCE_DIR}")
+ set(top_bin "${RunCMake_BINARY_DIR}")
if(EXISTS ${top_src}/${test}-result.txt)
file(READ ${top_src}/${test}-result.txt expect_result)
string(REGEX REPLACE "\n+$" "" expect_result "${expect_result}")
@@ -29,7 +30,8 @@ function(run_test test)
file(REMOVE_RECURSE "${binary_dir}")
file(MAKE_DIRECTORY "${binary_dir}")
execute_process(
- COMMAND ${CMAKE_COMMAND} "${source_dir}" -G "${gen}" -DTEST=${test}
+ COMMAND ${CMAKE_COMMAND} "${source_dir}"
+ -G "${RunCMake_GENERATOR}" -DRunCMake_TEST=${test}
WORKING_DIRECTORY "${binary_dir}"
OUTPUT_VARIABLE actual_stdout
ERROR_VARIABLE actual_stderr
@@ -65,16 +67,3 @@ function(run_test test)
message(STATUS "${test} - PASSED")
endif()
endfunction()
-
-run_test(MissingNormal)
-run_test(MissingNormalRequired)
-run_test(MissingNormalVersion)
-run_test(MissingNormalWarnNoModuleOld)
-run_test(MissingNormalWarnNoModuleNew)
-run_test(MissingModule)
-run_test(MissingModuleRequired)
-run_test(MissingConfig)
-run_test(MissingConfigOneName)
-run_test(MissingConfigRequired)
-run_test(MissingConfigVersion)
-run_test(MixedModeOptions)
diff --git a/Tests/CMakeCommands/build_command/CMakeLists.txt b/Tests/RunCMake/build_command/CMakeLists.txt
index 990ac90..0fbb948 100644
--- a/Tests/CMakeCommands/build_command/CMakeLists.txt
+++ b/Tests/RunCMake/build_command/CMakeLists.txt
@@ -1,3 +1,7 @@
+cmake_minimum_required(VERSION 2.8)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
+
# This CMakeLists file is *sometimes expected* to result in a configure error.
#
# expect this to succeed:
@@ -12,12 +16,9 @@
# ...even purposefully calling it with known-bad argument lists to cover
# error handling code.
#
-cmake_minimum_required(VERSION 2.8)
-project(test_build_command)
set(cmd "initial")
-message("CTEST_FULL_OUTPUT")
message("0. begin")
if(TEST_ERROR_CONDITIONS)
diff --git a/Tests/RunCMake/build_command/ErrorsOFF-stderr.txt b/Tests/RunCMake/build_command/ErrorsOFF-stderr.txt
new file mode 100644
index 0000000..331885b
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsOFF-stderr.txt
@@ -0,0 +1 @@
+skipping cases 1, 2 and 3 because TEST_ERROR_CONDITIONS is OFF
diff --git a/Tests/RunCMake/build_command/ErrorsOFF-stdout.txt b/Tests/RunCMake/build_command/ErrorsOFF-stdout.txt
new file mode 100644
index 0000000..cf66a9d
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsOFF-stdout.txt
@@ -0,0 +1 @@
+Build files have been written to:
diff --git a/Tests/RunCMake/build_command/ErrorsOFF.cmake b/Tests/RunCMake/build_command/ErrorsOFF.cmake
new file mode 100644
index 0000000..a243fab
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsOFF.cmake
@@ -0,0 +1 @@
+set(TEST_ERROR_CONDITIONS OFF)
diff --git a/Tests/CMakeCommands/find_package/MixedModeOptions-result.txt b/Tests/RunCMake/build_command/ErrorsON-result.txt
index d00491f..d00491f 100644
--- a/Tests/CMakeCommands/find_package/MixedModeOptions-result.txt
+++ b/Tests/RunCMake/build_command/ErrorsON-result.txt
diff --git a/Tests/RunCMake/build_command/ErrorsON-stderr.txt b/Tests/RunCMake/build_command/ErrorsON-stderr.txt
new file mode 100644
index 0000000..0be7475
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsON-stderr.txt
@@ -0,0 +1,12 @@
+CMake Error at CMakeLists.txt:[0-9]+ \(build_command\):
+ build_command requires at least one argument naming a CMake variable
+
++
+1. cmd='initial'
+CMake Error at CMakeLists.txt:[0-9]+ \(build_command\):
+ build_command unknown argument "BOGUS"
+
++
+2. cmd='initial'
+CMake Error at CMakeLists.txt:[0-9]+ \(build_command\):
+ build_command unknown argument "STUFF"
diff --git a/Tests/RunCMake/build_command/ErrorsON-stdout.txt b/Tests/RunCMake/build_command/ErrorsON-stdout.txt
new file mode 100644
index 0000000..841dd0d
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsON-stdout.txt
@@ -0,0 +1 @@
+Configuring incomplete, errors occurred!
diff --git a/Tests/RunCMake/build_command/ErrorsON.cmake b/Tests/RunCMake/build_command/ErrorsON.cmake
new file mode 100644
index 0000000..27814bf
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsON.cmake
@@ -0,0 +1 @@
+set(TEST_ERROR_CONDITIONS ON)
diff --git a/Tests/RunCMake/build_command/RunCMakeTest.cmake b/Tests/RunCMake/build_command/RunCMakeTest.cmake
new file mode 100644
index 0000000..4525c57
--- /dev/null
+++ b/Tests/RunCMake/build_command/RunCMakeTest.cmake
@@ -0,0 +1,4 @@
+include(RunCMake)
+
+run_cmake(ErrorsOFF)
+run_cmake(ErrorsON)
diff --git a/Tests/RunCMake/find_package/CMakeLists.txt b/Tests/RunCMake/find_package/CMakeLists.txt
new file mode 100644
index 0000000..e8db6b0
--- /dev/null
+++ b/Tests/RunCMake/find_package/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/CMakeCommands/find_package/MissingConfig-stderr.txt b/Tests/RunCMake/find_package/MissingConfig-stderr.txt
index 1eae0bb..1eae0bb 100644
--- a/Tests/CMakeCommands/find_package/MissingConfig-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingConfig-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingConfig.cmake b/Tests/RunCMake/find_package/MissingConfig.cmake
index 238e7e4..238e7e4 100644
--- a/Tests/CMakeCommands/find_package/MissingConfig.cmake
+++ b/Tests/RunCMake/find_package/MissingConfig.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingConfigOneName-stderr.txt b/Tests/RunCMake/find_package/MissingConfigOneName-stderr.txt
index 10e71fa..10e71fa 100644
--- a/Tests/CMakeCommands/find_package/MissingConfigOneName-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingConfigOneName-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingConfigOneName.cmake b/Tests/RunCMake/find_package/MissingConfigOneName.cmake
index 11676a9..11676a9 100644
--- a/Tests/CMakeCommands/find_package/MissingConfigOneName.cmake
+++ b/Tests/RunCMake/find_package/MissingConfigOneName.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingConfigRequired-result.txt b/Tests/RunCMake/find_package/MissingConfigRequired-result.txt
index d00491f..d00491f 100644
--- a/Tests/CMakeCommands/find_package/MissingConfigRequired-result.txt
+++ b/Tests/RunCMake/find_package/MissingConfigRequired-result.txt
diff --git a/Tests/CMakeCommands/find_package/MissingConfigRequired-stderr.txt b/Tests/RunCMake/find_package/MissingConfigRequired-stderr.txt
index 2ba774a..2ba774a 100644
--- a/Tests/CMakeCommands/find_package/MissingConfigRequired-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingConfigRequired-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingConfigRequired.cmake b/Tests/RunCMake/find_package/MissingConfigRequired.cmake
index 0ae6702..0ae6702 100644
--- a/Tests/CMakeCommands/find_package/MissingConfigRequired.cmake
+++ b/Tests/RunCMake/find_package/MissingConfigRequired.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingConfigVersion-stderr.txt b/Tests/RunCMake/find_package/MissingConfigVersion-stderr.txt
index 2f5086e..2f5086e 100644
--- a/Tests/CMakeCommands/find_package/MissingConfigVersion-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingConfigVersion-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingConfigVersion.cmake b/Tests/RunCMake/find_package/MissingConfigVersion.cmake
index ac35a79..ac35a79 100644
--- a/Tests/CMakeCommands/find_package/MissingConfigVersion.cmake
+++ b/Tests/RunCMake/find_package/MissingConfigVersion.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingModule-stderr.txt b/Tests/RunCMake/find_package/MissingModule-stderr.txt
index 2ad460f..2ad460f 100644
--- a/Tests/CMakeCommands/find_package/MissingModule-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingModule-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingModule.cmake b/Tests/RunCMake/find_package/MissingModule.cmake
index 76bcef2..76bcef2 100644
--- a/Tests/CMakeCommands/find_package/MissingModule.cmake
+++ b/Tests/RunCMake/find_package/MissingModule.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingModuleRequired-result.txt b/Tests/RunCMake/find_package/MissingModuleRequired-result.txt
index d00491f..d00491f 100644
--- a/Tests/CMakeCommands/find_package/MissingModuleRequired-result.txt
+++ b/Tests/RunCMake/find_package/MissingModuleRequired-result.txt
diff --git a/Tests/CMakeCommands/find_package/MissingModuleRequired-stderr.txt b/Tests/RunCMake/find_package/MissingModuleRequired-stderr.txt
index fec05f1..fec05f1 100644
--- a/Tests/CMakeCommands/find_package/MissingModuleRequired-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingModuleRequired-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingModuleRequired.cmake b/Tests/RunCMake/find_package/MissingModuleRequired.cmake
index 897eda6..897eda6 100644
--- a/Tests/CMakeCommands/find_package/MissingModuleRequired.cmake
+++ b/Tests/RunCMake/find_package/MissingModuleRequired.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingNormal-stderr.txt b/Tests/RunCMake/find_package/MissingNormal-stderr.txt
index f4c6fba..f4c6fba 100644
--- a/Tests/CMakeCommands/find_package/MissingNormal-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingNormal-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingNormal.cmake b/Tests/RunCMake/find_package/MissingNormal.cmake
index fb90e01..fb90e01 100644
--- a/Tests/CMakeCommands/find_package/MissingNormal.cmake
+++ b/Tests/RunCMake/find_package/MissingNormal.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingNormalRequired-result.txt b/Tests/RunCMake/find_package/MissingNormalRequired-result.txt
index d00491f..d00491f 100644
--- a/Tests/CMakeCommands/find_package/MissingNormalRequired-result.txt
+++ b/Tests/RunCMake/find_package/MissingNormalRequired-result.txt
diff --git a/Tests/CMakeCommands/find_package/MissingNormalRequired-stderr.txt b/Tests/RunCMake/find_package/MissingNormalRequired-stderr.txt
index 7bb7902..7bb7902 100644
--- a/Tests/CMakeCommands/find_package/MissingNormalRequired-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingNormalRequired-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingNormalRequired.cmake b/Tests/RunCMake/find_package/MissingNormalRequired.cmake
index 33353d8..33353d8 100644
--- a/Tests/CMakeCommands/find_package/MissingNormalRequired.cmake
+++ b/Tests/RunCMake/find_package/MissingNormalRequired.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingNormalVersion-stderr.txt b/Tests/RunCMake/find_package/MissingNormalVersion-stderr.txt
index 36de800..36de800 100644
--- a/Tests/CMakeCommands/find_package/MissingNormalVersion-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingNormalVersion-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingNormalVersion.cmake b/Tests/RunCMake/find_package/MissingNormalVersion.cmake
index 2d9ce4e..2d9ce4e 100644
--- a/Tests/CMakeCommands/find_package/MissingNormalVersion.cmake
+++ b/Tests/RunCMake/find_package/MissingNormalVersion.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew-stderr.txt b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew-stderr.txt
index d34f23c..d34f23c 100644
--- a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew.cmake b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew.cmake
index 0211249..0211249 100644
--- a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleNew.cmake
+++ b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew.cmake
diff --git a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld-stderr.txt b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld-stderr.txt
index b336b56..b336b56 100644
--- a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld-stderr.txt
+++ b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld.cmake b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld.cmake
index 1c4a775..1c4a775 100644
--- a/Tests/CMakeCommands/find_package/MissingNormalWarnNoModuleOld.cmake
+++ b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld.cmake
diff --git a/Tests/RunCMake/find_package/MixedModeOptions-result.txt b/Tests/RunCMake/find_package/MixedModeOptions-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/find_package/MixedModeOptions-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt b/Tests/RunCMake/find_package/MixedModeOptions-stderr.txt
index b867022..b867022 100644
--- a/Tests/CMakeCommands/find_package/MixedModeOptions-stderr.txt
+++ b/Tests/RunCMake/find_package/MixedModeOptions-stderr.txt
diff --git a/Tests/CMakeCommands/find_package/MixedModeOptions.cmake b/Tests/RunCMake/find_package/MixedModeOptions.cmake
index 7f78ee0..7f78ee0 100644
--- a/Tests/CMakeCommands/find_package/MixedModeOptions.cmake
+++ b/Tests/RunCMake/find_package/MixedModeOptions.cmake
diff --git a/Tests/RunCMake/find_package/RunCMakeTest.cmake b/Tests/RunCMake/find_package/RunCMakeTest.cmake
new file mode 100644
index 0000000..ba57f99
--- /dev/null
+++ b/Tests/RunCMake/find_package/RunCMakeTest.cmake
@@ -0,0 +1,14 @@
+include(RunCMake)
+
+run_cmake(MissingNormal)
+run_cmake(MissingNormalRequired)
+run_cmake(MissingNormalVersion)
+run_cmake(MissingNormalWarnNoModuleOld)
+run_cmake(MissingNormalWarnNoModuleNew)
+run_cmake(MissingModule)
+run_cmake(MissingModuleRequired)
+run_cmake(MissingConfig)
+run_cmake(MissingConfigOneName)
+run_cmake(MissingConfigRequired)
+run_cmake(MissingConfigVersion)
+run_cmake(MixedModeOptions)
diff --git a/Utilities/KWIML/test/test_INT_format.h.in b/Utilities/KWIML/test/test_INT_format.h.in
index 72a62f2..a8ea263 100644
--- a/Utilities/KWIML/test/test_INT_format.h.in
+++ b/Utilities/KWIML/test/test_INT_format.h.in
@@ -18,15 +18,13 @@
# define LANG "C "
#endif
-#define VALUE(T, U) \
- (@KWIML@_INT_##T)((@KWIML@_INT_##U)0xab << \
- ((sizeof(@KWIML@_INT_##T)-1)<<3)) \
+#define VALUE(T, U) (T)((U)0xab << ((sizeof(T)-1)<<3))
-#define TEST_C(C, V, PRI, T, U) \
+#define TEST_C_(C, V, PRI, T, U) \
{ \
- @KWIML@_INT_##T const x = VALUE(T, U); \
- @KWIML@_INT_##T y = @KWIML@_INT_##C(V); \
- printf(LANG "@KWIML@_INT_" #C ":" \
+ T const x = VALUE(T, U); \
+ T y = C(V); \
+ printf(LANG #C ":" \
" expression [%"@KWIML@_INT_PRI##PRI"]," \
" literal [%"@KWIML@_INT_PRI##PRI"]", x, y); \
if(x == y) \
@@ -40,9 +38,9 @@
} \
}
-#define TEST_PRI(PRI, T, U, STR) \
+#define TEST_PRI_(PRI, T, U, STR) \
{ \
- @KWIML@_INT_##T const x = VALUE(T, U); \
+ T const x = VALUE(T, U); \
char const* str = STR; \
sprintf(buf, "%"@KWIML@_INT_PRI##PRI, x); \
printf(LANG "@KWIML@_INT_PRI" #PRI ":" \
@@ -58,11 +56,11 @@
} \
}
-#define TEST_SCN(SCN, T, U, STR) TEST_SCN2(SCN, SCN, T, U, STR)
-#define TEST_SCN2(PRI, SCN, T, U, STR) \
+#define TEST_SCN_(SCN, T, U, STR) TEST_SCN2_(SCN, SCN, T, U, STR)
+#define TEST_SCN2_(PRI, SCN, T, U, STR) \
{ \
- @KWIML@_INT_##T const x = VALUE(T, U); \
- @KWIML@_INT_##T y; \
+ T const x = VALUE(T, U); \
+ T y; \
char const* str = STR; \
if(sscanf(str, "%"@KWIML@_INT_SCN##SCN, &y) != 1) \
{ \
@@ -82,10 +80,24 @@
} \
}
-#define TEST(FMT, T, U, STR) TEST2(FMT, FMT, T, U, STR)
-#define TEST2(PRI, SCN, T, U, STR) \
- TEST_PRI(PRI, T, U, STR) \
- TEST_SCN2(PRI, SCN, T, U, STR)
+#define TEST_(FMT, T, U, STR) TEST2_(FMT, FMT, T, U, STR)
+#define TEST2_(PRI, SCN, T, U, STR) \
+ TEST_PRI_(PRI, T, U, STR) \
+ TEST_SCN2_(PRI, SCN, T, U, STR)
+
+/* Concatenate T and U now to avoid expanding them. */
+#define TEST(FMT, T, U, STR) \
+ TEST_(FMT, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
+#define TEST2(PRI, SCN, T, U, STR) \
+ TEST2_(PRI, SCN, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
+#define TEST_C(C, V, PRI, T, U) \
+ TEST_C_(@KWIML@_INT_##C, V, PRI, @KWIML@_INT_##T, @KWIML@_INT_##U)
+#define TEST_PRI(PRI, T, U, STR) \
+ TEST_PRI_(PRI, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
+#define TEST_SCN(SCN, T, U, STR) \
+ TEST_SCN_(SCN, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
+#define TEST_SCN2(PRI, SCN, T, U, STR) \
+ TEST_SCN2_(PRI, SCN, @KWIML@_INT_##T, @KWIML@_INT_##U, STR)
static int test_INT_format(void)
{