mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +00:00
Require a C++11 compiler
As discussed on the list. If no C++11 compiler is found configuration stops with an error. There are now unneeded parts of boost, the will be removed in a second commit.
This commit is contained in:
parent
9dd695b17a
commit
273c67d8aa
@ -142,7 +142,6 @@ LYX_OPTION(ENABLE_EXPORT_TESTS "Enable for export tests" OFF ALL)
|
||||
LYX_OPTION(ASAN "Use address sanitizer" OFF ALL)
|
||||
LYX_COMBO(USE_QT "Use Qt version as frontend" QT4 QT5)
|
||||
LYX_OPTION(3RDPARTY_BUILD "Build 3rdparty libs" OFF ALL)
|
||||
LYX_COMBO(ENABLE_CXX11 "Build with options for c++11-mode" AUTO ON OFF)
|
||||
|
||||
# GCC specific
|
||||
LYX_OPTION(PROFILE "Build profile version" OFF GCC)
|
||||
@ -254,24 +253,10 @@ else()
|
||||
endif()
|
||||
|
||||
|
||||
if(LYX_ENABLE_CXX11 MATCHES "AUTO")
|
||||
# Set to some meaningful default
|
||||
find_package(CXX11Compiler)
|
||||
if(NOT CXX11COMPILER_FOUND)
|
||||
set(LYX_ENABLE_CXX11 OFF CACHE TYPE STRING FORCE)
|
||||
else()
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(LYX_ENABLE_CXX11 ON CACHE TYPE STRING FORCE)
|
||||
else()
|
||||
# Not a gnu compiler
|
||||
if(CMAKE_CXX_COMPILER_ID MATCHES "^[cC]lang$")
|
||||
set(LYX_ENABLE_CXX11 ON CACHE TYPE STRING FORCE)
|
||||
else()
|
||||
set(LYX_ENABLE_CXX11 OFF CACHE TYPE STRING FORCE)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
# Set to some meaningful default
|
||||
find_package(CXX11Compiler)
|
||||
if(NOT CXX11COMPILER_FOUND)
|
||||
message(FATAL_ERROR "A C++11 compatible compiler is required.")
|
||||
endif()
|
||||
set(LYX_GCC11_MODE)
|
||||
if(UNIX OR MINGW)
|
||||
@ -285,17 +270,9 @@ if(UNIX OR MINGW)
|
||||
# see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
|
||||
set(LYX_USE_STD_REGEX 0)
|
||||
else()
|
||||
if (LYX_ENABLE_CXX11)
|
||||
set(LYX_USE_STD_REGEX 1)
|
||||
endif()
|
||||
endif()
|
||||
if (LYX_ENABLE_CXX11)
|
||||
find_package(CXX11Compiler)
|
||||
if(NOT CXX11COMPILER_FOUND)
|
||||
message(FATAL_ERROR "A C++11 compatible compiler is required.")
|
||||
endif()
|
||||
set(LYX_GCC11_MODE "${CXX11_FLAG}")
|
||||
endif()
|
||||
else()
|
||||
set(LYX_USE_STD_REGEX 0)
|
||||
# if(MSVC10)
|
||||
|
@ -177,7 +177,6 @@ dnl not plainly added to AM_CPPFLAGS because then the objc compiler (mac)
|
||||
dnl would fail.
|
||||
AC_DEFUN([LYX_CXX_USE_REGEX],
|
||||
[lyx_std_regex=no
|
||||
if test $lyx_use_cxx11 = yes; then
|
||||
save_CPPFLAGS=$CPPFLAGS
|
||||
# we want to pass -std=c++11 to clang/cpp if necessary
|
||||
CPPFLAGS="$AM_CPPFLAGS $1 $CPPFLAGS"
|
||||
@ -200,7 +199,6 @@ AC_DEFUN([LYX_CXX_USE_REGEX],
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT([$lyx_std_regex])
|
||||
fi
|
||||
|
||||
if test $lyx_std_regex = yes ; then
|
||||
lyx_flags="$lyx_flags std-regex"
|
||||
@ -298,10 +296,6 @@ case $enable_optimization in
|
||||
*) lyx_optim=${enable_optimization};;
|
||||
esac
|
||||
|
||||
AC_ARG_ENABLE(cxx11,
|
||||
AC_HELP_STRING([--disable-cxx11],[disable C++11 mode (default: enabled for known good compilers)]),,
|
||||
enable_cxx11=auto;)
|
||||
|
||||
AC_ARG_ENABLE(assertions,
|
||||
AC_HELP_STRING([--enable-assertions],[add runtime sanity checks in the program]),,
|
||||
[AS_CASE([$build_type], [dev*|pre*], [enable_assertions=yes],
|
||||
@ -358,9 +352,6 @@ if test x$GXX = xyes; then
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
dnl enable_cxx11 can be yes/no/auto.
|
||||
dnl By default, it is auto and we enable C++11 when possible
|
||||
if test x$enable_cxx11 != xno ; then
|
||||
case $gxx_version in
|
||||
4.3*|4.4*|4.5*|4.6*)
|
||||
dnl Note that this will define __GXX_EXPERIMENTAL_CXX0X__.
|
||||
@ -379,7 +370,6 @@ if test x$GXX = xyes; then
|
||||
# cxx11_flags is useful when running preprocessor alone
|
||||
# (see detection of regex).
|
||||
AM_CXXFLAGS="$cxx11_flags $AM_CXXFLAGS"
|
||||
fi
|
||||
fi
|
||||
|
||||
LYX_CXX_CXX11
|
||||
@ -388,6 +378,8 @@ if test $lyx_use_cxx11 = yes; then
|
||||
dnl We still use auto_ptr, which is obsoleted. Shut off the warnings.
|
||||
AM_CXXFLAGS="$AM_CXXFLAGS -Wno-deprecated-declarations"
|
||||
fi
|
||||
else
|
||||
AC_ERROR([A C++11 compatible compiler is required])
|
||||
fi
|
||||
LYX_CXX_USE_REGEX([$cxx11_flags])
|
||||
])
|
||||
|
@ -294,10 +294,6 @@ AH_BOTTOM([
|
||||
/************************************************************
|
||||
** You should not need to change anything beyond this point */
|
||||
|
||||
#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||
#define LYX_USE_CXX11
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRERROR
|
||||
#if defined(__cplusplus)
|
||||
extern "C"
|
||||
|
@ -82,14 +82,14 @@ if [%2]==[] (
|
||||
if "%1%" == "devel" (
|
||||
REM Build solution to develop LyX
|
||||
REM you can add the option "-GNinja" for a faster compilation
|
||||
cmake %LYX_SOURCE% -GNinja -G%USED_STUDIO% -DLYX_ENABLE_CXX11=ON -DLYX_ENABLE_EXPORT_TESTS=ON -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=0 -DLYX_RELEASE=0 -DLYX_CONSOLE=FORCE %DEPENDENCIES_DOWNLOAD%
|
||||
cmake %LYX_SOURCE% -GNinja -G%USED_STUDIO% -DLYX_ENABLE_EXPORT_TESTS=ON -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=0 -DLYX_RELEASE=0 -DLYX_CONSOLE=FORCE %DEPENDENCIES_DOWNLOAD%
|
||||
msbuild lyx.sln /p:Configuration=Debug /t:LyX /t:tex2lyx
|
||||
)
|
||||
|
||||
if "%1%" == "install" (
|
||||
REM Build solution to develop LyX
|
||||
REM set -DLYX_MERGE_REBUILD and -DLYX_MERGE_FILES to 1 for a version released with an installer
|
||||
cmake %LYX_SOURCE% -GNinja -G%USED_STUDIO% -DLYX_ENABLE_CXX11=ON -DLYX_MERGE_REBUILD=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=1 -DLYX_RELEASE=1 -DLYX_CONSOLE=OFF %DEPENDENCIES_DOWNLOAD%
|
||||
cmake %LYX_SOURCE% -GNinja -G%USED_STUDIO% -DLYX_MERGE_REBUILD=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=1 -DLYX_RELEASE=1 -DLYX_CONSOLE=OFF %DEPENDENCIES_DOWNLOAD%
|
||||
msbuild lyx.sln /p:Configuration=Release /t:ALL_BUILD
|
||||
msbuild INSTALL.vcxproj /p:Configuration=Release
|
||||
)
|
||||
|
@ -73,7 +73,7 @@ REM start with a new cmake run
|
||||
if "%1%" == "devel" (
|
||||
REM Build solution to develop LyX
|
||||
REM you can add the option "-GNinja" for a faster compilation
|
||||
cmake %LYX_SOURCE% -G"Visual Studio 14 2015 Win64" -DLYX_ENABLE_CXX11=ON -DLYX_USE_QT=QT5 -DLYX_ENABLE_EXPORT_TESTS=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=0 -DLYX_RELEASE=0 -DLYX_CONSOLE=FORCE -DLYX_3RDPARTY_BUILD=1 %DEPENDENCIES_DOWNLOAD%
|
||||
cmake %LYX_SOURCE% -G"Visual Studio 14 2015 Win64" -DLYX_USE_QT=QT5 -DLYX_ENABLE_EXPORT_TESTS=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=0 -DLYX_RELEASE=0 -DLYX_CONSOLE=FORCE -DLYX_3RDPARTY_BUILD=1 %DEPENDENCIES_DOWNLOAD%
|
||||
msbuild src\LyX.vcxproj /p:Configuration=Debug
|
||||
msbuild src\tex2lyx\tex2lyx.vcxproj /p:Configuration=Debug
|
||||
)
|
||||
@ -81,7 +81,7 @@ if "%1%" == "devel" (
|
||||
if "%1%" == "install" (
|
||||
REM Build solution to develop LyX
|
||||
REM set -DLYX_MERGE_REBUILD and -DLYX_MERGE_FILES to 1 for a version released with an installer
|
||||
cmake %LYX_SOURCE% -GNinja -G"Visual Studio 14 2015 Win64" -DLYX_ENABLE_CXX11=ON -DLYX_USE_QT=QT5 -DLYX_MERGE_REBUILD=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=1 -DLYX_RELEASE=1 -DLYX_CONSOLE=OFF %DEPENDENCIES_DOWNLOAD%
|
||||
cmake %LYX_SOURCE% -GNinja -G"Visual Studio 14 2015 Win64" -DLYX_USE_QT=QT5 -DLYX_MERGE_REBUILD=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=1 -DLYX_RELEASE=1 -DLYX_CONSOLE=OFF %DEPENDENCIES_DOWNLOAD%
|
||||
msbuild INSTALL.vcxproj /p:Configuration=Release
|
||||
)
|
||||
|
||||
|
@ -76,7 +76,7 @@ REM start with a new cmake run
|
||||
if "%1%" == "devel" (
|
||||
REM Build solution to develop LyX
|
||||
REM you can add the option "-GNinja" for a faster compilation
|
||||
cmake %LYX_SOURCE% -G"Visual Studio 14 2015" -DLYX_ENABLE_CXX11=ON -DLYX_USE_QT=QT5 -DLYX_ENABLE_EXPORT_TESTS=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=0 -DLYX_RELEASE=0 -DLYX_CONSOLE=FORCE -DLYX_3RDPARTY_BUILD=1 %DEPENDENCIES_DOWNLOAD%
|
||||
cmake %LYX_SOURCE% -G"Visual Studio 14 2015" -DLYX_USE_QT=QT5 -DLYX_ENABLE_EXPORT_TESTS=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=0 -DLYX_RELEASE=0 -DLYX_CONSOLE=FORCE -DLYX_3RDPARTY_BUILD=1 %DEPENDENCIES_DOWNLOAD%
|
||||
msbuild src\LyX.vcxproj /p:Configuration=Debug
|
||||
msbuild src\tex2lyx\tex2lyx.vcxproj /p:Configuration=Debug
|
||||
)
|
||||
@ -84,7 +84,7 @@ if "%1%" == "devel" (
|
||||
if "%1%" == "install" (
|
||||
REM Build solution to develop LyX
|
||||
REM set -DLYX_MERGE_REBUILD and -DLYX_MERGE_FILES to 1 for a version released with an installer
|
||||
cmake %LYX_SOURCE% -GNinja -G"Visual Studio 14 2015" -DLYX_ENABLE_CXX11=ON -DLYX_USE_QT=QT5 -DLYX_MERGE_REBUILD=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=1 -DLYX_RELEASE=1 -DLYX_CONSOLE=OFF %DEPENDENCIES_DOWNLOAD%
|
||||
cmake %LYX_SOURCE% -GNinja -G"Visual Studio 14 2015" -DLYX_USE_QT=QT5 -DLYX_MERGE_REBUILD=0 -DLYX_MERGE_FILES=0 -DLYX_NLS=1 -DLYX_INSTALL=1 -DLYX_RELEASE=1 -DLYX_CONSOLE=OFF %DEPENDENCIES_DOWNLOAD%
|
||||
REM msbuild lyx.sln /p:Configuration=Release /t:ALL_BUILD
|
||||
msbuild INSTALL.vcxproj /p:Configuration=Release
|
||||
)
|
||||
|
@ -68,13 +68,6 @@
|
||||
// use GNU libstdc++ with C++11 ABI
|
||||
#cmakedefine USE_GLIBCXX_CXX11_ABI 1
|
||||
|
||||
// use GNU c++11 extensions
|
||||
#cmakedefine LYX_USE_CXX11 1
|
||||
#ifndef LYX_USE_CXX11
|
||||
#if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||
#error "Conflicting defines of LYX_USE_CXX11"
|
||||
#endif
|
||||
#endif
|
||||
#cmakedefine Z_PREFIX 1
|
||||
|
||||
// Defined if QT=QT5 uses X11
|
||||
|
@ -23,7 +23,7 @@ rmdir /s/q %LYX_BUILD%
|
||||
mkdir %LYX_BUILD%
|
||||
|
||||
cd %LYX_BUILD%
|
||||
cmake %LYX_SOURCE% -G"MinGW Makefiles" -DLYX_PYTHON_EXECUTABLE=%GNUWIN32_DIR%\Python\python -DLYX_3RDPARTY_BUILD=1 -DLYX_ENABLE_CXX11=ON -DLYX_USE_QT=QT5 -DLYX_MERGE_REBUILD=1 -DLYX_MERGE_FILES=1 -DLYX_NLS=1 -DLYX_INSTALL=1 -DLYX_RELEASE=1 -DLYX_CONSOLE=OFF
|
||||
cmake %LYX_SOURCE% -G"MinGW Makefiles" -DLYX_PYTHON_EXECUTABLE=%GNUWIN32_DIR%\Python\python -DLYX_3RDPARTY_BUILD=1 -DLYX_USE_QT=QT5 -DLYX_MERGE_REBUILD=1 -DLYX_MERGE_FILES=1 -DLYX_NLS=1 -DLYX_INSTALL=1 -DLYX_RELEASE=1 -DLYX_CONSOLE=OFF
|
||||
|
||||
mingw32-make doc
|
||||
mingw32-make translations
|
||||
|
@ -106,7 +106,6 @@ cmake $lyxsrcdir \
|
||||
-DLYX_XMINGW=$compiler \
|
||||
-DLYX_USE_QT=QT5 \
|
||||
-DLYX_QUIET=1 \
|
||||
-DLYX_ENABLE_CXX11=ON \
|
||||
-DLYX_HUNSPELL=1 \
|
||||
-DLYX_3RDPARTY_BUILD=1 \
|
||||
$pch $mergefile
|
||||
|
@ -690,7 +690,7 @@ static docstring escape_special_chars(docstring const & expr)
|
||||
|
||||
// $& is an ECMAScript format expression that expands to all
|
||||
// of the current match
|
||||
#if defined(LYX_USE_CXX11) && defined(LYX_USE_STD_REGEX)
|
||||
#ifdef LYX_USE_STD_REGEX
|
||||
// To prefix a matched expression with a single literal backslash, we
|
||||
// need to escape it for the C++ compiler and use:
|
||||
// FIXME: UNICODE
|
||||
|
@ -20,7 +20,7 @@ string const escape_special_chars(string const & expr)
|
||||
|
||||
// $& is a ECMAScript format expression that expands to all
|
||||
// of the current match
|
||||
#if defined(LYX_USE_CXX11) && defined(LYX_USE_STD_REGEX)
|
||||
#ifdef LYX_USE_STD_REGEX
|
||||
// To prefix a matched expression with a single literal backslash, we
|
||||
// need to escape it for the C++ compiler and use:
|
||||
return lyx::regex_replace(expr, reg, "\\$&");
|
||||
|
@ -14,30 +14,13 @@
|
||||
|
||||
#include "support/functional.h"
|
||||
|
||||
#ifdef LYX_USE_CXX11
|
||||
|
||||
#define LYX_BIND_NS std
|
||||
|
||||
namespace lyx
|
||||
{
|
||||
using std::placeholders::_1;
|
||||
using std::placeholders::_2;
|
||||
using std::bind;
|
||||
using std::ref;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include <boost/bind.hpp>
|
||||
#define LYX_BIND_NS boost
|
||||
|
||||
#endif
|
||||
|
||||
namespace lyx
|
||||
{
|
||||
using LYX_BIND_NS::bind;
|
||||
using LYX_BIND_NS::ref;
|
||||
}
|
||||
|
||||
#undef LYX_BIND_NS
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -12,25 +12,12 @@
|
||||
#ifndef LYX_FUNCTIONAL_H
|
||||
#define LYX_FUNCTIONAL_H
|
||||
|
||||
#ifdef LYX_USE_CXX11
|
||||
|
||||
#include <functional>
|
||||
#define LYX_FUNCTIONAL_NS std
|
||||
|
||||
#else
|
||||
|
||||
#include <boost/function.hpp>
|
||||
#include <boost/functional.hpp>
|
||||
#define LYX_FUNCTIONAL_NS boost
|
||||
|
||||
#endif
|
||||
|
||||
namespace lyx
|
||||
{
|
||||
using LYX_FUNCTIONAL_NS::function;
|
||||
using std::function;
|
||||
}
|
||||
|
||||
#undef LYX_FUNCTIONAL_NS
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -84,30 +84,10 @@ void eliminate_duplicates(C & c)
|
||||
}
|
||||
|
||||
|
||||
#ifdef LYX_USE_CXX11
|
||||
using std::next;
|
||||
#else
|
||||
/// Replacement of std::next for older compilers
|
||||
template <typename It, typename Diff>
|
||||
inline It next(It i, Diff n = 1)
|
||||
{
|
||||
std::advance(i, n);
|
||||
return i;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef LYX_USE_CXX11
|
||||
using std::prev;
|
||||
#else
|
||||
/// Replacement of std::prev for older compilers
|
||||
template <typename It, typename Diff>
|
||||
inline It prev(It i, Diff n = 1)
|
||||
{
|
||||
std::advance(i, -n);
|
||||
return i;
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace lyx
|
||||
|
||||
|
@ -12,7 +12,7 @@
|
||||
#ifndef LYX_REGEXP_H
|
||||
#define LYX_REGEXP_H
|
||||
|
||||
#if defined(LYX_USE_CXX11) && defined(LYX_USE_STD_REGEX)
|
||||
#ifdef LYX_USE_STD_REGEX
|
||||
# include <regex>
|
||||
// <regex> in gcc is unusable in versions less than 4.9.0
|
||||
// see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53631
|
||||
|
@ -12,27 +12,14 @@
|
||||
#ifndef LYX_SHARED_PTR_H
|
||||
#define LYX_SHARED_PTR_H
|
||||
|
||||
#ifdef LYX_USE_CXX11
|
||||
|
||||
#include <memory>
|
||||
#define LYX_SHAREDPTR_NS std
|
||||
|
||||
#else
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
#define LYX_SHAREDPTR_NS boost
|
||||
|
||||
#endif
|
||||
|
||||
namespace lyx
|
||||
{
|
||||
using LYX_SHAREDPTR_NS::shared_ptr;
|
||||
using LYX_SHAREDPTR_NS::make_shared;
|
||||
using LYX_SHAREDPTR_NS::const_pointer_cast;
|
||||
using std::shared_ptr;
|
||||
using std::make_shared;
|
||||
using std::const_pointer_cast;
|
||||
}
|
||||
|
||||
#undef LYX_SHAREDPTR_NS
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -125,15 +125,9 @@ public:
|
||||
|
||||
iparserdocstream(idocstream & is) : is_(is) {}
|
||||
|
||||
#ifdef LYX_USE_CXX11
|
||||
/// Like std::istream::operator bool()
|
||||
/// Do not convert is_ implicitly to bool, since that is forbidden in C++11.
|
||||
explicit operator bool() const { return s_.empty() ? !is_.fail() : true; }
|
||||
#else
|
||||
/// Like std::istream::operator void*()
|
||||
operator void*() const { return (s_.empty() && is_.fail()) ?
|
||||
0 : const_cast<iparserdocstream *>(this); }
|
||||
#endif
|
||||
|
||||
/// change the encoding of the input stream to \p e (iconv name)
|
||||
void setEncoding(std::string const & e);
|
||||
|
Loading…
Reference in New Issue
Block a user