tre-config.h contains additional defines that their configure puts in
config.h.

We have remapped the POSIX entry points with a tre_ suffix: without
it there was confusion with entry points in OS libraries on some OSes
(e.g. macOS).

alloca has been disabled: the declarations used do not work on
Windows, and most likely not on FreeBSD.

The way we compile it, TRE works internally in one of three modes

STR_BYTE, using bytes
STR_MBS , using wchar_t for matching, I/O in MBCS
STR_WIDE, using wchar_t

We've added interfaces tre_regcompb, tre_regncompb, tre_regexecb,
tre_regnexecb and regaexecb to force STR_BYTE.  Unless forced, bytes
are used in a single-byte locale and wchar_t in a MBCS.  We need to
force for useBytes=TRUE, for support for UTF-8 encoded strings
in a single-byte locale (principally on Windows) and when dealing with
raw vectors. You do need to ensure that regcomp and regexec use the
same type.

The offsets in the regmatch_t structure are in characters for
STR_WIDE, bytes for the other two modes.

On Windows (MinGW?), iswctype is missing 'blank'.

REG_LITERAL was not matching "" in some cases, hence a change at
line 1652 of tre-parse.c.

We fixed stack trampling in tre_tnfa_run_approx() and converted
tre_ast_to_tnfa() from recursion to iteration over a TRE stack.

We commented out in tre-match-approx.c

/* These seem compiler/OS-specific, but unexplained
On Linux the first is intended to be used only with GCC.
#define __USE_STRING_INLINES
#undef __NO_INLINE__
*/

since it failed on clang
https://stat.ethz.ch/pipermail/r-devel/2010-February/056728.html

Nov 2011: incorporated minor fixes from https://github.com/GerHobbelt/libtre
(see http://laurikari.net/tre/website-issues-and-future-plans/#comments).

Oct 2014: fixed R bug PR#16009 by copying the class member of a LITERAL
in tre_copy_ast.

Nov 2014: changed tre_version() to report this is a modified version.
