dev-cpp/libcutl: Use std::regex over boost::regex
authorDavid Seifert <soap@gentoo.org>
Wed, 6 Sep 2017 22:46:27 +0000 (00:46 +0200)
committerDavid Seifert <soap@gentoo.org>
Wed, 6 Sep 2017 22:46:46 +0000 (00:46 +0200)
* boost-1.65.0 has removed TR1 support. It's 2017
  and we can use C++11's <regex> support now.

Closes: https://bugs.gentoo.org/show_bug.cgi?id=630016
Package-Manager: Portage-2.3.8, Repoman-2.3.3

dev-cpp/libcutl/files/libcutl-1.10.0-boost-1.65-tr1.patch [new file with mode: 0644]
dev-cpp/libcutl/libcutl-1.10.0.ebuild

diff --git a/dev-cpp/libcutl/files/libcutl-1.10.0-boost-1.65-tr1.patch b/dev-cpp/libcutl/files/libcutl-1.10.0-boost-1.65-tr1.patch
new file mode 100644 (file)
index 0000000..ebb15ee
--- /dev/null
@@ -0,0 +1,162 @@
+Use regex from C++11 instead of boost/tr1's version (the latter is gone as of boost 1.65).
+Patch: https://svnweb.freebsd.org/ports/head/devel/libcutl/files/patch-cutl_re_re.cxx?view=markup&pathrev=445764
+Bug: https://bugs.gentoo.org/show_bug.cgi?id=630016
+
+--- a/cutl/re/re.cxx
++++ b/cutl/re/re.cxx
+@@ -9,7 +9,7 @@
+ #ifndef LIBCUTL_EXTERNAL_BOOST
+ #  include <cutl/details/boost/tr1/regex.hpp>
+ #else
+-#  include <boost/tr1/regex.hpp>
++#  include <regex>
+ #endif
+ 
+ using namespace std;
+@@ -40,17 +40,17 @@
+     struct basic_regex<C>::impl
+     {
+       typedef basic_string<C> string_type;
+-      typedef tr1::basic_regex<C> regex_type;
++      typedef std::basic_regex<C> regex_type;
+       typedef typename regex_type::flag_type flag_type;
+ 
+       impl () {}
+       impl (regex_type const& r): r (r) {}
+       impl (string_type const& s, bool icase)
+       {
+-        flag_type f (tr1::regex_constants::ECMAScript);
++        flag_type f (std::regex_constants::ECMAScript);
+ 
+         if (icase)
+-          f |= tr1::regex_constants::icase;
++          f |= std::regex_constants::icase;
+ 
+         r.assign (s, f);
+       }
+@@ -118,15 +118,15 @@
+           impl_ = s == 0 ? new impl : new impl (*s, icase);
+         else
+         {
+-          impl::flag_type f (tr1::regex_constants::ECMAScript);
++          impl::flag_type f (std::regex_constants::ECMAScript);
+ 
+           if (icase)
+-            f |= tr1::regex_constants::icase;
++            f |= std::regex_constants::icase;
+ 
+           impl_->r.assign (*s, f);
+         }
+       }
+-      catch (tr1::regex_error const& e)
++      catch (std::regex_error const& e)
+       {
+         throw basic_format<char> (s == 0 ? "" : *s, e.what ());
+       }
+@@ -146,15 +146,15 @@
+           impl_ = s == 0 ? new impl : new impl (*s, icase);
+         else
+         {
+-          impl::flag_type f (tr1::regex_constants::ECMAScript);
++          impl::flag_type f (std::regex_constants::ECMAScript);
+ 
+           if (icase)
+-            f |= tr1::regex_constants::icase;
++            f |= std::regex_constants::icase;
+ 
+           impl_->r.assign (*s, f);
+         }
+       }
+-      catch (tr1::regex_error const& e)
++      catch (std::regex_error const& e)
+       {
+         throw basic_format<wchar_t> (s == 0 ? L"" : *s, e.what ());
+       }
+@@ -166,28 +166,28 @@
+     bool basic_regex<char>::
+     match (string_type const& s) const
+     {
+-      return tr1::regex_match (s, impl_->r);
++      return std::regex_match (s, impl_->r);
+     }
+ 
+     template <>
+     bool basic_regex<wchar_t>::
+     match (string_type const& s) const
+     {
+-      return tr1::regex_match (s, impl_->r);
++      return std::regex_match (s, impl_->r);
+     }
+ 
+     template <>
+     bool basic_regex<char>::
+     search (string_type const& s) const
+     {
+-      return tr1::regex_search (s, impl_->r);
++      return std::regex_search (s, impl_->r);
+     }
+ 
+     template <>
+     bool basic_regex<wchar_t>::
+     search (string_type const& s) const
+     {
+-      return tr1::regex_search (s, impl_->r);
++      return std::regex_search (s, impl_->r);
+     }
+ 
+     template <>
+@@ -196,13 +196,13 @@
+              string_type const& sub,
+              bool first_only) const
+     {
+-      tr1::regex_constants::match_flag_type f (
+-        tr1::regex_constants::format_default);
++      std::regex_constants::match_flag_type f (
++        std::regex_constants::format_default);
+ 
+       if (first_only)
+-        f |= tr1::regex_constants::format_first_only;
++        f |= std::regex_constants::format_first_only;
+ 
+-      return tr1::regex_replace (s, impl_->r, sub, f);
++      return std::regex_replace (s, impl_->r, sub, f);
+     }
+ 
+     template <>
+@@ -211,13 +211,13 @@
+              string_type const& sub,
+              bool first_only) const
+     {
+-      tr1::regex_constants::match_flag_type f (
+-        tr1::regex_constants::format_default);
++      std::regex_constants::match_flag_type f (
++        std::regex_constants::format_default);
+ 
+       if (first_only)
+-        f |= tr1::regex_constants::format_first_only;
++        f |= std::regex_constants::format_first_only;
+ 
+-      return tr1::regex_replace (s, impl_->r, sub, f);
++      return std::regex_replace (s, impl_->r, sub, f);
+     }
+   }
+ }
+--- a/m4/libboost.m4
++++ b/m4/libboost.m4
+@@ -129,13 +129,13 @@
+ AC_DEFUN([LIBBOOST_REGEX], [
+ LIBBOOST_LIB([regex],[
+ AC_LANG_SOURCE([
+-#include <boost/tr1/regex.hpp>
++#include <regex>
+ 
+ int
+ main ()
+ {
+-  std::tr1::regex r ("te.t", std::tr1::regex_constants::ECMAScript);
+-  return std::tr1::regex_match ("test", r) ? 0 : 1;
++  std::regex r ("te.t", std::regex_constants::ECMAScript);
++  return std::regex_match ("test", r) ? 0 : 1;
+ }
+ ])],
+ [$1],
index c44786235d64802506836863478c7ecf67d3be2c..652471ccb8864c3e665ed20a83f6cce63ab387ec 100644 (file)
@@ -1,13 +1,14 @@
-# Copyright 1999-2016 Gentoo Foundation
+# Copyright 1999-2017 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=6
 
-inherit versionator
+inherit autotools flag-o-matic versionator
 
 DESCRIPTION="A collection of C++ libraries (successor of libcult)"
 HOMEPAGE="http://www.codesynthesis.com/projects/libcutl/"
 SRC_URI="http://www.codesynthesis.com/download/${PN}/$(get_version_component_range 1-2)/${P}.tar.bz2"
+
 LICENSE="MIT"
 SLOT="0"
 KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86"
@@ -18,16 +19,25 @@ RDEPEND="
        dev-libs/boost:="
 DEPEND="${RDEPEND}"
 
-PATCHES=( "${FILESDIR}/${PN}-1.10.0-fix-c++14.patch" )
+PATCHES=(
+       "${FILESDIR}"/${PN}-1.10.0-fix-c++14.patch
+       "${FILESDIR}"/${PN}-1.10.0-boost-1.65-tr1.patch
+)
 
 src_prepare() {
        default
 
        # remove bundled libs
        rm -r cutl/details/{boost,expat} || die
+
+       eautoreconf
 }
 
 src_configure() {
+       # ensure <regex> works on GCC 5 and below
+       # bug 630016
+       append-cxxflags -std=c++14
+
        econf \
                --disable-static \
                --with-external-boost \