Followup-For: Bug #742561 Package: wine-development Version: 1.7.27-1
Hi, attached is a new patch to fix the wine64 support. I changed my approach to only use wine64 if WINEARCH is set. - Wine script: - Use wine64 if WINEARCH is win64, show help message and exit if wine64 is not installed. - Show help message and exit, if called without WINEARCH, but only wine64 is installed. - If WINEARCH is set, add it to the call of the wine executable. - Add wine64 wrapper script to call wine script with WINEARCH set to win64. - Patch winemenubuilder to set WINEARCH. My patch for winemenubuilder only works if WINEARCH was set. Otherwise it results in WINEARCH="(null)". Possible solutions might be: - Change the patch to only add a WINEARCH entry if WINEARCH was set. - Only apply the patch on amd64. With my proposed solution WINEARCH is always set when using wine64 (except if you call the executable directly) - so this would work. NOTE: Just passing an empty WINEARCH to the wine executable (if WINEARCH was not set) does not work, Greets jre
diff --git a/debian/patches/winemenubuilder.patch b/debian/patches/winemenubuilder.patch index 3b2d8f3..d43a36c 100644 --- a/debian/patches/winemenubuilder.patch +++ b/debian/patches/winemenubuilder.patch @@ -3,21 +3,24 @@ author: Michael Gilbert <mgilb...@debian.org> --- a/programs/winemenubuilder/winemenubuilder.c +++ b/programs/winemenubuilder/winemenubuilder.c -@@ -1455,7 +1455,7 @@ static BOOL write_desktop_entry(const ch +@@ -1455,8 +1455,8 @@ fprintf(file, "[Desktop Entry]\n"); fprintf(file, "Name=%s\n", linkname); - fprintf(file, "Exec=env WINEPREFIX=\"%s\" wine %s %s\n", -+ fprintf(file, "Exec=env WINEPREFIX=\"%s\" wine-development %s %s\n", - wine_get_config_dir(), path, args); +- wine_get_config_dir(), path, args); ++ fprintf(file, "Exec=env WINEPREFIX=\"%s\" WINEARCH=\"%s\" wine-development %s %s\n", ++ wine_get_config_dir(), getenv( "WINEARCH" ), path, args); fprintf(file, "Type=Application\n"); fprintf(file, "StartupNotify=true\n"); -@@ -2529,7 +2529,7 @@ static BOOL write_freedesktop_associatio + if (descr && lstrlenA(descr)) +@@ -2529,7 +2529,8 @@ fprintf(desktop, "Type=Application\n"); fprintf(desktop, "Name=%s\n", friendlyAppName); fprintf(desktop, "MimeType=%s;\n", mimeType); - fprintf(desktop, "Exec=env WINEPREFIX=\"%s\" wine start /ProgIDOpen %s %%f\n", wine_get_config_dir(), progId); -+ fprintf(desktop, "Exec=env WINEPREFIX=\"%s\" wine-development start /ProgIDOpen %s %%f\n", wine_get_config_dir(), progId); ++ fprintf(desktop, "Exec=env WINEPREFIX=\"%s\" WINEARCH=\"%s\" wine-development start /ProgIDOpen %s %%f\n", ++ wine_get_config_dir(), getenv( "WINEARCH" ), progId); fprintf(desktop, "NoDisplay=true\n"); fprintf(desktop, "StartupNotify=true\n"); if (openWithIcon) diff --git a/debian/rules b/debian/rules index 11961f0..c5b2d1d 100755 --- a/debian/rules +++ b/debian/rules @@ -72,6 +72,7 @@ override_dh_auto_configure: override_dh_install: $(INSTALLS) mkdir -p debian/tmp cp debian/scripts/wine debian/tmp/wine$(VERSION) + cp debian/scripts/wine64 debian/tmp/wine64$(VERSION) sed 's|LIBDIR|$(LIBDIR)|g' < debian/scripts/winegcc > debian/tmp/winegcc$(DEB_BUILD_ARCH_BITS)$(VERSION) cp tools/winedump/README debian/tmp/README.winedump cp programs/winedbg/README debian/tmp/README.winedbg diff --git a/debian/scripts/wine b/debian/scripts/wine index 7609c69..d579234 100755 --- a/debian/scripts/wine +++ b/debian/scripts/wine @@ -6,20 +6,43 @@ bindir=/usr/lib/$name wine32=$bindir/wine wine64=$bindir/wine64 -if test -x $wine32; then +if test "$WINEARCH" = "win64" ; then + if test -x $wine64; then + wine=$wine64 + else + echo "error: WINEARCH is win64, but unable to find wine64 executable." + if [ "$(dpkg --print-architecture)" = "amd64" ]; then + echo "as root, please execute \"apt-get install $(echo $name | sed s/wine/wine64/)\"" + else + echo "you need $(echo $name | sed s/wine/wine64/). but this is only available on architecture amd64." + fi + exit 1 + fi +elif test -x $wine32; then wine=$wine32 elif test -x $wine64; then wine=$wine64 + echo "error: unable to find wine executable." if [ "$(dpkg --print-architecture)" = "amd64" -a "$(dpkg --print-foreign-architectures)" != "i386" ]; then echo "it looks like multiarch needs to be enabled. as root, please" echo "execute \"dpkg --add-architecture i386 && apt-get update &&" - echo "apt-get install $(echo $name | sed s/wine/wine32/)\"" + else + echo -n "as root, please execute \"" fi + echo "apt-get install $(echo $name | sed s/wine/wine32/)\"" + echo "if you want to use wine64 set WINEARCH to win64, or use \"$(echo $name | sed s/wine/wine64/)\"." + exit 1 else echo "error: unable to find wine executable. this shouldn't happen." exit 1 fi +if test -z $WINEARCH; then + winearch= +else + winearch="WINEARCH=$WINEARCH" +fi + if test -z $WINELOADER; then wineloader=$wine else @@ -32,4 +55,4 @@ else winedebug=$WINEDEBUG fi -WINELOADER=$wineloader WINEDEBUG=$winedebug $wine "$@" +eval $winearch WINELOADER=$wineloader WINEDEBUG=$winedebug $wine "$@" diff --git a/debian/scripts/wine64 b/debian/scripts/wine64 new file mode 100755 index 0000000..c546ae2 --- /dev/null +++ b/debian/scripts/wine64 @@ -0,0 +1,4 @@ +#!/bin/sh -e + +# Execute wine script with WINEARCH set to win64 +WINEARCH=win64 $(echo $0|sed s/64//) $@ diff --git a/debian/wine64VERSION.install b/debian/wine64VERSION.install index 7b83d9d..688b4bd 100644 --- a/debian/wine64VERSION.install +++ b/debian/wine64VERSION.install @@ -1 +1,3 @@ usr/lib/*/*/wine64 usr/lib/wineVERSION +debian/tmp/wine64VERSION usr/bin +