From 0871fab57a745fd08765b5d37f321846f0a6373e Mon Sep 17 00:00:00 2001 From: maier Date: Sat, 1 Feb 2014 21:53:31 +0000 Subject: [PATCH] CMake: Break everything (tm) - Provide a quick sanity check to test the final link interface. git-svn-id: https://svn.dealii.org/trunk@32370 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/CMakeLists.txt | 1 + deal.II/cmake/setup_compiler_flags.cmake | 6 +- deal.II/cmake/setup_finalize.cmake | 2 +- deal.II/cmake/setup_sanity_checks.cmake | 72 ++++++++++++++++++++++++ deal.II/cmake/setup_write_config.cmake | 2 +- deal.II/doc/news/changes.h | 6 ++ 6 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 deal.II/cmake/setup_sanity_checks.cmake diff --git a/deal.II/CMakeLists.txt b/deal.II/CMakeLists.txt index ad2a8cacd4..f43d12740c 100644 --- a/deal.II/CMakeLists.txt +++ b/deal.II/CMakeLists.txt @@ -124,6 +124,7 @@ ENDFOREACH() INCLUDE(setup_custom_targets) INCLUDE(setup_finalize) INCLUDE(setup_write_config) +INCLUDE(setup_sanity_checks) ######################################################################## diff --git a/deal.II/cmake/setup_compiler_flags.cmake b/deal.II/cmake/setup_compiler_flags.cmake index d8eb42447c..0514c8f624 100644 --- a/deal.II/cmake/setup_compiler_flags.cmake +++ b/deal.II/cmake/setup_compiler_flags.cmake @@ -66,11 +66,13 @@ # Check the user provided CXX flags: # -IF( NOT "${DEAL_II_CXX_FLAGS_SAVED}" STREQUAL "${CACHED_DEAL_II_CXX_FLAGS_SAVED}" - OR NOT "${DEAL_II_LINKER_FLAGS_SAVED}" STREQUAL "${CACHED_DEAL_II_LINKER_FLAGS_SAVED}") +IF(NOT "${DEAL_II_CXX_FLAGS_SAVED}" STREQUAL "${CACHED_DEAL_II_CXX_FLAGS_SAVED}" + OR NOT "${DEAL_II_LINKER_FLAGS_SAVED}" STREQUAL "${CACHED_DEAL_II_LINKER_FLAGS_SAVED}") MESSAGE(STATUS "") # Rerun this test if cxx flags changed: UNSET(DEAL_II_HAVE_USABLE_CXX_FLAGS CACHE) +ELSE() + SET(DEAL_II_HAVE_USABLE_CXX_FLAGS TRUE CACHE INTERNAL "") ENDIF() SET(CACHED_DEAL_II_CXX_FLAGS_SAVED "${DEAL_II_CXX_FLAGS_SAVED}" CACHE INTERNAL "" FORCE) SET(CACHED_DEAL_II_LINKER_FLAGS_SAVED "${DEAL_II_LINKER_FLAGS_SAVED}" CACHE INTERNAL "" FORCE) diff --git a/deal.II/cmake/setup_finalize.cmake b/deal.II/cmake/setup_finalize.cmake index e304e24f52..1bf76c12e8 100644 --- a/deal.II/cmake/setup_finalize.cmake +++ b/deal.II/cmake/setup_finalize.cmake @@ -1,7 +1,7 @@ ## --------------------------------------------------------------------- ## $Id$ ## -## Copyright (C) 2012 - 2013 by the deal.II authors +## Copyright (C) 2012 - 2014 by the deal.II authors ## ## This file is part of the deal.II library. ## diff --git a/deal.II/cmake/setup_sanity_checks.cmake b/deal.II/cmake/setup_sanity_checks.cmake new file mode 100644 index 0000000000..f8091b7507 --- /dev/null +++ b/deal.II/cmake/setup_sanity_checks.cmake @@ -0,0 +1,72 @@ +## --------------------------------------------------------------------- +## $Id$ +## +## Copyright (C) 2014 by the deal.II authors +## +## This file is part of the deal.II library. +## +## The deal.II library is free software; you can use it, redistribute +## it, and/or modify it under the terms of the GNU Lesser General +## Public License as published by the Free Software Foundation; either +## version 2.1 of the License, or (at your option) any later version. +## The full text of the license can be found in the file LICENSE at +## the top level of the deal.II distribution. +## +## --------------------------------------------------------------------- + + +######################################################################## +# # +# Sanity checks: # +# # +######################################################################## + +# +# A quick test whether we're able to successfully link with the given +# compiler and linker flags and the given library link interface: +# + +MESSAGE(STATUS "") +MESSAGE(STATUS "Sanity checks.") + +FOREACH(_build ${DEAL_II_BUILD_TYPES}) + + FOREACH(_var + CXX_FLAGS CXX_FLAGS_${_build} + LINKER_FLAGS LINKER_FLAGS_${_build} + LIBRARIES LIBRARIES_${_build} + ) + IF(NOT "${DEAL_II_${_var}}" STREQUAL "${CACHED_DEAL_II_${_var}_${_build}}") + UNSET(DEAL_II_SANITY_CHECK_${_build} CACHE) + SET(CACHED_DEAL_II_${_var}_${_build} "${DEAL_II_${_var}}" CACHE INTERNAL "" FORCE) + ENDIF() + ENDFOREACH() + + RESET_CMAKE_REQUIRED() + ADD_FLAGS(CMAKE_REQUIRED_FLAGS + "${DEAL_II_CXX_FLAGS} ${DEAL_II_CXX_FLAGS_${_build}}" + ) + LIST(APPEND CMAKE_REQUIRED_LIBRARIES + "${DEAL_II_LINKER_FLAGS} ${DEAL_II_CXX_LINKER_${_build}}" + ) + LIST(APPEND CMAKE_REQUIRED_LIBRARIES + ${DEAL_II_LIBRARIES} + ${DEAL_II_LIBRARIES_${_build}} + ) + CHECK_CXX_SOURCE_COMPILES("int main(){ return 0; }" + DEAL_II_SANITY_CHECK_${_build} + ) + RESET_CMAKE_REQUIRED() + + IF(NOT DEAL_II_SANITY_CHECK_${_build}) + UNSET(DEAL_II_SANITY_CHECK_${_build} CACHE) + MESSAGE(FATAL_ERROR " + Configuration error: Cannot compile and link with the current set of + compiler flags, linker flags and libraries! + + Please check the test output given at the end of + CMakeFiles/CMakeError.log and consult detailed.log for the current + configuration.\n\n" + ) + ENDIF() +ENDFOREACH() diff --git a/deal.II/cmake/setup_write_config.cmake b/deal.II/cmake/setup_write_config.cmake index ab23540631..1afca5ff20 100644 --- a/deal.II/cmake/setup_write_config.cmake +++ b/deal.II/cmake/setup_write_config.cmake @@ -1,7 +1,7 @@ ## --------------------------------------------------------------------- ## $Id$ ## -## Copyright (C) 2012 - 2013 by the deal.II authors +## Copyright (C) 2014 by the deal.II authors ## ## This file is part of the deal.II library. ## diff --git a/deal.II/doc/news/changes.h b/deal.II/doc/news/changes.h index a767e1aa5d..c09702f038 100644 --- a/deal.II/doc/news/changes.h +++ b/deal.II/doc/news/changes.h @@ -124,6 +124,12 @@ inconvenience this causes.

Specific improvements

    +
  1. Added: A sanity check for the full link interface at configure time. + Hopefully this prevents some people from compiling the whole library just + to hit a link error. +
    + (Matthias Maier, 2014/02/01) +
  2. Fixed: The build system does no longer record full paths to system libraries but uses the appropriate short names instead.
    -- 2.39.5