diff options
author | Raphael Kubo da Costa <rakuco@FreeBSD.org> | 2015-09-16 14:56:07 +0000 |
---|---|---|
committer | Raphael Kubo da Costa <rakuco@FreeBSD.org> | 2015-09-16 14:56:07 +0000 |
commit | ff65e01c1b861b3896433a79ade3a6478b896136 (patch) | |
tree | c844669d680e138d7b21ec685efe4e5fdec60ac5 /devel | |
parent | b654068d0e0c923c77534f75da363835c37d050e (diff) | |
download | ports-ff65e01c1b861b3896433a79ade3a6478b896136.tar.gz ports-ff65e01c1b861b3896433a79ade3a6478b896136.zip |
Notes
Diffstat (limited to 'devel')
-rw-r--r-- | devel/cmake/files/patch-git_ffa6f057 | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/devel/cmake/files/patch-git_ffa6f057 b/devel/cmake/files/patch-git_ffa6f057 new file mode 100644 index 000000000000..5eeae63483cc --- /dev/null +++ b/devel/cmake/files/patch-git_ffa6f057 @@ -0,0 +1,82 @@ +commit ffa6f057b4ae07c9dc7b9e1d12ecc0a2e19333a1 +Author: Raphael Kubo da Costa <rakuco@FreeBSD.org> +Date: Tue Sep 15 16:31:12 2015 +0200 + + Avoid using C11 to build CMake if _Thread_local support is broken + + Support for C11's _Thread_local was introduced in GCC in the 4.9 series, + even though we make the C11 compiler flags available in CMake with GCC + >= 4.6. + + FreeBSD's runetype.h uses _Thread_local, which causes CMake's own build + to fail when using GCC < 4.9 and -std=gnu11: + + /usr/include/runetype.h:92:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const' + extern _Thread_local const _RuneLocale *_ThreadRuneLocale; + + Add a test for _Thread_local support and only build CMake itself with + C11 support if it works. + + Bug: http://www.cmake.org/Bug/view.php?id=15741 + +--- CMakeLists.txt ++++ CMakeLists.txt +@@ -38,7 +38,12 @@ endif() + + # Use most-recent available language dialects with GNU and Clang + if(NOT DEFINED CMAKE_C_STANDARD AND NOT CMake_NO_C_STANDARD) +- set(CMAKE_C_STANDARD 11) ++ include(${CMake_SOURCE_DIR}/Source/Checks/cm_c11_thread_local.cmake) ++ if(NOT CMake_C11_THREAD_LOCAL_BROKEN) ++ set(CMAKE_C_STANDARD 11) ++ else() ++ set(CMAKE_C_STANDARD 99) ++ endif() + endif() + if(NOT DEFINED CMAKE_CXX_STANDARD AND NOT CMake_NO_CXX_STANDARD) + include(${CMake_SOURCE_DIR}/Source/Checks/cm_cxx14_cstdio.cmake) +new file mode 100644 +index 0000000..ab780f2 +--- /dev/null ++++ Source/Checks/cm_c11_thread_local.c +@@ -0,0 +1,2 @@ ++_Thread_local int i = 42; ++int main(void) { return 0; } +new file mode 100644 +index 0000000..6b8d10b +--- /dev/null ++++ Source/Checks/cm_c11_thread_local.cmake +@@ -0,0 +1,33 @@ ++set(CMake_C11_THREAD_LOCAL_BROKEN 0) ++if(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND CMAKE_C11_STANDARD_COMPILE_OPTION) ++ if(NOT DEFINED CMake_C11_THREAD_LOCAL_WORKS) ++ message(STATUS "Checking if compiler supports C11 _Thread_local") ++ try_compile(CMake_C11_THREAD_LOCAL_WORKS ++ ${CMAKE_CURRENT_BINARY_DIR} ++ ${CMAKE_CURRENT_LIST_DIR}/cm_c11_thread_local.c ++ CMAKE_FLAGS -DCMAKE_C_STANDARD=11 ++ OUTPUT_VARIABLE OUTPUT ++ ) ++ if(CMake_C11_THREAD_LOCAL_WORKS AND "${OUTPUT}" MATCHES "error: expected '=', ',', ';', 'asm' or '__attribute__' before 'int'") ++ set_property(CACHE CMake_C11_THREAD_LOCAL_WORKS PROPERTY VALUE 0) ++ endif() ++ if(CMake_C11_THREAD_LOCAL_WORKS) ++ message(STATUS "Checking if compiler supports C11 _Thread_local - yes") ++ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log ++ "Determining if compiler supports C11 _Thread_local passed with the following output:\n" ++ "${OUTPUT}\n" ++ "\n" ++ ) ++ else() ++ message(STATUS "Checking if compiler supports C11 _Thread_local - no") ++ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log ++ "Determining if compiler supports C11 _Thread_local failed with the following output:\n" ++ "${OUTPUT}\n" ++ "\n" ++ ) ++ endif() ++ endif() ++ if(NOT CMake_C11_THREAD_LOCAL_WORKS) ++ set(CMake_C11_THREAD_LOCAL_BROKEN 1) ++ endif() ++endif() |