aboutsummaryrefslogtreecommitdiffstats
path: root/devel
diff options
context:
space:
mode:
authorrakuco <rakuco@FreeBSD.org>2015-09-16 22:56:07 +0800
committerrakuco <rakuco@FreeBSD.org>2015-09-16 22:56:07 +0800
commitb434bc9cd40bc52494342de603c4b454b909a939 (patch)
treec844669d680e138d7b21ec685efe4e5fdec60ac5 /devel
parentd751be9c22b709f09a9c1316d59fc759ccf1fec7 (diff)
downloadfreebsd-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_ffa6f05782
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()