From 85ad5c2749201569a72a547d5165f6ba0b54d91d Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 19 Dec 2009 14:39:53 +0000 Subject: [PATCH] - various bugfixes - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-x86_64-prefix.patch | 15 ++++ wine.spec | 45 +++++++++-- winepulse-0.32.patch => winepulse-0.33.patch | 85 +++++++++----------- 5 files changed, 93 insertions(+), 56 deletions(-) create mode 100644 wine-x86_64-prefix.patch rename winepulse-0.32.patch => winepulse-0.33.patch (97%) diff --git a/.cvsignore b/.cvsignore index f76d511..8763626 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.32-fe.tar.bz2 +wine-1.1.35-fe.tar.bz2 diff --git a/sources b/sources index 3390ab2..76b6bb2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -b598afe820bde7c33f5bd0ab62fb7dce wine-1.1.32-fe.tar.bz2 +1ade8d4ccd3130692c2c68871683fa9b wine-1.1.35-fe.tar.bz2 diff --git a/wine-x86_64-prefix.patch b/wine-x86_64-prefix.patch new file mode 100644 index 0000000..0d8bbfc --- /dev/null +++ b/wine-x86_64-prefix.patch @@ -0,0 +1,15 @@ +--- libs/wine/config.c.orig 2009-11-26 23:36:37.000000000 +0100 ++++ libs/wine/config.c 2009-11-26 23:37:36.000000000 +0100 +@@ -35,9 +35,9 @@ + #endif + #include "wine/library.h" + +-static const char server_config_dir[] = "/.wine"; /* config dir relative to $HOME */ +-static const char server_root_prefix[] = "/tmp/.wine-"; /* prefix for server root dir */ +-static const char server_dir_prefix[] = "/server-"; /* prefix for server dir */ ++static const char server_config_dir[] = "/.wine-x86_64"; /* config dir relative to $HOME */ ++static const char server_root_prefix[] = "/tmp/.wine-x86_64-"; /* prefix for server root dir */ ++static const char server_dir_prefix[] = "/server-x86_64-"; /* prefix for server dir */ + + static char *bindir; + static char *dlldir; diff --git a/wine.spec b/wine.spec index 8b61415..c921570 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ %define no64bit 0 Name: wine -Version: 1.1.32 +Version: 1.1.35 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -48,14 +48,18 @@ Source300: wine-mime-msi.desktop # see http://bugs.winehq.org/show_bug.cgi?id=10495 # and http://art.ified.ca/?page_id=40 Patch400: http://art.ified.ca/downloads/winepulse-0.32-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse-0.32.patch +Patch401: http://art.ified.ca/downloads/winepulse-0.33.patch Patch402: http://art.ified.ca/downloads/winepulse/winepulse-winecfg-0.6.patch Source402: README-FEDORA-PULSEAUDIO Patch1: wine-rpath.patch +# upstream bugs +# currently non + # bugfix patches -# none +# #533806 +Patch600: wine-x86_64-prefix.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -148,7 +152,6 @@ wine-* sub packages. Summary: Wine core package Group: Applications/Emulators Requires: wine-fonts = %{version}-%{release} -Requires: %{_bindir}/xmessage Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig Obsoletes: wine <= 0.9.15-1%{?dist} @@ -162,10 +165,12 @@ Requires: freetype(x86-32) Requires: nss-mdns(x86-32) # require Xrender isa on x86_64 (#510947) Requires: libXrender(x86-32) +Requires: gnutls(x86-32) %endif %ifarch x86_64 Requires: nss-mdns(x86-64) Requires: freetype(x86-64) +Requires: gnutls(x86-64) %endif %description core @@ -315,6 +320,10 @@ This package adds an openal driver for wine. %patch401 -p1 %patch402 -p1 +%ifarch x86_64 +%patch600 +%endif + autoreconf %build @@ -354,7 +363,6 @@ mv %{buildroot}%{_bindir}/wine{,32} mv %{buildroot}%{_bindir}/wine{,64} %endif - mkdir -p %{buildroot}%{_sysconfdir}/wine # Allow users to launch Windows programs by just clicking on the .exe file... @@ -561,6 +569,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/expand.exe.so %{_libdir}/wine/extrac32.exe.so %{_libdir}/wine/winhlp32.exe.so +%{_libdir}/wine/mshta.exe.so %{_libdir}/wine/msiexec.exe.so %{_libdir}/wine/net.exe.so %{_libdir}/wine/ntoskrnl.exe.so @@ -594,6 +603,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/authz.dll.so %{_libdir}/wine/avicap32.dll.so %{_libdir}/wine/avifil32.dll.so +%{_libdir}/wine/avrt.dll.so %{_libdir}/wine/bcrypt.dll.so %{_libdir}/wine/browseui.dll.so %{_libdir}/wine/cabinet.dll.so @@ -654,6 +664,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/faultrep.dll.so %{_libdir}/wine/fltlib.dll.so %{_libdir}/wine/fusion.dll.so +%{_libdir}/wine/fwpuclnt.dll.so %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gdiplus.dll.so %{_libdir}/wine/glu32.dll.so @@ -695,6 +706,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/mciwave.dll.so %{_libdir}/wine/midimap.dll.so %{_libdir}/wine/mlang.dll.so +%{_libdir}/wine/mmdevapi.dll.so %{_libdir}/wine/mountmgr.sys.so %{_libdir}/wine/mpr.dll.so %{_libdir}/wine/mprapi.dll.so @@ -810,10 +822,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/vdmdbg.dll.so %{_libdir}/wine/version.dll.so %{_libdir}/wine/wbemprox.dll.so +%{_libdir}/wine/wiaservc.dll.so %{_libdir}/wine/windowscodecs.dll.so %{_libdir}/wine/wineaudioio.drv.so %{_libdir}/wine/winecoreaudio.drv.so %{_libdir}/wine/winejoystick.drv.so +%{_libdir}/wine/winemapi.dll.so %{_libdir}/wine/winex11.drv.so %{_libdir}/wine/wing32.dll.so %{_libdir}/wine/winhttp.dll.so @@ -832,6 +846,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wsock32.dll.so %{_libdir}/wine/wtsapi32.dll.so %{_libdir}/wine/wuapi.dll.so +%{_libdir}/wine/wuaueng.dll.so %{_libdir}/wine/security.dll.so %{_libdir}/wine/sfc.dll.so %{_libdir}/wine/wineps.drv.so @@ -862,18 +877,18 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/vtdapi.vxd.so %{_libdir}/wine/vwin32.vxd.so %{_libdir}/wine/w32skrnl.dll.so -%{_libdir}/wine/commdlg.dll16 -%{_libdir}/wine/gdi.exe16 %{_libdir}/wine/wprocs.dll16 %{_libdir}/wine/avifile.dll16.so %{_libdir}/wine/comm.drv16.so +%{_libdir}/wine/commdlg.dll16.so %{_libdir}/wine/compobj.dll16.so %{_libdir}/wine/ctl3d.dll16.so %{_libdir}/wine/ctl3dv2.dll16.so %{_libdir}/wine/ddeml.dll16.so %{_libdir}/wine/dispdib.dll16.so %{_libdir}/wine/display.drv16.so +%{_libdir}/wine/gdi.exe16.so %{_libdir}/wine/imm.dll16.so %{_libdir}/wine/krnl386.exe16 %{_libdir}/wine/keyboard.drv16.so @@ -1046,6 +1061,22 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Sat Dec 19 2009 Andreas Bierfert +- 1.1.35-1 +- version upgrade + +* Fri Dec 18 2009 Andreas Bierfert +- 1.1.34-1 +- version upgrade (#546749) + +* Mon Nov 16 2009 Andreas Bierfert +- 1.1.33-1 +- version upgrade +- winepulse update (.33) +- require gnutls (#538694) +- use separate WINEPREFIX on x86_64 per default (workaround for #533806) +- drop explicit xmessage require (#537610) + * Tue Oct 27 2009 Andreas Bierfert - 1.1.32-1 - version upgrade (#531358) diff --git a/winepulse-0.32.patch b/winepulse-0.33.patch similarity index 97% rename from winepulse-0.32.patch rename to winepulse-0.33.patch index b3d4172..beee106 100644 --- a/winepulse-0.32.patch +++ b/winepulse-0.33.patch @@ -1416,10 +1416,10 @@ index 0000000..7cbc781 +#endif /* HAVE_PULSEAUDIO */ diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c new file mode 100644 -index 0000000..334cc72 +index 0000000..e7454fd --- /dev/null +++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1049 @@ +@@ -0,0 +1,1040 @@ +/* + * Wine Driver for PulseAudio - WaveOut Functionality + * http://pulseaudio.org/ @@ -1527,7 +1527,7 @@ index 0000000..334cc72 + * wodPlayer_NotifyClient [internal] + */ +static DWORD wodPlayer_NotifyClient(WINE_WAVEINST* wwo, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { -+ TRACE("wMsg = 0x%04x dwParm1 = %04X dwParam2 = %04X\n", wMsg, dwParam1, dwParam2); ++ /* TRACE("wMsg = 0x%04x dwParm1 = %04X dwParam2 = %04X\n", wMsg, dwParam1, dwParam2); */ + + switch (wMsg) { + case WOM_OPEN: @@ -1617,33 +1617,25 @@ index 0000000..334cc72 +static void wodPlayer_CheckReleasing(WINE_WAVEINST *wwo) { + LPWAVEHDR lpWaveHdr; + -+ if (wwo->buffer_attr.tlength == -1 && wwo->lpQueuePtr && !wwo->lpPlayPtr && wwo->state != WINE_WS_STOPPED) { -+ const pa_buffer_attr *returned; -+ -+ /* Try and adjust the buffer attributes so that playback can start. -+ * Because of bugs pa_stream_set_buffer_attr() does not work on started -+ * streams for server version 0.9.11 to 0.9.14 */ -+ ++ if (wwo->buffer_attr.tlength == -1) { + pa_threaded_mainloop_lock(PULSE_ml); -+ -+ /* Calculate how large a buffer the application has made so far */ -+ wwo->buffer_attr.tlength = 0; -+ for (lpWaveHdr = wwo->lpQueuePtr; lpWaveHdr; lpWaveHdr = lpWaveHdr->lpNext) -+ wwo->buffer_attr.tlength += lpWaveHdr->dwBufferLength; -+ -+ WARN("Asking for new buffer target length of %llums (%u bytes)\n", -+ pa_bytes_to_usec(wwo->buffer_attr.tlength, &wwo->sample_spec) / 1000, -+ wwo->buffer_attr.tlength); -+ -+ PULSE_WaitForOperation(pa_stream_set_buffer_attr(wwo->stream, &wwo->buffer_attr, PULSE_StreamSuccessCallback, wwo)); -+ -+ returned = pa_stream_get_buffer_attr(wwo->stream); -+ -+ if (returned->tlength > wwo->timing_info->write_index) { -+ WARN("Couldn't get the buffer size needed. Triggering and hoping for the best.\n"); -+ PULSE_WaitForOperation(pa_stream_trigger(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ if (!wwo->timing_info->playing) { ++ ++ /* Calculate how large a buffer the application has made so far */ ++ wwo->buffer_attr.tlength = 0; ++ wwo->buffer_attr.minreq = wwo->lpQueuePtr->dwBufferLength; ++ for (lpWaveHdr = wwo->lpQueuePtr; lpWaveHdr; lpWaveHdr = lpWaveHdr->lpNext) ++ wwo->buffer_attr.tlength += lpWaveHdr->dwBufferLength; ++ ++ WARN("Asking for new buffer target length of %llums (%u bytes)\n", ++ pa_bytes_to_usec(wwo->buffer_attr.tlength, &wwo->sample_spec) / 1000, ++ wwo->buffer_attr.tlength); ++ ++ /* Try and adjust the buffer attributes so that playback can start. ++ * Because of bugs pa_stream_set_buffer_attr() does not work on started ++ * streams for server version 0.9.11 to 0.9.14 */ ++ PULSE_WaitForOperation(pa_stream_set_buffer_attr(wwo->stream, &wwo->buffer_attr, PULSE_StreamSuccessCallback, wwo)); + } -+ + pa_threaded_mainloop_unlock(PULSE_ml); + } +} @@ -1676,6 +1668,7 @@ index 0000000..334cc72 + return wait ?: 1; + } + } ++ TRACE("Returning %p.[%i]\n", lpWaveHdr, (DWORD)lpWaveHdr->reserved); + + /* return the wavehdr */ + wwo->lpQueuePtr = lpWaveHdr->lpNext; @@ -1696,7 +1689,7 @@ index 0000000..334cc72 + * Write either how much free space or how much data we have, depending on + * which is less + */ -+static int wodPlayer_WriteMax(WINE_WAVEINST *wwo, size_t *space) { ++static DWORD wodPlayer_WriteMax(WINE_WAVEINST *wwo, size_t *space) { + LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; + size_t nbytes; + @@ -1724,10 +1717,7 @@ index 0000000..334cc72 + */ +static void wodPlayer_Feed(WINE_WAVEINST* wwo, size_t space) { + -+ /* No more room... no need to try to feed */ -+ if (space == 0) return; -+ -+ if (!wwo->stream || !PULSE_context || ++ if (!space || !wwo->stream || !PULSE_context || + pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || + pa_stream_get_state(wwo->stream) != PA_STREAM_READY) + return; @@ -1741,8 +1731,9 @@ index 0000000..334cc72 + if (wwo->dwPartialOffset == 0 && wwo->lpPlayPtr) { + do { + wwo->lpPlayPtr->reserved = wwo->timing_info->write_index; -+ } while (wodPlayer_WriteMax(wwo, &space) > 0 && wwo->lpPlayPtr && space > 0); ++ } while (wodPlayer_WriteMax(wwo, &space) && wwo->lpPlayPtr && space > 0); + } ++ + pa_threaded_mainloop_unlock(PULSE_ml); +} + @@ -1846,15 +1837,14 @@ index 0000000..334cc72 +/************************************************************************** + * wodPlayer_ProcessMessages [internal] + */ -+static DWORD wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { ++static void wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { + LPWAVEHDR lpWaveHdr; + enum win_wm_message msg; -+ DWORD param, msgcount = 0; ++ DWORD param; + HANDLE ev; + + while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { + TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); -+ msgcount++; + + switch (msg) { + case WINE_WM_PAUSING: @@ -1870,8 +1860,8 @@ index 0000000..334cc72 + wwo->state = WINE_WS_PLAYING; + pa_threaded_mainloop_lock(PULSE_ml); + PULSE_WaitForOperation(pa_stream_cork(wwo->stream, 0, PULSE_StreamSuccessCallback, wwo)); -+ /* If the serverside buffer was near full before pause, we need to -+ * have space to write soon, so force playback start */ ++ /* If the serverside buffer was near full before pausing, we ++ * need to have space to write soon, so force playback start */ + PULSE_WaitForOperation(pa_stream_trigger(wwo->stream, PULSE_StreamSuccessCallback, wwo)); + pa_threaded_mainloop_unlock(PULSE_ml); + } @@ -1909,13 +1899,11 @@ index 0000000..334cc72 + break; + + case WINE_WM_FEED: /* Sent by the pulse thread */ -+ msgcount--; /* Don't count this message for stall detection */ + wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); + SetEvent(ev); + break; + + case WINE_WM_XRUN: /* Sent by the pulse thread */ -+ msgcount--; /* Don't count this message for stall detection */ + WARN("Trying to recover from underrun.\n"); + /* Return all the queued wavehdrs, so the app will send more data */ + wodPlayer_NotifyCompletions(wwo, FALSE, (pa_usec_t)-1); @@ -1938,8 +1926,6 @@ index 0000000..334cc72 + break; + } + } -+ -+ return msgcount; +} + +/************************************************************************** @@ -1951,6 +1937,7 @@ index 0000000..334cc72 +static DWORD CALLBACK wodPlayer(LPVOID lpParam) { + WINE_WAVEINST *wwo = (WINE_WAVEINST*)lpParam; + DWORD dwSleepTime = INFINITE; ++ int64_t delta_write; + + wwo->state = WINE_WS_STOPPED; + SetEvent(wwo->hStartUpEvent); @@ -1961,9 +1948,13 @@ index 0000000..334cc72 + TRACE("Waiting %u ms\n", dwSleepTime); + PULSE_WaitRingMessage(&wwo->msgRing, dwSleepTime); + -+ /* If no messages were processed during the timeout it might be because -+ * audio is not flowing yet, so check. */ -+ if (wodPlayer_ProcessMessages(wwo) == 0) ++ delta_write = wwo->timing_info->write_index; ++ wodPlayer_ProcessMessages(wwo); ++ ++ /* Check for a stall situaiton */ ++ if (delta_write == wwo->timing_info->write_index ++ && wwo->lpQueuePtr && !wwo->lpPlayPtr ++ && wwo->state != WINE_WS_STOPPED) + wodPlayer_CheckReleasing(wwo); + + /* If there is audio playing, return headers and get next timeout */ @@ -2252,7 +2243,7 @@ index 0000000..334cc72 + * Context-sanity check here, as if we respond with 0, WINE will move on + * to the next waveout driver. + */ -+static DWORD wodGetNumDevs() { ++static DWORD wodGetNumDevs(void) { + if (!PULSE_ml || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) + return 0; +