mirror of
https://github.com/Kitware/CMake.git
synced 2026-02-12 18:19:11 -06:00
fileapi: Fix crash on cmake_file_api() call in initial cache
This commit is contained in:
@@ -58,7 +58,8 @@ void cmFileAPI::ReadQueries()
|
||||
{
|
||||
std::string const query_dir = cmStrCat(this->APIv1, "/query");
|
||||
std::string const user_query_dir = cmStrCat(this->UserAPIv1, "/query");
|
||||
this->QueryExists = cmSystemTools::FileIsDirectory(query_dir);
|
||||
this->QueryExists =
|
||||
this->QueryExists || cmSystemTools::FileIsDirectory(query_dir);
|
||||
if (!this->UserAPIv1.empty()) {
|
||||
this->QueryExists =
|
||||
this->QueryExists || cmSystemTools::FileIsDirectory(user_query_dir);
|
||||
|
||||
@@ -691,6 +691,7 @@ bool cmake::SetCacheArgs(const std::vector<std::string>& args)
|
||||
// Resolve script path specified on command line
|
||||
// relative to $PWD.
|
||||
auto path = cmSystemTools::CollapseFullPath(value);
|
||||
state->InitializeFileAPI();
|
||||
state->ReadListFile(args, path);
|
||||
return true;
|
||||
} },
|
||||
@@ -2549,7 +2550,7 @@ int cmake::ActualConfigure()
|
||||
}
|
||||
|
||||
#if !defined(CMAKE_BOOTSTRAP)
|
||||
this->FileAPI = cm::make_unique<cmFileAPI>(this);
|
||||
this->InitializeFileAPI();
|
||||
this->FileAPI->ReadQueries();
|
||||
|
||||
if (!this->GetIsInTryCompile()) {
|
||||
@@ -2771,6 +2772,15 @@ void cmake::StopDebuggerIfNeeded(int exitCode)
|
||||
|
||||
#endif
|
||||
|
||||
void cmake::InitializeFileAPI()
|
||||
{
|
||||
#ifndef CMAKE_BOOTSTRAP
|
||||
if (!this->FileAPI) {
|
||||
this->FileAPI = cm::make_unique<cmFileAPI>(this);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// handle a command line invocation
|
||||
int cmake::Run(const std::vector<std::string>& args, bool noconfigure)
|
||||
{
|
||||
|
||||
@@ -646,6 +646,7 @@ public:
|
||||
#if !defined(CMAKE_BOOTSTRAP)
|
||||
cmFileAPI* GetFileAPI() const { return this->FileAPI.get(); }
|
||||
#endif
|
||||
void InitializeFileAPI();
|
||||
|
||||
cmState* GetState() const { return this->State.get(); }
|
||||
void SetCurrentSnapshot(cmStateSnapshot const& snapshot)
|
||||
|
||||
8
Tests/RunCMake/FileAPI/InitialCache-check.cmake
Normal file
8
Tests/RunCMake/FileAPI/InitialCache-check.cmake
Normal file
@@ -0,0 +1,8 @@
|
||||
set(expect
|
||||
reply
|
||||
reply/codemodel-v2-[0-9a-f]+.json
|
||||
.*reply/index-[0-9.T-]+.json.*
|
||||
)
|
||||
|
||||
# Only need to check for existence. Other tests check the reply contents.
|
||||
check_api("^${expect}$")
|
||||
5
Tests/RunCMake/FileAPI/InitialCache-script.cmake
Normal file
5
Tests/RunCMake/FileAPI/InitialCache-script.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
cmake_file_api(
|
||||
QUERY
|
||||
API_VERSION 1
|
||||
CODEMODEL 2
|
||||
)
|
||||
0
Tests/RunCMake/FileAPI/InitialCache.cmake
Normal file
0
Tests/RunCMake/FileAPI/InitialCache.cmake
Normal file
@@ -52,6 +52,7 @@ run_cmake(ClientStateless)
|
||||
run_cmake(MixedStateless)
|
||||
run_cmake(DuplicateStateless)
|
||||
run_cmake(ClientStateful)
|
||||
run_cmake_with_options(InitialCache -C ${RunCMake_SOURCE_DIR}/InitialCache-script.cmake)
|
||||
run_cmake(ProjectQueryGood)
|
||||
run_cmake(ProjectQueryBad)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user