Re: [PATCH] sim/bfin: include config/pkg.m4 in configure.ac (was: Patch "Run `autoreconf -vf` throughout" broke the rtems-bfin build on FreeBSD)

Andrew Burgess
2020-08-21T13:07:24Z

* Simon Marchi <simon.marchi@efficios.com> [2020-08-20 10:04:33 -0400]:

> On 2020-08-20 9:45 a.m., Simon Marchi wrote:
> > On 2020-08-20 9:43 a.m., Andreas Schwab wrote:
> >> That's because aclocal cannot find a definition of PKG_CHECK_MODULES.
> >> You need to run autoreconf with -I ../../config.
> >
> > Indeed, that's what I found in the end. Though I'll propose a patch that
> > adds the required include to configure.ac.
>
> Here's the patch:
>
> From 45dce782e0a999efb892588885fc4c7f7e2e0868 Mon Sep 17 00:00:00 2001
> From: Simon Marchi <simon.marchi@polymtl.ca>
> Date: Thu, 20 Aug 2020 09:31:49 -0400
> Subject: [PATCH] sim/bfin: include config/pkg.m4 in configure.ac
>
> When trying to re-generate configure in sim/bfin, I get:
>
> $ autoreconf -vf
> autoreconf: Entering directory `.'
> autoreconf: configure.ac: not using Gettext
> autoreconf: running: aclocal --force
> autoreconf: configure.ac: tracing
> autoreconf: configure.ac: not running libtoolize: --install not given
> autoreconf: running: /opt/autostuff/bin/autoconf --force
> configure.ac:57: error: possibly undefined macro: AC_CHECK_LIB
> If this token and others are legitimate, please use m4_pattern_allow.
> See the Autoconf documentation.
> autoreconf: /opt/autostuff/bin/autoconf failed with exit status: 1
>
> This happens since commit f693213d126a ("Run `autoreconf -vf` throughout").
>
> The problem (not clear from the error message) is that the
> PKG_CHECK_MODULES macro used in configure.ac is undefined. In the past, I
> suppose that it relied on the person running autoconf having pkg.m4 (from
> pkg-config) in their include path. That's not my case.
>
> Since we recently added a local version of PKG_CHECK_MODULES to our tree,
> we can just make sim/bfin/configure.ac use it. This patch makes
> configure.ac include config/pkg.m4, and re-generates configure. With this,
> the configure script appears to be generated correctly, I am able to
> configure and build the bfin simulator.
>
> Note: using sinclude to include the required m4 files makes no sense to
> me. These files contain macros we need, if they are not defined then
> the resulting file is unusable. And sinclude fails silently if the file
> is not found. So, better use include/m4_include.
>
> sim/bfin/ChangeLog:
>
> * configure.ac: Include config/pkg.m4.
>
> Change-Id: I7d8012e5ed510cd7746b94e918f0feb1c701cd83
> ---
> sim/bfin/configure | 305 ++++++++++++++++++++++++++++++++++++++++--
> sim/bfin/configure.ac | 1 +
> 2 files changed, 298 insertions(+), 8 deletions(-)

I'm no autoconf expert, but it looks reasonable to me.

Thanks,
Andrew

>
> diff --git a/sim/bfin/configure b/sim/bfin/configure
> index d3aed28eaca2..9f0b46e11110 100755
> --- a/sim/bfin/configure
> +++ b/sim/bfin/configure
> @@ -634,6 +634,9 @@ LIBOBJS
> cgen_breaks
> SDL_LIBS
> SDL_CFLAGS
> +PKG_CONFIG_LIBDIR
> +PKG_CONFIG_PATH
> +PKG_CONFIG
> REPORT_BUGS_TEXI
> REPORT_BUGS_TO
> PKGVERSION
> @@ -797,7 +800,12 @@ CFLAGS
> LDFLAGS
> LIBS
> CPPFLAGS
> -CPP'
> +CPP
> +PKG_CONFIG
> +PKG_CONFIG_PATH
> +PKG_CONFIG_LIBDIR
> +SDL_CFLAGS
> +SDL_LIBS'
>
>
> # Initialize some variables set by options.
> @@ -1471,6 +1479,13 @@ Some influential environment variables:
> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
> you have headers in a nonstandard directory <include dir>
> CPP C preprocessor
> + PKG_CONFIG path to pkg-config utility
> + PKG_CONFIG_PATH
> + directories to add to pkg-config's search path
> + PKG_CONFIG_LIBDIR
> + path overriding pkg-config's built-in search path
> + SDL_CFLAGS C compiler flags for SDL, overriding pkg-config
> + SDL_LIBS linker flags for SDL, overriding pkg-config
>
> Use these variables to override the choices made by `configure' or to help
> it to find libraries and programs with nonstandard names/locations.
> @@ -4171,6 +4186,26 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
>
>
>
> +
> +
> +
> +
> +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
> +# serial 12 (pkg-config-0.29.2)
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
>
>
>
> @@ -12887,7 +12922,7 @@ else
> lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> lt_status=$lt_dlunknown
> cat > conftest.$ac_ext <<_LT_EOF
> -#line 12890 "configure"
> +#line 12925 "configure"
> #include "confdefs.h"
>
> #if HAVE_DLFCN_H
> @@ -12993,7 +13028,7 @@ else
> lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
> lt_status=$lt_dlunknown
> cat > conftest.$ac_ext <<_LT_EOF
> -#line 12996 "configure"
> +#line 13031 "configure"
> #include "confdefs.h"
>
> #if HAVE_DLFCN_H
> @@ -13926,13 +13961,267 @@ fi
> done
>
>
> -PKG_PROG_PKG_CONFIG
> -PKG_CHECK_MODULES(SDL, sdl,
> - AC_CHECK_LIB(dl, dlopen, [
> +
> +
> +
> +
> +
> +
> +
> +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
> + if test -n "$ac_tool_prefix"; then
> + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
> +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
> +$as_echo_n "checking for $ac_word... " >&6; }
> +if ${ac_cv_path_PKG_CONFIG+:} false; then :
> + $as_echo_n "(cached) " >&6
> +else
> + case $PKG_CONFIG in
> + [\\/]* | ?:[\\/]*)
> + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
> + ;;
> + *)
> + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
> +for as_dir in $PATH
> +do
> + IFS=$as_save_IFS
> + test -z "$as_dir" && as_dir=.
> + for ac_exec_ext in '' $ac_executable_extensions; do
> + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
> + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
> + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
> + break 2
> + fi
> +done
> + done
> +IFS=$as_save_IFS
> +
> + ;;
> +esac
> +fi
> +PKG_CONFIG=$ac_cv_path_PKG_CONFIG
> +if test -n "$PKG_CONFIG"; then
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
> +$as_echo "$PKG_CONFIG" >&6; }
> +else
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> +fi
> +
> +
> +fi
> +if test -z "$ac_cv_path_PKG_CONFIG"; then
> + ac_pt_PKG_CONFIG=$PKG_CONFIG
> + # Extract the first word of "pkg-config", so it can be a program name with args.
> +set dummy pkg-config; ac_word=$2
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
> +$as_echo_n "checking for $ac_word... " >&6; }
> +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
> + $as_echo_n "(cached) " >&6
> +else
> + case $ac_pt_PKG_CONFIG in
> + [\\/]* | ?:[\\/]*)
> + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
> + ;;
> + *)
> + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
> +for as_dir in $PATH
> +do
> + IFS=$as_save_IFS
> + test -z "$as_dir" && as_dir=.
> + for ac_exec_ext in '' $ac_executable_extensions; do
> + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
> + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
> + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
> + break 2
> + fi
> +done
> + done
> +IFS=$as_save_IFS
> +
> + ;;
> +esac
> +fi
> +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
> +if test -n "$ac_pt_PKG_CONFIG"; then
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
> +$as_echo "$ac_pt_PKG_CONFIG" >&6; }
> +else
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> +fi
> +
> + if test "x$ac_pt_PKG_CONFIG" = x; then
> + PKG_CONFIG=""
> + else
> + case $cross_compiling:$ac_tool_warned in
> +yes:)
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
> +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
> +ac_tool_warned=yes ;;
> +esac
> + PKG_CONFIG=$ac_pt_PKG_CONFIG
> + fi
> +else
> + PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
> +fi
> +
> +fi
> +if test -n "$PKG_CONFIG"; then
> + _pkg_min_version=0.9.0
> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
> +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
> + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
> +$as_echo "yes" >&6; }
> + else
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> + PKG_CONFIG=""
> + fi
> +fi
> +
> +pkg_failed=no
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sdl" >&5
> +$as_echo_n "checking for sdl... " >&6; }
> +
> +if test -n "$SDL_CFLAGS"; then
> + pkg_cv_SDL_CFLAGS="$SDL_CFLAGS"
> + elif test -n "$PKG_CONFIG"; then
> + if test -n "$PKG_CONFIG" && \
> + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl\""; } >&5
> + ($PKG_CONFIG --exists --print-errors "sdl") 2>&5
> + ac_status=$?
> + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
> + test $ac_status = 0; }; then
> + pkg_cv_SDL_CFLAGS=`$PKG_CONFIG --cflags "sdl" 2>/dev/null`
> + test "x$?" != "x0" && pkg_failed=yes
> +else
> + pkg_failed=yes
> +fi
> + else
> + pkg_failed=untried
> +fi
> +if test -n "$SDL_LIBS"; then
> + pkg_cv_SDL_LIBS="$SDL_LIBS"
> + elif test -n "$PKG_CONFIG"; then
> + if test -n "$PKG_CONFIG" && \
> + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl\""; } >&5
> + ($PKG_CONFIG --exists --print-errors "sdl") 2>&5
> + ac_status=$?
> + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
> + test $ac_status = 0; }; then
> + pkg_cv_SDL_LIBS=`$PKG_CONFIG --libs "sdl" 2>/dev/null`
> + test "x$?" != "x0" && pkg_failed=yes
> +else
> + pkg_failed=yes
> +fi
> + else
> + pkg_failed=untried
> +fi
> +
> +if test $pkg_failed = no; then
> + pkg_save_LDFLAGS="$LDFLAGS"
> + LDFLAGS="$LDFLAGS $pkg_cv_SDL_LIBS"
> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +
> +int
> +main ()
> +{
> +
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_link "$LINENO"; then :
> +
> +else
> + pkg_failed=yes
> +fi
> +rm -f core conftest.err conftest.$ac_objext \
> + conftest$ac_exeext conftest.$ac_ext
> + LDFLAGS=$pkg_save_LDFLAGS
> +fi
> +
> +
> +
> +if test $pkg_failed = yes; then
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> +
> +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
> + _pkg_short_errors_supported=yes
> +else
> + _pkg_short_errors_supported=no
> +fi
> + if test $_pkg_short_errors_supported = yes; then
> + SDL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sdl" 2>&1`
> + else
> + SDL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sdl" 2>&1`
> + fi
> + # Put the nasty error message in config.log where it belongs
> + echo "$SDL_PKG_ERRORS" >&5
> +
> + :
> +elif test $pkg_failed = untried; then
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> +$as_echo "no" >&6; }
> + :
> +else
> + SDL_CFLAGS=$pkg_cv_SDL_CFLAGS
> + SDL_LIBS=$pkg_cv_SDL_LIBS
> + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
> +$as_echo "yes" >&6; }
> +
> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
> +$as_echo_n "checking for dlopen in -ldl... " >&6; }
> +if ${ac_cv_lib_dl_dlopen+:} false; then :
> + $as_echo_n "(cached) " >&6
> +else
> + ac_check_lib_save_LIBS=$LIBS
> +LIBS="-ldl $LIBS"
> +cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +/* end confdefs.h. */
> +
> +/* Override any GCC internal prototype to avoid an error.
> + Use char because int might match the return type of a GCC
> + builtin and then its argument prototype would still apply. */
> +#ifdef __cplusplus
> +extern "C"
> +#endif
> +char dlopen ();
> +int
> +main ()
> +{
> +return dlopen ();
> + ;
> + return 0;
> +}
> +_ACEOF
> +if ac_fn_c_try_link "$LINENO"; then :
> + ac_cv_lib_dl_dlopen=yes
> +else
> + ac_cv_lib_dl_dlopen=no
> +fi
> +rm -f core conftest.err conftest.$ac_objext \
> + conftest$ac_exeext conftest.$ac_ext
> +LIBS=$ac_check_lib_save_LIBS
> +fi
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
> +$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
> +if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
> +
> SDL_CFLAGS="${SDL_CFLAGS} -DHAVE_SDL"
> SDL_LIBS="-ldl"
> - ], [SDL_CFLAGS= SDL_LIBS=])
> - , :)
> +
> +else
> + SDL_CFLAGS= SDL_LIBS=
> +fi
> +
> +
> +fi
>
>
>
> diff --git a/sim/bfin/configure.ac b/sim/bfin/configure.ac
> index 44b9952c75b8..47bacb1c0d2e 100644
> --- a/sim/bfin/configure.ac
> +++ b/sim/bfin/configure.ac
> @@ -1,6 +1,7 @@
> dnl Process this file with autoconf to produce a configure script.
> AC_INIT(Makefile.in)
> sinclude(../common/acinclude.m4)
> +m4_include([../../config/pkg.m4])
>
> SIM_AC_COMMON
>
> --
> 2.28.0
>
>