Hello community, here is the log from the commit of package lyx for openSUSE:Factory checked in at 2015-06-23 12:00:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/lyx (Old) and /work/SRC/openSUSE:Factory/.lyx.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "lyx" Changes: -------- --- /work/SRC/openSUSE:Factory/lyx/lyx.changes 2015-02-11 16:45:28.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.lyx.new/lyx.changes 2015-06-23 12:00:22.000000000 +0200 @@ -1,0 +2,6 @@ +Mon Jun 22 13:08:54 UTC 2015 - corne...@solcon.nl + +- Added Fix-build-with-GNU-libstdc++-C++11-ABI.patch and + Automake-15.patch to fix build with Factory (gcc5). + +------------------------------------------------------------------- New: ---- Automake-15.patch Fix-build-with-GNU-libstdc++-C++11-ABI.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ lyx.spec ++++++ --- /var/tmp/diff_new_pack.riCJlP/_old 2015-06-23 12:00:23.000000000 +0200 +++ /var/tmp/diff_new_pack.riCJlP/_new 2015-06-23 12:00:23.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package lyx # -# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,6 +18,8 @@ Name: lyx #!BuildIgnore: lyx +BuildRequires: autoconf +BuildRequires: automake BuildRequires: bc BuildRequires: boost-devel BuildRequires: enchant-devel @@ -42,6 +44,9 @@ # This was rejected by upstream (http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg133878.html) Patch0: lyx-2.1.2-xdg_open.patch Patch1: lyx-2.1.2.2-remove-date-time.patch +# The following patches are from the 2.1.x branch, fixes build with gcc5 +Patch2: Fix-build-with-GNU-libstdc++-C++11-ABI.patch +Patch3: Automake-15.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build Requires: ImageMagick %if 0%{?suse_version} < 1230 @@ -110,9 +115,11 @@ %setup -q %patch0 -p1 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 %build -#./autogen.sh +./autogen.sh TEXMF=%{_datadir}/texmf %configure \ --without-included-boost \ ++++++ Automake-15.patch ++++++ --- lyx-2.1.3/autogen.sh.orig 2015-02-07 16:25:07.000000000 +0100 +++ lyx-2.1.3/autogen.sh 2015-06-21 23:37:56.961228499 +0200 @@ -16,7 +16,7 @@ } case $automake_version in - *' '1.[8-9]*|*' '1.1[01234]*) + *' '1.[8-9]*|*' '1.1[012345]*) ;; *) ++++++ Fix-build-with-GNU-libstdc++-C++11-ABI.patch ++++++ 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