diff --git a/.travis.sh b/.travis.sh index 1931ce89f..61884c076 100755 --- a/.travis.sh +++ b/.travis.sh @@ -95,8 +95,8 @@ if [[ "$QEMU" != "" ]]; then export GIT_SSL_NO_VERIFY=1 git clone http://salsa.debian.org/science-team/euslisp /tmp/euslisp-dfsg for file in $(cat /tmp/euslisp-dfsg/debian/patches/series); do - # skip patches already applied by https://github.com/euslisp/EusLisp/pull/482, https://github.com/euslisp/EusLisp/pull/511, https://github.com/euslisp/EusLisp/pull/523, https://github.com/euslisp/EusLisp/pull/524, https://github.com/euslisp/EusLisp/pull/525 - [[ $file =~ use-rtld-global-loadelf.patch|fix-arm-ldflags.patch|fix-library-not-linked-against-libc.patch|fix-manpage-has-bad-whatis-entry-on-man-pages.patch|fix-jpegmemcd-compile-error.patch|install-bin-lib-man-to-destdir.patch|install-eusjpeg-lib.patch|fix-lintian-typo.patch|fix-makefile-linux-MACHINE.patch|fix-makefile-generic1-version.patch|fix-localtime-arm32.patch|fix-ppc64el-test.patch|fix-for-blhc.patch ]] && continue; + # skip patches already applied by https://github.com/euslisp/EusLisp/pull/482, https://github.com/euslisp/EusLisp/pull/511, https://github.com/euslisp/EusLisp/pull/522, https://github.com/euslisp/EusLisp/pull/523, https://github.com/euslisp/EusLisp/pull/524, https://github.com/euslisp/EusLisp/pull/525 + [[ $file =~ use-rtld-global-loadelf.patch|fix-arm-ldflags.patch|fix-library-not-linked-against-libc.patch|fix-manpage-has-bad-whatis-entry-on-man-pages.patch|fix-jpegmemcd-compile-error.patch|install-bin-lib-man-to-destdir.patch|install-eusjpeg-lib.patch|fix-lintian-typo.patch|fix-makefile-linux-MACHINE.patch|fix-makefile-generic1-version.patch|fix-localtime-arm32.patch|fix-ppc64el-test.patch|fix-for-blhc.patch|remove-libeus-link-from-exe.patch|load-lib-from-eusdir-arch-lib.patch ]] && continue; # skip patch already applied by https://github.com/euslisp/EusLisp/pull/441, https://github.com/euslisp/EusLisp/pull/509, https://github.com/euslisp/EusLisp/pull/512, https://github.com/euslisp/EusLisp/pull/514, https://github.com/euslisp/EusLisp/pull/517 if [[ $file =~ fix-for-reprotest.patch ]]; then filterdiff -p1 -x 'lisp/image/jpeg/makefile' -x 'lisp/comp/comp.l' < /tmp/euslisp-dfsg/debian/patches/$file > /tmp/euslisp-dfsg/debian/patches/$file-fix diff --git a/lib/eusglrt.l b/lib/eusglrt.l index ac6a3b522..090b04500 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/lib/eusrt.l b/lib/eusrt.l index 841557508..663f35a22 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 +115,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/llib/pgsql.l b/lib/llib/pgsql.l index 2cf36e081..55d2db3be 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 diff --git a/lisp/Makefile.Darwin b/lisp/Makefile.Darwin index df7814f41..e811f24d9 100644 --- a/lisp/Makefile.Darwin +++ b/lisp/Makefile.Darwin @@ -82,7 +82,7 @@ XLIB= -L/opt/local/lib -L/opt/X11/lib -lX11 # specify directories where euslisp's libraries are located. EUSLIB= -L$(ADLIBDIR) -GLLIB= -L$/opt/X11/lib -lGLU -lGL -lXext -leusgl +GLLIB= -L$/opt/X11/lib -lGLU -lGL -lXext # POSIX Thread THREADDEP=mthread_posix.c diff --git a/lisp/Makefile.Linux b/lisp/Makefile.Linux index e54a713e6..6201e56ee 100644 --- a/lisp/Makefile.Linux +++ b/lisp/Makefile.Linux @@ -128,7 +128,7 @@ XLIB= -L/usr/X11R6/lib -lX11 # specify directories where euslisp's libraries are located. EUSRPATH=-R$(ADLIBDIR):$(EUSDIR)/lib/Linux EUSLIB= -Xlinker $(EUSRPATH) -L$(ADLIBDIR) -GLLIB= -L$(ADLIBDIR) -lGLU -lGL -lXext -leusgl +GLLIB= -L$(ADLIBDIR) -lGLU -lGL -lXext # POSIX Thread THREADDEP=mthread_posix.c diff --git a/lisp/Makefile.Linux.thread b/lisp/Makefile.Linux.thread index 2e0fd806e..c6dc04fdd 100644 --- a/lisp/Makefile.Linux.thread +++ b/lisp/Makefile.Linux.thread @@ -85,7 +85,7 @@ XLIB= -L/usr/X11R6/lib -lX11 # specify directories where euslisp's libraries are located. EUSRPATH=-R$(ADLIBDIR):$(EUSDIR)/lib/Linux EUSLIB= -Xlinker $(EUSRPATH) -L$(ADLIBDIR) -GLLIB= -L$(ADLIBDIR) -lGLU -lGL -lXext -leusgl +GLLIB= -L$(ADLIBDIR) -lGLU -lGL -lXext # POSIX Thread THREADDEP=mthread_posix.c diff --git a/lisp/Makefile.Linux64 b/lisp/Makefile.Linux64 index cf1f198e1..0f59324f7 100644 --- a/lisp/Makefile.Linux64 +++ b/lisp/Makefile.Linux64 @@ -73,7 +73,7 @@ XLIB= -L/usr/X11R6/lib -lX11 # specify directories where euslisp's libraries are located. EUSRPATH=-R$(ADLIBDIR) EUSLIB= -Xlinker $(EUSRPATH) -L$(ADLIBDIR) -GLLIB= -L$(ADLIBDIR) -lGLU -lGL -lXext -leusgl +GLLIB= -L$(ADLIBDIR) -lGLU -lGL -lXext # POSIX Thread THREADDEP=mthread_posix.c diff --git a/lisp/Makefile.LinuxARM b/lisp/Makefile.LinuxARM index e49262b35..7a9cd04ea 100644 --- a/lisp/Makefile.LinuxARM +++ b/lisp/Makefile.LinuxARM @@ -98,7 +98,7 @@ XLIB= -L/usr/X11R6/lib -lX11 # specify directories where euslisp's libraries are located. EUSLIB= -Xlinker -R$(ADLIBDIR):$(EUSDIR)/lib/LinuxARM -L$(ADLIBDIR) -GLLIB= -L$(ADLIBDIR) -lGLU -lGL -lXext -leusgl +GLLIB= -L$(ADLIBDIR) -lGLU -lGL -lXext # POSIX Thread THREADDEP=mthread_posix.c diff --git a/lisp/Makefile.generic2 b/lisp/Makefile.generic2 index 2fe2f45ed..7185514be 100644 --- a/lisp/Makefile.generic2 +++ b/lisp/Makefile.generic2 @@ -199,7 +199,7 @@ $(ADLIBDIR)/$(LIBEUSGEO): $(GEOOBJECTS) $(GEOCOBJECTS) \ $(IMGCOBJECTS) $(IMGOBJECTS)) $(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)) \ $(LDIR)/*.l $(GEODIR)/*.l $(COMPDIR)/*.l \ @@ -234,7 +234,7 @@ $(BINDIR)/eusg: $(BINDIR)/eus2 $(MTOBJECTS) $(ADLIBDIR)/$(LIBEUSGEO) ($(CC) -o $(BINDIR)/eusg $(LDFLAGS) \ $(NOKOBJECTS) $(KOBJECTS) $(KSOBJECTS) $(LOBJECTS) \ $(LCOBJECTS) $(MTCOBJECTS) $(RGCOBJECTS) $(MTOBJECTS) \ - $(COMPOBJECTS) $(EUSLIB) $(GEOLIB) $(RAWLIB) ; \ + $(COMPOBJECTS) $(RAWLIB) ; \ cd $(BINDIR); rm -f euscomp; ln -sf eusg euscomp) $(BINDIR)/eusx: $(NOKOBJECTS) $(KOBJECTS) $(KSOBJECTS) $(LOBJECTS) \ @@ -246,7 +246,7 @@ $(BINDIR)/eusx: $(NOKOBJECTS) $(KOBJECTS) $(KSOBJECTS) $(LOBJECTS) \ $(NOKOBJECTS) $(KOBJECTS) $(KSOBJECTS) \ $(LOBJECTS) $(LCOBJECTS) $(COMPOBJECTS) \ $(MTCOBJECTS) $(RGCOBJECTS) $(MTOBJECTS) \ - $(EUSLIB) $(EUSXLIB) $(GEOLIB) $(XLIB) $(RAWLIB);) + $(RAWLIB);) $(BINDIR)/eus: $(BINDIR)/eusx $(NOKOBJECTS) $(KOBJECTS) $(KSOBJECTS) $(LOBJECTS) \ $(LCOBJECTS) $(COMPOBJECTS) \ @@ -257,7 +257,7 @@ $(BINDIR)/eus: $(BINDIR)/eusx $(NOKOBJECTS) $(KOBJECTS) $(KSOBJECTS) $(LOBJECTS $(LOBJECTS) $(LCOBJECTS) $(COMPOBJECTS) \ $(MTCOBJECTS) $(RGCOBJECTS) $(MTOBJECTS) \ $(MAPOPTION) \ - $(EUSLIB) $(EUSXLIB) $(GEOLIB) $(XLIB) $(RAWLIB) \ + $(XLIB) $(RAWLIB) \ >$(ADLIBDIR)/eusmap ; \ cd $(BINDIR); rm -f euscomp eusx; \ ln -sf eus euscomp; ln -sf eus eusx; ) @@ -278,7 +278,7 @@ $(BINDIR)/eusgl: $(NOKOBJECTS) $(KOBJECTS) $(KSOBJECTS) $(LOBJECTS) \ $(LOBJECTS) $(LCOBJECTS) $(COMPOBJECTS) \ $(MTCOBJECTS) $(RGCOBJECTS) $(MTOBJECTS) \ $(MAPOPTION) \ - $(EUSLIB) $(EUSXLIB) $(GEOLIB) $(GLLIB) $(XLIB) $(RAWLIB)\ + $(OBJDIR)/util.o $(GLLIB) $(XLIB) $(RAWLIB) \ >$(ADLIBDIR)/eusmap ;) $(BINDIR)/raweus.so: $(NOKOBJECTS) $(KOBJECTS) $(LOBJECTS) \ @@ -336,7 +336,7 @@ $(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) ; \ diff --git a/lisp/c/eus.c b/lisp/c/eus.c index 29df26802..15e655ac6 100644 --- a/lisp/c/eus.c +++ b/lisp/c/eus.c @@ -1264,6 +1264,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/lisp/image/jpeg/eusjpeg.l b/lisp/image/jpeg/eusjpeg.l index 5c3b2fe08..50242dea1 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/lisp/l/eusstart.l b/lisp/l/eusstart.l index e69909e04..d8b311620 100644 --- a/lisp/l/eusstart.l +++ b/lisp/l/eusstart.l @@ -377,7 +377,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/test/loader.l b/test/loader.l index b67148025..f9639db2c 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))