From 23f3dd9f7c87bbf02685f388cb3913a8878e4f3b Mon Sep 17 00:00:00 2001 From: friendlyanon Date: Fri, 11 Nov 2022 16:12:13 +0100 Subject: RunCMake/project: Ignore exact line number in stderr checks --- Tests/RunCMake/project/CMP0048-OLD-VERSION-stderr.txt | 2 +- Tests/RunCMake/project/CMP0048-OLD-stderr.txt | 2 +- Tests/RunCMake/project/CMP0048-WARN-stderr.txt | 2 +- Tests/RunCMake/project/LanguagesTwice-stderr.txt | 2 +- Tests/RunCMake/project/VersionInvalid-stderr.txt | 2 +- Tests/RunCMake/project/VersionMissingLanguages-stderr.txt | 2 +- Tests/RunCMake/project/VersionTwice-stderr.txt | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Tests/RunCMake/project/CMP0048-OLD-VERSION-stderr.txt b/Tests/RunCMake/project/CMP0048-OLD-VERSION-stderr.txt index 3a13d32..c11215a 100644 --- a/Tests/RunCMake/project/CMP0048-OLD-VERSION-stderr.txt +++ b/Tests/RunCMake/project/CMP0048-OLD-VERSION-stderr.txt @@ -1,4 +1,4 @@ CMake Error at CMP0048-OLD-VERSION.cmake:1 \(project\): VERSION not allowed unless CMP0048 is set to NEW Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\)$ + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/project/CMP0048-OLD-stderr.txt b/Tests/RunCMake/project/CMP0048-OLD-stderr.txt index 1fa70f8..695fb70 100644 --- a/Tests/RunCMake/project/CMP0048-OLD-stderr.txt +++ b/Tests/RunCMake/project/CMP0048-OLD-stderr.txt @@ -7,4 +7,4 @@ specific short-term circumstances. Projects should be ported to the NEW behavior and not rely on setting a policy to OLD. Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\)$ + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/project/CMP0048-WARN-stderr.txt b/Tests/RunCMake/project/CMP0048-WARN-stderr.txt index 6d29ad2..d9be5d3 100644 --- a/Tests/RunCMake/project/CMP0048-WARN-stderr.txt +++ b/Tests/RunCMake/project/CMP0048-WARN-stderr.txt @@ -8,5 +8,5 @@ CMake Warning \(dev\) at CMP0048-WARN.cmake:3 \(project\): PROJECT_VERSION MyProject_VERSION_TWEAK Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\) + CMakeLists.txt:[0-9]+ \(include\) This warning is for project developers. Use -Wno-dev to suppress it. diff --git a/Tests/RunCMake/project/LanguagesTwice-stderr.txt b/Tests/RunCMake/project/LanguagesTwice-stderr.txt index 9c69dd0..6edca2f 100644 --- a/Tests/RunCMake/project/LanguagesTwice-stderr.txt +++ b/Tests/RunCMake/project/LanguagesTwice-stderr.txt @@ -1,4 +1,4 @@ CMake Error at LanguagesTwice.cmake:1 \(project\): LANGUAGES may be specified at most once. Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\)$ + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/project/VersionInvalid-stderr.txt b/Tests/RunCMake/project/VersionInvalid-stderr.txt index 48358d1..e13a382 100644 --- a/Tests/RunCMake/project/VersionInvalid-stderr.txt +++ b/Tests/RunCMake/project/VersionInvalid-stderr.txt @@ -1,4 +1,4 @@ CMake Error at VersionInvalid.cmake:2 \(project\): VERSION "NONE" format invalid. Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\)$ + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/project/VersionMissingLanguages-stderr.txt b/Tests/RunCMake/project/VersionMissingLanguages-stderr.txt index 576ac69..63cbf63 100644 --- a/Tests/RunCMake/project/VersionMissingLanguages-stderr.txt +++ b/Tests/RunCMake/project/VersionMissingLanguages-stderr.txt @@ -2,4 +2,4 @@ CMake Error at VersionMissingLanguages.cmake:2 \(project\): project with VERSION, DESCRIPTION or HOMEPAGE_URL must use LANGUAGES before language names. Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\)$ + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/project/VersionTwice-stderr.txt b/Tests/RunCMake/project/VersionTwice-stderr.txt index ec07ead..dc05533 100644 --- a/Tests/RunCMake/project/VersionTwice-stderr.txt +++ b/Tests/RunCMake/project/VersionTwice-stderr.txt @@ -1,4 +1,4 @@ CMake Error at VersionTwice.cmake:2 \(project\): VERSION may be specified at most once. Call Stack \(most recent call first\): - CMakeLists.txt:3 \(include\)$ + CMakeLists.txt:[0-9]+ \(include\)$ -- cgit v0.12 From 59573bf5b9afb2157c73b18dd189a0927dafee52 Mon Sep 17 00:00:00 2001 From: friendlyanon Date: Fri, 11 Nov 2022 16:15:30 +0100 Subject: project: Warn at top-level if `cmake_minimum_required` wasn't called The top-level project() call will now issue an AUTHOR_WARNING if it wasn't called after cmake_minimum_required(). Fixes: #24071 --- Help/command/project.rst | 3 ++- Help/release/dev/top-level-command-order.rst | 6 ++++++ Source/cmProjectCommand.cxx | 9 +++++++++ Tests/RunCMake/CommandLine/C_buildsrcdir/initial-cache.txt | 2 ++ Tests/RunCMake/project/CMakeLists.txt | 4 +++- Tests/RunCMake/project/NoMinimumRequired-stderr.txt | 5 +++++ Tests/RunCMake/project/NoMinimumRequired.cmake | 0 Tests/RunCMake/project/RunCMakeTest.cmake | 2 ++ Tests/RunCMake/project_injected/RunCMakeTest.cmake | 1 + 9 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 Help/release/dev/top-level-command-order.rst create mode 100644 Tests/RunCMake/project/NoMinimumRequired-stderr.txt create mode 100644 Tests/RunCMake/project/NoMinimumRequired.cmake diff --git a/Help/command/project.rst b/Help/command/project.rst index 8f32fa3..4e57d09 100644 --- a/Help/command/project.rst +++ b/Help/command/project.rst @@ -188,5 +188,6 @@ call exists, CMake will issue a warning and pretend there is a Call the ``project()`` command near the top of the top-level ``CMakeLists.txt``, but *after* calling :command:`cmake_minimum_required`. It is important to establish version and policy settings before invoking - other commands whose behavior they may affect. + other commands whose behavior they may affect and for this reason the + ``project()`` command will issue a warning if this order is not kept. See also policy :policy:`CMP0000`. diff --git a/Help/release/dev/top-level-command-order.rst b/Help/release/dev/top-level-command-order.rst new file mode 100644 index 0000000..07f87fb --- /dev/null +++ b/Help/release/dev/top-level-command-order.rst @@ -0,0 +1,6 @@ +top-level-command-order +----------------------- + +* The top-level :command:`project` call will now emit an author warning if the + documented command order in relation to :command:`cmake_minimum_required` is + not respected. diff --git a/Source/cmProjectCommand.cxx b/Source/cmProjectCommand.cxx index 249fe2d..4d1ccfe 100644 --- a/Source/cmProjectCommand.cxx +++ b/Source/cmProjectCommand.cxx @@ -34,6 +34,15 @@ bool cmProjectCommand(std::vector const& args, } cmMakefile& mf = status.GetMakefile(); + if (mf.IsRootMakefile() && + !mf.GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION")) { + mf.IssueMessage( + MessageType::AUTHOR_WARNING, + "cmake_minimum_required() should be called prior to this top-level " + "project() call. Please see the cmake-commands(7) manual for usage " + "documentation of both commands."); + } + if (!IncludeByVariable(status, "CMAKE_PROJECT_INCLUDE_BEFORE")) { return false; } diff --git a/Tests/RunCMake/CommandLine/C_buildsrcdir/initial-cache.txt b/Tests/RunCMake/CommandLine/C_buildsrcdir/initial-cache.txt index adc125b..ce1cce3 100644 --- a/Tests/RunCMake/CommandLine/C_buildsrcdir/initial-cache.txt +++ b/Tests/RunCMake/CommandLine/C_buildsrcdir/initial-cache.txt @@ -1,3 +1,5 @@ +set(CMAKE_MINIMUM_REQUIRED_VERSION "" CACHE STRING "") + # Used to verify that the values match what is passed via -S and -B, and are retained in cache. set(INITIAL_SOURCE_DIR "${CMAKE_SOURCE_DIR}" CACHE PATH "defined in initial.cmake") set(INITIAL_BINARY_DIR "${CMAKE_BINARY_DIR}" CACHE PATH "defined in initial.cmake") diff --git a/Tests/RunCMake/project/CMakeLists.txt b/Tests/RunCMake/project/CMakeLists.txt index 4b3de84..fdcaee9 100644 --- a/Tests/RunCMake/project/CMakeLists.txt +++ b/Tests/RunCMake/project/CMakeLists.txt @@ -1,3 +1,5 @@ -cmake_minimum_required(VERSION 2.8.12) +if(NOT "x${RunCMake_TEST}" STREQUAL "xNoMinimumRequired") + cmake_minimum_required(VERSION 2.8.12) +endif() project(${RunCMake_TEST} NONE) include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/project/NoMinimumRequired-stderr.txt b/Tests/RunCMake/project/NoMinimumRequired-stderr.txt new file mode 100644 index 0000000..83e2ac9 --- /dev/null +++ b/Tests/RunCMake/project/NoMinimumRequired-stderr.txt @@ -0,0 +1,5 @@ +CMake Warning \(dev\) at CMakeLists\.txt:[0-9]+ \(project\): + cmake_minimum_required\(\) should be called prior to this top-level project\(\) + call\. Please see the cmake-commands\(7\) manual for usage documentation of + both commands\. +This warning is for project developers\. Use -Wno-dev to suppress it\.$ diff --git a/Tests/RunCMake/project/NoMinimumRequired.cmake b/Tests/RunCMake/project/NoMinimumRequired.cmake new file mode 100644 index 0000000..e69de29 diff --git a/Tests/RunCMake/project/RunCMakeTest.cmake b/Tests/RunCMake/project/RunCMakeTest.cmake index 6d9f52f..0f3716f 100644 --- a/Tests/RunCMake/project/RunCMakeTest.cmake +++ b/Tests/RunCMake/project/RunCMakeTest.cmake @@ -52,3 +52,5 @@ run_cmake(CMP0048-NEW) run_cmake(CMP0096-WARN) run_cmake(CMP0096-OLD) run_cmake(CMP0096-NEW) + +run_cmake(NoMinimumRequired) diff --git a/Tests/RunCMake/project_injected/RunCMakeTest.cmake b/Tests/RunCMake/project_injected/RunCMakeTest.cmake index ba1a003..cf63e12 100644 --- a/Tests/RunCMake/project_injected/RunCMakeTest.cmake +++ b/Tests/RunCMake/project_injected/RunCMakeTest.cmake @@ -1,6 +1,7 @@ include(RunCMake) set(RunCMake_TEST_OPTIONS + -DCMAKE_MINIMUM_REQUIRED_VERSION:STATIC= # Simulate a previous CMake run that used `project(... VERSION ...)` # in a non-injected call site. -DCMAKE_PROJECT_VERSION:STATIC=1.2.3 -- cgit v0.12