Date: Tue, 22 Dec 2009 14:56:27 +0200 From: David Naylor <naylor.b.david@gmail.com> To: freebsd-emulation@freebsd.org Cc: Ivan Voras <ivoras@freebsd.org> Subject: Re: [WIP] wine/i386 on FreeBSD/amd64 (take 3) Message-ID: <200912221456.32693.naylor.b.david@gmail.com> In-Reply-To: <200912182327.18986.naylor.b.david@gmail.com> References: <200912081524.03878.naylor.b.david@gmail.com> <200912182327.18986.naylor.b.david@gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--nextPart2118082.dzLRqIFZ7R Content-Type: multipart/mixed; boundary="Boundary-01=_7HMMLAzHa9/Ck1W" Content-Transfer-Encoding: 7bit --Boundary-01=_7HMMLAzHa9/Ck1W Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Friday 18 December 2009 23:27:15 David Naylor wrote: > On Tuesday 08 December 2009 15:24:00 David Naylor wrote: > > Hi, > > > > I have developed a port that allows wine to be installed as a package > > under FreeBSD/amd64. This avoids having a i386 chroot environment (and > > is much easier to setup, once the package is built). >=20 > I've changes the name of the port (should be obvious what it is for and n= ot > conflict when wine/amd64 arrives). The port now also automagically > determines which third party shared libraries should be bundled with it.= =20 > (See below on how to handle nvidia-driver). I've fixed two soft dependencies (freetype and xrender). This should compl= ete=20 all the required libraries to be bundled. Anti-aliased fonts and transpare= ncy=20 should be working. This allows MS Office 2007 to work as well as on i386. = =20 It appears a major bug crept in with the previous published patch. Therefo= re=20 it was totally useless. It has been fixed in this one (the bin and lib=20 directories were not set correctly). =20 Also, this port should now work on i386 and one can soft link to the bin/*= =20 files. =20 > > To get this working apply the attached patch and build the > > emulators/wine- amd64 port under FreeBSD/i386 then transfer that package > > to the amd64 host: > > > > (On FreeBSD/i386) > > # cd /usr/ports/emulators > > # patch < /tmp/wine-amd64.diff >=20 > (patch name changed, fix arguments) > # patch -sp0 < /tmp/wine-fbsd64.diff >=20 > > # cd wine-amd64 > > # make package clean > > > > (On FreeBSD/amd64) > > # pkg_add wine-amd64-8-1.1.34,1.tbz >=20 > (package name changed) > # pkg_add wine-amd64.8-1.1.34,1.tbz >=20 > > I have such a package for FreeBSD-8 if anyone is willing to host it. >=20 > I'll update the patch when wine-1.1.35 gets into my ports. >=20 > > There are a few TODO items (port options not supported). Any > > comments/suggestions are welcome. >=20 > 1) Install from package on FreeBSD/amd64 (any suggestions on how to do > that?)=20 > 2) Which version of FreeBSD/amd64 supports FreeBSD/i386 well enough > to run wine? > 3) Any bugs reported? =46ixed two bugs (the above mentioned soft dependencies). Please report an= y you=20 may encounter. =20 > > Word of warning: nvidia-driver breaks everything. Make sure it is not > > installed on both i386/amd64 systems. If one really wants wine with > > nvidia- driver support then install the beta on both i386 and amd64 > > (very important it is the same version of the driver) and copy > > libGL.so.1, libGLcore.so.1 and libnvidia-tls.so.1 from i386 to > > $PREFIX/lib32 (on amd64). >=20 > The above method still does work but now, if one installs nvidia-driver (= of > the correct version) before building wine under FreeBSD/i386 then the > required libraries will be included (this makes the package unsuitable f= or > any system without the correct nvidia drivers installed). =20 Regards, =20 David =20 > P.S. I've included the shar archive as some people have not been able to > apply the patch cleanly --Boundary-01=_7HMMLAzHa9/Ck1W Content-Type: text/x-patch; charset="iso-8859-1"; name="wine-fbsd64.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="wine-fbsd64.diff" diff -uNr /usr/ports/emulators/wine/Makefile wine/Makefile =2D-- /usr/ports/emulators/wine/Makefile 2009-12-20 03:04:01.000000000 +0200 +++ wine/Makefile 2009-12-20 17:02:22.000000000 +0200 @@ -30,12 +30,10 @@ --without-sane --without-xcursor CONFIGURE_ENV=3D CPPFLAGS=3D"-I${LOCALBASE}/include" \ LDFLAGS=3D"-L${LOCALBASE}/lib" =2DUSE_LDCONFIG=3D ${PREFIX}/lib ${PREFIX}/lib/wine MAKE_JOBS_SAFE=3D yes MAN1=3D widl.1 wine.1 winebuild.1 winedbg.1 winedump.1 winegcc.1 \ winemaker.1 wineprefixcreate.1 wineserver.1 wmc.1 wrc.1 MLINKS=3D winegcc.1 wineg++.1 =2DONLY_FOR_ARCHS=3D i386 USE_BISON=3D build USE_BZIP2=3D yes USE_GMAKE=3D yes @@ -80,10 +78,33 @@ CONFIGURE_ARGS+=3D --without-xslt .endif =20 +# TODO: when does FreeBSD/i386 work properly under FreeBSD/amd64? .if ${OSVERSION} < 603000 IGNORE=3D fails to properly work on versions of FreeBSD before 6.3 .endif =20 +.ifdef WINE_CROSS_BUILD + +CONFIGURE_ARGS+=3D --bindir=3D${PREFIX}/bin32 --libdir=3D${PREFIX}/lib32 +CONFLICTS=3D wine-[0-9]* +ONLY_FOR_ARCHS=3D i386 amd64 +USE_LDCONFIG32=3D ${PREFIX}/lib32 ${PREFIX}/lib32/wine +WINELIBDIR=3D${PREFIX}/lib32 + +PLIST_REINPLACE+=3D winelib +PLIST_REINPLACE_WINELIB=3Ds!lib/!lib32/!g + +ACTUAL-PACKAGE-DEPENDS=3D${DO_NADA} + +.else + +CONFLICTS=3D wine-fbsd64.* +ONLY_FOR_ARCHS=3D i386 +USE_LDCONFIG=3D ${PREFIX}/lib ${PREFIX}/lib/wine +WINELIBDIR=3D${PREFIX}/lib + +.endif + post-patch: .if ${OSVERSION} < 700041 ${REINPLACE_CMD} 's/-lpthread/-lthr/g' ${WRKSRC}/configure @@ -99,8 +120,8 @@ ${MAN1PREFIX}/man/fr.UTF-8/man1/wineserver.1 @-${RMDIR} -p ${MAN1PREFIX}/man/de.UTF-8/man1 \ ${MAN1PREFIX}/man/fr.UTF-8/man1 =2D ${MV} -f ${PREFIX}/lib/libwine.so.1.0 ${PREFIX}/lib/libwine.so.1 =2D ${LN} -sf libwine.so.1 ${PREFIX}/lib/libwine.so + ${MV} -f ${WINELIBDIR}/libwine.so.1.0 ${WINELIBDIR}/libwine.so.1 + ${LN} -sf libwine.so.1 ${WINELIBDIR}/libwine.so .if !defined(NOPORTDOCS) -@${MKDIR} ${DOCSDIR} .for i in README ANNOUNCE AUTHORS LICENSE @@ -109,6 +130,27 @@ @${INSTALL_DATA} ${WRKSRC}/programs/winedbg/README ${DOCSDIR}/README.wine= dbg @${INSTALL_DATA} ${WRKSRC}/tools/winedump/README ${DOCSDIR}/README.winedu= mp .endif +.ifdef WINE_CROSS_BUILD + grep -v '[@%]' ${TMPPLIST} | sed "s!^!${PREFIX}/!g" | \ + xargs -n1 file -F' ' | grep ELF | cut -f1 -d' ' | \ + env LD_LIBRARY_PATH=3D${PREFIX}/lib32:${LD_LIBRARY_PATH} xargs ldd -f '%p= \n' \ + | sort -u | grep -v '^\(/usr\)\?/lib' | grep -v "^${PREFIX}/lib32/libwine= =2Eso" \ + | grep -v "^${PREFIX}/lib32/wine" > ${WRKDIR}/winelibs.list + for i in `cat ${WRKDIR}/winelibs.list` ; do \ + ${INSTALL_DATA} $${i} ${PREFIX}/lib32/ ; \ + echo lib32/`basename $${i}` >> ${TMPPLIST} ; \ + done + for i in libfreetype.so.9 libXrender.so.1 ; do \ + ${INSTALL_DATA} ${LOCALBASE}/lib/$${i} ${PREFIX}/lib32/ ; \ + echo lib32/$${i} >> ${TMPPLIST} ; \ + done + ${INSTALL_SCRIPT} ${FILESDIR}/binbounce ${PREFIX}/bin/wine + for i in `grep ^bin ${TMPPLIST} | xargs -n1 basename` ; do \ + [ "$${i}" =3D "wine" ] || ${LN} -f ${PREFIX}/bin/wine ${PREFIX}/bin/$${i= } ; \ + echo bin32/$${i} >> ${TMPPLIST} ; \ + done + echo '@unexec rmdir %D/bin32 2>/dev/null || true' >> ${TMPPLIST} +.endif @${MKDIR} ${DESKTOPDIR} @${MV} ${DATADIR}/applications/wine.desktop ${DESKTOPDIR}/ @${ECHO} diff -uNr /usr/ports/emulators/wine/files/binbounce wine/files/binbounce =2D-- /usr/ports/emulators/wine/files/binbounce 1970-01-01 02:00:00.0000000= 00 +0200 +++ wine/files/binbounce 2009-12-20 18:29:51.000000000 +0200 @@ -0,0 +1,27 @@ +#!/bin/sh + +TARGET=3D$0 +_count=3D0 +while [ -L "$TARGET" ] +do + TARGET=3D`ls -l "$TARGET" | sed -e 's/.* -> //'` + _count=3D$(($_count + 1)) + if [ $_count -gt 100 ] + then + echo "$0: to many symbolic links" > /dev/stderr + exit 1 + fi +done + +LOCALBASE=3D`dirname "$TARGET"`/.. +BINNAME=3D`basename "$TARGET"` + +if [ `uname -p` =3D i386 ] +then + export LD_LIBRARY_PATH=3D"$LOCALBASE/lib32":"$LOCALBASE/lib32/wine":"$LD= _LIBRARY_PATH" +else + export LD_32_LIBRARY_PATH=3D"$LOCALBASE/lib32":"$LOCALBASE/lib32/wine":"= $LD_32_LIBRARY_PATH" +fi +export PATH=3D"$LOCALBASE/bin32":"$PATH" + +exec "$LOCALBASE/bin32/$BINNAME" "$@" diff -uNr /usr/ports/emulators/wine-fbsd64/ChangeLog wine-fbsd64/ChangeLog =2D-- /usr/ports/emulators/wine-fbsd64/ChangeLog 1970-01-01 02:00:00.000000= 000 +0200 +++ wine-fbsd64/ChangeLog 2009-12-20 16:52:11.000000000 +0200 @@ -0,0 +1,20 @@ +2009/12/20: + * Correctly set bin/lib directories + * Support running on i386 + * Follow symbolic links to script + * Allow spaces in path + * Hard link the bin/* files (otherwise symbolic link following breaks) + +2009/12/19: + * Include freetype (it is a soft dependancy) + * Include libXrender (it is a soft dependancy) + +2009/12/18: + * Rename to something with a little more sense (wine-amd64-[V] -> wine-fb= sd64.[V]) + * Fix conflicts (wine conflicts with wine-fbsd64) + +2009/12/17: + * Automatically determine libraries and binaries + +2009/12/08: + * Initial implementation of WINE/i386 on FreeBSD/amd64=20 diff -uNr /usr/ports/emulators/wine-fbsd64/Makefile wine-fbsd64/Makefile =2D-- /usr/ports/emulators/wine-fbsd64/Makefile 1970-01-01 02:00:00.0000000= 00 +0200 +++ wine-fbsd64/Makefile 2009-12-18 19:44:47.000000000 +0200 @@ -0,0 +1,12 @@ +PORTNAME=3D wine +PKGNAMESUFFIX=3D -fbsd64.${OSVERSION:C/([0-9]).*/\1/} + +WINE_CROSS_BUILD=3Dyes + +MASTERDIR=3D ${.CURDIR}/../wine + +#.if ${ARCH} =3D=3D "amd64" +# TODO: install from package (how?) +#.endif + +.include "${MASTERDIR}/Makefile" --Boundary-01=_7HMMLAzHa9/Ck1W-- --nextPart2118082.dzLRqIFZ7R Content-Type: application/pgp-signature; name=signature.asc Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.13 (FreeBSD) iEYEABECAAYFAkswwgAACgkQUaaFgP9pFrImygCdE9PPkOvtWHVD5e3JYL8r1WD2 i6MAniHbVEOT+Wbw4IZItUcWtNS5xEQ8 =8mlZ -----END PGP SIGNATURE----- --nextPart2118082.dzLRqIFZ7R--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912221456.32693.naylor.b.david>