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

David Naylor naylor.b.david at
Sat Nov 3 07:49:24 UTC 2012

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 

# 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 
 - fixes LD_32_LIBRARY_PATH if in an amd64 environment (so lib32, lib32/wine, 
 - 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 
 - 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 

# 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 ;-)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 196 bytes
Desc: This is a digitally signed message part.
URL: <>

More information about the freebsd-ports mailing list