From owner-freebsd-ports@FreeBSD.ORG Sun Nov 4 11:32:19 2012 Return-Path: Delivered-To: freebsd-ports@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 46035F4F for ; Sun, 4 Nov 2012 11:32:19 +0000 (UTC) (envelope-from utisoft@gmail.com) Received: from mail-bk0-f54.google.com (mail-bk0-f54.google.com [209.85.214.54]) by mx1.freebsd.org (Postfix) with ESMTP id BE3BA8FC14 for ; Sun, 4 Nov 2012 11:32:18 +0000 (UTC) Received: by mail-bk0-f54.google.com with SMTP id jf20so1934658bkc.13 for ; Sun, 04 Nov 2012 03:32:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:from:date :x-google-sender-auth:message-id:subject:to:cc:content-type; bh=GvjSE5YQjCzOJCp5XcFvjfuEXstP75/WNW1jXMVHUpI=; b=gJ3utDkLujy7kUA4APcW0aXILfsOHs3lY1JVm+scnlCru7UQGbpxGDEzG0RALok4RL 4U4uFSq56FfDajFfOVwCyCqMpe1rOXzdzAmBEfPtRsndQCNJ/XLPtskIzgkts292bWRE R3K+c3/P24e26pXtiNhMYJvO7BpQpMovkJoKKoDMNshnNW+YIfJ47VvUX/x39xhX9GoO zCgEm29HVizFm8TL0T/SUtZ9KoS2XBSJe89qB2Yzk+2LumRm6/5QDSIPXnh7jBIdABZu dnEqgItzNefui7NexpWh2H13WlD4KwUWpiod9awjdHLMvsUzR/yPK335BCu4dQOSDqed qfCA== Received: by 10.204.149.135 with SMTP id t7mr1608178bkv.103.1352028737519; Sun, 04 Nov 2012 03:32:17 -0800 (PST) MIME-Version: 1.0 Sender: utisoft@gmail.com Received: by 10.204.50.197 with HTTP; Sun, 4 Nov 2012 03:31:46 -0800 (PST) In-Reply-To: <5D.CB.23131.5AE46905@smtp02.insight.synacor.com> References: <5D.CB.23131.5AE46905@smtp02.insight.synacor.com> From: Chris Rees Date: Sun, 4 Nov 2012 11:31:46 +0000 X-Google-Sender-Auth: qHtsZUM5uJYZkb5ctC4SO0soBa8 Message-ID: Subject: Re: wine/i386 for FreeBSD/amd64 port (aka wine-fbsd64) To: Thomas Mueller Content-Type: text/plain; charset=ISO-8859-1 Cc: David Naylor , FreeBSD Mailing List X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 04 Nov 2012 11:32:19 -0000 On 4 November 2012 11:16, Thomas Mueller wrote: > from David Naylor : > >> 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. It would be a separate port, as he has explained :) I think this is very interesting... but I'm not 100% convinced the best place for this is in the ports tree. However, it would improve visibility for it, with a good IGNORE message. We have a problem however; we can't include bsd.port.pre.mk in a slave port. The solution I can think of is; post-package-script: if [ "${PKG_BIN:T}" = "pkg" ]; then \ ${XZ_CMD} -dc ${PKGFILE} | \ ${SED} -e "s/^\(arch: freebsd:.*:x86\):32/\1:64/" | \ ${XZ_CMD} > ${WRKDIR}/${PKGNAME}.txz; \ ${MV} ${WRKDIR}/${PKGNAME}.txz ${PKGFILE}; \ fi Chris