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 <[email protected]>
> ---
>
> 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 <[email protected]>
> +
> + * configure.ac: Check for fts and obstack from outside libc.
> +
> 2020-10-01 Frank Ch. Eigler <[email protected]>
>
> 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