wine/i386 for FreeBSD/amd64 port (aka wine-fbsd64)

Thomas Mueller mueller23 at
Sun Nov 4 11:17:00 UTC 2012

from David Naylor <naylor.b.david at>:

> Hi List,

> # Executive Summary

> Over the past years I have been maintaining the wine-fbsd64 port (see
> 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 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 suggests?  It would be nice to be able
to run Wine on i386 as well as amd64.


More information about the freebsd-ports mailing list