[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--