From 0e598b7bcd2da655b23e02bef4e56e620c6286c5 Mon Sep 17 00:00:00 2001 From: David Cole Date: Fri, 16 Dec 2011 13:49:27 -0500 Subject: [PATCH] Tests: Only really run MFC test if we can build MFC apps (#11213) Avoid problems on "undetected" VS Express build environments. --- Tests/CMakeLists.txt | 50 ++++++++++++++++++++++++++++ Tests/MFC/try_compile/CMakeLists.txt | 15 +++++++++ 2 files changed, 65 insertions(+) create mode 100644 Tests/MFC/try_compile/CMakeLists.txt diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 1851f7a1b..939bd2159 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1244,6 +1244,56 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ 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() diff --git a/Tests/MFC/try_compile/CMakeLists.txt b/Tests/MFC/try_compile/CMakeLists.txt new file mode 100644 index 000000000..8e5d746f6 --- /dev/null +++ b/Tests/MFC/try_compile/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 2.8) +project(try_compile_mfc) + +set(files + stdafx.cpp + stdafx.h +) + +set(CMAKE_MFC_FLAG "2") + +# VS generators add this automatically based on the CMAKE_MFC_FLAG value, +# but generators matching "Make" require: +add_definitions(-D_AFXDLL) + +add_executable(simplest_possible_mfc_exe WIN32 ${files})