emulators/wine-devel: Invoke with LD_BIND_NOW and revampe WoW
Forward port1d2af6e089
and its two follow-up fixesad15b0e748
and1b5885c463
from emulators/wine: Wine 6.0 and later need LD_BIND_NOW / LD_32_BIND_NOW on FreeBSD, cf. https://bugs.winehq.org/show_bug.cgi?id=50257 and https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=252307 so move the actual binaries to wine64.bin / wine.bin and invoke them via a script that does those settings. [1] Also revamp the WoW handling/packging which combines 32-bit/i386 Wine into 64-bit/amd64 Wine. [1] Submitted by: Alex S <iwtcex@gmail.com> [1] PR: 257284 [1], 252307 [1], 255336, 257020
This commit is contained in:
parent
0ed0c75802
commit
27ae28dd24
5 changed files with 89 additions and 2 deletions
|
@ -2,6 +2,7 @@
|
|||
|
||||
PORTNAME= wine
|
||||
DISTVERSION= 6.14
|
||||
PORTREVISION= 1
|
||||
PORTEPOCH= 1
|
||||
CATEGORIES= emulators
|
||||
MASTER_SITES= SF/${PORTNAME}/Source \
|
||||
|
@ -167,6 +168,17 @@ pre-build:
|
|||
cd ${WRKSRC} && ${MAKE_CMD} depend
|
||||
|
||||
post-install:
|
||||
.if ${ARCH} == i386
|
||||
${MV} ${STAGEDIR}${PREFIX}/bin/wineserver ${STAGEDIR}${PREFIX}/bin/wineserver32
|
||||
${MV} ${STAGEDIR}${PREFIX}/bin/wine ${STAGEDIR}${PREFIX}/bin/wine.bin
|
||||
${INSTALL_SCRIPT} ${FILESDIR}/wine.sh ${STAGEDIR}${PREFIX}/bin/wine
|
||||
.else
|
||||
${MV} ${STAGEDIR}${PREFIX}/bin/wine64 ${STAGEDIR}${PREFIX}/bin/wine64.bin
|
||||
${INSTALL_SCRIPT} ${FILESDIR}/wine.sh ${STAGEDIR}${PREFIX}/bin/wine64
|
||||
${INSTALL_SCRIPT} ${FILESDIR}/wine-wow64.sh ${STAGEDIR}${PREFIX}/bin/wine
|
||||
${INSTALL_SCRIPT} ${FILESDIR}/pkg32.sh ${STAGEDIR}${DATADIR}/pkg32.sh
|
||||
.endif
|
||||
|
||||
@${MKDIR} ${STAGEDIR}${DOCSDIR}
|
||||
.for i in README ANNOUNCE AUTHORS
|
||||
${INSTALL_DATA} ${WRKSRC}/${i} ${STAGEDIR}${DOCSDIR}
|
||||
|
|
15
emulators/wine-devel/files/pkg32.sh
Normal file
15
emulators/wine-devel/files/pkg32.sh
Normal file
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
if [ "$(id -u)" = 0 ]
|
||||
then
|
||||
echo "Don't run this script as root!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
I386_ROOT="${WINE_i386_ROOT:-$HOME/.i386-wine-pkg}"
|
||||
|
||||
mkdir -p "$I386_ROOT"
|
||||
ABI=$(pkg config ABI | sed s/amd64/i386/)
|
||||
# Show what we're going to do, then do it.
|
||||
echo pkg -o ABI="$ABI" -o INSTALL_AS_USER=true -o RUN_SCRIPTS=false --rootdir "$I386_ROOT" "$@"
|
||||
exec pkg -o ABI="$ABI" -o INSTALL_AS_USER=true -o RUN_SCRIPTS=false --rootdir "$I386_ROOT" "$@"
|
42
emulators/wine-devel/files/wine-wow64.sh
Normal file
42
emulators/wine-devel/files/wine-wow64.sh
Normal file
|
@ -0,0 +1,42 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
TARGET="$(realpath "$0")"
|
||||
PREFIX="${TARGET%/*/*}"
|
||||
LOCALBASE="${PREFIX}"
|
||||
|
||||
I386_ROOT="${WINE_i386_ROOT:-$HOME/.i386-wine-pkg}"
|
||||
|
||||
if [ ! -f "$I386_ROOT/$PREFIX/bin/wine" ]
|
||||
then
|
||||
printf "%s doesn't exist!\n\n" "$I386_ROOT/$PREFIX/bin/wine"
|
||||
printf "Try installing 32-bit Wine with\n\t%s\n" "$PREFIX/share/wine/pkg32.sh install wine mesa-dri"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WINE32_VERSION=$(env -u WINELOADERNOEXEC "$I386_ROOT/$PREFIX/bin/wine" --version)
|
||||
WINE64_VERSION=$(env -u WINELOADERNOEXEC "${TARGET}64" --version)
|
||||
if [ "$WINE32_VERSION" != "$WINE64_VERSION" ]
|
||||
then
|
||||
printf "wine [%s] and wine64 [%s] versions do not match!\n\n" "$WINE32_VERSION" "$WINE64_VERSION"
|
||||
printf "Try updating 32-bit wine with\n\t%s\n" "$PREFIX/share/wine/pkg32.sh upgrade"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export LIBGL_DRIVERS_PATH="${LIBGL_DRIVERS_PATH:+$LIBGL_DRIVERS_PATH:}$LOCALBASE/lib/dri:$LOCALBASE/lib32/dri:$I386_ROOT/$LOCALBASE/lib/dri"
|
||||
export LD_32_LIBRARY_PATH="${LD_32_LIBRARY_PATH:+$LD_32_LIBRARY_PATH:}$I386_ROOT/$PREFIX/lib/wine:$LOCALBASE/lib32:$I386_ROOT/$LOCALBASE/lib"
|
||||
|
||||
for d in "$I386_ROOT/$LOCALBASE"/llvm*/lib
|
||||
do
|
||||
if [ -d "$d" ]
|
||||
then
|
||||
export LD_32_LIBRARY_PATH="$LD_32_LIBRARY_PATH:$d"
|
||||
fi
|
||||
done
|
||||
export LD_32_LIBRARY_PATH_RPATH=y
|
||||
|
||||
if [ -z "$WINE_NO_WOW64" ]
|
||||
then
|
||||
export WINESERVER="${TARGET}server"
|
||||
fi
|
||||
|
||||
exec "$I386_ROOT/$PREFIX/bin/wine" "$@"
|
14
emulators/wine-devel/files/wine.sh
Normal file
14
emulators/wine-devel/files/wine.sh
Normal file
|
@ -0,0 +1,14 @@
|
|||
#!/bin/sh
|
||||
|
||||
TARGET="$(realpath "$0")"
|
||||
|
||||
if [ -z "$WINESERVER" ] && [ -f "${TARGET}server32" ]
|
||||
then
|
||||
export WINESERVER="${TARGET}server32"
|
||||
fi
|
||||
|
||||
# Workaround for https://bugs.winehq.org/show_bug.cgi?id=50257
|
||||
export LD_BIND_NOW=1
|
||||
export LD_32_BIND_NOW=1
|
||||
|
||||
exec "${TARGET}.bin" "$@"
|
|
@ -5,8 +5,10 @@ bin/notepad
|
|||
bin/regedit
|
||||
bin/regsvr32
|
||||
bin/widl
|
||||
%%WINE32%%bin/wine
|
||||
bin/wine
|
||||
%%WINE32%%bin/wine.bin
|
||||
%%WINE64%%bin/wine64
|
||||
%%WINE64%%bin/wine64.bin
|
||||
bin/wineboot
|
||||
bin/winebuild
|
||||
bin/winecfg
|
||||
|
@ -20,7 +22,8 @@ bin/winegcc
|
|||
bin/winemaker
|
||||
bin/winemine
|
||||
bin/winepath
|
||||
bin/wineserver
|
||||
%%WINE32%%bin/wineserver32
|
||||
%%WINE64%%bin/wineserver
|
||||
bin/wmc
|
||||
bin/wrc
|
||||
include/wine/debug.h
|
||||
|
@ -3505,6 +3508,7 @@ share/applications/wine.desktop
|
|||
%%DATADIR%%/nls/normnfkc.nls
|
||||
%%DATADIR%%/nls/normnfkd.nls
|
||||
%%DATADIR%%/nls/sortdefault.nls
|
||||
%%WINE64%%%%DATADIR%%/pkg32.sh
|
||||
%%PORTDOCS%%%%DOCSDIR%%/ANNOUNCE
|
||||
%%PORTDOCS%%%%DOCSDIR%%/AUTHORS
|
||||
%%PORTDOCS%%%%DOCSDIR%%/README
|
||||
|
|
Loading…
Reference in a new issue