From b05e08a465dceee25798ac4fd745814cdb1b8b9b Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Fri, 2 May 2014 19:18:11 -0400 Subject: [PATCH] Use pkg-config's pkg.m4 * configure.ac: Use pkg-config's pkg.m4, rather than reinventing it. Add explicit AC_SUBST's where needed. * autogen.sh (progs): Add pkg-config. (pkg_config_min): New variable. * INSTALL.REPO: Mention pkg-config. * etc/PROBLEMS: Mention a related issue that can occur with a local automake. --- ChangeLog | 5 ++++ INSTALL.REPO | 2 ++ autogen.sh | 3 ++- configure.ac | 65 +++++++--------------------------------------------- etc/PROBLEMS | 11 +++++++++ 5 files changed, 28 insertions(+), 58 deletions(-) diff --git a/ChangeLog b/ChangeLog index c9ca6bfa9c1..91e51d681d2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2014-05-02 Glenn Morris + * configure.ac: Use pkg-config's pkg.m4, rather than reinventing it. + Add explicit AC_SUBST's where needed. + * autogen.sh (progs): Add pkg-config. + (pkg_config_min): New variable. + * configure.ac (AC_CONFIG_MACRO_DIR): Use it. * autogen.sh (get_version): Handle no leading whitespace. diff --git a/INSTALL.REPO b/INSTALL.REPO index 36ab928673d..c1617e781c1 100644 --- a/INSTALL.REPO +++ b/INSTALL.REPO @@ -12,6 +12,8 @@ autoconf - at least the version specified near the start of configure.ac (in the AC_PREREQ command). automake - at least the version specified near the start of configure.ac (in the AM_INIT_AUTOMAKE command). +pkg-config - at least version specified in the PKG_PROG_PKG_CONFIG + command in configure.ac makeinfo - not strictly necessary, but highly recommended, so that you can build the manuals. diff --git a/autogen.sh b/autogen.sh index 255a4d75ba6..84230b56016 100755 --- a/autogen.sh +++ b/autogen.sh @@ -32,7 +32,7 @@ ## Tools we need: ## Note that we respect the values of AUTOCONF etc, like autoreconf does. -progs="autoconf automake" +progs="autoconf automake pkg-config" ## Minimum versions we need: autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.ac` @@ -41,6 +41,7 @@ autoconf_min=`sed -n 's/^ *AC_PREREQ(\([0-9\.]*\)).*/\1/p' configure.ac` ## AM_INIT_AUTOMAKE call. automake_min=`sed -n 's/^ *AM_INIT_AUTOMAKE(\([0-9\.]*\)).*/\1/p' configure.ac` +pkg_config_min=`sed -n 's/^ *PKG_PROG_PKG_CONFIG(\([0-9\.]*\)).*/\1/p' configure.ac` ## $1 = program, eg "autoconf". ## Echo the version string, eg "2.59". diff --git a/configure.ac b/configure.ac index 837a619d8a6..27312cac3ab 100644 --- a/configure.ac +++ b/configure.ac @@ -1339,65 +1339,12 @@ AC_SUBST(LIB_MATH) AC_DEFINE_UNQUOTED(SYSTEM_TYPE, "$SYSTEM_TYPE", [The type of system you are compiling for; sets `system-type'.]) +m4_pattern_forbid([^PKG_]) pre_PKG_CONFIG_CFLAGS=$CFLAGS pre_PKG_CONFIG_LIBS=$LIBS -AC_PATH_PROG(PKG_CONFIG, pkg-config, no) - -dnl This function definition taken from Gnome 2.0 -dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not) -dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page -dnl also defines GSTUFF_PKG_ERRORS on error -AC_DEFUN([PKG_CHECK_MODULES], [ - succeeded=no - - if test "$PKG_CONFIG" = "no" ; then - ifelse([$4], , [AC_MSG_ERROR([ - *** The pkg-config script could not be found. Make sure it is in your path, or give the full name of pkg-config with the PKG_CONFIG environment variable or --with-pkg-config-prog. Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config.])], [$4]) - else - PKG_CONFIG_MIN_VERSION=0.9.0 - if "$PKG_CONFIG" --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then - AC_MSG_CHECKING(for $2) - - if "$PKG_CONFIG" --exists "$2" 2>&AS_MESSAGE_LOG_FD && - $1_CFLAGS=`"$PKG_CONFIG" --cflags "$2" 2>&AS_MESSAGE_LOG_FD` && - $1_LIBS=`"$PKG_CONFIG" --libs "$2" 2>&AS_MESSAGE_LOG_FD`; then - edit_cflags=" - s,///*,/,g - s/^/ / - s/ -I/ $isystem/g - s/^ // - " - $1_CFLAGS=`AS_ECHO(["$$1_CFLAGS"]) | sed -e "$edit_cflags"` - $1_LIBS=`AS_ECHO(["$$1_LIBS"]) | sed -e 's,///*,/,g'` - AC_MSG_RESULT([yes CFLAGS='$$1_CFLAGS' LIBS='$$1_LIBS']) - succeeded=yes - else - AC_MSG_RESULT(no) - $1_CFLAGS="" - $1_LIBS="" - ## If we have a custom action on failure, don't print errors, but - ## do set a variable so people can do so. Do it in a subshell - ## to capture any diagnostics in invoking pkg-config. - $1_PKG_ERRORS=`("$PKG_CONFIG" --print-errors "$2") 2>&1` - ifelse([$4], ,echo "$$1_PKG_ERRORS",) - fi - - AC_SUBST($1_CFLAGS) - AC_SUBST($1_LIBS) - else - echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer." - echo "*** See http://www.freedesktop.org/software/pkgconfig" - fi - fi - - if test $succeeded = yes; then - ifelse([$3], , :, [$3]) - else - ifelse([$4], , [AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.])], [$4]) - fi -]) +PKG_PROG_PKG_CONFIG(0.9.0) HAVE_SOUND=no if test "${with_sound}" != "no"; then @@ -2415,6 +2362,8 @@ if test "${with_dbus}" = "yes"; then DBUS_OBJ=dbusbind.o fi fi +AC_SUBST(DBUS_CFLAGS) +AC_SUBST(DBUS_LIBS) AC_SUBST(DBUS_OBJ) dnl GSettings has been tested under GNU/Linux only. @@ -3268,7 +3217,6 @@ if test "${HAVE_X11}" = "yes"; then [AC_CHECK_LIB(Xrandr, XRRGetScreenResources, HAVE_XRANDR=yes)]) if test $HAVE_XRANDR = yes; then XRANDR_LIBS=-lXrandr - AC_SUBST(XRANDR_LIBS) fi fi if test $HAVE_XRANDR = yes; then @@ -3283,6 +3231,8 @@ if test "${HAVE_X11}" = "yes"; then AC_DEFINE(HAVE_XRANDR, 1, [Define to 1 if you have the XRandr extension.]) fi fi +AC_SUBST(XRANDR_CFLAGS) +AC_SUBST(XRANDR_LIBS) ### Use Xinerama (-lXinerama) if available HAVE_XINERAMA=no @@ -3297,13 +3247,14 @@ if test "${HAVE_X11}" = "yes"; then [AC_CHECK_LIB(Xinerama, XineramaQueryExtension, HAVE_XINERAMA=yes)]) if test $HAVE_XINERAMA = yes; then XINERAMA_LIBS=-lXinerama - AC_SUBST(XINERAMA_LIBS) fi fi if test $HAVE_XINERAMA = yes; then AC_DEFINE(HAVE_XINERAMA, 1, [Define to 1 if you have the Xinerama extension.]) fi fi +AC_SUBST(XINERAMA_CFLAGS) +AC_SUBST(XINERAMA_LIBS) ### Use libxml (-lxml2) if available diff --git a/etc/PROBLEMS b/etc/PROBLEMS index 58c2ceaf68c..3d5349c2793 100644 --- a/etc/PROBLEMS +++ b/etc/PROBLEMS @@ -2223,6 +2223,17 @@ If you do, please send it to bug-gnu-emacs@gnu.org so we can list it here. * Build-time problems +** Autogen.sh / Autoreconf + +*** Running `autogen.sh' or `autoreconf' fails with an error of the form +"possibly undefined macro: PKG_CONFIG". This indicates that the version +of aclocal that you are using cannot find the pkg.m4 file that +pkg-config provides. If you installed your own version of automake in +a non-standard location /prefix, then add a line to the +/prefix/share/aclocal/dirlist file (create the file if necessary) +that gives the location of the directory that contains pkg.m4 +(e.g. /usr/share/aclocal). + ** Configuration *** `configure' warns ``accepted by the compiler, rejected by the preprocessor''. -- 2.39.5