diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2015-04-06 15:49:50 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2015-04-06 16:10:56 -0700 |
commit | 936ae4a5e6c8fd27d86c2f9e0f46c61c8c15c4ff (patch) | |
tree | 750e53c043e96311d6baf496401c269c714e2fe5 | |
parent | ff38f097a41ddf908e3036524319de5a3aa6188e (diff) | |
download | grep-936ae4a5e6c8fd27d86c2f9e0f46c61c8c15c4ff.tar.gz |
build: use pkg-config (if available) to configure libpcre
Problem reported by Mike Frysinger in: http://bugs.gnu.org/16757
* bootstrap.conf (bootstrap_post_import_hook):
Copy pkg-config's pkg.m4.
* configure.ac: Invoke PKG_PROG_PKG_CONFIG.
* m4/pcre.m4 (gl_FUNC_PCRE): Rewrite to use pkg-config if
available, and to test that pcre_compile can be linked to.
* src/Makefile.am (AM_CFLAGS): Add PCRE_CFLAGS.
(grep_LDADD): Add PCRE_LIBS.
* src/pcresearch.c: Simply include <pcre.h> if HAVE_LIBPCRE,
since 'configure' arranges for the appropriate -I option now.
-rw-r--r-- | bootstrap.conf | 15 | ||||
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | m4/pcre.m4 | 62 | ||||
-rw-r--r-- | src/Makefile.am | 4 | ||||
-rw-r--r-- | src/pcresearch.c | 6 |
5 files changed, 58 insertions, 30 deletions
diff --git a/bootstrap.conf b/bootstrap.conf index f19ae752..7842928c 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -134,6 +134,21 @@ bootstrap_post_import_hook () { # Automake requires that ChangeLog exist. touch ChangeLog || return 1 + + # Copy pkg-config's pkg.m4 so that our downstream users don't need to. + oIFS=$IFS + IFS=: + for dir in \ + $ACLOCAL_PATH $(aclocal --print-ac-dir) /usr/share/aclocal '' + do + IFS=$oIFS + if test -n "$dir" && test -r "$dir/pkg.m4"; then + cp "$dir/pkg.m4" m4/pkg.m4 + return + fi + done + IFS=$oIFS + die 'Cannot find pkg.m4; perhaps you need to install pkg-config' } bootstrap_epilogue() diff --git a/configure.ac b/configure.ac index 9ee391a1..3f6d3899 100644 --- a/configure.ac +++ b/configure.ac @@ -82,6 +82,7 @@ AC_PROG_INSTALL AC_PROG_CC gl_EARLY AC_PROG_RANLIB +PKG_PROG_PKG_CONFIG([0.9.0]) # grep never invokes mbrtowc or mbrlen on empty input, # so don't worry about this common bug, @@ -1,5 +1,4 @@ # pcre.m4 - check for libpcre support -# serial 1 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation @@ -17,32 +16,49 @@ AC_DEFUN([gl_FUNC_PCRE], esac], [test_pcre=yes]) - LIB_PCRE= - AC_SUBST([LIB_PCRE]) + PCRE_CFLAGS= + PCRE_LIBS= + AC_SUBST([PCRE_CFLAGS]) + AC_SUBST([PCRE_LIBS]) use_pcre=no - if test x"$test_pcre" = x"yes"; then - AC_CHECK_HEADERS([pcre.h]) - AC_CHECK_HEADERS([pcre/pcre.h]) - if test $ac_cv_header_pcre_h = yes \ - || test $ac_cv_header_pcre_pcre_h = yes; then - pcre_saved_LIBS=$LIBS - AC_SEARCH_LIBS([pcre_compile], [pcre], - [test "$ac_cv_search_pcre_compile" = "none required" || - LIB_PCRE=$ac_cv_search_pcre_compile]) - AC_CHECK_FUNCS([pcre_compile]) - LIBS=$pcre_saved_LIBS - if test $ac_cv_func_pcre_compile = yes; then - use_pcre=yes - fi - fi - if test $use_pcre = no; then - AC_MSG_WARN([libpcre development library was not found or not usable.]) + if test $test_pcre = yes; then + PKG_CHECK_MODULES([PCRE], [libpcre], [], + [if test -r /usr/include/pcre/pcre.h && + test ! -r /usr/include/pcre.h + then + PCRE_CFLAGS=-I/usr/include/libpng + fi + PCRE_LIBS=-lpcre]) + + AC_CACHE_CHECK([for pcre_compile], [pcre_cv_have_pcre_compile], + [pcre_saved_CFLAGS=$CFLAGS + pcre_saved_LIBS=$LIBS + CFLAGS="$CFLAGS $PCRE_CFLAGS" + LIBS="$PCRE_LIBS $LIBS" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include <pcre.h> + ]], + [[pcre *p = pcre_compile (0, 0, 0, 0, 0); + return !p;]])], + [pcre_cv_have_pcre_compile=yes], + [pcre_cv_have_pcre_compile=no]) + CFLAGS=$pcre_saved_CFLAGS + LIBS=$pcre_saved_LIBS]) + + if test "$pcre_cv_have_pcre_compile" = yes; then + use_pcre=yes + else AC_MSG_WARN([AC_PACKAGE_NAME will be built without pcre support.]) fi fi - AC_DEFINE_UNQUOTED([HAVE_LIBPCRE], [`test $use_pcre != yes; echo $?`], - [Define to 1 if you have the Perl Compatible Regular Expressions - library (-lpcre).]) + if test $use_pcre = yes; then + AC_DEFINE([HAVE_LIBPCRE], [1], + [Define to 1 if you have the Perl Compatible Regular Expressions + library (-lpcre).]) + else + PCRE_CFLAGS= + PCRE_LIBS= + fi ]) diff --git a/src/Makefile.am b/src/Makefile.am index 5c608dfb..ce81228e 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -16,7 +16,7 @@ LN = ln -AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) +AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) $(PCRE_CFLAGS) # Tell the linker to omit references to unused shared libraries. AM_LDFLAGS = $(IGNORE_UNUSED_LIBRARIES_CFLAGS) @@ -38,7 +38,7 @@ LDADD = \ ../lib/libgreputils.a $(LIBINTL) ../lib/libgreputils.a $(LIBICONV) \ $(LIBTHREAD) -grep_LDADD = $(LDADD) $(LIB_PCRE) +grep_LDADD = $(LDADD) $(PCRE_LIBS) localedir = $(datadir)/locale AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib diff --git a/src/pcresearch.c b/src/pcresearch.c index afe4f2bd..c8e2dcfc 100644 --- a/src/pcresearch.c +++ b/src/pcresearch.c @@ -20,13 +20,9 @@ #include <config.h> #include "search.h" -#if HAVE_PCRE_H -# include <pcre.h> -#elif HAVE_PCRE_PCRE_H -# include <pcre/pcre.h> -#endif #if HAVE_LIBPCRE +# include <pcre.h> /* This must be at least 2; everything after that is for performance in pcre_exec. */ |