From owner-svn-ports-head@freebsd.org Wed Sep 16 14:56:08 2015 Return-Path: Delivered-To: svn-ports-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4D60F9CDB19; Wed, 16 Sep 2015 14:56:08 +0000 (UTC) (envelope-from rakuco@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3DEC219BB; Wed, 16 Sep 2015 14:56:08 +0000 (UTC) (envelope-from rakuco@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id t8GEu8Nd041003; Wed, 16 Sep 2015 14:56:08 GMT (envelope-from rakuco@FreeBSD.org) Received: (from rakuco@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id t8GEu8ba041002; Wed, 16 Sep 2015 14:56:08 GMT (envelope-from rakuco@FreeBSD.org) Message-Id: <201509161456.t8GEu8ba041002@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rakuco set sender to rakuco@FreeBSD.org using -f From: Raphael Kubo da Costa Date: Wed, 16 Sep 2015 14:56:08 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r397068 - head/devel/cmake/files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the ports tree for head List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 16 Sep 2015 14:56:08 -0000 Author: rakuco Date: Wed Sep 16 14:56:07 2015 New Revision: 397068 URL: https://svnweb.freebsd.org/changeset/ports/397068 Log: 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 Added: head/devel/cmake/files/patch-git_ffa6f057 (contents, props changed) Added: head/devel/cmake/files/patch-git_ffa6f057 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/devel/cmake/files/patch-git_ffa6f057 Wed Sep 16 14:56:07 2015 (r397068) @@ -0,0 +1,82 @@ +commit ffa6f057b4ae07c9dc7b9e1d12ecc0a2e19333a1 +Author: Raphael Kubo da Costa +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()