Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 8 Dec 2009 15:24:00 +0200
From:      David Naylor <naylor.b.david@gmail.com>
To:        freebsd-emulation@freebsd.org
Subject:   [WIP] wine/i386 on FreeBSD/amd64
Message-ID:  <200912081524.03878.naylor.b.david@gmail.com>

next in thread | raw e-mail | index | archive | help
--nextPart1691217.xVsqCBnkXp
Content-Type: multipart/mixed;
  boundary="Boundary-01=_wNlHLkqgePszJUV"
Content-Transfer-Encoding: 7bit


--Boundary-01=_wNlHLkqgePszJUV
Content-Type: Text/Plain;
  charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

Hi,

I have developed a port that allows wine to be installed as a package under=
=20
=46reeBSD/amd64.  This avoids having a i386 chroot environment (and is much=
=20
easier to setup, once the package is built). =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
# cd wine-amd64
# make package clean

(On FreeBSD/amd64)
# pkg_add wine-amd64-8-1.1.34,1.tbz

I have such a package for FreeBSD-8 if anyone is willing to host it. =20

There are a few TODO items (port options not supported).  Any=20
comments/suggestions are welcome. =20

Word of warning: nvidia-driver breaks everything.  Make sure it is not=20
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=20
is the same version of the driver) and copy libGL.so.1, libGLcore.so.1 and=
=20
libnvidia-tls.so.1 from i386 to $PREFIX/lib32 (on amd64). =20

Regards,

David=20

P.S. This should be a no-op for emulators/wine

--Boundary-01=_wNlHLkqgePszJUV
Content-Type: text/x-patch;
  charset="ISO-8859-1";
  name="wine-amd64.diff"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="wine-amd64.diff"

diff -urN /usr/ports/emulators/wine/Makefile wine/Makefile
=2D-- /usr/ports/emulators/wine/Makefile	2009-12-08 08:27:51.000000000 +0200
+++ wine/Makefile	2009-12-08 11:40:12.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
@@ -50,6 +48,18 @@
 		LDAP	"Use LDAP"					Off \
 		LIBXSLT	"Use libxslt (only used by msxml3.dll)"		Off
=20
+WINELIBS=3D	libGL.so.1 libICE.so.6 libSM.so.6 libX11-xcb.so.1 libX11.so.6 \
+		libXau.so.6 libXdamage.so.1 libXdmcp.so.6 libXext.so.6 \
+		libXfixes.so.3 libXrender.so.1 libXxf86vm.so.1 libdrm.so.2 \
+		libfreetype.so.9 libiconv.so.3 libpthread-stubs.so.0 \
+		libxcb-glx.so.0 libxcb.so.2 libxml2.so.5
+
+# wine not on this list as it acts as the master script
+WINEBINS=3D	function_grep.pl msiexec notepad regedit regsvr32 widl \
+		wineboot winebuild winecfg wineconsole winecpp winedbg \
+		winedump winefile wineg++ winegcc winemaker winemine winepath \
+		wineprefixcreate wineserver wmc wrc
+
 .include <bsd.port.pre.mk>
=20
 .ifdef WITHOUT_CUPS
@@ -57,11 +67,15 @@
 .else
 CONFIGURE_ARGS+=3D	--with-cups
 LIB_DEPENDS+=3D	cups.2:${PORTSDIR}/print/cups-base
+# TODO
+#WINELIBS+=3D
 .endif
=20
 .ifdef WITH_HAL
 CONFIGURE_ARGS+=3D	--with-hal
 LIB_DEPENDS+=3D	hal.1:${PORTSDIR}/sysutils/hal
+# TODO
+#WINELIBS+=3D
 .else
 CONFIGURE_ARGS+=3D	--without-hal
 .endif
@@ -69,6 +83,8 @@
 .ifdef WITH_LDAP
 CONFIGURE_ARGS+=3D	--with-ldap
 USE_OPENLDAP=3D	yes
+# TODO
+#WINELIBS+=3D
 .else
 CONFIGURE_ARGS+=3D	--without-ldap
 .endif
@@ -76,14 +92,47 @@
 .ifdef WITH_LIBXSLT
 CONFIGURE_ARGS+=3D	--with-xslt
 LIB_DEPENDS+=3D	xslt.2:${PORTSDIR}/textproc/libxslt
+# TODO
+#WINELIBS+=3D
 .else
 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
+
+.for i in ${WINEBINS}
+PLIST_FILES+=3D	bin32/${i}
+.endfor
+.for i in ${WINELIBS}
+PLIST_FILES+=3D	lib32/${i}
+.endfor
+PLIST_FILES+=3D	bin32/wine
+#PLIST_FILES+=3D	@dirrmtry bin32
+
+PLIST_REINPLACE+=3D	winelib
+PLIST_REINPLACE_WINELIB=3Ds!lib/!lib32/!g
+
+ACTUAL-PACKAGE-DEPENDS=3D${DO_NADA}
+
+.else
+
+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 +148,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 +158,15 @@
 	@${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
+.for i in ${WINELIBS}
+	${INSTALL_DATA} ${LOCALBASE}/lib/${i} ${PREFIX}/lib32/
+.endfor
+	${INSTALL_SCRIPT} ${FILESDIR}/binbounce ${PREFIX}/bin/wine
+.for i in ${WINEBINS}
+	${LN} -sf wine ${PREFIX}/bin/${i}
+.endfor
+.endif
 	@${MKDIR} ${DESKTOPDIR}
 	@${MV} ${DATADIR}/applications/wine.desktop ${DESKTOPDIR}/
 	@${ECHO}
diff -urN /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-01 13:54:52.000000000 +0200
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+LOCALBASE=3D`dirname $0`/..
+BINNAME=3D`basename $0`
+
+while [ $# -gt 0 ]
+do
+  ARGS=3D"$ARGS \"$1\""
+  shift
+done
+
+
+export LD_32_LIBRARY_PATH=3D$LOCALBASE/lib32:$LOCALBASE/lib32/wine
+export PATH=3D$LOCALBASE/bin32:$PATH
+eval exec $LOCALBASE/bin32/$BINNAME $ARGS
diff -urN /usr/ports/emulators/wine-amd64/Makefile wine-amd64/Makefile
=2D-- /usr/ports/emulators/wine-amd64/Makefile	1970-01-01 02:00:00.00000000=
0 +0200
+++ wine-amd64/Makefile	2009-12-08 11:39:39.000000000 +0200
@@ -0,0 +1,13 @@
+PORTNAME=3D	wine
+PKGNAMESUFFIX=3D	-amd64-${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=_wNlHLkqgePszJUV--

--nextPart1691217.xVsqCBnkXp
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)

iEYEABECAAYFAkseU3MACgkQUaaFgP9pFrKcXgCfUkaLcysZgJDf/g06t93Ycxpk
FYQAnikqLST7L64YqOzEmBCPDWxpyfB1
=pXro
-----END PGP SIGNATURE-----

--nextPart1691217.xVsqCBnkXp--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200912081524.03878.naylor.b.david>