summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_regex.h12
-rw-r--r--bgpd/bgp_routemap.c12
-rwxr-xr-xconfigure.ac15
3 files changed, 30 insertions, 9 deletions
diff --git a/bgpd/bgp_regex.h b/bgpd/bgp_regex.h
index 176b65a1..9fc83222 100644
--- a/bgpd/bgp_regex.h
+++ b/bgpd/bgp_regex.h
@@ -23,11 +23,15 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include <zebra.h>
-#ifdef HAVE_GNU_REGEX
-#include <regex.h>
+#ifdef HAVE_LIBPCREPOSIX
+# include <pcreposix.h>
#else
-#include "regex-gnu.h"
-#endif /* HAVE_GNU_REGEX */
+# ifdef HAVE_GNU_REGEX
+# include <regex.h>
+# else
+# include "regex-gnu.h"
+# endif /* HAVE_GNU_REGEX */
+#endif /* HAVE_LIBPCREPOSIX */
extern void bgp_regex_free (regex_t *regex);
extern regex_t *bgp_regcomp (const char *str);
diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c
index 4fff0268..aa7dbce1 100644
--- a/bgpd/bgp_routemap.c
+++ b/bgpd/bgp_routemap.c
@@ -28,11 +28,15 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
#include "plist.h"
#include "memory.h"
#include "log.h"
-#ifdef HAVE_GNU_REGEX
-#include <regex.h>
+#ifdef HAVE_LIBPCREPOSIX
+# include <pcreposix.h>
#else
-#include "regex-gnu.h"
-#endif /* HAVE_GNU_REGEX */
+# ifdef HAVE_GNU_REGEX
+# include <regex.h>
+# else
+# include "regex-gnu.h"
+# endif /* HAVE_GNU_REGEX */
+#endif /* HAVE_LIBPCREPOSIX */
#include "buffer.h"
#include "sockunion.h"
diff --git a/configure.ac b/configure.ac
index 3ac8384f..0b8724ee 100755
--- a/configure.ac
+++ b/configure.ac
@@ -253,6 +253,8 @@ AC_ARG_ENABLE(gcc-rdynamic,
[ --enable-gcc-rdynamic enable gcc linking with -rdynamic for better backtraces])
AC_ARG_ENABLE(time-check,
[ --disable-time-check disable slow thread warning messages])
+AC_ARG_ENABLE(pcreposix,
+[ --enable-pcreposix enable using PCRE Posix libs for regex functions])
if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then
CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
@@ -1259,13 +1261,24 @@ AC_CHECK_FUNC(__inet_pton, AC_DEFINE(HAVE_INET_PTON,,__inet_pton))
AC_CHECK_FUNC(__inet_aton, AC_DEFINE(HAVE_INET_ATON,,__inet_aton))
dnl ---------------------------
+dnl check system has PCRE regexp
+dnl ---------------------------
+if test "x$enable_pcreposix" = "xyes"; then
+ AC_CHECK_LIB(pcreposix, pcreposix_regexec, ,[enable_pcreposix=no
+ AC_MSG_WARN([*** falling back to other regex library ***]) ])
+fi
+
+if test "x$enable_pcreposix" != "xyes"; then
+dnl ---------------------------
dnl check system has GNU regexp
dnl ---------------------------
-dnl AC_MSG_CHECKING(whether system has GNU regex)
+AC_MSG_CHECKING(whether system has GNU regex)
AC_CHECK_LIB(c, regexec,
[AC_DEFINE(HAVE_GNU_REGEX,,GNU regexp library)
LIB_REGEX=""],
[LIB_REGEX="regex.o"])
+fi
+AC_SUBST(HAVE_LIBPCREPOSIX)
AC_SUBST(LIB_REGEX)
dnl ------------------