|  | # 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} OPTIONAL) | 
|  | ") | 
|  | 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} . | 
|  | 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}") | 
|  |  |