TR1: check in cmake for GCC version, fallback in checktr1.h for other build systems, no support of regex in gcc 4.4

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@34728 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Peter Kümmel 2010-06-30 08:47:41 +00:00
parent f3137da47c
commit 103310c401
5 changed files with 37 additions and 10 deletions

View File

@ -27,6 +27,24 @@ set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
option(lyxinstall "Build install projects/rules" ON) option(lyxinstall "Build install projects/rules" ON)
if(UNIX)
# GCC does not support regex: there are linker errors
# http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.tr1
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION)
if(GCC_VERSION VERSION_GREATER 4.4)
set(LYX_USE_TR1_REGEX 0)
add_definitions(-DLYX_USE_TR1)
endif()
else()
if(MSVC10)
set(LYX_USE_TR1_REGEX 1)
add_definitions(-DLYX_USE_TR1)
add_definitions(-DLYX_USE_TR1_REGEX)
endif()
endif()
# Supress regeneration # Supress regeneration
@ -479,7 +497,11 @@ if(UseExternalBoost)
endif() endif()
else() else()
message(STATUS "----- Using internal boost. To build with installed version use -DUseExternalBoost:BOOL=ON") message(STATUS "----- Using internal boost. To build with installed version use -DUseExternalBoost:BOOL=ON")
set(Lyx_Boost_Libraries boost_signals ${BOOST_REGEX_LIB}) if(LYX_USE_TR1_REGEX)
set(Lyx_Boost_Libraries boost_signals)
else()
set(Lyx_Boost_Libraries boost_signals boost_regex)
endif()
add_definitions(-DBOOST_USER_CONFIG="<config.h>") add_definitions(-DBOOST_USER_CONFIG="<config.h>")
include_directories(${TOP_SRC_DIR}/boost) include_directories(${TOP_SRC_DIR}/boost)
add_subdirectory(boost) add_subdirectory(boost)

View File

@ -1,16 +1,18 @@
# This file is part of LyX, the document processor. # This file is part of LyX, the document processor.
# Licence details can be found in the file COPYING. # Licence details can be found in the file COPYING.
# #
# Copyright (c) 2006, Peter Kümmel, <syntheticpp@gmx.net> # Copyright (c) 2010, Peter Kümmel, <syntheticpp@gmx.net>
# #
project(boost) project(boost)
if(MSVC10)
if(LYX_USE_TR1_REGEX)
message(STATUS "Using TR1 regex") message(STATUS "Using TR1 regex")
else() else()
add_subdirectory(regex) add_subdirectory(regex)
endif() endif()
add_subdirectory(signals) add_subdirectory(signals)

View File

@ -21,5 +21,3 @@ lyx_add_path(boost_regex_sources ${TOP_SRC_DIR}/boost/libs/regex/src)
add_library(boost_regex STATIC ${boost_regex_sources}) add_library(boost_regex STATIC ${boost_regex_sources})
set(BOOST_REGEX_LIB boost_regex CACHE STRING "Boost regex lib" FORCE)

View File

@ -12,6 +12,8 @@
#ifndef LYX_CHECKTR1_H #ifndef LYX_CHECKTR1_H
#define LYX_CHECKTR1_H #define LYX_CHECKTR1_H
#ifndef LYX_USE_TR1 // When not set by the build system
#if defined(_MSC_VER) && (_MSC_VER >= 1600) #if defined(_MSC_VER) && (_MSC_VER >= 1600)
#define LYX_USE_TR1 #define LYX_USE_TR1
#endif #endif
@ -20,5 +22,7 @@
#define LYX_USE_TR1 #define LYX_USE_TR1
#endif #endif
#endif
#endif #endif

View File

@ -33,14 +33,15 @@
// TODO: only tested with msvc10 #if defined(LYX_USE_TR1) && defined(LYX_USE_TR1_REGEX)
#if defined(LYX_USE_TR1) && defined(_MSC_VER)
#ifdef _MSC_VER #ifdef _MSC_VER
#include <regex> #include <regex>
#define match_partial _Match_partial // why is match_partial not public? #define match_partial _Match_partial
#else #else
#include <tr1/regexp> #include <tr1/regex>
// TODO no match_partial in gcc, how to replace?
#define match_partial match_default
#endif #endif
namespace lyx namespace lyx