Index: emulators/wine-devel/Makefile =================================================================== --- emulators/wine-devel/Makefile +++ emulators/wine-devel/Makefile @@ -7,11 +7,11 @@ CATEGORIES= emulators MASTER_SITES= http://mirrors.ibiblio.org/wine/source/3.x/ \ # SF/${PORTNAME}/Source -PKGNAMESUFFIX?= -devel +PKGNAMESUFFIX= -devel DISTFILES= ${DISTNAME}${EXTRACT_SUFX} -MAINTAINER?= gerald@FreeBSD.org -COMMENT?= Microsoft Windows compatibility environment +MAINTAINER= gerald@FreeBSD.org +COMMENT= Microsoft Windows compatibility environment LICENSE= LGPL21 LGPL3 LICENSE_COMB= dual @@ -23,13 +23,12 @@ prelink:sysutils/prelink LIB_DEPENDS= libxml2.so:textproc/libxml2 -CONFLICTS_INSTALL= wine-[0-9]* wine-staging-[0-9]* i386-wine-[0-9]* \ - i386-wine-staging-[0-9]* i386-wine-devel-[0-9]* +CONFLICTS_INSTALL= wine-[0-9]* -CPPFLAGS+= -I${LOCALBASE}/include -LDFLAGS+= -L${LOCALBASE}/lib +CPPFLAGS= -I${LOCALBASE}/include +LDFLAGS= -L${LOCALBASE}/lib GNU_CONFIGURE= yes -CONFIGURE_ARGS+=--verbose --disable-tests \ +CONFIGURE_ARGS=--verbose --disable-tests \ --without-alsa --without-capi --without-dbus \ --without-gettext --without-gettextpo \ --without-gphoto --without-gsm --without-gstreamer \ @@ -42,9 +41,9 @@ --without-tiff \ --without-udev CONFIGURE_ENV= CPPBIN="${CPP}" FLEX="${LOCALBASE}/bin/flex" -WINELIBDIR?= ${PREFIX}/lib +WINELIBDIR= ${PREFIX}/lib USES= bison compiler:c11 desktop-file-utils gmake shebangfix tar:xz -.if !defined(USE_LDCONFIG32) +.if !defined(WINE_WOW64) USE_LDCONFIG= ${WINELIBDIR} ${WINELIBDIR}/wine .endif SHEBANG_FILES= tools/make_requests tools/winemaker/winemaker \ @@ -53,7 +52,9 @@ SUB_FILES= pkg-message PKGMESSAGE= ${WRKDIR}/pkg-message +.if !defined(WINE_WOW64) PORTDATA= l_intl.nls wine.inf +.endif OPTIONS_DEFINE= CUPS DOCS DOSBOX GNUTLS HAL LDAP LIBXSLT MPG123 OPENAL V4L WINEMAKER X11 GECKO MONO OPTIONS_DEFAULT=GNUTLS X11 @@ -64,6 +65,7 @@ WINEMAKER_DESC= Fully support winemaker (requires Perl) GECKO_DESC= Bundle Gecko MSI package for Wine MONO_DESC= Bundle Mono MSI package for Wine +WOW64_DESC= Windows (32 bit) on Windows 64 bit CUPS_CONFIGURE_WITH= cups CUPS_LIB_DEPENDS= libcups.so:print/cups @@ -106,13 +108,16 @@ liblcms2.so:graphics/lcms2 \ libpng.so:graphics/png -.include +MPG123_FILES= l3codeca.* +OPENAL_FILES= openal32.* x3daudio*.dll* xapofx*.dll* xaudio*.dll* +WINE32_FILES= *16 *16.so bin/wine libkernel.def mmcndmgr.dll *.vxd *.vxd.so w32skrnl.* wine.1.gz wow32.* winevdm.* +WINE64_FILES= bin/wine64 +WOW64_FILES= mmcndmgr.dll +X11_FILES= glu32.dll* winex11.* %%DATADIR%%/fonts/* -# PR224863: clang 6.0.0 crashes -.if ${OPSYS} == FreeBSD && ${OSVERSION} == 1200056 && ${ARCH} == amd64 -USE_GCC= yes +.if !defined(ARCH) +ARCH!= uname -p .endif - .if ${ARCH} == amd64 # Wine is composed of three parts: # - wine (aka this port) is the 32-bit component and runs 32-bit programs (on FreeBSD/i386) @@ -120,48 +125,42 @@ # (on FreeBSD/amd64) # - wow64 (a subset of emulators/i386-wine-devel) is a part of the 64-bit component that runs # 32-bit programs (on FreeBSD/amd64) -# We also currently have: -# - "wine32" (aka emulators/i386-wine-devel) is the 32-bit component and runs 32-bit programs -# (on FreeBSD/amd64). This will be superseded by wow64. + +OPTIONS_DEFINE+= WOW64 +OPTIONS_DEFAULT+= WOW64 # --libdir is required since Wine defaults to "${PREFIX}/lib64" on amd64. CONFIGURE_ARGS+= --enable-win64 --libdir=${PREFIX}/lib -PLIST_SUB+= WINE32="@comment " WINE64="" -.if ${CHOSEN_COMPILER_TYPE} == clang && ${COMPILER_VERSION} < 38 -CPPFLAGS+= -D__builtin_ms_va_list=__builtin_va_list \ - -D__builtin_ms_va_start=__builtin_va_start \ - -D__builtin_ms_va_end=__builtin_va_end \ - -D__builtin_ms_va_copy=__builtin_va_copy .endif -# Wine assumes a WoW64 package is available however WoW64 is not yet available on FreeBSD. -post-patch: - ${REINPLACE_CMD} 's|/wine|/wine64|g' ${WRKSRC}/tools/wineapploader.in +.include -.else -PLIST_SUB+= WINE32="" WINE64="@comment " +# PR224863: clang 6.0.0 crashes +.if ${OPSYS} == FreeBSD && ${OSVERSION} == 1200056 && ${ARCH} == amd64 +USE_GCC= yes .endif -.if ${PORT_OPTIONS:MSTAGING} -MASTER_SITES+= https://github.com/compholio/wine-compholio-daily/archive/:cho -COMP_DIST= v${DISTVERSION}.tar.gz -DISTFILES+= ${COMP_DIST}:cho - -EXTRACT_DEPENDS=bash:shells/bash \ - git:devel/git \ - autoreconf-2.69:devel/autoconf -LIB_DEPENDS+= libtxc_dxtn.so:graphics/s2tc +. if ${ARCH} == amd64 && ${CHOSEN_COMPILER_TYPE} == clang && ${COMPILER_VERSION} < 38 +CPPFLAGS+= -D__builtin_ms_va_list=__builtin_va_list \ + -D__builtin_ms_va_start=__builtin_va_start \ + -D__builtin_ms_va_end=__builtin_va_end \ + -D__builtin_ms_va_copy=__builtin_va_copy +. endif -post-extract: fix-shebang - cd ${WRKSRC} && ${TAR} xf ${DISTDIR}/${COMP_DIST} --strip-components 1 - cd ${WRKSRC} && bash ./patches/patchinstall.sh --backend=patch DESTDIR=${WRKSRC} --all +.if ${PORT_OPTIONS:MWOW64} || defined(WINE_WOW64) +. include "${.CURDIR}/Makefile.wow64" +PLIST_SUB+= WINE32="" WINE64="" +.elif ${ARCH} == i386 +PLIST_SUB+= WINE32="" WINE64="@comment " +.else +PLIST_SUB+= WINE32="@comment " WINE64="" .endif -pre-build: - cd ${WRKSRC} && ${MAKE_CMD} depend +pre-build${WINE_METAMODE}: + cd ${BUILD_WRKSRC} && ${MAKE_CMD} depend -post-install: +post-install${WINE_METAMODE}: @${MV} -f ${STAGEDIR}${WINELIBDIR}/libwine.so.1.0 \ ${STAGEDIR}${WINELIBDIR}/libwine.so.1 @${LN} -sf libwine.so.1 ${STAGEDIR}/${WINELIBDIR}/libwine.so @@ -172,12 +171,5 @@ ${INSTALL_DATA} ${WRKSRC}/programs/winedbg/README ${STAGEDIR}${DOCSDIR}/README.winedbg ${INSTALL_DATA} ${WRKSRC}/tools/winedump/README ${STAGEDIR}${DOCSDIR}/README.winedump -check-wine-devel-vs-wine-staging: - @${GREP} %%STAGING%% pkg-plist | while read f; do \ - f=`echo $$f | ${SED} -e 's/%%STAGING%%//'`; \ - if [ -f "$$STAGEDIR/$$PREFIX/$$f" ]; then \ - ${PRINTF} "%s no longer contigent on %%STAGING%%?\n" "$$f"; \ - fi \ - done .include Index: emulators/wine-devel/Makefile.wow64 =================================================================== --- /dev/null +++ emulators/wine-devel/Makefile.wow64 @@ -0,0 +1,209 @@ +WINELIB32DIR= ${PREFIX}/lib32 + +.if !defined(WINE_WOW64) + +EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX} +DISTFILES= ${EXTRACT_ONLY} ${BASE_FILE}:${OSREL:C/\..+//} +MASTER_SITES= https://download.freebsd.org/ftp/releases/i386/${OSREL10}-RELEASE/base.txz?dummy=/:10 \ + https://download.freebsd.org/ftp/releases/i386/${OSREL11}-RELEASE/base.txz?dummy=/:11 \ + LOCAL/dbn/i386/12.0-CURRENT/:12 + +# Ensure distfiles are available for chroot build +BUILD_DEPENDS+= mesa-dri>0:graphics/mesa-dri + +BUNDLE_LIBS= yes +NEED_ROOT= yes +PKGINSTALL= ${FILESDIR}/pkg-install-${ARCH} +PKGDEINSTALL= ${PKGINSTALL} +USE_LDCONFIG32= ${WINELIB32DIR} ${WINELIB32DIR}/wine +POST_PLIST= add-plist-wow64 + +WINE_METAMODE= yes + +CHROOT_ENV= ${SETENV} \ + dp_CHROOT_DIR="${CHROOT_DIR}" \ + dp_CP="${CP}" \ + dp_CURDIR="${.CURDIR}" \ + dp_DISTDIR="${ACTUAL_DISTDIR}" \ + dp_ECHO="${ECHO}" \ + dp_MOUNT_DEVFS="${MOUNT_DEVFS}" \ + dp_MOUNT_NULLFS="${MOUNT_NULLFS}" \ + dp_PORTSDIR="${PORTSDIR}" \ + dp_PORT_DBDIR="${PORT_DBDIR}" \ + dp_SCRIPTSDIR="${SCRIPTSDIR}" \ + dp_UMOUNT="${UMOUNT}" \ + dp_WRKDIR="${WRKDIR}" +CHROOT_DIR= /tmp/i386 +CHROOT_CMD= ${CHROOT_ENV} ${SH} ${FILESDIR}/chroot ${CHROOT_DIR} +CHROOT_MAKE= ${CHROOT_CMD} make -C /port ${MAKEFLAGS} + +BASE_FILE= base${OSREL${OSREL:C/\..+//}}.txz +OSREL10= 10.3 +OSREL11= 11.1 +OSREL12= 12.20180307 + +ACTUAL_DISTDIR?=${DISTDIR} +.if defined(POUDRIERE_VERSION) +# We are in a poudriere build and need access to the full distfiles cache +ACTUAL_DISTDIR= /distfiles +.endif + +. if ${.TARGETS} == makesum +DISTFILES= ${EXTRACT_ONLY} base${OSREL10}.txz:10 base${OSREL11}.txz:11 base${OSREL12}.txz:12 +. endif + +. if ${UID} != 0 +ERROR+= "${PKGNAME} must be built as root" +. endif +.if !defined(JAILED) +JAILED!= ${SYSCTL} -n security.jail.jailed +.endif +.if ${JAILED} == 1 +. for sysctl in security.jail.enforce_statfs:enforce_statfs=1 \ + security.jail.mount_allowed:allow.mount \ + security.jail.mount_devfs_allowed:allow.mount.devfs \ + security.jail.mount_nullfs_allowed:allow.mount.nullfs +_sysctl!= ${SYSCTL} -n ${sysctl:C/:.*//} +. if ${_sysctl} == 0 +JAIL_PARAMS+= ${sysctl:C/.*://} +. endif +. endfor +. if defined(JAIL_PARAMS) +ERROR+= "Nested jail requires these missing params: ${JAIL_PARAMS}" +. endif +.endif + +post-extract: + ${MKDIR} ${CHROOT_DIR}/distfiles ${CHROOT_DIR}/port ${CHROOT_DIR}/usr/ports ${CHROOT_DIR}/wrkdirs + cd ${CHROOT_DIR} && ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${_DISTDIR}${BASE_FILE} ${EXTRACT_AFTER_ARGS} + ${CHROOT_CMD} service ldconfig start + +pre-configure: + ${CHROOT_MAKE} depends clean-depends WINE_WOW64=wine32 -DBATCH + +do-configure: + ${MAKE} configure WINE_WOW64=wine64-build -DBATCH + ${CHROOT_MAKE} configure WINE_WOW64=wine32-tools -DBATCH + +do-build: + ${MAKE} build WINE_WOW64=wine64-build -DBATCH + ${CHROOT_MAKE} build WINE_WOW64=wine32-tools -DBATCH + ${CHROOT_MAKE} configure WINE_WOW64=wine32-combo -DBATCH + ${CHROOT_MAKE} build WINE_WOW64=wine32-combo -DBATCH + +do-install: + ${CHROOT_MAKE} stage WINE_WOW64=wine32-combo -DBATCH + ${MAKE} stage WINE_WOW64=wine64-build -DBATCH + +add-plist-wow64: + # Fix pkg-plist references + [ -f ${TMPPLIST}.orig ] || ${MV} ${TMPPLIST} ${TMPPLIST}.orig + ( \ + ${SED} -E \ + -e '/^lib\/.*(${WINE32_FILES:N${WOW64_FILES:S/ /|/gW:S/*/\*/g}:S/ /|/gW:S/./\./g:S/*/.*/g:S/\//\\\//g})$$/d' \ + ${TMPPLIST}.orig; \ + ${SED} -Ene 's!^lib/!lib32/!gp' ${TMPPLIST}.orig; \ + ${CAT} ${TMPPLIST}.i386; \ + ) > ${TMPPLIST} + +post-clean: + ${RM} -r ${CHROOT_DIR} + +plist: stage + ${MAKE} makeplist > ${WRKDIR}/pkg-plist + ${SED} -E -e '1d' \ + -e '/^bin32\//d' \ + -e '/^lib\//d' \ + -e '/^lib32\/lib[^w]/d' \ + -e '/^lib32\/\.libGL/d' \ + -e '/(l_intl\.nls|ldconfig|patch-nvidia\.sh|wine\.inf)/d' \ + -e 's!^lib32!lib!g' \ + -e 's!^(.*)(${MPG123_FILES:S/ /|/gW:S/./\./g:S/*/.*/g})$$!%%MPG123%%\1\2!g' \ + -e 's!^(.*)(${OPENAL_FILES:S/ /|/gW:S/./\./g:S/*/.*/g})$$!%%OPENAL%%\1\2!g' \ + -e 's!^(.*)(${WINE32_FILES:S/ /|/gW:S/./\./g:S/*/.*/g})$$!%%WINE32%%\1\2!g' \ + -e 's!^(.*)(${WINE64_FILES:S/ /|/gW:S/./\./g:S/*/.*/g})$$!%%WINE64%%\1\2!g' \ + -e 's!^(.*)(${X11_FILES:S/ /|/gW:S/./\./g:S/*/.*/g})$$!%%X11%%\1\2!g' \ + ${WRKDIR}/pkg-plist > ${.CURDIR}/pkg-plist + +shell: patch + ${CHROOT_CMD} + +.else # defined(WINE_WOW64) + +CONFIGURE_OUTSOURCE= yes +CONFIGURE_WRKSRC= ${WRKDIR}/${WINE_WOW64} +. for stage in configure build stage +${stage:tu}_COOKIE= ${WRKDIR}/.${WINE_WOW64}-${stage}_done.${PORTNAME}.${PREFIX:S/\//_/g} +. endfor + +. if ${WINE_WOW64} != wine64-build + +RUN_DEPENDS+= mesa-dri>0:graphics/mesa-dri + +CONFIGURE_ARGS+= --bindir=${PREFIX}/bin32 --libdir=${WINELIB32DIR} + +WRKDIR= ${WRKDIRPREFIX} + +. if ${WINE_WOW64} == wine32-combo + +ACTUAL-PACKAGE-DEPENDS= ${DO_NADA} +CONFIGURE_ARGS+= --with-wine64=../wine64-build --with-wine-tools=../wine32-tools +WINELIBDIR= ${WINELIB32DIR} + +post-install-script: + # Install bounce script to access the 32-bit executables + ${INSTALL_SCRIPT} ${FILESDIR}/binbounce ${STAGEDIR}${PREFIX}/bin/wine + ${ECHO_CMD} bin32/wine >> ${TMPPLIST}.i386 + # Install libGL + ${MKDIR} ${STAGEDIR}${PREFIX}/lib32/.libGL/dri + ${INSTALL_DATA} ${LOCALBASE}/lib/libGL.so.1 ${STAGEDIR}${PREFIX}/lib32/.libGL/ + ${ECHO_CMD} lib32/.libGL/libGL.so.1 >> ${TMPPLIST}.i386 + # Install dri libraries (internal libGL requirements) + for lib in ${LOCALBASE}/lib/dri/*.so; do \ + ${INSTALL_DATA} $${lib} ${STAGEDIR}${PREFIX}/lib32/.libGL/dri/ ; \ + ${ECHO_CMD} lib32/.libGL/dri/$${lib##*/} >> ${TMPPLIST}.i386 ; \ + done + # Find all soft dependencies (via strings(1)) + ${CAT} ${TMPPLIST} ${TMPPLIST}.i386 \ + | ${GREP} -v '[@%]' \ + | ${SED} "s!^!${STAGEDIR}${PREFIX}/!g" \ + | ${XARGS} -n1 file -F' ' \ + | ${GREP} ELF \ + | ${CUT} -f1 -d' ' \ + | ${XARGS} strings \ + | ${GREP} '^lib.*\.so' \ + | ${SORT} -u \ + > ${WRKDIR}/winesoftlibs + for lib in `${CAT} ${WRKDIR}/winesoftlibs` ; do \ + if [ -e ${LOCALBASE}/lib/$${lib} ] && ! ${GREP} -q $${lib} ${TMPPLIST} ${TMPPLIST}.i386; then \ + ${INSTALL_DATA} ${LOCALBASE}/lib/$${lib} ${STAGEDIR}${PREFIX}/lib32/ ; \ + ${ECHO_CMD} lib32/$${lib} >> ${TMPPLIST}.i386 ; \ + fi ; \ + done + # Find all libraries that are linked too (via ldd(1)) + ${CAT} ${TMPPLIST} ${TMPPLIST}.i386 \ + | ${GREP} -v '[@%]' \ + | ${SED} "s!^!${STAGEDIR}${PREFIX}/!g" \ + | ${XARGS} -n1 file -F' ' \ + | ${GREP} ELF \ + | ${CUT} -f1 -d' ' \ + | env LD_LIBRARY_PATH=${STAGEDIR}${PREFIX}/lib32:${LD_LIBRARY_PATH} ${XARGS} ldd -f '%p\n' \ + | ${SORT} -u \ + | ${GREP} -v '^\(/usr\)\?/lib' \ + | ${GREP} -v "^${STAGEDIR}${PREFIX}/lib32/libwine.so" \ + | ${GREP} -v "^${STAGEDIR}${PREFIX}/lib32/wine" \ + > ${WRKDIR}/winelibs + for lib in `${CAT} ${WRKDIR}/winelibs` ; do \ + if ! ${GREP} -q $${lib##*/} ${TMPPLIST} ${TMPPLIST}.i386; then \ + ${INSTALL_DATA} $${lib} ${STAGEDIR}${PREFIX}/lib32/ ; \ + ${ECHO_CMD} lib32/$${lib##*/} >> ${TMPPLIST}.i386 ; \ + fi ; \ + done + # Install nvidia patching script + ${MKDIR} ${STAGEDIR}${DATADIR} + ${INSTALL_SCRIPT} ${FILESDIR}/nvidia.sh ${STAGEDIR}${DATADIR}/patch-nvidia.sh + ${ECHO_CMD} ${DATADIR:S|$(PREFIX)/||}/patch-nvidia.sh >> ${TMPPLIST}.i386 + +. endif +. endif +.endif Index: emulators/wine-devel/distinfo =================================================================== --- emulators/wine-devel/distinfo +++ emulators/wine-devel/distinfo @@ -1,3 +1,9 @@ -TIMESTAMP = 1520106016 +TIMESTAMP = 1520783098 SHA256 (wine-3.3.tar.xz) = 0594bdb27bb3f9420dd8cbf3cb8c6a66712c155477837d726abd1e4ab50ca333 SIZE (wine-3.3.tar.xz) = 19891048 +SHA256 (base10.3.txz) = 311faed2f5484184d4942399edc49e7add0fdccf30bdb22ee404f0c5d5cd768a +SIZE (base10.3.txz) = 67574056 +SHA256 (base11.1.txz) = f996e2971640b685beb7b2b13dcaeddda5df31ad0c75d480c8f222cd94e9c143 +SIZE (base11.1.txz) = 84673592 +SHA256 (base12.20180307.txz) = 53a62dacc0f9dcbe8d4f059430e12d697a940669d78eb73d4211f728a292c9ea +SIZE (base12.20180307.txz) = 144173328 Index: emulators/wine-devel/files/binbounce =================================================================== --- /dev/null +++ emulators/wine-devel/files/binbounce @@ -0,0 +1,23 @@ +#!/bin/sh + +TARGET="`realpath $0`" + +LOCALBASE=${TARGET%/*}/.. +BINNAME=${TARGET##*/} + +if [ -z "$__BINBOUNCE_BOOTSTRAP" ] +then + export LIBGL_DRIVERS_PATH=$LOCALBASE/lib32/dri + if [ `uname -p` = i386 ] + then + export LD_LIBRARY_PATH="$LOCALBASE/lib32":"$LOCALBASE/lib32/wine":"$LD_LIBRARY_PATH" + export LD_LIBRARY_PATH_RPATH=y + else + export LD_32_LIBRARY_PATH="$LOCALBASE/lib32":"$LOCALBASE/lib32/wine":"$LD_32_LIBRARY_PATH":/usr/lib32 + export LD_32_LIBRARY_PATH_RPATH=y + fi + export PATH="$LOCALBASE/bin32":"$PATH" + export __BINBOUNCE_BOOTSTRAP="1" +fi + +exec "$LOCALBASE/bin32/$BINNAME" "$@" Index: emulators/wine-devel/files/chroot =================================================================== --- /dev/null +++ emulators/wine-devel/files/chroot @@ -0,0 +1,53 @@ +#!bin/sh +# $FreeBSD$ + +set -e + +. "${dp_SCRIPTSDIR}/functions.sh" + +validate_env dp_CHROOT_DIR dp_CP dp_CURDIR dp_DISTDIR dp_ECHO dp_MOUNT_DEVFS dp_MOUNT_NULLFS dp_PORT_DBDIR dp_PORTSDIR dp_UMOUNT dp_WRKDIR + +[ -n "${DEBUG_CHROOT}" ] && set -x + +set -u + +in_curdir="yes" +if [ "${dp_CURDIR##${dp_PORTSDIR}}" == "${dp_CURDIR}" ] +then + in_curdir="" +fi + +in_wrkdir="yes" +if [ "${dp_WRKDIR##${dp_PORTSDIR}}" == "${dp_WRKDIR##$}" -a "${dp_WRKDIR##${dp_CURDIR}}" == "${dp_WRKDIR##$}" ] +then + in_wrkdir="" +fi + +cleanup() { + + ${dp_UMOUNT} ${dp_CHROOT_DIR}/wrkdirs + ${dp_UMOUNT} ${dp_CHROOT_DIR}/port + ${dp_UMOUNT} ${dp_CHROOT_DIR}${dp_PORT_DBDIR} + ${dp_UMOUNT} ${dp_CHROOT_DIR}/distfiles + ${dp_UMOUNT} ${dp_CHROOT_DIR}/usr/ports + ${dp_UMOUNT} ${dp_CHROOT_DIR}/dev + + trap - EXIT INT TERM + +} + +${dp_MOUNT_DEVFS} ${dp_CHROOT_DIR}/dev +${dp_MOUNT_NULLFS} ${dp_PORTSDIR} ${dp_CHROOT_DIR}/usr/ports +${dp_MOUNT_NULLFS} ${dp_DISTDIR} ${dp_CHROOT_DIR}/distfiles +${dp_MOUNT_NULLFS} ${dp_PORT_DBDIR} ${dp_CHROOT_DIR}${dp_PORT_DBDIR} +${dp_MOUNT_NULLFS} ${dp_CURDIR} ${dp_CHROOT_DIR}/port +${dp_MOUNT_NULLFS} ${dp_WRKDIR} ${dp_CHROOT_DIR}/wrkdirs + +${dp_CP} /etc/make.conf ${dp_CHROOT_DIR}/etc/ +for var in ARCH=i386 MACHINE=i386 UNAME_m=i386 UNAME_p=i386 DISTDIR=/distfiles PORTSDIR=/usr/ports WRKDIRPREFIX=/wrkdirs STRICT_DEPENDS=; do + ${dp_ECHO} $var >> ${dp_CHROOT_DIR}/etc/make.conf +done + +trap cleanup EXIT INT TERM + +/usr/sbin/chroot "$@" Index: emulators/wine-devel/files/nvidia.sh =================================================================== --- /dev/null +++ emulators/wine-devel/files/nvidia.sh @@ -0,0 +1,215 @@ +#!/bin/sh +# Copyright 2010 to 2015 David Naylor +# Copyright 2012 Jan Beich +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY David Naylor ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO +# EVENT SHALL David Naylor OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# The views and conclusions contained in the software and documentation are +# those of the authors and should not be interpreted as representing official +# policies, either expressed or implied, of David Naylor. + +# Version 1.0 - 2010/05/28 +# - initial release +# Version 1.1 - 2010/10/04 +# - add support for 256 driver series +# - use passive connections for FTP +# - allow resuming of downloads if they were interrupted +# - add license and copyright notice +# Version 1.2 - 2010/10/17 +# - try to save the NVIDIA tarball under $PORTSDIR/distfiles +# - obay $PREFIX +# - extract files directly to destination (avoids using /tmp) +# Version 1.3 - 2010/11/02 +# - add support for future driver series +# Version 1.4 - 2011/05/23 +# - add support for legacy drivers +# Version 1.5 - 2011/10/23 +# - add support for no-fetch mode +# - backup the original openGL.so.1 library +# Version 1.6 - 2012/06/06 +# - add support for pkgng +# Version 1.7 - 2012/06/23 +# - make nVidia detection more robust +# - allow mixed pkg/pkgng operation +# Version 1.8 - 2012/07/02 +# - fix mixed pkg/pkgng operation +# Version 1.9 - 2012/10/31 +# - fix permission of extracts files +# Version 1.10 - 2013/05/06 +# - s/wine-fbsd64/i386-wine/g +# - fix unwanted failures due to `set -e` +# Version 1.11 - 2013/05/26 +# - install libGL.so.1 to ${PREFIX}/lib32/.nvidia and link to it +# - add deinstall option +# Version 1.12 - 2013/11/03 +# - add detection for i386-wine-devel +# Version 1.13 - 2014/08/05 +# - add detection for i386-wine-compholio +# Version 1.14 - 2014/12/26 +# - gracefully handle a corrupt nVidia tarball +# - provide checksum and size information for nVidia tarball +# Version 1.15 - 2015/03/10 +# - handle nvidia-driver with package name suffix +# - handle i386-wine with arbitary package name suffix +# - remove support for old pkg_ tools +# Version 1.16 - 2017/06/04 +# - use https download site + +set -e + +PORTSDIR=${PORTSDIR:-/usr/ports} +PREFIX=${PREFIX:-/usr/local} +DISTDIR=${DISTDIR:-${PORTSDIR}/distfiles} + +if [ -d $DISTDIR ] +then + cd $DISTDIR + NO_REMOVE_NVIDIA="yes" +else + cd /tmp/ +fi + +terminate() { + + echo "!!! $2 !!!" + echo "Terminating..." + exit $1 + +} + +args=`getopt dn $*` +if [ $? -ne 0 ] +then + echo "Usage: $0 [-n]" + exit 7 +fi +set -- $args +while true +do + case $1 in + -d) + rm -f ${PREFIX}/lib32/libGL.so.1 + rm -f ${PREFIX}/lib32/libGLcore.so.1 ${PREFIX}/lib32/libnvidia-tls.so.1 + rm -f ${PREFIX}/lib32/libnvidia-glcore.so.1 ${PREFIX}/lib32/libnvidia-tls.so.1 + rm -rf ${PREFIX}/lib32/.nvidia/ + if [ -d ${PREFIX}/lib32/.libGL-new ] + then + ln -s .libGL-new/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 + else + ln -s .libGL/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 + fi + exit 0 + ;; + -n) + NO_FETCH=yes + ;; + --) + shift + break + ;; + esac + shift +done + +version() { + local ret pkg="$1" + if [ -f "/usr/local/sbin/pkg" ] + then + ret=`pkg query -g '%v' "$pkg" || true` + fi + + # installed manually or failed to register + if [ -z "$ret" ] && [ "$pkg" = "nvidia-driver*" ] + then + ret=`sed -n "s/.*Version: //p" 2> /dev/null \ + $PREFIX/share/doc/NVIDIA_GLX-1.0/README || true` + fi + echo "$ret" +} + +[ `whoami` = root ] \ + || terminate 254 "This script should be run as root" + +echo "===> Patching i386-wine to work with x11/nvidia-driver:" + +if [ -z "${WINE}" ] +then + WINE=`version 'i386-wine*'` +fi +[ -n "$WINE" ] \ + || terminate 255 "Unable to detect i386-wine, please install first" +echo "=> Detected i386-wine: ${WINE}" + +NV=`version 'nvidia-driver*'` +[ -n "$NV" ] \ + || terminate 1 "Unable to detect nvidia-driver, please install first" +echo "=> Detected nvidia-driver: ${NV}" + +NVIDIA=${NV} +NV=`echo ${NV} | cut -f 1 -d _ | cut -f 1 -d ,` + +if [ ! -f NVIDIA-FreeBSD-x86-${NV}.tar.gz ] || !(tar -tf NVIDIA-FreeBSD-x86-${NV}.tar.gz > /dev/null 2>&1) +then + [ -n "$NO_FETCH" ] \ + && terminate 8 "NVIDIA-FreeBSD-x86-${NV}.tar.gz unavailable" + echo "=> Downloading NVIDIA-FreeBSD-x86-${NV}.tar.gz from https://download.nvidia.com..." + rm -f NVIDIA-FreeBSD-x86-${NV}.tar.gz + fetch -aRr https://download.nvidia.com/XFree86/FreeBSD-x86/${NV}/NVIDIA-FreeBSD-x86-${NV}.tar.gz \ + || terminate 2 "Failed to download NVIDIA-FreeBSD-x86-${NV}.tar.gz" + echo "=> Downloaded NVIDIA-FreeBSD-x86-${NV}.tar.gz" + echo "Please check the following information against /usr/ports/x11/nvidia-driver/distinfo" + sha256 NVIDIA-FreeBSD-x86-${NV}.tar.gz + echo "SIZE (NVIDIA-FreeBSD-x86-${NV}.tar.gz) = `stat -f "%z" NVIDIA-FreeBSD-x86-${NV}.tar.gz`" +fi + +echo "=> Extracting NVIDIA-FreeBSD-x86-${NV}.tar.gz to $PREFIX/lib32..." +EXTRACT_LIST="libGL.so.1" +case $NV in + 195*|173*|96*|71*) + EXTRACT_LIST="$EXTRACT_LIST libGLcore.so.1 libnvidia-tls.so.1" + ;; + *) + EXTRACT_LIST="$EXTRACT_LIST libnvidia-glcore.so.1 libnvidia-tls.so.1" + ;; +esac + +EXTRACT_ARGS="--no-same-owner --no-same-permissions --strip-components 2 -C $PREFIX/lib32" +for i in $EXTRACT_LIST +do + EXTRACT_ARGS="$EXTRACT_ARGS --include NVIDIA-FreeBSD-x86-${NV}/obj/$i" +done +umask 0333 +tar $EXTRACT_ARGS -xvf NVIDIA-FreeBSD-x86-${NV}.tar.gz \ + || terminate 3 "Failed to extract NVIDIA-FreeBSD-x86-${NV}.tar.gz" +mkdir -m 0755 -p ${PREFIX}/lib32/.nvidia \ + || terminate 9 "Failed to create .nvidia shadow directory" +mv ${PREFIX}/lib32/libGL.so.1 ${PREFIX}/lib32/.nvidia/ \ + || terminate 10 "Failed to move libGL.so.1 to .nvidia/ shadow directory" +ln -s .nvidia/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 \ + || terminate 11 "Failed to link to .nvidia/libGL.so.1 in the shadow directory" + +echo "=> Cleaning up..." +[ -n "$NO_REMOVE_NVIDIA" ] || rm -vf NVIDIA-FreeBSD-x86-${NV}.tar.gz \ + || terminate 6 "Failed to remove files" + +echo "===> i386-wine-${WINE} successfully patched for nvidia-driver-${NVIDIA}" Index: emulators/wine-devel/files/pkg-install-amd64 =================================================================== --- /dev/null +++ emulators/wine-devel/files/pkg-install-amd64 @@ -0,0 +1,53 @@ +#!/bin/sh + +export PREFIX=${PKG_PREFIX:-/usr/local} +export WINE=$1 + +if [ -d ${PREFIX}/lib32/.libGL-new ] +then + LIBGLDIR=.libGL-new +else + LIBGLDIR=.libGL +fi + +case "$2" in + DEINSTALL) + sh ${PREFIX}/share/wine/patch-nvidia.sh -d + rm -r ${PREFIX}/lib32/libGL.so.1 ${PREFIX}/lib32/dri + ;; + POST-INSTALL) + ln -s ${LIBGLDIR}/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 + mkdir -p ${PREFIX}/lib32/dri + for dri in $(cd ${PREFIX}/lib32/${LIBGLDIR}/dri/; echo *.so) + do + ln -s ../${LIBGLDIR}/dri/${dri} ${PREFIX}/lib32/dri/${dri} + done + sh ${PREFIX}/share/wine/patch-nvidia.sh -n > /dev/null 2>&1 + case $? in + 0) + cat << _EOF +$1 has been patched for use with nvidia graphics driver. If +the version of the installed nvidia graphics driver changes execute (as root): +_EOF + ;; + 1) + cat << _EOF +This system does not appear to use a nvidia graphics driver. If this changes +and then every time the driver's version changes execute (as root) +_EOF + ;; + *) + cat << _EOF +A NVIDIA GRAPHICS DRIVER HAS BEEN DETECTED ON THIS SYSTEM AND THE AUTOMATED +PATCHING HAS FAILED, execute (as root) +_EOF + ;; + esac + cat << _EOF + sh ${PREFIX}/share/wine/patch-nvidia.sh +to get 2D/3D acceleration to work with the nvidia driver. Without this wine +will crash when a program requires 2D/3D graphics acceleration. + +_EOF + ;; +esac Index: emulators/wine-devel/pkg-plist =================================================================== --- emulators/wine-devel/pkg-plist +++ emulators/wine-devel/pkg-plist @@ -27,9 +27,6 @@ include/wine/itss.h include/wine/itss.idl include/wine/library.h -include/wine/svcctl.h -include/wine/svcctl.idl -include/wine/unicode.h include/wine/msvcrt/assert.h include/wine/msvcrt/conio.h include/wine/msvcrt/crtdbg.h @@ -70,6 +67,9 @@ include/wine/msvcrt/unistd.h include/wine/msvcrt/wchar.h include/wine/msvcrt/wctype.h +include/wine/svcctl.h +include/wine/svcctl.idl +include/wine/unicode.h include/wine/windows/accctrl.h include/wine/windows/access.idl include/wine/windows/aclapi.h @@ -263,6 +263,31 @@ include/wine/windows/dde.h include/wine/windows/dde.rh include/wine/windows/ddeml.h +include/wine/windows/ddk/compstui.h +include/wine/windows/ddk/csq.h +include/wine/windows/ddk/d3dkmthk.h +include/wine/windows/ddk/hidclass.h +include/wine/windows/ddk/hidpi.h +include/wine/windows/ddk/hidport.h +include/wine/windows/ddk/hidsdi.h +include/wine/windows/ddk/hidtypes.h +include/wine/windows/ddk/imm.h +include/wine/windows/ddk/mountmgr.h +include/wine/windows/ddk/ndis.h +include/wine/windows/ddk/ntddcdvd.h +include/wine/windows/ddk/ntddk.h +include/wine/windows/ddk/ntddser.h +include/wine/windows/ddk/ntddtape.h +include/wine/windows/ddk/ntifs.h +include/wine/windows/ddk/usb.h +include/wine/windows/ddk/usb100.h +include/wine/windows/ddk/usb200.h +include/wine/windows/ddk/usbdlib.h +include/wine/windows/ddk/usbioctl.h +include/wine/windows/ddk/usbiodef.h +include/wine/windows/ddk/wdm.h +include/wine/windows/ddk/winddiui.h +include/wine/windows/ddk/winsplp.h include/wine/windows/ddraw.h include/wine/windows/ddrawgdi.h include/wine/windows/ddrawi.h @@ -924,31 +949,6 @@ include/wine/windows/xmllite.h include/wine/windows/xmllite.idl include/wine/windows/zmouse.h -include/wine/windows/ddk/compstui.h -include/wine/windows/ddk/csq.h -include/wine/windows/ddk/d3dkmthk.h -include/wine/windows/ddk/hidclass.h -include/wine/windows/ddk/hidpi.h -include/wine/windows/ddk/hidport.h -include/wine/windows/ddk/hidsdi.h -include/wine/windows/ddk/hidtypes.h -include/wine/windows/ddk/imm.h -include/wine/windows/ddk/mountmgr.h -include/wine/windows/ddk/ndis.h -include/wine/windows/ddk/ntddcdvd.h -include/wine/windows/ddk/ntddk.h -include/wine/windows/ddk/ntddser.h -include/wine/windows/ddk/ntddtape.h -include/wine/windows/ddk/ntifs.h -include/wine/windows/ddk/usb.h -include/wine/windows/ddk/usb100.h -include/wine/windows/ddk/usb200.h -include/wine/windows/ddk/usbdlib.h -include/wine/windows/ddk/usbioctl.h -include/wine/windows/ddk/usbiodef.h -include/wine/windows/ddk/wdm.h -include/wine/windows/ddk/winddiui.h -include/wine/windows/ddk/winsplp.h lib/libwine.so lib/libwine.so.1 lib/wine/acledit.dll.so