summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/CMakeDependentOption.cmake5
-rw-r--r--Source/cmCoreTryCompile.cxx7
-rw-r--r--Source/cmakemain.cxx11
-rw-r--r--Tests/RunCMake/CMakeDependentOption/Parentheses.cmake7
-rw-r--r--Tests/RunCMake/CMakeDependentOption/Regex-stdout.txt (renamed from Tests/RunCMake/CMakeDependentOption/Parentheses-stdout.txt)0
-rw-r--r--Tests/RunCMake/CMakeDependentOption/Regex.cmake5
-rw-r--r--Tests/RunCMake/CMakeDependentOption/RunCMakeTest.cmake2
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-NEW-stderr.txt1
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-NEW-toolchain.cmake1
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-NEW.cmake2
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-OLD-stderr.txt1
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-OLD-toolchain.cmake1
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-OLD.cmake2
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-WARN-stderr.txt1
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-WARN-toolchain.cmake1
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-WARN.cmake2
-rw-r--r--Tests/RunCMake/ToolchainFile/CMP0126-toolchain.cmake7
-rw-r--r--Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake3
-rw-r--r--Tests/RunCMake/message/RunCMakeTest.cmake2
-rw-r--r--Tests/RunCMake/message/newline-script.cmake2
-rw-r--r--Tests/RunCMake/message/newline-stdout.txt2
-rw-r--r--Tests/RunCMake/message/newline.cmake9
22 files changed, 62 insertions, 12 deletions
diff --git a/Modules/CMakeDependentOption.cmake b/Modules/CMakeDependentOption.cmake
index 0a291f2..96855d2 100644
--- a/Modules/CMakeDependentOption.cmake
+++ b/Modules/CMakeDependentOption.cmake
@@ -42,10 +42,7 @@ macro(CMAKE_DEPENDENT_OPTION option doc default depends force)
if(${option}_ISSET MATCHES "^${option}_ISSET$")
set(${option}_AVAILABLE 1)
foreach(d ${depends})
- string(REPLACE "(" " ( " _CMAKE_CDO_DEP "${d}")
- string(REPLACE ")" " ) " _CMAKE_CDO_DEP "${_CMAKE_CDO_DEP}")
- string(REGEX REPLACE " +" ";" CMAKE_DEPENDENT_OPTION_DEP "${_CMAKE_CDO_DEP}")
- unset(_CMAKE_CDO_DEP)
+ string(REGEX REPLACE " +" ";" CMAKE_DEPENDENT_OPTION_DEP "${d}")
if(${CMAKE_DEPENDENT_OPTION_DEP})
else()
set(${option}_AVAILABLE 0)
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index 8ecf264..bf18143 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -570,6 +570,13 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
*cmp0123 == "NEW"_s ? "NEW" : "OLD");
}
+ /* Set cache/normal variable policy to match outer project.
+ It may affect toolchain files. */
+ if (this->Makefile->GetPolicyStatus(cmPolicies::CMP0126) !=
+ cmPolicies::NEW) {
+ fprintf(fout, "cmake_policy(SET CMP0126 OLD)\n");
+ }
+
std::string projectLangs;
for (std::string const& li : testLangs) {
projectLangs += " " + li;
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index 1725375..64d93df 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -153,9 +153,20 @@ std::string cmakemainGetStack(cmake* cm)
void cmakemainMessageCallback(const std::string& m,
const cmMessageMetadata& md, cmake* cm)
{
+#if defined(_WIN32)
+ // FIXME: On Windows we replace cerr's streambuf with a custom
+ // implementation that converts our internal UTF-8 encoding to the
+ // console's encoding. It also does *not* replace LF with CRLF.
+ // Since stderr does not convert encoding and does convert LF, we
+ // cannot use it to print messages. Another implementation will
+ // be needed to print colored messages on Windows.
+ static_cast<void>(md);
+ std::cerr << m << cmakemainGetStack(cm) << "\n";
+#else
cmsysTerminal_cfprintf(md.desiredColor, stderr, "%s", m.c_str());
fflush(stderr); // stderr is buffered in some cases.
std::cerr << cmakemainGetStack(cm) << "\n";
+#endif
}
void cmakemainProgressCallback(const std::string& m, float prog, cmake* cm)
diff --git a/Tests/RunCMake/CMakeDependentOption/Parentheses.cmake b/Tests/RunCMake/CMakeDependentOption/Parentheses.cmake
deleted file mode 100644
index c2951f1..0000000
--- a/Tests/RunCMake/CMakeDependentOption/Parentheses.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-include(CMakeDependentOption)
-
-set(A 1)
-set(B 1)
-set(C 0)
-cmake_dependent_option(USE_FOO "Use Foo" ON "A AND (B OR C)" OFF)
-message(STATUS "USE_FOO='${USE_FOO}'")
diff --git a/Tests/RunCMake/CMakeDependentOption/Parentheses-stdout.txt b/Tests/RunCMake/CMakeDependentOption/Regex-stdout.txt
index 15b56a1..15b56a1 100644
--- a/Tests/RunCMake/CMakeDependentOption/Parentheses-stdout.txt
+++ b/Tests/RunCMake/CMakeDependentOption/Regex-stdout.txt
diff --git a/Tests/RunCMake/CMakeDependentOption/Regex.cmake b/Tests/RunCMake/CMakeDependentOption/Regex.cmake
new file mode 100644
index 0000000..8342a01
--- /dev/null
+++ b/Tests/RunCMake/CMakeDependentOption/Regex.cmake
@@ -0,0 +1,5 @@
+include(CMakeDependentOption)
+
+set(FOO "lower")
+cmake_dependent_option(USE_FOO "Use Foo" ON "FOO MATCHES (UPPER|lower)" OFF)
+message(STATUS "USE_FOO='${USE_FOO}'")
diff --git a/Tests/RunCMake/CMakeDependentOption/RunCMakeTest.cmake b/Tests/RunCMake/CMakeDependentOption/RunCMakeTest.cmake
index bbdd3e5..e1045f2 100644
--- a/Tests/RunCMake/CMakeDependentOption/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CMakeDependentOption/RunCMakeTest.cmake
@@ -1,3 +1,3 @@
include(RunCMake)
-run_cmake_script(Parentheses)
+run_cmake_script(Regex)
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-NEW-stderr.txt b/Tests/RunCMake/ToolchainFile/CMP0126-NEW-stderr.txt
new file mode 100644
index 0000000..7b91b43
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-NEW-stderr.txt
@@ -0,0 +1 @@
+^try_compile CMP0126='NEW' VAR='1'
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-NEW-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CMP0126-NEW-toolchain.cmake
new file mode 100644
index 0000000..2f1ec86
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-NEW-toolchain.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/CMP0126-toolchain.cmake")
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-NEW.cmake b/Tests/RunCMake/ToolchainFile/CMP0126-NEW.cmake
new file mode 100644
index 0000000..62d4df1
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-NEW.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0126 NEW)
+enable_language(C)
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-OLD-stderr.txt b/Tests/RunCMake/ToolchainFile/CMP0126-OLD-stderr.txt
new file mode 100644
index 0000000..f3c068a
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-OLD-stderr.txt
@@ -0,0 +1 @@
+^try_compile CMP0126='OLD' VAR='2'
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-OLD-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CMP0126-OLD-toolchain.cmake
new file mode 100644
index 0000000..2f1ec86
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-OLD-toolchain.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/CMP0126-toolchain.cmake")
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-OLD.cmake b/Tests/RunCMake/ToolchainFile/CMP0126-OLD.cmake
new file mode 100644
index 0000000..ef821fe
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-OLD.cmake
@@ -0,0 +1,2 @@
+cmake_policy(SET CMP0126 OLD)
+enable_language(C)
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-WARN-stderr.txt b/Tests/RunCMake/ToolchainFile/CMP0126-WARN-stderr.txt
new file mode 100644
index 0000000..f3c068a
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-WARN-stderr.txt
@@ -0,0 +1 @@
+^try_compile CMP0126='OLD' VAR='2'
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-WARN-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CMP0126-WARN-toolchain.cmake
new file mode 100644
index 0000000..2f1ec86
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-WARN-toolchain.cmake
@@ -0,0 +1 @@
+include("${CMAKE_CURRENT_LIST_DIR}/CMP0126-toolchain.cmake")
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-WARN.cmake b/Tests/RunCMake/ToolchainFile/CMP0126-WARN.cmake
new file mode 100644
index 0000000..426e2b1
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-WARN.cmake
@@ -0,0 +1,2 @@
+# leave CMP0126 unset
+enable_language(C)
diff --git a/Tests/RunCMake/ToolchainFile/CMP0126-toolchain.cmake b/Tests/RunCMake/ToolchainFile/CMP0126-toolchain.cmake
new file mode 100644
index 0000000..d5af14f
--- /dev/null
+++ b/Tests/RunCMake/ToolchainFile/CMP0126-toolchain.cmake
@@ -0,0 +1,7 @@
+get_property(_IN_TC GLOBAL PROPERTY IN_TRY_COMPILE)
+if(_IN_TC)
+ cmake_policy(GET CMP0126 cmp0126)
+ set(VAR 1)
+ set(VAR 2 CACHE STRING "")
+ message("try_compile CMP0126='${cmp0126}' VAR='${VAR}'")
+endif()
diff --git a/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake b/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake
index 304c105..7744ee8 100644
--- a/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake
+++ b/Tests/RunCMake/ToolchainFile/RunCMakeTest.cmake
@@ -11,6 +11,9 @@ run_cmake_toolchain(CheckLanguage)
run_cmake_toolchain(FlagsInit)
run_cmake_toolchain(LangVars)
run_cmake_toolchain(LinkFlagsInit)
+run_cmake_toolchain(CMP0126-NEW)
+run_cmake_toolchain(CMP0126-OLD)
+run_cmake_toolchain(CMP0126-WARN)
function(run_IncludeDirectories)
run_cmake_toolchain(IncludeDirectories)
diff --git a/Tests/RunCMake/message/RunCMakeTest.cmake b/Tests/RunCMake/message/RunCMakeTest.cmake
index 0313ed1..1233838 100644
--- a/Tests/RunCMake/message/RunCMakeTest.cmake
+++ b/Tests/RunCMake/message/RunCMakeTest.cmake
@@ -1,5 +1,7 @@
include(RunCMake)
+run_cmake_script(newline)
+
run_cmake(defaultmessage)
run_cmake(nomessage)
run_cmake(message-internal-warning)
diff --git a/Tests/RunCMake/message/newline-script.cmake b/Tests/RunCMake/message/newline-script.cmake
new file mode 100644
index 0000000..e9e3d5d
--- /dev/null
+++ b/Tests/RunCMake/message/newline-script.cmake
@@ -0,0 +1,2 @@
+message(STATUS "one\ntwo")
+message("one\ntwo")
diff --git a/Tests/RunCMake/message/newline-stdout.txt b/Tests/RunCMake/message/newline-stdout.txt
new file mode 100644
index 0000000..beca44e
--- /dev/null
+++ b/Tests/RunCMake/message/newline-stdout.txt
@@ -0,0 +1,2 @@
+-- out='2d2d206f6e650a74776f0a'
+-- err='6f6e650a74776f0a'
diff --git a/Tests/RunCMake/message/newline.cmake b/Tests/RunCMake/message/newline.cmake
new file mode 100644
index 0000000..97afba4
--- /dev/null
+++ b/Tests/RunCMake/message/newline.cmake
@@ -0,0 +1,9 @@
+execute_process(
+ COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_LIST_DIR}/newline-script.cmake"
+ OUTPUT_FILE newline-script-stdout.txt
+ ERROR_FILE newline-script-stderr.txt
+ )
+foreach(f out err)
+ file(READ newline-script-std${f}.txt hex HEX)
+ message(STATUS "${f}='${hex}'")
+endforeach()