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