| # 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() |
| set(${language_works} OFF PARENT_SCOPE) |
| endif() |
| else() |
| set(${language_works} OFF PARENT_SCOPE) |
| endif() |
| endfunction() |
| |
| # 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}") |
| |