Home | History | Annotate | Download | only in cmake
      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} . -G "${CMAKE_GENERATOR}"
     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 
     68