mirror of
https://github.com/Kitware/CMake.git
synced 2026-05-07 06:40:16 -05:00
cmMakefile: Fix ConfigureString not passing filename and line
It enables to use CMAKE_CURRENT_LIST_LINE in string(CONFIGURE)
Added tests for it for ${} and @@ notattion for old CMP0053
and ${} for new
This commit is contained in:
@@ -3648,8 +3648,15 @@ void cmMakefile::ConfigureString(const std::string& input, std::string& output,
|
||||
}
|
||||
|
||||
// Perform variable replacements.
|
||||
this->ExpandVariablesInString(output, escapeQuotes, true, atOnly, nullptr,
|
||||
-1, true, true);
|
||||
const char* filename = nullptr;
|
||||
long lineNumber = -1;
|
||||
if (!this->Backtrace.Empty()) {
|
||||
const auto& currentTrace = this->Backtrace.Top();
|
||||
filename = currentTrace.FilePath.c_str();
|
||||
lineNumber = currentTrace.Line;
|
||||
}
|
||||
this->ExpandVariablesInString(output, escapeQuotes, true, atOnly, filename,
|
||||
lineNumber, true, true);
|
||||
}
|
||||
|
||||
int cmMakefile::ConfigureFile(const char* infile, const char* outfile,
|
||||
|
||||
@@ -81,7 +81,7 @@ check_cmake_test(String
|
||||
# Execute each test listed in StringTestScript.cmake:
|
||||
#
|
||||
set(scriptname "@CMAKE_CURRENT_SOURCE_DIR@/StringTestScript.cmake")
|
||||
set(number_of_tests_expected 70)
|
||||
set(number_of_tests_expected 73)
|
||||
|
||||
include("@CMAKE_CURRENT_SOURCE_DIR@/ExecuteScriptTests.cmake")
|
||||
execute_all_script_tests(${scriptname} number_of_tests_executed)
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
message(STATUS "testname='${testname}'")
|
||||
|
||||
function(test_configure_line_number EXPRESSION POLICY)
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0053 ${POLICY})
|
||||
string(CONFIGURE
|
||||
"${EXPRESSION}" v) # line should indicate string() call
|
||||
math(EXPR vplus3 "${v} + 3")
|
||||
if(NOT ${CMAKE_CURRENT_LIST_LINE} EQUAL ${vplus3})
|
||||
message(SEND_ERROR "Couldn't configure CMAKE_CURRENT_LIST_LINE, evaluated into '${v}'")
|
||||
endif()
|
||||
message(STATUS "v='${v}'")
|
||||
cmake_policy(POP)
|
||||
endfunction()
|
||||
|
||||
if(testname STREQUAL empty) # fail
|
||||
string()
|
||||
|
||||
@@ -32,6 +45,15 @@ elseif(testname STREQUAL configure_escape_quotes) # pass
|
||||
string(CONFIGURE "this is @testname@" v ESCAPE_QUOTES)
|
||||
message(STATUS "v='${v}'")
|
||||
|
||||
elseif(testname STREQUAL configure_line_number_CMP0053_old) # pass
|
||||
test_configure_line_number("\${CMAKE_CURRENT_LIST_LINE}" OLD)
|
||||
|
||||
elseif(testname STREQUAL configure_line_number_CMP0053_new) # pass
|
||||
test_configure_line_number("\${CMAKE_CURRENT_LIST_LINE}" NEW)
|
||||
|
||||
elseif(testname STREQUAL configure_line_number_CMP0053_old_use_at) # pass
|
||||
test_configure_line_number("\@CMAKE_CURRENT_LIST_LINE\@" OLD)
|
||||
|
||||
elseif(testname STREQUAL configure_bogus) # fail
|
||||
string(CONFIGURE "this is @testname@" v ESCAPE_QUOTES BOGUS)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user