12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # cmake/modules/language_support.cmake
- #
- # Temporary additional general language support is contained within this
- # file.
- # This additional function definition is needed to provide a workaround for
- # CMake bug 9220.
- # On debian testing (cmake 2.6.2), I get return code zero when calling
- # cmake the first time, but cmake crashes when running a second time
- # as follows:
- #
- # -- The Fortran compiler identification is unknown
- # CMake Error at /usr/share/cmake-2.6/Modules/CMakeFortranInformation.cmake:7 (GET_FILENAME_COMPONENT):
- # get_filename_component called with incorrect number of arguments
- # Call Stack (most recent call first):
- # CMakeLists.txt:3 (enable_language)
- #
- # My workaround is to invoke cmake twice. If both return codes are zero,
- # it is safe to invoke ENABLE_LANGUAGE(Fortran OPTIONAL)
- function(workaround_9220 language language_works)
- #message("DEBUG: language = ${language}")
- set(text
- "project(test NONE)
- cmake_minimum_required(VERSION 2.8.0)
- set (CMAKE_Fortran_FLAGS \"${CMAKE_Fortran_FLAGS}\")
- set (CMAKE_EXE_LINKER_FLAGS \"${CMAKE_EXE_LINKER_FLAGS}\")
- enable_language(${language})
- ")
- file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/language_tests/${language})
- file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language})
- file(WRITE ${CMAKE_BINARY_DIR}/language_tests/${language}/CMakeLists.txt
- ${text})
- execute_process(
- COMMAND ${CMAKE_COMMAND} . -G "${CMAKE_GENERATOR}"
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language}
- RESULT_VARIABLE return_code
- OUTPUT_QUIET
- ERROR_QUIET
- )
- if(return_code EQUAL 0)
- # Second run
- execute_process (
- COMMAND ${CMAKE_COMMAND} . -G "${CMAKE_GENERATOR}"
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language}
- RESULT_VARIABLE return_code
- OUTPUT_QUIET
- ERROR_QUIET
- )
- if(return_code EQUAL 0)
- set(${language_works} ON PARENT_SCOPE)
- else(return_code EQUAL 0)
- set(${language_works} OFF PARENT_SCOPE)
- endif(return_code EQUAL 0)
- else(return_code EQUAL 0)
- set(${language_works} OFF PARENT_SCOPE)
- endif(return_code EQUAL 0)
- endfunction(workaround_9220)
- # Temporary tests of the above function.
- #workaround_9220(CXX CXX_language_works)
- #message("CXX_language_works = ${CXX_language_works}")
- #workaround_9220(CXXp CXXp_language_works)
- #message("CXXp_language_works = ${CXXp_language_works}")
|