1# cmake/modules/language_support.cmake 2# 3# Temporary additional general language support is contained within this 4# file. 5 6# This additional function definition is needed to provide a workaround for 7# CMake bug 9220. 8 9# On debian testing (cmake 2.6.2), I get return code zero when calling 10# cmake the first time, but cmake crashes when running a second time 11# as follows: 12# 13# -- The Fortran compiler identification is unknown 14# CMake Error at /usr/share/cmake-2.6/Modules/CMakeFortranInformation.cmake:7 (GET_FILENAME_COMPONENT): 15# get_filename_component called with incorrect number of arguments 16# Call Stack (most recent call first): 17# CMakeLists.txt:3 (enable_language) 18# 19# My workaround is to invoke cmake twice. If both return codes are zero, 20# it is safe to invoke ENABLE_LANGUAGE(Fortran OPTIONAL) 21 22function(workaround_9220 language language_works) 23 #message("DEBUG: language = ${language}") 24 set(text 25 "project(test NONE) 26 cmake_minimum_required(VERSION 2.8.0) 27 set (CMAKE_Fortran_FLAGS \"${CMAKE_Fortran_FLAGS}\") 28 set (CMAKE_EXE_LINKER_FLAGS \"${CMAKE_EXE_LINKER_FLAGS}\") 29 enable_language(${language} OPTIONAL) 30 ") 31 file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/language_tests/${language}) 32 file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language}) 33 file(WRITE ${CMAKE_BINARY_DIR}/language_tests/${language}/CMakeLists.txt 34 ${text}) 35 execute_process( 36 COMMAND ${CMAKE_COMMAND} . 37 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language} 38 RESULT_VARIABLE return_code 39 OUTPUT_QUIET 40 ERROR_QUIET 41 ) 42 43 if(return_code EQUAL 0) 44 # Second run 45 execute_process ( 46 COMMAND ${CMAKE_COMMAND} . 47 WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language} 48 RESULT_VARIABLE return_code 49 OUTPUT_QUIET 50 ERROR_QUIET 51 ) 52 if(return_code EQUAL 0) 53 set(${language_works} ON PARENT_SCOPE) 54 else(return_code EQUAL 0) 55 set(${language_works} OFF PARENT_SCOPE) 56 endif(return_code EQUAL 0) 57 else(return_code EQUAL 0) 58 set(${language_works} OFF PARENT_SCOPE) 59 endif(return_code EQUAL 0) 60endfunction(workaround_9220) 61 62# Temporary tests of the above function. 63#workaround_9220(CXX CXX_language_works) 64#message("CXX_language_works = ${CXX_language_works}") 65#workaround_9220(CXXp CXXp_language_works) 66#message("CXXp_language_works = ${CXXp_language_works}") 67