sane-project-website/old-archive/1998-10/0232.html

216 wiersze
7.3 KiB
HTML

<!-- received="Thu Oct 22 19:58:25 1998 PDT" -->
<!-- sent="Mon, 19 Oct 1998 18:55:52 +0200 (METDST)" -->
<!-- name="Petter Reinholdtsen" -->
<!-- email="pere@hungry.com" -->
<!-- subject="HP/UX 10.20 DLL support" -->
<!-- id="199810191655.SAA08460@zero.cc.uit.no" -->
<!-- inreplyto="" -->
<title>sane-devel: HP/UX 10.20 DLL support</title>
<h1>HP/UX 10.20 DLL support</h1>
<b>Petter Reinholdtsen</b> (<a href="mailto:pere@hungry.com"><i>pere@hungry.com</i></a>)<br>
<i>Mon, 19 Oct 1998 18:55:52 +0200 (METDST)</i>
<p>
<ul>
<li> <b>Messages sorted by:</b> <a href="date.html#232">[ date ]</a><a href="index.html#232">[ thread ]</a><a href="subject.html#232">[ subject ]</a><a href="author.html#232">[ author ]</a>
<!-- next="start" -->
<li> <b>Next message:</b> <a href="0233.html">Carsten Wartmann: "AGFA Focus scanner backend released"</a>
<li> <b>Previous message:</b> <a href="0231.html">Petter Reinholdtsen: "SANE 0.74 patch for HP/UX 10.20"</a>
<!-- nextthread="start" -->
<!-- reply="end" -->
</ul>
<!-- body="start" -->
After some tweaking, I managed to get DLL support running on HP/UX<br>
10.20. Please include the following patch into the next release.<br>
<p>
diff -ru src-0.74/ChangeLog src-0.74-hppa20ux10/ChangeLog<br>
--- src-0.74/ChangeLog Tue Jul 28 07:29:04 1998<br>
+++ src-0.74-hppa20ux10/ChangeLog Mon Oct 19 17:27:26 1998<br>
@@ -1,3 +1,12 @@<br>
+1998-10-19 Petter Reinholdtsen &lt;<a href="mailto:pere@td.org.uit.no">pere@td.org.uit.no</a>&gt;<br>
+<br>
+ * configure.in include/sane/config.h.in backends/dll.c:<br>
+ Use dhl_load() family for DLL support on HP/UX.<br>
+<br>
1998-07-27 David Mosberger-Tang &lt;<a href="mailto:David.Mosberger@acm.org">David.Mosberger@acm.org</a>&gt;<br>
<br>
* Version 0.74 released.<br>
diff -ru src-0.74/backend/dll.c src-0.74-hppa20ux10/backend/dll.c<br>
--- src-0.74/backend/dll.c Fri May 15 09:08:47 1998<br>
+++ src-0.74-hppa20ux10/backend/dll.c Mon Oct 19 18:38:36 1998<br>
@@ -68,6 +68,13 @@<br>
# ifndef RTLD_LAZY<br>
# define RTLD_LAZY 1<br>
# endif<br>
+# define HAVE_DLL<br>
+#endif<br>
+<br>
+/* HP/UX DLL support */<br>
+#if defined (HAVE_SHL_LOAD) &amp;&amp; defined(HAVE_DL_H)<br>
+# include &lt;dl.h&gt;<br>
+# define HAVE_DLL<br>
#endif<br>
<br>
#include &lt;sys/types.h&gt;<br>
@@ -222,14 +229,24 @@<br>
static SANE_Status<br>
load (struct backend *be)<br>
{<br>
-#ifdef HAVE_DLOPEN<br>
- int mode = getenv ("LD_BIND_NOW") ? RTLD_NOW : RTLD_LAZY;<br>
+#ifdef HAVE_DLL<br>
+ int mode = 0;<br>
char *funcname, *src, *dir, *path = 0;<br>
char libname[PATH_MAX];<br>
int i;<br>
FILE *fp = 0;<br>
+<br>
+#if defined(HAVE_DLOPEN)<br>
# define PREFIX "libsane-"<br>
# define POSTFIX ".so.%u"<br>
+ mode = getenv ("LD_BIND_NOW") ? RTLD_NOW : RTLD_LAZY;<br>
+#elif defined(HAVE_SHL_LOAD)<br>
+# define PREFIX "libsane-"<br>
+# define POSTFIX ".sl.%u"<br>
+ mode = BIND_DEFERRED;<br>
+#else<br>
+# error "Tried to compile unsupported DLL."<br>
+#endif /* HAVE_DLOPEN */<br>
<br>
DBG(1, "loading backend %s\n", be-&gt;name);<br>
<br>
@@ -270,13 +287,19 @@<br>
free (path);<br>
if (!fp)<br>
{<br>
- DBG(2, "load: couldn't find "PREFIX"%s"POSTFIX" (%s)\n",<br>
- be-&gt;name, V_MAJOR, strerror (errno));<br>
+ DBG(2, "load: couldn't find %s (%s)\n",<br>
+ libname, strerror (errno));<br>
return SANE_STATUS_INVAL;<br>
}<br>
DBG(2, "dlopen()ing `%s'\n", libname);<br>
<br>
+#ifdef HAVE_DLOPEN<br>
be-&gt;handle = dlopen (libname, mode);<br>
+#elif defined(HAVE_SHL_LOAD)<br>
+ be-&gt;handle = (shl_t)shl_load (libname, mode, 0L);<br>
+#else<br>
+# error "Tried to compile unsupported DLL."<br>
+#endif /* HAVE_DLOPEN */<br>
if (!be-&gt;handle)<br>
{<br>
DBG(2, "dlopen() failed (%s)\n", strerror (errno));<br>
@@ -292,27 +315,41 @@<br>
sprintf (funcname, "_sane_%s_%s", be-&gt;name, op_name[i]);<br>
<br>
/* First try looking up the symbol without a leading underscore. */<br>
+#ifdef HAVE_DLOPEN<br>
op = (void *(*)()) dlsym (be-&gt;handle, funcname + 1);<br>
+#elif defined(HAVE_SHL_LOAD)<br>
+ shl_findsym ((shl_t*)&amp;(be-&gt;handle), funcname + 1, TYPE_UNDEFINED, &amp;op);<br>
+#else<br>
+# error "Tried to compile unsupported DLL."<br>
+#endif /* HAVE_DLOPEN */<br>
if (op)<br>
be-&gt;op[i] = op;<br>
else<br>
{<br>
/* Try again, with an underscore prepended. */<br>
+#ifdef HAVE_DLOPEN<br>
op = (void *(*)()) dlsym (be-&gt;handle, funcname);<br>
+#elif defined(HAVE_SHL_LOAD)<br>
+ shl_findsym (be-&gt;handle, funcname, TYPE_UNDEFINED, &amp;op);<br>
+#else<br>
+# error "Tried to compile unsupported DLL."<br>
+#endif /* HAVE_DLOPEN */<br>
if (op)<br>
be-&gt;op[i] = op;<br>
}<br>
+ if (NULL == op)<br>
+ DBG(2, "unable to find %s\n", funcname);<br>
}<br>
<br>
return SANE_STATUS_GOOD;<br>
<br>
# undef PREFIX<br>
# undef POSTFIX<br>
-#else /* HAVE_DLOPEN */<br>
+#else /* HAVE_DLL */<br>
DBG(1, "load: ignoring attempt to load `%s'; compiled without dl support\n",<br>
be-&gt;name);<br>
return SANE_STATUS_UNSUPPORTED;<br>
-#endif /* HAVE_DLOPEN */<br>
+#endif /* HAVE_DLL */<br>
}<br>
<br>
static SANE_Status<br>
@@ -402,10 +439,19 @@<br>
{<br>
DBG(2, "calling backend `%s's exit function\n", be-&gt;name);<br>
(*be-&gt;op[OP_EXIT]) ();<br>
+#ifdef HAVE_DLL<br>
+<br>
#ifdef HAVE_DLOPEN<br>
if (be-&gt;handle)<br>
dlclose (be-&gt;handle);<br>
-#endif<br>
+#elif defined(HAVE_SHL_LOAD)<br>
+ if (be-&gt;handle)<br>
+ shl_unload(be-&gt;handle);<br>
+#else<br>
+# error "Tried to compile unsupported DLL."<br>
+#endif /* HAVE_DLOPEN */<br>
+<br>
+#endif /* HAVE_DLL */<br>
}<br>
if (!be-&gt;permanent)<br>
{<br>
diff -ru src-0.74/configure.in src-0.74-hppa20ux10/configure.in<br>
--- src-0.74/configure.in Tue Jul 28 07:28:07 1998<br>
+++ src-0.74-hppa20ux10/configure.in Mon Oct 19 18:19:52 1998<br>
@@ -97,6 +97,12 @@<br>
AC_CHECK_HEADERS(dlfcn.h,<br>
[AC_CHECK_LIB(dl,dlopen)<br>
AC_CHECK_FUNCS(dlopen, , enable_dynamic=no)],<br>
+ [enable_dynamic=no])<br>
+<br>
+ # HP/UX DLL handling<br>
+ AC_CHECK_HEADERS(dl.h,<br>
+ [AC_CHECK_LIB(dld,shl_load)<br>
+ AC_CHECK_FUNCS(shl_load, , enable_dynamic=no)],<br>
[enable_dynamic=no])<br>
fi<br>
<br>
diff -ru src-0.74/include/sane/config.h.in src-0.74-hppa20ux10/include/sane/config.h.in<br>
--- src-0.74/include/sane/config.h.in Fri Jul 24 07:36:30 1998<br>
+++ src-0.74-hppa20ux10/include/sane/config.h.in Mon Oct 19 17:51:26 1998<br>
@@ -299,6 +299,12 @@<br>
/* Define if you have the dlopen function. */<br>
#undef HAVE_DLOPEN<br>
<br>
+/* Define if you have the &lt;dl.h&gt; header file. */<br>
+#undef HAVE_DL_H<br>
+<br>
+/* Define if you have the shl_load function. */<br>
+#undef HAVE_SHL_LOAD<br>
+<br>
/* Define if you have the GIMP header files and library. */<br>
#undef HAVE_LIBGIMP_GIMP_H<br>
<br>
<p>
<p>
<pre>
--
Source code, list archive, and docs: <a href="http://www.mostang.com/sane/">http://www.mostang.com/sane/</a>
To unsubscribe: echo unsubscribe sane-devel | mail <a href="mailto:majordomo@mostang.com">majordomo@mostang.com</a>
</pre>
<!-- body="end" -->
<p>
<ul>
<!-- next="start" -->
<li> <b>Next message:</b> <a href="0233.html">Carsten Wartmann: "AGFA Focus scanner backend released"</a>
<li> <b>Previous message:</b> <a href="0231.html">Petter Reinholdtsen: "SANE 0.74 patch for HP/UX 10.20"</a>
<!-- nextthread="start" -->
<!-- reply="end" -->
</ul>