Browse Source

Quick hack for ticket #1300 to workaround dlopen can't find library

This was from jinmei.

The real fix will be done in #1292.
reed 13 years ago
parent
commit
930d4317ed
2 changed files with 17 additions and 0 deletions
  1. 1 0
      src/bin/bind10/Makefile.am
  2. 16 0
      src/bin/bind10/bind10_src.py.in

+ 1 - 0
src/bin/bind10/Makefile.am

@@ -33,6 +33,7 @@ $(PYTHON_LOGMSGPKG_DIR)/work/bind10_messages.py : bind10_messages.mes
 # this is done here since configure.ac AC_OUTPUT doesn't expand exec_prefix
 bind10: bind10_src.py $(PYTHON_LOGMSGPKG_DIR)/work/bind10_messages.py
 	$(SED) -e "s|@@PYTHONPATH@@|@pyexecdir@|" \
+	       -e "s|@@LIBDIR@@|$(libdir)|" \
 	       -e "s|@@LIBEXECDIR@@|$(pkglibexecdir)|" bind10_src.py >$@
 	chmod a+x $@
 

+ 16 - 0
src/bin/bind10/bind10_src.py.in

@@ -579,6 +579,22 @@ class BoB:
         self.start_simple("b10-xfrout", c_channel_env)
 
     def start_xfrin(self, c_channel_env):
+        # XXX: a quick-hack workaround.  xfrin will implicitly use dynamically
+        # loadable data source modules, which will be installed in $(libdir).
+        # On some OSes (including MacOS X and *BSDs) the main process (python)
+        # cannot find the modules unless they are located in a common shared
+        # object path or a path in the (DY)LD_LIBRARY_PATH.  We should seek
+        # a cleaner solution, but for a short term workaround we specify the
+        # path here, unconditionally, and without even bothering which
+        # environment varialbe should be used.
+        if not "B10_FROM_SOURCE" in os.environ:
+            cur_path = os.getenv('DYLD_LIBRARY_PATH')
+            cur_path = '' if cur_path is None else ':' + cur_path
+            c_channel_env['DYLD_LIBRARY_PATH'] = "@@LIBDIR@@" + cur_path
+
+            cur_path = os.getenv('LD_LIBRARY_PATH')
+            cur_path = '' if cur_path is None else ':' + cur_path
+            c_channel_env['LD_LIBRARY_PATH'] = "@@LIBDIR@@" + cur_path
         self.start_simple("b10-xfrin", c_channel_env)
 
     def start_zonemgr(self, c_channel_env):