diff --git a/emulators/i386-wine-devel/Makefile.i386 b/emulators/i386-wine-devel/Makefile.i386 index 2044c8ab616a..d3047e773b7f 100644 --- a/emulators/i386-wine-devel/Makefile.i386 +++ b/emulators/i386-wine-devel/Makefile.i386 @@ -14,10 +14,9 @@ PKGDEINSTALL= ${PKGINSTALL} RUN_DEPENDS= mesa-dri>0:graphics/mesa-dri -CONFLICTS_INSTALL?= wine-[0-9]* wine-staging-[0-9]* wine-devel-[0-9]* \ +CONFLICTS_INSTALL?= wine-[0-9]* wine-staging-[0-9]* \ i386-wine-[0-9]* i386-wine-staging-[0-9]* -ACTUAL-PACKAGE-DEPENDS= ${DO_NADA} WINELIBDIR= ${PREFIX}/lib32 CONFIGURE_ARGS+= --bindir=${PREFIX}/bin32 --libdir=${WINELIBDIR} PLIST_REINPLACE+= winelib @@ -36,7 +35,7 @@ post-install-script: # Fix pkg-plist references ${REINPLACE_CMD} -e 's!lib/!lib32/!g' ${TMPPLIST} # Install bounce script to access the 32-bit executables - ${INSTALL_SCRIPT} ${SLAVEDIR}/files/binbounce ${STAGEDIR}${PREFIX}/bin/wine + ${INSTALL_SCRIPT} ${SLAVEDIR}/files/${BINBOUNCE} ${STAGEDIR}${PREFIX}/bin/wine for i in `${GREP} ^bin ${TMPPLIST} | ${XARGS} -n1 basename` ; do \ [ "$${i}" = "wine" ] || ${LN} -f ${STAGEDIR}${PREFIX}/bin/wine ${STAGEDIR}${PREFIX}/bin/$${i} ; \ ${ECHO_CMD} bin32/$${i} >> ${TMPPLIST} ; \ @@ -77,3 +76,12 @@ post-install-script: ${ECHO_CMD} ${DATADIR:S|$(PREFIX)/||}/patch-nvidia.sh >> ${TMPPLIST} .include "${MASTERDIR}/Makefile" + +.if ${PORT_OPTIONS:MWOW64} +ACTUAL-PACKAGE-DEPENDS= ${ECHO_CMD} "\"wine-devel\": {origin: \"emulators/wine-devel\", version: \"${PKGVERSION}\"}" +BINBOUNCE= binbounce.wow64 +.else +CONFLICTS_INSTALL+= wine-devel-[0-9]* +ACTUAL-PACKAGE-DEPENDS= ${DO_NADA} +BINBOUNCE= binbounce +.endif diff --git a/emulators/i386-wine-devel/files/binbounce.wow64 b/emulators/i386-wine-devel/files/binbounce.wow64 new file mode 100644 index 000000000000..3ea3af7e7158 --- /dev/null +++ b/emulators/i386-wine-devel/files/binbounce.wow64 @@ -0,0 +1,25 @@ +#!/bin/sh + +TARGET="`realpath $0`" + +LOCALBASE=${TARGET%/*}/.. +BINNAME=${TARGET##*/} + +if [ -z "$__BINBOUNCE_BOOTSTRAP" ] +then + export LIBGL_DRIVERS_PATH=$LOCALBASE/lib32/dri + export LD_32_LIBRARY_PATH="$LOCALBASE/lib32":"$LOCALBASE/lib32/wine":"$LD_32_LIBRARY_PATH":/usr/lib32 + export LD_32_LIBRARY_PATH_RPATH=y + export PATH="$LOCALBASE/bin32":"$PATH" + export __BINBOUNCE_BOOTSTRAP="1" + + WINE32_VERSION=`$LOCALBASE/bin32/wine --version` + WINE64_VERSION=`wine64 --version` + if [ "$WINE32_VERSION" != "$WINE64_VERSION" ] + then + echo "Please, make sure that wine [$WINE32_VERSION] and wine64 [$WINE64_VERSION] versions match each other." + exit 1 + fi +fi + +exec "$LOCALBASE/bin32/$BINNAME" "$@" diff --git a/emulators/wine-devel/Makefile b/emulators/wine-devel/Makefile index 09bd72019831..8747bf1a0c7c 100644 --- a/emulators/wine-devel/Makefile +++ b/emulators/wine-devel/Makefile @@ -3,7 +3,7 @@ PORTNAME= wine DISTVERSION= 4.21 -PORTEPOCH= 1 +PORTEPOCH= 2 CATEGORIES= emulators MASTER_SITES= SF/${PORTNAME}/Source \ http://mirrors.ibiblio.org/wine/source/4.x/ @@ -27,7 +27,7 @@ LIB_DEPENDS= libFAudio.so:audio/faudio \ USES= bison desktop-file-utils gmake localbase shebangfix tar:xz xorg CONFLICTS_INSTALL= wine-[0-9]* wine-staging-[0-9]* i386-wine-[0-9]* \ - i386-wine-staging-[0-9]* i386-wine-devel-[0-9]* + i386-wine-staging-[0-9]* GNU_CONFIGURE= yes CONFIGURE_ARGS+=--verbose \ @@ -55,12 +55,14 @@ SHEBANG_FILES= tools/make_requests tools/winemaker/winemaker \ SUB_FILES= pkg-message -PORTDATA= l_intl.nls wine.inf - -OPTIONS_DEFINE= CUPS DOCS DOSBOX GCC GNUTLS HAL LDAP LIBXSLT MPG123 OPENAL STAGING V4L VKD3D VULKAN WINEMAKER X11 GECKO MONO +OPTIONS_DEFINE= CUPS DOCS DOSBOX GCC GNUTLS HAL LDAP LIBXSLT MPG123 OPENAL STAGING V4L VKD3D VULKAN WINEMAKER X11 GECKO MONO WOW64 OPTIONS_DEFAULT=GCC GNUTLS X11 OPTIONS_SUB= yes +.if !defined(WINE_CROSS_BUILD) +OPTIONS_EXCLUDE_i386=WOW64 +.endif + DOSBOX_DESC= Use DOSBox to run MS-DOS programs LIBXSLT_DESC= Use libxslt (only used by msxml3.dll) VKD3D_DESC= Direct3D 12 support via Vulkan @@ -68,6 +70,7 @@ VULKAN_DESC= Vulkan API support 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= Allow simultaneous installation of 32- and 64-bit Wine CUPS_CONFIGURE_WITH= cups CUPS_LIB_DEPENDS= libcups.so:print/cups @@ -122,6 +125,14 @@ X11_LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig \ .include +.if empty(PORT_OPTIONS:MWOW64) || ${ARCH} == amd64 +PORTDATA= l_intl.nls wine.inf +.endif + +.if empty(PORT_OPTIONS:MWOW64) +CONFLICTS_INSTALL+= i386-wine-devel-[0-9]* +.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) @@ -136,13 +147,6 @@ X11_LIB_DEPENDS= libfontconfig.so:x11-fonts/fontconfig \ # --libdir is required since Wine defaults to "${PREFIX}/lib64" on amd64. CONFIGURE_ARGS+= --enable-win64 --libdir=${PREFIX}/lib PLIST_SUB+= WINE32="@comment " WINE64="" - -# Wine assumes a WoW64 package is available, however WoW64 is not yet -# available on FreeBSD. Also fix the desktop file. -post-patch: - ${REINPLACE_CMD} 's|/wine|/wine64|g' ${WRKSRC}/tools/wineapploader.in - ${REINPLACE_CMD} '/Exec/s|wine|wine64|g' ${WRKSRC}/loader/wine.desktop - .else PLIST_SUB+= WINE32="" WINE64="@comment " .endif @@ -175,6 +179,21 @@ post-install: .endfor ${INSTALL_DATA} ${WRKSRC}/programs/winedbg/README ${STAGEDIR}${DOCSDIR}/README.winedbg ${INSTALL_DATA} ${WRKSRC}/tools/winedump/README ${STAGEDIR}${DOCSDIR}/README.winedump +.if ${ARCH} == i386 && ${PORT_OPTIONS:MWOW64} + for i in `${GREP} ^bin ${TMPPLIST} | ${XARGS} -n1 basename` ; do \ + [ "$${i}" = "wine" ] || ${RM} ${STAGEDIR}${PREFIX}/bin/$${i} ${STAGEDIR}${PREFIX}/bin32/$${i} ; \ + done + ${RM} -r ${STAGEDIR}${PREFIX}/include/wine + ${RM} -r ${STAGEDIR}${PREFIX}/man + ${RM} -r ${STAGEDIR}${PREFIX}/share/wine/fonts + ${RM} -r ${STAGEDIR}${PREFIX}/share/wine/gecko + ${RM} -r ${STAGEDIR}${PREFIX}/share/wine/mono + ${RM} -r ${STAGEDIR}${DOCSDIR} + ${RM} ${STAGEDIR}${PREFIX}/share/applications/wine.desktop + ${RM} ${STAGEDIR}${PREFIX}/share/wine/*.inf + ${RM} ${STAGEDIR}${PREFIX}/share/wine/*.nls + ${REINPLACE_CMD} -n -E -e "/^(@|bin\/wine$$|lib\/)/p" ${TMPPLIST} +.endif check-wine-devel-vs-staging: @${GREP} %%STAGING%% pkg-plist | while read f; do \