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 22 function(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} . -G "${CMAKE_GENERATOR}" 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) 60 endfunction(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