summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-09-16 18:10:19 +0200
committerAndy Wingo <wingo@pobox.com>2009-09-16 18:10:19 +0200
commiteb350124a85dd4daf39bacbdc50452ef87a33a43 (patch)
tree96674005d8eb32842ca07305b5cfe0ae2480e602
parentdb723980a4b1e4d4d4d665283d1bc0b792c751bf (diff)
downloadguile-eb350124a85dd4daf39bacbdc50452ef87a33a43.tar.gz
add the libdir to the ltdl lib search path
* libguile/Makefile.am (libpath.h): Fix pkgdatadir, pkglibdir, and pkgincludedir entries. Add a new define, SCM_LIB_DIR. * libguile/dynl.c (sysdep_dynl_init): Add the libdir to the libltdl search path. Should fix http://thread.gmane.org/gmane.lisp.guile.bugs/4289/focus=4296 -- that is, it should allow guile to be invoked from whereever it is installed, without munging LTDL_LIBRARY_PATH or the like variables. There is a trick though -- during the build, we don't want to be looking in the $libdir for loadable modules. So as with GUILE_SYSTEM_PATH, we have GUILE_SYSTEM_LTDL_PATH. * meta/uninstalled-env.in: Set GUILE_SYSTEM_LTDL_PATH to "" when building.
-rw-r--r--libguile/Makefile.am7
-rw-r--r--libguile/dynl.c15
-rw-r--r--meta/uninstalled-env.in4
3 files changed, 23 insertions, 3 deletions
diff --git a/libguile/Makefile.am b/libguile/Makefile.am
index f4f12825d..8f4b976ff 100644
--- a/libguile/Makefile.am
+++ b/libguile/Makefile.am
@@ -597,6 +597,7 @@ libpath.h: $(srcdir)/Makefile.in $(top_builddir)/config.status
@echo '#define SCM_PKGDATA_DIR "$(pkgdatadir)"' >> libpath.tmp
@echo '#define SCM_LIBRARY_DIR "$(pkgdatadir)/$(GUILE_EFFECTIVE_VERSION)"'>>libpath.tmp
@echo '#define SCM_SITE_DIR "$(pkgdatadir)/site"' >> libpath.tmp
+ @echo '#define SCM_LIB_DIR "$(pkglibdir)"' >> libpath.tmp
@echo '#define SCM_CCACHE_DIR "$(pkglibdir)/$(GUILE_EFFECTIVE_VERSION)/ccache"' >> libpath.tmp
@echo '#define SCM_EFFECTIVE_VERSION "$(GUILE_EFFECTIVE_VERSION)"' >> libpath.tmp
@echo '#define SCM_BUILD_INFO { \' >> libpath.tmp
@@ -616,9 +617,9 @@ libpath.h: $(srcdir)/Makefile.in $(top_builddir)/config.status
@echo ' { "infodir", "@infodir@" }, \' >> libpath.tmp
@echo ' { "mandir", "@mandir@" }, \' >> libpath.tmp
@echo ' { "includedir", "@includedir@" }, \' >> libpath.tmp
- @echo ' { "pkgdatadir", "@pkgdatadir@" }, \' >> libpath.tmp
- @echo ' { "pkglibdir", "@pkglibdir@" }, \' >> libpath.tmp
- @echo ' { "pkgincludedir", "@pkgincludedir@" }, \' \
+ @echo ' { "pkgdatadir", "$(pkgdatadir)" }, \' >> libpath.tmp
+ @echo ' { "pkglibdir", "$(pkglibdir)" }, \' >> libpath.tmp
+ @echo ' { "pkgincludedir", "$(pkgincludedir)" }, \' \
>> libpath.tmp
@echo ' { "guileversion", "@GUILE_VERSION@" }, \' >> libpath.tmp
@echo ' { "libguileinterface", "@LIBGUILE_INTERFACE@" }, \' \
diff --git a/libguile/dynl.c b/libguile/dynl.c
index dc98e7d17..6b13e65a9 100644
--- a/libguile/dynl.c
+++ b/libguile/dynl.c
@@ -48,6 +48,7 @@ maybe_drag_in_eprintf ()
#include <string.h>
#include "libguile/_scm.h"
+#include "libguile/libpath.h"
#include "libguile/dynl.h"
#include "libguile/smob.h"
#include "libguile/keywords.h"
@@ -113,7 +114,21 @@ sysdep_dynl_func (const char *symb, void *handle, const char *subr)
static void
sysdep_dynl_init ()
{
+ char *env;
+
lt_dlinit ();
+
+ env = getenv ("GUILE_SYSTEM_LTDL_PATH");
+ if (env && strcmp (env, "") == 0)
+ /* special-case interpret system-ltdl-path=="" as meaning no system path,
+ which is the case during the build */
+ ;
+ else if (env)
+ lt_dladdsearchdir (env);
+#ifdef SCM_LIB_DIR
+ else
+ lt_dladdsearchdir (SCM_LIB_DIR);
+#endif
}
scm_t_bits scm_tc16_dynamic_obj;
diff --git a/meta/uninstalled-env.in b/meta/uninstalled-env.in
index 9a6227230..649d1fc47 100644
--- a/meta/uninstalled-env.in
+++ b/meta/uninstalled-env.in
@@ -88,6 +88,10 @@ export GUILE_LOAD_COMPILED_PATH
if ( env | grep -v -q -E '^GUILE_SYSTEM_COMPILED_PATH=' ); then
export GUILE_SYSTEM_COMPILED_PATH=
fi
+# Don't look in installed dirs for dlopen-able modules
+if ( env | grep -v -q -E '^GUILE_SYSTEM_LTDL_PATH=' ); then
+ export GUILE_SYSTEM_LTDL_PATH=
+fi
# handle LTDL_LIBRARY_PATH (no clobber)
ltdl_prefix=""