Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 18 Jan 2010 16:55:21 +0200
From:      David Naylor <naylor.b.david@gmail.com>
To:        Gerald Pfeifer <gerald@pfeifer.com>
Cc:        freebsd-emulation@freebsd.org, ivoras@freebsd.org
Subject:   Re: [WIP] wine/i386 on FreeBSD/amd64 (take 3.1)
Message-ID:  <201001181655.27904.naylor.b.david@gmail.com>
In-Reply-To: <alpine.LSU.1.99.1001172213520.16540@acrux.dbai.tuwien.ac.at>
References:  <200912081524.03878.naylor.b.david@gmail.com> <20100113.111307.1024833258536727945.chat95@mac.com> <alpine.LSU.1.99.1001172213520.16540@acrux.dbai.tuwien.ac.at>

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


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

On Sunday 17 January 2010 23:18:33 Gerald Pfeifer wrote:
> On Wed, 13 Jan 2010, Maho NAKATA wrote:
> > Hi David Naylor, ivoras@, and gerald@
> >
> > I fetch the following package
> > http://people.freebsd.org/~ivoras/temp/wine-amd64-8-1.1.30%2c1.tbz
> > and it works without problem. I tested my library which
> > I have been developing, crossbuilding with mingw32 compiler environment
> > and run with Wine on FreeBSD 8.0-RELEASE-p2/amd64. So everything
> > is on FreeBSD to develop Windows application :-)
>=20
> Thanks for letting me know, Maha-san!  This is exciting news.
>=20
> David, I did not see the actual patch but I wonder whether it might
> make sense to have this as a slave port of emulators/wine, and if it
> does will be more than happy to support you from my side.

The current situation is as follows: the port needs to be build under=20
=46reeBSD/i386 (I've tried getting amd64 to cross compile to i386 but I thi=
nk it=20
is missing cc1(obj) so that fails).  Once the port is build and packaged it=
=20
can be installed under amd64 and works as it does under i386. =20

The two things it does extra from the normal wine is include the 32bit=20
libraries wine depends on (such as x11) and add a shell script to properly =
set=20
LD_32_LIBRARY_PATH (it appears ldconfig -32 -m /usr/local/lib32 does not wo=
rk=20
alone, is this a bug?). =20

It is possible to take the normal wine package with the extra 32bit librari=
es=20
and be able to reproduce the above.  Also the above also runs as expected i=
f=20
installed under FreeBSD/i386. =20

Attached are the patches updated to 1.1.36. =20

Regards

--Boundary-01=_aZHVLFBSJ1F1aaY
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 -urN /usr/ports/emulators/wine/Makefile wine/Makefile
=2D-- /usr/ports/emulators/wine/Makefile	2010-01-10 03:13:43.000000000 +0200
+++ wine/Makefile	2010-01-18 16:36:53.000000000 +0200
@@ -32,12 +32,10 @@
 CONFIGURE_ENV=3D	CPPFLAGS=3D"-I${LOCALBASE}/include" \
 		LDFLAGS=3D"-L${LOCALBASE}/lib" \
 		FLEX=3D"${LOCALBASE}/bin/flex"
=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
@@ -82,10 +80,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
@@ -101,8 +122,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
@@ -111,6 +132,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 -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	2010-01-18 16:45:30.000000000 +0200
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+TARGET=3D"$0"
+_count=3D0
+while [ -L "$TARGET" ]
+do
+  _old=3D"$TARGET"
+  TARGET=3D"`readlink "$TARGET"`"
+  if [ ! -e "$TARGET" ]
+  then
+    TARGET=3D"`dirname "$_old"`/$TARGET"
+  fi
+  _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 -urN /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	2010-01-18 16:51:01.000000000 +0200
@@ -0,0 +1,25 @@
+2010/01/18:
+ * Update wine to 1.1.36
+ * Follow relative symbolic links to script
+ * Use readlink (vs `ls -l | sed ...`)
+
+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 -urN /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=_aZHVLFBSJ1F1aaY--

--nextPart2451768.b0hXnrl0jK
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)

iEYEABECAAYFAktUdl8ACgkQUaaFgP9pFrK+FQCfaRQgvqsh6p2aeDbFdgBe64OA
HaQAnRgAmnMxPKGvWRlQnD0jVL8m8DmF
=swXc
-----END PGP SIGNATURE-----

--nextPart2451768.b0hXnrl0jK--



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