From 31ee3cd49d3fb27458cec92602e3240066d97c2c Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 15 Jun 2022 14:30:35 -0400 Subject: try_compile: Fail earlier when bindir is not an absolute path If the bindir is not an absolute path, other errors occur later. Fail early with a clear error in this case. --- Source/cmCoreTryCompile.cxx | 16 ++++++++++++++++ Tests/RunCMake/try_compile/BinDirEmpty-result.txt | 1 + Tests/RunCMake/try_compile/BinDirEmpty-stderr.txt | 4 ++++ Tests/RunCMake/try_compile/BinDirEmpty.cmake | 1 + Tests/RunCMake/try_compile/BinDirRelative-result.txt | 1 + Tests/RunCMake/try_compile/BinDirRelative-stderr.txt | 6 ++++++ Tests/RunCMake/try_compile/BinDirRelative.cmake | 1 + Tests/RunCMake/try_compile/RunCMakeTest.cmake | 2 ++ Tests/RunCMake/try_run/BinDirEmpty-result.txt | 1 + Tests/RunCMake/try_run/BinDirEmpty-stderr.txt | 4 ++++ Tests/RunCMake/try_run/BinDirEmpty.cmake | 1 + Tests/RunCMake/try_run/BinDirRelative-result.txt | 1 + Tests/RunCMake/try_run/BinDirRelative-stderr.txt | 6 ++++++ Tests/RunCMake/try_run/BinDirRelative.cmake | 1 + Tests/RunCMake/try_run/RunCMakeTest.cmake | 2 ++ 15 files changed, 48 insertions(+) create mode 100644 Tests/RunCMake/try_compile/BinDirEmpty-result.txt create mode 100644 Tests/RunCMake/try_compile/BinDirEmpty-stderr.txt create mode 100644 Tests/RunCMake/try_compile/BinDirEmpty.cmake create mode 100644 Tests/RunCMake/try_compile/BinDirRelative-result.txt create mode 100644 Tests/RunCMake/try_compile/BinDirRelative-stderr.txt create mode 100644 Tests/RunCMake/try_compile/BinDirRelative.cmake create mode 100644 Tests/RunCMake/try_run/BinDirEmpty-result.txt create mode 100644 Tests/RunCMake/try_run/BinDirEmpty-stderr.txt create mode 100644 Tests/RunCMake/try_run/BinDirEmpty.cmake create mode 100644 Tests/RunCMake/try_run/BinDirRelative-result.txt create mode 100644 Tests/RunCMake/try_run/BinDirRelative-stderr.txt create mode 100644 Tests/RunCMake/try_run/BinDirRelative.cmake diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index 45afdd1..1a015be 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -391,6 +391,22 @@ int cmCoreTryCompile::TryCompileCode(std::vector const& argv, } } + if (!this->BinaryDirectory.empty()) { + if (!cmSystemTools::FileIsFullPath(this->BinaryDirectory)) { + this->Makefile->IssueMessage( + MessageType::FATAL_ERROR, + cmStrCat(" is not an absolute path:\n '", + this->BinaryDirectory, "'")); + // Do not try to clean up the ill-specified directory. + this->BinaryDirectory.clear(); + return -1; + } + } else { + this->Makefile->IssueMessage(MessageType::FATAL_ERROR, + "No specified."); + return -1; + } + if (didCopyFile && copyFile.empty()) { this->Makefile->IssueMessage(MessageType::FATAL_ERROR, "COPY_FILE must be followed by a file path"); diff --git a/Tests/RunCMake/try_compile/BinDirEmpty-result.txt b/Tests/RunCMake/try_compile/BinDirEmpty-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/try_compile/BinDirEmpty-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/try_compile/BinDirEmpty-stderr.txt b/Tests/RunCMake/try_compile/BinDirEmpty-stderr.txt new file mode 100644 index 0000000..b1f5ae3 --- /dev/null +++ b/Tests/RunCMake/try_compile/BinDirEmpty-stderr.txt @@ -0,0 +1,4 @@ +^CMake Error at BinDirEmpty.cmake:[0-9]+ \(try_compile\): + No specified. +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/try_compile/BinDirEmpty.cmake b/Tests/RunCMake/try_compile/BinDirEmpty.cmake new file mode 100644 index 0000000..7bea43d --- /dev/null +++ b/Tests/RunCMake/try_compile/BinDirEmpty.cmake @@ -0,0 +1 @@ +try_compile(resultVar "" ${CMAKE_CURRENT_SOURCE_DIR}/src.c) diff --git a/Tests/RunCMake/try_compile/BinDirRelative-result.txt b/Tests/RunCMake/try_compile/BinDirRelative-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/try_compile/BinDirRelative-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/try_compile/BinDirRelative-stderr.txt b/Tests/RunCMake/try_compile/BinDirRelative-stderr.txt new file mode 100644 index 0000000..a7b6302 --- /dev/null +++ b/Tests/RunCMake/try_compile/BinDirRelative-stderr.txt @@ -0,0 +1,6 @@ +^CMake Error at BinDirRelative.cmake:[0-9]+ \(try_compile\): + is not an absolute path: + + 'bin_dir_relative' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/try_compile/BinDirRelative.cmake b/Tests/RunCMake/try_compile/BinDirRelative.cmake new file mode 100644 index 0000000..8deda11 --- /dev/null +++ b/Tests/RunCMake/try_compile/BinDirRelative.cmake @@ -0,0 +1 @@ +try_compile(resultVar bin_dir_relative ${CMAKE_CURRENT_SOURCE_DIR}/src.c) diff --git a/Tests/RunCMake/try_compile/RunCMakeTest.cmake b/Tests/RunCMake/try_compile/RunCMakeTest.cmake index eca7bf4..f755f53 100644 --- a/Tests/RunCMake/try_compile/RunCMakeTest.cmake +++ b/Tests/RunCMake/try_compile/RunCMakeTest.cmake @@ -15,6 +15,8 @@ run_cmake(BadSources1) run_cmake(BadSources2) run_cmake(NonSourceCopyFile) run_cmake(NonSourceCompileDefinitions) +run_cmake(BinDirEmpty) +run_cmake(BinDirRelative) run_cmake(EnvConfig) diff --git a/Tests/RunCMake/try_run/BinDirEmpty-result.txt b/Tests/RunCMake/try_run/BinDirEmpty-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/try_run/BinDirEmpty-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/try_run/BinDirEmpty-stderr.txt b/Tests/RunCMake/try_run/BinDirEmpty-stderr.txt new file mode 100644 index 0000000..def1c22 --- /dev/null +++ b/Tests/RunCMake/try_run/BinDirEmpty-stderr.txt @@ -0,0 +1,4 @@ +^CMake Error at BinDirEmpty.cmake:[0-9]+ \(try_run\): + No specified. +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/try_run/BinDirEmpty.cmake b/Tests/RunCMake/try_run/BinDirEmpty.cmake new file mode 100644 index 0000000..d4b7ee3 --- /dev/null +++ b/Tests/RunCMake/try_run/BinDirEmpty.cmake @@ -0,0 +1 @@ +try_run(runResultVar compileResultVar "" ${CMAKE_CURRENT_SOURCE_DIR}/src.c) diff --git a/Tests/RunCMake/try_run/BinDirRelative-result.txt b/Tests/RunCMake/try_run/BinDirRelative-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/try_run/BinDirRelative-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/try_run/BinDirRelative-stderr.txt b/Tests/RunCMake/try_run/BinDirRelative-stderr.txt new file mode 100644 index 0000000..54d4e86 --- /dev/null +++ b/Tests/RunCMake/try_run/BinDirRelative-stderr.txt @@ -0,0 +1,6 @@ +^CMake Error at BinDirRelative.cmake:[0-9]+ \(try_run\): + is not an absolute path: + + 'bin_dir_relative' +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/try_run/BinDirRelative.cmake b/Tests/RunCMake/try_run/BinDirRelative.cmake new file mode 100644 index 0000000..a277403 --- /dev/null +++ b/Tests/RunCMake/try_run/BinDirRelative.cmake @@ -0,0 +1 @@ +try_run(runResultVar compileResultVar bin_dir_relative ${CMAKE_CURRENT_SOURCE_DIR}/src.c) diff --git a/Tests/RunCMake/try_run/RunCMakeTest.cmake b/Tests/RunCMake/try_run/RunCMakeTest.cmake index 5fa5b2f..76c85dd 100644 --- a/Tests/RunCMake/try_run/RunCMakeTest.cmake +++ b/Tests/RunCMake/try_run/RunCMakeTest.cmake @@ -1,6 +1,8 @@ include(RunCMake) run_cmake(BadLinkLibraries) +run_cmake(BinDirEmpty) +run_cmake(BinDirRelative) if (CMAKE_SYSTEM_NAME MATCHES "^(Linux|Darwin|Windows)$" AND CMAKE_C_COMPILER_ID MATCHES "^(MSVC|GNU|LCC|Clang|AppleClang)$") -- cgit v0.12