Here's a patch that seems to work. I stole the code that libtool.m4 uses to find ltdl dependencies, put it inside a new HWLOC_CHECK_LTDL_DEPS that stores these dependencies in HWLOC_LIBS_PRIVATE. It properly adds -ldl on Linux and nothing on FreeBSD.
The rest of the patch is similar to Jeff's, with things moved inside HWLOC_SETUP_CORE. Brice Le 14/05/2013 10:27, Brice Goglin a écrit : > I am reviving this thread since I interrupted it to discuss "enabling > plugins vs embedding hwloc" (1) but we didn't close the discussion > about "not embedding libltdl anymore" (2). > > We committed a fix for (1) that (sometimes) generates tarballs without > src/libltdl directory. It doesn't always happen, I don't understand > why, but it certainly makes those tarballs unusable (configure > complains that a Makefile.in is missing). My original patch for (1) > fixed the problem, but (2) is a better way to avoid any such issue. > > The patch below does pretty much what we need, except putting the > right ltdl static libs in hwloc.pc > > I am going to look at this before releasing v1.7.1 > > Brice > > > > > Le 08/05/2013 02:47, Jeff Squyres (jsquyres) a écrit : >> How's this patch? >> >> The only question I have is: how do we figure out what libraries to put in >> the .pc file in the --disable-shared --enable-static case? >> >> >> On May 7, 2013, at 8:24 PM, Samuel Thibault <samuel.thiba...@inria.fr> wrote: >> >>> > Jeff Squyres (jsquyres), le Wed 08 May 2013 02:21:02 +0200, a écrit : >>>> >> On May 7, 2013, at 6:25 PM, Brice Goglin <brice.gog...@inria.fr> wrote: >>>> >> >>>>> >>> I don't have anything against this. What was the reason for not using >>>>> >>> the default/system libltdl in OMPI? libtool was buggy when you started >>>>> >>> using it? >>>> >> >>>> >> >>>> >> I neglected to answer this. >>>> >> >>>> >> Yes, plus libltdl grew new functionality that we needed (global/local >>>> >> symbol visibility). >>>> >> >>>> >> We might be getting to the point soon where we can rely on the >>>> >> installed libltdl to be new enough everywhere, but we haven't had that >>>> >> conversation. >>> > >>> > We could already check that the installed version is new enough for our >>> > needs. >>> > >>> > Samuel >>> > _______________________________________________ >>> > hwloc-devel mailing list >>> > hwloc-de...@open-mpi.org >>> > http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel >> -- Jeff Squyres jsquy...@cisco.com For corporate legal information go >> to: http://www.cisco.com/web/about/doing_business/legal/cri/ >> >> no-embed-libltdl.diff >> >> >> Index: configure.ac >> =================================================================== >> --- configure.ac (revision 5606) >> +++ configure.ac (working copy) >> @@ -168,30 +168,25 @@ >> AM_DISABLE_STATIC >> AM_PROG_LIBTOOL([dlopen win32-dll]) >> LT_LANG([C]) >> -LT_CONFIG_LTDL_DIR([src/libltdl]) >> -LTDL_INIT([recursive convenience]) >> -AC_CONFIG_FILES([src/libltdl/Makefile]) >> >> -# Workarounds for libtool LT_CONFIG_H bug >> -#CPPFLAGS="$CPPFLAGS -I$HWLOC_top_builddir" >> -AC_CONFIG_COMMANDS_PRE([LT_CONFIG_H=`expr "$LT_CONFIG_H" : '.*/\(.*\)'`]) >> +# If we want plugins, look for ltdl.h and libltdl >> +LIBLTDL= >> +AS_IF([test "$enable_plugins" = "yes"], >> + [AC_CHECK_HEADER([ltdl.h], [], >> + [AC_MSG_WARN([Plugin support requested, but could not find >> ltdl.h]) >> + AC_MSG_ERROR([Cannot continue])]) >> + AC_CHECK_LIB([ltdl], [lt_dlopenext], [], >> + [AC_MSG_WARN([Plugin support requested, but could not find >> libltdl]) >> + AC_MSG_ERROR([Cannot continue])]) >> + ]) >> +AC_SUBST(LIBLTDL) >> >> # Add libltdl static-build dependencies to hwloc.pc >> if test "x$hwloc_have_plugins" = xyes; then >> - if test "x$with_included_ltdl" = xno; then >> - HWLOC_LIBS_PRIVATE="$HWLOC_LIBS_PRIVATE $LIBLTDL" >> - fi >> + # JMS What to put here for static builds? >> HWLOC_LIBS_PRIVATE="$HWLOC_LIBS_PRIVATE $lt_cv_dlopen_libs" >> fi >> >> -# Is ltdl included? >> -HWLOC_LTDL_SUBDIR= >> -AS_IF([test "x$with_included_ltdl" = xyes], >> - [HWLOC_LIBLTDL_SUBDIR=libltdl]) >> -AC_SUBST(HWLOC_LIBLTDL_SUBDIR) >> -dnl AM_CONDITIONAL([HWLOC_LTDL_INCLUDED], [test "x$with_included_ltdl" = >> xyes]) >> - >> - >> # Party on >> AC_OUTPUT >> >> Index: src >> =================================================================== >> --- src (revision 5606) >> +++ src (working copy) >> >> Property changes on: src >> ___________________________________________________________________ >> Modified: svn:ignore >> ## -1,5 +1,4 ## >> .deps >> Makefile.in >> Makefile >> -libltdl >> static-components.h >> Index: src/Makefile.am >> =================================================================== >> --- src/Makefile.am (revision 5606) >> +++ src/Makefile.am (working copy) >> @@ -207,8 +207,6 @@ >> AM_CPPFLAGS += $(LTDLINCL) >> libhwloc_la_LDFLAGS += -export-dynamic >> libhwloc_la_LIBADD = $(LIBLTDL) >> -libhwloc_la_DEPENDENCIES = $(LTDLDEPS) >> -SUBDIRS = $(HWLOC_LIBLTDL_SUBDIR) >> endif >> >> # Embedded library (note the lack of a .so version number -- that >> >> >> _______________________________________________ >> hwloc-devel mailing list >> hwloc-de...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel > > > > _______________________________________________ > hwloc-devel mailing list > hwloc-de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/hwloc-devel
diff --git a/config/hwloc.m4 b/config/hwloc.m4 index 818fcc6..0a28a92 100644 --- a/config/hwloc.m4 +++ b/config/hwloc.m4 @@ -1041,6 +1041,19 @@ EOF]) [AC_MSG_WARN([Plugins not supported on non-native Windows build, plugins support cannot be enabled.]) AC_MSG_ERROR([Cannot continue])]) + # If we want plugins, look for ltdl.h and libltdl + if test "x$hwloc_have_plugins" = xyes; then + AC_CHECK_HEADER([ltdl.h], [], + [AC_MSG_WARN([Plugin support requested, but could not find ltdl.h]) + AC_MSG_ERROR([Cannot continue])]) + AC_CHECK_LIB([ltdl], [lt_dlopenext], + [HWLOC_LIBS="$HWLOC_LIBS -lltdl"], + [AC_MSG_WARN([Plugin support requested, but could not find libltdl]) + AC_MSG_ERROR([Cannot continue])]) + # Add libltdl static-build dependencies to hwloc.pc + HWLOC_CHECK_LTDL_DEPS + fi + AC_ARG_WITH([hwloc-plugins-path], AC_HELP_STRING([--with-hwloc-plugins-path=dir:...], [Colon-separated list of plugin directories. Default: "$prefix/lib/hwloc". Plugins will be installed in the first directory. They will be loaded from all of them, in order.]), @@ -1277,3 +1290,72 @@ AC_DEFUN([_HWLOC_CHECK_DECLS], [ [Define to 1 if you have the declaration of `$1', and to 0 if you don't]) ]) +#----------------------------------------------------------------------- + +dnl HWLOC_CHECK_LTDL_DEPS +dnl +dnl Add ltdl dependencies to HWLOC_LIBS_PRIVATE +AC_DEFUN([HWLOC_CHECK_LTDL_DEPS], [ + # save variables that we'll modify below + save_lt_cv_dlopen="$lt_cv_dlopen" + save_lt_cv_dlopen_libs="$lt_cv_dlopen_libs" + save_lt_cv_dlopen_self="$lt_cv_dlopen_self" + ########################################################### + # code stolen from LT_SYS_DLOPEN_SELF in libtool.m4 + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + # end of code stolen from LT_SYS_DLOPEN_SELF in libtool.m4 + ########################################################### + + HWLOC_LIBS_PRIVATE="$HWLOC_LIBS_PRIVATE $lt_cv_dlopen_libs" + + # restore modified variable in case the actual libtool code uses them + lt_cv_dlopen="$save_lt_cv_dlopen" + lt_cv_dlopen_libs="$save_lt_cv_dlopen_libs" + lt_cv_dlopen_self="$save_lt_cv_dlopen_self" +]) \ No newline at end of file diff --git a/configure.ac b/configure.ac index a71a8e9..bd78f92 100644 --- a/configure.ac +++ b/configure.ac @@ -168,27 +168,7 @@ AM_ENABLE_SHARED AM_DISABLE_STATIC AM_PROG_LIBTOOL([dlopen win32-dll]) LT_LANG([C]) -LT_CONFIG_LTDL_DIR([src/libltdl]) -LTDL_INIT([recursive convenience]) -AC_CONFIG_FILES([src/libltdl/Makefile]) - -# Workarounds for libtool LT_CONFIG_H bug -#CPPFLAGS="$CPPFLAGS -I$HWLOC_top_builddir" -AC_CONFIG_COMMANDS_PRE([LT_CONFIG_H=`expr "$LT_CONFIG_H" : '.*/\(.*\)'`]) - -# Add libltdl static-build dependencies to hwloc.pc -if test "x$hwloc_have_plugins" = xyes; then - if test "x$with_included_ltdl" = xno; then - HWLOC_LIBS_PRIVATE="$HWLOC_LIBS_PRIVATE $LIBLTDL" - fi - HWLOC_LIBS_PRIVATE="$HWLOC_LIBS_PRIVATE $lt_cv_dlopen_libs" -fi -# Is ltdl included? -HWLOC_LTDL_SUBDIR= -AS_IF([test "x$with_included_ltdl" = xyes], - [HWLOC_LIBLTDL_SUBDIR=libltdl]) -AC_SUBST(HWLOC_LIBLTDL_SUBDIR) # Party on diff --git a/src/Makefile.am b/src/Makefile.am index f428149..fc91214 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -207,8 +207,6 @@ if HWLOC_HAVE_PLUGINS AM_CPPFLAGS += $(LTDLINCL) libhwloc_la_LDFLAGS += -export-dynamic libhwloc_la_LIBADD = $(LIBLTDL) -libhwloc_la_DEPENDENCIES = $(LTDLDEPS) -SUBDIRS = $(HWLOC_LIBLTDL_SUBDIR) endif # Embedded library (note the lack of a .so version number -- that