mcepl pushed to lyx (epel7). "backport gcc5 fix (#1209353)"
notifications at fedoraproject.org
notifications at fedoraproject.org
Tue May 19 21:19:35 UTC 2015
From a92324312064ae7d6f5c2846b53762eee9c0cab4 Mon Sep 17 00:00:00 2001
From: Rex Dieter <rdieter at math.unl.edu>
Date: Mon, 18 May 2015 10:45:56 -0500
Subject: backport gcc5 fix (#1209353)
diff --git a/0153-Fix-build-with-GNU-libstdc-C-11-ABI.patch b/0153-Fix-build-with-GNU-libstdc-C-11-ABI.patch
new file mode 100644
index 0000000..b7390d5
--- /dev/null
+++ b/0153-Fix-build-with-GNU-libstdc-C-11-ABI.patch
@@ -0,0 +1,222 @@
+From be41e2d16f551103a9b7c5d22cb774eb5bfcb0d9 Mon Sep 17 00:00:00 2001
+From: Georg Baum <baum at lyx.org>
+Date: Tue, 12 May 2015 21:23:06 +0200
+Subject: [PATCH 153/163] Fix build with GNU libstdc++ C++11 ABI
+
+The GNU libstdc++ that ships witch gcc 5 can be used with the same ABI as
+older versions, or with a new ABI which is conformant to the C++11 standard.
+LyX did not build if the latter was used:
+https://kojipkgs.fedoraproject.org//work/tasks/1267/9651267/build.log
+
+This is now fixed by detecting the ABI version and disabling the wrong forward
+declarations. At the same time, STD_STRING_USES_COW is switched off for the
+C++11 ABI version, because the std::basic_string implementation is now C++11
+conformant. Since the GNU libstdc++ can also used by other compilers such as
+clang, we must not test for the compiler version.
+---
+ config/lyxinclude.m4 | 80 ++++++++++++++++++++++-----------
+ development/cmake/ConfigureChecks.cmake | 46 +++++++++++++++++++
+ development/cmake/config.h.cmake | 3 ++
+ src/support/strfwd.h | 14 ++----
+ status.21x | 3 ++
+ 5 files changed, 110 insertions(+), 36 deletions(-)
+
+diff --git a/config/lyxinclude.m4 b/config/lyxinclude.m4
+index 61ea48d..a0094c1 100644
+--- a/config/lyxinclude.m4
++++ b/config/lyxinclude.m4
+@@ -120,37 +120,65 @@ done
+ ])dnl
+
+
+-AC_DEFUN([LYX_PROG_CXX_WORKS],
+-[rm -f conftest.C
+-cat >conftest.C <<EOF
+-class foo {
+- // we require the mutable keyword
+- mutable int bar;
+- };
+- // we require namespace support
+- namespace baz {
+- int bar;
+- }
+- int main() {
+- return(0);
+- }
+-EOF
+-$CXX -c $CXXFLAGS $CPPFLAGS conftest.C >&5 || CXX=
+-rm -f conftest.C conftest.o conftest.obj || true
++dnl Usage: LYX_PROG_CLANG: set lyx_cv_prog_clang to yes if the compiler is clang.
++AC_DEFUN([LYX_PROG_CLANG],
++[AC_CACHE_CHECK([whether the compiler is clang],
++ [lyx_cv_prog_clang],
++[AC_TRY_COMPILE([], [
++#ifndef __clang__
++ this is not clang
++#endif
++],
++[lyx_cv_prog_clang=yes ; CLANG=yes], [lyx_cv_prog_clang=no ; CLANG=no])])
+ ])
+
+
+-AC_DEFUN([LYX_PROG_CXX],
+-[AC_MSG_CHECKING([for a good enough C++ compiler])
+-LYX_SEARCH_PROG(CXX, $CXX $CCC g++ gcc c++ CC cxx xlC cc++, [LYX_PROG_CXX_WORKS])
++dnl Usage: LYX_LIB_STDCXX: set lyx_cv_lib_stdcxx to yes if the STL library is libstdc++.
++AC_DEFUN([LYX_LIB_STDCXX],
++[AC_CACHE_CHECK([whether STL is libstdc++],
++ [lyx_cv_lib_stdcxx],
++[AC_TRY_COMPILE([#include<vector>], [
++#if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
++ this is not libstdc++
++#endif
++],
++[lyx_cv_lib_stdcxx=yes], [lyx_cv_lib_stdcxx=no])])
++])
+
+-if test -z "$CXX" ; then
+- AC_MSG_ERROR([Unable to find a good enough C++ compiler])
+-fi
+-AC_MSG_RESULT($CXX)
+
+-AC_PROG_CXX
+-AC_PROG_CXXCPP
++dnl Usage: LYX_LIB_STDCXX_CXX11_ABI: set lyx_cv_lib_stdcxx_cxx11_abi to yes
++dnl if the STL library is GNU libstdc++ and the C++11 ABI is used.
++AC_DEFUN([LYX_LIB_STDCXX_CXX11_ABI],
++[AC_CACHE_CHECK([whether STL is libstdc++ using the C++11 ABI],
++ [lyx_cv_lib_stdcxx_cxx11_abi],
++[AC_TRY_COMPILE([#include<vector>], [
++#if ! defined(_GLIBCXX_USE_CXX11_ABI) || ! _GLIBCXX_USE_CXX11_ABI
++ this is not libstdc++ using the C++11 ABI
++#endif
++],
++[lyx_cv_lib_stdcxx_cxx11_abi=yes], [lyx_cv_lib_stdcxx_cxx11_abi=no])])
++])
++
++
++AC_DEFUN([LYX_PROG_CXX],
++[AC_REQUIRE([AC_PROG_CXX])
++AC_REQUIRE([AC_PROG_CXXCPP])
++
++AC_LANG_PUSH(C++)
++LYX_PROG_CLANG
++LYX_LIB_STDCXX
++LYX_LIB_STDCXX_CXX11_ABI
++AC_LANG_POP(C++)
++
++if test $lyx_cv_lib_stdcxx = "yes" ; then
++ if test $lyx_cv_lib_stdcxx_cxx11_abi = "yes" ; then
++ AC_DEFINE(USE_GLIBCXX_CXX11_ABI, 1, [use GNU libstdc++ with C++11 ABI])
++ fi
++else
++ if test $lyx_cv_prog_clang = "yes" ; then
++ AC_DEFINE(USE_LLVM_LIBCPP, 1, [use libc++ provided by llvm instead of GNU libstdc++])
++ fi
++fi
+
+ ### We might want to get or shut warnings.
+ AC_ARG_ENABLE(warnings,
+diff --git a/development/cmake/ConfigureChecks.cmake b/development/cmake/ConfigureChecks.cmake
+index 71291a5..a738160 100644
+--- a/development/cmake/ConfigureChecks.cmake
++++ b/development/cmake/ConfigureChecks.cmake
+@@ -112,3 +112,49 @@ check_cxx_source_compiles(
+ "
+ SIZEOF_WCHAR_T_IS_4)
+
++# Check whether STL is libstdc++
++check_cxx_source_compiles(
++ "
++ #include <vector>
++ int main() {
++ #if ! defined(__GLIBCXX__) && ! defined(__GLIBCPP__)
++ this is not libstdc++
++ #endif
++ return(0);
++ }
++ "
++lyx_cv_lib_stdcxx)
++
++# Check whether STL is libstdc++ with C++11 ABI
++check_cxx_source_compiles(
++ "
++ #include <vector>
++ int main() {
++ #if ! defined(_GLIBCXX_USE_CXX11_ABI) || ! _GLIBCXX_USE_CXX11_ABI
++ this is not libstdc++ using the C++11 ABI
++ #endif
++ return(0);
++ }
++ "
++USE_GLIBCXX_CXX11_ABI)
++
++check_cxx_source_compiles(
++ "
++ #ifndef __clang__
++ this is not clang
++ #endif
++ int main() {
++ return(0);
++ }
++ "
++lyx_cv_prog_clang)
++
++set(USE_LLVM_LIBCPP)
++set(USE_GLIBCXX_CXX11_ABI)
++if(NOT lyx_cv_lib_stdcxx)
++ if(lyx_cv_prog_clang)
++ # use libc++ provided by llvm instead of GNU libstdc++
++ set(USE_LLVM_LIBCPP 1)
++ endif()
++endif()
++
+diff --git a/development/cmake/config.h.cmake b/development/cmake/config.h.cmake
+index 7bbe09e..a392b51 100644
+--- a/development/cmake/config.h.cmake
++++ b/development/cmake/config.h.cmake
+@@ -57,6 +57,9 @@
+ #cmakedefine LYX_USE_TR1 1
+ #cmakedefine LYX_USE_TR1_REGEX 1
+
++// use GNU libstdc++ with C++11 ABI
++#cmakedefine USE_GLIBCXX_CXX11_ABI 1
++
+ #cmakedefine Z_PREFIX 1
+
+ #cmakedefine ASPELL_FOUND 1
+diff --git a/src/support/strfwd.h b/src/support/strfwd.h
+index de8588c..f39426e 100644
+--- a/src/support/strfwd.h
++++ b/src/support/strfwd.h
+@@ -13,14 +13,6 @@
+ #ifndef STRFWD_H
+ #define STRFWD_H
+
+-// This includes does nothing but defining _LIBCPP_VERSION
+-// if libc++ is used (rather than libstdc++) - we first
+-// check if we have at least a c++03 standard before
+-// including the file
+-#if (__cplusplus > 19971L)
+-#include <ciso646>
+-#endif
+-
+ #ifdef USE_WCHAR_T
+
+ // Prefer this if possible because GNU libstdc++ has usable
+@@ -36,8 +28,10 @@ namespace lyx { typedef boost::uint32_t char_type; }
+
+ #endif
+
+-// Forward definitions do not work with libc++
+-#ifdef _LIBCPP_VERSION
++// For gcc5 with the new std::string ABI forward declarations would work in
++// principle, but I am not sure whether we want non-standard
++// "namespace __cxx11" in our sources.
++#if defined(USE_LLVM_LIBCPP) || defined(USE_GLIBCXX_CXX11_ABI)
+ #include <string>
+ #else
+
+--
+1.9.3
+
diff --git a/lyx.spec b/lyx.spec
index 365c843..d0337b6 100644
--- a/lyx.spec
+++ b/lyx.spec
@@ -6,7 +6,10 @@ BuildRequires: fontpackages-devel
%define _without_included_boost --without-included-boost
# Do we need to rebuild configuration files?
-%global autotools 0
+#if 0%{?fedora} > 22
+# needed by patch153
+%global autotools 1
+#endif
# Trim changelog to a reasonable size
%global _changelog_trimtime %(date +%s -d "1 year ago")
@@ -14,7 +17,7 @@ BuildRequires: fontpackages-devel
Summary: WYSIWYM (What You See Is What You Mean) document processor
Name: lyx
Version: 2.1.3
-Release: 2%{?dist}
+Release: 3%{?dist}
License: GPLv2+
Url: http://www.lyx.org/
@@ -26,6 +29,8 @@ Source10: lyx.desktop
# font metainfo file
Source20: %{fontname}.metainfo.xml
+## upstream patches
+Patch153: 0153-Fix-build-with-GNU-libstdc-C-11-ABI.patch
## upstreamable patches
@@ -149,6 +154,7 @@ A collection of Math symbol fonts for %{name}.
%setup -q -n %{name}-%{version}
+%patch153 -p1 -b .0153
%patch50 -p1 -b .xdg_open
%if 0%{?autotools}
@@ -214,9 +220,11 @@ install -Dm 0644 -p %{SOURCE20} \
#
# See http://people.freedesktop.org/~hughsient/appdata/#screenshots for more details.
#
+%if 0%{?fedora} > 20
appstream-util replace-screenshots $RPM_BUILD_ROOT%{_datadir}/appdata/lyx.appdata.xml \
https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/lyx/a.png \
https://raw.githubusercontent.com/hughsie/fedora-appstream/master/screenshots-extra/lyx/b.png
+%endif
%find_lang %{name}
@@ -285,6 +293,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null || :
%changelog
+* Mon May 18 2015 Rex Dieter <rdieter at fedoraproject.org> 2.1.3-3
+- backport gcc5 fix (#1209353)
+
* Mon Mar 30 2015 Richard Hughes <rhughes at redhat.com> - 2.1.3-2
- Use better AppData screenshots
--
cgit v0.10.2
http://pkgs.fedoraproject.org/cgit/lyx.git/commit/?h=epel7&id=a92324312064ae7d6f5c2846b53762eee9c0cab4
More information about the scm-commits
mailing list