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