[sane-devel] Re: Darwin/MacOSX
Peter O'Gorman
peter@pogma.com
Sun, 1 Dec 2002 20:00:59 +0900
--Apple-Mail-7-303717071
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=US-ASCII;
format=flowed
On Saturday, November 30, 2002, at 11:53 PM, Karl Heinz Kremer wrote:
> Here is all the information you need to get the latest version from
> CVS:
>
> http://www.student.uit.no/~pere/linux/sane/cvs-server.html
>
Thanks, here is my diff, do with it what you will :-). There is still
the libtool archive_cmds issue, I got around it for my test just now by
patching the generated libtool script, it may be easier to recommend
using gcc-2.95 (asking users to type 'sudo gcc_select 2') but I haven't
tried it with gcc2.
Again, this is inlined and attached:
Index: configure.in
===================================================================
RCS file: /cvsroot/external/sane/sane-backends/configure.in,v
retrieving revision 1.87
diff -u -r1.87 configure.in
--- configure.in 2002/11/29 18:19:45 1.87
+++ configure.in 2002/12/01 10:47:35
@@ -206,6 +206,7 @@
SANE_V4L_VERSION
dnl Checks for dll libraries: dl
+DARWINLTMODULEFLAG=""
if test "${enable_dynamic}" != "no"; then
AC_CHECK_HEADERS(dlfcn.h,
[AC_CHECK_LIB(dl,dlopen, DL_LIB=-ldl)
@@ -223,8 +224,16 @@
AC_CHECK_FUNCS(shl_load, enable_dynamic=yes,)
LIBS="${saved_LIBS}"
],)
+
+ #Mac OS X/Darwin
+ AC_CHECK_HEADERS(mach-o/dyld.h,
+ [AC_CHECK_FUNCS(NSLinkModule, enable_dynamic=yes,)
+ DARWINLTMODULEFLAG="-module"
+ DL_LIB=""
+ ],)
fi
AC_SUBST(DL_LIB)
+AC_SUBST(DARWINLTMODULEFLAG)
dnl Checks for Backend libraries.
AC_CHECK_LIB(m,sqrt)
@@ -373,8 +382,17 @@
AC_SUBST(NET)
AC_SUBST(SANED)
if test "${HAVE_LIBUSB}" = "yes" ; then
- echo "enabling SM3600 backend"
- SM3600=sm3600
+ case "${host_os}" in
+ darwin*)
+dnl This causes segfaults for me
+ echo "disabling SM3600 backend for darwin"
+ SM3600=
+ ;;
+ *)
+ echo "enabling SM3600 backend"
+ SM3600=sm3600
+ ;;
+ esac
else
echo "disabling SM3600 backend"
SM3600=
Index: backend/Makefile.in
===================================================================
RCS file: /cvsroot/external/sane/sane-backends/backend/Makefile.in,v
retrieving revision 1.64
diff -u -r1.64 Makefile.in
--- Makefile.in 2002/11/25 20:38:20 1.64
+++ Makefile.in 2002/12/01 10:47:36
@@ -32,7 +32,7 @@
DLL_PRELOAD = @DLL_PRELOAD@
DLL_PRELOAD_EXTRAS = $(foreach be,$(DLL_PRELOAD),$($(addprefix
EXTRA_,$(be))))\
@DJPEG@
-
+DARWINLTMODULEFLAG = @DARWINLTMODULEFLAG@
MKDIR = $(top_srcdir)/mkinstalldirs
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -148,7 +148,7 @@
libsane-%.la: %.lo %-s.lo $(EXTRA) $(LIBOBJS)
@$(LIBTOOL) $(MLINK) $(CC) -export-dynamic -o $@ $($*_LIBS) \
$(LDFLAGS) $(BACKENDLIBS) $^ -rpath $(libsanedir) \
- -version-info $(V_MAJOR):$(V_REV):$(V_MINOR)
+ -version-info $(V_MAJOR):$(V_REV):$(V_MINOR) $(DARWINLTMODULEFLAG)
%-s.lo: %-s.c
@$(LIBTOOL) $(MCOMP) $(COMPILE) -DSTUBS -DBACKEND_NAME=$* $<
Index: backend/dll.c
===================================================================
RCS file: /cvsroot/external/sane/sane-backends/backend/dll.c,v
retrieving revision 1.15
diff -u -r1.15 dll.c
--- dll.c 2002/11/29 18:19:49 1.15
+++ dll.c 2002/12/01 10:47:36
@@ -81,6 +81,12 @@
# define HAVE_DLL
#endif
+/* Mac OS X/Darwin support */
+#if defined (HAVE_NSLINKMODULE) && defined(HAVE_MACH_O_DYLD_H)
+# include <mach-o/dyld.h>
+# define HAVE_DLL
+#endif
+
#include <sys/types.h>
#include "sane/sane.h"
@@ -93,6 +99,8 @@
# define PATH_MAX 1024
#endif
+
+
#include "sane/sanei_config.h"
#define DLL_CONFIG_FILE "dll.conf"
#define DLL_ALIASES_FILE "dll.aliases"
@@ -250,6 +258,20 @@
*bep = be;
return SANE_STATUS_GOOD;
}
+#if defined(HAVE_NSLINKMODULE)
+
+static const char *dyld_get_error_str();
+static const char *dyld_get_error_str()
+{
+ NSLinkEditErrors c;
+ int errorNumber;
+ const char *fileName;
+ const char *errorString;
+ NSLinkEditError(&c,&errorNumber,&fileName,&errorString);
+ return errorString;
+}
+#endif
+
static SANE_Status
load (struct backend *be)
@@ -274,6 +296,11 @@
# define PREFIX "libsane-"
# define POSTFIX ".sl.%u"
mode = BIND_DEFERRED;
+#elif defined(HAVE_NSLINKMODULE)
+# define PREFIX "libsane-"
+# define POSTFIX ".%u.so"
+ mode = NSLINKMODULE_OPTION_RETURN_ON_ERROR +
+ NSLINKMODULE_OPTION_PRIVATE;
#else
# error "Tried to compile unsupported DLL."
#endif /* HAVE_DLOPEN */
@@ -344,6 +371,15 @@
be->handle = dlopen (libname, mode);
#elif defined(HAVE_SHL_LOAD)
be->handle = (shl_t)shl_load (libname, mode, 0L);
+#elif defined(HAVE_NSLINKMODULE)
+ {
+ NSObjectFileImage objectfile_img=NULL;
+ if ( NSCreateObjectFileImageFromFile( libname, &objectfile_img )
== NSObjectFileImageSuccess)
+ {
+ be->handle = NSLinkModule( objectfile_img, libname, mode );
+ NSDestroyObjectFileImage( objectfile_img );
+ }
+ }
#else
# error "Tried to compile unsupported DLL."
#endif /* HAVE_DLOPEN */
@@ -351,6 +387,8 @@
{
#ifdef HAVE_DLOPEN
DBG(1, "load: dlopen() failed (%s)\n", dlerror());
+#elif defined(HAVE_NSLINKMODULE)
+ DBG(1, "load: dyld error (%s)\n", dyld_get_error_str());
#else
DBG(1, "load: dlopen() failed (%s)\n", strerror (errno));
#endif
@@ -370,6 +408,18 @@
op = (void *(*)(void)) dlsym (be->handle, funcname + 1);
#elif defined(HAVE_SHL_LOAD)
shl_findsym ((shl_t*)&(be->handle), funcname + 1,
TYPE_UNDEFINED, &op);
+#elif defined(HAVE_NSLINKMODULE)
+ {
+ NSSymbol *nssym=NSLookupSymbolInModule( be->handle, funcname )
;
+ if (!nssym)
+ {
+ DBG(15, "dyld error: %s\n", dyld_get_error_str());
+ }
+ else
+ {
+ op = (void *(*)(void))NSAddressOfSymbol( nssym );
+ }
+ }
#else
# error "Tried to compile unsupported DLL."
#endif /* HAVE_DLOPEN */
@@ -382,6 +432,18 @@
op = (void *(*)(void)) dlsym (be->handle, funcname);
#elif defined(HAVE_SHL_LOAD)
shl_findsym (be->handle, funcname, TYPE_UNDEFINED, &op);
+#elif defined(HAVE_NSLINKMODULE)
+ {
+ NSSymbol *nssym=NSLookupSymbolInModule( be->handle, funcname )
;
+ if (!nssym)
+ {
+ DBG(15, "dyld error: %s\n", dyld_get_error_str());
+ }
+ else
+ {
+ op = (void *(*)(void))NSAddressOfSymbol( nssym );
+ }
+ }
#else
# error "Tried to compile unsupported DLL."
#endif /* HAVE_DLOPEN */
@@ -619,6 +681,14 @@
#elif defined(HAVE_SHL_LOAD)
if (be->handle)
shl_unload(be->handle);
+#elif defined(HAVE_NSLINKMODULE)
+ if (be->handle)
+ NSUnLinkModule(be->handle,
+ NSUNLINKMODULE_OPTION_NONE
+# ifdef __ppc__
+ | NSUNLINKMODULE_OPTION_RESET_LAZY_REFERENCES
+# endif
+ );
#else
# error "Tried to compile unsupported DLL."
#endif /* HAVE_DLOPEN */
--Apple-Mail-7-303717071
Content-Disposition: attachment;
filename=nsmodule.diff.gz
Content-Transfer-Encoding: base64
Content-Type: application/x-gzip;
x-unix-mode=0644;
name="nsmodule.diff.gz"
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
8GMZ7V8YAAA=
--Apple-Mail-7-303717071
Content-Transfer-Encoding: 7bit
Content-Type: text/plain;
charset=US-ASCII;
format=flowed
--Apple-Mail-7-303717071--