• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.6.0)
27    enable_language(${language} OPTIONAL)
28  ")
29  file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/language_tests/${language})
30  file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language})
31  file(WRITE ${CMAKE_BINARY_DIR}/language_tests/${language}/CMakeLists.txt
32    ${text})
33  execute_process(
34    COMMAND ${CMAKE_COMMAND} .
35    WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language}
36    RESULT_VARIABLE return_code
37    OUTPUT_QUIET
38    ERROR_QUIET
39    )
40
41  if(return_code EQUAL 0)
42    # Second run
43    execute_process (
44      COMMAND ${CMAKE_COMMAND} .
45      WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/language_tests/${language}
46      RESULT_VARIABLE return_code
47      OUTPUT_QUIET
48      ERROR_QUIET
49      )
50    if(return_code EQUAL 0)
51      set(${language_works} ON PARENT_SCOPE)
52    else(return_code EQUAL 0)
53      set(${language_works} OFF PARENT_SCOPE)
54    endif(return_code EQUAL 0)
55  else(return_code EQUAL 0)
56    set(${language_works} OFF PARENT_SCOPE)
57  endif(return_code EQUAL 0)
58endfunction(workaround_9220)
59
60# Temporary tests of the above function.
61#workaround_9220(CXX CXX_language_works)
62#message("CXX_language_works = ${CXX_language_works}")
63#workaround_9220(CXXp CXXp_language_works)
64#message("CXXp_language_works = ${CXXp_language_works}")
65