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