Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 04 Nov 2012 06:16:53 -0500
From:      "Thomas Mueller" <mueller23@insightbb.com>
To:        freebsd-ports@freebsd.org
Cc:        David Naylor <naylor.b.david@gmail.com>
Subject:   Re: wine/i386 for FreeBSD/amd64 port (aka wine-fbsd64)
Message-ID:  <5D.CB.23131.5AE46905@smtp02.insight.synacor.com>

next in thread | raw e-mail | index | archive | help
from David Naylor <naylor.b.david@gmail.com>:

> Hi List,

> # Executive Summary

> Over the past years I have been maintaining the wine-fbsd64 port (see
> http://mediafire.com/wine_fbsd64 for more).  The port itself effectively does
> static linking (it bundles all the libraries wine needs) with scripts to
> bootstrap the environment to easily use wine from FreeBSD/amd64.  There is
> also a script to install the i386 nVidia graphic drivers so that wine has
> access to nVidia accelerated graphics from FreeBSD/amd64.

> I would like to propose this port gets included in the port's collection and
> would like to get feedback, your comments please :-).

> P.S. I'm not subscribed to the list, so please ensure I'm cc'ed in the
> discussion.

> # Details of the Port

> Please see attached for the actual port.

> ## Port Preamble

> This port is a slave port to emulators/wine(-devel).  The master port needed
> to be modified (already done):
>  - to conditionally set USE_LDCONFIG (if USE_LDCONFIG32 was not set)
>  - to allow the library directory to be changed (see WINELIBDIR)
>  - to allow configure arguments to be appended

> ## Port Targets

> The port itself does the following in the preamble:
>  - specifies the pkg(de)install script to handle nVidia driver patching
>  - overrides ACTUAL-PACKAGE-DEPENDS (all depends are bundled with the port)
>  - defined the library directory to ${PREFIX}/lib32
>  - defined the binary directory to ${PREFIX}/bin32
>  - patches the PLIST to refer to lib32 (not lib)
>  - defined USE_LDCONFIG32 appropriately

> The post-install-script target:
>  - Installs the files/binbounce file in ${PREFIX}/bin for each ${PREFIX}/bin32
> file (hard linked)
>  - Finds all linked library, copies them to ${PREFIX}/lib32, and added them to
> the plist
>  - Finds all dlopen'ed libraries, copies them to ${PREFIX}/lib32, and added
> them to the plist
>  - Installs the nVidia patch file
>  - Run the (PRE-|POST-)INSTALL script

> The post-package-script (run only if WITH_PKGNG is defined):
>  - Amends the package so the arch label to 64bit

> ## Port scripts (in files/)

> The binbounce file does the following to transparently fix the environment to
> allow seamless running of the wine programs:
>  - determines the location of the TARGET (follows symbolic links to itself)
>  - fixes LD_LIBRARY_PATH if in an i386 environment (so lib32, lib32/wine is
> found)
>  - fixes LD_32_LIBRARY_PATH if in an amd64 environment (so lib32, lib32/wine,
> /usr/lib32)
>  - fixes PATH (so bin32 is found)
>  - passes execution to the counterpart in bin32

> The patch-nvidia.sh file does the following:
>  - Downloads the nVidia distfile for i386 (iff nVidia amd64 driver is
> installed)
>  - Installs the required libraries into ${PREFIX}/lib32
>  - When run from the install script it does _not_ download the distfile, only
> installs the libraries iff the distfiles are already downloaded.
> # Shortcomings of the port

> The following are shortcomings that I am aware of:
>  - Can only be compiled in an i386 environment, but the resulting package is
> *intended* for amd64 (although works fine in an i386 environment)
>  - If, somehow, there is a recursive calling of wine programs then
> LD_(32_)LIBRARY_PATH and PATH will continue to grow with every iteration.
>  - The pkgng ports cannot be installed in an i386 environment as they are
> labelled for amd64.

> # Testing

> The ports published on mediafire have been tested by many users.  The port
> itself works flawlessly however there have been some reports about some flaws
> in the 32-bit compatibility layer of the kernel (although I cannot remember
> the specifics now).

> To produce the package on an amd64 system do the following:
> # (cd /usr/ports/emulators/; patch -p0 < /path/to/diff)
> # make -C /usr/src world DESTDIR=/i386 TARGET=i386
> # mount -t devfs devfs /i386/dev
> # mkdir /i386/usr/ports
> # mount -t nullfs /usr/ports /i386/usr/ports
> # chroot make -C /usr/ports/emulators/wine-fbsd64 package WITH_PKGNG=yes

> The package wine-fbsd64-1.5.16,1.txz (in pkgng format) will be available from
> /usr/ports/packages/All/

> # Conclusion

> "It is based completely off the main port and uses the hack to,
>  effectively, use static linking (or bundling of libraries).  In a
>  sense it is a complete, yet quite stable and encompassing, hack. "
>  - David ;-)

It would be nice to have wine-fbsd64 as a port, but that might unfortunately
deprive the user of certain flexibility.

Also, nVidia support should be an option, since users with other graphics
cards might have no use for it.

I would really prefer to build the i386 FreeBSD system as a separate part, including kernel,
since some users, myself included, might want to run an actual FreeBSD i386,
especially on an older computer.  So one could build this FreeBSD i386 on a
USB stick or USB hard drive, and then be able to run wine on an i386 system.

Would wine-fbsd64 be a separate port, or would it be wine built on i386, as
the page http://wiki.freebsd.org/Wine suggests?  It would be nice to be able
to run Wine on i386 as well as amd64.


Tom



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5D.CB.23131.5AE46905>