Date: Sun, 9 Jun 2013 17:42:57 +0000 (UTC) From: David Naylor <dbn@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r320362 - in head/emulators/i386-wine-devel: . files Message-ID: <201306091742.r59Hgvhi003641@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dbn Date: Sun Jun 9 17:42:57 2013 New Revision: 320362 URL: http://svnweb.freebsd.org/changeset/ports/320362 Log: Improve 3D acceleration for emulators/i386-wine-devel. - Install the dri library drivers that are required by mesaGL - Teach binbounce about LIBGL_LIBRARY_PATH - Prevent recursive definitions by binbounce - Follow the example of mesagl/nvidia-driver wrt library handing - Lay initial ground work to handle "old" and "new" xorg WARNING: there appears to be a problem with FREEBSD32 which prevents 3D-acceleration support from working, further investigation is required HELP WANTED TO SOLVE THIS PROBLEM Approved by: eadler,bdrewery (mentors, implicit) Modified: head/emulators/i386-wine-devel/Makefile head/emulators/i386-wine-devel/files/binbounce head/emulators/i386-wine-devel/files/nvidia.sh head/emulators/i386-wine-devel/files/pkg-install Modified: head/emulators/i386-wine-devel/Makefile ============================================================================== --- head/emulators/i386-wine-devel/Makefile Sun Jun 9 17:40:41 2013 (r320361) +++ head/emulators/i386-wine-devel/Makefile Sun Jun 9 17:42:57 2013 (r320362) @@ -12,6 +12,8 @@ MASTERDIR= ${.CURDIR}/../wine-devel PKGINSTALL= ${.CURDIR}/files/pkg-install PKGDEINSTALL= ${PKGINSTALL} +RUN_DEPENDS= dri>0:${PORTSDIR}/graphics/dri + ACTUAL-PACKAGE-DEPENDS= ${DO_NADA} WINELIBDIR= ${PREFIX}/lib32 CONFIGURE_ARGS+= --bindir=${PREFIX}/bin32 --libdir=${WINELIBDIR} @@ -22,7 +24,7 @@ WINE_SLAVE_BUILD= yes USE_LDCONFIG32= ${WINELIBDIR} ${WINELIBDIR}/wine # Hook into post-install and do some adapting to make i386 binaries work nicely -# under FreeBSD/amd64 (include add dependant i386 libs) +# under FreeBSD/amd64 post-install-script: # Install bounce script to access the 32bit executables ${INSTALL_SCRIPT} ${.CURDIR}/files/binbounce ${PREFIX}/bin/wine @@ -30,11 +32,15 @@ post-install-script: [ "$${i}" = "wine" ] || ${LN} -f ${PREFIX}/bin/wine ${PREFIX}/bin/$${i} ; \ echo bin32/$${i} >> ${TMPPLIST} ; \ done - if [ -n "${WITH_PKGNG}" ]; then \ - echo '@dirrmtry bin32' >> ${TMPPLIST}; \ - else \ - echo '@unexec rmdir %D/bin32 2>/dev/null || true' >> ${TMPPLIST}; \ - fi + echo '@dirrm lib32/.libGL/dri' >> ${TMPPLIST} + echo '@dirrm lib32/.libGL' >> ${TMPPLIST} + echo '@dirrm bin32' >> ${TMPPLIST} + # Install dri libraries (internal libGL requirements) + ${MKDIR} ${PREFIX}/lib32/.libGL/dri + for i in ${LOCALBASE}/lib/dri/*.so; do \ + ${INSTALL_DATA} $${i} ${PREFIX}/lib32/.libGL/dri/ ; \ + echo lib32/.libGL/dri/$${i##*/} >> ${TMPPLIST} ; \ + done # Find all libraries that are linked too (via ldd(1)) grep -v '[@%]' ${TMPPLIST} | sed "s!^!${PREFIX}/!g" | \ xargs -n1 file -F' ' | grep ELF | cut -f1 -d' ' | \ @@ -42,8 +48,13 @@ post-install-script: | sort -u | grep -v '^\(/usr\)\?/lib' | grep -v "^${PREFIX}/lib32/libwine.so" \ | grep -v "^${PREFIX}/lib32/wine" > ${WRKDIR}/winelibs for i in `cat ${WRKDIR}/winelibs` ; do \ - ${INSTALL_DATA} $${i} ${PREFIX}/lib32/ ; \ - echo lib32/`basename $${i}` >> ${TMPPLIST} ; \ + if [ `basename $${i}` != libGL.so.1 ]; then \ + ${INSTALL_DATA} $${i} ${PREFIX}/lib32/ ; \ + echo lib32/$${i##*/} >> ${TMPPLIST} ; \ + else \ + ${INSTALL_DATA} $${i} ${PREFIX}/lib32/.libGL/ ; \ + echo lib32/.libGL/libGL.so.1 >> ${TMPPLIST} ; \ + fi ; \ done # Find all soft dependancies (via strings(1)) grep -v '[@%]' ${TMPPLIST} | sed "s!^!${PREFIX}/!g" | \ Modified: head/emulators/i386-wine-devel/files/binbounce ============================================================================== --- head/emulators/i386-wine-devel/files/binbounce Sun Jun 9 17:40:41 2013 (r320361) +++ head/emulators/i386-wine-devel/files/binbounce Sun Jun 9 17:42:57 2013 (r320362) @@ -1,32 +1,20 @@ #!/bin/sh -TARGET="$0" -_count=0 -while [ -L "$TARGET" ] -do - _old="$TARGET" - TARGET="`readlink "$TARGET"`" - if [ ! -e "$TARGET" ] - then - TARGET="`dirname "$_old"`/$TARGET" - fi - _count=$(($_count + 1)) - if [ $_count -gt 100 ] - then - echo "$0: to many symbolic links" > /dev/stderr - exit 1 - fi -done +TARGET="`realpath $0`" -LOCALBASE=`dirname "$TARGET"`/.. -BINNAME=`basename "$TARGET"` +LOCALBASE=${TARGET%/*}/.. +BINNAME=${TARGET##*/} -if [ `uname -p` = i386 ] +if [ -z "$__BINBOUNCE_BOOTSTRAP" ] then - export LD_LIBRARY_PATH="$LOCALBASE/lib32":"$LOCALBASE/lib32/wine":"$LD_LIBRARY_PATH" -else - export LD_32_LIBRARY_PATH="$LOCALBASE/lib32":"$LOCALBASE/lib32/wine":"$LD_32_LIBRARY_PATH":/usr/lib32 + export LIBGL_DRIVERS_PATH=$LOCALBASE/lib32/dri + if [ `uname -p` = i386 ] + then + export LD_LIBRARY_PATH="$LOCALBASE/lib32":"$LOCALBASE/lib32/wine":"$LD_LIBRARY_PATH" + else + export LD_32_LIBRARY_PATH="$LOCALBASE/lib32":"$LOCALBASE/lib32/wine":"$LD_32_LIBRARY_PATH":/usr/lib32 + fi + export PATH="$LOCALBASE/bin32":"$PATH" fi -export PATH="$LOCALBASE/bin32":"$PATH" exec "$LOCALBASE/bin32/$BINNAME" "$@" Modified: head/emulators/i386-wine-devel/files/nvidia.sh ============================================================================== --- head/emulators/i386-wine-devel/files/nvidia.sh Sun Jun 9 17:40:41 2013 (r320361) +++ head/emulators/i386-wine-devel/files/nvidia.sh Sun Jun 9 17:42:57 2013 (r320362) @@ -56,8 +56,11 @@ # Version 1.9 - 2012/10/31 # - fix permission of extracts files # Version 1.10 - 2013/05/06 -# - s/wine-fbsd64/i386-wine/ +# - s/wine-fbsd64/i386-wine/g # - fix unwanted failures due to `set -e` +# Version 1.11 - 2013/05/26 +# - install libGL.so.1 to ${PREFIX}/lib32/.nvidia and link to it +# - add deinstall option set -e @@ -81,7 +84,7 @@ terminate() { } -args=`getopt -n $*` +args=`getopt -dn $*` if [ $? -ne 0 ] then echo "Usage: $0 [-n]" @@ -91,6 +94,19 @@ set -- $args while true do case $1 in + -d) + rm -f ${PREFIX}/lib32/libGL.so.1 + rm -f ${PREFIX}/lib32/libGLcore.so.1 ${PREFIX}/lib32/libnvidia-tls.so.1 + rm -f ${PREFIX}/lib32/libnvidia-glcore.so.1 ${PREFIX}/lib32/libnvidia-tls.so.1 + rm -rf ${PREFIX}/lib32/.nvidia/ + if [ -d ${PREFIX}/lib32/.libGL-new ] + then + ln -s .libGL-new/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 + else + ln -s .libGL/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 + fi + exit 0 + ;; -n) NO_FETCH=yes ;; @@ -168,11 +184,15 @@ for i in $EXTRACT_LIST do EXTRACT_ARGS="$EXTRACT_ARGS --include NVIDIA-FreeBSD-x86-${NV}/obj/$i" done -[ -f ${PREFIX}/lib32/libGL.so.1~ ] \ - || cp ${PREFIX}/lib32/libGL.so.1 ${PREFIX}/lib32/libGL.so.1~ umask 0333 tar $EXTRACT_ARGS -xvf NVIDIA-FreeBSD-x86-${NV}.tar.gz \ || terminate 3 "Failed to extract NVIDIA-FreeBSD-x86-${NV}.tar.gz" +mkdir -p ${PREFIX}/lib32/.nvidia \ + || terminate 9 "Failed to create .nvidia shadow directory" +mv ${PREFIX}/lib32/libGL.so.1 ${PREFIX}/lib32/.nvidia/ \ + || terminate 10 "Failed to move libGL.so.1 to .nvidia/ shadow directory" +ln -s .nvidia/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 \ + || terminate 11 "Failed to link to .nvidia/libGL.so.1 in the shadow directory" echo "=> Cleaning up..." [ -n "$NO_REMOVE_NVIDIA" ] || rm -vf NVIDIA-FreeBSD-x86-${NV}.tar.gz \ Modified: head/emulators/i386-wine-devel/files/pkg-install ============================================================================== --- head/emulators/i386-wine-devel/files/pkg-install Sun Jun 9 17:40:41 2013 (r320361) +++ head/emulators/i386-wine-devel/files/pkg-install Sun Jun 9 17:42:57 2013 (r320362) @@ -1,16 +1,28 @@ #!/bin/sh -PKG_PREFIX=${PKG_PREFIX-/usr/local} -export PREFIX=${PKG_PREFIX} +export PREFIX=${PKG_PREFIX:-/usr/local} export WINE=$1 +if [ -d ${PREFIX}/lib32/.libGL-new ] +then + LIBGLDIR=.libGL-new +else + LIBGLDIR=.libGL +fi + case "$2" in - PRE-INSTALL|DEINSTALL) - mv -f ${PKG_PREFIX}/lib32/libGL.so.1~ ${PKG_PREFIX}/lib32/libGL.so.1 > /dev/null 2>&1 - rm -f ${PKG_PREFIX}/lib32/libGLcore.so.1 ${PKG_PREFIX}/lib32/libnvidia-glcore.so.1 ${PKG_PREFIX}/lib32/libnvidia-tls.so.1 + DEINSTALL) + sh ${PREFIX}/share/wine/patch-nvidia.sh -d + rm -r ${PREFIX}/lib32/libGL.so.1 ${PREFIX}/lib32/dri ;; POST-INSTALL) - sh ${PKG_PREFIX}/share/wine/patch-nvidia.sh -n > /dev/null 2>&1 + ln -s ${LIBGLDIR}/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 + mkdir -p ${PREFIX}/lib32/dri + for dri in $(cd ${PREFIX}/lib32/${LIBGLDIR}/dri/; echo *.so) + do + ln -s ../${LIBGLDIR}/dri/${dri} ${PREFIX}/lib32/dri/${dri} + done + sh ${PREFIX}/share/wine/patch-nvidia.sh -n > /dev/null 2>&1 case $? in 0) cat << _EOF @@ -32,7 +44,7 @@ _EOF ;; esac cat << _EOF - sh ${PKG_PREFIX}/share/wine/patch-nvidia.sh + sh ${PREFIX}/share/wine/patch-nvidia.sh to get 2D/3D acceleration to work with the nvidia driver. Without this wine will crash when a program requires 2D/3D graphics acceleration.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201306091742.r59Hgvhi003641>