diff options
author | rakuco <rakuco@FreeBSD.org> | 2015-09-16 22:56:07 +0800 |
---|---|---|
committer | rakuco <rakuco@FreeBSD.org> | 2015-09-16 22:56:07 +0800 |
commit | b434bc9cd40bc52494342de603c4b454b909a939 (patch) | |
tree | c844669d680e138d7b21ec685efe4e5fdec60ac5 /devel | |
parent | d751be9c22b709f09a9c1316d59fc759ccf1fec7 (diff) | |
download | freebsd-ports-gnome-b434bc9cd40bc52494342de603c4b454b909a939.tar.gz freebsd-ports-gnome-b434bc9cd40bc52494342de603c4b454b909a939.tar.zst freebsd-ports-gnome-b434bc9cd40bc52494342de603c4b454b909a939.zip |
Add upstream patch to fix the build with GCC 4.6, 4.7 and 4.8.
runetype.h uses _Thread_local, and if we pass -std=c11 or -std=gnu11 to GCC
the header expects it to be supported as part of the language and does not
make it a typedef or something else.
Since GCC only started supporting _Thread_local with the 4.9 series,
building CMake with, say, lang/gcc (which is 4.8) fails:
/usr/include/runetype.h:92:22: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'const'
/usr/include/runetype.h: In function '__getCurrentRuneLocale':
/usr/include/runetype.h:96:6: error: '_ThreadRuneLocale' undeclared (first use in this function)
/usr/include/runetype.h:96:6: note: each undeclared identifier is reported only once for each function it appears in
The upstream patch adds a test for _Thread_local and uses C99 instead of C11
if it fails.
PR: 203066
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() |