Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,31 @@ jobs:
- name: Test
run: ../../../b2 toolset=$TOOLSET
working-directory: ../boost-root/libs/regex/test
ubuntu-jammy-standalone:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
compiler: [ g++ ]
standard: [ c++11, c++14, c++17, c++2a ]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: '0'
- uses: mstachniuk/ci-skip@v1
with:
commit-filter: '[skip ci];[ci skip];[CI SKIP];[SKIP CI];***CI SKIP***;***SKIP CI***;[windows];[Windows];[WINDOWS];[apple];[Apple];[APPLE]'
commit-filter-separator: ';'
fail-fast: true
- name: Set TOOLSET
run: echo ${{ matrix.compiler }} | awk '/^g/ { print "TOOLSET=gcc" } /^clang/ { print "TOOLSET=clang" }' >> $GITHUB_ENV
- name: Add repository
run: sudo apt-add-repository -y "ppa:ubuntu-toolchain-r/test"
- name: Install packages
run: sudo apt install libicu-dev
- name: Test
run: ${{ matrix.compiler }} -std=${{ matrix.standard }} -I../../include *.cpp ../../src/*.cpp -o regress && ./regress
working-directory: ./test/regress
ubuntu-bionic:
runs-on: ubuntu-18.04
strategy:
Expand Down
65 changes: 65 additions & 0 deletions doc/html/boost_regex/configuration/standalone.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Use in Standalone Mode (without the rest of Boost)</title>
<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../../index.html" title="Boost.Regex 7.0.1">
<link rel="up" href="../configuration.html" title="Configuration">
<link rel="prev" href="compiler.html" title="Compiler Setup">
<link rel="next" href="locale.html" title="Locale and traits class selection">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="compiler.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="locale.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
<a name="boost_regex.configuration.standalone"></a><a class="link" href="standalone.html" title="Use in Standalone Mode (without the rest of Boost)">Use in Standalone
Mode (without the rest of Boost)</a>
</h3></div></div></div>
<p>
This library may now be used in "standalone" mode without the rest
of the Boost C++ libraries, in order to do this you must either:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
Have a C++17 compiler that supports <code class="computeroutput"><span class="identifier">__has_include</span></code>,
in this case if <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code> is <span class="bold"><strong>not</strong></span>
present then the library will automoatically enter standalone mode. Or:
</li>
<li class="listitem">
Define BOOST_REGEX_STANDALONE when building.
</li>
</ul></div>
<p>
The main difference between the 2 modes, is that when Boost.Config is present
the library will automatically configure itself around various compiler defects.
In particular in order to use the library with exception support turned off,
you will either need a copy of Boost.Config in your include path, or else
manually define BOOST_NO_EXCEPTIONS when building.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright © 1998-2013 John Maddock<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="compiler.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../configuration.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="locale.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
2 changes: 1 addition & 1 deletion doc/html/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"><p><small>Last revised: March 08, 2022 at 11:25:00 GMT</small></p></td>
<td align="left"><p><small>Last revised: December 09, 2022 at 16:44:04 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
Expand Down
13 changes: 8 additions & 5 deletions src/posix_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,8 @@

#define BOOST_REGEX_SOURCE

#include <boost/config.hpp>
#include <boost/regex.hpp>
#include <boost/cregex.hpp>
#include <boost/cstdint.hpp>
#include <cstdio>

#if defined(BOOST_NO_STDC_NAMESPACE)
Expand All @@ -32,6 +30,11 @@ namespace std{
}
#endif

#ifndef BOOST_WORKAROUND
#define BOOST_WORKAROUND(x, y) false
#endif



namespace boost{

Expand Down Expand Up @@ -88,7 +91,7 @@ BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompA(regex_tA* expression, const char
return REG_E_MEMORY;
#endif
// set default flags:
boost::uint_fast32_t flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? regex::extended : regex::basic);
unsigned flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? regex::extended : regex::basic);
expression->eflags = (f & REG_NEWLINE) ? match_not_dot_newline : match_default;
// and translate those that are actually set:

Expand Down Expand Up @@ -177,7 +180,7 @@ BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int code, const regex_tA*
// We're converting an integer i to a string, and since i <= REG_E_UNKNOWN
// a five character string is *always* large enough:
//
#if BOOST_CXX_VERSION >= 201103
#if !defined(BOOST_CXX_VERSION) || (BOOST_CXX_VERSION >= 201103)
int r = (std::snprintf)(localbuf, 5, "%d", i);
#elif BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE)
int r = (::sprintf_s)(localbuf, 5, "%d", i);
Expand All @@ -191,7 +194,7 @@ BOOST_REGEX_DECL regsize_t BOOST_REGEX_CCALL regerrorA(int code, const regex_tA*
return std::strlen(localbuf) + 1;
}
}
#if BOOST_CXX_VERSION >= 201103
#if !defined(BOOST_CXX_VERSION) || (BOOST_CXX_VERSION >= 201103)
int r = (::snprintf)(localbuf, 5, "%d", 0);
#elif BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(_WIN32_WCE) && !defined(UNDER_CE)
int r = (::sprintf_s)(localbuf, 5, "%d", 0);
Expand Down
7 changes: 5 additions & 2 deletions src/wide_posix_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@

#include <boost/regex.hpp>
#include <boost/cregex.hpp>
#include <boost/cstdint.hpp>

#ifndef BOOST_WORKAROUND
#define BOOST_WORKAROUND(x, y) false
#endif

#include <cstdio>
#include <cstring>
Expand Down Expand Up @@ -98,7 +101,7 @@ BOOST_REGEX_DECL int BOOST_REGEX_CCALL regcompW(regex_tW* expression, const wcha
return REG_E_MEMORY;
#endif
// set default flags:
boost::uint_fast32_t flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? wregex::extended : wregex::basic);
unsigned flags = (f & REG_PERLEX) ? 0 : ((f & REG_EXTENDED) ? wregex::extended : wregex::basic);
expression->eflags = (f & REG_NEWLINE) ? match_not_dot_newline : match_default;

// and translate those that are actually set:
Expand Down
8 changes: 0 additions & 8 deletions test/regress/basic_tests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,6 @@
* DESCRIPTION: main regex test declarations.
*/

