On Sun, Oct 25, 2020 at 11:41:12PM -0300, Érico Nogueira via Elfutils-devel 
wrote:
> - Make configure.ac test for fts and obstack availability;
> - Add fts and obstack ldflags to all files that need them;
> - Add missing argp ldflags to programs in debuginfod/.
> 
> Signed-off-by: Érico Rolim <erico....@gmail.com>
> ---
> 
> This is the start of a series of patches that can enable elfutils to be
> built on musl-based distros out of the box.
> 
> I will send them as separate mails, since upstreaming any of the
> necessary patches should still help with avoiding duplication across
> distros as well as lowering the maintenance burden.
> 
>  ChangeLog              |  4 ++++
>  configure.ac           | 54 ++++++++++++++++++++++++++++++++++++++++++
>  debuginfod/Makefile.am |  6 ++---
>  libdw/Makefile.am      |  2 +-
>  src/Makefile.am        |  6 ++---
>  5 files changed, 65 insertions(+), 7 deletions(-)
> 
> diff --git a/ChangeLog b/ChangeLog
> index 72e8397c..10587886 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,7 @@
> +2020-10-25  Érico N. Rolim  <erico....@gmail.com>
> +
> +     * configure.ac: Check for fts and obstack from outside libc.
> +
>  2020-10-01  Frank Ch. Eigler  <f...@redhat.com>
>  
>       PR25461
> diff --git a/configure.ac b/configure.ac
> index 973409f1..628e7a74 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -542,6 +542,60 @@ else
>  fi
>  AC_SUBST([argp_LDADD])
>  
> +dnl Check if we have fts available from our libc
> +AC_LINK_IFELSE(
> +     [AC_LANG_PROGRAM(
> +             [#if !defined(__x86_64__)
> +             #undef  _FILE_OFFSET_BITS
> +             #define _FILE_OFFSET_BITS 32
> +             #endif
> +             #include <fts.h>],
> +             [FTS* fts = 0; return fts_close(fts); return 0;]
> +             )],
> +     [libc_has_fts="true"],
> +     [libc_has_fts="false"]
> +)
> +
> +dnl If our libc doesn't provide fts, then test for libfts
> +if test "$libc_has_fts" = "false" ; then
> +     AC_MSG_WARN("libc does not have fts")
> +     AC_CHECK_LIB([fts], [fts_close], [have_fts="true"], [have_fts="false"])
> +
> +     if test "$have_fts" = "false"; then
> +             AC_MSG_ERROR("no libfts found")
> +     else
> +             fts_LDADD="-lfts"
> +     fi
> +else
> +     fts_LDADD=""
> +fi
> +AC_SUBST([fts_LDADD])
If you are looking for fts providers, I suggest using AC_SEARCH_LIBS
instead, e.g.

saved_LIBS="$LIBS"
AC_SEARCH_LIBS([fts_close], [fts])
LIBS="$saved_LIBS"
case "$ac_cv_search_fts_close" in
        no) AC_MSG_FAILURE([failed to find fts_close]) ;;
        -l*) fts_LIBS="$ac_cv_search_fts_close" ;;
        *) fts_LIBS= ;;
esac
AC_SUBST([fts_LIBS])

> +dnl Check if we have obstack available from our libc
> +AC_LINK_IFELSE(
> +     [AC_LANG_PROGRAM(
> +             [#include <obstack.h>],
> +             [_obstack_begin(0, 0, 0, NULL, NULL); return 0;]
> +             )],
> +     [libc_has_obstack="true"],
> +     [libc_has_obstack="false"]
> +)
> +
> +dnl If our libc doesn't provide obstack, then test for libobstack
> +if test "$libc_has_obstack" = "false" ; then
> +     AC_MSG_WARN("libc does not have obstack")
> +     AC_CHECK_LIB([obstack], [_obstack_begin], [have_obstack="true"], 
> [have_obstack="false"])
> +
> +     if test "$have_obstack" = "false"; then
> +             AC_MSG_ERROR("no libobstack found")
> +     else
> +             obstack_LDADD="-lobstack"
> +     fi
> +else
> +     obstack_LDADD=""
> +fi
> +AC_SUBST([obstack_LDADD])

Likewise, e.g.

saved_LIBS="$LIBS"
AC_SEARCH_LIBS([obstack_free], [obstack])
LIBS="$saved_LIBS"
case "$ac_cv_search_obstack_free" in
        no) AC_MSG_FAILURE([failed to find obstack_free]) ;;
        -l*) obstack_LIBS="$ac_cv_search_obstack_free" ;;
        *) obstack_LIBS= ;;
esac
AC_SUBST([obstack_LIBS])


-- 
ldv

Reply via email to