Description: Enable to load libeusgeo from EUSDIR/ARCHDIR/lib and  /usr/lib/@@DEB_HOST_MULTIARCH@@
 Debian installs plugin libraries to  /usr/lib/@@DEB_HOST_MULTIARCH@@,
 so enable to load libesugeo/libeusx/libeusgl from either
 EUSDIR/ARCHDIR/lib or /usr/lib/@@DEB_HOST_MULTIARCH@@
 we introduced lisp::*deb-host-multiarch* to set DEB_HOST_MULTIARCH
 based on archtecture.
 .
 This patch also drop link to libeus* from executables and link
 opengl/src/util.c to eusgl.
 Set compile_gl.log to depend eus for compile.
 .
 euslisp (9.26-1) unstable; urgency=low
 .
   * Initial debian release (Closes: Bug#942317).
Author: Kei Okada <kei.okada@gmail.com>

---
Origin: other
Reviewed-By: Kei Okada <kei.okada@gmail.com>
Last-Update: 2019-12-07

diff --git a/lisp/l/eusstart.l b/lisp/l/eusstart.l
index 932556a..e589e1f 100644
--- a/lisp/l/eusstart.l
+++ b/lisp/l/eusstart.l
@@ -374,7 +374,38 @@
 	(sys:alloc 50000)
 	(in-package "GEOMETRY")
 #-:SunOS4.1
-	(sys::exec-module-init "intersection" nil)
+	(unless (sys::exec-module-init "intersection" nil)
+	  (let ((libeusgeo (find-if #'(lambda (f) (probe-file f))
+				    (list (concatenate string *eusdir*
+						       (format nil "~A/lib/libeusgeo.so"
+							       (cond ((member :solaris2 *features*)  "SunOS5")
+								     ((member :irix *features*) "IRIX")
+								     ((member :irix6 *features*) "IRIX6")
+								     ((member :darwin *features*) "Darwin")
+								     ((member :sh4 *features*) "LinuxSH4")
+								     ((member :linux *features*)
+								      (cond
+								       ((member :x86_64 *features*)
+									"Linux64")
+								       ((member :arm *features*)
+									"LinuxARM")
+								       (t "Linux")))
+								     ((member :SunOS4.1 *features*) "SunOS4")
+								     ((member :Windows *features*) "Windows")
+								     ((member :Windows95 *features*) "Win95")
+								     ((member :WindowsNT *features*) "WinNT")
+								     ((member :alpha *features*) "Alpha")
+								     ((member :cygwin *features*) "Cygwin"))))
+					  (format nil "/usr/lib/~A/euslisp/libeusgeo.so" lisp::*deb-host-multiarch*)))))
+	    (when (eq (unix::access libeusgeo) t)
+	      (let ((libmod (load libeusgeo :entry nil))
+		    (modules `("intersection" "geoclasses" "geopack" "geobody"
+			       "primt" "compose" "polygon" "viewing" "viewport"
+			       "viewsurface" "hid" "shadow" "bodyrel"
+				"dda")))
+		(nconc sys::*load-entries*
+		       (sys::list-module-initializers libmod modules))
+		(sys::exec-module-init "intersection" nil)))))
 #+:SunOS4.1
 	(unless (sys::exec-module-init "intersection" nil)
 	  (let ((libeusgeo (concatenate string *eusdir* 
diff --git a/lib/eusrt.l b/lib/eusrt.l
index 8415575..f533b0b 100644
--- a/lib/eusrt.l
+++ b/lib/eusrt.l
@@ -46,7 +46,36 @@
 ;; initilize Xlib interface
 (when (and 
        (or (substringp "sx" (pathname-name *program-name*)) (substringp "gl" (pathname-name *program-name*)))
-	(sys::exec-module-init "xforeign" "xwindow/loadx.l")
+       (let ((libeusx (find-if #'(lambda (f) (probe-file f))
+			       (list (concatenate string *eusdir*
+						  (format nil "~A/lib/libeusx.so"
+							  (cond ((member :solaris2 *features*)  "SunOS5")
+								((member :irix *features*) "IRIX")
+								((member :irix6 *features*) "IRIX6")
+								((member :darwin *features*) "Darwin")
+								((member :sh4 *features*) "LinuxSH4")
+								((member :linux *features*)
+								 (cond
+								  ((member :x86_64 *features*)
+								   "Linux64")
+								  ((member :arm *features*)
+								   "LinuxARM")
+								  (t "Linux")))
+								((member :SunOS4.1 *features*) "SunOS4")
+								((member :Windows *features*) "Windows")
+								((member :Windows95 *features*) "Win95")
+								((member :WindowsNT *features*) "WinNT")
+								((member :alpha *features*) "Alpha")
+								((member :cygwin *features*) "Cygwin"))))
+				     (format nil "/usr/lib/~A/euslisp/libeusx.so" lisp::*deb-host-multiarch*)))))
+	 (if (eq (unix::access libeusx) t)
+	     (let ((libmod (load libeusx :entry nil))
+		   (modules `("xforeign" "Xdecl" "Xeus" "Xevent" "Xgraphics" "Xcolor" "Xpanel"
+			      "Xitem" "Xtext" "Xmenu" "Xscroll" "Xcanvas" "Xtop" "Xapplwin")))
+	       (nconc sys::*load-entries*
+		      (sys::list-module-initializers libmod modules))
+	       (sys::exec-module-init "xforeign"))
+	   (sys::exec-module-init "xforeign" "xwindow/loadx.l")))
 #+(and :thread :x11r6.1)
 	(InitThreads)
 	)
@@ -86,6 +113,11 @@
 ;;
 	(unless (find-symbol "*XLIB*") ; for SunOS4 with .so bug
 		(in-package "IMAGE")
+		(let ((libmod (find "libeusgeo" lisp::*loaded-modules*
+				    :key #'lisp::load-module-file-name :test #'equal))
+		      (modules `("pixword" "RGBHLS" "convolve" "piximage" "pbmfile" "image_correlation")))
+		  (nconc sys::*load-entries*
+			 (sys::list-module-initializers libmod modules)))
 		(sys::exec-module-init "pixword")
 		(sys::exec-module-init "RGBHLS")
 		(sys::exec-module-init "convolve")
diff --git a/lib/eusglrt.l b/lib/eusglrt.l
index ac6a3b5..60fea6c 100644
--- a/lib/eusglrt.l
+++ b/lib/eusglrt.l
@@ -22,7 +22,37 @@
 ;;      )
 ;; irix
    (push :GL *features*)
-   (sys::exec-module-init "oglforeign" "opengl/src/loadgl.l")
+   (let ((libeusgl (find-if #'(lambda (f) (probe-file f))
+			    (list (concatenate string *eusdir*
+					       (format nil "~A/lib/libeusgl.so"
+						       (cond ((member :solaris2 *features*)  "SunOS5")
+							     ((member :irix *features*) "IRIX")
+							     ((member :irix6 *features*) "IRIX6")
+							     ((member :darwin *features*) "Darwin")
+							     ((member :sh4 *features*) "LinuxSH4")
+							     ((member :linux *features*)
+							      (cond
+							       ((member :x86_64 *features*)
+								"Linux64")
+							       ((member :arm *features*)
+								"LinuxARM")
+							       (t "Linux")))
+							     ((member :SunOS4.1 *features*) "SunOS4")
+							     ((member :Windows *features*) "Windows")
+							     ((member :Windows95 *features*) "Win95")
+							     ((member :WindowsNT *features*) "WinNT")
+							     ((member :alpha *features*) "Alpha")
+							     ((member :cygwin *features*) "Cygwin"))))
+				  (format nil "/usr/lib/~A/euslisp/libeusgl.so" lisp::*deb-host-multiarch*)))))
+     (if (eq (unix::access libeusgl) t)
+	 (let ((libmod (load libeusgl :entry nil))
+	       (modules `("oglforeign" "gldecl" "glconst" "glforeign" "gluconst" "gluforeign" "glxconst"
+			  "glxforeign" "eglforeign" "eglfunc" "glutil" "gltexture" "glprim"
+			  "gleus" "glview" "toiv")))
+	   (nconc sys::*load-entries*
+		  (sys::list-module-initializers libmod modules))
+	   (sys::exec-module-init "oglforeign"))
+       (sys::exec-module-init "oglforeign" "opengl/src/loadgl.l")))
    (in-package "GL")
    (use-package "GEOMETRY")
    (unless (find-symbol "*LIBGL*") ; for SunOS4 with .so bug
diff --git a/lisp/Makefile.generic2 b/lisp/Makefile.generic2
index 3c7cdab..650d493 100644
--- a/lisp/Makefile.generic2
+++ b/lisp/Makefile.generic2
@@ -200,5 +200,5 @@
 $(ADLIBDIR)/$(LIBEUSGL):	$(GLCOBJECTS) $(GLOBJECTS)
 	( $(LD) $(SOFLAGS) -o $(ADLIBDIR)/$(LIBEUSGL) \
-		$(GLCOBJECTS) $(GLOBJECTS))
+		$(OBJDIR)/oglforeign.c.o $(OBJDIR)/eglfunc.o $(GLOBJECTS))
 
 $(CDIR)/makedate.c: $(filter-out $(CDIR)/makedate.c, $(shell echo $(CDIR)/*.c)) \
@@ -280,7 +280,7 @@
 		$(LOBJECTS) $(LCOBJECTS)  $(COMPOBJECTS) \
 		$(MTCOBJECTS) $(RGCOBJECTS) $(MTOBJECTS) \
 		$(MAPOPTION) \
-		$(GLLIB) $(XLIB) $(RAWLIB) \
+		$(OBJDIR)/util.o $(GLLIB) $(XLIB) $(RAWLIB) \
 		>$(ADLIBDIR)/eusmap ;)
 
 $(BINDIR)/raweus.so:	$(NOKOBJECTS) $(KOBJECTS)  $(LOBJECTS) \
@@ -335,8 +335,8 @@ $(XOBJECTS) $(XTKOBJECTS): $(OBJDIR)/compile_xwindow.log
 $(OBJDIR)/compile_xwindow.log: $(BINDIR)/eusg $(patsubst $(OBJDIR)/%.o,$(XWINDOWDIR)/%.l,$(XOBJECTS)) $(patsubst $(OBJDIR)/%.o,$(XWINDOWDIR)/%.l,$(XTKOBJECTS))
 	(cd $(XWINDOWDIR); $(BINDIR)/euscomp <../$(TOOLDIR)/compile_xwindow.l > $(OBJDIR)/compile_xwindow.log)
 $(GLOBJECTS): $(OBJDIR)/compile_gl.log
-$(OBJDIR)/compile_gl.log: $(BINDIR)/eusx $(patsubst $(OBJDIR)/%.o,$(GLDIR)/%.l,$(GLOBJECTS))
+$(OBJDIR)/compile_gl.log: $(BINDIR)/eus $(patsubst $(OBJDIR)/%.o,$(GLDIR)/%.l,$(GLOBJECTS))
 	($(BINDIR)/eusx <$(TOOLDIR)/compile_gl.l > $(OBJDIR)/compile_gl.log)
 $(XWINDOWDIR)/Xlibfuncs.o:	$(XWINDOWDIR)/Xlibfuncs.c
 	(cd $(XWINDOWDIR) ; \
 	 $(CC) -c $(CFLAGS) -o $(OBJDIR)/Xlibfuncs.o $(OFLAGS) Xlibfuncs.c)
diff --git a/lisp/image/jpeg/eusjpeg.l b/lisp/image/jpeg/eusjpeg.l
index 5c3b2fe..28c2bb9 100644
--- a/lisp/image/jpeg/eusjpeg.l
+++ b/lisp/image/jpeg/eusjpeg.l
@@ -17,7 +17,28 @@
 
 (eval-when (load eval)
   (let ((m
-         (load-foreign (format nil "~A/~A/lib/jpegmemcd" *eusdir* (unix:getenv "ARCHDIR")))))
+         (load-foreign
+          (find-if #'probe-file
+		   (list (format nil "~A/~A/lib/jpegmemcd.so" *eusdir*
+				 (cond ((member :solaris2 *features*)  "SunOS5")
+				       ((member :irix *features*) "IRIX")
+				       ((member :irix6 *features*) "IRIX6")
+				       ((member :darwin *features*) "Darwin")
+				       ((member :sh4 *features*) "LinuxSH4")
+				       ((member :linux *features*)
+					(cond
+					 ((member :x86_64 *features*)
+					  "Linux64")
+					 ((member :arm *features*)
+					  "LinuxARM")
+					 (t "Linux")))
+				       ((member :SunOS4.1 *features*) "SunOS4")
+				       ((member :Windows *features*) "Windows")
+				       ((member :Windows95 *features*) "Win95")
+				       ((member :WindowsNT *features*) "WinNT")
+				       ((member :alpha *features*) "Alpha")
+				       ((member :cygwin *features*) "Cygwin")))
+	  (format nil "/usr/lib/~A/euslisp/jpegmemcd.so" lisp::*deb-host-multiarch*))))))
     (defforeign jpeg_header m "JPEG_header" () :integer)
     (defforeign jpeg_decompress m "JPEG_decompress" () :integer)
     (defforeign jpeg_compress m "JPEG_compress" () :integer)))
diff --git a/test/loader.l b/test/loader.l
index b671480..e45fdb1 100644
--- a/test/loader.l
+++ b/test/loader.l
@@ -4,7 +4,7 @@
 
 ;; check because ldmodule have #if ARM for objname, handle
 (deftest test-load
-  (let ((libpath (format nil "~A/~A/lib/libeusgeo.so" *eusdir*
+  (let ((libpath (find-if #'probe-file (list (format nil "~A/~A/lib/libeusgeo.so" *eusdir*
                          (cond ((member :solaris2 *features*)  "SunOS5")
                                ((member :irix *features*) "IRIX")
                                ((member :irix6 *features*) "IRIX6")
@@ -22,7 +22,8 @@
                                ((member :Windows95 *features*) "Win95")
                                ((member :WindowsNT *features*) "WinNT")
                                ((member :alpha *features*) "Alpha")
-                               ((member :cygwin *features*) "Cygwin"))))
+                               ((member :cygwin *features*) "Cygwin")))
+			  (format nil "/usr/lib/~A/euslisp/libeusgeo.so" lisp::*deb-host-multiarch*))))
         libmod)
     (format *error-output* "loading ~A~%" libpath)
     (setq libmod (load libpath :entry nil))
diff --git a/lisp/c/eus.c b/lisp/c/eus.c
index c2b8757..8821f0d 100644
--- a/lisp/c/eus.c
+++ b/lisp/c/eus.c
@@ -1247,6 +1247,7 @@ register context *ctx;
   Spevalof(PACKAGE)=userpkg; 
 
   defvar(ctx,"*PROGRAM-NAME*",makestring(progname,strlen(progname)),lisppkg);
+  defvar(ctx,"*DEB-HOST-MULTIARCH*",makestring("@@DEB_HOST_MULTIARCH@@",strlen("@@DEB_HOST_MULTIARCH@@")),lisppkg);
 
   /* exec_module_initializers(); */
   ctx->vsp=ctx->stack;
diff --git a/lib/llib/pgsql.l b/lib/llib/pgsql.l
index 2cf36e0..55d2db3 100644
--- a/lib/llib/pgsql.l
+++ b/lib/llib/pgsql.l
@@ -97,6 +97,7 @@
                ((probe-file "/usr/lib/libpq.so") (load "/usr/lib/libpq.so"))
                ((probe-file "/usr/lib/x86_64-linux-gnu/libpq.so") (load "/usr/lib/x86_64-linux-gnu/libpq.so"))
                ((probe-file "/usr/lib/i386-linux-gnu/libpq.so") (load "/usr/lib/i386-linux-gnu/libpq.so"))
+	       ((probe-file (format nil "/usr/lib/~A/libpq.so" lisp::*deb-host-multiarch*)) (load (format nil "/usr/lib/~A/libpq.so" lisp::*deb-host-multiarch*)))
                (t nil)))
 #+:cygwin
 (setq *libpq* (cond
