mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-31 02:39:48 -06:00
Merge topic 'test-mfc-explicit' into release-3.23
9d621ceba1 Tests: Run MFC test only when explicitly enabled
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !6943
This commit is contained in:
@@ -5,5 +5,6 @@ set(CMake_TEST_FindOpenMP_C "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP_CXX "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP_Fortran "OFF" CACHE BOOL "")
|
||||
set(CMake_TEST_Java OFF CACHE BOOL "")
|
||||
set(CMake_TEST_MFC "ON" CACHE BOOL "")
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/configure_external_test.cmake")
|
||||
|
||||
@@ -8,5 +8,6 @@ set(CMake_TEST_FindOpenMP_CXX "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_FindOpenMP_Fortran "OFF" CACHE BOOL "")
|
||||
set(CMake_TEST_IPO_WORKS_C "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_IPO_WORKS_CXX "ON" CACHE BOOL "")
|
||||
set(CMake_TEST_MFC "ON" CACHE BOOL "")
|
||||
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/configure_windows_common.cmake")
|
||||
|
||||
@@ -2107,109 +2107,7 @@ if(BUILD_TESTING)
|
||||
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/MakeClean")
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED CTEST_RUN_MFC)
|
||||
set(CTEST_RUN_MFC OFF)
|
||||
|
||||
if(MSVC)
|
||||
set(CTEST_RUN_MFC ON)
|
||||
|
||||
# Look for evidence that this is a VCExpress build. If so, avoid
|
||||
# the MFC test by default.
|
||||
string(TOLOWER "${CMAKE_MAKE_PROGRAM}" mkprog)
|
||||
if(mkprog MATCHES "vcexpress")
|
||||
message(STATUS
|
||||
"CMAKE_MAKE_PROGRAM indicates vcexpress, avoiding MFC test")
|
||||
set(CTEST_RUN_MFC OFF)
|
||||
endif()
|
||||
|
||||
# Since MSBuild might also be the "makeprogram" for a VCExpress
|
||||
# build tree, use one more heuristic, too. The string representing
|
||||
# the .vcproj file type contains "VCExpress" on machines where an
|
||||
# express edition of VS was installed last:
|
||||
if(CTEST_RUN_MFC)
|
||||
execute_process(COMMAND cmd /c assoc .vcproj
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
OUTPUT_VARIABLE ov)
|
||||
if(ov MATCHES "VCExpress")
|
||||
message(STATUS
|
||||
".vcproj file association indicates VCExpress, avoiding MFC test")
|
||||
set(CTEST_RUN_MFC OFF)
|
||||
elseif( NOT ov )
|
||||
message(STATUS
|
||||
".vcproj has no file association, avoiding MFC test")
|
||||
set(CTEST_RUN_MFC OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CTEST_RUN_MFC)
|
||||
# For the Watcom WMake generator, avoid the MFC test by default.
|
||||
if("${CMAKE_GENERATOR}" MATCHES "WMake")
|
||||
message(STATUS
|
||||
"using the Watcom WMake generator, avoiding MFC test")
|
||||
set(CTEST_RUN_MFC OFF)
|
||||
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "IntelLLVM")
|
||||
# clang-cl cannot deal with implicit dependencies in UTF16 files
|
||||
# (see #18311). IntelLLVM inherits this behavior from Clang.
|
||||
# TODO: maybe clang should also skip the MFC test
|
||||
message(STATUS
|
||||
"using generator other than Visual Studio with clang-cl, avoiding MFC test")
|
||||
set(CTEST_RUN_MFC OFF)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Last resort, after quick checks are done. Do a try_compile, and avoid
|
||||
# the MFC test if the simplest possible MFC app cannot be compiled.
|
||||
if(CTEST_RUN_MFC AND NOT DEFINED HAVE_MFC)
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/MFC/try_compile/CMakeLists.txt
|
||||
${CMAKE_CURRENT_BINARY_DIR}/MFC/try_compile/CMakeLists.txt
|
||||
COPYONLY
|
||||
)
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/MFC/mfc1/stdafx.cpp
|
||||
${CMAKE_CURRENT_BINARY_DIR}/MFC/try_compile/stdafx.cpp
|
||||
COPYONLY
|
||||
)
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/MFC/mfc1/stdafx.h
|
||||
${CMAKE_CURRENT_BINARY_DIR}/MFC/try_compile/stdafx.h
|
||||
COPYONLY
|
||||
)
|
||||
|
||||
message(STATUS "Looking for MFC")
|
||||
|
||||
try_compile(HAVE_MFC
|
||||
${CMAKE_CURRENT_BINARY_DIR}/MFC/try_compile/build
|
||||
${CMAKE_CURRENT_BINARY_DIR}/MFC/try_compile
|
||||
try_compile_mfc
|
||||
OUTPUT_VARIABLE HAVE_MFC_OUTPUT)
|
||||
|
||||
if(HAVE_MFC)
|
||||
message(STATUS "Looking for MFC - found")
|
||||
set(HAVE_MFC 1 CACHE INTERNAL "Have MFC")
|
||||
file(APPEND
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Determining if MFC exists passed with the following output:\n"
|
||||
"${HAVE_MFC_OUTPUT}\n\n")
|
||||
else()
|
||||
message(STATUS "Looking for MFC - not found")
|
||||
set(HAVE_MFC "" CACHE INTERNAL "Have MFC")
|
||||
file(APPEND
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Determining if MFC exists failed with the following output:\n"
|
||||
"${HAVE_MFC_OUTPUT}\n\n")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CTEST_RUN_MFC AND NOT HAVE_MFC)
|
||||
message(STATUS
|
||||
"cannot compile simplest ever MFC app, avoiding MFC test")
|
||||
set(CTEST_RUN_MFC OFF)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CTEST_RUN_MFC)
|
||||
if(CMake_TEST_MFC)
|
||||
add_test(MFC ${CMAKE_CTEST_COMMAND}
|
||||
--build-and-test
|
||||
"${CMake_SOURCE_DIR}/Tests/MFC"
|
||||
|
||||
@@ -29,9 +29,6 @@ QCOLLECTIONGENERATOR_EXECUTABLE:PATH=C:/qt-i386/bin/qhelpgenerator.exe
|
||||
# No bootstrap with MSVC tools.
|
||||
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
||||
|
||||
# No MFC in base image.
|
||||
CTEST_RUN_MFC:BOOL=OFF
|
||||
|
||||
# No Fortran compiler.
|
||||
CMAKE_Fortran_COMPILER:FILEPATH=FALSE
|
||||
|
||||
|
||||
@@ -29,9 +29,6 @@ QCOLLECTIONGENERATOR_EXECUTABLE:PATH=C:/qt-x86_64/bin/qhelpgenerator.exe
|
||||
# No bootstrap with MSVC tools.
|
||||
CMAKE_SKIP_BOOTSTRAP_TEST:STRING=TRUE
|
||||
|
||||
# No MFC in base image.
|
||||
CTEST_RUN_MFC:BOOL=OFF
|
||||
|
||||
# No Fortran compiler.
|
||||
CMAKE_Fortran_COMPILER:FILEPATH=FALSE
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ cd \cmake\src\cmake-ninja && ^
|
||||
@echo CMake_TEST_IPO_WORKS_C:BOOL=ON
|
||||
@echo CMake_TEST_IPO_WORKS_CXX:BOOL=ON
|
||||
@echo CMake_TEST_NO_NETWORK:BOOL=ON
|
||||
@echo CTEST_RUN_MFC:BOOL=OFF
|
||||
) && ^
|
||||
cmake ..\cmake -DCMake_TEST_HOST_CMAKE=1 -G "Ninja" && ^
|
||||
ninja && ^
|
||||
|
||||
@@ -12,7 +12,6 @@ cd \cmake\src\cmake-nmake && ^
|
||||
@echo CMake_TEST_IPO_WORKS_C:BOOL=ON
|
||||
@echo CMake_TEST_IPO_WORKS_CXX:BOOL=ON
|
||||
@echo CMake_TEST_NO_NETWORK:BOOL=ON
|
||||
@echo CTEST_RUN_MFC:BOOL=OFF
|
||||
) && ^
|
||||
cmake ..\cmake -DCMake_TEST_HOST_CMAKE=1 -G "NMake Makefiles" && ^
|
||||
nmake && ^
|
||||
|
||||
Reference in New Issue
Block a user