[/ 
  Copyright 2006-2007 John Maddock.
  Distributed under the Boost Software License, Version 1.0.
  (See accompanying file LICENSE_1_0.txt or copy at
  http://www.boost.org/LICENSE_1_0.txt).
]

[section:install Building and Installing the Library]

When you extract the library from its zip file, you must preserve its internal 
directory structure (for example by using the -d option when extracting). If you 
didn't do that when extracting, then you'd better stop reading this, delete the 
files you just extracted, and try again!

This library should not need configuring before use; most popular compilers\/standard 
libraries\/platforms are already supported "as is". If you do experience configuration 
problems, or just want to test the configuration with your compiler, then the 
process is the same as for all of boost; see the 
[@../../../config/index.html configuration library documentation].

The library will encase all code inside namespace boost.

This is a header only library provided your compiler supports C++11 or later.  Support for
C++03 compilers is still present, but is now deprecated and may be removed without further notice!

The only people that still need to build the external libboost_regex library are those that are either:

* Using the library in C++03 mode, or,
* Using the deprecated POSIX C API's

Further, 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:

* Have a C++17 compiler that supports `__has_include`, in this case if `<boost/config.hpp>` is not present
then the library will automoatically enter standalone mode.  Or:
* Define BOOST_REGEX_STANDALONE when building.

If you are using this library with ICU, note that since it is now header only, it will be up to you
to link to the ICU libraries if you use `<boost/regex/icu.hpp>` unless you are using the supplied CMake script.

[h4 Usage with CMake]

The library comes with a very basic CMakeLists.txt that allows this library to be used from other CMake scripts.

CMakeLists.txt defines two targets:

* `Boost::regex`  This is the target to use for normal header only builds.
* `Boost::regex_icu`  This is the target to use if you are using `<boost/regex/icu.hpp>` in your code, and wish to have the ICU dependencies taken care of for you.

There is also one configuration option:

* BOOST_REGEX_STANDALONE when set then no other Boost libraries are targeted as dependencies, and Boost.Regex is placed in standalone mode.  Invoke CMake
with -DBOOST_REGEX_STANDALONE=on to enable standalone mode.

[h4 [*C++03 users only (DEPRECATED)] Building with bjam]

This is now the preferred method for building and installing legacy versions this library, 
please refer to the 
[@../../../../more/getting_started.html getting started guide] for more information.

[h4 Building With Unicode and ICU Support]

Boost.Regex is now capable of performing a configuration check
to test whether ICU is already installed in your compiler's
search paths.  When you build you should see a message like
this:

   Performing configuration checks

       - has_icu builds           : yes

Which means that ICU has been found, and support for it will be enabled
in the library build.  

[tip If you don't want the regex library to use ICU then build with the 
"--disable-icu" command line option.]

If instead you see:

   Performing configuration checks

       - has_icu builds           : no

Then ICU was not found and support for it will not be compiled into the library.
If you think that it should have been found, then you will need to take a look
at the contents of the file ['boost-root/bin.v2/config.log] for the actual error
messages obtained when the build carried out the configuration check.  You will
then need to fix these errors by ensuring your compiler gets invoked with the correct
options.  The main options that you're likely to pass to `b2` are:

[table
[[Option][Description]]
[[include=/some/path][Adds "/some/path" to the list of paths seached for include files, normally equivalent to `-I/some/path` on most compilers.]]
[[library-path=/some/path][Adds "/some/path" to the list of paths searched for external libraries, set this to the location of the ICU binaries if they're in a non-standard location.]]
[[-sICU_ICUUC_NAME=NAME][If `libicuuc` has a non-standard name then this sets the name of the library linked against, defaults to either `icuuc`, `icuucd`, `sicuuc` or `sicuucd` depending on build options.]]
[[-sICU_ICUDT_NAME=NAME][If `libicudata` has a non-standard name then this sets the name of the library linked against, defaults to either `icudt`, `icudata`, `sicudt` or `sicudata` depending on build options and platform.]]
[[-sICU_ICUIN_NAME=NAME][If `libicui18n` has a non-standatd name then this sets the name of the library linked against, defaults to either `icui18n`, `icuin`, `icuind`, sicuin` or `sicuins` depending on build options and platform.]]
[[cxxstd=XX][Sets the C++ standard supported: XX should be either 03, 11, 14, 17 or 2a.]]
[[cxxflags="FLAGS"][Passes "FLAGS" directly to the compiler, an option of last resort!]]
[[linflags="FLAGS"][Passes "FLAGS" directly to the compiler on the link step, an option of last resort!]]
]

[important Configuration results are cached - if you try rebuilding with different compiler
options then add an "-a" to the bjam command line to force all targets to be rebuilt.]

[important ICU is a C++ library just like Boost is, as such your copy of 
ICU must have been built with the same C++ compiler (and compiler version) 
that you are using to build Boost.  Boost.Regex will not work correctly unless 
you ensure that this is the case: it is up to you to ensure that the version 
of ICU you are using is binary compatible with the toolset you use to build Boost.]

And finally, if you want to build/test with multiple compiler versions, all with different ICU
builds, then the only way to achieve that currently is to modify your user-config.jam so that
each toolset has the necessary compiler/linker options set so that ICU is found automatically
by the configuration step (providing the ICU binaries use the standard names, all you have to
add is the appropriate header-include and linker-search paths).

[h4 Building from Source]

The Regex library is "just a bunch of source files": nothing special is required to build them.

You can either build the files under boost-path/libs/regex/src/*.cpp as a library, or add them
directly to your project.  This is particularly useful if you need to use specific compiler
options not supported by the default Boost build.

There are two #defines you should be aware of:

* BOOST_HAS_ICU should be defined if you want ICU support compiled in.
* BOOST_REGEX_DYN_LINK should be defined if you are building a DLL on Windows.

[endsect]

