From ac16df7e5e17ebdb25634fb581b6b95fcb0b65fe3213c64886ffd137214d9d06 Mon Sep 17 00:00:00 2001 From: Cor Blom Date: Mon, 22 Jun 2015 13:11:19 +0000 Subject: [PATCH] some fixes to make it build on Factory OBS-URL: https://build.opensuse.org/package/show/Publishing/lyx?expand=0&rev=102 --- Automake-15.patch | 11 ++ Fix-build-with-GNU-libstdc++-C++11-ABI.patch | 195 +++++++++++++++++++ lyx.changes | 8 + lyx.spec | 18 +- 4 files changed, 229 insertions(+), 3 deletions(-) create mode 100644 Automake-15.patch create mode 100644 Fix-build-with-GNU-libstdc++-C++11-ABI.patch diff --git a/Automake-15.patch b/Automake-15.patch new file mode 100644 index 0000000..4649624 --- /dev/null +++ b/Automake-15.patch @@ -0,0 +1,11 @@ +--- 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]*) + ;; + *) + diff --git a/Fix-build-with-GNU-libstdc++-C++11-ABI.patch b/Fix-build-with-GNU-libstdc++-C++11-ABI.patch new file mode 100644 index 0000000..fa42b8e --- /dev/null +++ b/Fix-build-with-GNU-libstdc++-C++11-ABI.patch @@ -0,0 +1,195 @@ +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 <&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], [ ++#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], [ ++#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 ++ 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 ++ 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 +-#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 + #else diff --git a/lyx.changes b/lyx.changes index 571e3c3..877f5aa 100644 --- a/lyx.changes +++ b/lyx.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Mon Jun 22 13:08:54 UTC 2015 - cornelis@solcon.nl + +- Added Fix-build-with-GNU-libstdc++-C++11-ABI.patch and + Automake-15.patch to fix build with Factory (gcc5). +- Disabled system boost for Factory, because the 2.1.x branch does + not build with boost 1.58. + ------------------------------------------------------------------- Fri Feb 6 09:50:49 UTC 2015 - cornelis@solcon.nl diff --git a/lyx.spec b/lyx.spec index b436401..85fd578 100644 --- a/lyx.spec +++ b/lyx.spec @@ -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,8 +18,12 @@ Name: lyx #!BuildIgnore: lyx +BuildRequires: autoconf +BuildRequires: automake BuildRequires: bc +%if %{?suse_version} <1330 BuildRequires: boost-devel +%endif BuildRequires: enchant-devel BuildRequires: fdupes BuildRequires: file-devel @@ -42,6 +46,10 @@ Source3: ftp://ftp.lyx.org/pub/lyx/stable/2.1.x/lyx-%{version}.tar.xz.sig # 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 +# PATCH-FIX-UPSTREAM backported fix for switch to gcc5 (will be part of 2.1.4) +Patch2: Fix-build-with-GNU-libstdc++-C++11-ABI.patch +# PATCH-FIX-UPSTREAM build with automake 15 (fixed in 2.1.4) +Patch3: Automake-15.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build Requires: ImageMagick %if 0%{?suse_version} < 1230 @@ -110,15 +118,19 @@ document under "Help" on the menubar. %setup -q %patch0 -p1 %patch1 -p1 +%patch2 -p1 +%patch3 -p1 %build -#./autogen.sh +./autogen.sh TEXMF=%{_datadir}/texmf %configure \ +%if %{?suse_version} < 1330 --without-included-boost \ +%endif --without-aspell \ --with-hunspell \ - --with-enchant + --with-enchant make %{?_smp_mflags} %install