From owner-freebsd-ports Sat Aug 21 10:51: 2 1999 Delivered-To: freebsd-ports@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 167C014C23 for ; Sat, 21 Aug 1999 10:50:55 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id KAA34657; Sat, 21 Aug 1999 10:50:02 -0700 (PDT) (envelope-from gnats@FreeBSD.org) Received: from pluto.ipass.net (pluto.ipass.net [198.79.53.5]) by hub.freebsd.org (Postfix) with ESMTP id 5D0801548F for ; Sat, 21 Aug 1999 10:44:31 -0700 (PDT) (envelope-from rhh@ipass.net) Received: from stealth.ipass.net. (ppp-1-207.dialup.rdu.ipass.net [209.170.132.207]) by pluto.ipass.net (8.9.3/8.9.3) with ESMTP id NAA02992 for ; Sat, 21 Aug 1999 13:43:46 -0400 (EDT) Received: (from rhh@localhost) by stealth.ipass.net. (8.9.3/8.8.8) id NAA19571; Sat, 21 Aug 1999 13:44:27 -0400 (EDT) (envelope-from rhh) Message-Id: <199908211744.NAA19571@stealth.ipass.net.> Date: Sat, 21 Aug 1999 13:44:27 -0400 (EDT) From: aa8vb@ipass.net Reply-To: aa8vb@ipass.net To: FreeBSD-gnats-submit@freebsd.org X-Send-Pr-Version: 3.2 Subject: ports/13295: Mesa-3.0 needs patch to fix ELF dependent '.so' loading Sender: owner-freebsd-ports@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org >Number: 13295 >Category: ports >Synopsis: Mesa-3.0 needs patch to fix ELF dependent '.so' loading >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-ports >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Sat Aug 21 10:50:02 PDT 1999 >Closed-Date: >Last-Modified: >Originator: Randall Hopper >Release: FreeBSD 3.2-RELEASE i386 >Organization: self >Environment: Stock 3.2-RELEASE. Mesa-3.0 built from ports. >Description: Dynamic loading of libMesaGL.so into an interpreter such as Python does not work because libMesaGL.so.14 does not store libXext and libX11 as dependent ("NEEDED") .so's in the dynamic section. A Python port I'm about to submit needs .so loading to function correctly, which is why I dug into this. (Getting ready for XFree86 4.0, DRI, and HW-accel 3D -- whoohoo!) In short, here's the problem: > cd /usr/X11R6/lib > objdump -T libMesaGL.so.14 | grep XFreePixmap 00000000 DF *UND* 0000005c XFreePixmap > objdump -x libMesaGL.so.14 | egrep 'NEEDED|RPATH' > As you can see, it depends on libX11, but has no NEEDED reference to libX11. However libXt, which also depends on libX11, has its libX11 relationship stored correctly: > objdump -x libXt.so.6 | egrep 'NEEDED|RPATH' NEEDED libX11.so.6 NEEDED libSM.so.6 NEEDED libICE.so.6 RPATH /usr/X11R6/lib >How-To-Repeat: In specific, build/install Mesa from ports and run the above command. You'll get the same results. Alternatively, build the PyOpenGL port (which I'm fixing to submit) and then run "import OpenGL.GL" inside the interpreter. You'll see it fail to dynamically load libMesaGL.so because XFreePixmap is undefined, and libMesaGL.so doesn't register libX11.so as a dependency. >Fix: Please replace the Mesa-3.0 "mklib.freebsd" patch (patch/patch-ac) with the attached patch. It incorporates the existing changes with the few lines needed to link Xext and X11 when building libMesaGL.so. Note that mklib.irix6-n32 contains analogous logic for the same reason. # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # patch-ac # echo x - patch-ac sed 's/^X//' >patch-ac << 'END-of-patch-ac' X--- mklib.freebsd.orig Tue Oct 21 19:34:34 1997 X+++ mklib.freebsd Sat Aug 21 13:15:31 1999 X@@ -34,7 +34,11 @@ X X #--platform------------------------------------------------------------ X X-VERSION=$MAJOR.$MINOR X+if [ "${PORTOBJFORMAT}" = "elf" ]; then X+ VERSION=$MAJOR X+else X+ VERSION=$MAJOR.$MINOR X+fi X X BASENAME=`echo ${LIBRARY} | sed "s/\.a//g"` X SHLIB=${BASENAME}.so.${VERSION} X@@ -44,6 +48,28 @@ X X ar cq ${STLIB} ${OBJECTS} X ranlib ${STLIB} X-ld -Bshareable -o ${SHLIB} ${OBJECTS} X X-mv ${SHLIB} ../lib X+ X+if [ "${PORTOBJFORMAT}" = "elf" ]; then X+ X+ # This is a bit of a kludge, but... (see mklib.irix6-n32) X+ if test ${BASENAME} = "libMesaGL" ; then X+ # Add Xext & X11 to MesaGL.so's NEEDED .so list. X+ # If MesaGL is dloaded, the dependent .so's must be dloaded as well. X+ # Dependent .so info is necessary when Mesa is loaded dynamically X+ # by extensible interpreters (e.g. Python) where the interpreter X+ # can't/shouldn't know all the dependent libraries that an X+ # interpreter extension module may need to link with. Shared libs X+ # should be built to indicate what they need via NEEDED and RPATH. X+ # For example, see: objdump -x libXt.so.6 | egrep 'NEEDED|RPATH' X+ OBJECTS="${OBJECTS} -L${X11BASE}/lib -rpath ${X11BASE}/lib" X+ OBJECTS="${OBJECTS} -lXext -lX11 -lm" X+ fi X+ X+ ld -shared -soname ${SHLIB} -o ${SHLIB} ${OBJECTS} X+ ln -sf ${SHLIB} ${BASENAME}.so X+ mv ${SHLIB} ${BASENAME}.so ../lib X+else X+ ld -Bshareable -o ${SHLIB} ${OBJECTS} X+ mv ${SHLIB} ../lib X+fi END-of-patch-ac exit >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message