#include <boost/detail/workaround.hpp>

#if BOOST_WORKAROUND(BOOST_BORLANDC, < 0x560)
// we get unresolved externals from basic_string
// unless we do this, a well known Borland bug:
#define _RWSTD_COMPILE_INSTANTIATE
#endif

#include "test.hpp"

#ifdef BOOST_MSVC
Expand Down
7 changes: 7 additions & 0 deletions test/regress/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,13 @@ int main(int argc, char * argv[])
return cpp_main(argc, argv);
}

#elif defined(BOOST_REGEX_STANDALONE)

int main(int argc, char* argv[])
{
return cpp_main(argc, argv);
}

#else

#include <boost/detail/lightweight_main.hpp>
Expand Down
17 changes: 17 additions & 0 deletions test/regress/test.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,23 @@
#pragma warning(disable:1418 981 383 1419 7)
#endif

#ifndef BOOST_WORKAROUND
#define BOOST_WORKAROUND(x, y) false
#endif
#ifdef BOOST_REGEX_STANDALONE
#include <cstdint>

namespace boost { using std::uint32_t; }

#define BOOST_JOIN(X, Y) BOOST_DO_JOIN(X, Y)
#define BOOST_DO_JOIN(X, Y) BOOST_DO_JOIN2(X,Y)
#define BOOST_DO_JOIN2(X, Y) X##Y

#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X)
#define BOOST_DO_STRINGIZE(X) #X

#endif

#include <typeinfo>
#include "test_not_regex.hpp"
#include "test_regex_search.hpp"
Expand Down
9 changes: 9 additions & 0 deletions test/regress/test_icu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,19 @@
// We can only build this if we have ICU support:
//
#include <boost/regex/config.hpp>

#if defined(BOOST_HAS_ICU) && !defined(BOOST_NO_STD_WSTRING)

#include <boost/regex/icu.hpp>
#ifndef BOOST_REGEX_STANDALONE
#include <boost/mpl/int.hpp>
#else
#include <type_traits>
namespace boost { namespace mpl {
template <int I>
using int_ = ::std::integral_constant<int, I>;
} }
#endif
#include "test.hpp"

namespace unnecessary_fix{
Expand Down
2 changes: 1 addition & 1 deletion test/regress/test_mfc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
//
// We can only build this if we have ATL support:
//
#include <boost/config.hpp>
#include <boost/regex/config.hpp>

#ifdef TEST_MFC

Expand Down