From 902411d9e7890dbca840c37e47d0d2f8079d5899 Mon Sep 17 00:00:00 2001 From: Gwyn Ciesla Date: Tue, 27 Aug 2019 09:45:33 -0500 Subject: [PATCH 001/161] "Adding package.cfg file" --- package.cfg | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 package.cfg diff --git a/package.cfg b/package.cfg new file mode 100644 index 0000000..66ea79d --- /dev/null +++ b/package.cfg @@ -0,0 +1,2 @@ +[koji] +targets = epel8 epel8-playground \ No newline at end of file From 582ae1f3fbeb854abae9a03219c6ee35519301c2 Mon Sep 17 00:00:00 2001 From: cvsextras Date: Mon, 8 Nov 2004 05:32:54 +0000 Subject: [PATCH 002/161] auto-import changelog data from wine-0.0-0.fdr.2.20030911.rh90.src.rpm 0.0-0.fdr.2.20030911 - Fix SSL detection (need krb5), require openssl. - Disable ALSA by default, use "--with alsa" to enable. - Disable valgrind by default, use "--with valgrind" to enable. - Cosmetic improvements. Tue Sep 16 2003 Panu Matilainen 0.0-0.fdr.1.20030911 - update to 20030911 Tue Aug 19 2003 Panu Matilainen 0.0-0.fdr.1.20030813 - update to 20030813 Thu Jul 10 2003 Panu Matilainen 0.0-0.fdr.1.20030709 - update to 20030709 - add /lib/tls requirement -> only works with NTPL capable systems Wed Jul 02 2003 Panu Matilainen 0.0-0.fdr.1.20030618 - update to 20030618 Thu May 22 2003 Panu Matilainen 0.0-0.fdr.1.20030508 - update to 20030508 - add buildreq's & other QA issues from #255 Sat May 03 2003 Panu Matilainen 0.0-0.fdr.1.20030408 - package for fedora - based on modified RH wine from 8.0 found off the net --- .cvsignore | 1 + sources | 1 + wine-20030408-defaultcfg.patch | 51 ++++++ wine-20030408-initial.patch | 104 +++++++++++ wine-20030408-kde2.patch | 153 ++++++++++++++++ wine-20030408-winelauncher.patch | 92 ++++++++++ wine.init | 67 +++++++ wine.spec | 288 +++++++++++++++++++++++++++++++ 8 files changed, 757 insertions(+) create mode 100644 wine-20030408-defaultcfg.patch create mode 100644 wine-20030408-initial.patch create mode 100644 wine-20030408-kde2.patch create mode 100644 wine-20030408-winelauncher.patch create mode 100644 wine.init create mode 100644 wine.spec diff --git a/.cvsignore b/.cvsignore index e69de29..e3878fa 100644 --- a/.cvsignore +++ b/.cvsignore @@ -0,0 +1 @@ +Wine-20030911.tar.gz diff --git a/sources b/sources index e69de29..a75d807 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +81521fe47d540427183e88d02d5c5f88 Wine-20030911.tar.gz diff --git a/wine-20030408-defaultcfg.patch b/wine-20030408-defaultcfg.patch new file mode 100644 index 0000000..16ebf7c --- /dev/null +++ b/wine-20030408-defaultcfg.patch @@ -0,0 +1,51 @@ +Index: wine/libs/wine/config.c +=================================================================== +RCS file: /home/wine/wine/libs/wine/config.c,v +retrieving revision 1.1 +diff -u -r1.1 config.c +--- wine/libs/wine/config.c 22 Mar 2003 20:40:48 -0000 1.1 ++++ wine/libs/wine/config.c 26 Nov 2002 18:37:03 -0000 +@@ -136,7 +136,20 @@ + if (config_dir[0] != '/') + fatal_error( "invalid directory %s in WINEPREFIX: not an absolute path\n", prefix ); + if (stat( config_dir, &st ) == -1) +- fatal_perror( "cannot open %s as specified in WINEPREFIX", config_dir ); ++ { ++ /* No configuration - put in defaults. */ ++ char command[512]; ++ mkdir(config_dir, 0700); ++ sprintf(command, "/bin/cp /etc/wine/wine.conf %s/config", config_dir); ++ system(command); ++ sprintf(command, "/bin/cp /etc/wine/system.reg %s/system.reg", config_dir); ++ system(command); ++ sprintf(command, "/bin/cp /etc/wine/user.reg %s/user.reg", config_dir); ++ system(command); ++ sprintf(command, "/bin/cp /etc/wine/userdef.reg %s/userdef.reg", config_dir); ++ system(command); ++ stat( config_dir, &st ); ++ } + } + else + { +@@ -147,7 +160,20 @@ + remove_trailing_slashes( config_dir ); + strcat( config_dir, server_config_dir ); + if (stat( config_dir, &st ) == -1) +- fatal_perror( "cannot open %s", config_dir ); ++ { ++ /* No configuration - put in defaults. */ ++ char command[512]; ++ mkdir(config_dir, 0700); ++ sprintf(command, "/bin/cp /etc/wine/wine.conf %s/config", config_dir); ++ system(command); ++ sprintf(command, "/bin/cp /etc/wine/system.reg %s/system.reg", config_dir); ++ system(command); ++ sprintf(command, "/bin/cp /etc/wine/user.reg %s/user.reg", config_dir); ++ system(command); ++ sprintf(command, "/bin/cp /etc/wine/userdef.reg %s/userdef.reg", config_dir); ++ system(command); ++ stat( config_dir, &st ); ++ } + } + if (!S_ISDIR(st.st_mode)) fatal_error( "%s is not a directory\n", config_dir ); + diff --git a/wine-20030408-initial.patch b/wine-20030408-initial.patch new file mode 100644 index 0000000..6281eb3 --- /dev/null +++ b/wine-20030408-initial.patch @@ -0,0 +1,104 @@ +Index: wine/misc/registry.c +=================================================================== +RCS file: /home/wine/wine/misc/registry.c,v +retrieving revision 1.125 +diff -u -r1.125 registry.c +--- wine/misc/registry.c 30 Mar 2003 03:05:12 -0000 1.125 ++++ wine/misc/registry.c 26 Nov 2002 18:21:01 -0000 +@@ -1609,14 +1609,65 @@ + + strcpy(tmp,confdir); + strcat(tmp,"/" SAVE_LOCAL_REGBRANCH_USER_DEFAULT); ++ if (access( tmp, R_OK ) && !access( "/etc/wine/" SAVE_LOCAL_REGBRANCH_USER_DEFAULT, R_OK )) { ++ /* If the registry doesn't exist, copy the global one */ ++ FILE *in, *out; ++ char buf[1024]; ++ in = fopen( "/etc/wine/" SAVE_LOCAL_REGBRANCH_USER_DEFAULT, "r" ); ++ if(!in) ++ return; ++ out = fopen( tmp, "w" ); ++ if(!out) { ++ fclose(in); ++ return; ++ } ++ while(fgets(buf, 1024, in)) ++ fputs(buf, out); ++ fclose(in); ++ fclose(out); ++ } + load_wine_registry(hkey_users_default,tmp); + + strcpy(tmp,confdir); + strcat(tmp,"/" SAVE_LOCAL_REGBRANCH_CURRENT_USER); ++ if (access( tmp, R_OK ) && !access( "/etc/wine/" SAVE_LOCAL_REGBRANCH_CURRENT_USER, R_OK )) { ++ /* If the registry doesn't exist, copy the global one */ ++ FILE *in, *out; ++ char buf[1024]; ++ in = fopen( "/etc/wine/" SAVE_LOCAL_REGBRANCH_CURRENT_USER, "r" ); ++ if(!in) ++ return; ++ out = fopen( tmp, "w" ); ++ if(!out) { ++ fclose(in); ++ return; ++ } ++ while(fgets(buf, 1024, in)) ++ fputs(buf, out); ++ fclose(in); ++ fclose(out); ++ } + load_wine_registry(hkey_current_user,tmp); + + strcpy(tmp,confdir); + strcat(tmp,"/" SAVE_LOCAL_REGBRANCH_LOCAL_MACHINE); ++ if (access( tmp, R_OK ) && !access( "/etc/wine/" SAVE_LOCAL_REGBRANCH_LOCAL_MACHINE, R_OK )) { ++ /* If the registry doesn't exist, copy the global one */ ++ FILE *in, *out; ++ char buf[1024]; ++ in = fopen( "/etc/wine/" SAVE_LOCAL_REGBRANCH_LOCAL_MACHINE, "r" ); ++ if(!in) ++ return; ++ out = fopen( tmp, "w" ); ++ if(!out) { ++ fclose(in); ++ return; ++ } ++ while(fgets(buf, 1024, in)) ++ fputs(buf, out); ++ fclose(in); ++ fclose(out); ++ } + load_wine_registry(hkey_local_machine,tmp); + + free(tmp); +Index: wine/server/registry.c +=================================================================== +RCS file: /home/wine/wine/server/registry.c,v +retrieving revision 1.50 +diff -u -r1.50 registry.c +--- wine/server/registry.c 25 Feb 2003 04:04:18 -0000 1.50 ++++ wine/server/registry.c 26 Nov 2002 18:21:02 -0000 +@@ -1486,6 +1486,23 @@ + if (!(filename = malloc( strlen(config) + 8 ))) fatal_error( "out of memory\n" ); + strcpy( filename, config ); + strcat( filename, "/config" ); ++ if (access( filename, R_OK ) && !access( "/etc/wine/wine.conf", R_OK )) { ++ /* If the registry doesn't exist, copy the global one */ ++ FILE *in, *out; ++ char buf[1024]; ++ in = fopen( "/etc/wine/wine.conf", "r" ); ++ if(!in) ++ return; ++ out = fopen( filename, "w" ); ++ if(!out) { ++ fclose(in); ++ return; ++ } ++ while(fgets(buf, 1024, in)) ++ fputs(buf, out); ++ fclose(in); ++ fclose(out); ++ } + if ((f = fopen( filename, "r" ))) + { + struct key *key; diff --git a/wine-20030408-kde2.patch b/wine-20030408-kde2.patch new file mode 100644 index 0000000..c36cddd --- /dev/null +++ b/wine-20030408-kde2.patch @@ -0,0 +1,153 @@ +Index: wine/tools/wineshelllink +=================================================================== +RCS file: /home/wine/wine/tools/wineshelllink,v +retrieving revision 1.15 +diff -u -r1.15 wineshelllink +--- wine/tools/wineshelllink 23 May 2002 16:31:22 -0000 1.15 ++++ wine/tools/wineshelllink 26 Nov 2002 18:26:48 -0000 +@@ -77,22 +77,7 @@ + usage + fi + +-kde_entry() +-{ +- xname=`basename "$link"` +- cat < /dev/null 2>&1 +-if [ $? = 0 -a $mode = "menu" ] +-then +- iconname="`basename "$link"`.xpm" +- dir="$HOME/.menu/icons" +- if [ -f "$icon" ] +- then +- mkdir -p "$dir" +- cp "$icon" "$dir/$iconname" +- xpmicon="$dir/$iconname" +- else +- xpmicon="" +- fi +- mdk_entry >> "$HOME/.menu/wine" +- if [ -d "/usr/lib/menu" ] +- then +- mdk_entry >> "/usr/lib/menu/wine" +- fi +- update-menus > /dev/null 2>&1 +-fi +- + # KDE +- + if [ -d "$HOME/.kde" ] + then + kdeversion=0 +@@ -167,30 +128,13 @@ + copy_icon "$HOME/.kde/share/applnk/Wine" + if [ $mode = "menu" ] + then +- gnome_entry > "$HOME/.kde/share/applnk/Wine/$link.desktop" ++ make_entry > "$HOME/.kde/share/applnk/Wine/$link.desktop" + elif [ -d "$HOME/Desktop" ] + then +- gnome_entry > "$HOME/Desktop/$link.desktop" ++ make_entry > "$HOME/Desktop/$link.desktop" + fi + else +- copy_icon "$HOME/.kde/share/applnk/Wine" +- if [ $mode = "menu" ] +- then +- kde_entry > "$HOME/.kde/share/applnk/Wine/$link.kdelnk" +- +- # KDE 1.x kludge. Wake up KDE, if we can find kpanel running +- which kwmcom >/dev/null 2>/dev/null && \ +- ps u -C kpanel >/dev/null 2>/dev/null && \ +- kwmcom kpanel:restart +- +- elif [ -d "$HOME/Desktop" ] +- then +- kde_entry > "$HOME/Desktop/$link.kdelnk" +- # KDE 1.x kludge: wake up KDE, if we can find kfm running... +- which kfmclient >/dev/null 2>/dev/null && \ +- ps u -C kfm >/dev/null 2>/dev/null && \ +- kfmclient refreshDesktop +- fi ++ echo "KDE < 2 not supported anymore" + fi + fi + +@@ -199,15 +143,15 @@ + copy_icon "$HOME/.kde2/share/applnk/Wine" + if [ $mode = "menu" ] + then +- gnome_entry > "$HOME/.kde2/share/applnk/Wine/$link.desktop" ++ make_entry > "$HOME/.kde2/share/applnk/Wine/$link.desktop" + else + if [ -d "$HOME/Desktop2" ] + then +- gnome_entry > "$HOME/Desktop2/$link.desktop" ++ make_entry > "$HOME/Desktop2/$link.desktop" + fi + if [ -d "$HOME/Desktop" ] + then +- gnome_entry > "$HOME/Desktop/$link.desktop" ++ make_entry > "$HOME/Desktop/$link.desktop" + fi + fi + fi +@@ -217,19 +161,19 @@ + copy_icon "$HOME/.kde3/share/applnk/Wine" + if [ $mode = "menu" ] + then +- gnome_entry > "$HOME/.kde3/share/applnk/Wine/$link.desktop" ++ make_entry > "$HOME/.kde3/share/applnk/Wine/$link.desktop" + else + if [ -d "$HOME/Desktop3" ] + then +- gnome_entry > "$HOME/Desktop3/$link.desktop" ++ make_entry > "$HOME/Desktop3/$link.desktop" + fi + if [ -d "$HOME/Desktop2" ] + then +- gnome_entry > "$HOME/Desktop2/$link.desktop" ++ make_entry > "$HOME/Desktop2/$link.desktop" + fi + if [ -d "$HOME/Desktop" ] + then +- gnome_entry > "$HOME/Desktop/$link.desktop" ++ make_entry > "$HOME/Desktop/$link.desktop" + fi + fi + fi +@@ -241,10 +185,10 @@ + copy_icon "$HOME/.gnome/apps/Wine" + if [ $mode = "menu" ] + then +- gnome_entry > "$HOME/.gnome/apps/Wine/$link.desktop" ++ make_entry > "$HOME/.gnome/apps/Wine/$link.desktop" + elif [ -d "$HOME/.gnome-desktop" ] + then +- gnome_entry > "$HOME/.gnome-desktop/$link.desktop" ++ make_entry > "$HOME/.gnome-desktop/$link.desktop" + fi + fi + diff --git a/wine-20030408-winelauncher.patch b/wine-20030408-winelauncher.patch new file mode 100644 index 0000000..edd49f3 --- /dev/null +++ b/wine-20030408-winelauncher.patch @@ -0,0 +1,92 @@ +Index: wine/programs/winelauncher.in +=================================================================== +RCS file: /home/wine/wine/programs/winelauncher.in,v +retrieving revision 1.2 +diff -u -r1.2 winelauncher.in +--- wine/programs/winelauncher.in 5 Jul 2002 21:18:41 -0000 1.2 ++++ wine/programs/winelauncher.in 26 Nov 2002 17:52:47 -0000 +@@ -93,27 +93,11 @@ + + launch_winesetup() + { +- which winesetup +- if [ $? -eq 0 ] ; then +- winesetup +- else +- if [ -x /opt/wine/bin/winesetup ] ; then +- /opt/wine/bin/winesetup +- else +- $XMESSAGE -title "Error" \ +- "Error: Unable to find winesetup in your PATH or in /opt/wine/bin: +- I am not able to configure Wine. +- +- If winesetup is being distributed in a separate package +- that is not installed yet on your system, then please install this +- package. +- winesetup can also be downloaded from www.codeweavers.com. +- +- If you choose to not use winesetup for configuration, then +- you can find information on how to prepare a Wine config file manually +- in the Wine README / README.gz file or in the Wine User Guide." +- fi +- fi ++ mkdir ~/.wine ++ cp /etc/wine/wine.conf ~/.wine/config ++ cp /etc/wine/system.reg ~/.wine/system.reg ++ cp /etc/wine/user.ref ~/.wine/user.reg ++ cp /etc/wine/userdef.reg ~/.wine/userdef.reg + } + + #------------------------------------------------------------------------------ +@@ -247,7 +231,7 @@ + if [ $no_args -eq 1 ] ; then + echo "Wine called with no arguments." + echo "Invoking $WINEBIN/$WINE_BIN_NAME $@ ..." +- $XMESSAGE -buttons " Okay ":0," See the Wine Usage Statement ":1," Configure Wine ":2 \ ++ $XMESSAGE -buttons " Okay ":0," See the Wine Usage Statement ":1," Copy default config ":2 \ + -title "Welcome to Wine" \ + " + +@@ -290,14 +274,8 @@ + + while [ $conf -eq 0 ] ; do + +- if [ -f ~/.winerc ] ; then +- conf=1 +- fi + if [ -f ~/.wine/config ] ; then +- conf=2 +- fi +- if [ -f /etc/wine.conf ] ; then +- conf=3 ++ conf=1 + fi + + if [ $conf -ne 0 ] ; then +@@ -305,7 +283,7 @@ + fi + + echo "No configuration file detected." +- $XMESSAGE -buttons " Cancel ":0," Proceed ":1," Configure Wine ":2 \ ++ $XMESSAGE -buttons " Cancel ":0," Proceed ":1," Copy default config ":2 \ + -title "Welcome to Wine" \ + " + +@@ -313,7 +291,7 @@ + configuration file. + + This is normal if you have never run Wine before. +- If this is the case, select the 'Configure Wine' ++ If this is the case, select the 'Copy default config' + option, below, to create a configuration file. + + " +@@ -461,7 +439,7 @@ + fi + + BUTTONS="$BUTTONS"', Debug :2' +- BUTTONS="$BUTTONS"', Configure :4' ++ BUTTONS="$BUTTONS"', Copy default config :4' + BUTTONS="$BUTTONS"', Disable :3' + + #------------------------------------------------------------------------------ diff --git a/wine.init b/wine.init new file mode 100644 index 0000000..905eeff --- /dev/null +++ b/wine.init @@ -0,0 +1,67 @@ +#!/bin/sh +# +# wine Allow users to run Windows(tm) applications by just clicking on them +# (or typing ./file.exe) +# +# chkconfig: 35 98 10 +# description: Allow users to run Windows(tm) applications by just clicking \ +# on them (or typing ./file.exe) + +. /etc/rc.d/init.d/functions +RETVAL=0 + +start() { + echo -n $"Registering binary handler for Windows applications" + /sbin/modprobe binfmt_misc &>/dev/null + echo ':windows:M::MZ::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : + echo ':windowsPE:M::PE::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : +} + +stop() { + echo -n $"Unregistering binary handler for Windows applications" + echo "-1" >/proc/sys/fs/binfmt_misc/windows || : + echo "-1" >/proc/sys/fs/binfmt_misc/windowsPE || : +} + +reload() { + stop + start +} + +wine_status() { + if [ -e /proc/sys/fs/binfmt_misc/windows ]; then + echo $"Wine binary format handlers are registered." + return 0 + else + echo $"Wine binary format handlers are not registered." + return 3 + fi +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + wine_status + RETVAL=$? + ;; + restart) + stop + start + ;; + condrestart) + if [ -e /proc/sys/fs/binfmt_misc/windows ]; then + stop + start + fi + ;; + *) + echo $"Usage: $prog {start|stop|status|restart|condrestart}" + exit 1 +esac +exit $RETVAL + diff --git a/wine.spec b/wine.spec new file mode 100644 index 0000000..d69f0ed --- /dev/null +++ b/wine.spec @@ -0,0 +1,288 @@ +%define DATE 20030911 +%define with_valgrind %{?_with_valgrind:1}%{!?_with_valgrind:0} +%define with_alsa %{?_with_alsa:1}%{!?_with_alsa:0} + +Summary: A Windows 16/32 bit emulator. +Name: wine +Version: 0.0 +Release: 0.fdr.2.%{DATE}.rh90 +Epoch: 0 +Group: Applications/Emulators +License: LGPL +URL: http://www.winehq.com/ +Source0: ftp://metalab.unc.edu/pub/Linux/ALPHA/wine/development/Wine-%{DATE}.tar.gz +Source1: wine.init +Patch0: wine-20030408-initial.patch +Patch1: wine-20030408-kde2.patch +Patch2: wine-20030408-winelauncher.patch +Patch3: wine-20030408-defaultcfg.patch +Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +ExclusiveArch: %{ix86} +Prereq: shadow-utils +Conflicts: kdebase < 0:2.0 +Requires: cups-libs >= 0:1.1.12, openssl +# require NPTL-capable glibc +Requires: /lib/tls +Requires(pre,postun): shadow-utils +BuildRequires: docbook-utils, cups-devel >= 0:1.1.12, perl +BuildRequires: XFree86-devel, libjpeg-devel, libungif-devel, libstdc++-devel +BuildRequires: bison, flex, autoconf >= 0:2.53, arts-devel, ncurses-devel +BuildRequires: openssl-devel, sane-backends-devel +%if %{with_valgrind} +BuildRequires: valgrind-devel +%else +BuildConflicts: valgrind-devel +%endif +%if %{with_alsa} +BuildRequires: alsa-libs-devel +%else +BuildConflicts: alsa-libs-devel +%endif +Provides: libntdll.dll.so + +%description +While Wine is usually thought of as a Windows(TM) emulator, the Wine +developers would prefer that users thought of Wine as a Windows +compatibility layer for UNIX. This package includes a program loader, +which allows unmodified Windows 3.1/95/NT binaries to run under Intel +Unixes. Wine does not require MS Windows, but it can use native system +.dll files if they are available. + +%package devel +Summary: Wine development environment. +Group: Development/Libraries +Requires: %{name} = %{epoch}:%{version}-%{release} + +%description devel +Header and include files for developing applications with the Wine +Windows(TM) emulation libraries. + + +%prep +%setup -q -n wine-%{DATE} +find . -type d -name CVS |xargs rm -rf +%patch -p1 -b .initial +%patch1 -p1 -b .kde2 +%patch2 -p1 -b .wl +%patch3 -p1 -b .defcfg + + +%build +export CFLAGS="$RPM_OPT_FLAGS" +export CPPFLAGS="$(pkg-config openssl --cflags)" # fix ssl detection, need krb5 +autoconf || autoconf-2.53 +%configure \ + --with-nptl \ + --with-x \ + --libdir=%{_libdir}/wine \ + --includedir=%{_includedir}/wine \ + --sysconfdir=%{_sysconfdir}/wine + + +make depend +make %{?_smp_mflags} +#%{__make} -C documentation doc + + +%install +rm -rf $RPM_BUILD_ROOT + +%makeinstall \ + includedir=%{?buildroot:%{buildroot}}%{_includedir}/wine \ + libdir=%{?buildroot:%{buildroot}}%{_libdir}/wine \ + sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir}/wine \ + dlldir=%{?buildroot:%{buildroot}}%{_libdir}/wine/wine \ + LDCONFIG=/bin/true + +for i in system command "Start Menu/Programs/Startup" Profiles/Administrator Fonts \ + Desktop Favorites NetHood Recent SendTo ShellNew; do + mkdir -p "$RPM_BUILD_ROOT%{_datadir}/wine-c/windows/$i" +done +mkdir -p "$RPM_BUILD_ROOT%{_datadir}/wine-c/My Documents" +mkdir -p "$RPM_BUILD_ROOT%{_datadir}/wine-c/Program Files/Common Files" + +# Take care of wine and windows configuration files... +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/wine +mv documentation/samples/config documentation/samples/config.orig +sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"ttydrv\"/" documentation/samples/config.orig |\ +sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"$RPM_BUILD_ROOT%{_datadir}/wine-c\"|" |\ +sed "s|\"Path\" = \"\${HOME}\"$|\"Path\" = \"%{_builddir}/%{buildsubdir}\"|" -> documentation/samples/config +WINEPREFIX=%{_builddir}/%{buildsubdir}/documentation/samples programs/regedit/regedit winedefault.reg #> /dev/null +# Wait until wineserver finishes and closes those files +sleep 5 +install -c -m 0644 documentation/samples/system.reg $RPM_BUILD_ROOT%{_sysconfdir}/wine/system.reg +install -c -m 0644 documentation/samples/user.reg $RPM_BUILD_ROOT%{_sysconfdir}/wine/user.reg +install -c -m 0644 documentation/samples/userdef.reg $RPM_BUILD_ROOT%{_sysconfdir}/wine/userdef.reg +rm -f documentation/samples/system.reg +rm -f documentation/samples/user.reg +rm -f documentation/samples/userdef.reg + +sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"%{_datadir}/wine-c\"|" documentation/samples/config.orig > documentation/samples/config.rh +mv documentation/samples/config.rh documentation/samples/config.orig +sed "s|\"Path\" = \"/cdrom\"\$|\"Path\" = \"/mnt/cdrom\"|" documentation/samples/config.orig > documentation/samples/config.rh +mv documentation/samples/config.rh documentation/samples/config.orig +sed "s|\"Path\" = \"/mnt/fd0\"\$|\"Path\" = \"/mnt/floppy\"|" documentation/samples/config.orig > documentation/samples/config.rh + +install -c -m 0644 documentation/samples/config.rh $RPM_BUILD_ROOT%{_sysconfdir}/wine/wine.conf +rm -f documentation/samples/config +rm -f documentation/samples/config.rh +mv documentation/samples/config.orig documentation/samples/config + +# Install link to windows applications replacements +ln -sf %{_libdir}/wine/wine/start.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/command/start.exe +ln -sf %{_libdir}/wine/wine/notepad.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/notepad.exe +ln -sf %{_libdir}/wine/wine/regedit.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/regedit.exe +ln -sf %{_libdir}/wine/wine/rundll32.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/rundll32.exe +ln -sf %{_libdir}/wine/wine/wcmd.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/cmd.exe +ln -sf %{_libdir}/wine/wine/control.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/control.exe +ln -sf %{_libdir}/wine/wine/winhelp.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/help.exe +ln -sf %{_libdir}/wine/wine/notepad.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/notepad.exe +ln -sf %{_libdir}/wine/wine/progman.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/progman.exe +ln -sf %{_libdir}/wine/wine/regsvr32.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/regsvr32.exe +ln -sf %{_libdir}/wine/wine/winemine.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/winmine.exe +ln -sf %{_libdir}/wine/wine/winver.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/winver.exe +ln -sf %{_libdir}/wine/wine/uninstaller.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/uninstaller.exe +ln -sf %{_libdir}/wine/wine/winhelp.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/winhelp.exe +ln -sf %{_libdir}/wine/wine/winhelp.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/winhlp32.exe + +for i in shell.dll shell32.dll winsock.dll wnsock32.dll; do + touch $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/$i +done +touch $RPM_BUILD_ROOT%{_datadir}/wine-c/autoexec.bat +touch $RPM_BUILD_ROOT%{_datadir}/wine-c/config.sys +touch $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/win.ini +install -c -m 0644 documentation/samples/system.ini $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system.ini + +cat >RedHat </dev/null || : + +%post +if ! grep -q "^/usr/lib/wine$" /etc/ld.so.conf; then + echo "/usr/lib/wine" >>/etc/ld.so.conf +fi +/sbin/chkconfig --add wine +/sbin/chkconfig --level 2345 wine on +/sbin/service wine start &>/dev/null || : +/sbin/ldconfig + +%preun +if test "$1" = "0"; then + /sbin/service wine stop &> /dev/null || : + /sbin/chkconfig --del wine +fi + +%postun +if test "$1" = "0"; then + perl -pi -e "s,^/usr/lib/wine\n$,,g" /etc/ld.so.conf + /usr/sbin/groupdel wine &>/dev/null || : +fi +/sbin/ldconfig + + +%files +%defattr(0775,root,wine) +%dir %{_datadir}/wine-c +%dir %{_datadir}/wine-c/windows +%dir %{_datadir}/wine-c/windows/command +%dir %{_datadir}/wine-c/windows/system +%dir "%{_datadir}/wine-c/windows/Start Menu" +%dir "%{_datadir}/wine-c/windows/Start Menu/Programs" +%dir "%{_datadir}/wine-c/windows/Start Menu/Programs/Startup" +%dir %{_datadir}/wine-c/windows/Profiles +%dir %{_datadir}/wine-c/windows/Profiles/Administrator +%dir %{_datadir}/wine-c/windows/Fonts +%dir %{_datadir}/wine-c/windows/Desktop +%dir %{_datadir}/wine-c/windows/Favorites +%dir %{_datadir}/wine-c/windows/NetHood +%dir %{_datadir}/wine-c/windows/Recent +%dir %{_datadir}/wine-c/windows/SendTo +%dir %{_datadir}/wine-c/windows/ShellNew +%dir "%{_datadir}/wine-c/My Documents" +%dir "%{_datadir}/wine-c/Program Files" +%dir "%{_datadir}/wine-c/Program Files/Common Files" +%defattr(-,root,wine,-) +%{_libdir}/wine +%{_bindir}/* +%{_mandir}/man?/* +%{_datadir}/wine-c/windows/command/*.exe +%{_datadir}/wine-c/windows/system/*.dll +%{_datadir}/wine-c/windows/system/*.exe +%{_datadir}/wine-c/windows/*.exe +%{_datadir}/aclocal/wine.m4 +%config %{_datadir}/wine-c/autoexec.bat +%config %{_datadir}/wine-c/config.sys +%attr(0664, root, wine) %config %{_datadir}/wine-c/windows/win.ini +%attr(0664, root, wine) %config %{_datadir}/wine-c/windows/system.ini +%config %{_sysconfdir}/wine/* +%config %{_initrddir}/* +%doc ANNOUNCE BUGS COPYING.LIB ChangeLog DEVELOPERS-HINTS LICENSE LICENSE.OLD README VERSION +%doc AUTHORS RedHat + +%files devel +%defattr(-,root,root,-) +%doc documentation/winelib-* documentation/wine-devel* documentation/debug* +%doc documentation/patches* documentation/porting.sgml documentation/implementation.sgml +%doc documentation/HOWTO-winelib +%{_includedir}/* + + +%changelog +* Sun Sep 28 2003 Ville Skyttä 0:0.0-0.fdr.2.20030911 +- Fix SSL detection (need krb5), require openssl. +- Disable ALSA by default, use "--with alsa" to enable. +- Disable valgrind by default, use "--with valgrind" to enable. +- Cosmetic improvements. + +* Tue Sep 16 2003 Panu Matilainen 0.0-0.fdr.1.20030911 +- update to 20030911 + +* Tue Aug 19 2003 Panu Matilainen 0.0-0.fdr.1.20030813 +- update to 20030813 + +* Thu Jul 10 2003 Panu Matilainen 0.0-0.fdr.1.20030709 +- update to 20030709 +- add /lib/tls requirement -> only works with NTPL capable systems + +* Wed Jul 02 2003 Panu Matilainen 0.0-0.fdr.1.20030618 +- update to 20030618 + +* Thu May 22 2003 Panu Matilainen 0.0-0.fdr.1.20030508 +- update to 20030508 +- add buildreq's & other QA issues from #255 + +* Sat May 03 2003 Panu Matilainen 0.0-0.fdr.1.20030408 +- package for fedora +- based on modified RH wine from 8.0 found off the net + From 5ae275269e4409cbea39b8ec384ad001164b6a49 Mon Sep 17 00:00:00 2001 From: gafton Date: Wed, 24 Nov 2004 05:07:22 +0000 Subject: [PATCH 003/161] Fix braindead typo from the original import --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 2e4f2b5..f14b0b6 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # Makefile for source rpm: wine -# $Id$ +# $Id: Makefile,v 1.1 2004/11/08 05:32:51 cvsextras Exp $ NAME := wine SPECFILE = $(firstword $(wildcard *.spec)) @@ -12,7 +12,7 @@ MAKEFILE_COMMON := $(shell $(find-makefile-common)) ifeq ($(MAKEFILE_COMMON),) # attept a checkout define checkout-makefile-common -test -f CVS/Rootx && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 +test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 endef MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) From c5159e86e9b6463792acd79406ce63bbe4c056c0 Mon Sep 17 00:00:00 2001 From: Michael Schwendt Date: Sat, 12 Feb 2005 18:34:52 +0000 Subject: [PATCH 004/161] Orphaned package. --- wine.spec | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wine.spec b/wine.spec index d69f0ed..f5bc552 100644 --- a/wine.spec +++ b/wine.spec @@ -59,6 +59,12 @@ Windows(TM) emulation libraries. %prep +echo " +-------------------------------------------------------------- +Unmaintained since RHL9. Maintainer needed. +--------------------------------------------------------------" > /dev/null +exit 1 + %setup -q -n wine-%{DATE} find . -type d -name CVS |xargs rm -rf %patch -p1 -b .initial From 6dab312c18d156efbbb3b93a6848980d2d5e6c49 Mon Sep 17 00:00:00 2001 From: Michael Schwendt Date: Fri, 4 Mar 2005 00:32:11 +0000 Subject: [PATCH 005/161] REMOVED from devel tree. Broken and out-of-date long enough. If ever picked up again, old version could be resurrected or fresh package imported from scratch. --- .cvsignore | 1 - Makefile | 21 --- sources | 1 - wine-20030408-defaultcfg.patch | 51 ------ wine-20030408-initial.patch | 104 ----------- wine-20030408-kde2.patch | 153 ---------------- wine-20030408-winelauncher.patch | 92 ---------- wine.init | 67 ------- wine.spec | 294 ------------------------------- 9 files changed, 784 deletions(-) delete mode 100644 .cvsignore delete mode 100644 Makefile delete mode 100644 sources delete mode 100644 wine-20030408-defaultcfg.patch delete mode 100644 wine-20030408-initial.patch delete mode 100644 wine-20030408-kde2.patch delete mode 100644 wine-20030408-winelauncher.patch delete mode 100644 wine.init delete mode 100644 wine.spec diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index e3878fa..0000000 --- a/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -Wine-20030911.tar.gz diff --git a/Makefile b/Makefile deleted file mode 100644 index f14b0b6..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for source rpm: wine -# $Id: Makefile,v 1.1 2004/11/08 05:32:51 cvsextras Exp $ -NAME := wine -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attept a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/sources b/sources deleted file mode 100644 index a75d807..0000000 --- a/sources +++ /dev/null @@ -1 +0,0 @@ -81521fe47d540427183e88d02d5c5f88 Wine-20030911.tar.gz diff --git a/wine-20030408-defaultcfg.patch b/wine-20030408-defaultcfg.patch deleted file mode 100644 index 16ebf7c..0000000 --- a/wine-20030408-defaultcfg.patch +++ /dev/null @@ -1,51 +0,0 @@ -Index: wine/libs/wine/config.c -=================================================================== -RCS file: /home/wine/wine/libs/wine/config.c,v -retrieving revision 1.1 -diff -u -r1.1 config.c ---- wine/libs/wine/config.c 22 Mar 2003 20:40:48 -0000 1.1 -+++ wine/libs/wine/config.c 26 Nov 2002 18:37:03 -0000 -@@ -136,7 +136,20 @@ - if (config_dir[0] != '/') - fatal_error( "invalid directory %s in WINEPREFIX: not an absolute path\n", prefix ); - if (stat( config_dir, &st ) == -1) -- fatal_perror( "cannot open %s as specified in WINEPREFIX", config_dir ); -+ { -+ /* No configuration - put in defaults. */ -+ char command[512]; -+ mkdir(config_dir, 0700); -+ sprintf(command, "/bin/cp /etc/wine/wine.conf %s/config", config_dir); -+ system(command); -+ sprintf(command, "/bin/cp /etc/wine/system.reg %s/system.reg", config_dir); -+ system(command); -+ sprintf(command, "/bin/cp /etc/wine/user.reg %s/user.reg", config_dir); -+ system(command); -+ sprintf(command, "/bin/cp /etc/wine/userdef.reg %s/userdef.reg", config_dir); -+ system(command); -+ stat( config_dir, &st ); -+ } - } - else - { -@@ -147,7 +160,20 @@ - remove_trailing_slashes( config_dir ); - strcat( config_dir, server_config_dir ); - if (stat( config_dir, &st ) == -1) -- fatal_perror( "cannot open %s", config_dir ); -+ { -+ /* No configuration - put in defaults. */ -+ char command[512]; -+ mkdir(config_dir, 0700); -+ sprintf(command, "/bin/cp /etc/wine/wine.conf %s/config", config_dir); -+ system(command); -+ sprintf(command, "/bin/cp /etc/wine/system.reg %s/system.reg", config_dir); -+ system(command); -+ sprintf(command, "/bin/cp /etc/wine/user.reg %s/user.reg", config_dir); -+ system(command); -+ sprintf(command, "/bin/cp /etc/wine/userdef.reg %s/userdef.reg", config_dir); -+ system(command); -+ stat( config_dir, &st ); -+ } - } - if (!S_ISDIR(st.st_mode)) fatal_error( "%s is not a directory\n", config_dir ); - diff --git a/wine-20030408-initial.patch b/wine-20030408-initial.patch deleted file mode 100644 index 6281eb3..0000000 --- a/wine-20030408-initial.patch +++ /dev/null @@ -1,104 +0,0 @@ -Index: wine/misc/registry.c -=================================================================== -RCS file: /home/wine/wine/misc/registry.c,v -retrieving revision 1.125 -diff -u -r1.125 registry.c ---- wine/misc/registry.c 30 Mar 2003 03:05:12 -0000 1.125 -+++ wine/misc/registry.c 26 Nov 2002 18:21:01 -0000 -@@ -1609,14 +1609,65 @@ - - strcpy(tmp,confdir); - strcat(tmp,"/" SAVE_LOCAL_REGBRANCH_USER_DEFAULT); -+ if (access( tmp, R_OK ) && !access( "/etc/wine/" SAVE_LOCAL_REGBRANCH_USER_DEFAULT, R_OK )) { -+ /* If the registry doesn't exist, copy the global one */ -+ FILE *in, *out; -+ char buf[1024]; -+ in = fopen( "/etc/wine/" SAVE_LOCAL_REGBRANCH_USER_DEFAULT, "r" ); -+ if(!in) -+ return; -+ out = fopen( tmp, "w" ); -+ if(!out) { -+ fclose(in); -+ return; -+ } -+ while(fgets(buf, 1024, in)) -+ fputs(buf, out); -+ fclose(in); -+ fclose(out); -+ } - load_wine_registry(hkey_users_default,tmp); - - strcpy(tmp,confdir); - strcat(tmp,"/" SAVE_LOCAL_REGBRANCH_CURRENT_USER); -+ if (access( tmp, R_OK ) && !access( "/etc/wine/" SAVE_LOCAL_REGBRANCH_CURRENT_USER, R_OK )) { -+ /* If the registry doesn't exist, copy the global one */ -+ FILE *in, *out; -+ char buf[1024]; -+ in = fopen( "/etc/wine/" SAVE_LOCAL_REGBRANCH_CURRENT_USER, "r" ); -+ if(!in) -+ return; -+ out = fopen( tmp, "w" ); -+ if(!out) { -+ fclose(in); -+ return; -+ } -+ while(fgets(buf, 1024, in)) -+ fputs(buf, out); -+ fclose(in); -+ fclose(out); -+ } - load_wine_registry(hkey_current_user,tmp); - - strcpy(tmp,confdir); - strcat(tmp,"/" SAVE_LOCAL_REGBRANCH_LOCAL_MACHINE); -+ if (access( tmp, R_OK ) && !access( "/etc/wine/" SAVE_LOCAL_REGBRANCH_LOCAL_MACHINE, R_OK )) { -+ /* If the registry doesn't exist, copy the global one */ -+ FILE *in, *out; -+ char buf[1024]; -+ in = fopen( "/etc/wine/" SAVE_LOCAL_REGBRANCH_LOCAL_MACHINE, "r" ); -+ if(!in) -+ return; -+ out = fopen( tmp, "w" ); -+ if(!out) { -+ fclose(in); -+ return; -+ } -+ while(fgets(buf, 1024, in)) -+ fputs(buf, out); -+ fclose(in); -+ fclose(out); -+ } - load_wine_registry(hkey_local_machine,tmp); - - free(tmp); -Index: wine/server/registry.c -=================================================================== -RCS file: /home/wine/wine/server/registry.c,v -retrieving revision 1.50 -diff -u -r1.50 registry.c ---- wine/server/registry.c 25 Feb 2003 04:04:18 -0000 1.50 -+++ wine/server/registry.c 26 Nov 2002 18:21:02 -0000 -@@ -1486,6 +1486,23 @@ - if (!(filename = malloc( strlen(config) + 8 ))) fatal_error( "out of memory\n" ); - strcpy( filename, config ); - strcat( filename, "/config" ); -+ if (access( filename, R_OK ) && !access( "/etc/wine/wine.conf", R_OK )) { -+ /* If the registry doesn't exist, copy the global one */ -+ FILE *in, *out; -+ char buf[1024]; -+ in = fopen( "/etc/wine/wine.conf", "r" ); -+ if(!in) -+ return; -+ out = fopen( filename, "w" ); -+ if(!out) { -+ fclose(in); -+ return; -+ } -+ while(fgets(buf, 1024, in)) -+ fputs(buf, out); -+ fclose(in); -+ fclose(out); -+ } - if ((f = fopen( filename, "r" ))) - { - struct key *key; diff --git a/wine-20030408-kde2.patch b/wine-20030408-kde2.patch deleted file mode 100644 index c36cddd..0000000 --- a/wine-20030408-kde2.patch +++ /dev/null @@ -1,153 +0,0 @@ -Index: wine/tools/wineshelllink -=================================================================== -RCS file: /home/wine/wine/tools/wineshelllink,v -retrieving revision 1.15 -diff -u -r1.15 wineshelllink ---- wine/tools/wineshelllink 23 May 2002 16:31:22 -0000 1.15 -+++ wine/tools/wineshelllink 26 Nov 2002 18:26:48 -0000 -@@ -77,22 +77,7 @@ - usage - fi - --kde_entry() --{ -- xname=`basename "$link"` -- cat < /dev/null 2>&1 --if [ $? = 0 -a $mode = "menu" ] --then -- iconname="`basename "$link"`.xpm" -- dir="$HOME/.menu/icons" -- if [ -f "$icon" ] -- then -- mkdir -p "$dir" -- cp "$icon" "$dir/$iconname" -- xpmicon="$dir/$iconname" -- else -- xpmicon="" -- fi -- mdk_entry >> "$HOME/.menu/wine" -- if [ -d "/usr/lib/menu" ] -- then -- mdk_entry >> "/usr/lib/menu/wine" -- fi -- update-menus > /dev/null 2>&1 --fi -- - # KDE -- - if [ -d "$HOME/.kde" ] - then - kdeversion=0 -@@ -167,30 +128,13 @@ - copy_icon "$HOME/.kde/share/applnk/Wine" - if [ $mode = "menu" ] - then -- gnome_entry > "$HOME/.kde/share/applnk/Wine/$link.desktop" -+ make_entry > "$HOME/.kde/share/applnk/Wine/$link.desktop" - elif [ -d "$HOME/Desktop" ] - then -- gnome_entry > "$HOME/Desktop/$link.desktop" -+ make_entry > "$HOME/Desktop/$link.desktop" - fi - else -- copy_icon "$HOME/.kde/share/applnk/Wine" -- if [ $mode = "menu" ] -- then -- kde_entry > "$HOME/.kde/share/applnk/Wine/$link.kdelnk" -- -- # KDE 1.x kludge. Wake up KDE, if we can find kpanel running -- which kwmcom >/dev/null 2>/dev/null && \ -- ps u -C kpanel >/dev/null 2>/dev/null && \ -- kwmcom kpanel:restart -- -- elif [ -d "$HOME/Desktop" ] -- then -- kde_entry > "$HOME/Desktop/$link.kdelnk" -- # KDE 1.x kludge: wake up KDE, if we can find kfm running... -- which kfmclient >/dev/null 2>/dev/null && \ -- ps u -C kfm >/dev/null 2>/dev/null && \ -- kfmclient refreshDesktop -- fi -+ echo "KDE < 2 not supported anymore" - fi - fi - -@@ -199,15 +143,15 @@ - copy_icon "$HOME/.kde2/share/applnk/Wine" - if [ $mode = "menu" ] - then -- gnome_entry > "$HOME/.kde2/share/applnk/Wine/$link.desktop" -+ make_entry > "$HOME/.kde2/share/applnk/Wine/$link.desktop" - else - if [ -d "$HOME/Desktop2" ] - then -- gnome_entry > "$HOME/Desktop2/$link.desktop" -+ make_entry > "$HOME/Desktop2/$link.desktop" - fi - if [ -d "$HOME/Desktop" ] - then -- gnome_entry > "$HOME/Desktop/$link.desktop" -+ make_entry > "$HOME/Desktop/$link.desktop" - fi - fi - fi -@@ -217,19 +161,19 @@ - copy_icon "$HOME/.kde3/share/applnk/Wine" - if [ $mode = "menu" ] - then -- gnome_entry > "$HOME/.kde3/share/applnk/Wine/$link.desktop" -+ make_entry > "$HOME/.kde3/share/applnk/Wine/$link.desktop" - else - if [ -d "$HOME/Desktop3" ] - then -- gnome_entry > "$HOME/Desktop3/$link.desktop" -+ make_entry > "$HOME/Desktop3/$link.desktop" - fi - if [ -d "$HOME/Desktop2" ] - then -- gnome_entry > "$HOME/Desktop2/$link.desktop" -+ make_entry > "$HOME/Desktop2/$link.desktop" - fi - if [ -d "$HOME/Desktop" ] - then -- gnome_entry > "$HOME/Desktop/$link.desktop" -+ make_entry > "$HOME/Desktop/$link.desktop" - fi - fi - fi -@@ -241,10 +185,10 @@ - copy_icon "$HOME/.gnome/apps/Wine" - if [ $mode = "menu" ] - then -- gnome_entry > "$HOME/.gnome/apps/Wine/$link.desktop" -+ make_entry > "$HOME/.gnome/apps/Wine/$link.desktop" - elif [ -d "$HOME/.gnome-desktop" ] - then -- gnome_entry > "$HOME/.gnome-desktop/$link.desktop" -+ make_entry > "$HOME/.gnome-desktop/$link.desktop" - fi - fi - diff --git a/wine-20030408-winelauncher.patch b/wine-20030408-winelauncher.patch deleted file mode 100644 index edd49f3..0000000 --- a/wine-20030408-winelauncher.patch +++ /dev/null @@ -1,92 +0,0 @@ -Index: wine/programs/winelauncher.in -=================================================================== -RCS file: /home/wine/wine/programs/winelauncher.in,v -retrieving revision 1.2 -diff -u -r1.2 winelauncher.in ---- wine/programs/winelauncher.in 5 Jul 2002 21:18:41 -0000 1.2 -+++ wine/programs/winelauncher.in 26 Nov 2002 17:52:47 -0000 -@@ -93,27 +93,11 @@ - - launch_winesetup() - { -- which winesetup -- if [ $? -eq 0 ] ; then -- winesetup -- else -- if [ -x /opt/wine/bin/winesetup ] ; then -- /opt/wine/bin/winesetup -- else -- $XMESSAGE -title "Error" \ -- "Error: Unable to find winesetup in your PATH or in /opt/wine/bin: -- I am not able to configure Wine. -- -- If winesetup is being distributed in a separate package -- that is not installed yet on your system, then please install this -- package. -- winesetup can also be downloaded from www.codeweavers.com. -- -- If you choose to not use winesetup for configuration, then -- you can find information on how to prepare a Wine config file manually -- in the Wine README / README.gz file or in the Wine User Guide." -- fi -- fi -+ mkdir ~/.wine -+ cp /etc/wine/wine.conf ~/.wine/config -+ cp /etc/wine/system.reg ~/.wine/system.reg -+ cp /etc/wine/user.ref ~/.wine/user.reg -+ cp /etc/wine/userdef.reg ~/.wine/userdef.reg - } - - #------------------------------------------------------------------------------ -@@ -247,7 +231,7 @@ - if [ $no_args -eq 1 ] ; then - echo "Wine called with no arguments." - echo "Invoking $WINEBIN/$WINE_BIN_NAME $@ ..." -- $XMESSAGE -buttons " Okay ":0," See the Wine Usage Statement ":1," Configure Wine ":2 \ -+ $XMESSAGE -buttons " Okay ":0," See the Wine Usage Statement ":1," Copy default config ":2 \ - -title "Welcome to Wine" \ - " - -@@ -290,14 +274,8 @@ - - while [ $conf -eq 0 ] ; do - -- if [ -f ~/.winerc ] ; then -- conf=1 -- fi - if [ -f ~/.wine/config ] ; then -- conf=2 -- fi -- if [ -f /etc/wine.conf ] ; then -- conf=3 -+ conf=1 - fi - - if [ $conf -ne 0 ] ; then -@@ -305,7 +283,7 @@ - fi - - echo "No configuration file detected." -- $XMESSAGE -buttons " Cancel ":0," Proceed ":1," Configure Wine ":2 \ -+ $XMESSAGE -buttons " Cancel ":0," Proceed ":1," Copy default config ":2 \ - -title "Welcome to Wine" \ - " - -@@ -313,7 +291,7 @@ - configuration file. - - This is normal if you have never run Wine before. -- If this is the case, select the 'Configure Wine' -+ If this is the case, select the 'Copy default config' - option, below, to create a configuration file. - - " -@@ -461,7 +439,7 @@ - fi - - BUTTONS="$BUTTONS"', Debug :2' -- BUTTONS="$BUTTONS"', Configure :4' -+ BUTTONS="$BUTTONS"', Copy default config :4' - BUTTONS="$BUTTONS"', Disable :3' - - #------------------------------------------------------------------------------ diff --git a/wine.init b/wine.init deleted file mode 100644 index 905eeff..0000000 --- a/wine.init +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh -# -# wine Allow users to run Windows(tm) applications by just clicking on them -# (or typing ./file.exe) -# -# chkconfig: 35 98 10 -# description: Allow users to run Windows(tm) applications by just clicking \ -# on them (or typing ./file.exe) - -. /etc/rc.d/init.d/functions -RETVAL=0 - -start() { - echo -n $"Registering binary handler for Windows applications" - /sbin/modprobe binfmt_misc &>/dev/null - echo ':windows:M::MZ::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : - echo ':windowsPE:M::PE::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : -} - -stop() { - echo -n $"Unregistering binary handler for Windows applications" - echo "-1" >/proc/sys/fs/binfmt_misc/windows || : - echo "-1" >/proc/sys/fs/binfmt_misc/windowsPE || : -} - -reload() { - stop - start -} - -wine_status() { - if [ -e /proc/sys/fs/binfmt_misc/windows ]; then - echo $"Wine binary format handlers are registered." - return 0 - else - echo $"Wine binary format handlers are not registered." - return 3 - fi -} - -case "$1" in - start) - start - ;; - stop) - stop - ;; - status) - wine_status - RETVAL=$? - ;; - restart) - stop - start - ;; - condrestart) - if [ -e /proc/sys/fs/binfmt_misc/windows ]; then - stop - start - fi - ;; - *) - echo $"Usage: $prog {start|stop|status|restart|condrestart}" - exit 1 -esac -exit $RETVAL - diff --git a/wine.spec b/wine.spec deleted file mode 100644 index f5bc552..0000000 --- a/wine.spec +++ /dev/null @@ -1,294 +0,0 @@ -%define DATE 20030911 -%define with_valgrind %{?_with_valgrind:1}%{!?_with_valgrind:0} -%define with_alsa %{?_with_alsa:1}%{!?_with_alsa:0} - -Summary: A Windows 16/32 bit emulator. -Name: wine -Version: 0.0 -Release: 0.fdr.2.%{DATE}.rh90 -Epoch: 0 -Group: Applications/Emulators -License: LGPL -URL: http://www.winehq.com/ -Source0: ftp://metalab.unc.edu/pub/Linux/ALPHA/wine/development/Wine-%{DATE}.tar.gz -Source1: wine.init -Patch0: wine-20030408-initial.patch -Patch1: wine-20030408-kde2.patch -Patch2: wine-20030408-winelauncher.patch -Patch3: wine-20030408-defaultcfg.patch -Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -ExclusiveArch: %{ix86} -Prereq: shadow-utils -Conflicts: kdebase < 0:2.0 -Requires: cups-libs >= 0:1.1.12, openssl -# require NPTL-capable glibc -Requires: /lib/tls -Requires(pre,postun): shadow-utils -BuildRequires: docbook-utils, cups-devel >= 0:1.1.12, perl -BuildRequires: XFree86-devel, libjpeg-devel, libungif-devel, libstdc++-devel -BuildRequires: bison, flex, autoconf >= 0:2.53, arts-devel, ncurses-devel -BuildRequires: openssl-devel, sane-backends-devel -%if %{with_valgrind} -BuildRequires: valgrind-devel -%else -BuildConflicts: valgrind-devel -%endif -%if %{with_alsa} -BuildRequires: alsa-libs-devel -%else -BuildConflicts: alsa-libs-devel -%endif -Provides: libntdll.dll.so - -%description -While Wine is usually thought of as a Windows(TM) emulator, the Wine -developers would prefer that users thought of Wine as a Windows -compatibility layer for UNIX. This package includes a program loader, -which allows unmodified Windows 3.1/95/NT binaries to run under Intel -Unixes. Wine does not require MS Windows, but it can use native system -.dll files if they are available. - -%package devel -Summary: Wine development environment. -Group: Development/Libraries -Requires: %{name} = %{epoch}:%{version}-%{release} - -%description devel -Header and include files for developing applications with the Wine -Windows(TM) emulation libraries. - - -%prep -echo " --------------------------------------------------------------- -Unmaintained since RHL9. Maintainer needed. ---------------------------------------------------------------" > /dev/null -exit 1 - -%setup -q -n wine-%{DATE} -find . -type d -name CVS |xargs rm -rf -%patch -p1 -b .initial -%patch1 -p1 -b .kde2 -%patch2 -p1 -b .wl -%patch3 -p1 -b .defcfg - - -%build -export CFLAGS="$RPM_OPT_FLAGS" -export CPPFLAGS="$(pkg-config openssl --cflags)" # fix ssl detection, need krb5 -autoconf || autoconf-2.53 -%configure \ - --with-nptl \ - --with-x \ - --libdir=%{_libdir}/wine \ - --includedir=%{_includedir}/wine \ - --sysconfdir=%{_sysconfdir}/wine - - -make depend -make %{?_smp_mflags} -#%{__make} -C documentation doc - - -%install -rm -rf $RPM_BUILD_ROOT - -%makeinstall \ - includedir=%{?buildroot:%{buildroot}}%{_includedir}/wine \ - libdir=%{?buildroot:%{buildroot}}%{_libdir}/wine \ - sysconfdir=%{?buildroot:%{buildroot}}%{_sysconfdir}/wine \ - dlldir=%{?buildroot:%{buildroot}}%{_libdir}/wine/wine \ - LDCONFIG=/bin/true - -for i in system command "Start Menu/Programs/Startup" Profiles/Administrator Fonts \ - Desktop Favorites NetHood Recent SendTo ShellNew; do - mkdir -p "$RPM_BUILD_ROOT%{_datadir}/wine-c/windows/$i" -done -mkdir -p "$RPM_BUILD_ROOT%{_datadir}/wine-c/My Documents" -mkdir -p "$RPM_BUILD_ROOT%{_datadir}/wine-c/Program Files/Common Files" - -# Take care of wine and windows configuration files... -mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/wine -mv documentation/samples/config documentation/samples/config.orig -sed "s/\"GraphicsDriver\" = .*/\"GraphicsDriver\" = \"ttydrv\"/" documentation/samples/config.orig |\ -sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"$RPM_BUILD_ROOT%{_datadir}/wine-c\"|" |\ -sed "s|\"Path\" = \"\${HOME}\"$|\"Path\" = \"%{_builddir}/%{buildsubdir}\"|" -> documentation/samples/config -WINEPREFIX=%{_builddir}/%{buildsubdir}/documentation/samples programs/regedit/regedit winedefault.reg #> /dev/null -# Wait until wineserver finishes and closes those files -sleep 5 -install -c -m 0644 documentation/samples/system.reg $RPM_BUILD_ROOT%{_sysconfdir}/wine/system.reg -install -c -m 0644 documentation/samples/user.reg $RPM_BUILD_ROOT%{_sysconfdir}/wine/user.reg -install -c -m 0644 documentation/samples/userdef.reg $RPM_BUILD_ROOT%{_sysconfdir}/wine/userdef.reg -rm -f documentation/samples/system.reg -rm -f documentation/samples/user.reg -rm -f documentation/samples/userdef.reg - -sed "s|\"Path\" = \"/c\"\$|\"Path\" = \"%{_datadir}/wine-c\"|" documentation/samples/config.orig > documentation/samples/config.rh -mv documentation/samples/config.rh documentation/samples/config.orig -sed "s|\"Path\" = \"/cdrom\"\$|\"Path\" = \"/mnt/cdrom\"|" documentation/samples/config.orig > documentation/samples/config.rh -mv documentation/samples/config.rh documentation/samples/config.orig -sed "s|\"Path\" = \"/mnt/fd0\"\$|\"Path\" = \"/mnt/floppy\"|" documentation/samples/config.orig > documentation/samples/config.rh - -install -c -m 0644 documentation/samples/config.rh $RPM_BUILD_ROOT%{_sysconfdir}/wine/wine.conf -rm -f documentation/samples/config -rm -f documentation/samples/config.rh -mv documentation/samples/config.orig documentation/samples/config - -# Install link to windows applications replacements -ln -sf %{_libdir}/wine/wine/start.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/command/start.exe -ln -sf %{_libdir}/wine/wine/notepad.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/notepad.exe -ln -sf %{_libdir}/wine/wine/regedit.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/regedit.exe -ln -sf %{_libdir}/wine/wine/rundll32.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/rundll32.exe -ln -sf %{_libdir}/wine/wine/wcmd.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/cmd.exe -ln -sf %{_libdir}/wine/wine/control.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/control.exe -ln -sf %{_libdir}/wine/wine/winhelp.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/help.exe -ln -sf %{_libdir}/wine/wine/notepad.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/notepad.exe -ln -sf %{_libdir}/wine/wine/progman.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/progman.exe -ln -sf %{_libdir}/wine/wine/regsvr32.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/regsvr32.exe -ln -sf %{_libdir}/wine/wine/winemine.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/winmine.exe -ln -sf %{_libdir}/wine/wine/winver.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/winver.exe -ln -sf %{_libdir}/wine/wine/uninstaller.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/uninstaller.exe -ln -sf %{_libdir}/wine/wine/winhelp.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/winhelp.exe -ln -sf %{_libdir}/wine/wine/winhelp.exe.so $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/winhlp32.exe - -for i in shell.dll shell32.dll winsock.dll wnsock32.dll; do - touch $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system/$i -done -touch $RPM_BUILD_ROOT%{_datadir}/wine-c/autoexec.bat -touch $RPM_BUILD_ROOT%{_datadir}/wine-c/config.sys -touch $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/win.ini -install -c -m 0644 documentation/samples/system.ini $RPM_BUILD_ROOT%{_datadir}/wine-c/windows/system.ini - -cat >RedHat </dev/null || : - -%post -if ! grep -q "^/usr/lib/wine$" /etc/ld.so.conf; then - echo "/usr/lib/wine" >>/etc/ld.so.conf -fi -/sbin/chkconfig --add wine -/sbin/chkconfig --level 2345 wine on -/sbin/service wine start &>/dev/null || : -/sbin/ldconfig - -%preun -if test "$1" = "0"; then - /sbin/service wine stop &> /dev/null || : - /sbin/chkconfig --del wine -fi - -%postun -if test "$1" = "0"; then - perl -pi -e "s,^/usr/lib/wine\n$,,g" /etc/ld.so.conf - /usr/sbin/groupdel wine &>/dev/null || : -fi -/sbin/ldconfig - - -%files -%defattr(0775,root,wine) -%dir %{_datadir}/wine-c -%dir %{_datadir}/wine-c/windows -%dir %{_datadir}/wine-c/windows/command -%dir %{_datadir}/wine-c/windows/system -%dir "%{_datadir}/wine-c/windows/Start Menu" -%dir "%{_datadir}/wine-c/windows/Start Menu/Programs" -%dir "%{_datadir}/wine-c/windows/Start Menu/Programs/Startup" -%dir %{_datadir}/wine-c/windows/Profiles -%dir %{_datadir}/wine-c/windows/Profiles/Administrator -%dir %{_datadir}/wine-c/windows/Fonts -%dir %{_datadir}/wine-c/windows/Desktop -%dir %{_datadir}/wine-c/windows/Favorites -%dir %{_datadir}/wine-c/windows/NetHood -%dir %{_datadir}/wine-c/windows/Recent -%dir %{_datadir}/wine-c/windows/SendTo -%dir %{_datadir}/wine-c/windows/ShellNew -%dir "%{_datadir}/wine-c/My Documents" -%dir "%{_datadir}/wine-c/Program Files" -%dir "%{_datadir}/wine-c/Program Files/Common Files" -%defattr(-,root,wine,-) -%{_libdir}/wine -%{_bindir}/* -%{_mandir}/man?/* -%{_datadir}/wine-c/windows/command/*.exe -%{_datadir}/wine-c/windows/system/*.dll -%{_datadir}/wine-c/windows/system/*.exe -%{_datadir}/wine-c/windows/*.exe -%{_datadir}/aclocal/wine.m4 -%config %{_datadir}/wine-c/autoexec.bat -%config %{_datadir}/wine-c/config.sys -%attr(0664, root, wine) %config %{_datadir}/wine-c/windows/win.ini -%attr(0664, root, wine) %config %{_datadir}/wine-c/windows/system.ini -%config %{_sysconfdir}/wine/* -%config %{_initrddir}/* -%doc ANNOUNCE BUGS COPYING.LIB ChangeLog DEVELOPERS-HINTS LICENSE LICENSE.OLD README VERSION -%doc AUTHORS RedHat - -%files devel -%defattr(-,root,root,-) -%doc documentation/winelib-* documentation/wine-devel* documentation/debug* -%doc documentation/patches* documentation/porting.sgml documentation/implementation.sgml -%doc documentation/HOWTO-winelib -%{_includedir}/* - - -%changelog -* Sun Sep 28 2003 Ville Skyttä 0:0.0-0.fdr.2.20030911 -- Fix SSL detection (need krb5), require openssl. -- Disable ALSA by default, use "--with alsa" to enable. -- Disable valgrind by default, use "--with valgrind" to enable. -- Cosmetic improvements. - -* Tue Sep 16 2003 Panu Matilainen 0.0-0.fdr.1.20030911 -- update to 20030911 - -* Tue Aug 19 2003 Panu Matilainen 0.0-0.fdr.1.20030813 -- update to 20030813 - -* Thu Jul 10 2003 Panu Matilainen 0.0-0.fdr.1.20030709 -- update to 20030709 -- add /lib/tls requirement -> only works with NTPL capable systems - -* Wed Jul 02 2003 Panu Matilainen 0.0-0.fdr.1.20030618 -- update to 20030618 - -* Thu May 22 2003 Panu Matilainen 0.0-0.fdr.1.20030508 -- update to 20030508 -- add buildreq's & other QA issues from #255 - -* Sat May 03 2003 Panu Matilainen 0.0-0.fdr.1.20030408 -- package for fedora -- based on modified RH wine from 8.0 found off the net - From c3699f120f8b1553426b1501ba7bbd4873fa7f49 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 2 Jan 2006 08:55:16 +0000 Subject: [PATCH 006/161] - add Makefile to devel branch --- Makefile | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3261c9e --- /dev/null +++ b/Makefile @@ -0,0 +1,21 @@ +# Makefile for source rpm: wine +# $Id: Makefile,v 1.2 2004/11/24 05:00:10 gafton Exp $ +NAME := wine +SPECFILE = $(firstword $(wildcard *.spec)) + +define find-makefile-common +for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done +endef + +MAKEFILE_COMMON := $(shell $(find-makefile-common)) + +ifeq ($(MAKEFILE_COMMON),) +# attept a checkout +define checkout-makefile-common +test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 +endef + +MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) +endif + +include $(MAKEFILE_COMMON) From 28faa8ba708a0cb84a31ac049b708cf3b86e1ab2 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 2 Jan 2006 09:04:37 +0000 Subject: [PATCH 007/161] auto-import wine-0.9.4-3 on branch devel from wine-0.9.4-3.src.rpm --- sources | 2 + wine-20050524-generated.patch | 27 + wine-32.conf | 1 + wine-README-Fedora | 15 + wine-notepad.desktop | 8 + wine-regedit.desktop | 8 + wine-uninstaller.desktop | 8 + wine-winecfg.desktop | 8 + wine-winefile.desktop | 8 + wine-winemine.desktop | 8 + wine-winhelp.desktop | 8 + wine.init | 67 +++ wine.spec | 1060 +++++++++++++++++++++++++++++++++ 13 files changed, 1228 insertions(+) create mode 100644 sources create mode 100644 wine-20050524-generated.patch create mode 100644 wine-32.conf create mode 100644 wine-README-Fedora create mode 100644 wine-notepad.desktop create mode 100644 wine-regedit.desktop create mode 100644 wine-uninstaller.desktop create mode 100644 wine-winecfg.desktop create mode 100644 wine-winefile.desktop create mode 100644 wine-winemine.desktop create mode 100644 wine-winhelp.desktop create mode 100644 wine.init create mode 100644 wine.spec diff --git a/sources b/sources new file mode 100644 index 0000000..b5e92a1 --- /dev/null +++ b/sources @@ -0,0 +1,2 @@ +73205d83a5612a43441a8532683c0434 wine-0.9.4.tar.bz2 +fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz diff --git a/wine-20050524-generated.patch b/wine-20050524-generated.patch new file mode 100644 index 0000000..06de588 --- /dev/null +++ b/wine-20050524-generated.patch @@ -0,0 +1,27 @@ +Index: wine/tools/wineprefixcreate.in +=================================================================== +RCS file: /home/wine/wine/tools/wineprefixcreate.in,v +retrieving revision 1.10 +diff -u -r1.10 wineprefixcreate.in +--- wine/tools/wineprefixcreate.in 19 May 2005 11:12:34 -0000 1.10 ++++ wine/tools/wineprefixcreate.in 29 May 2005 00:00:00 -0000 +@@ -38,6 +38,7 @@ + + dlldir="@dlldir@" + datadir="@datadir@/wine" ++fontdir="@datadir@/fonts/wine" + + do_wait=0 + quiet=0 +@@ -175,6 +176,11 @@ + link_app winhelp "$CROOT/windows/winhelp.exe" + link_app winhelp "$CROOT/windows/winhlp32.exe" + link_app winebrowser "$CROOT/windows/winebrowser.exe" ++ ++# Copy the generated fonts ++ ++cp $fontdir/*.ttf "$CROOT/windows/fonts" ++cp $fontdir/*.fon "$CROOT/windows/fonts" + + # Copy the .inf script and run it + diff --git a/wine-32.conf b/wine-32.conf new file mode 100644 index 0000000..d9d71cd --- /dev/null +++ b/wine-32.conf @@ -0,0 +1 @@ +/usr/lib/wine/ diff --git a/wine-README-Fedora b/wine-README-Fedora new file mode 100644 index 0000000..05bf675 --- /dev/null +++ b/wine-README-Fedora @@ -0,0 +1,15 @@ +Wine directory structure used in Fedora Core Linux: +=================================================== + +\${HOME}/.wine/drive_c is the root directory (aka C: drive) wine looks for by +default. It is created with (empty) C:\windows and C:\windows\system +directories, needed to operate Wine without an existing Windows +installation, if it doesn't already exists. + +If you want to use Wine with an existing Windows installation that is +mounted, for example, in /mnt/windows-c, change the symlink +\${HOME}/.wine/dosdevices/c: to point to /mnt/windows-c instead of the +defaults set by installation. + +If you do this, you can safely remove \${HOME}/.wine/drive_c. +(Alternatively, just mount your Windows partition to \${HOME}/.wine/drive_c.) diff --git a/wine-notepad.desktop b/wine-notepad.desktop new file mode 100644 index 0000000..fb9d815 --- /dev/null +++ b/wine-notepad.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=notepad +Comment=Text Editor +Exec=notepad +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=Application;System; diff --git a/wine-regedit.desktop b/wine-regedit.desktop new file mode 100644 index 0000000..fd0c3c1 --- /dev/null +++ b/wine-regedit.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=regedit +Comment=Wine registry editor +Exec=regedit +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=Application;System; diff --git a/wine-uninstaller.desktop b/wine-uninstaller.desktop new file mode 100644 index 0000000..f75c319 --- /dev/null +++ b/wine-uninstaller.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Wine Software Uninstaller +Comment=Interface to uninstall software +Exec=uninstaller +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=Application;System; diff --git a/wine-winecfg.desktop b/wine-winecfg.desktop new file mode 100644 index 0000000..3f27f5f --- /dev/null +++ b/wine-winecfg.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Wine Configuration +Comment=Interface to set wine parameters +Exec=winecfg +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=Application;System; diff --git a/wine-winefile.desktop b/wine-winefile.desktop new file mode 100644 index 0000000..8ec2d4b --- /dev/null +++ b/wine-winefile.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Wine File +Comment=Wine File Browser +Exec=winefile +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=Application;System; diff --git a/wine-winemine.desktop b/wine-winemine.desktop new file mode 100644 index 0000000..7cdefdd --- /dev/null +++ b/wine-winemine.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=WineMine +Comment=Wine Minesweeper +Exec=winemine +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=Application;System; diff --git a/wine-winhelp.desktop b/wine-winhelp.desktop new file mode 100644 index 0000000..4f1ee4d --- /dev/null +++ b/wine-winhelp.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=winhelp +Comment=Windows Help Browser +Exec=winhelp +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=Application;System; diff --git a/wine.init b/wine.init new file mode 100644 index 0000000..905eeff --- /dev/null +++ b/wine.init @@ -0,0 +1,67 @@ +#!/bin/sh +# +# wine Allow users to run Windows(tm) applications by just clicking on them +# (or typing ./file.exe) +# +# chkconfig: 35 98 10 +# description: Allow users to run Windows(tm) applications by just clicking \ +# on them (or typing ./file.exe) + +. /etc/rc.d/init.d/functions +RETVAL=0 + +start() { + echo -n $"Registering binary handler for Windows applications" + /sbin/modprobe binfmt_misc &>/dev/null + echo ':windows:M::MZ::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : + echo ':windowsPE:M::PE::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : +} + +stop() { + echo -n $"Unregistering binary handler for Windows applications" + echo "-1" >/proc/sys/fs/binfmt_misc/windows || : + echo "-1" >/proc/sys/fs/binfmt_misc/windowsPE || : +} + +reload() { + stop + start +} + +wine_status() { + if [ -e /proc/sys/fs/binfmt_misc/windows ]; then + echo $"Wine binary format handlers are registered." + return 0 + else + echo $"Wine binary format handlers are not registered." + return 3 + fi +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + status) + wine_status + RETVAL=$? + ;; + restart) + stop + start + ;; + condrestart) + if [ -e /proc/sys/fs/binfmt_misc/windows ]; then + stop + start + fi + ;; + *) + echo $"Usage: $prog {start|stop|status|restart|condrestart}" + exit 1 +esac +exit $RETVAL + diff --git a/wine.spec b/wine.spec new file mode 100644 index 0000000..699ff54 --- /dev/null +++ b/wine.spec @@ -0,0 +1,1060 @@ +Name: wine +Version: 0.9.4 +Release: 3 +Summary: A Windows 16/32/64 bit emulator + +Group: Applications/Emulators +License: LGPL +URL: http://www.winehq.org/ +Source0: http://dl.sf.net/wine/wine-0.9.4.tar.bz2 +Source1: wine.init +Source2: wine-fonts-20050524.tar.gz +Source3: wine-README-Fedora +Source4: wine-32.conf +Source100: wine-notepad.desktop +Source101: wine-regedit.desktop +Source102: wine-uninstaller.desktop +Source103: wine-winecfg.desktop +Source104: wine-winefile.desktop +Source105: wine-winemine.desktop +Source106: wine-winhelp.desktop +Patch2: wine-20050524-generated.patch +Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +ExclusiveArch: %{ix86} + +BuildRequires: autoconf +BuildRequires: bison +BuildRequires: flex +BuildRequires: alsa-lib-devel +BuildRequires: arts-devel +BuildRequires: audiofile-devel +BuildRequires: esound-devel +BuildRequires: freeglut-devel +BuildRequires: lcms-devel +BuildRequires: libieee1284-devel +BuildRequires: libjpeg-devel +BuildRequires: libstdc++-devel +BuildRequires: libusb-devel +BuildRequires: libxml2-devel +BuildRequires: libxslt-devel +BuildRequires: ncurses-devel +BuildRequires: openldap-devel +BuildRequires: sane-backends-devel +BuildRequires: zlib-devel +BuildRequires: desktop-file-utils +BuildRequires: fontforge +# modular x +BuildRequires: libX11-devel +BuildRequires: mesa-libGL-devel mesa-libGLU-devel mesa-libGLw-devel +BuildRequires: libXxf86dga-devel libXxf86vm-devel +BuildRequires: libXrandr-devel libXrender-devel libXext-devel + +Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, +Requires(post): /usr/bin/update-desktop-database +Requires(preun): /sbin/chkconfig +Requires(postun): /sbin/ldconfig, /usr/bin/update-desktop-database, %{__perl} + +%description +While Wine is usually thought of as a Windows(TM) emulator, the Wine +developers would prefer that users thought of Wine as a Windows +compatibility layer for UNIX. This package includes a program loader, +which allows unmodified Windows 3.x/9x/NT binaries to run on x86 and x86_64 +Unixes. Wine does not require MS Windows, but it can use native system +.dll files if they are available. + +%package tools +Summary: Additional wine tools +Group: Applications/Emulators +Requires: %{name} = %{version}-%{release} + +%description tools +Additional wine tools + +%package arts +Summary: Arts sound support for wine +Group: System Environment/Libraries +Requires: wine = %{version}-%{release} + +%description arts +Arts sound support for wine + +%package esd +Summary: ESD sound support for wine +Group: System Environment/Libraries +Requires: wine = %{version}-%{release} + +%description esd +ESD sound support for wine + +%package jack +Summary: JACK sound support for wine +Group: System Environment/Libraries +Requires: wine = %{version}-%{release} + +%description jack +JACK sound support for wine + +%package nas +Summary: NAS sound support for wine +Group: System Environment/Libraries +Requires: wine = %{version}-%{release} + +%description nas +JACK sound support for wine + +%package ldap +Summary: LDAP support for wine +Group: System Environment/Libraries +Requires: wine = %{version}-%{release} + +%description ldap +LDAP support for wine + +%package cms +Summary: Color Managment for wine +Group: System Environment/Libraries +Requires: wine = %{version}-%{release} + +%description cms +Color Management for wine + +%package twain +Summary: Twain support for wine +Group: System Environment/Libraries +Requires: wine = %{version}-%{release} + +%description twain +Twain support for wine + +%package capi +Summary: ISDN support for wine +Group: System Environment/Libraries +Requires: wine = %{version}-%{release} + +%description capi +ISDN support for wine + +%package devel +Summary: Wine development environment +Group: System Environment/Libraries +Requires: wine = %{version}-%{release} + +%description devel +Header, include files and library definition files for developing applications +with the Wine Windows(TM) emulation libraries. + +%prep +%setup -q +%patch2 -p1 -b .generated +autoconf + +%build +export CFLAGS="$RPM_OPT_FLAGS" +%configure \ + --sysconfdir=%{_sysconfdir}/wine --disable-static + +%{__make} depend +%{__make} + +%install +rm -rf %{buildroot} + +%makeinstall \ + includedir=%{buildroot}%{_includedir}/wine \ + sysconfdir=%{buildroot}%{_sysconfdir}/wine \ + dlldir=%{buildroot}%{_libdir}/wine \ + LDCONFIG=/bin/true \ + UPDATE_DESKTOP_DATABASE=/bin/true +%makeinstall \ + -C dlls/wineps \ + includedir=%{buildroot}%{_includedir}/wine \ + sysconfdir=%{buildroot}%{_sysconfdir}/wine \ + dlldir=%{buildroot}%{_libdir}/wine \ + LDCONFIG=/bin/true \ + UPDATE_DESKTOP_DATABASE=/bin/true + +mkdir -p %{buildroot}%{_sysconfdir}/wine + +# Allow users to launch Windows programs by just clicking on the .exe file... +mkdir -p %{buildroot}%{_initrddir} +install -p -c -m 755 %SOURCE1 %{buildroot}%{_initrddir}/wine + +# Install Wine's fonts +mkdir -p %{buildroot}%{_datadir}/fonts/wine +tar xzf %SOURCE2 -C %{buildroot}%{_datadir}/fonts/wine + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category=X-Fedora \ + %{SOURCE100} + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category=X-Fedora \ + %{SOURCE101} + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category=X-Fedora \ + %{SOURCE102} + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category=X-Fedora \ + %{SOURCE103} + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category=X-Fedora \ + %{SOURCE104} + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category=X-Fedora \ + %{SOURCE105} + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category=X-Fedora \ + %{SOURCE106} + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category=X-Fedora \ + --delete-original \ + $RPM_BUILD_ROOT%{_datadir}/applications/wine.desktop + +cp %{SOURCE3} README-Fedora + +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ +install -p -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ + +%clean +rm -rf %{buildroot} + +%post +/sbin/ldconfig +/sbin/chkconfig --add wine +/sbin/chkconfig --level 2345 wine on +/sbin/service wine start &>/dev/null || : +update-desktop-database &>/dev/null || : + +%preun +if test "$1" = "0"; then + /sbin/chkconfig --del wine +fi + +%postun +/sbin/ldconfig +update-desktop-database &>/dev/null || : + +%post arts -p /sbin/ldconfig +%postun arts -p /sbin/ldconfig + +%post esd -p /sbin/ldconfig +%postun esd -p /sbin/ldconfig + +%post jack -p /sbin/ldconfig +%postun jack -p /sbin/ldconfig + +%post nas -p /sbin/ldconfig +%postun nas -p /sbin/ldconfig + +%post ldap -p /sbin/ldconfig +%postun ldap -p /sbin/ldconfig + +%post cms -p /sbin/ldconfig +%postun cms -p /sbin/ldconfig + +%post twain -p /sbin/ldconfig +%postun twain -p /sbin/ldconfig + +%post capi -p /sbin/ldconfig +%postun capi -p /sbin/ldconfig + +%files +%defattr(-,root,root,-) +%doc ANNOUNCE BUGS COPYING.LIB ChangeLog DEVELOPERS-HINTS LICENSE LICENSE.OLD +%doc AUTHORS README-Fedora README VERSION +%doc documentation/* +%{_bindir}/msiexec +%{_bindir}/regedit +%{_bindir}/regsvr32 +%{_bindir}/wine +%{_bindir}/wineboot +%{_bindir}/winebrowser +%{_bindir}/wineconsole +%{_bindir}/wineprefixcreate +%{_bindir}/wineshelllink +%{_bindir}/winecfg +%{_bindir}/uninstaller +%{_initrddir}/wine +%{_libdir}/wine/expand.exe.so +%{_libdir}/wine/msiexec.exe.so +%{_libdir}/wine/regedit.exe.so +%{_libdir}/wine/regsvr32.exe.so +%{_libdir}/wine/rpcss.exe.so +%{_libdir}/wine/rundll32.exe.so +%{_libdir}/wine/start.exe.so +%{_libdir}/wine/wineboot.exe.so +%{_libdir}/wine/winebrowser.exe.so +%{_libdir}/wine/wineconsole.exe.so +%{_libdir}/wine/winemenubuilder.exe.so +%{_libdir}/wine/winevdm.exe.so +%{_datadir}/applications/fedora-wine.desktop +%{_datadir}/applications/fedora-wine-regedit.desktop +%{_datadir}/applications/fedora-wine-uninstaller.desktop +%{_datadir}/applications/fedora-wine-winecfg.desktop +%{_mandir}/man1/wine.1.gz +%{_datadir}/wine/generic.ppd +%{_datadir}/wine/wine.inf +%{_bindir}/wine-kthread +%{_bindir}/wine-preloader +%{_bindir}/wine-pthread +%{_bindir}/winelauncher +%{_bindir}/wineserver +%{_mandir}/man1/wineserver.1* +%{_libdir}/libwine.so.1 +%{_libdir}/libwine_unicode.so.1 +%dir %{_libdir}/wine +%{_libdir}/wine/activeds.dll.so +%{_libdir}/wine/advapi32.dll.so +%{_libdir}/wine/advpack.dll.so +%{_libdir}/wine/amstream.dll.so +%{_libdir}/wine/atl.dll.so +%{_libdir}/wine/avicap32.dll.so +%{_libdir}/wine/avifil32.dll.so +%{_libdir}/wine/avifile.dll.so +%{_libdir}/wine/aviinfo.exe.so +%{_libdir}/wine/aviplay.exe.so +%{_libdir}/wine/cabinet.dll.so +%{_libdir}/wine/cards.dll.so +%{_libdir}/wine/cfgmgr32.dll.so +%{_libdir}/wine/clock.exe.so +%{_libdir}/wine/comcat.dll.so +%{_libdir}/wine/comctl32.dll.so +%{_libdir}/wine/comdlg32.dll.so +%{_libdir}/wine/comm.drv.so +%{_libdir}/wine/commdlg.dll.so +%{_libdir}/wine/compobj.dll.so +%{_libdir}/wine/crtdll.dll.so +%{_libdir}/wine/crypt32.dll.so +%{_libdir}/wine/cryptdll.dll.so +%{_libdir}/wine/ctl3d.dll.so +%{_libdir}/wine/ctl3d32.dll.so +%{_libdir}/wine/ctl3dv2.dll.so +%{_libdir}/wine/d3dim.dll.so +%{_libdir}/wine/d3drm.dll.so +%{_libdir}/wine/d3dxof.dll.so +%{_libdir}/wine/dbghelp.dll.so +%{_libdir}/wine/dciman32.dll.so +%{_libdir}/wine/ddeml.dll.so +%{_libdir}/wine/ddraw.dll.so +%{_libdir}/wine/devenum.dll.so +%{_libdir}/wine/dinput.dll.so +%{_libdir}/wine/dinput8.dll.so +%{_libdir}/wine/dispdib.dll.so +%{_libdir}/wine/display.drv.so +%{_libdir}/wine/dmband.dll.so +%{_libdir}/wine/dmcompos.dll.so +%{_libdir}/wine/dmime.dll.so +%{_libdir}/wine/dmloader.dll.so +%{_libdir}/wine/dmscript.dll.so +%{_libdir}/wine/dmstyle.dll.so +%{_libdir}/wine/dmsynth.dll.so +%{_libdir}/wine/dmusic.dll.so +%{_libdir}/wine/dmusic32.dll.so +%{_libdir}/wine/dplay.dll.so +%{_libdir}/wine/dplayx.dll.so +%{_libdir}/wine/dpnet.dll.so +%{_libdir}/wine/dpnhpast.dll.so +%{_libdir}/wine/dsound.dll.so +%{_libdir}/wine/dswave.dll.so +%{_libdir}/wine/dxdiagn.dll.so +%{_libdir}/wine/eject.exe.so +%{_libdir}/wine/gdi.exe.so +%{_libdir}/wine/gdi32.dll.so +%{_libdir}/wine/hh.exe.so +%{_libdir}/wine/hhctrl.ocx.so +%{_libdir}/wine/iccvid.dll.so +%{_libdir}/wine/icinfo.exe.so +%{_libdir}/wine/icmp.dll.so +%{_libdir}/wine/ifsmgr.vxd.so +%{_libdir}/wine/imaadp32.acm.so +%{_libdir}/wine/imagehlp.dll.so +%{_libdir}/wine/imm.dll.so +%{_libdir}/wine/imm32.dll.so +%{_libdir}/wine/iphlpapi.dll.so +%{_libdir}/wine/itss.dll.so +%{_libdir}/wine/joystick.drv.so +%{_libdir}/wine/kernel32.dll.so +%{_libdir}/wine/keyboard.drv.so +%{_libdir}/wine/krnl386.exe.so +%{_libdir}/wine/lz32.dll.so +%{_libdir}/wine/lzexpand.dll.so +%{_libdir}/wine/mapi32.dll.so +%{_libdir}/wine/mciavi32.dll.so +%{_libdir}/wine/mcicda.dll.so +%{_libdir}/wine/mciseq.dll.so +%{_libdir}/wine/mciwave.drv.so +%{_libdir}/wine/midimap.dll.so +%{_libdir}/wine/mlang.dll.so +%{_libdir}/wine/mmdevldr.vxd.so +%{_libdir}/wine/mmsystem.dll.so +%{_libdir}/wine/monodebg.vxd.so +%{_libdir}/wine/mouse.drv.so +%{_libdir}/wine/mpr.dll.so +%{_libdir}/wine/msacm.dll.so +%{_libdir}/wine/msacm.drv.so +%{_libdir}/wine/msacm32.dll.so +%{_libdir}/wine/msadp32.acm.so +%{_libdir}/wine/msdmo.dll.so +%{_libdir}/wine/msg711.acm.so +%{_libdir}/wine/mshtml.dll.so +%{_libdir}/wine/msi.dll.so +%{_libdir}/wine/msimg32.dll.so +%{_libdir}/wine/msisys.ocx.so +%{_libdir}/wine/msnet32.dll.so +%{_libdir}/wine/msrle32.dll.so +%{_libdir}/wine/msvcrt.dll.so +%{_libdir}/wine/msvcrt20.dll.so +%{_libdir}/wine/msvcrt40.dll.so +%{_libdir}/wine/msvcrtd.dll.so +%{_libdir}/wine/msvfw32.dll.so +%{_libdir}/wine/msvidc32.dll.so +%{_libdir}/wine/msvideo.dll.so +%{_libdir}/wine/mswsock.dll.so +%{_libdir}/wine/msxml3.dll.so +%{_libdir}/wine/netapi32.dll.so +%{_libdir}/wine/newdev.dll.so +%{_libdir}/wine/ntdll.dll.so +%{_libdir}/wine/objsel.dll.so +%{_libdir}/wine/odbc32.dll.so +%{_libdir}/wine/odbccp32.dll.so +%{_libdir}/wine/ole2.dll.so +%{_libdir}/wine/ole2conv.dll.so +%{_libdir}/wine/ole2disp.dll.so +%{_libdir}/wine/ole2nls.dll.so +%{_libdir}/wine/ole2prox.dll.so +%{_libdir}/wine/ole2thk.dll.so +%{_libdir}/wine/ole32.dll.so +%{_libdir}/wine/oleacc.dll.so +%{_libdir}/wine/oleaut32.dll.so +%{_libdir}/wine/olecli.dll.so +%{_libdir}/wine/olecli32.dll.so +%{_libdir}/wine/oledlg.dll.so +%{_libdir}/wine/olepro32.dll.so +%{_libdir}/wine/olesvr.dll.so +%{_libdir}/wine/olesvr32.dll.so +%{_libdir}/wine/powrprof.dll.so +%{_libdir}/wine/psapi.dll.so +%{_libdir}/wine/qcap.dll.so +%{_libdir}/wine/quartz.dll.so +%{_libdir}/wine/rasapi16.dll.so +%{_libdir}/wine/rasapi32.dll.so +%{_libdir}/wine/riched20.dll.so +%{_libdir}/wine/riched32.dll.so +%{_libdir}/wine/rpcrt4.dll.so +%{_libdir}/wine/rsabase.dll.so +%{_libdir}/wine/rsaenh.dll.so +%{_libdir}/wine/secur32.dll.so +%{_libdir}/wine/sensapi.dll.so +%{_libdir}/wine/serialui.dll.so +%{_libdir}/wine/setupapi.dll.so +%{_libdir}/wine/setupx.dll.so +%{_libdir}/wine/shdocvw.dll.so +%{_libdir}/wine/shell.dll.so +%{_libdir}/wine/shell32.dll.so +%{_libdir}/wine/shfolder.dll.so +%{_libdir}/wine/shlwapi.dll.so +%{_libdir}/wine/snmpapi.dll.so +%{_libdir}/wine/sound.drv.so +%{_libdir}/wine/stdole2.tlb.so +%{_libdir}/wine/stdole32.tlb.so +%{_libdir}/wine/sti.dll.so +%{_libdir}/wine/storage.dll.so +%{_libdir}/wine/stress.dll.so +%{_libdir}/wine/system.drv.so +%{_libdir}/wine/tapi32.dll.so +%{_libdir}/wine/toolhelp.dll.so +%{_libdir}/wine/typelib.dll.so +%{_libdir}/wine/unicows.dll.so +%{_libdir}/wine/url.dll.so +%{_libdir}/wine/urlmon.dll.so +%{_libdir}/wine/user.exe.so +%{_libdir}/wine/user32.dll.so +%{_libdir}/wine/usp10.dll.so +%{_libdir}/wine/uxtheme.dll.so +%{_libdir}/wine/vdhcp.vxd.so +%{_libdir}/wine/vdmdbg.dll.so +%{_libdir}/wine/ver.dll.so +%{_libdir}/wine/version.dll.so +%{_libdir}/wine/vmm.vxd.so +%{_libdir}/wine/vnbt.vxd.so +%{_libdir}/wine/vnetbios.vxd.so +%{_libdir}/wine/vtdapi.vxd.so +%{_libdir}/wine/vwin32.vxd.so +%{_libdir}/wine/w32skrnl.dll.so +%{_libdir}/wine/w32sys.dll.so +%{_libdir}/wine/win32s16.dll.so +%{_libdir}/wine/win87em.dll.so +%{_libdir}/wine/winaspi.dll.so +%{_libdir}/wine/windebug.dll.so +%{_libdir}/wine/wineaudioio.drv.so +%{_libdir}/wine/winedos.dll.so +%{_libdir}/wine/winemp3.acm.so +%{_libdir}/wine/wineoss.drv.so +#%{_libdir}/wine/winetty.drv.so +%{_libdir}/wine/winex11.drv.so +%{_libdir}/wine/wing.dll.so +%{_libdir}/wine/wininet.dll.so +%{_libdir}/wine/winmm.dll.so +%{_libdir}/wine/winnls.dll.so +%{_libdir}/wine/winnls32.dll.so +%{_libdir}/wine/winsock.dll.so +%{_libdir}/wine/winspool.drv.so +%{_libdir}/wine/wintab.dll.so +%{_libdir}/wine/wintab32.dll.so +%{_libdir}/wine/wintrust.dll.so +%{_libdir}/wine/wnaspi32.dll.so +%{_libdir}/wine/wow32.dll.so +%{_libdir}/wine/wprocs.dll.so +%{_libdir}/wine/ws2_32.dll.so +%{_libdir}/wine/wsock32.dll.so +%{_libdir}/wine/wtsapi32.dll.so +%dir %{_datadir}/fonts/wine +%{_datadir}/fonts/wine/wine_coure.fon +%{_datadir}/fonts/wine/wine_couree.fon +%{_datadir}/fonts/wine/wine_courer.fon +%{_datadir}/fonts/wine/wine_marlett.ttf +%{_datadir}/fonts/wine/wine_sserife.fon +%{_datadir}/fonts/wine/wine_sserifee.fon +%{_datadir}/fonts/wine/wine_sserifer.fon +%{_datadir}/fonts/wine/wine_vgasys.fon +%{_datadir}/fonts/wine/wine_vgasyse.fon +%{_datadir}/fonts/wine/wine_vgasysr.fon +%{_datadir}/fonts/wine/coue1255.fon +%{_datadir}/fonts/wine/coue1256.fon +%{_datadir}/fonts/wine/coue1257.fon +%{_datadir}/fonts/wine/coure.fon +%{_datadir}/fonts/wine/couree.fon +%{_datadir}/fonts/wine/coureg.fon +%{_datadir}/fonts/wine/courer.fon +%{_datadir}/fonts/wine/couret.fon +%{_datadir}/fonts/wine/cvgasys.fon +%{_datadir}/fonts/wine/hvgasys.fon +%{_datadir}/fonts/wine/jvgasys.fon +%{_datadir}/fonts/wine/marlett.ttf +%{_datadir}/fonts/wine/ssee1255.fon +%{_datadir}/fonts/wine/ssee1256.fon +%{_datadir}/fonts/wine/ssee1257.fon +%{_datadir}/fonts/wine/ssee874.fon +%{_datadir}/fonts/wine/sserife.fon +%{_datadir}/fonts/wine/sserifee.fon +%{_datadir}/fonts/wine/sserifeg.fon +%{_datadir}/fonts/wine/sserifer.fon +%{_datadir}/fonts/wine/sserifet.fon +%{_datadir}/fonts/wine/svgasys.fon +%{_datadir}/fonts/wine/vgas1255.fon +%{_datadir}/fonts/wine/vgas1256.fon +%{_datadir}/fonts/wine/vgas1257.fon +%{_datadir}/fonts/wine/vgas874.fon +%{_datadir}/fonts/wine/vgasys.fon +%{_datadir}/fonts/wine/vgasyse.fon +%{_datadir}/fonts/wine/vgasysg.fon +%{_datadir}/fonts/wine/vgasysr.fon +%{_datadir}/fonts/wine/vgasyst.fon +%{_libdir}/wine/winealsa.drv.so +%{_libdir}/wine/wineps.drv.so +%{_libdir}/wine/wineps16.drv.so +%{_libdir}/wine/d3d8.dll.so +%{_libdir}/wine/d3d9.dll.so +%{_libdir}/wine/d3dx8.dll.so +%{_libdir}/wine/glu32.dll.so +%{_libdir}/wine/glut32.dll.so +%{_libdir}/wine/opengl32.dll.so +%{_libdir}/wine/wined3d.dll.so +%{_sysconfdir}/ld.so.conf.d/wine-32.conf + +%files tools +%defattr(-,root,root,-) +%{_bindir}/notepad +%{_bindir}/progman +%{_bindir}/wcmd +%{_bindir}/winedbg +%{_bindir}/winedump +%{_bindir}/winefile +%{_bindir}/winemaker +%{_bindir}/winemine +%{_bindir}/winepath +%{_bindir}/winhelp +%{_libdir}/wine/explorer.exe.so +%{_libdir}/wine/control.exe.so +%{_libdir}/wine/notepad.exe.so +%{_libdir}/wine/progman.exe.so +%{_libdir}/wine/taskmgr.exe.so +%{_libdir}/wine/uninstaller.exe.so +%{_libdir}/wine/wcmd.exe.so +%{_libdir}/wine/winecfg.exe.so +%{_libdir}/wine/winedbg.exe.so +%{_libdir}/wine/winefile.exe.so +%{_libdir}/wine/winemine.exe.so +%{_libdir}/wine/winepath.exe.so +%{_libdir}/wine/winhelp.exe.so +%{_libdir}/wine/winver.exe.so +%{_libdir}/wine/winetest.exe.so +%{_datadir}/applications/fedora-wine-notepad.desktop +%{_datadir}/applications/fedora-wine-winefile.desktop +%{_datadir}/applications/fedora-wine-winemine.desktop +%{_datadir}/applications/fedora-wine-winhelp.desktop + +%files arts +%defattr(-,root,root,-) +%{_libdir}/wine/winearts.drv.so + +%files esd +%defattr(-,root,root,-) +%{_libdir}/wine/wineesd.drv.so + +%files jack +%defattr(-,root,root,-) +%{_libdir}/wine/winejack.drv.so + +%files nas +%defattr(-,root,root,-) +%{_libdir}/wine/winenas.drv.so + +%files ldap +%defattr(-,root,root,-) +%{_libdir}/wine/wldap32.dll.so + +%files cms +%defattr(-,root,root,-) +%{_libdir}/wine/mscms.dll.so + +%files twain +%defattr(-,root,root,-) +%{_libdir}/wine/twain.dll.so +%{_libdir}/wine/twain_32.dll.so + +%files capi +%defattr(-,root,root,-) +%{_libdir}/wine/capi2032.dll.so + +%files devel +%defattr(-,root,root,-) +%{_bindir}/function_grep.pl +%{_bindir}/widl +%{_bindir}/winebuild +%{_bindir}/winecpp +%{_bindir}/winedump +%{_bindir}/wineg++ +%{_bindir}/winegcc +%{_bindir}/winemaker +%{_bindir}/wmc +%{_bindir}/wrc +%{_libdir}/*.so +%{_mandir}/man1/widl.1* +%{_mandir}/man1/winebuild.1* +%{_mandir}/man1/winedump.1* +%{_mandir}/man1/winegcc.1* +%{_mandir}/man1/winemaker.1* +%{_mandir}/man1/wmc.1* +%{_mandir}/man1/wrc.1* +%{_mandir}/man1/winedbg.1* +%{_mandir}/man1/wineg++.1* +%{_datadir}/aclocal/wine.m4 +%attr(0755, root, root) %dir %{_includedir}/wine +%{_includedir}/wine/* +%{_libdir}/wine/*.a +%{_libdir}/wine/*.def + +%changelog +* Sun Jan 01 2006 Andreas Bierfert +0.9.4-3 +- use ExclusiveArch instead of ExcludeArch + +* Sun Jan 01 2006 Andreas Bierfert +0.9.4-2 +- own font directory +- fix devel summary +- add ExcludeArch x86_64 for now + +* Sat Dec 31 2005 Andreas Bierfert +0.9.4-1 +- version upgrade +- changed wine.init perissions to 0644 +- added autoconf BR + +* Mon Dec 12 2005 Andreas Bierfert +0.9.3-1 +- version upgrade + +* Thu Nov 24 2005 Andreas Bierfert +0.9.2-1 +- version upgrade + +* Thu Nov 17 2005 Andreas Bierfert +0.9.1-2 +- add fontforge BR and include generated fonts... + +* Sat Nov 12 2005 Andreas Bierfert +0.9.1-1 +- version upgrade +- move uninstaller and winecfg into wine main package... +- drop wine suite + +* Sat Oct 29 2005 Andreas Bierfert +0.9-3 +- s/libwine/wine/ + +* Thu Oct 27 2005 Andreas Bierfert +0.9-2 +- remerge some subpackages which should be defaults + +* Tue Oct 25 2005 Andreas Bierfert +0.9-1 +- upgrade to new version +- start splitting + +* Mon Oct 24 2005 Andreas Bierfert +0.0-1.20050930 +- add fedora readme +- switch to new (old) versioning sheme + +* Sat Oct 22 2005 Andreas Bierfert +20050930-3 +- add desktop files +- revisit summary and description +- consistant use of %{buildroot} + +* Sat Oct 22 2005 Andreas Bierfert +20050930-2 +- some more spec tuneups... + +* Sat Oct 01 2005 Andreas Bierfert +20050930-1 +- version upgrade + +* Sun Sep 25 2005 Andreas Bierfert +20050925-1 +- upgrade to current cvs + +* Mon Sep 19 2005 Andreas Bierfert +20050830-1 +- version upgrade + +* Mon Sep 19 2005 Andreas Bierfert +20050524-2 +- fedorarized version + +* Mon May 30 2005 Vincent Bron 20050524-1fc3 +- Update to 20050524 +- Remove pdf documentation build as it's no more included in the main archive +- Workaround for generic.ppd installation + +* Tue Apr 19 2005 Vincent Bron 20050419-1fc3 +- Update to 20050419 + +* Thu Mar 10 2005 Vincent Bron 20050310-1fc3 +- Update to 20050310 + +* Sat Feb 12 2005 Vincent Bron 20050211-1fc3 +- Update to 20050211 + +* Tue Jan 11 2005 Vincent Bron 20050111-1fc3 +- Update to 20050111 + +* Wed Dec 1 2004 Vincent Bron 20041201-1fc3 +- Recompile for FC3 +- Update to 20041201 +- Small reorganization: + - use the generic ICU static libs name; + - no more wine group; + - use Wine's generated stdole32.tlb file; + - use Wine's generated fonts. + +* Wed Oct 20 2004 Vincent Bron 20041019-1fc2 +- Update to 20041019 + +* Wed Sep 15 2004 Vincent Bron 20040914-1fc2 +- Update to 20040914 + +* Sat Aug 14 2004 Vincent Bron 20040813-1fc2 +- Update to 20040813 + +* Sat Jul 17 2004 Vincent Bron 20040716-1fc2 +- Update to 20040716 + +* Fri Jun 25 2004 Vincent Bron 20040615-1fc2 +- Recompile for FC2 +- Backport from current CVS some fixes to the preloader to prevent + a segfault on startup +- Include a currently uncommitted patch from Alexandre Julliard regarding + further issues with the preloader + +* Sun Jun 20 2004 Vincent Bron 20040615-1fc1 +- Update to 20040615 +- Use of wineprefixcreate instead of old RedHat patches + +* Wed May 5 2004 Vincent Bron 20040505-1fc1 +- Update to 20040505 + +* Fri Apr 9 2004 Vincent Bron 20040408-1fc1 +- Update to 20040408 +- Change the handling of paths to DOS drives in the installation process + +* Wed Mar 17 2004 Vincent Bron 20040309-1fc1 +- Update to 20040309 +- Replaced winedefault.reg by wine.inf + +* Wed Feb 18 2004 Vincent Bron 20040213-1fc1 +- Update to 20040213 +- Moved Wine dlls back to %{_libdir}/wine rather than %{_libdir}/wine/wine + +* Sun Jan 25 2004 Vincent Bron 20040121-fc1 +- Update to 20040121 + +* Sat Dec 13 2003 Vincent Bron 20031212-fc1 +- Update to 20031212 + +* Wed Nov 18 2003 Vincent Bron 20031118-fc1 +- Update to 20031118 + +* Thu Oct 16 2003 Vincent Bron 20031016-1rh9 +- Update to 20031016 + +* Tue Sep 11 2003 Vincent Bron 20030911-1rh9 +- Fix of include location +- Better separation of run-time and development files +- Update to 20030911 + +* Wed Aug 13 2003 Vincent Bron 20030813-1rh9 +- Update to 20030813 + +* Wed Jul 09 2003 Vincent Bron 20030709-1rh9 +- Update to 20030709 + +* Wed Jun 18 2003 Vincent Bron 20030618-1rh9 +- Change the default C drive to ~/.wine/c, copied from /usr/share/wine + if non-existant (Thanks to Rudolf Kastl) +- Updated to 20030618 + +* Tue May 20 2003 Vincent Bron 20030508-1rh9 +- Adapted for RH9 + +* Thu May 08 2003 Vincent Bron 20030508-1 +- Add libraries definition files to devel package +- Update to 20030508 + +* Tue Apr 08 2003 Vincent Bron 20030408-1 +- Update to 20030408 + +* Tue Mar 18 2003 Vincent Bron 20030318-1 +- Update to 20030318 + +* Thu Mar 11 2003 Vincent Bron 20030219-2 +- Fix the symlinks in wine-c. + +* Wed Feb 19 2003 Vincent Bron 20030219-1 +- Update to 20030129 +- Various fixes in RPM build process + +* Fri Jan 17 2003 Vincent Bron 20030115-1 +- Update to 20030115 +- fix to build problem + +* Thu Nov 7 2002 Vincent Bron 20021031-1 +- Update to 20021031 +- Tweaks here and there + +* Wed Sep 4 2002 Bill Nottingham 20020605-2 +- fix docs (#72923) + +* Wed Jul 10 2002 Karsten Hopp 20020605-1 +- update +- remove obsolete part of redhat patch +- redo destdir patch +- redo kde patch +- redo defaultversion patch +- fix 'my_perl unknown' error +- work around name conflict with textutils 'expand' + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Wed Mar 27 2002 Bernhard Rosenkraenzer 20020327-1 +- Fix wineshelllink (#61761) +- Fix up initscript (#53625) +- Clean up spec file +- Default to emulating Windoze ME rather than 3.1, nobody uses 3.1 + applications anymore +- Auto-generate default config if none exists (#61920) + +* Mon Mar 04 2002 Bernhard Rosenkraenzer 20020304-1 +- Assign gid 66 (closest to 666 [Microsoft number] we can get for a + system account ;) ) +- Don't use glibc private functions (__libc_fork) +- Update + +* Tue Feb 26 2002 Bernhard Rosenkraenzer 20020226-1 +- Fix bug #60250 +- Update + +* Thu Feb 21 2002 Bernhard Rosenkraenzer 20020221-1 +- Update +- Don't try to launch winesetup in winelauncher, we aren't shipping it + (#59621) + +* Sun Jan 27 2002 Bernhard Rosenkraenzer 20020127-1 +- Update +- Fix build in current environment + +* Wed Aug 22 2001 Bernhard Rosenkraenzer 20010822-1 +- Make sure the package can be cleanly uninstalled (#52007) +- Add build dependencies + +* Thu Jul 26 2001 Bernhard Rosenkraenzer 20010726-1 +- Fix -devel package group (#49989) +- remove internal CVS files +- chkconfig deletion should be in %preun, not %postun +- rename initscript ("Starting windows:" at startup does look off) + +* Thu May 03 2001 Bernhard Rosenkraenzer 20010503-1 +- Update +- generate HTML documentation rather than shipping plain docbook text + (#38453) + +* Sat Apr 14 2001 Bernhard Rosenkraenzer +- Update +- Update registry to mount "/" as drive "Z:", fixes winedbg (needs to be + accessible from 'doze drives) +- Don't create KDE 1.x style desktop entries in wineshelllink +- Be more tolerant on failing stuff in %%post + +* Thu Mar 1 2001 Bernhard Rosenkraenzer +- Update + +* Thu Feb 15 2001 Tim Powers +- fixed time.h build problems + +* Wed Jan 31 2001 Bernhard Rosenkraenzer +- Add a patch to handle .exe and .com file permissions the way we want them + +* Thu Jan 18 2001 Bernhard Rosenkraenzer +- Update +- Restore wine's ability to use a global config file, it was removed + in CVS for whatever reason +- Move libraries to %{_libdir}/wine to prevent conflicts with libuser + (Bug #24202) +- Move include files to /usr/include/wine to prevent it from messing with + some autoconf scripts (some broken scripts assume they're running on windoze + if /usr/include/windows.h exists...) + +* Tue Dec 19 2000 Bernhard Rosenkraenzer +- Fix %%pre and %%postun scripts +- --enable-opengl, glibc 2.2 should be safe +- Update CVS + +* Mon Nov 20 2000 Bernhard Rosenkraenzer +- Update CVS +- Add a new (user) group wine that can write to the "C: drive" + %{_datadir}/wine-c +- Fix up winedbg installation (registry entries) +- Add "Program Files/Common Files" subdirectory to the "C: drive", it's + referenced in the registry + +* Wed Oct 11 2000 Bernhard Rosenkraenzer +- update + +* Mon Aug 7 2000 Tim Powers +- rebuilt with new DGA + +* Tue Jul 25 2000 Bernhard Rosenkraenzer +- new snapshot +- fix compilation with gcc 2.96 + +* Fri Jul 21 2000 Bernhard Rosenkraenzer +- Move init script back +- new version +- move man pages to FHS locations + +* Thu Jul 13 2000 Bernhard Rosenkraenzer +- move initscript +- new snapshot + +* Fri Jun 23 2000 Bernhard Rosenkraenzer +- Start the initscript on startup + +* Mon May 9 2000 Bernhard Rosenkraenzer +- New version +- new feature: You can now launch wine by just running a windows .exe file + (./some.exe or just click on it in kfm, gmc and the likes) +- some spec file modifications + +* Sun Feb 13 2000 Bernhard Rosenkraenzer +- newer version +- Improve the system.ini file - all multimedia stuff should work now. + +* Wed Feb 2 2000 Bernhard Rosenkraenzer +- enable and fix up the urlmon/wininet patch +- add: autoexec.bat, config.sys, windows/win.ini windows/system.ini + windows/Profiles/Administrator +- allow i[456]86 arches +- add some system.ini configuration + +* Wed Feb 2 2000 Bernhard Rosenkraenzer +- update current +- add urlmon and wininet patches from Corel (don't apply them for now though) +- create empty shell*dll and winsock*dll files (as mentioned in the HOWTO) + +* Mon Jan 17 2000 Bernhard Rosenkraenzer +- update to current (lots of important fixes) +- Fix up the default wine.conf file (We really don't want it to look + for CD-ROMs in /cdrom!) +- create a "root filesystem" with everything required to run wine without + windows in %{_datadir}/wine-c (drive c:) +- add RedHat file in /usr/doc/wine-%{version} explaining the new directory + layout +- wine-devel requires wine + +* Tue Dec 14 1999 Preston Brown +- updated source for Powertools 6.2 +- better files list + +* Fri Jul 23 1999 Tim Powers +- updated source +- built for 6.1 + +* Tue Apr 13 1999 Michael Maher +- built package for 6.0 +- updated package and spec file + +* Mon Oct 26 1998 Preston Brown +- updated to 10/25/98 version. There is really no point in keeping the +- older one, it is full of bugs and the newer one has fewer. +- commented out building of texinfo manual, it is horrendously broken. + +* Mon Oct 12 1998 Michael Maher +- built package for 5.2 +- pressured by QA, not updating. + +* Fri May 22 1998 Cristian Gafton +- repackaged for PowerTools From 0941e12661107809203df0d2dcee99b0b5cc27e4 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 2 Jan 2006 09:09:15 +0000 Subject: [PATCH 008/161] - add dist --- wine.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index 699ff54..be5aa2e 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 0.9.4 -Release: 3 +Release: 4%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -679,6 +679,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Jan 02 2006 Andreas Bierfert +0.9.4-4 +- add dist + * Sun Jan 01 2006 Andreas Bierfert 0.9.4-3 - use ExclusiveArch instead of ExcludeArch From 3ae8032b7bfdb64a3b1a81ecec23de0c5014fc42 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 4 Jan 2006 00:53:06 +0000 Subject: [PATCH 009/161] - fix #176834 --- wine.spec | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/wine.spec b/wine.spec index be5aa2e..6a6dbc9 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 0.9.4 -Release: 4%{?dist} +Release: 5%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -310,6 +310,8 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wineconsole.exe.so %{_libdir}/wine/winemenubuilder.exe.so %{_libdir}/wine/winevdm.exe.so +%{_libdir}/wine/winecfg.exe.so +%{_libdir}/wine/uninstaller.exe.so %{_datadir}/applications/fedora-wine.desktop %{_datadir}/applications/fedora-wine-regedit.desktop %{_datadir}/applications/fedora-wine-uninstaller.desktop @@ -602,9 +604,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/notepad.exe.so %{_libdir}/wine/progman.exe.so %{_libdir}/wine/taskmgr.exe.so -%{_libdir}/wine/uninstaller.exe.so %{_libdir}/wine/wcmd.exe.so -%{_libdir}/wine/winecfg.exe.so %{_libdir}/wine/winedbg.exe.so %{_libdir}/wine/winefile.exe.so %{_libdir}/wine/winemine.exe.so @@ -679,6 +679,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Wed Jan 04 2006 Andreas Bierfert +0.9.4-5 +- fix #176834 + * Mon Jan 02 2006 Andreas Bierfert 0.9.4-4 - add dist From b463513c1217c59456a028fac8d2c52c769d8202 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 6 Jan 2006 11:01:06 +0000 Subject: [PATCH 010/161] - upgrade - bugfix #177089 --- .cvsignore | 2 ++ sources | 2 +- wine-winemine.desktop | 2 +- wine.spec | 16 ++++++++++++---- 4 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 .cvsignore diff --git a/.cvsignore b/.cvsignore new file mode 100644 index 0000000..dcb22c1 --- /dev/null +++ b/.cvsignore @@ -0,0 +1,2 @@ +wine-0.9.5.tar.bz2 +wine-fonts-20050524.tar.gz diff --git a/sources b/sources index b5e92a1..dbde573 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -73205d83a5612a43441a8532683c0434 wine-0.9.4.tar.bz2 +b0c8e65efd541eb690ae05fdf05fcd4d wine-0.9.5.tar.bz2 fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz diff --git a/wine-winemine.desktop b/wine-winemine.desktop index 7cdefdd..fe0963c 100644 --- a/wine-winemine.desktop +++ b/wine-winemine.desktop @@ -5,4 +5,4 @@ Exec=winemine Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;System; +Categories=Application;Game; diff --git a/wine.spec b/wine.spec index 6a6dbc9..a1cda8a 100644 --- a/wine.spec +++ b/wine.spec @@ -1,12 +1,14 @@ +%define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables + Name: wine -Version: 0.9.4 -Release: 5%{?dist} +Version: 0.9.5 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ -Source0: http://dl.sf.net/wine/wine-0.9.4.tar.bz2 +Source0: http://dl.sf.net/wine/wine-0.9.5.tar.bz2 Source1: wine.init Source2: wine-fonts-20050524.tar.gz Source3: wine-README-Fedora @@ -53,7 +55,7 @@ BuildRequires: libXrandr-devel libXrender-devel libXext-devel Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, Requires(post): /usr/bin/update-desktop-database Requires(preun): /sbin/chkconfig -Requires(postun): /sbin/ldconfig, /usr/bin/update-desktop-database, %{__perl} +Requires(postun): /sbin/ldconfig, /usr/bin/update-desktop-database %description While Wine is usually thought of as a Windows(TM) emulator, the Wine @@ -679,6 +681,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Jan 06 2006 Andreas Bierfert +0.9.5-1 +- version upgrade +- fix #177089 (winemine desktop entry should be in Game not in System) +- fix cflags for compile + * Wed Jan 04 2006 Andreas Bierfert 0.9.4-5 - fix #176834 From 1dd977b8a07686babb583c0bf129d788907f8fb3 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 6 Jan 2006 12:58:02 +0000 Subject: [PATCH 011/161] - test new BR --- wine.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index a1cda8a..8855111 100644 --- a/wine.spec +++ b/wine.spec @@ -52,6 +52,10 @@ BuildRequires: mesa-libGL-devel mesa-libGLU-devel mesa-libGLw-devel BuildRequires: libXxf86dga-devel libXxf86vm-devel BuildRequires: libXrandr-devel libXrender-devel libXext-devel +BuildRequires: fontconfig-devel +BuildRequires: giflib-devel +BuildRequires: cups-devel + Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, Requires(post): /usr/bin/update-desktop-database Requires(preun): /sbin/chkconfig @@ -154,7 +158,8 @@ autoconf %build export CFLAGS="$RPM_OPT_FLAGS" %configure \ - --sysconfdir=%{_sysconfdir}/wine --disable-static + --sysconfdir=%{_sysconfdir}/wine --disable-static \ + --x-includes=%{_includedir} --x-libraries=%{_libdir} %{__make} depend %{__make} @@ -686,6 +691,7 @@ update-desktop-database &>/dev/null || : - version upgrade - fix #177089 (winemine desktop entry should be in Game not in System) - fix cflags for compile +- test new BR * Wed Jan 04 2006 Andreas Bierfert 0.9.4-5 From c6aa391e2d7503bf1f238c9042cbadb5fef8b6b0 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 7 Jan 2006 23:15:33 +0000 Subject: [PATCH 012/161] - more new BR --- wine.spec | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index 8855111..f25658e 100644 --- a/wine.spec +++ b/wine.spec @@ -48,13 +48,15 @@ BuildRequires: desktop-file-utils BuildRequires: fontforge # modular x BuildRequires: libX11-devel -BuildRequires: mesa-libGL-devel mesa-libGLU-devel mesa-libGLw-devel +BuildRequires: mesa-libGL-devel mesa-libGLU-devel BuildRequires: libXxf86dga-devel libXxf86vm-devel BuildRequires: libXrandr-devel libXrender-devel libXext-devel BuildRequires: fontconfig-devel BuildRequires: giflib-devel BuildRequires: cups-devel +BuildRequires: libXmu-devel +BuildRequires: libXi-devel Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, Requires(post): /usr/bin/update-desktop-database From 1379e971e4ff8982d1f5184f54a02da9e9d7e65a Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 8 Jan 2006 09:07:13 +0000 Subject: [PATCH 013/161] - fix CVE-2005-4560 --- wine-CVE-2005-4560.patch | 20 ++++++++++++++++++++ wine.spec | 11 ++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 wine-CVE-2005-4560.patch diff --git a/wine-CVE-2005-4560.patch b/wine-CVE-2005-4560.patch new file mode 100644 index 0000000..29864a4 --- /dev/null +++ b/wine-CVE-2005-4560.patch @@ -0,0 +1,20 @@ +=================================================================== +RCS file: /home/wine/wine/dlls/gdi/metafile.c,v +retrieving revision 1.11 +retrieving revision 1.12 +diff -u -p -r1.11 -r1.12 +--- wine/dlls/gdi/metafile.c 2006/01/03 12:43:52 1.11 ++++ wine/dlls/gdi/metafile.c 2006/01/06 20:52:46 1.12 +@@ -863,6 +863,13 @@ BOOL WINAPI PlayMetaFileRecord( HDC hdc, + break; + + case META_ESCAPE: ++ switch (mr->rdParm[0]) { ++ case GETSCALINGFACTOR: /* get function ... would just NULL dereference */ ++ return FALSE; ++ case SETABORTPROC: ++ FIXME("Filtering Escape(SETABORTPROC), possible virus?\n"); ++ return FALSE; ++ } + Escape(hdc, mr->rdParm[0], mr->rdParm[1], (LPCSTR)&mr->rdParm[2], NULL); + break; diff --git a/wine.spec b/wine.spec index f25658e..3dae6c6 100644 --- a/wine.spec +++ b/wine.spec @@ -2,7 +2,7 @@ Name: wine Version: 0.9.5 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -21,6 +21,10 @@ Source104: wine-winefile.desktop Source105: wine-winemine.desktop Source106: wine-winhelp.desktop Patch2: wine-20050524-generated.patch +# CVS-2005-4560 wmf exploit from wine cvs +# http://cvs.winehq.org/cvsweb/wine/dlls/gdi/metafile.c.diff?r1=text&tr1=1.11&r2=text&tr2=1.12 +Patch100: wine-CVE-2005-4560.patch + Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) ExclusiveArch: %{ix86} @@ -155,6 +159,7 @@ with the Wine Windows(TM) emulation libraries. %prep %setup -q %patch2 -p1 -b .generated +%patch100 -p1 autoconf %build @@ -688,6 +693,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Jan 08 2006 Andreas Bierfert +0.9.5-2 +- fix for CVE-2005-4560 + * Fri Jan 06 2006 Andreas Bierfert 0.9.5-1 - version upgrade From 495e5be9fa1963707ec2a018471db2c76979cbb6 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 19 Jan 2006 23:33:33 +0000 Subject: [PATCH 014/161] - version upgrade --- .cvsignore | 3 +-- sources | 3 +-- wine-CVE-2005-4560.patch | 20 -------------------- wine.spec | 17 +++++++++-------- 4 files changed, 11 insertions(+), 32 deletions(-) delete mode 100644 wine-CVE-2005-4560.patch diff --git a/.cvsignore b/.cvsignore index dcb22c1..8e2e2a2 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1 @@ -wine-0.9.5.tar.bz2 -wine-fonts-20050524.tar.gz +wine-0.9.6.tar.bz2 diff --git a/sources b/sources index dbde573..a0d6322 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -b0c8e65efd541eb690ae05fdf05fcd4d wine-0.9.5.tar.bz2 -fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz +1e3bfac123009300646a0b8a7fcfd81d wine-0.9.6.tar.bz2 diff --git a/wine-CVE-2005-4560.patch b/wine-CVE-2005-4560.patch deleted file mode 100644 index 29864a4..0000000 --- a/wine-CVE-2005-4560.patch +++ /dev/null @@ -1,20 +0,0 @@ -=================================================================== -RCS file: /home/wine/wine/dlls/gdi/metafile.c,v -retrieving revision 1.11 -retrieving revision 1.12 -diff -u -p -r1.11 -r1.12 ---- wine/dlls/gdi/metafile.c 2006/01/03 12:43:52 1.11 -+++ wine/dlls/gdi/metafile.c 2006/01/06 20:52:46 1.12 -@@ -863,6 +863,13 @@ BOOL WINAPI PlayMetaFileRecord( HDC hdc, - break; - - case META_ESCAPE: -+ switch (mr->rdParm[0]) { -+ case GETSCALINGFACTOR: /* get function ... would just NULL dereference */ -+ return FALSE; -+ case SETABORTPROC: -+ FIXME("Filtering Escape(SETABORTPROC), possible virus?\n"); -+ return FALSE; -+ } - Escape(hdc, mr->rdParm[0], mr->rdParm[1], (LPCSTR)&mr->rdParm[2], NULL); - break; diff --git a/wine.spec b/wine.spec index 3dae6c6..5c9c69a 100644 --- a/wine.spec +++ b/wine.spec @@ -1,14 +1,14 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.5 -Release: 2%{?dist} +Version: 0.9.6 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ -Source0: http://dl.sf.net/wine/wine-0.9.5.tar.bz2 +Source0: http://dl.sf.net/wine/wine-0.9.6.tar.bz2 Source1: wine.init Source2: wine-fonts-20050524.tar.gz Source3: wine-README-Fedora @@ -21,9 +21,6 @@ Source104: wine-winefile.desktop Source105: wine-winemine.desktop Source106: wine-winhelp.desktop Patch2: wine-20050524-generated.patch -# CVS-2005-4560 wmf exploit from wine cvs -# http://cvs.winehq.org/cvsweb/wine/dlls/gdi/metafile.c.diff?r1=text&tr1=1.11&r2=text&tr2=1.12 -Patch100: wine-CVE-2005-4560.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -159,7 +156,6 @@ with the Wine Windows(TM) emulation libraries. %prep %setup -q %patch2 -p1 -b .generated -%patch100 -p1 autoconf %build @@ -529,7 +525,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winedos.dll.so %{_libdir}/wine/winemp3.acm.so %{_libdir}/wine/wineoss.drv.so -#%{_libdir}/wine/winetty.drv.so %{_libdir}/wine/winex11.drv.so %{_libdir}/wine/wing.dll.so %{_libdir}/wine/wininet.dll.so @@ -547,6 +542,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/ws2_32.dll.so %{_libdir}/wine/wsock32.dll.so %{_libdir}/wine/wtsapi32.dll.so +%{_libdir}/wine/security.dll.so %dir %{_datadir}/fonts/wine %{_datadir}/fonts/wine/wine_coure.fon %{_datadir}/fonts/wine/wine_couree.fon @@ -693,6 +689,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Thu Jan 19 2006 Andreas Bierfert +0.9.6-1 +- version upgrade +- drop wmf exploit patch (part of current version) + * Sun Jan 08 2006 Andreas Bierfert 0.9.5-2 - fix for CVE-2005-4560 From 2dde1248bbc839bcd5b6587120a9d36c82b025bd Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 19 Jan 2006 23:38:00 +0000 Subject: [PATCH 015/161] - fix sources (forgot wine-fonts) --- .cvsignore | 1 + sources | 1 + 2 files changed, 2 insertions(+) diff --git a/.cvsignore b/.cvsignore index 8e2e2a2..4577820 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1,2 @@ wine-0.9.6.tar.bz2 +wine-fonts-20050524.tar.gz diff --git a/sources b/sources index a0d6322..2ad0676 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ 1e3bfac123009300646a0b8a7fcfd81d wine-0.9.6.tar.bz2 +fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz From a24124d31efa8c3fa3cebadd46fc99b56f044bde Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 2 Feb 2006 23:19:25 +0000 Subject: [PATCH 016/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index 4577820..9d1631d 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ -wine-0.9.6.tar.bz2 wine-fonts-20050524.tar.gz +wine-0.9.7.tar.bz2 diff --git a/sources b/sources index 2ad0676..6729d42 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -1e3bfac123009300646a0b8a7fcfd81d wine-0.9.6.tar.bz2 fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz +92b9af6e2c108bda8d23497abd9d0356 wine-0.9.7.tar.bz2 diff --git a/wine.spec b/wine.spec index 5c9c69a..3a27091 100644 --- a/wine.spec +++ b/wine.spec @@ -1,14 +1,14 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.6 +Version: 0.9.7 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ -Source0: http://dl.sf.net/wine/wine-0.9.6.tar.bz2 +Source0: http://dl.sf.net/wine/wine-0.9.7.tar.bz2 Source1: wine.init Source2: wine-fonts-20050524.tar.gz Source3: wine-README-Fedora @@ -293,7 +293,7 @@ update-desktop-database &>/dev/null || : %files %defattr(-,root,root,-) -%doc ANNOUNCE BUGS COPYING.LIB ChangeLog DEVELOPERS-HINTS LICENSE LICENSE.OLD +%doc ANNOUNCE COPYING.LIB ChangeLog DEVELOPERS-HINTS LICENSE LICENSE.OLD %doc AUTHORS README-Fedora README VERSION %doc documentation/* %{_bindir}/msiexec @@ -689,6 +689,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Thu Feb 02 2006 Andreas Bierfert +0.9.7-1 +- version upgrade + * Thu Jan 19 2006 Andreas Bierfert 0.9.6-1 - version upgrade From c6d321377577eee76e8e2b3db8a71e85c4d53e1e Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 8 Feb 2006 13:35:58 +0000 Subject: [PATCH 017/161] - fix typo in script part --- wine.spec | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/wine.spec b/wine.spec index 3a27091..0f3eb1e 100644 --- a/wine.spec +++ b/wine.spec @@ -2,7 +2,7 @@ Name: wine Version: 0.9.7 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -61,7 +61,7 @@ BuildRequires: libXi-devel Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, Requires(post): /usr/bin/update-desktop-database -Requires(preun): /sbin/chkconfig +Requires(preun): /sbin/chkconfig, /sbin/service Requires(postun): /sbin/ldconfig, /usr/bin/update-desktop-database %description @@ -253,13 +253,16 @@ rm -rf %{buildroot} %post /sbin/ldconfig +update-desktop-database &>/dev/null || : +if [ $1 = 1 ]; then /sbin/chkconfig --add wine /sbin/chkconfig --level 2345 wine on /sbin/service wine start &>/dev/null || : -update-desktop-database &>/dev/null || : +fi %preun -if test "$1" = "0"; then +if [ $1 = 0 ]; then + /sbin/service wine stop >/dev/null 2>&1 /sbin/chkconfig --del wine fi @@ -689,6 +692,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Wed Feb 08 2006 Andreas Bierfert +0.9.7-2 +- fix up post/preun scriplets (#178954) + * Thu Feb 02 2006 Andreas Bierfert 0.9.7-1 - version upgrade From d97a66c2ee7ee1389b6f348ea4cf1035300bfbad Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 9 Feb 2006 07:34:08 +0000 Subject: [PATCH 018/161] - use sources without winemp3 --- wine.spec | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/wine.spec b/wine.spec index 0f3eb1e..b2a3c93 100644 --- a/wine.spec +++ b/wine.spec @@ -2,13 +2,14 @@ Name: wine Version: 0.9.7 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ -Source0: http://dl.sf.net/wine/wine-0.9.7.tar.bz2 +# special fedora tarball without winemp3 stuff +Source0: wine-0.9.7-fe.tar.bz2 Source1: wine.init Source2: wine-fonts-20050524.tar.gz Source3: wine-README-Fedora @@ -526,7 +527,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/windebug.dll.so %{_libdir}/wine/wineaudioio.drv.so %{_libdir}/wine/winedos.dll.so -%{_libdir}/wine/winemp3.acm.so %{_libdir}/wine/wineoss.drv.so %{_libdir}/wine/winex11.drv.so %{_libdir}/wine/wing.dll.so @@ -692,6 +692,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Thu Feb 09 2006 Andreas Bierfert +0.9.7-3 +- fix up tarball + * Wed Feb 08 2006 Andreas Bierfert 0.9.7-2 - fix up post/preun scriplets (#178954) From 46653631bee94a81784951c53ce2f15607d0ea73 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 9 Feb 2006 07:41:38 +0000 Subject: [PATCH 019/161] - forgot new sources --- .cvsignore | 2 +- sources | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.cvsignore b/.cvsignore index 9d1631d..e0274ba 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ wine-fonts-20050524.tar.gz -wine-0.9.7.tar.bz2 +wine-0.9.7-fe.tar.bz2 diff --git a/sources b/sources index 6729d42..72e54a3 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz -92b9af6e2c108bda8d23497abd9d0356 wine-0.9.7.tar.bz2 +a960bd5c78b2c919d8ea316e9d32d20b wine-0.9.7-fe.tar.bz2 From bd3c0371661ad0205c3d93c4f63758142553ff75 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 9 Feb 2006 07:54:17 +0000 Subject: [PATCH 020/161] - forgot -n for new sources --- wine.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index b2a3c93..beeeba5 100644 --- a/wine.spec +++ b/wine.spec @@ -155,7 +155,7 @@ Header, include files and library definition files for developing applications with the Wine Windows(TM) emulation libraries. %prep -%setup -q +%setup -q -n %{name}-%{version}-fe %patch2 -p1 -b .generated autoconf From e901f69a7c32dde1c0a29c6eaa95f69de79e823c Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 16 Feb 2006 22:38:34 +0000 Subject: [PATCH 021/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index e0274ba..46b10ef 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ wine-fonts-20050524.tar.gz -wine-0.9.7-fe.tar.bz2 +wine-0.9.8-fe.tar.bz2 diff --git a/sources b/sources index 72e54a3..cee73f7 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz -a960bd5c78b2c919d8ea316e9d32d20b wine-0.9.7-fe.tar.bz2 +8a3bc8c46a240a250cb2770147e37efb wine-0.9.8-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index beeeba5..a74978d 100644 --- a/wine.spec +++ b/wine.spec @@ -1,15 +1,15 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.7 -Release: 3%{?dist} +Version: 0.9.8 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.7-fe.tar.bz2 +Source0: wine-0.9.8-fe.tar.bz2 Source1: wine.init Source2: wine-fonts-20050524.tar.gz Source3: wine-README-Fedora @@ -692,6 +692,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Thu Feb 16 2006 Andreas Bierfert +0.9.8-1 +- version upgrade + * Thu Feb 09 2006 Andreas Bierfert 0.9.7-3 - fix up tarball From ab97e72259260aff9341c81a58709c6d427dec32 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 21 Feb 2006 12:22:21 +0000 Subject: [PATCH 022/161] - fixup file sections --- wine.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index a74978d..95721a5 100644 --- a/wine.spec +++ b/wine.spec @@ -60,6 +60,8 @@ BuildRequires: cups-devel BuildRequires: libXmu-devel BuildRequires: libXi-devel +Requires: %{_bindir}/xmessage + Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, Requires(post): /usr/bin/update-desktop-database Requires(preun): /sbin/chkconfig, /sbin/service @@ -546,6 +548,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wsock32.dll.so %{_libdir}/wine/wtsapi32.dll.so %{_libdir}/wine/security.dll.so +%{_libdir}/wine/sfc.dll.so %dir %{_datadir}/fonts/wine %{_datadir}/fonts/wine/wine_coure.fon %{_datadir}/fonts/wine/wine_couree.fon @@ -624,7 +627,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepath.exe.so %{_libdir}/wine/winhelp.exe.so %{_libdir}/wine/winver.exe.so -%{_libdir}/wine/winetest.exe.so +%{_libdir}/wine/wordpad.exe.so %{_datadir}/applications/fedora-wine-notepad.desktop %{_datadir}/applications/fedora-wine-winefile.desktop %{_datadir}/applications/fedora-wine-winemine.desktop From 4e7759803b23c1c8b0381645f7896b9de50a0138 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 3 Mar 2006 00:28:43 +0000 Subject: [PATCH 023/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 105 ++++++++++++++++++++++++++++------------------------- 3 files changed, 57 insertions(+), 52 deletions(-) diff --git a/.cvsignore b/.cvsignore index 46b10ef..ad96202 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ wine-fonts-20050524.tar.gz -wine-0.9.8-fe.tar.bz2 +wine-0.9.9-fe.tar.bz2 diff --git a/sources b/sources index cee73f7..77b2d0e 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz -8a3bc8c46a240a250cb2770147e37efb wine-0.9.8-fe.tar.bz2 +a6c02fe36f4391655f4836b74b37d27f wine-0.9.9-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 95721a5..aa54118 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.8 +Version: 0.9.9 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.8-fe.tar.bz2 +Source0: wine-0.9.9-fe.tar.bz2 Source1: wine.init Source2: wine-fonts-20050524.tar.gz Source3: wine-README-Fedora @@ -351,7 +351,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/atl.dll.so %{_libdir}/wine/avicap32.dll.so %{_libdir}/wine/avifil32.dll.so -%{_libdir}/wine/avifile.dll.so +%{_libdir}/wine/avifile.dll16 %{_libdir}/wine/aviinfo.exe.so %{_libdir}/wine/aviplay.exe.so %{_libdir}/wine/cabinet.dll.so @@ -361,27 +361,27 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/comcat.dll.so %{_libdir}/wine/comctl32.dll.so %{_libdir}/wine/comdlg32.dll.so -%{_libdir}/wine/comm.drv.so +%{_libdir}/wine/comm.drv16 %{_libdir}/wine/commdlg.dll.so -%{_libdir}/wine/compobj.dll.so +%{_libdir}/wine/compobj.dll16 %{_libdir}/wine/crtdll.dll.so %{_libdir}/wine/crypt32.dll.so %{_libdir}/wine/cryptdll.dll.so -%{_libdir}/wine/ctl3d.dll.so +%{_libdir}/wine/ctl3d.dll16 %{_libdir}/wine/ctl3d32.dll.so -%{_libdir}/wine/ctl3dv2.dll.so +%{_libdir}/wine/ctl3dv2.dll16 %{_libdir}/wine/d3dim.dll.so %{_libdir}/wine/d3drm.dll.so %{_libdir}/wine/d3dxof.dll.so %{_libdir}/wine/dbghelp.dll.so %{_libdir}/wine/dciman32.dll.so -%{_libdir}/wine/ddeml.dll.so +%{_libdir}/wine/ddeml.dll16 %{_libdir}/wine/ddraw.dll.so %{_libdir}/wine/devenum.dll.so %{_libdir}/wine/dinput.dll.so %{_libdir}/wine/dinput8.dll.so -%{_libdir}/wine/dispdib.dll.so -%{_libdir}/wine/display.drv.so +%{_libdir}/wine/dispdib.dll16 +%{_libdir}/wine/display.drv16 %{_libdir}/wine/dmband.dll.so %{_libdir}/wine/dmcompos.dll.so %{_libdir}/wine/dmime.dll.so @@ -399,7 +399,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dswave.dll.so %{_libdir}/wine/dxdiagn.dll.so %{_libdir}/wine/eject.exe.so -%{_libdir}/wine/gdi.exe.so +%{_libdir}/wine/gdi.exe16 %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/hh.exe.so %{_libdir}/wine/hhctrl.ocx.so @@ -409,16 +409,16 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/ifsmgr.vxd.so %{_libdir}/wine/imaadp32.acm.so %{_libdir}/wine/imagehlp.dll.so -%{_libdir}/wine/imm.dll.so +%{_libdir}/wine/imm.dll16 %{_libdir}/wine/imm32.dll.so %{_libdir}/wine/iphlpapi.dll.so %{_libdir}/wine/itss.dll.so %{_libdir}/wine/joystick.drv.so %{_libdir}/wine/kernel32.dll.so -%{_libdir}/wine/keyboard.drv.so -%{_libdir}/wine/krnl386.exe.so +%{_libdir}/wine/keyboard.drv16 +%{_libdir}/wine/krnl386.exe16 %{_libdir}/wine/lz32.dll.so -%{_libdir}/wine/lzexpand.dll.so +%{_libdir}/wine/lzexpand.dll16 %{_libdir}/wine/mapi32.dll.so %{_libdir}/wine/mciavi32.dll.so %{_libdir}/wine/mcicda.dll.so @@ -427,15 +427,16 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/midimap.dll.so %{_libdir}/wine/mlang.dll.so %{_libdir}/wine/mmdevldr.vxd.so -%{_libdir}/wine/mmsystem.dll.so +%{_libdir}/wine/mmsystem.dll16 %{_libdir}/wine/monodebg.vxd.so -%{_libdir}/wine/mouse.drv.so +%{_libdir}/wine/mouse.drv16 %{_libdir}/wine/mpr.dll.so -%{_libdir}/wine/msacm.dll.so +%{_libdir}/wine/msacm.dll16 %{_libdir}/wine/msacm.drv.so %{_libdir}/wine/msacm32.dll.so %{_libdir}/wine/msadp32.acm.so %{_libdir}/wine/msdmo.dll.so +%{_libdir}/wine/msftedit.dll.so %{_libdir}/wine/msg711.acm.so %{_libdir}/wine/mshtml.dll.so %{_libdir}/wine/msi.dll.so @@ -449,7 +450,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msvcrtd.dll.so %{_libdir}/wine/msvfw32.dll.so %{_libdir}/wine/msvidc32.dll.so -%{_libdir}/wine/msvideo.dll.so +%{_libdir}/wine/msvideo.dll16 %{_libdir}/wine/mswsock.dll.so %{_libdir}/wine/msxml3.dll.so %{_libdir}/wine/netapi32.dll.so @@ -458,26 +459,26 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/objsel.dll.so %{_libdir}/wine/odbc32.dll.so %{_libdir}/wine/odbccp32.dll.so -%{_libdir}/wine/ole2.dll.so -%{_libdir}/wine/ole2conv.dll.so -%{_libdir}/wine/ole2disp.dll.so -%{_libdir}/wine/ole2nls.dll.so -%{_libdir}/wine/ole2prox.dll.so -%{_libdir}/wine/ole2thk.dll.so +%{_libdir}/wine/ole2.dll16 +%{_libdir}/wine/ole2conv.dll16 +%{_libdir}/wine/ole2disp.dll16 +%{_libdir}/wine/ole2nls.dll16 +%{_libdir}/wine/ole2prox.dll16 +%{_libdir}/wine/ole2thk.dll16 %{_libdir}/wine/ole32.dll.so %{_libdir}/wine/oleacc.dll.so %{_libdir}/wine/oleaut32.dll.so -%{_libdir}/wine/olecli.dll.so +%{_libdir}/wine/olecli.dll16 %{_libdir}/wine/olecli32.dll.so %{_libdir}/wine/oledlg.dll.so %{_libdir}/wine/olepro32.dll.so -%{_libdir}/wine/olesvr.dll.so +%{_libdir}/wine/olesvr.dll16 %{_libdir}/wine/olesvr32.dll.so %{_libdir}/wine/powrprof.dll.so %{_libdir}/wine/psapi.dll.so %{_libdir}/wine/qcap.dll.so %{_libdir}/wine/quartz.dll.so -%{_libdir}/wine/rasapi16.dll.so +%{_libdir}/wine/rasapi16.dll16 %{_libdir}/wine/rasapi32.dll.so %{_libdir}/wine/riched20.dll.so %{_libdir}/wine/riched32.dll.so @@ -488,33 +489,33 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/sensapi.dll.so %{_libdir}/wine/serialui.dll.so %{_libdir}/wine/setupapi.dll.so -%{_libdir}/wine/setupx.dll.so +%{_libdir}/wine/setupx.dll16 %{_libdir}/wine/shdocvw.dll.so -%{_libdir}/wine/shell.dll.so +%{_libdir}/wine/shell.dll16 %{_libdir}/wine/shell32.dll.so %{_libdir}/wine/shfolder.dll.so %{_libdir}/wine/shlwapi.dll.so %{_libdir}/wine/snmpapi.dll.so -%{_libdir}/wine/sound.drv.so +%{_libdir}/wine/sound.drv16 %{_libdir}/wine/stdole2.tlb.so %{_libdir}/wine/stdole32.tlb.so %{_libdir}/wine/sti.dll.so -%{_libdir}/wine/storage.dll.so -%{_libdir}/wine/stress.dll.so -%{_libdir}/wine/system.drv.so +%{_libdir}/wine/storage.dll16 +%{_libdir}/wine/stress.dll16 +%{_libdir}/wine/system.drv16 %{_libdir}/wine/tapi32.dll.so -%{_libdir}/wine/toolhelp.dll.so -%{_libdir}/wine/typelib.dll.so +%{_libdir}/wine/toolhelp.dll16 +%{_libdir}/wine/typelib.dll16 %{_libdir}/wine/unicows.dll.so %{_libdir}/wine/url.dll.so %{_libdir}/wine/urlmon.dll.so -%{_libdir}/wine/user.exe.so +%{_libdir}/wine/user.exe16 %{_libdir}/wine/user32.dll.so %{_libdir}/wine/usp10.dll.so %{_libdir}/wine/uxtheme.dll.so %{_libdir}/wine/vdhcp.vxd.so %{_libdir}/wine/vdmdbg.dll.so -%{_libdir}/wine/ver.dll.so +%{_libdir}/wine/ver.dll16 %{_libdir}/wine/version.dll.so %{_libdir}/wine/vmm.vxd.so %{_libdir}/wine/vnbt.vxd.so @@ -522,28 +523,28 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/vtdapi.vxd.so %{_libdir}/wine/vwin32.vxd.so %{_libdir}/wine/w32skrnl.dll.so -%{_libdir}/wine/w32sys.dll.so -%{_libdir}/wine/win32s16.dll.so -%{_libdir}/wine/win87em.dll.so -%{_libdir}/wine/winaspi.dll.so -%{_libdir}/wine/windebug.dll.so +%{_libdir}/wine/w32sys.dll16 +%{_libdir}/wine/win32s16.dll16 +%{_libdir}/wine/win87em.dll16 +%{_libdir}/wine/winaspi.dll16 +%{_libdir}/wine/windebug.dll16 %{_libdir}/wine/wineaudioio.drv.so %{_libdir}/wine/winedos.dll.so %{_libdir}/wine/wineoss.drv.so %{_libdir}/wine/winex11.drv.so -%{_libdir}/wine/wing.dll.so +%{_libdir}/wine/wing.dll16 %{_libdir}/wine/wininet.dll.so %{_libdir}/wine/winmm.dll.so -%{_libdir}/wine/winnls.dll.so +%{_libdir}/wine/winnls.dll16 %{_libdir}/wine/winnls32.dll.so -%{_libdir}/wine/winsock.dll.so +%{_libdir}/wine/winsock.dll16 %{_libdir}/wine/winspool.drv.so -%{_libdir}/wine/wintab.dll.so +%{_libdir}/wine/wintab.dll16 %{_libdir}/wine/wintab32.dll.so %{_libdir}/wine/wintrust.dll.so %{_libdir}/wine/wnaspi32.dll.so %{_libdir}/wine/wow32.dll.so -%{_libdir}/wine/wprocs.dll.so +%{_libdir}/wine/wprocs.dll16 %{_libdir}/wine/ws2_32.dll.so %{_libdir}/wine/wsock32.dll.so %{_libdir}/wine/wtsapi32.dll.so @@ -593,7 +594,7 @@ update-desktop-database &>/dev/null || : %{_datadir}/fonts/wine/vgasyst.fon %{_libdir}/wine/winealsa.drv.so %{_libdir}/wine/wineps.drv.so -%{_libdir}/wine/wineps16.drv.so +%{_libdir}/wine/wineps16.drv16 %{_libdir}/wine/d3d8.dll.so %{_libdir}/wine/d3d9.dll.so %{_libdir}/wine/d3dx8.dll.so @@ -659,7 +660,7 @@ update-desktop-database &>/dev/null || : %files twain %defattr(-,root,root,-) -%{_libdir}/wine/twain.dll.so +%{_libdir}/wine/twain.dll16 %{_libdir}/wine/twain_32.dll.so %files capi @@ -695,6 +696,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Mar 03 2006 Andreas Bierfert +0.9.9-1 +- version upgrade + * Thu Feb 16 2006 Andreas Bierfert 0.9.8-1 - version upgrade From 26d12bf1620c105e9c893b3c58ffa00873ef3615 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 3 Mar 2006 07:36:29 +0000 Subject: [PATCH 024/161] - fix another dll --- wine.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index aa54118..e8a2c38 100644 --- a/wine.spec +++ b/wine.spec @@ -362,7 +362,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/comctl32.dll.so %{_libdir}/wine/comdlg32.dll.so %{_libdir}/wine/comm.drv16 -%{_libdir}/wine/commdlg.dll.so +%{_libdir}/wine/commdlg.dll16 %{_libdir}/wine/compobj.dll16 %{_libdir}/wine/crtdll.dll.so %{_libdir}/wine/crypt32.dll.so From efab6b1399b08dcd2c09683518a5ca90756c1967 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 15 Mar 2006 21:59:45 +0000 Subject: [PATCH 025/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index ad96202..d4a2629 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1,2 @@ wine-fonts-20050524.tar.gz -wine-0.9.9-fe.tar.bz2 +wine-0.9.10-fe.tar.bz2 diff --git a/sources b/sources index 77b2d0e..56cc20b 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz -a6c02fe36f4391655f4836b74b37d27f wine-0.9.9-fe.tar.bz2 +054e71983834d777be3271f63f8484d6 wine-0.9.10-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index e8a2c38..486fe62 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.9 +Version: 0.9.10 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.9-fe.tar.bz2 +Source0: wine-0.9.10-fe.tar.bz2 Source1: wine.init Source2: wine-fonts-20050524.tar.gz Source3: wine-README-Fedora From 1b87422e4f279f402d845a8e0dccc8feef56b11e Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 17 Mar 2006 13:25:00 +0000 Subject: [PATCH 026/161] - version upgrade - drop ancient fonts --- .cvsignore | 1 - sources | 1 - wine-20050524-generated.patch | 27 ----------------- wine.spec | 56 ++++------------------------------- 4 files changed, 6 insertions(+), 79 deletions(-) delete mode 100644 wine-20050524-generated.patch diff --git a/.cvsignore b/.cvsignore index d4a2629..24a0686 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,2 +1 @@ -wine-fonts-20050524.tar.gz wine-0.9.10-fe.tar.bz2 diff --git a/sources b/sources index 56cc20b..496fe7a 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -fb216b10993cb17501efff7afa812da1 wine-fonts-20050524.tar.gz 054e71983834d777be3271f63f8484d6 wine-0.9.10-fe.tar.bz2 diff --git a/wine-20050524-generated.patch b/wine-20050524-generated.patch deleted file mode 100644 index 06de588..0000000 --- a/wine-20050524-generated.patch +++ /dev/null @@ -1,27 +0,0 @@ -Index: wine/tools/wineprefixcreate.in -=================================================================== -RCS file: /home/wine/wine/tools/wineprefixcreate.in,v -retrieving revision 1.10 -diff -u -r1.10 wineprefixcreate.in ---- wine/tools/wineprefixcreate.in 19 May 2005 11:12:34 -0000 1.10 -+++ wine/tools/wineprefixcreate.in 29 May 2005 00:00:00 -0000 -@@ -38,6 +38,7 @@ - - dlldir="@dlldir@" - datadir="@datadir@/wine" -+fontdir="@datadir@/fonts/wine" - - do_wait=0 - quiet=0 -@@ -175,6 +176,11 @@ - link_app winhelp "$CROOT/windows/winhelp.exe" - link_app winhelp "$CROOT/windows/winhlp32.exe" - link_app winebrowser "$CROOT/windows/winebrowser.exe" -+ -+# Copy the generated fonts -+ -+cp $fontdir/*.ttf "$CROOT/windows/fonts" -+cp $fontdir/*.fon "$CROOT/windows/fonts" - - # Copy the .inf script and run it - diff --git a/wine.spec b/wine.spec index 486fe62..ddacc30 100644 --- a/wine.spec +++ b/wine.spec @@ -11,7 +11,6 @@ URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff Source0: wine-0.9.10-fe.tar.bz2 Source1: wine.init -Source2: wine-fonts-20050524.tar.gz Source3: wine-README-Fedora Source4: wine-32.conf Source100: wine-notepad.desktop @@ -21,7 +20,6 @@ Source103: wine-winecfg.desktop Source104: wine-winefile.desktop Source105: wine-winemine.desktop Source106: wine-winhelp.desktop -Patch2: wine-20050524-generated.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -158,8 +156,6 @@ with the Wine Windows(TM) emulation libraries. %prep %setup -q -n %{name}-%{version}-fe -%patch2 -p1 -b .generated -autoconf %build export CFLAGS="$RPM_OPT_FLAGS" @@ -193,10 +189,6 @@ mkdir -p %{buildroot}%{_sysconfdir}/wine mkdir -p %{buildroot}%{_initrddir} install -p -c -m 755 %SOURCE1 %{buildroot}%{_initrddir}/wine -# Install Wine's fonts -mkdir -p %{buildroot}%{_datadir}/fonts/wine -tar xzf %SOURCE2 -C %{buildroot}%{_datadir}/fonts/wine - desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ @@ -550,48 +542,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wtsapi32.dll.so %{_libdir}/wine/security.dll.so %{_libdir}/wine/sfc.dll.so -%dir %{_datadir}/fonts/wine -%{_datadir}/fonts/wine/wine_coure.fon -%{_datadir}/fonts/wine/wine_couree.fon -%{_datadir}/fonts/wine/wine_courer.fon -%{_datadir}/fonts/wine/wine_marlett.ttf -%{_datadir}/fonts/wine/wine_sserife.fon -%{_datadir}/fonts/wine/wine_sserifee.fon -%{_datadir}/fonts/wine/wine_sserifer.fon -%{_datadir}/fonts/wine/wine_vgasys.fon -%{_datadir}/fonts/wine/wine_vgasyse.fon -%{_datadir}/fonts/wine/wine_vgasysr.fon -%{_datadir}/fonts/wine/coue1255.fon -%{_datadir}/fonts/wine/coue1256.fon -%{_datadir}/fonts/wine/coue1257.fon -%{_datadir}/fonts/wine/coure.fon -%{_datadir}/fonts/wine/couree.fon -%{_datadir}/fonts/wine/coureg.fon -%{_datadir}/fonts/wine/courer.fon -%{_datadir}/fonts/wine/couret.fon -%{_datadir}/fonts/wine/cvgasys.fon -%{_datadir}/fonts/wine/hvgasys.fon -%{_datadir}/fonts/wine/jvgasys.fon -%{_datadir}/fonts/wine/marlett.ttf -%{_datadir}/fonts/wine/ssee1255.fon -%{_datadir}/fonts/wine/ssee1256.fon -%{_datadir}/fonts/wine/ssee1257.fon -%{_datadir}/fonts/wine/ssee874.fon -%{_datadir}/fonts/wine/sserife.fon -%{_datadir}/fonts/wine/sserifee.fon -%{_datadir}/fonts/wine/sserifeg.fon -%{_datadir}/fonts/wine/sserifer.fon -%{_datadir}/fonts/wine/sserifet.fon -%{_datadir}/fonts/wine/svgasys.fon -%{_datadir}/fonts/wine/vgas1255.fon -%{_datadir}/fonts/wine/vgas1256.fon -%{_datadir}/fonts/wine/vgas1257.fon -%{_datadir}/fonts/wine/vgas874.fon -%{_datadir}/fonts/wine/vgasys.fon -%{_datadir}/fonts/wine/vgasyse.fon -%{_datadir}/fonts/wine/vgasysg.fon -%{_datadir}/fonts/wine/vgasysr.fon -%{_datadir}/fonts/wine/vgasyst.fon +%{_datadir}/wine/fonts/ %{_libdir}/wine/winealsa.drv.so %{_libdir}/wine/wineps.drv.so %{_libdir}/wine/wineps16.drv16 @@ -696,6 +647,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Thu Mar 16 2006 Andreas Bierfert +0.9.10-1 +- version upgrade +- drop ancient extra fonts + * Fri Mar 03 2006 Andreas Bierfert 0.9.9-1 - version upgrade From 2705e128cc5bd571404efe5acc149d9424bd9c4e Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 17 Mar 2006 13:29:08 +0000 Subject: [PATCH 027/161] - clean up BR --- wine.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/wine.spec b/wine.spec index ddacc30..cd76aef 100644 --- a/wine.spec +++ b/wine.spec @@ -25,7 +25,6 @@ Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) ExclusiveArch: %{ix86} -BuildRequires: autoconf BuildRequires: bison BuildRequires: flex BuildRequires: alsa-lib-devel From 65e867badc3746a92a739f3bce17fba8d6caa083 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 19 Mar 2006 23:47:51 +0000 Subject: [PATCH 028/161] - bump for x86_64 inclusion --- wine.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index cd76aef..2185c25 100644 --- a/wine.spec +++ b/wine.spec @@ -2,7 +2,7 @@ Name: wine Version: 0.9.10 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -646,6 +646,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Mar 20 2006 Andreas Bierfert +0.9.10-2 +- bump for x86_64 tree inclusion \o/ + * Thu Mar 16 2006 Andreas Bierfert 0.9.10-1 - version upgrade From 7d735f292568264ddaec22699e500ece4d407950 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 3 Apr 2006 11:08:01 +0000 Subject: [PATCH 029/161] - version upgrade - fix #187546 --- .cvsignore | 2 +- sources | 2 +- wine-prefixfonts.patch | 12 ++++++++++++ wine.spec | 16 +++++++++++----- 4 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 wine-prefixfonts.patch diff --git a/.cvsignore b/.cvsignore index 24a0686..611e9f1 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.10-fe.tar.bz2 +wine-0.9.11-fe.tar.bz2 diff --git a/sources b/sources index 496fe7a..af4bbb4 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -054e71983834d777be3271f63f8484d6 wine-0.9.10-fe.tar.bz2 +7e67d02051dfb3671990f40734aca89a wine-0.9.11-fe.tar.bz2 diff --git a/wine-prefixfonts.patch b/wine-prefixfonts.patch new file mode 100644 index 0000000..885c56a --- /dev/null +++ b/wine-prefixfonts.patch @@ -0,0 +1,12 @@ +--- tools/wineprefixcreate.in.orig 2006-04-03 10:04:18.000000000 +0200 ++++ tools/wineprefixcreate.in 2006-04-03 10:06:20.000000000 +0200 +@@ -170,6 +170,9 @@ + export WINEPREFIX + "${WINELOADER:-wine}" rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 wine.inf + ++# Copy the font files ++cp /usr/share/wine/fonts/* "$CROOT/windows/fonts/" ++ + # Wait for the wineserver to finish + + if [ $do_wait = 1 ] diff --git a/wine.spec b/wine.spec index 2185c25..03834e3 100644 --- a/wine.spec +++ b/wine.spec @@ -1,15 +1,16 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.10 -Release: 2%{?dist} +Version: 0.9.11 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.10-fe.tar.bz2 +Patch0: wine-prefixfonts.patch +Source0: wine-0.9.11-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -155,6 +156,7 @@ with the Wine Windows(TM) emulation libraries. %prep %setup -q -n %{name}-%{version}-fe +%patch0 %build export CFLAGS="$RPM_OPT_FLAGS" @@ -343,8 +345,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/avicap32.dll.so %{_libdir}/wine/avifil32.dll.so %{_libdir}/wine/avifile.dll16 -%{_libdir}/wine/aviinfo.exe.so -%{_libdir}/wine/aviplay.exe.so %{_libdir}/wine/cabinet.dll.so %{_libdir}/wine/cards.dll.so %{_libdir}/wine/cfgmgr32.dll.so @@ -530,6 +530,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winnls32.dll.so %{_libdir}/wine/winsock.dll16 %{_libdir}/wine/winspool.drv.so +%{_libdir}/wine/spoolss.dll.so %{_libdir}/wine/wintab.dll16 %{_libdir}/wine/wintab32.dll.so %{_libdir}/wine/wintrust.dll.so @@ -646,6 +647,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Apr 03 2006 Andreas Bierfert +0.9.11-1 +- version upgrade +- fix #187546 + * Mon Mar 20 2006 Andreas Bierfert 0.9.10-2 - bump for x86_64 tree inclusion \o/ From e987189c5394b7e3b33d3ddf0faa38d711187cfd Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 19 Apr 2006 22:20:07 +0000 Subject: [PATCH 030/161] - fix rpath issues (#188905) - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 15 ++++++++++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index 611e9f1..8372e15 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.11-fe.tar.bz2 +wine-0.9.12-fe.tar.bz2 diff --git a/sources b/sources index af4bbb4..1283be6 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -7e67d02051dfb3671990f40734aca89a wine-0.9.11-fe.tar.bz2 +1751147723999f1efd73d1aaba910360 wine-0.9.12-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 03834e3..e016274 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.11 +Version: 0.9.12 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -10,7 +10,8 @@ License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff Patch0: wine-prefixfonts.patch -Source0: wine-0.9.11-fe.tar.bz2 +Patch1: wine-rpath.patch +Source0: wine-0.9.12-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -24,7 +25,7 @@ Source106: wine-winhelp.desktop Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -ExclusiveArch: %{ix86} +ExclusiveArch: %{ix86} BuildRequires: bison BuildRequires: flex @@ -157,6 +158,7 @@ with the Wine Windows(TM) emulation libraries. %prep %setup -q -n %{name}-%{version}-fe %patch0 +%patch1 %build export CFLAGS="$RPM_OPT_FLAGS" @@ -553,6 +555,8 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/glut32.dll.so %{_libdir}/wine/opengl32.dll.so %{_libdir}/wine/wined3d.dll.so +%{_libdir}/wine/dnsapi.dll.so +%{_libdir}/wine/iexplore.exe.so %{_sysconfdir}/ld.so.conf.d/wine-32.conf %files tools @@ -647,6 +651,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Apr 15 2006 Andreas Bierfert +0.9.12-1 +- fix rpath issues (#187429,#188905) +- version upgrade + * Mon Apr 03 2006 Andreas Bierfert 0.9.11-1 - version upgrade From d229248dbd5c04314a34e48be9ab3acf1a2dc0c2 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 19 Apr 2006 22:21:55 +0000 Subject: [PATCH 031/161] - add patch --- wine-rpath.patch | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 wine-rpath.patch diff --git a/wine-rpath.patch b/wine-rpath.patch new file mode 100644 index 0000000..14c0e37 --- /dev/null +++ b/wine-rpath.patch @@ -0,0 +1,41 @@ +--- configure.orig 2006-04-15 00:02:02.000000000 +0200 ++++ configure 2006-04-15 00:03:26.000000000 +0200 +@@ -13375,7 +13375,7 @@ + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_wine_try_cflags_saved=$CFLAGS +-CFLAGS="$CFLAGS -fPIC -Wl,--rpath,\$ORIGIN/../lib" ++CFLAGS="$CFLAGS -fPIC" + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -13427,9 +13427,9 @@ + echo "${ECHO_T}$ac_cv_ld_rpath" >&6 + if test "$ac_cv_ld_rpath" = "yes" + then +- LDEXERPATH="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" ++ LDEXERPATH="" + +- LDDLLRPATH="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(dlldir) \$(libdir)\`" ++ LDDLLRPATH="" + + fi + +--- configure.ac.orig 2006-04-15 00:15:32.000000000 +0200 ++++ configure.ac 2006-04-15 00:04:51.000000000 +0200 +@@ -1052,15 +1052,6 @@ + AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"]) + fi + +- AC_CACHE_CHECK([whether the linker accepts --rpath], ac_cv_ld_rpath, +- [WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], +- ac_cv_ld_rpath="yes",ac_cv_ld_rpath="no")]) +- if test "$ac_cv_ld_rpath" = "yes" +- then +- AC_SUBST(LDEXERPATH,["-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"]) +- AC_SUBST(LDDLLRPATH,["-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(dlldir) \$(libdir)\`"]) +- fi +- + case $host_cpu in + *i[[3456789]]86*) + AC_CACHE_CHECK([whether we can relocate the executable to 0x7bf00000], ac_cv_ld_reloc_exec, From 3b9875b432bddc889b21b3f0bf45b76f7b4e1e3f Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 16 May 2006 20:51:56 +0000 Subject: [PATCH 032/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 15 +++++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.cvsignore b/.cvsignore index 8372e15..5bc715a 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.12-fe.tar.bz2 +wine-0.9.13-fe.tar.bz2 diff --git a/sources b/sources index 1283be6..4358511 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -1751147723999f1efd73d1aaba910360 wine-0.9.12-fe.tar.bz2 +985f671f503684d2c95a9e4cb74ad453 wine-0.9.13-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index e016274..605b669 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.12 +Version: 0.9.13 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -11,7 +11,7 @@ URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff Patch0: wine-prefixfonts.patch Patch1: wine-rpath.patch -Source0: wine-0.9.12-fe.tar.bz2 +Source0: wine-0.9.13-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -394,6 +394,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/eject.exe.so %{_libdir}/wine/gdi.exe16 %{_libdir}/wine/gdi32.dll.so +%{_libdir}/wine/gphoto2.ds.so %{_libdir}/wine/hh.exe.so %{_libdir}/wine/hhctrl.ocx.so %{_libdir}/wine/iccvid.dll.so @@ -416,7 +417,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/mciavi32.dll.so %{_libdir}/wine/mcicda.dll.so %{_libdir}/wine/mciseq.dll.so -%{_libdir}/wine/mciwave.drv.so +%{_libdir}/wine/mciwave.dll.so %{_libdir}/wine/midimap.dll.so %{_libdir}/wine/mlang.dll.so %{_libdir}/wine/mmdevldr.vxd.so @@ -424,9 +425,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/monodebg.vxd.so %{_libdir}/wine/mouse.drv16 %{_libdir}/wine/mpr.dll.so +%{_libdir}/wine/mprapi.dll.so %{_libdir}/wine/msacm.dll16 -%{_libdir}/wine/msacm.drv.so %{_libdir}/wine/msacm32.dll.so +%{_libdir}/wine/msacm32.drv.so %{_libdir}/wine/msadp32.acm.so %{_libdir}/wine/msdmo.dll.so %{_libdir}/wine/msftedit.dll.so @@ -478,6 +480,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/rpcrt4.dll.so %{_libdir}/wine/rsabase.dll.so %{_libdir}/wine/rsaenh.dll.so +%{_libdir}/wine/sane.ds.so %{_libdir}/wine/secur32.dll.so %{_libdir}/wine/sensapi.dll.so %{_libdir}/wine/serialui.dll.so @@ -651,6 +654,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon May 15 2006 Andreas Bierfert +0.9.13-1 +- version upgrade + * Sat Apr 15 2006 Andreas Bierfert 0.9.12-1 - fix rpath issues (#187429,#188905) From 94e3c8b75228749d692caad53af807dcdabe0ec8 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 19 May 2006 07:10:07 +0000 Subject: [PATCH 033/161] - enable hal/dbus support --- wine.spec | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/wine.spec b/wine.spec index 605b669..2acd1cb 100644 --- a/wine.spec +++ b/wine.spec @@ -2,7 +2,7 @@ Name: wine Version: 0.9.13 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -52,12 +52,13 @@ BuildRequires: libX11-devel BuildRequires: mesa-libGL-devel mesa-libGLU-devel BuildRequires: libXxf86dga-devel libXxf86vm-devel BuildRequires: libXrandr-devel libXrender-devel libXext-devel - BuildRequires: fontconfig-devel BuildRequires: giflib-devel BuildRequires: cups-devel BuildRequires: libXmu-devel BuildRequires: libXi-devel +# dbus/hal >= FC5 +BuildRequires: dbus-devel hal-devel Requires: %{_bindir}/xmessage @@ -654,6 +655,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri May 19 2006 Andreas Bierfert +0.9.13-2 +- enable dbus/hal support + * Mon May 15 2006 Andreas Bierfert 0.9.13-1 - version upgrade From 1e1fc8a334d4dda3eb194ceab64da443f86802ea Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 5 Jun 2006 12:15:05 +0000 Subject: [PATCH 034/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 22 ++++++++++------------ 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/.cvsignore b/.cvsignore index 5bc715a..877908d 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.13-fe.tar.bz2 +wine-0.9.14-fe.tar.bz2 diff --git a/sources b/sources index 4358511..cea4822 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -985f671f503684d2c95a9e4cb74ad453 wine-0.9.13-fe.tar.bz2 +3427d6dffd46ecf21eccaf79fc26364e wine-0.9.14-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 2acd1cb..c427f39 100644 --- a/wine.spec +++ b/wine.spec @@ -1,17 +1,15 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.13 -Release: 2%{?dist} +Version: 0.9.14 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Patch0: wine-prefixfonts.patch -Patch1: wine-rpath.patch -Source0: wine-0.9.13-fe.tar.bz2 +Source0: wine-0.9.14-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -22,6 +20,8 @@ Source103: wine-winecfg.desktop Source104: wine-winefile.desktop Source105: wine-winemine.desktop Source106: wine-winhelp.desktop +Patch0: wine-prefixfonts.patch +Patch1: wine-rpath.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -179,13 +179,6 @@ rm -rf %{buildroot} dlldir=%{buildroot}%{_libdir}/wine \ LDCONFIG=/bin/true \ UPDATE_DESKTOP_DATABASE=/bin/true -%makeinstall \ - -C dlls/wineps \ - includedir=%{buildroot}%{_includedir}/wine \ - sysconfdir=%{buildroot}%{_sysconfdir}/wine \ - dlldir=%{buildroot}%{_libdir}/wine \ - LDCONFIG=/bin/true \ - UPDATE_DESKTOP_DATABASE=/bin/true mkdir -p %{buildroot}%{_sysconfdir}/wine @@ -452,6 +445,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/netapi32.dll.so %{_libdir}/wine/newdev.dll.so %{_libdir}/wine/ntdll.dll.so +%{_libdir}/wine/ntdsapi.dll.so %{_libdir}/wine/objsel.dll.so %{_libdir}/wine/odbc32.dll.so %{_libdir}/wine/odbccp32.dll.so @@ -655,6 +649,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Tue May 30 2006 Andreas Bierfert +0.9.14-1 +- version upgrade + * Fri May 19 2006 Andreas Bierfert 0.9.13-2 - enable dbus/hal support From e1ca8ef846bbe0cece031a502760fa3e3453182e Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 9 Jun 2006 10:14:24 +0000 Subject: [PATCH 035/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 12 +++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index 877908d..4cd20f0 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.14-fe.tar.bz2 +wine-0.9.15-fe.tar.bz2 diff --git a/sources b/sources index cea4822..32c8a97 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -3427d6dffd46ecf21eccaf79fc26364e wine-0.9.14-fe.tar.bz2 +12d525c601068e0ee2b875b74b471c26 wine-0.9.15-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index c427f39..488b488 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.14 +Version: 0.9.15 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.14-fe.tar.bz2 +Source0: wine-0.9.15-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -22,7 +22,6 @@ Source105: wine-winemine.desktop Source106: wine-winhelp.desktop Patch0: wine-prefixfonts.patch Patch1: wine-rpath.patch - Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) ExclusiveArch: %{ix86} @@ -390,6 +389,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gphoto2.ds.so %{_libdir}/wine/hh.exe.so +%{_libdir}/wine/hlink.dll.so %{_libdir}/wine/hhctrl.ocx.so %{_libdir}/wine/iccvid.dll.so %{_libdir}/wine/icinfo.exe.so @@ -504,6 +504,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/user32.dll.so %{_libdir}/wine/usp10.dll.so %{_libdir}/wine/uxtheme.dll.so +%{_libdir}/wine/userenv.dll.so %{_libdir}/wine/vdhcp.vxd.so %{_libdir}/wine/vdmdbg.dll.so %{_libdir}/wine/ver.dll16 @@ -522,6 +523,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wineaudioio.drv.so %{_libdir}/wine/winedos.dll.so %{_libdir}/wine/wineoss.drv.so +%{_libdir}/wine/winecoreaudio.drv.so %{_libdir}/wine/winex11.drv.so %{_libdir}/wine/wing.dll16 %{_libdir}/wine/wininet.dll.so @@ -649,6 +651,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Jun 09 2006 Andreas Bierfert +0.9.15-1 +- version upgrade + * Tue May 30 2006 Andreas Bierfert 0.9.14-1 - version upgrade From 86c0adaab1425273ee317754465db2dc2cc742f1 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 1 Jul 2006 08:30:56 +0000 Subject: [PATCH 036/161] - version upgrade - rename wine to wine-core - add wine meta package --- .cvsignore | 2 +- sources | 2 +- wine.spec | 73 +++++++++++++++++++++++++++++++++++++++--------------- 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/.cvsignore b/.cvsignore index 4cd20f0..5676fab 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.15-fe.tar.bz2 +wine-0.9.16-fe.tar.bz2 diff --git a/sources b/sources index 32c8a97..c2d4eed 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -12d525c601068e0ee2b875b74b471c26 wine-0.9.15-fe.tar.bz2 +80cd252091082fbc9f0a57fc35e79877 wine-0.9.16-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 488b488..3f4eb93 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.15 +Version: 0.9.16 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.15-fe.tar.bz2 +Source0: wine-0.9.16-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -59,12 +59,16 @@ BuildRequires: libXi-devel # dbus/hal >= FC5 BuildRequires: dbus-devel hal-devel -Requires: %{_bindir}/xmessage +Requires: wine-core = %{version}-%{release} +Requires: wine-capi = %{version}-%{release} +Requires: wine-cms = %{version}-%{release} +Requires: wine-esd = %{version}-%{release} +Requires: wine-jack = %{version}-%{release} +Requires: wine-ldap = %{version}-%{release} +Requires: wine-nas = %{version}-%{release} +Requires: wine-tools = %{version}-%{release} +Requires: wine-twain = %{version}-%{release} -Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, -Requires(post): /usr/bin/update-desktop-database -Requires(preun): /sbin/chkconfig, /sbin/service -Requires(postun): /sbin/ldconfig, /usr/bin/update-desktop-database %description While Wine is usually thought of as a Windows(TM) emulator, the Wine @@ -74,10 +78,27 @@ which allows unmodified Windows 3.x/9x/NT binaries to run on x86 and x86_64 Unixes. Wine does not require MS Windows, but it can use native system .dll files if they are available. +In Fedora Extras wine is actually a meta-package which will install everything +you need for wine to work smoothly. If you don't want to install everything +take a look at the wine-* packages. + +%package core +Summary: Wine core package +Group: Applications/Emulators +Requires: %{_bindir}/xmessage +Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, +Requires(post): /usr/bin/update-desktop-database +Requires(preun): /sbin/chkconfig, /sbin/service +Requires(postun): /sbin/ldconfig, /usr/bin/update-desktop-database +Obsoletes: wine <= 0.9.15-1%{?dist} + +%description core +Wine core package includes the basic wine stuff needed by all other packages. + %package tools Summary: Additional wine tools Group: Applications/Emulators -Requires: %{name} = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description tools Additional wine tools @@ -85,7 +106,7 @@ Additional wine tools %package arts Summary: Arts sound support for wine Group: System Environment/Libraries -Requires: wine = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description arts Arts sound support for wine @@ -93,7 +114,7 @@ Arts sound support for wine %package esd Summary: ESD sound support for wine Group: System Environment/Libraries -Requires: wine = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description esd ESD sound support for wine @@ -101,7 +122,7 @@ ESD sound support for wine %package jack Summary: JACK sound support for wine Group: System Environment/Libraries -Requires: wine = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description jack JACK sound support for wine @@ -109,7 +130,7 @@ JACK sound support for wine %package nas Summary: NAS sound support for wine Group: System Environment/Libraries -Requires: wine = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description nas JACK sound support for wine @@ -117,7 +138,7 @@ JACK sound support for wine %package ldap Summary: LDAP support for wine Group: System Environment/Libraries -Requires: wine = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description ldap LDAP support for wine @@ -125,7 +146,7 @@ LDAP support for wine %package cms Summary: Color Managment for wine Group: System Environment/Libraries -Requires: wine = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description cms Color Management for wine @@ -133,7 +154,7 @@ Color Management for wine %package twain Summary: Twain support for wine Group: System Environment/Libraries -Requires: wine = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description twain Twain support for wine @@ -141,7 +162,7 @@ Twain support for wine %package capi Summary: ISDN support for wine Group: System Environment/Libraries -Requires: wine = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description capi ISDN support for wine @@ -149,7 +170,7 @@ ISDN support for wine %package devel Summary: Wine development environment Group: System Environment/Libraries -Requires: wine = %{version}-%{release} +Requires: wine-core = %{version}-%{release} %description devel Header, include files and library definition files for developing applications @@ -242,7 +263,7 @@ install -p -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ %clean rm -rf %{buildroot} -%post +%post core /sbin/ldconfig update-desktop-database &>/dev/null || : if [ $1 = 1 ]; then @@ -251,13 +272,13 @@ if [ $1 = 1 ]; then /sbin/service wine start &>/dev/null || : fi -%preun +%preun core if [ $1 = 0 ]; then /sbin/service wine stop >/dev/null 2>&1 /sbin/chkconfig --del wine fi -%postun +%postun core /sbin/ldconfig update-desktop-database &>/dev/null || : @@ -287,6 +308,9 @@ update-desktop-database &>/dev/null || : %files %defattr(-,root,root,-) + +%files core +%defattr(-,root,root,-) %doc ANNOUNCE COPYING.LIB ChangeLog DEVELOPERS-HINTS LICENSE LICENSE.OLD %doc AUTHORS README-Fedora README VERSION %doc documentation/* @@ -304,6 +328,7 @@ update-desktop-database &>/dev/null || : %{_initrddir}/wine %{_libdir}/wine/expand.exe.so %{_libdir}/wine/msiexec.exe.so +%{_libdir}/wine/oleview.exe.so %{_libdir}/wine/regedit.exe.so %{_libdir}/wine/regsvr32.exe.so %{_libdir}/wine/rpcss.exe.so @@ -350,6 +375,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/comm.drv16 %{_libdir}/wine/commdlg.dll16 %{_libdir}/wine/compobj.dll16 +%{_libdir}/wine/compstui.dll.so %{_libdir}/wine/crtdll.dll.so %{_libdir}/wine/crypt32.dll.so %{_libdir}/wine/cryptdll.dll.so @@ -399,6 +425,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/imagehlp.dll.so %{_libdir}/wine/imm.dll16 %{_libdir}/wine/imm32.dll.so +%{_libdir}/wine/inseng.dll.so %{_libdir}/wine/iphlpapi.dll.so %{_libdir}/wine/itss.dll.so %{_libdir}/wine/joystick.drv.so @@ -651,6 +678,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Thu Jun 29 2006 Andreas Bierfert +0.9.16-1 +- version upgrade +- rename wine to wine-core +- add meta package wine + * Fri Jun 09 2006 Andreas Bierfert 0.9.15-1 - version upgrade From 005f1cf7c06c0d05ed45784e5016af95bd63360c Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 10 Jul 2006 21:43:39 +0000 Subject: [PATCH 037/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index 5676fab..abb8255 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.16-fe.tar.bz2 +wine-0.9.17-fe.tar.bz2 diff --git a/sources b/sources index c2d4eed..cdc97fc 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -80cd252091082fbc9f0a57fc35e79877 wine-0.9.16-fe.tar.bz2 +4f82aaaa09d456401ec72cf36581ef76 wine-0.9.17-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 3f4eb93..71d670a 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.16 +Version: 0.9.17 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.16-fe.tar.bz2 +Source0: wine-0.9.17-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -379,6 +379,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/crtdll.dll.so %{_libdir}/wine/crypt32.dll.so %{_libdir}/wine/cryptdll.dll.so +%{_libdir}/wine/cryptnet.dll.so %{_libdir}/wine/ctl3d.dll16 %{_libdir}/wine/ctl3d32.dll.so %{_libdir}/wine/ctl3dv2.dll16 @@ -495,6 +496,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/psapi.dll.so %{_libdir}/wine/qcap.dll.so %{_libdir}/wine/quartz.dll.so +%{_libdir}/wine/query.dll.so %{_libdir}/wine/rasapi16.dll16 %{_libdir}/wine/rasapi32.dll.so %{_libdir}/wine/riched20.dll.so @@ -678,6 +680,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Jul 10 2006 Andreas Bierfert +0.9.17-1 +- version upgrade + * Thu Jun 29 2006 Andreas Bierfert 0.9.16-1 - version upgrade From 39a62212e28cc32aaadf2ee668fd7678e7d67fe9 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 21 Aug 2006 07:40:56 +0000 Subject: [PATCH 038/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 17 +++++++++++++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.cvsignore b/.cvsignore index abb8255..e579db3 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.17-fe.tar.bz2 +wine-0.9.19-fe.tar.bz2 diff --git a/sources b/sources index cdc97fc..b0e4c67 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -4f82aaaa09d456401ec72cf36581ef76 wine-0.9.17-fe.tar.bz2 +d903695182690587f44a251059532296 wine-0.9.19-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 71d670a..141260b 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.17 +Version: 0.9.19 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.17-fe.tar.bz2 +Source0: wine-0.9.19-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -354,8 +354,7 @@ update-desktop-database &>/dev/null || : %{_bindir}/winelauncher %{_bindir}/wineserver %{_mandir}/man1/wineserver.1* -%{_libdir}/libwine.so.1 -%{_libdir}/libwine_unicode.so.1 +%{_libdir}/libwine.so.1.0 %dir %{_libdir}/wine %{_libdir}/wine/activeds.dll.so %{_libdir}/wine/advapi32.dll.so @@ -415,6 +414,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/gdi.exe16 %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gphoto2.ds.so +%{_libdir}/wine/hid.dll.so %{_libdir}/wine/hh.exe.so %{_libdir}/wine/hlink.dll.so %{_libdir}/wine/hhctrl.ocx.so @@ -426,6 +426,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/imagehlp.dll.so %{_libdir}/wine/imm.dll16 %{_libdir}/wine/imm32.dll.so +%{_libdir}/wine/infosoft.dll.so %{_libdir}/wine/inseng.dll.so %{_libdir}/wine/iphlpapi.dll.so %{_libdir}/wine/itss.dll.so @@ -680,6 +681,14 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Aug 21 2006 Andreas Bierfert +0.9.19-1 +- version upgrade + +* Thu Aug 03 2006 Andreas Bierfert +0.9.18-1 +- version upgrade + * Mon Jul 10 2006 Andreas Bierfert 0.9.17-1 - version upgrade From 80fe9235ab66b5b2fef5332d8b349f4dec1bc222 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 22 Aug 2006 09:19:58 +0000 Subject: [PATCH 039/161] - fix filesection --- wine.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index 141260b..569f9fd 100644 --- a/wine.spec +++ b/wine.spec @@ -354,7 +354,7 @@ update-desktop-database &>/dev/null || : %{_bindir}/winelauncher %{_bindir}/wineserver %{_mandir}/man1/wineserver.1* -%{_libdir}/libwine.so.1.0 +%{_libdir}/libwine.so.1* %dir %{_libdir}/wine %{_libdir}/wine/activeds.dll.so %{_libdir}/wine/advapi32.dll.so From 9c3853fb53dda1a5becc01ca86955d26527f6ac2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sun, 27 Aug 2006 21:14:30 +0000 Subject: [PATCH 040/161] http://fedoraproject.org/wiki/Extras/Schedule/FC6MassRebuild --- needs.rebuild | 1 + 1 file changed, 1 insertion(+) create mode 100644 needs.rebuild diff --git a/needs.rebuild b/needs.rebuild new file mode 100644 index 0000000..815fd29 --- /dev/null +++ b/needs.rebuild @@ -0,0 +1 @@ +http://fedoraproject.org/wiki/Extras/Schedule/FC6MassRebuild From c3ef9fb200603bcf982b12e53eacc77c57bd2c71 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 30 Aug 2006 09:26:04 +0000 Subject: [PATCH 041/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-rpath.patch | 54 ++++++++++++++++++++++-------------------------- wine.spec | 12 ++++++++--- 4 files changed, 36 insertions(+), 34 deletions(-) diff --git a/.cvsignore b/.cvsignore index e579db3..3ed4014 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.19-fe.tar.bz2 +wine-0.9.20-fe.tar.bz2 diff --git a/sources b/sources index b0e4c67..86bae22 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -d903695182690587f44a251059532296 wine-0.9.19-fe.tar.bz2 +8128be3146ab2586ebdc7469792aba62 wine-0.9.20-fe.tar.bz2 diff --git a/wine-rpath.patch b/wine-rpath.patch index 14c0e37..a607ada 100644 --- a/wine-rpath.patch +++ b/wine-rpath.patch @@ -1,6 +1,6 @@ ---- configure.orig 2006-04-15 00:02:02.000000000 +0200 -+++ configure 2006-04-15 00:03:26.000000000 +0200 -@@ -13375,7 +13375,7 @@ +--- configure.orig 2006-08-28 06:44:28.000000000 +0200 ++++ configure 2006-08-28 06:46:41.000000000 +0200 +@@ -15903,7 +15903,7 @@ echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_wine_try_cflags_saved=$CFLAGS @@ -9,33 +9,29 @@ cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF -@@ -13427,9 +13427,9 @@ - echo "${ECHO_T}$ac_cv_ld_rpath" >&6 - if test "$ac_cv_ld_rpath" = "yes" - then -- LDEXERPATH="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" -+ LDEXERPATH="" +@@ -15969,7 +15969,7 @@ + echo "${ECHO_T}$ac_cv_ld_rpath" >&6; } + if test "$ac_cv_ld_rpath" = "yes" + then +- LDEXERPATH="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" ++ LDEXERPATH="" -- LDDLLRPATH="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(dlldir) \$(libdir)\`" -+ LDDLLRPATH="" + fi - fi +--- configure.ac.orig 2006-08-28 06:43:35.000000000 +0200 ++++ configure.ac 2006-08-28 06:44:22.000000000 +0200 +@@ -1121,14 +1121,6 @@ + AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"]) + fi ---- configure.ac.orig 2006-04-15 00:15:32.000000000 +0200 -+++ configure.ac 2006-04-15 00:04:51.000000000 +0200 -@@ -1052,15 +1052,6 @@ - AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"]) - fi - -- AC_CACHE_CHECK([whether the linker accepts --rpath], ac_cv_ld_rpath, -- [WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], -- ac_cv_ld_rpath="yes",ac_cv_ld_rpath="no")]) -- if test "$ac_cv_ld_rpath" = "yes" -- then -- AC_SUBST(LDEXERPATH,["-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"]) -- AC_SUBST(LDDLLRPATH,["-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(dlldir) \$(libdir)\`"]) -- fi +- AC_CACHE_CHECK([whether the linker accepts --rpath], ac_cv_ld_rpath, +- [WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], +- ac_cv_ld_rpath="yes",ac_cv_ld_rpath="no")]) +- if test "$ac_cv_ld_rpath" = "yes" +- then +- AC_SUBST(LDEXERPATH,["-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"]) +- fi - - case $host_cpu in - *i[[3456789]]86*) - AC_CACHE_CHECK([whether we can relocate the executable to 0x7bf00000], ac_cv_ld_reloc_exec, + case $host_cpu in + *i[[3456789]]86* | x86_64) + AC_CACHE_CHECK([whether we can relocate the executable to 0x7bf00000], ac_cv_ld_reloc_exec, diff --git a/wine.spec b/wine.spec index 569f9fd..a57e5f7 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.19 +Version: 0.9.20 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.19-fe.tar.bz2 +Source0: wine-0.9.20-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -311,7 +311,7 @@ update-desktop-database &>/dev/null || : %files core %defattr(-,root,root,-) -%doc ANNOUNCE COPYING.LIB ChangeLog DEVELOPERS-HINTS LICENSE LICENSE.OLD +%doc ANNOUNCE COPYING.LIB ChangeLog LICENSE LICENSE.OLD %doc AUTHORS README-Fedora README VERSION %doc documentation/* %{_bindir}/msiexec @@ -322,6 +322,7 @@ update-desktop-database &>/dev/null || : %{_bindir}/winebrowser %{_bindir}/wineconsole %{_bindir}/wineprefixcreate +%{_mandir}/man1/wineprefixcreate.1* %{_bindir}/wineshelllink %{_bindir}/winecfg %{_bindir}/uninstaller @@ -495,6 +496,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/olesvr32.dll.so %{_libdir}/wine/powrprof.dll.so %{_libdir}/wine/psapi.dll.so +%{_libdir}/wine/pstorec.dll.so %{_libdir}/wine/qcap.dll.so %{_libdir}/wine/quartz.dll.so %{_libdir}/wine/query.dll.so @@ -681,6 +683,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Aug 28 2006 Andreas Bierfert +0.9.20-1 +- version upgrade + * Mon Aug 21 2006 Andreas Bierfert 0.9.19-1 - version upgrade From 46f31ca540831f050210e647983268649d9827c8 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 17 Sep 2006 14:15:07 +0000 Subject: [PATCH 042/161] - version upgrade - own datadir/wine (#206403) - do not include huge changelogs (#204302) --- .cvsignore | 2 +- sources | 2 +- wine-rpath.patch | 51 ++++++++++++++++++++++++++---------------------- wine.spec | 19 +++++++++++++----- 4 files changed, 44 insertions(+), 30 deletions(-) diff --git a/.cvsignore b/.cvsignore index 3ed4014..c204368 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.20-fe.tar.bz2 +wine-0.9.21-fe.tar.bz2 diff --git a/sources b/sources index 86bae22..376be9a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -8128be3146ab2586ebdc7469792aba62 wine-0.9.20-fe.tar.bz2 +98232c907314f15b54d7f685ecfb5535 wine-0.9.21-fe.tar.bz2 diff --git a/wine-rpath.patch b/wine-rpath.patch index a607ada..c26b73c 100644 --- a/wine-rpath.patch +++ b/wine-rpath.patch @@ -1,6 +1,16 @@ ---- configure.orig 2006-08-28 06:44:28.000000000 +0200 -+++ configure 2006-08-28 06:46:41.000000000 +0200 -@@ -15903,7 +15903,7 @@ +--- configure.orig 2006-09-17 14:55:39.000000000 +0200 ++++ configure 2006-09-17 14:57:19.000000000 +0200 +@@ -15903,14 +15903,14 @@ + fi + + +- as_ac_var=`echo "ac_cv_cflags_-fPIC -Wl,--rpath,\$ORIGIN/../lib" | $as_tr_sh` +-{ echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib" >&5 +-echo $ECHO_N "checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib... $ECHO_C" >&6; } ++ as_ac_var=`echo "ac_cv_cflags_-fPIC" | $as_tr_sh` ++{ echo "$as_me:$LINENO: checking whether the compiler supports -fPIC" >&5 ++echo $ECHO_N "checking whether the compiler supports -fPIC$ECHO_C" >&6; } + if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else ac_wine_try_cflags_saved=$CFLAGS @@ -9,29 +19,24 @@ cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF -@@ -15969,7 +15969,7 @@ - echo "${ECHO_T}$ac_cv_ld_rpath" >&6; } - if test "$ac_cv_ld_rpath" = "yes" - then -- LDEXERPATH="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" -+ LDEXERPATH="" +@@ -15976,7 +15976,7 @@ + { echo "$as_me:$LINENO: result: $ac_res" >&5 + echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then +- LIBWINE_LDFLAGS="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" ++ LIBWINE_LDFLAGS="" + fi - fi ---- configure.ac.orig 2006-08-28 06:43:35.000000000 +0200 -+++ configure.ac 2006-08-28 06:44:22.000000000 +0200 -@@ -1121,14 +1121,6 @@ - AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"]) - fi +--- configure.ac.orig 2006-09-17 14:57:25.000000000 +0200 ++++ configure.ac 2006-09-17 14:58:03.000000000 +0200 +@@ -1058,9 +1058,6 @@ + WINE_TRY_CFLAGS([-fPIC -Wl,--export-dynamic], + [AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"])]) -- AC_CACHE_CHECK([whether the linker accepts --rpath], ac_cv_ld_rpath, -- [WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], -- ac_cv_ld_rpath="yes",ac_cv_ld_rpath="no")]) -- if test "$ac_cv_ld_rpath" = "yes" -- then -- AC_SUBST(LDEXERPATH,["-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"]) -- fi +- WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], +- [LIBWINE_LDFLAGS="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"]) - case $host_cpu in *i[[3456789]]86* | x86_64) - AC_CACHE_CHECK([whether we can relocate the executable to 0x7bf00000], ac_cv_ld_reloc_exec, + WINE_TRY_CFLAGS([-Wl,--section-start,.interp=0x7bf00400], diff --git a/wine.spec b/wine.spec index a57e5f7..6d482c0 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.20 +Version: 0.9.21 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.20-fe.tar.bz2 +Source0: wine-0.9.21-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -313,7 +313,8 @@ update-desktop-database &>/dev/null || : %defattr(-,root,root,-) %doc ANNOUNCE COPYING.LIB ChangeLog LICENSE LICENSE.OLD %doc AUTHORS README-Fedora README VERSION -%doc documentation/* +# do not include huge changelogs .OLD .ALPHA (#204302) +%doc documentation/README.* %{_bindir}/msiexec %{_bindir}/regedit %{_bindir}/regsvr32 @@ -342,6 +343,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winevdm.exe.so %{_libdir}/wine/winecfg.exe.so %{_libdir}/wine/uninstaller.exe.so +%dir %{_datadir}/wine %{_datadir}/applications/fedora-wine.desktop %{_datadir}/applications/fedora-wine-regedit.desktop %{_datadir}/applications/fedora-wine-uninstaller.desktop @@ -435,6 +437,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/kernel32.dll.so %{_libdir}/wine/keyboard.drv16 %{_libdir}/wine/krnl386.exe16 +%{_libdir}/wine/localspl.dll.so %{_libdir}/wine/lz32.dll.so %{_libdir}/wine/lzexpand.dll16 %{_libdir}/wine/mapi32.dll.so @@ -525,6 +528,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/sti.dll.so %{_libdir}/wine/storage.dll16 %{_libdir}/wine/stress.dll16 +%{_libdir}/wine/svrapi.dll.so %{_libdir}/wine/system.drv16 %{_libdir}/wine/tapi32.dll.so %{_libdir}/wine/toolhelp.dll16 @@ -595,7 +599,6 @@ update-desktop-database &>/dev/null || : %defattr(-,root,root,-) %{_bindir}/notepad %{_bindir}/progman -%{_bindir}/wcmd %{_bindir}/winedbg %{_bindir}/winedump %{_bindir}/winefile @@ -605,10 +608,10 @@ update-desktop-database &>/dev/null || : %{_bindir}/winhelp %{_libdir}/wine/explorer.exe.so %{_libdir}/wine/control.exe.so +%{_libdir}/wine/cmd.exe.so %{_libdir}/wine/notepad.exe.so %{_libdir}/wine/progman.exe.so %{_libdir}/wine/taskmgr.exe.so -%{_libdir}/wine/wcmd.exe.so %{_libdir}/wine/winedbg.exe.so %{_libdir}/wine/winefile.exe.so %{_libdir}/wine/winemine.exe.so @@ -683,6 +686,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Sep 17 2006 Andreas Bierfert +0.9.21-1 +- version upgrade +- own datadir/wine (#206403) +- do not include huge changelogs (#204302) + * Mon Aug 28 2006 Andreas Bierfert 0.9.20-1 - version upgrade From 43fe83e8552d231d580652df09157a17382cab6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Mon, 18 Sep 2006 18:55:13 +0000 Subject: [PATCH 043/161] Remove rebuild needed flag for maintained packages that were actually rebuilt. --- needs.rebuild | 1 - 1 file changed, 1 deletion(-) delete mode 100644 needs.rebuild diff --git a/needs.rebuild b/needs.rebuild deleted file mode 100644 index 815fd29..0000000 --- a/needs.rebuild +++ /dev/null @@ -1 +0,0 @@ -http://fedoraproject.org/wiki/Extras/Schedule/FC6MassRebuild From a4bd27758283a465e5857b4bccee5f9d00c289c3 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 3 Oct 2006 09:06:27 +0000 Subject: [PATCH 044/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index c204368..64ee131 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.21-fe.tar.bz2 +wine-0.9.22-fe.tar.bz2 diff --git a/sources b/sources index 376be9a..04dedfe 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -98232c907314f15b54d7f685ecfb5535 wine-0.9.21-fe.tar.bz2 +955338998d9fe4e0546212b97adbacd2 wine-0.9.22-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 6d482c0..5548d02 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.21 +Version: 0.9.22 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.21-fe.tar.bz2 +Source0: wine-0.9.22-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -371,6 +371,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/cards.dll.so %{_libdir}/wine/cfgmgr32.dll.so %{_libdir}/wine/clock.exe.so +%{_libdir}/wine/clusapi.dll.so %{_libdir}/wine/comcat.dll.so %{_libdir}/wine/comctl32.dll.so %{_libdir}/wine/comdlg32.dll.so @@ -475,6 +476,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msvideo.dll16 %{_libdir}/wine/mswsock.dll.so %{_libdir}/wine/msxml3.dll.so +%{_libdir}/wine/nddeapi.dll.so %{_libdir}/wine/netapi32.dll.so %{_libdir}/wine/newdev.dll.so %{_libdir}/wine/ntdll.dll.so @@ -686,6 +688,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Sep 30 2006 Andreas Bierfert +0.9.22-1 +- version upgrade + * Sun Sep 17 2006 Andreas Bierfert 0.9.21-1 - version upgrade From 1630957b6b021fbe2c278eb89db03e6f3f0ecbe4 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 18 Oct 2006 13:22:51 +0000 Subject: [PATCH 045/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index 64ee131..fb48511 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.22-fe.tar.bz2 +wine-0.9.23-fe.tar.bz2 diff --git a/sources b/sources index 04dedfe..9db52cc 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -955338998d9fe4e0546212b97adbacd2 wine-0.9.22-fe.tar.bz2 +6dd92d3645048f66c5026a021ead0b32 wine-0.9.23-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 5548d02..231a7f1 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.22 +Version: 0.9.23 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.22-fe.tar.bz2 +Source0: wine-0.9.23-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -458,6 +458,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msacm32.dll.so %{_libdir}/wine/msacm32.drv.so %{_libdir}/wine/msadp32.acm.so +%{_libdir}/wine/mscoree.dll.so %{_libdir}/wine/msdmo.dll.so %{_libdir}/wine/msftedit.dll.so %{_libdir}/wine/msg711.acm.so @@ -507,6 +508,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/query.dll.so %{_libdir}/wine/rasapi16.dll16 %{_libdir}/wine/rasapi32.dll.so +%{_libdir}/wine/resutils.dll.so %{_libdir}/wine/riched20.dll.so %{_libdir}/wine/riched32.dll.so %{_libdir}/wine/rpcrt4.dll.so @@ -688,6 +690,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Tue Oct 17 2006 Andreas Bierfert +0.9.23-1 +- version upgrade + * Sat Sep 30 2006 Andreas Bierfert 0.9.22-1 - version upgrade From 19b89fe9ac56ee3221b0aae8ab08287e55bbdb64 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 28 Oct 2006 05:51:35 +0000 Subject: [PATCH 046/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index fb48511..5d0a90d 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.23-fe.tar.bz2 +wine-0.9.24-fe.tar.bz2 diff --git a/sources b/sources index 9db52cc..e447940 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -6dd92d3645048f66c5026a021ead0b32 wine-0.9.23-fe.tar.bz2 +1e1e10bec1cac8f2021b7d7a3e3ef5bd wine-0.9.24-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 231a7f1..f75f38f 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.23 +Version: 0.9.24 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.23-fe.tar.bz2 +Source0: wine-0.9.24-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -51,6 +51,7 @@ BuildRequires: libX11-devel BuildRequires: mesa-libGL-devel mesa-libGLU-devel BuildRequires: libXxf86dga-devel libXxf86vm-devel BuildRequires: libXrandr-devel libXrender-devel libXext-devel +BuildRequires: libXinerama-devel BuildRequires: fontconfig-devel BuildRequires: giflib-devel BuildRequires: cups-devel @@ -690,6 +691,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Oct 28 2006 Andreas Bierfert +0.9.24-1 +- version upgrade + * Tue Oct 17 2006 Andreas Bierfert 0.9.23-1 - version upgrade From f8764d08b9a7bbad58c826419bc9506dd8bf3dcb Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 16 Nov 2006 07:55:23 +0000 Subject: [PATCH 047/161] - version upgrade - fix init script (#213230) - fix twain subpackage content (#213396) - create wine submenu (#205024) --- .cvsignore | 2 +- sources | 2 +- wine-README-Fedora | 23 +++++++++++++++-------- wine-notepad.desktop | 2 +- wine-regedit.desktop | 2 +- wine-uninstaller.desktop | 2 +- wine-winecfg.desktop | 2 +- wine-winefile.desktop | 2 +- wine-winhelp.desktop | 2 +- wine.init | 13 +++++++++---- wine.spec | 13 ++++++++++--- 11 files changed, 42 insertions(+), 23 deletions(-) diff --git a/.cvsignore b/.cvsignore index 5d0a90d..54245f2 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.24-fe.tar.bz2 +wine-0.9.25-fe.tar.bz2 diff --git a/sources b/sources index e447940..b77ed79 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -1e1e10bec1cac8f2021b7d7a3e3ef5bd wine-0.9.24-fe.tar.bz2 +4d26cc14b481f2ab7026c23d83086753 wine-0.9.25-fe.tar.bz2 diff --git a/wine-README-Fedora b/wine-README-Fedora index 05bf675..f0e5205 100644 --- a/wine-README-Fedora +++ b/wine-README-Fedora @@ -1,15 +1,22 @@ -Wine directory structure used in Fedora Core Linux: -=================================================== +Wine directory structure used in Fedora Linux: +============================================== -\${HOME}/.wine/drive_c is the root directory (aka C: drive) wine looks for by -default. It is created with (empty) C:\windows and C:\windows\system +${HOME}/.wine/drive_c is the root directory (aka C: drive) wine looks for it +by default. It is created with (empty) C:\windows and C:\windows\system directories, needed to operate Wine without an existing Windows -installation, if it doesn't already exists. +installation, if it does not already exist. If you want to use Wine with an existing Windows installation that is mounted, for example, in /mnt/windows-c, change the symlink -\${HOME}/.wine/dosdevices/c: to point to /mnt/windows-c instead of the +${HOME}/.wine/dosdevices/c: to point to /mnt/windows-c instead of the defaults set by installation. -If you do this, you can safely remove \${HOME}/.wine/drive_c. -(Alternatively, just mount your Windows partition to \${HOME}/.wine/drive_c.) +If you do this, you can safely remove ${HOME}/.wine/drive_c. +(Alternatively, just mount your Windows partition to ${HOME}/.wine/drive_c.) + +Wine bugs: +========== +If you find a bug, please take the time to move your ${HOME}/.wine directory +someplace and try with a fresh version (like mv ${HOME}/.wine{,-save}). If the +bug is still there look trough https://bugzilla.redhat.com and see if the bug +is already reported. In case it is not please report it. diff --git a/wine-notepad.desktop b/wine-notepad.desktop index fb9d815..6f9591c 100644 --- a/wine-notepad.desktop +++ b/wine-notepad.desktop @@ -5,4 +5,4 @@ Exec=notepad Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;System; +Categories=Application;Wine; diff --git a/wine-regedit.desktop b/wine-regedit.desktop index fd0c3c1..9a564da 100644 --- a/wine-regedit.desktop +++ b/wine-regedit.desktop @@ -5,4 +5,4 @@ Exec=regedit Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;System; +Categories=Application;Wine; diff --git a/wine-uninstaller.desktop b/wine-uninstaller.desktop index f75c319..ff8bcd5 100644 --- a/wine-uninstaller.desktop +++ b/wine-uninstaller.desktop @@ -5,4 +5,4 @@ Exec=uninstaller Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;System; +Categories=Application;Wine; diff --git a/wine-winecfg.desktop b/wine-winecfg.desktop index 3f27f5f..7650e93 100644 --- a/wine-winecfg.desktop +++ b/wine-winecfg.desktop @@ -5,4 +5,4 @@ Exec=winecfg Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;System; +Categories=Application;Wine; diff --git a/wine-winefile.desktop b/wine-winefile.desktop index 8ec2d4b..21a89fb 100644 --- a/wine-winefile.desktop +++ b/wine-winefile.desktop @@ -5,4 +5,4 @@ Exec=winefile Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;System; +Categories=Application;Wine; diff --git a/wine-winhelp.desktop b/wine-winhelp.desktop index 4f1ee4d..e964d69 100644 --- a/wine-winhelp.desktop +++ b/wine-winhelp.desktop @@ -5,4 +5,4 @@ Exec=winhelp Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;System; +Categories=Application;Wine; diff --git a/wine.init b/wine.init index 905eeff..275805c 100644 --- a/wine.init +++ b/wine.init @@ -11,10 +11,15 @@ RETVAL=0 start() { - echo -n $"Registering binary handler for Windows applications" - /sbin/modprobe binfmt_misc &>/dev/null - echo ':windows:M::MZ::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : - echo ':windowsPE:M::PE::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : +# fix bug on changing runlevels #213230 + if [ -e /proc/sys/fs/binfmt_misc/windows ]; then + echo -n $"Binary handler for Windows applications already registered" + else + echo -n $"Registering binary handler for Windows applications" + /sbin/modprobe binfmt_misc &>/dev/null + echo ':windows:M::MZ::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : + echo ':windowsPE:M::PE::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : + fi } stop() { diff --git a/wine.spec b/wine.spec index f75f38f..47c1f1b 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.24 +Version: 0.9.25 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.24-fe.tar.bz2 +Source0: wine-0.9.25-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -515,7 +515,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/rpcrt4.dll.so %{_libdir}/wine/rsabase.dll.so %{_libdir}/wine/rsaenh.dll.so -%{_libdir}/wine/sane.ds.so %{_libdir}/wine/secur32.dll.so %{_libdir}/wine/sensapi.dll.so %{_libdir}/wine/serialui.dll.so @@ -657,6 +656,7 @@ update-desktop-database &>/dev/null || : %defattr(-,root,root,-) %{_libdir}/wine/twain.dll16 %{_libdir}/wine/twain_32.dll.so +%{_libdir}/wine/sane.ds.so %files capi %defattr(-,root,root,-) @@ -691,6 +691,13 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Thu Nov 16 2006 Andreas Bierfert +0.9.25-1 +- version upgrade +- fix init script (#213230) +- fix twain subpackage content (#213396) +- create wine submenu (#205024) + * Sat Oct 28 2006 Andreas Bierfert 0.9.24-1 - version upgrade From 84976a90edd23e29779c77bf5389a82a0c7823db Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 19 Dec 2006 15:10:57 +0000 Subject: [PATCH 048/161] - version upgrade (#220130) - fix submenus (#216076) - fix BR (#217338) --- .cvsignore | 2 +- sources | 2 +- wine.directory | 5 +++++ wine.menu | 13 +++++++++++++ wine.spec | 33 +++++++++++++++++++++++++++++---- 5 files changed, 49 insertions(+), 6 deletions(-) create mode 100644 wine.directory create mode 100644 wine.menu diff --git a/.cvsignore b/.cvsignore index 54245f2..0706d61 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.25-fe.tar.bz2 +wine-0.9.27-fe.tar.bz2 diff --git a/sources b/sources index b77ed79..c684d5a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -4d26cc14b481f2ab7026c23d83086753 wine-0.9.25-fe.tar.bz2 +b5e45cfbdc969304192b2d689e1affa6 wine-0.9.27-fe.tar.bz2 diff --git a/wine.directory b/wine.directory new file mode 100644 index 0000000..634558e --- /dev/null +++ b/wine.directory @@ -0,0 +1,5 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Directory +Name=Wine +Icon=gnome-util.png diff --git a/wine.menu b/wine.menu new file mode 100644 index 0000000..2e5c4e0 --- /dev/null +++ b/wine.menu @@ -0,0 +1,13 @@ + + + Applications + + Wine + Wine.directory + + Wine + + + diff --git a/wine.spec b/wine.spec index 47c1f1b..a4a74c9 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.25 +Version: 0.9.27 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,10 +9,11 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.25-fe.tar.bz2 +Source0: wine-0.9.27-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf +# desktop stuff Source100: wine-notepad.desktop Source101: wine-regedit.desktop Source102: wine-uninstaller.desktop @@ -20,6 +21,9 @@ Source103: wine-winecfg.desktop Source104: wine-winefile.desktop Source105: wine-winemine.desktop Source106: wine-winhelp.desktop +# desktop dir +Source200: wine.menu +Source201: wine.directory Patch0: wine-prefixfonts.patch Patch1: wine-rpath.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -46,6 +50,9 @@ BuildRequires: sane-backends-devel BuildRequires: zlib-devel BuildRequires: desktop-file-utils BuildRequires: fontforge +BuildRequires: gphoto2 gphoto2-devel +#217338 +BuildRequires: isdn4k-utils-devel # modular x BuildRequires: libX11-devel BuildRequires: mesa-libGL-devel mesa-libGLU-devel @@ -205,8 +212,18 @@ mkdir -p %{buildroot}%{_sysconfdir}/wine # Allow users to launch Windows programs by just clicking on the .exe file... mkdir -p %{buildroot}%{_initrddir} -install -p -c -m 755 %SOURCE1 %{buildroot}%{_initrddir}/wine +install -p -c -m 755 %{SOURCE1} %{buildroot}%{_initrddir}/wine +# add wine dir to desktop +mkdir -p %{buildroot}%{_sysconfdir}/xdg/menus/applications-merged +install -p -m 644 %{SOURCE200} \ +%{buildroot}%{_sysconfdir}/xdg/menus/applications-merged/wine.menu +mkdir -p %{buildroot}%{_datadir}/desktop-directories +install -p -m 644 %{SOURCE201} \ +%{buildroot}%{_datadir}/desktop-directories/wine.directory + + +# install desktop files desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ @@ -349,6 +366,8 @@ update-desktop-database &>/dev/null || : %{_datadir}/applications/fedora-wine-regedit.desktop %{_datadir}/applications/fedora-wine-uninstaller.desktop %{_datadir}/applications/fedora-wine-winecfg.desktop +%{_datadir}/desktop-directories/wine.directory +%{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_mandir}/man1/wine.1.gz %{_datadir}/wine/generic.ppd %{_datadir}/wine/wine.inf @@ -520,6 +539,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/serialui.dll.so %{_libdir}/wine/setupapi.dll.so %{_libdir}/wine/setupx.dll16 +%{_libdir}/wine/shdoclc.dll.so %{_libdir}/wine/shdocvw.dll.so %{_libdir}/wine/shell.dll16 %{_libdir}/wine/shell32.dll.so @@ -592,7 +612,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/d3d9.dll.so %{_libdir}/wine/d3dx8.dll.so %{_libdir}/wine/glu32.dll.so -%{_libdir}/wine/glut32.dll.so %{_libdir}/wine/opengl32.dll.so %{_libdir}/wine/wined3d.dll.so %{_libdir}/wine/dnsapi.dll.so @@ -691,6 +710,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Dec 18 2006 Andreas Bierfert +0.9.27-1 +- version upgrade (#220130) +- fix submenus (#216076) +- fix BR (#217338) + * Thu Nov 16 2006 Andreas Bierfert 0.9.25-1 - version upgrade From 7de41022402209f3ed50d43e0ae90d0bcfc61dc0 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 11 Jan 2007 14:41:27 +0000 Subject: [PATCH 049/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 11 ++++++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index 0706d61..c590da0 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.27-fe.tar.bz2 +wine-0.9.29-fe.tar.bz2 diff --git a/sources b/sources index c684d5a..b503a8f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -b5e45cfbdc969304192b2d689e1affa6 wine-0.9.27-fe.tar.bz2 +88e9b0002fbe16fe7eefad8ac4c931ea wine-0.9.29-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index a4a74c9..71bd7cf 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.27 +Version: 0.9.29 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.27-fe.tar.bz2 +Source0: wine-0.9.29-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -413,6 +413,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dciman32.dll.so %{_libdir}/wine/ddeml.dll16 %{_libdir}/wine/ddraw.dll.so +%{_libdir}/wine/ddrawex.dll.so %{_libdir}/wine/devenum.dll.so %{_libdir}/wine/dinput.dll.so %{_libdir}/wine/dinput8.dll.so @@ -454,7 +455,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/inseng.dll.so %{_libdir}/wine/iphlpapi.dll.so %{_libdir}/wine/itss.dll.so -%{_libdir}/wine/joystick.drv.so %{_libdir}/wine/kernel32.dll.so %{_libdir}/wine/keyboard.drv16 %{_libdir}/wine/krnl386.exe16 @@ -584,6 +584,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winedos.dll.so %{_libdir}/wine/wineoss.drv.so %{_libdir}/wine/winecoreaudio.drv.so +%{_libdir}/wine/winejoystick.drv.so %{_libdir}/wine/winex11.drv.so %{_libdir}/wine/wing.dll16 %{_libdir}/wine/wininet.dll.so @@ -710,6 +711,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Thu Jan 11 2007 Andreas Bierfert +0.9.29-1 +- version upgrade + * Mon Dec 18 2006 Andreas Bierfert 0.9.27-1 - version upgrade (#220130) From 0fc8753b1d1a522cdf3a3893cbcc28324fbeccc6 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 7 Feb 2007 09:33:07 +0000 Subject: [PATCH 050/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index c590da0..c3db92e 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.29-fe.tar.bz2 +wine-0.9.30-fe.tar.bz2 diff --git a/sources b/sources index b503a8f..4371b65 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -88e9b0002fbe16fe7eefad8ac4c931ea wine-0.9.29-fe.tar.bz2 +9a6530d13d26dcb8fe5c0d0ca88e87e8 wine-0.9.30-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 71bd7cf..b9d6a32 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.29 +Version: 0.9.30 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.29-fe.tar.bz2 +Source0: wine-0.9.30-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -399,6 +399,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/commdlg.dll16 %{_libdir}/wine/compobj.dll16 %{_libdir}/wine/compstui.dll.so +%{_libdir}/wine/credui.dll.so %{_libdir}/wine/crtdll.dll.so %{_libdir}/wine/crypt32.dll.so %{_libdir}/wine/cryptdll.dll.so @@ -539,6 +540,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/serialui.dll.so %{_libdir}/wine/setupapi.dll.so %{_libdir}/wine/setupx.dll16 +%{_libdir}/wine/sfc_os.dll.so %{_libdir}/wine/shdoclc.dll.so %{_libdir}/wine/shdocvw.dll.so %{_libdir}/wine/shell.dll16 @@ -711,6 +713,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Wed Feb 07 2007 Andreas Bierfert +0.9.30-1 +- version upgrade + * Thu Jan 11 2007 Andreas Bierfert 0.9.29-1 - version upgrade From cbc2f0bb528d3a9510c07e9ac6edcd5120d09335 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 18 Feb 2007 13:56:07 +0000 Subject: [PATCH 051/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index c3db92e..c7ae5e9 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.30-fe.tar.bz2 +wine-0.9.31-fe.tar.bz2 diff --git a/sources b/sources index 4371b65..a233c40 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -9a6530d13d26dcb8fe5c0d0ca88e87e8 wine-0.9.30-fe.tar.bz2 +cf03fffff7dcc1bdb86100fddad66b74 wine-0.9.31-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index b9d6a32..b64636b 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.30 +Version: 0.9.31 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -9,7 +9,7 @@ Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.30-fe.tar.bz2 +Source0: wine-0.9.31-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -387,6 +387,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/avicap32.dll.so %{_libdir}/wine/avifil32.dll.so %{_libdir}/wine/avifile.dll16 +%{_libdir}/wine/browseui.dll.so %{_libdir}/wine/cabinet.dll.so %{_libdir}/wine/cards.dll.so %{_libdir}/wine/cfgmgr32.dll.so @@ -713,6 +714,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Feb 17 2007 Andreas Bierfert +0.9.31-1 +- version upgrade + * Wed Feb 07 2007 Andreas Bierfert 0.9.30-1 - version upgrade From d0b98122fbb3d091df2e0344134e5c94868267fb Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 27 Feb 2007 16:16:39 +0000 Subject: [PATCH 052/161] - fix #230131 --- wine.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index b64636b..9801bf6 100644 --- a/wine.spec +++ b/wine.spec @@ -2,7 +2,7 @@ Name: wine Version: 0.9.31 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -714,6 +714,9 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Tue Feb 27 2007 Andreas Bierfert +- fix #230131 + * Sat Feb 17 2007 Andreas Bierfert 0.9.31-1 - version upgrade From 1d1c932d9874c7cfcdbf56b8d137fe02fd0f6a96 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 5 Mar 2007 08:16:42 +0000 Subject: [PATCH 053/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 13 ++++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index c7ae5e9..037889f 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.31-fe.tar.bz2 +wine-0.9.32-fe.tar.bz2 diff --git a/sources b/sources index a233c40..9c22918 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -cf03fffff7dcc1bdb86100fddad66b74 wine-0.9.31-fe.tar.bz2 +cc10e219935aa4e6f887e85293646b81 wine-0.9.32-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 9801bf6..53c50da 100644 --- a/wine.spec +++ b/wine.spec @@ -1,15 +1,15 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.31 -Release: 2%{?dist} +Version: 0.9.32 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff -Source0: wine-0.9.31-fe.tar.bz2 +Source0: wine-0.9.32-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -536,6 +536,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/rpcrt4.dll.so %{_libdir}/wine/rsabase.dll.so %{_libdir}/wine/rsaenh.dll.so +%{_libdir}/wine/schannel.dll.so %{_libdir}/wine/secur32.dll.so %{_libdir}/wine/sensapi.dll.so %{_libdir}/wine/serialui.dll.so @@ -590,6 +591,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winejoystick.drv.so %{_libdir}/wine/winex11.drv.so %{_libdir}/wine/wing.dll16 +%{_libdir}/wine/wing32.dll.so %{_libdir}/wine/wininet.dll.so %{_libdir}/wine/winmm.dll.so %{_libdir}/wine/winnls.dll16 @@ -714,7 +716,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Mar 04 2007 Andreas Bierfert +0.9.32-1 +- version upgrade + * Tue Feb 27 2007 Andreas Bierfert +0.9.31-2 - fix #230131 * Sat Feb 17 2007 Andreas Bierfert From 431f11c85e5d319e7bc1cd628d0a3ce390953d71 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 18 Apr 2007 07:58:23 +0000 Subject: [PATCH 054/161] - version upgrade (#234766) - sources file comments (#235232) - smpflags work again - drop arts sound driver package, as it is no longer part of wine sss: ---------------------------------------------------------------------- --- .cvsignore | 2 +- sources | 2 +- wine.directory | 2 +- wine.spec | 56 +++++++++++++++++++++++++++++++------------------- 4 files changed, 38 insertions(+), 24 deletions(-) diff --git a/.cvsignore b/.cvsignore index 037889f..15a2bb3 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.32-fe.tar.bz2 +wine-0.9.35-fe.tar.bz2 diff --git a/sources b/sources index 9c22918..2b64521 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -cc10e219935aa4e6f887e85293646b81 wine-0.9.32-fe.tar.bz2 +2fa5472a5191480e8039123b4377857e wine-0.9.35-fe.tar.bz2 diff --git a/wine.directory b/wine.directory index 634558e..9fdb800 100644 --- a/wine.directory +++ b/wine.directory @@ -2,4 +2,4 @@ Encoding=UTF-8 Type=Directory Name=Wine -Icon=gnome-util.png +Icon=wine diff --git a/wine.spec b/wine.spec index 53c50da..6091e72 100644 --- a/wine.spec +++ b/wine.spec @@ -1,15 +1,26 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.32 +Version: 0.9.35 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPL URL: http://www.winehq.org/ -# special fedora tarball without winemp3 stuff -Source0: wine-0.9.32-fe.tar.bz2 +# special fedora tarball without winemp3 stuff build doing +# rm -fr dlls/winemp3.acm +# and removing the following from the source tree (as of 0.9.35): +# +# configure:ac_config_files="$ac_config_files dlls/winemp3.acm/Makefile" +# configure: "dlls/winemp3.acm/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/winemp3.acm/Makefile" ;; +# configure.ac:AC_CONFIG_FILES([dlls/winemp3.acm/Makefile]) +# dlls/Makefile.in: winemp3.acm \ +# Makefile.in: dlls/winemp3.acm/Makefile \ +# Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules +# programs/winecfg/libraries.c: "winemp3.acm", + +Source0: wine-0.9.35-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -33,7 +44,6 @@ ExclusiveArch: %{ix86} BuildRequires: bison BuildRequires: flex BuildRequires: alsa-lib-devel -BuildRequires: arts-devel BuildRequires: audiofile-devel BuildRequires: esound-devel BuildRequires: freeglut-devel @@ -77,7 +87,6 @@ Requires: wine-nas = %{version}-%{release} Requires: wine-tools = %{version}-%{release} Requires: wine-twain = %{version}-%{release} - %description While Wine is usually thought of as a Windows(TM) emulator, the Wine developers would prefer that users thought of Wine as a Windows @@ -99,6 +108,7 @@ Requires(post): /usr/bin/update-desktop-database Requires(preun): /sbin/chkconfig, /sbin/service Requires(postun): /sbin/ldconfig, /usr/bin/update-desktop-database Obsoletes: wine <= 0.9.15-1%{?dist} +Obsoletes: wine-arts < 0.9.34 %description core Wine core package includes the basic wine stuff needed by all other packages. @@ -111,14 +121,6 @@ Requires: wine-core = %{version}-%{release} %description tools Additional wine tools -%package arts -Summary: Arts sound support for wine -Group: System Environment/Libraries -Requires: wine-core = %{version}-%{release} - -%description arts -Arts sound support for wine - %package esd Summary: ESD sound support for wine Group: System Environment/Libraries @@ -196,7 +198,7 @@ export CFLAGS="$RPM_OPT_FLAGS" --x-includes=%{_includedir} --x-libraries=%{_libdir} %{__make} depend -%{__make} +%{__make} %{?_smp_mflags} %install rm -rf %{buildroot} @@ -300,9 +302,6 @@ fi /sbin/ldconfig update-desktop-database &>/dev/null || : -%post arts -p /sbin/ldconfig -%postun arts -p /sbin/ldconfig - %post esd -p /sbin/ldconfig %postun esd -p /sbin/ldconfig @@ -432,6 +431,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dmusic32.dll.so %{_libdir}/wine/dplay.dll.so %{_libdir}/wine/dplayx.dll.so +%{_libdir}/wine/dpnaddr.dll.so %{_libdir}/wine/dpnet.dll.so %{_libdir}/wine/dpnhpast.dll.so %{_libdir}/wine/dsound.dll.so @@ -461,6 +461,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/keyboard.drv16 %{_libdir}/wine/krnl386.exe16 %{_libdir}/wine/localspl.dll.so +%{_libdir}/wine/localui.dll.so %{_libdir}/wine/lz32.dll.so %{_libdir}/wine/lzexpand.dll16 %{_libdir}/wine/mapi32.dll.so @@ -551,6 +552,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/shlwapi.dll.so %{_libdir}/wine/snmpapi.dll.so %{_libdir}/wine/sound.drv16 +%{_libdir}/wine/spoolsv.exe.so %{_libdir}/wine/stdole2.tlb.so %{_libdir}/wine/stdole32.tlb.so %{_libdir}/wine/sti.dll.so @@ -622,6 +624,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wined3d.dll.so %{_libdir}/wine/dnsapi.dll.so %{_libdir}/wine/iexplore.exe.so +%{_libdir}/wine/xcopy.exe.so %{_sysconfdir}/ld.so.conf.d/wine-32.conf %files tools @@ -653,10 +656,6 @@ update-desktop-database &>/dev/null || : %{_datadir}/applications/fedora-wine-winemine.desktop %{_datadir}/applications/fedora-wine-winhelp.desktop -%files arts -%defattr(-,root,root,-) -%{_libdir}/wine/winearts.drv.so - %files esd %defattr(-,root,root,-) %{_libdir}/wine/wineesd.drv.so @@ -716,6 +715,21 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Apr 16 2007 Andreas Bierfert +0.9.35-1 +- version upgrade (#234766) +- sources file comments (#235232) +- smpflags work again (mentioned by Marcin Zajczkowski) +- drop arts sound driver package, as it is no longer part of wine + +* Sun Apr 01 2007 Andreas Bierfert +0.9.34-1 +- version upgrade + +* Sat Mar 17 2007 Andreas Bierfert +0.9.33-1 +- version upgrade + * Sun Mar 04 2007 Andreas Bierfert 0.9.32-1 - version upgrade From ec350e4cfb05f5d695d88a2ad868a8ab7cae58bd Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 27 Apr 2007 23:01:37 +0000 Subject: [PATCH 055/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 18 ++++++++++++------ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/.cvsignore b/.cvsignore index 15a2bb3..c6480e5 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.35-fe.tar.bz2 +wine-0.9.36-fe.tar.bz2 diff --git a/sources b/sources index 2b64521..3d92c6e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -2fa5472a5191480e8039123b4377857e wine-0.9.35-fe.tar.bz2 +985fb75705f308563d326de55915c726 wine-0.9.36-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 6091e72..366d512 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.35 +Version: 0.9.36 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -20,7 +20,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.35-fe.tar.bz2 +Source0: wine-0.9.36-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -378,6 +378,7 @@ update-desktop-database &>/dev/null || : %{_mandir}/man1/wineserver.1* %{_libdir}/libwine.so.1* %dir %{_libdir}/wine +%{_libdir}/wine/acledit.dll.so %{_libdir}/wine/activeds.dll.so %{_libdir}/wine/advapi32.dll.so %{_libdir}/wine/advpack.dll.so @@ -559,6 +560,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/storage.dll16 %{_libdir}/wine/stress.dll16 %{_libdir}/wine/svrapi.dll.so +%{_libdir}/wine/sxs.dll.so %{_libdir}/wine/system.drv16 %{_libdir}/wine/tapi32.dll.so %{_libdir}/wine/toolhelp.dll16 @@ -715,6 +717,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Apr 28 2007 Andreas Bierfert +0.9.36-1 +- version upgrade + * Mon Apr 16 2007 Andreas Bierfert 0.9.35-1 - version upgrade (#234766) @@ -730,14 +736,14 @@ update-desktop-database &>/dev/null || : 0.9.33-1 - version upgrade -* Sun Mar 04 2007 Andreas Bierfert -0.9.32-1 -- version upgrade - * Tue Feb 27 2007 Andreas Bierfert 0.9.31-2 - fix #230131 +* Sun Mar 04 2007 Andreas Bierfert +0.9.32-1 +- version upgrade + * Sat Feb 17 2007 Andreas Bierfert 0.9.31-1 - version upgrade From 6e1ccdfba85c28d25b4387de396f6c628e517082 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 27 Apr 2007 23:03:50 +0000 Subject: [PATCH 056/161] - fix c&p --- wine.spec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wine.spec b/wine.spec index 366d512..b3caeff 100644 --- a/wine.spec +++ b/wine.spec @@ -736,14 +736,14 @@ update-desktop-database &>/dev/null || : 0.9.33-1 - version upgrade -* Tue Feb 27 2007 Andreas Bierfert -0.9.31-2 -- fix #230131 - * Sun Mar 04 2007 Andreas Bierfert 0.9.32-1 - version upgrade +* Tue Feb 27 2007 Andreas Bierfert +0.9.31-2 +- fix #230131 + * Sat Feb 17 2007 Andreas Bierfert 0.9.31-1 - version upgrade From a6247010a4c2d387380be0ed3c0bdfcd3bd35fbb Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 4 May 2007 07:15:27 +0000 Subject: [PATCH 057/161] - fix BR (#238774) - fix some typos --- wine.spec | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/wine.spec b/wine.spec index b3caeff..b0796f2 100644 --- a/wine.spec +++ b/wine.spec @@ -2,7 +2,7 @@ Name: wine Version: 0.9.36 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -56,6 +56,7 @@ BuildRequires: libxml2-devel BuildRequires: libxslt-devel BuildRequires: ncurses-devel BuildRequires: openldap-devel +BuildRequires: openssl-devel BuildRequires: sane-backends-devel BuildRequires: zlib-devel BuildRequires: desktop-file-utils @@ -143,7 +144,7 @@ Group: System Environment/Libraries Requires: wine-core = %{version}-%{release} %description nas -JACK sound support for wine +NAS sound support for wine %package ldap Summary: LDAP support for wine @@ -154,7 +155,7 @@ Requires: wine-core = %{version}-%{release} LDAP support for wine %package cms -Summary: Color Managment for wine +Summary: Color Management for wine Group: System Environment/Libraries Requires: wine-core = %{version}-%{release} @@ -717,6 +718,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Wed May 02 2007 Andreas Bierfert +0.9.36-2 +- fix BR (#238774) +- fix some typos + * Sat Apr 28 2007 Andreas Bierfert 0.9.36-1 - version upgrade From 8009fb66b91799cc1115bdb0412aba6474847fa9 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 3 Jun 2007 14:52:16 +0000 Subject: [PATCH 058/161] - version upgrade (#242087) - fix menu problem (#220723) - fix BR - clean up desktop file section - version upgrade - add BR for xcursor (#240648) - add desktop entry for wineboot (#240683) - add mime handler for msi files (#240682) - minor cleanups --- .cvsignore | 2 +- sources | 2 +- wine-mime-msi.desktop | 6 ++++ wine-rpath.patch | 26 +++++++------- wine-wineboot.desktop | 8 +++++ wine-wineshelllink.patch | 9 +++++ wine.spec | 74 +++++++++++++++++++++++++++++++--------- wineshelllink-fedora | 6 ++++ 8 files changed, 102 insertions(+), 31 deletions(-) create mode 100644 wine-mime-msi.desktop create mode 100644 wine-wineboot.desktop create mode 100644 wine-wineshelllink.patch create mode 100644 wineshelllink-fedora diff --git a/.cvsignore b/.cvsignore index c6480e5..2a02b77 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.36-fe.tar.bz2 +wine-0.9.38-fe.tar.bz2 diff --git a/sources b/sources index 3d92c6e..5a5776f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -985fb75705f308563d326de55915c726 wine-0.9.36-fe.tar.bz2 +3ad80c4edafd4d462568849889c032b9 wine-0.9.38-fe.tar.bz2 diff --git a/wine-mime-msi.desktop b/wine-mime-msi.desktop new file mode 100644 index 0000000..7e6d984 --- /dev/null +++ b/wine-mime-msi.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Type=Application +Name=Windows Installer File +Encoding=UTF-8 +Exec=wine %f +MimeType=application/x-ole-storage;text/mspg-legacyinfo diff --git a/wine-rpath.patch b/wine-rpath.patch index c26b73c..288a503 100644 --- a/wine-rpath.patch +++ b/wine-rpath.patch @@ -1,6 +1,6 @@ ---- configure.orig 2006-09-17 14:55:39.000000000 +0200 -+++ configure 2006-09-17 14:57:19.000000000 +0200 -@@ -15903,14 +15903,14 @@ +--- configure.orig 2007-05-23 10:59:34.000000000 +0200 ++++ configure 2007-05-23 11:02:05.000000000 +0200 +@@ -13596,14 +13596,14 @@ fi @@ -9,7 +9,7 @@ -echo $ECHO_N "checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib... $ECHO_C" >&6; } + as_ac_var=`echo "ac_cv_cflags_-fPIC" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking whether the compiler supports -fPIC" >&5 -+echo $ECHO_N "checking whether the compiler supports -fPIC$ECHO_C" >&6; } ++echo $ECHO_N "checking whether the compiler supports -fPIC $ECHO_C" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then echo $ECHO_N "(cached) $ECHO_C" >&6 else @@ -19,23 +19,25 @@ cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF -@@ -15976,7 +15976,7 @@ +@@ -13653,7 +13653,7 @@ { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then - LIBWINE_LDFLAGS="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" + LIBWINE_LDFLAGS="" - fi - - ---- configure.ac.orig 2006-09-17 14:57:25.000000000 +0200 -+++ configure.ac 2006-09-17 14:58:03.000000000 +0200 -@@ -1058,9 +1058,6 @@ + else + as_ac_var=`echo "ac_cv_cflags_-fPIC -Wl,-R,\$ORIGIN/../lib" | $as_tr_sh` + { echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 +--- configure.ac.orig 2007-05-23 10:59:39.000000000 +0200 ++++ configure.ac 2007-05-23 11:02:39.000000000 +0200 +@@ -1031,11 +1031,6 @@ WINE_TRY_CFLAGS([-fPIC -Wl,--export-dynamic], [AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"])]) - WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], -- [LIBWINE_LDFLAGS="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"]) +- [LIBWINE_LDFLAGS="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"], +- [WINE_TRY_CFLAGS([-fPIC -Wl,-R,\$ORIGIN/../lib], +- [LIBWINE_LDFLAGS="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"])]) - case $host_cpu in *i[[3456789]]86* | x86_64) diff --git a/wine-wineboot.desktop b/wine-wineboot.desktop new file mode 100644 index 0000000..9db3c2a --- /dev/null +++ b/wine-wineboot.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=wineboot +Comment=Simulate restart +Exec=wineboot +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=Application;Wine; diff --git a/wine-wineshelllink.patch b/wine-wineshelllink.patch new file mode 100644 index 0000000..0dd020c --- /dev/null +++ b/wine-wineshelllink.patch @@ -0,0 +1,9 @@ +--- tools/wineshelllink.orig 2007-06-03 12:56:07.000000000 +0200 ++++ tools/wineshelllink 2007-06-03 12:57:27.000000000 +0200 +@@ -231,4 +231,6 @@ + desktop_entry > "$desktop_target" + fi + ++exec /usr/bin/wineshelllink-fedora ++ + exit 0 diff --git a/wine.spec b/wine.spec index b0796f2..93f5e84 100644 --- a/wine.spec +++ b/wine.spec @@ -1,8 +1,8 @@ %define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables Name: wine -Version: 0.9.36 -Release: 2%{?dist} +Version: 0.9.38 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -20,7 +20,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.36-fe.tar.bz2 +Source0: wine-0.9.38-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -32,9 +32,19 @@ Source103: wine-winecfg.desktop Source104: wine-winefile.desktop Source105: wine-winemine.desktop Source106: wine-winhelp.desktop +Source107: wine-wineboot.desktop + # desktop dir Source200: wine.menu Source201: wine.directory + +# mime types +Source300: wine-mime-msi.desktop + +#enhancements +Source400: wineshelllink-fedora +Patch400: wine-wineshelllink.patch + Patch0: wine-prefixfonts.patch Patch1: wine-rpath.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -62,6 +72,7 @@ BuildRequires: zlib-devel BuildRequires: desktop-file-utils BuildRequires: fontforge BuildRequires: gphoto2 gphoto2-devel +BuildRequires: jack-audio-connection-kit-devel #217338 BuildRequires: isdn4k-utils-devel # modular x @@ -75,6 +86,7 @@ BuildRequires: giflib-devel BuildRequires: cups-devel BuildRequires: libXmu-devel BuildRequires: libXi-devel +BuildRequires: libXcursor-devel # dbus/hal >= FC5 BuildRequires: dbus-devel hal-devel @@ -105,9 +117,10 @@ Summary: Wine core package Group: Applications/Emulators Requires: %{_bindir}/xmessage Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, -Requires(post): /usr/bin/update-desktop-database +Requires(post): desktop-file-utils >= 0.8 Requires(preun): /sbin/chkconfig, /sbin/service -Requires(postun): /sbin/ldconfig, /usr/bin/update-desktop-database +Requires(postun): /sbin/ldconfig +Requires(postun): desktop-file-utils >= 0.8 Obsoletes: wine <= 0.9.15-1%{?dist} Obsoletes: wine-arts < 0.9.34 @@ -191,6 +204,7 @@ with the Wine Windows(TM) emulation libraries. %setup -q -n %{name}-%{version}-fe %patch0 %patch1 +%patch400 %build export CFLAGS="$RPM_OPT_FLAGS" @@ -230,57 +244,63 @@ install -p -m 644 %{SOURCE201} \ desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category=X-Fedora \ %{SOURCE100} desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category=X-Fedora \ %{SOURCE101} desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category=X-Fedora \ %{SOURCE102} desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category=X-Fedora \ %{SOURCE103} desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category=X-Fedora \ %{SOURCE104} desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category=X-Fedora \ %{SOURCE105} desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category=X-Fedora \ %{SOURCE106} desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ - --add-category=X-Fedora \ + %{SOURCE107} + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ --delete-original \ $RPM_BUILD_ROOT%{_datadir}/applications/wine.desktop +#mime-types +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + %{SOURCE300} + + cp %{SOURCE3} README-Fedora mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ install -p -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ +install -p -m755 %{SOURCE400} $RPM_BUILD_ROOT%{_bindir}/wineshelllink-fedora + %clean rm -rf %{buildroot} @@ -343,11 +363,14 @@ update-desktop-database &>/dev/null || : %{_bindir}/wineprefixcreate %{_mandir}/man1/wineprefixcreate.1* %{_bindir}/wineshelllink +%{_bindir}/wineshelllink-fedora %{_bindir}/winecfg %{_bindir}/uninstaller %{_initrddir}/wine %{_libdir}/wine/expand.exe.so %{_libdir}/wine/msiexec.exe.so +%{_libdir}/wine/net.exe.so +%{_libdir}/wine/ntoskrnl.exe.so %{_libdir}/wine/oleview.exe.so %{_libdir}/wine/regedit.exe.so %{_libdir}/wine/regsvr32.exe.so @@ -360,12 +383,15 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winemenubuilder.exe.so %{_libdir}/wine/winevdm.exe.so %{_libdir}/wine/winecfg.exe.so +%{_libdir}/wine/winedevice.exe.so %{_libdir}/wine/uninstaller.exe.so %dir %{_datadir}/wine +%{_datadir}/applications/fedora-wine-mime-msi.desktop %{_datadir}/applications/fedora-wine.desktop %{_datadir}/applications/fedora-wine-regedit.desktop %{_datadir}/applications/fedora-wine-uninstaller.desktop %{_datadir}/applications/fedora-wine-winecfg.desktop +%{_datadir}/applications/fedora-wine-wineboot.desktop %{_datadir}/desktop-directories/wine.directory %{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_mandir}/man1/wine.1.gz @@ -442,7 +468,9 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/eject.exe.so %{_libdir}/wine/gdi.exe16 %{_libdir}/wine/gdi32.dll.so +%{_libdir}/wine/gdiplus.dll.so %{_libdir}/wine/gphoto2.ds.so +%{_libdir}/wine/hal.dll.so %{_libdir}/wine/hid.dll.so %{_libdir}/wine/hh.exe.so %{_libdir}/wine/hlink.dll.so @@ -604,6 +632,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winsock.dll16 %{_libdir}/wine/winspool.drv.so %{_libdir}/wine/spoolss.dll.so +%{_libdir}/wine/winscard.dll.so %{_libdir}/wine/wintab.dll16 %{_libdir}/wine/wintab32.dll.so %{_libdir}/wine/wintrust.dll.so @@ -718,6 +747,21 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Jun 02 2007 Andreas Bierfert +0.9.38-1 +- version upgrade (#242087) +- fix menu problem (#220723) +- fix BR +- clean up desktop file section + +* Wed May 23 2007 Andreas Bierfert +0.9.37-1 +- version upgrade +- add BR for xcursor (#240648) +- add desktop entry for wineboot (#240683) +- add mime handler for msi files (#240682) +- minor cleanups + * Wed May 02 2007 Andreas Bierfert 0.9.36-2 - fix BR (#238774) @@ -746,10 +790,6 @@ update-desktop-database &>/dev/null || : 0.9.32-1 - version upgrade -* Tue Feb 27 2007 Andreas Bierfert -0.9.31-2 -- fix #230131 - * Sat Feb 17 2007 Andreas Bierfert 0.9.31-1 - version upgrade diff --git a/wineshelllink-fedora b/wineshelllink-fedora new file mode 100644 index 0000000..6473493 --- /dev/null +++ b/wineshelllink-fedora @@ -0,0 +1,6 @@ +#!/bin/sh + +for i in $HOME/.config/menus/applications-merged/*menu ; do + sed -i -e 's:wine-wine:Wine:g' \ + -e ':wine-wine:wine:g' "$i" +done From 24a9d7d85fd578e8d95cc921c980ca696c0f6206 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 3 Jun 2007 15:58:32 +0000 Subject: [PATCH 059/161] - allow full opt flags again - set ExclusiveArch to i386 for koji to only build i386 --- wine.spec | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/wine.spec b/wine.spec index 93f5e84..9903f98 100644 --- a/wine.spec +++ b/wine.spec @@ -1,8 +1,6 @@ -%define __global_cflags -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fno-stack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=pentium4 -fasynchronous-unwind-tables - Name: wine Version: 0.9.38 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -49,7 +47,7 @@ Patch0: wine-prefixfonts.patch Patch1: wine-rpath.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -ExclusiveArch: %{ix86} +ExclusiveArch: i386 BuildRequires: bison BuildRequires: flex @@ -747,6 +745,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Jun 03 2007 Andreas Bierfert +0.9.38-2 +- allow full opt flags again +- set ExclusiveArch to i386 for koji to only build i386 + * Sat Jun 02 2007 Andreas Bierfert 0.9.38-1 - version upgrade (#242087) From 14d6feaf1b0079599ac04e240f6f1a8166282652 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 6 Jun 2007 06:34:16 +0000 Subject: [PATCH 060/161] - fix description --- wine.spec | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/wine.spec b/wine.spec index 9903f98..67573c2 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 0.9.38 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -106,9 +106,9 @@ which allows unmodified Windows 3.x/9x/NT binaries to run on x86 and x86_64 Unixes. Wine does not require MS Windows, but it can use native system .dll files if they are available. -In Fedora Extras wine is actually a meta-package which will install everything -you need for wine to work smoothly. If you don't want to install everything -take a look at the wine-* packages. +In Fedora wine is a meta-package which will install everything needed for wine +to work smoothly. Smaller setups can be achieved by installing some of the +wine-* sub packages. %package core Summary: Wine core package @@ -745,6 +745,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Wed Jun 06 2007 Andreas Bierfert +0.9.38-3 +- fix description + * Sun Jun 03 2007 Andreas Bierfert 0.9.38-2 - allow full opt flags again From 98141b29f6cb6c6870a8b639d399e1c61f57cdf1 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 17 Jun 2007 09:39:31 +0000 Subject: [PATCH 061/161] - version upgrade - convert to utf8 (#244046) - fix mime entry (#243511) --- .cvsignore | 2 +- sources | 2 +- wine-mime-msi.desktop | 1 + wine.spec | 79 +++++++++++++++++++++++-------------------- 4 files changed, 46 insertions(+), 38 deletions(-) diff --git a/.cvsignore b/.cvsignore index 2a02b77..a1c534b 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.38-fe.tar.bz2 +wine-0.9.39-fe.tar.bz2 diff --git a/sources b/sources index 5a5776f..f7af00b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -3ad80c4edafd4d462568849889c032b9 wine-0.9.38-fe.tar.bz2 +4549b9643c8d858fc5c77cfe95d626c7 wine-0.9.39-fe.tar.bz2 diff --git a/wine-mime-msi.desktop b/wine-mime-msi.desktop index 7e6d984..e8cbe58 100644 --- a/wine-mime-msi.desktop +++ b/wine-mime-msi.desktop @@ -4,3 +4,4 @@ Name=Windows Installer File Encoding=UTF-8 Exec=wine %f MimeType=application/x-ole-storage;text/mspg-legacyinfo +Hidden=True diff --git a/wine.spec b/wine.spec index 67573c2..91f0dd7 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 0.9.38 -Release: 3%{?dist} +Version: 0.9.39 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.38-fe.tar.bz2 +Source0: wine-0.9.39-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -551,6 +551,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/olepro32.dll.so %{_libdir}/wine/olesvr.dll16 %{_libdir}/wine/olesvr32.dll.so +%{_libdir}/wine/pdh.dll.so %{_libdir}/wine/powrprof.dll.so %{_libdir}/wine/psapi.dll.so %{_libdir}/wine/pstorec.dll.so @@ -745,6 +746,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Jun 17 2007 Andreas Bierfert +- 0.9.39-1 +- version upgrade +- convert to utf8 (#244046) +- fix mime entry (#243511) + * Wed Jun 06 2007 Andreas Bierfert 0.9.38-3 - fix description @@ -782,7 +789,7 @@ update-desktop-database &>/dev/null || : 0.9.35-1 - version upgrade (#234766) - sources file comments (#235232) -- smpflags work again (mentioned by Marcin Zajczkowski) +- smpflags work again (mentioned by Marcin Zajączkowski) - drop arts sound driver package, as it is no longer part of wine * Sun Apr 01 2007 Andreas Bierfert @@ -1024,24 +1031,24 @@ update-desktop-database &>/dev/null || : 20050524-2 - fedorarized version -* Mon May 30 2005 Vincent Bron 20050524-1fc3 +* Mon May 30 2005 Vincent Béron 20050524-1fc3 - Update to 20050524 - Remove pdf documentation build as it's no more included in the main archive - Workaround for generic.ppd installation -* Tue Apr 19 2005 Vincent Bron 20050419-1fc3 +* Tue Apr 19 2005 Vincent Béron 20050419-1fc3 - Update to 20050419 -* Thu Mar 10 2005 Vincent Bron 20050310-1fc3 +* Thu Mar 10 2005 Vincent Béron 20050310-1fc3 - Update to 20050310 -* Sat Feb 12 2005 Vincent Bron 20050211-1fc3 +* Sat Feb 12 2005 Vincent Béron 20050211-1fc3 - Update to 20050211 -* Tue Jan 11 2005 Vincent Bron 20050111-1fc3 +* Tue Jan 11 2005 Vincent Béron 20050111-1fc3 - Update to 20050111 -* Wed Dec 1 2004 Vincent Bron 20041201-1fc3 +* Wed Dec 1 2004 Vincent Béron 20041201-1fc3 - Recompile for FC3 - Update to 20041201 - Small reorganization: @@ -1050,97 +1057,97 @@ update-desktop-database &>/dev/null || : - use Wine's generated stdole32.tlb file; - use Wine's generated fonts. -* Wed Oct 20 2004 Vincent Bron 20041019-1fc2 +* Wed Oct 20 2004 Vincent Béron 20041019-1fc2 - Update to 20041019 -* Wed Sep 15 2004 Vincent Bron 20040914-1fc2 +* Wed Sep 15 2004 Vincent Béron 20040914-1fc2 - Update to 20040914 -* Sat Aug 14 2004 Vincent Bron 20040813-1fc2 +* Sat Aug 14 2004 Vincent Béron 20040813-1fc2 - Update to 20040813 -* Sat Jul 17 2004 Vincent Bron 20040716-1fc2 +* Sat Jul 17 2004 Vincent Béron 20040716-1fc2 - Update to 20040716 -* Fri Jun 25 2004 Vincent Bron 20040615-1fc2 +* Fri Jun 25 2004 Vincent Béron 20040615-1fc2 - Recompile for FC2 - Backport from current CVS some fixes to the preloader to prevent a segfault on startup - Include a currently uncommitted patch from Alexandre Julliard regarding further issues with the preloader -* Sun Jun 20 2004 Vincent Bron 20040615-1fc1 +* Sun Jun 20 2004 Vincent Béron 20040615-1fc1 - Update to 20040615 - Use of wineprefixcreate instead of old RedHat patches -* Wed May 5 2004 Vincent Bron 20040505-1fc1 +* Wed May 5 2004 Vincent Béron 20040505-1fc1 - Update to 20040505 -* Fri Apr 9 2004 Vincent Bron 20040408-1fc1 +* Fri Apr 9 2004 Vincent Béron 20040408-1fc1 - Update to 20040408 - Change the handling of paths to DOS drives in the installation process -* Wed Mar 17 2004 Vincent Bron 20040309-1fc1 +* Wed Mar 17 2004 Vincent Béron 20040309-1fc1 - Update to 20040309 - Replaced winedefault.reg by wine.inf -* Wed Feb 18 2004 Vincent Bron 20040213-1fc1 +* Wed Feb 18 2004 Vincent Béron 20040213-1fc1 - Update to 20040213 - Moved Wine dlls back to %{_libdir}/wine rather than %{_libdir}/wine/wine -* Sun Jan 25 2004 Vincent Bron 20040121-fc1 +* Sun Jan 25 2004 Vincent Béron 20040121-fc1 - Update to 20040121 -* Sat Dec 13 2003 Vincent Bron 20031212-fc1 +* Sat Dec 13 2003 Vincent Béron 20031212-fc1 - Update to 20031212 -* Wed Nov 18 2003 Vincent Bron 20031118-fc1 +* Wed Nov 18 2003 Vincent Béron 20031118-fc1 - Update to 20031118 -* Thu Oct 16 2003 Vincent Bron 20031016-1rh9 +* Thu Oct 16 2003 Vincent Béron 20031016-1rh9 - Update to 20031016 -* Tue Sep 11 2003 Vincent Bron 20030911-1rh9 +* Tue Sep 11 2003 Vincent Béron 20030911-1rh9 - Fix of include location - Better separation of run-time and development files - Update to 20030911 -* Wed Aug 13 2003 Vincent Bron 20030813-1rh9 +* Wed Aug 13 2003 Vincent Béron 20030813-1rh9 - Update to 20030813 -* Wed Jul 09 2003 Vincent Bron 20030709-1rh9 +* Wed Jul 09 2003 Vincent Béron 20030709-1rh9 - Update to 20030709 -* Wed Jun 18 2003 Vincent Bron 20030618-1rh9 +* Wed Jun 18 2003 Vincent Béron 20030618-1rh9 - Change the default C drive to ~/.wine/c, copied from /usr/share/wine if non-existant (Thanks to Rudolf Kastl) - Updated to 20030618 -* Tue May 20 2003 Vincent Bron 20030508-1rh9 +* Tue May 20 2003 Vincent Béron 20030508-1rh9 - Adapted for RH9 -* Thu May 08 2003 Vincent Bron 20030508-1 +* Thu May 08 2003 Vincent Béron 20030508-1 - Add libraries definition files to devel package - Update to 20030508 -* Tue Apr 08 2003 Vincent Bron 20030408-1 +* Tue Apr 08 2003 Vincent Béron 20030408-1 - Update to 20030408 -* Tue Mar 18 2003 Vincent Bron 20030318-1 +* Tue Mar 18 2003 Vincent Béron 20030318-1 - Update to 20030318 -* Thu Mar 11 2003 Vincent Bron 20030219-2 +* Thu Mar 11 2003 Vincent Béron 20030219-2 - Fix the symlinks in wine-c. -* Wed Feb 19 2003 Vincent Bron 20030219-1 +* Wed Feb 19 2003 Vincent Béron 20030219-1 - Update to 20030129 - Various fixes in RPM build process -* Fri Jan 17 2003 Vincent Bron 20030115-1 +* Fri Jan 17 2003 Vincent Béron 20030115-1 - Update to 20030115 - fix to build problem -* Thu Nov 7 2002 Vincent Bron 20021031-1 +* Thu Nov 7 2002 Vincent Béron 20021031-1 - Update to 20021031 - Tweaks here and there From b79bf6571404457b4759660759558d984f3db8cb Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 17 Jun 2007 10:33:54 +0000 Subject: [PATCH 062/161] s/True/true/ --- wine-mime-msi.desktop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wine-mime-msi.desktop b/wine-mime-msi.desktop index e8cbe58..5a74ccf 100644 --- a/wine-mime-msi.desktop +++ b/wine-mime-msi.desktop @@ -4,4 +4,4 @@ Name=Windows Installer File Encoding=UTF-8 Exec=wine %f MimeType=application/x-ole-storage;text/mspg-legacyinfo -Hidden=True +Hidden=true From 99843536df423e76b7fca07df1079992429fae32 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 18 Jun 2007 09:49:09 +0000 Subject: [PATCH 063/161] - fix desktop entries --- wine-notepad.desktop | 2 +- wine-regedit.desktop | 2 +- wine-uninstaller.desktop | 2 +- wine-wineboot.desktop | 2 +- wine-winecfg.desktop | 2 +- wine-winefile.desktop | 2 +- wine-winhelp.desktop | 2 +- wine.spec | 6 +++++- 8 files changed, 12 insertions(+), 8 deletions(-) diff --git a/wine-notepad.desktop b/wine-notepad.desktop index 6f9591c..f341041 100644 --- a/wine-notepad.desktop +++ b/wine-notepad.desktop @@ -5,4 +5,4 @@ Exec=notepad Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;Wine; +Categories=X-Wine; diff --git a/wine-regedit.desktop b/wine-regedit.desktop index 9a564da..4b81843 100644 --- a/wine-regedit.desktop +++ b/wine-regedit.desktop @@ -5,4 +5,4 @@ Exec=regedit Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;Wine; +Categories=X-Wine; diff --git a/wine-uninstaller.desktop b/wine-uninstaller.desktop index ff8bcd5..b14fc70 100644 --- a/wine-uninstaller.desktop +++ b/wine-uninstaller.desktop @@ -5,4 +5,4 @@ Exec=uninstaller Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;Wine; +Categories=X-Wine; diff --git a/wine-wineboot.desktop b/wine-wineboot.desktop index 9db3c2a..3b29f99 100644 --- a/wine-wineboot.desktop +++ b/wine-wineboot.desktop @@ -5,4 +5,4 @@ Exec=wineboot Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;Wine; +Categories=X-Wine; diff --git a/wine-winecfg.desktop b/wine-winecfg.desktop index 7650e93..81c3b8d 100644 --- a/wine-winecfg.desktop +++ b/wine-winecfg.desktop @@ -5,4 +5,4 @@ Exec=winecfg Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;Wine; +Categories=X-Wine; diff --git a/wine-winefile.desktop b/wine-winefile.desktop index 21a89fb..43856d6 100644 --- a/wine-winefile.desktop +++ b/wine-winefile.desktop @@ -5,4 +5,4 @@ Exec=winefile Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;Wine; +Categories=X-Wine; diff --git a/wine-winhelp.desktop b/wine-winhelp.desktop index e964d69..c439c8a 100644 --- a/wine-winhelp.desktop +++ b/wine-winhelp.desktop @@ -5,4 +5,4 @@ Exec=winhelp Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;Wine; +Categories=X-Wine; diff --git a/wine.spec b/wine.spec index 91f0dd7..7cf295c 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 0.9.39 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -746,6 +746,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Jun 18 2007 Andreas Bierfert +- 0.9.39-2 +- fix desktop entries + * Sun Jun 17 2007 Andreas Bierfert - 0.9.39-1 - version upgrade From d1fcaa2d683fda3d553761580577fd694836c134 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 3 Jul 2007 14:22:29 +0000 Subject: [PATCH 064/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-rpath.patch | 54 ++++++++++++++++++++++++++++++++++++------------ wine.spec | 14 ++++++++++--- 4 files changed, 54 insertions(+), 18 deletions(-) diff --git a/.cvsignore b/.cvsignore index a1c534b..58dea30 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.39-fe.tar.bz2 +wine-0.9.40-fe.tar.bz2 diff --git a/sources b/sources index f7af00b..a071585 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -4549b9643c8d858fc5c77cfe95d626c7 wine-0.9.39-fe.tar.bz2 +746ae59ce3dc9634acc3a0b5967ec472 wine-0.9.40-fe.tar.bz2 diff --git a/wine-rpath.patch b/wine-rpath.patch index 288a503..24dbb9f 100644 --- a/wine-rpath.patch +++ b/wine-rpath.patch @@ -1,6 +1,6 @@ ---- configure.orig 2007-05-23 10:59:34.000000000 +0200 -+++ configure 2007-05-23 11:02:05.000000000 +0200 -@@ -13596,14 +13596,14 @@ +--- configure.orig 2007-07-03 14:31:05.000000000 +0200 ++++ configure 2007-07-03 14:37:20.000000000 +0200 +@@ -13606,14 +13606,14 @@ fi @@ -19,25 +19,53 @@ cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF -@@ -13653,7 +13653,7 @@ +@@ -13663,17 +13663,17 @@ { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then -- LIBWINE_LDFLAGS="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" -+ LIBWINE_LDFLAGS="" +- LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" +- LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" ++ LDRPATH_INSTALL="" ++ LDRPATH_LOCAL="" else - as_ac_var=`echo "ac_cv_cflags_-fPIC -Wl,-R,\$ORIGIN/../lib" | $as_tr_sh` - { echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 ---- configure.ac.orig 2007-05-23 10:59:39.000000000 +0200 -+++ configure.ac 2007-05-23 11:02:39.000000000 +0200 -@@ -1031,11 +1031,6 @@ +- as_ac_var=`echo "ac_cv_cflags_-fPIC -Wl,-R,\$ORIGIN/../lib" | $as_tr_sh` +-{ echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 +-echo $ECHO_N "checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib... $ECHO_C" >&6; } ++ as_ac_var=`echo "ac_cv_cflags_-fPIC" | $as_tr_sh` ++{ echo "$as_me:$LINENO: checking whether the compiler supports -fPIC" >&5 ++echo $ECHO_N "checking whether the compiler supports -fPIC $ECHO_C" >&6; } + if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 + else + ac_wine_try_cflags_saved=$CFLAGS +-CFLAGS="$CFLAGS -fPIC -Wl,-R,\$ORIGIN/../lib" ++CFLAGS="$CFLAGS -fPIC" + cat >conftest.$ac_ext <<_ACEOF + /* confdefs.h. */ + _ACEOF +@@ -13723,8 +13723,8 @@ + { echo "$as_me:$LINENO: result: $ac_res" >&5 + echo "${ECHO_T}$ac_res" >&6; } + if test `eval echo '${'$as_ac_var'}'` = yes; then +- LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" +- LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" ++ LDRPATH_INSTALL="" ++ LDRPATH_LOCAL="" + fi + + fi +--- configure.ac.orig 2007-07-03 14:37:34.000000000 +0200 ++++ configure.ac 2007-07-03 14:37:59.000000000 +0200 +@@ -1006,13 +1006,6 @@ WINE_TRY_CFLAGS([-fPIC -Wl,--export-dynamic], [AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"])]) - WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], -- [LIBWINE_LDFLAGS="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"], +- [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" +- LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine"], - [WINE_TRY_CFLAGS([-fPIC -Wl,-R,\$ORIGIN/../lib], -- [LIBWINE_LDFLAGS="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`"])]) +- [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" +- LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine"])]) - case $host_cpu in *i[[3456789]]86* | x86_64) diff --git a/wine.spec b/wine.spec index 7cf295c..bbc1872 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 0.9.39 -Release: 2%{?dist} +Version: 0.9.40 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.39-fe.tar.bz2 +Source0: wine-0.9.40-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -462,6 +462,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dpnhpast.dll.so %{_libdir}/wine/dsound.dll.so %{_libdir}/wine/dswave.dll.so +%{_libdir}/wine/dwmapi.dll.so %{_libdir}/wine/dxdiagn.dll.so %{_libdir}/wine/eject.exe.so %{_libdir}/wine/gdi.exe16 @@ -472,6 +473,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/hid.dll.so %{_libdir}/wine/hh.exe.so %{_libdir}/wine/hlink.dll.so +%{_libdir}/wine/hnetcfg.dll.so %{_libdir}/wine/hhctrl.ocx.so %{_libdir}/wine/iccvid.dll.so %{_libdir}/wine/icinfo.exe.so @@ -533,6 +535,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/newdev.dll.so %{_libdir}/wine/ntdll.dll.so %{_libdir}/wine/ntdsapi.dll.so +%{_libdir}/wine/ntprint.dll.so %{_libdir}/wine/objsel.dll.so %{_libdir}/wine/odbc32.dll.so %{_libdir}/wine/odbccp32.dll.so @@ -553,6 +556,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/olesvr32.dll.so %{_libdir}/wine/pdh.dll.so %{_libdir}/wine/powrprof.dll.so +%{_libdir}/wine/printui.dll.so %{_libdir}/wine/psapi.dll.so %{_libdir}/wine/pstorec.dll.so %{_libdir}/wine/qcap.dll.so @@ -746,6 +750,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Tue Jul 03 2007 Andreas Bierfert +- 0.9.40-1 +- version upgrade + * Mon Jun 18 2007 Andreas Bierfert - 0.9.39-2 - fix desktop entries From d8b2d2798f6b2dd265c406a1e5c1f253071b1c32 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 16 Jul 2007 18:38:16 +0000 Subject: [PATCH 065/161] - version upgrade - revert desktop 'fixes' for F-7 will, deal with it after upstream has changed desktop entries --- .cvsignore | 2 +- sources | 2 +- wine.spec | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index 58dea30..4bc50aa 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.40-fe.tar.bz2 +wine-0.9.41-fe.tar.bz2 diff --git a/sources b/sources index a071585..e97cefa 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -746ae59ce3dc9634acc3a0b5967ec472 wine-0.9.40-fe.tar.bz2 +d12653cff6d9496de331612e262b94b4 wine-0.9.41-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index bbc1872..173ef14 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.40 +Version: 0.9.41 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.40-fe.tar.bz2 +Source0: wine-0.9.41-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -433,6 +433,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/ctl3d.dll16 %{_libdir}/wine/ctl3d32.dll.so %{_libdir}/wine/ctl3dv2.dll16 +%{_libdir}/wine/d3d10.dll.so %{_libdir}/wine/d3dim.dll.so %{_libdir}/wine/d3drm.dll.so %{_libdir}/wine/d3dxof.dll.so @@ -750,6 +751,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Jul 16 2007 Andreas Bierfert +- 0.9.41-1 +- version upgrade + * Tue Jul 03 2007 Andreas Bierfert - 0.9.40-1 - version upgrade From 95618b92a53c1a065a3fad08abb2266aa7d9f826 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 28 Jul 2007 08:22:56 +0000 Subject: [PATCH 066/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index 4bc50aa..e4e4eb7 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.41-fe.tar.bz2 +wine-0.9.42-fe.tar.bz2 diff --git a/sources b/sources index e97cefa..b57a67c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -d12653cff6d9496de331612e262b94b4 wine-0.9.41-fe.tar.bz2 +83b7a278e86d669a6a7ee551f2041b05 wine-0.9.42-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 173ef14..cae40ac 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.41 +Version: 0.9.42 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.41-fe.tar.bz2 +Source0: wine-0.9.42-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -751,6 +751,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Jul 28 2007 Andreas Bierfert +- 0.9.42-1 +- version upgrade + * Mon Jul 16 2007 Andreas Bierfert - 0.9.41-1 - version upgrade From d25867b42c0a55420b412b6437ca73ecb32da7ef Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 18 Aug 2007 08:23:03 +0000 Subject: [PATCH 067/161] - version upgrade - fix init-script output (#252144) - add lsb stuff (#247096) --- .cvsignore | 2 +- sources | 2 +- wine-rpath.patch | 50 +++++++++++++----------------------------------- wine.init | 28 ++++++++++++++++++--------- wine.spec | 16 ++++++++++++++-- 5 files changed, 48 insertions(+), 50 deletions(-) diff --git a/.cvsignore b/.cvsignore index e4e4eb7..cc98382 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.42-fe.tar.bz2 +wine-0.9.43-fe.tar.bz2 diff --git a/sources b/sources index b57a67c..2d818ed 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -83b7a278e86d669a6a7ee551f2041b05 wine-0.9.42-fe.tar.bz2 +9fe7207a88c20617c3b558e5e2bab109 wine-0.9.43-fe.tar.bz2 diff --git a/wine-rpath.patch b/wine-rpath.patch index 24dbb9f..8b37fe3 100644 --- a/wine-rpath.patch +++ b/wine-rpath.patch @@ -1,6 +1,6 @@ ---- configure.orig 2007-07-03 14:31:05.000000000 +0200 -+++ configure 2007-07-03 14:37:20.000000000 +0200 -@@ -13606,14 +13606,14 @@ +--- configure.orig 2007-08-18 09:42:40.000000000 +0200 ++++ configure 2007-08-18 09:44:10.000000000 +0200 +@@ -8525,14 +8525,14 @@ fi @@ -19,44 +19,20 @@ cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF -@@ -13663,17 +13663,17 @@ +@@ -8582,8 +8582,8 @@ { echo "$as_me:$LINENO: result: $ac_res" >&5 echo "${ECHO_T}$ac_res" >&6; } if test `eval echo '${'$as_ac_var'}'` = yes; then - LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" - LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" + LDRPATH_INSTALL="" -+ LDRPATH_LOCAL="" ++ LDRPATH_LOCAL="" else -- as_ac_var=`echo "ac_cv_cflags_-fPIC -Wl,-R,\$ORIGIN/../lib" | $as_tr_sh` --{ echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 --echo $ECHO_N "checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib... $ECHO_C" >&6; } -+ as_ac_var=`echo "ac_cv_cflags_-fPIC" | $as_tr_sh` -+{ echo "$as_me:$LINENO: checking whether the compiler supports -fPIC" >&5 -+echo $ECHO_N "checking whether the compiler supports -fPIC $ECHO_C" >&6; } - if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 - else - ac_wine_try_cflags_saved=$CFLAGS --CFLAGS="$CFLAGS -fPIC -Wl,-R,\$ORIGIN/../lib" -+CFLAGS="$CFLAGS -fPIC" - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -13723,8 +13723,8 @@ - { echo "$as_me:$LINENO: result: $ac_res" >&5 - echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then -- LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" -- LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" -+ LDRPATH_INSTALL="" -+ LDRPATH_LOCAL="" - fi - - fi ---- configure.ac.orig 2007-07-03 14:37:34.000000000 +0200 -+++ configure.ac 2007-07-03 14:37:59.000000000 +0200 -@@ -1006,13 +1006,6 @@ + as_ac_var=`echo "ac_cv_cflags_-fPIC -Wl,-R,\$ORIGIN/../lib" | $as_tr_sh` + { echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 +--- configure.ac.orig 2007-08-18 09:44:15.000000000 +0200 ++++ configure.ac 2007-08-18 09:44:46.000000000 +0200 +@@ -439,13 +439,6 @@ WINE_TRY_CFLAGS([-fPIC -Wl,--export-dynamic], [AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"])]) @@ -67,6 +43,6 @@ - [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" - LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine"])]) - - case $host_cpu in - *i[[3456789]]86* | x86_64) - WINE_TRY_CFLAGS([-Wl,--section-start,.interp=0x7bf00400], + WINE_TRY_CFLAGS([-Wl,--enable-new-dtags], + [LDRPATH_INSTALL="$LDRPATH_INSTALL -Wl,--enable-new-dtags"]) + diff --git a/wine.init b/wine.init index 275805c..8162bb8 100644 --- a/wine.init +++ b/wine.init @@ -6,6 +6,14 @@ # chkconfig: 35 98 10 # description: Allow users to run Windows(tm) applications by just clicking \ # on them (or typing ./file.exe) +### BEGIN INIT INFO +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: start and stop wine binary handler +# Description: Allow users to run Windows(tm) applications by just clicking +# on them (or typing ./file.exe) +### END INIT INFO + . /etc/rc.d/init.d/functions RETVAL=0 @@ -15,22 +23,23 @@ start() { if [ -e /proc/sys/fs/binfmt_misc/windows ]; then echo -n $"Binary handler for Windows applications already registered" else - echo -n $"Registering binary handler for Windows applications" + echo -n $"Registering binary handler for Windows applications: " /sbin/modprobe binfmt_misc &>/dev/null echo ':windows:M::MZ::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : echo ':windowsPE:M::PE::/usr/bin/wine:' >/proc/sys/fs/binfmt_misc/register || : + RETVAL=$? + [ $RETVAL -eq 0 ] && success || failure fi + echo } stop() { - echo -n $"Unregistering binary handler for Windows applications" + echo -n $"Unregistering binary handler for Windows applications: " echo "-1" >/proc/sys/fs/binfmt_misc/windows || : echo "-1" >/proc/sys/fs/binfmt_misc/windowsPE || : -} - -reload() { - stop - start + RETVAL=$? + [ $RETVAL -eq 0 ] && success || failure + echo } wine_status() { @@ -58,14 +67,15 @@ case "$1" in stop start ;; - condrestart) + condrestart|try-restart) + if [ -e /proc/sys/fs/binfmt_misc/windows ]; then stop start fi ;; *) - echo $"Usage: $prog {start|stop|status|restart|condrestart}" + echo $"Usage: $prog {start|stop|status|restart|try-restart}" exit 1 esac exit $RETVAL diff --git a/wine.spec b/wine.spec index cae40ac..608544e 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.42 +Version: 0.9.43 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.42-fe.tar.bz2 +Source0: wine-0.9.43-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -461,11 +461,13 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dpnaddr.dll.so %{_libdir}/wine/dpnet.dll.so %{_libdir}/wine/dpnhpast.dll.so +%{_libdir}/wine/dpnlobby.dll.so %{_libdir}/wine/dsound.dll.so %{_libdir}/wine/dswave.dll.so %{_libdir}/wine/dwmapi.dll.so %{_libdir}/wine/dxdiagn.dll.so %{_libdir}/wine/eject.exe.so +%{_libdir}/wine/faultrep.dll.so %{_libdir}/wine/gdi.exe16 %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gdiplus.dll.so @@ -485,6 +487,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/imm.dll16 %{_libdir}/wine/imm32.dll.so %{_libdir}/wine/infosoft.dll.so +%{_libdir}/wine/inkobj.dll.so %{_libdir}/wine/inseng.dll.so %{_libdir}/wine/iphlpapi.dll.so %{_libdir}/wine/itss.dll.so @@ -517,6 +520,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msftedit.dll.so %{_libdir}/wine/msg711.acm.so %{_libdir}/wine/mshtml.dll.so +%{_libdir}/wine/mshtml.tlb.so %{_libdir}/wine/msi.dll.so %{_libdir}/wine/msimg32.dll.so %{_libdir}/wine/msisys.ocx.so @@ -629,6 +633,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winex11.drv.so %{_libdir}/wine/wing.dll16 %{_libdir}/wine/wing32.dll.so +%{_libdir}/wine/winhttp.dll.so %{_libdir}/wine/wininet.dll.so %{_libdir}/wine/winmm.dll.so %{_libdir}/wine/winnls.dll16 @@ -687,6 +692,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winhelp.exe.so %{_libdir}/wine/winver.exe.so %{_libdir}/wine/wordpad.exe.so +%{_libdir}/wine/write.exe.so %{_datadir}/applications/fedora-wine-notepad.desktop %{_datadir}/applications/fedora-wine-winefile.desktop %{_datadir}/applications/fedora-wine-winemine.desktop @@ -751,6 +757,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Aug 11 2007 Andreas Bierfert +- 0.9.43-1 +- version upgrade +- fix init-script output (#252144) +- add lsb stuff (#247096) + * Sat Jul 28 2007 Andreas Bierfert - 0.9.42-1 - version upgrade From c2d539546ddebe88eb18a1eb72180b2fb7713440 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 18 Aug 2007 09:06:50 +0000 Subject: [PATCH 068/161] - fix license tags - version upgrades for el and fc --- wine.spec | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/wine.spec b/wine.spec index 608544e..8897b35 100644 --- a/wine.spec +++ b/wine.spec @@ -1,10 +1,10 @@ Name: wine Version: 0.9.43 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators -License: LGPL +License: LGPLv2+ URL: http://www.winehq.org/ # special fedora tarball without winemp3 stuff build doing # rm -fr dlls/winemp3.acm @@ -757,6 +757,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Aug 18 2007 Andreas Bierfert +- 0.9.43-2 +- fix license +- fix #248999 + * Sat Aug 11 2007 Andreas Bierfert - 0.9.43-1 - version upgrade From 9bc90628b23a3c24ba109673812eddba600995a8 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 25 Aug 2007 08:28:03 +0000 Subject: [PATCH 069/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index cc98382..9ccaf9b 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.43-fe.tar.bz2 +wine-0.9.44-fe.tar.bz2 diff --git a/sources b/sources index 2d818ed..64c8bb0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -9fe7207a88c20617c3b558e5e2bab109 wine-0.9.43-fe.tar.bz2 +3dd2dbd3f82126d4dffe8749a8a01296 wine-0.9.44-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 8897b35..33765dd 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 0.9.43 -Release: 2%{?dist} +Version: 0.9.44 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.43-fe.tar.bz2 +Source0: wine-0.9.44-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -757,6 +757,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Aug 25 2007 Andreas Bierfert +- 0.9.44-1 +- version upgrade + * Sat Aug 18 2007 Andreas Bierfert - 0.9.43-2 - fix license From 33690610612a0686cd5f84d26bcda7512b64f18b Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 16 Sep 2007 07:45:02 +0000 Subject: [PATCH 070/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index 9ccaf9b..beedf67 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.44-fe.tar.bz2 +wine-0.9.45-fe.tar.bz2 diff --git a/sources b/sources index 64c8bb0..7bad262 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -3dd2dbd3f82126d4dffe8749a8a01296 wine-0.9.44-fe.tar.bz2 +4ec2ac353fa955365de58c7b0db344de wine-0.9.45-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 33765dd..c2f57ef 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.44 +Version: 0.9.45 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.44-fe.tar.bz2 +Source0: wine-0.9.45-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -559,6 +559,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/olepro32.dll.so %{_libdir}/wine/olesvr.dll16 %{_libdir}/wine/olesvr32.dll.so +%{_libdir}/wine/olethk32.dll.so %{_libdir}/wine/pdh.dll.so %{_libdir}/wine/powrprof.dll.so %{_libdir}/wine/printui.dll.so @@ -757,6 +758,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Sep 16 2007 Andreas Bierfert +- 0.9.45-1 +- version upgrade + * Sat Aug 25 2007 Andreas Bierfert - 0.9.44-1 - version upgrade From 4b6cf6e1f6bdf10102a0f24e1c10b50687b2c544 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 8 Oct 2007 08:07:37 +0000 Subject: [PATCH 071/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index beedf67..68e9f97 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.45-fe.tar.bz2 +wine-0.9.46-fe.tar.bz2 diff --git a/sources b/sources index 7bad262..9f99218 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -4ec2ac353fa955365de58c7b0db344de wine-0.9.45-fe.tar.bz2 +3d6f3d20a0fb8eccfae2f8333c8f81e8 wine-0.9.46-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index c2f57ef..7a084e4 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.45 +Version: 0.9.46 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.45-fe.tar.bz2 +Source0: wine-0.9.46-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -758,6 +758,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Oct 07 2007 Andreas Bierfert +- 0.9.46-1 +- version upgrade + * Sun Sep 16 2007 Andreas Bierfert - 0.9.45-1 - version upgrade From b38615b2c80f1367a8832d00f358026a8091224f Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 14 Oct 2007 07:25:53 +0000 Subject: [PATCH 072/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index 68e9f97..225b202 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.46-fe.tar.bz2 +wine-0.9.47-fe.tar.bz2 diff --git a/sources b/sources index 9f99218..8b3969c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -3d6f3d20a0fb8eccfae2f8333c8f81e8 wine-0.9.46-fe.tar.bz2 +c3f82d7b22c52eee90330acc94fbc5d4 wine-0.9.47-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 7a084e4..939e048 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.46 +Version: 0.9.47 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.46-fe.tar.bz2 +Source0: wine-0.9.47-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -758,6 +758,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Oct 13 2007 Andreas Bierfert +- 0.9.47-1 +- version upgrade + * Sun Oct 07 2007 Andreas Bierfert - 0.9.46-1 - version upgrade From 12142e4f9f62d3b232d466c55c9ac2f25f2e16d0 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 17 Oct 2007 18:53:36 +0000 Subject: [PATCH 073/161] - fix build --- wine.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wine.spec b/wine.spec index 939e048..293b874 100644 --- a/wine.spec +++ b/wine.spec @@ -526,6 +526,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msisys.ocx.so %{_libdir}/wine/msnet32.dll.so %{_libdir}/wine/msrle32.dll.so +%{_libdir}/wine/msvcirt.dll.so %{_libdir}/wine/msvcrt.dll.so %{_libdir}/wine/msvcrt20.dll.so %{_libdir}/wine/msvcrt40.dll.so @@ -566,6 +567,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/psapi.dll.so %{_libdir}/wine/pstorec.dll.so %{_libdir}/wine/qcap.dll.so +%{_libdir}/wine/qmgr.dll.so %{_libdir}/wine/quartz.dll.so %{_libdir}/wine/query.dll.so %{_libdir}/wine/rasapi16.dll16 From 3180a697e9849b0cc0751235a452bcc3cbd0d580 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 26 Oct 2007 20:50:40 +0000 Subject: [PATCH 074/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 9 +++++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index 225b202..398fb02 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.47-fe.tar.bz2 +wine-0.9.48-fe.tar.bz2 diff --git a/sources b/sources index 8b3969c..c8e200a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -c3f82d7b22c52eee90330acc94fbc5d4 wine-0.9.47-fe.tar.bz2 +97f50d31f535fe6a4473f5b2a2b9c9eb wine-0.9.48-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 293b874..e2a8a4b 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.47 +Version: 0.9.48 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.47-fe.tar.bz2 +Source0: wine-0.9.48-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -522,6 +522,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/mshtml.dll.so %{_libdir}/wine/mshtml.tlb.so %{_libdir}/wine/msi.dll.so +%{_libdir}/wine/msimtf.dll.so %{_libdir}/wine/msimg32.dll.so %{_libdir}/wine/msisys.ocx.so %{_libdir}/wine/msnet32.dll.so @@ -760,6 +761,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Oct 26 2007 Andreas Bierfert +- 0.9.48-1 +- version upgrade + * Sat Oct 13 2007 Andreas Bierfert - 0.9.47-1 - version upgrade From 3d4c7d8c7d3d9e0d0bd8efa1f234cabb3ae5b23f Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 18 Nov 2007 22:45:51 +0000 Subject: [PATCH 075/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 11 +++++++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index 398fb02..e530a93 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.48-fe.tar.bz2 +wine-0.9.49-fe.tar.bz2 diff --git a/sources b/sources index c8e200a..a9f202b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -97f50d31f535fe6a4473f5b2a2b9c9eb wine-0.9.48-fe.tar.bz2 +918c7f23585e08824dc7e14786deb441 wine-0.9.49-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index e2a8a4b..5ad0384 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.48 +Version: 0.9.49 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.48-fe.tar.bz2 +Source0: wine-0.9.49-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -430,6 +430,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/crypt32.dll.so %{_libdir}/wine/cryptdll.dll.so %{_libdir}/wine/cryptnet.dll.so +%{_libdir}/wine/ctapi32.dll.so %{_libdir}/wine/ctl3d.dll16 %{_libdir}/wine/ctl3d32.dll.so %{_libdir}/wine/ctl3dv2.dll16 @@ -486,6 +487,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/imagehlp.dll.so %{_libdir}/wine/imm.dll16 %{_libdir}/wine/imm32.dll.so +%{_libdir}/wine/inetcomm.dll.so %{_libdir}/wine/infosoft.dll.so %{_libdir}/wine/inkobj.dll.so %{_libdir}/wine/inseng.dll.so @@ -515,6 +517,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msacm32.dll.so %{_libdir}/wine/msacm32.drv.so %{_libdir}/wine/msadp32.acm.so +%{_libdir}/wine/mscat32.dll.so %{_libdir}/wine/mscoree.dll.so %{_libdir}/wine/msdmo.dll.so %{_libdir}/wine/msftedit.dll.so @@ -761,6 +764,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Tue Nov 13 2007 Andreas Bierfert +- 0.9.49-1 +- version upgrade + * Fri Oct 26 2007 Andreas Bierfert - 0.9.48-1 - version upgrade From 17899b3e3dc2fd5765d221fed134e8eea5b44361 Mon Sep 17 00:00:00 2001 From: alexlan Date: Sun, 9 Dec 2007 10:16:42 +0000 Subject: [PATCH 076/161] - Rebuild for new openssl/openldap soname bump --- wine.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index 5ad0384..0779bc7 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 0.9.49 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -764,6 +764,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Dec 09 2007 Alex Lancaster +- 0.9.49-2 +- Rebuild for new openssl/openldap soname bump + * Tue Nov 13 2007 Andreas Bierfert - 0.9.49-1 - version upgrade From 37c2dfba685f6c8078c137a0744a1223aa53e772 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 28 Dec 2007 09:32:52 +0000 Subject: [PATCH 077/161] - bug fixes/version upgrade --- .cvsignore | 2 +- README-FEDORA-PULSEAUDIO | 10 ++++++++++ sources | 2 +- wine-pulseaudio.sh | 7 +++++++ wine.spec | 38 +++++++++++++++++++++++++++++++++++--- 5 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 README-FEDORA-PULSEAUDIO create mode 100644 wine-pulseaudio.sh diff --git a/.cvsignore b/.cvsignore index e530a93..8845c43 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.49-fe.tar.bz2 +wine-0.9.51-fe.tar.bz2 diff --git a/README-FEDORA-PULSEAUDIO b/README-FEDORA-PULSEAUDIO new file mode 100644 index 0000000..c600672 --- /dev/null +++ b/README-FEDORA-PULSEAUDIO @@ -0,0 +1,10 @@ +Wine and Pulseaudio Support +--------------------------- + +Currently wine does not have native support for pulseaudio. As a workaround to +make wine work alongside pulseaudio select OSS sound output in winecfg. Wine +then calls padsp as a wrapper if alsa-plugin-pulseaudio and pulseaudio-utils is +installed. + +If you think you have found a bug related to this take a look at the bug +reporting procedure at http://fedoraproject.org/wiki/AndreasBierfert/Wine. diff --git a/sources b/sources index a9f202b..b1145e3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -918c7f23585e08824dc7e14786deb441 wine-0.9.49-fe.tar.bz2 +a111b62c764559202c03c9076e983b9d wine-0.9.51-fe.tar.bz2 diff --git a/wine-pulseaudio.sh b/wine-pulseaudio.sh new file mode 100644 index 0000000..08452fa --- /dev/null +++ b/wine-pulseaudio.sh @@ -0,0 +1,7 @@ +#!/bin/sh +if [ -x /usr/lib*/alsa-lib/libasound_module_pcm_pulse.so ] && [ -x "/usr/bin/padsp" ] ; then + echo "Running padsp as pulseaudio wrapper for wine" + exec padsp -- /usr/bin/wine_bin "$@" +else + exec /usr/bin/wine_bin "$@" +fi diff --git a/wine.spec b/wine.spec index 0779bc7..c289ec5 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.49 +Version: 0.9.51 Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.49-fe.tar.bz2 +Source0: wine-0.9.51-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -39,10 +39,15 @@ Source201: wine.directory # mime types Source300: wine-mime-msi.desktop -#enhancements +# enhancements Source400: wineshelllink-fedora Patch400: wine-wineshelllink.patch +# fix for pulseaudio playback (#344281) +Source401: wine-pulseaudio.sh +Source402: README-FEDORA-PULSEAUDIO + + Patch0: wine-prefixfonts.patch Patch1: wine-rpath.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -145,6 +150,7 @@ ESD sound support for wine Summary: JACK sound support for wine Group: System Environment/Libraries Requires: wine-core = %{version}-%{release} +Requires: jack-audio-connection-kit %description jack JACK sound support for wine @@ -299,6 +305,12 @@ install -p -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ install -p -m755 %{SOURCE400} $RPM_BUILD_ROOT%{_bindir}/wineshelllink-fedora + +# pulseaudio workaround (#344281) +mv $RPM_BUILD_ROOT%{_bindir}/{wine,wine_bin} +install -pm755 %{SOURCE401} $RPM_BUILD_ROOT%{_bindir}/wine +cp %{SOURCE402} . + %clean rm -rf %{buildroot} @@ -351,10 +363,13 @@ update-desktop-database &>/dev/null || : %doc AUTHORS README-Fedora README VERSION # do not include huge changelogs .OLD .ALPHA (#204302) %doc documentation/README.* +# pulseaudio workaround documentation +%doc README-FEDORA-PULSEAUDIO %{_bindir}/msiexec %{_bindir}/regedit %{_bindir}/regsvr32 %{_bindir}/wine +%{_bindir}/wine_bin %{_bindir}/wineboot %{_bindir}/winebrowser %{_bindir}/wineconsole @@ -405,6 +420,7 @@ update-desktop-database &>/dev/null || : %dir %{_libdir}/wine %{_libdir}/wine/acledit.dll.so %{_libdir}/wine/activeds.dll.so +%{_libdir}/wine/actxprxy.dll.so %{_libdir}/wine/advapi32.dll.so %{_libdir}/wine/advpack.dll.so %{_libdir}/wine/amstream.dll.so @@ -572,6 +588,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/pstorec.dll.so %{_libdir}/wine/qcap.dll.so %{_libdir}/wine/qmgr.dll.so +%{_libdir}/wine/qmgrprxy.dll.so %{_libdir}/wine/quartz.dll.so %{_libdir}/wine/query.dll.so %{_libdir}/wine/rasapi16.dll16 @@ -603,6 +620,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/sti.dll.so %{_libdir}/wine/storage.dll16 %{_libdir}/wine/stress.dll16 +%{_libdir}/wine/svchost.exe.so %{_libdir}/wine/svrapi.dll.so %{_libdir}/wine/sxs.dll.so %{_libdir}/wine/system.drv16 @@ -757,6 +775,7 @@ update-desktop-database &>/dev/null || : %{_mandir}/man1/wrc.1* %{_mandir}/man1/winedbg.1* %{_mandir}/man1/wineg++.1* +%lang(de) %{_mandir}/de.UTF-8/man1/wine.1* %{_datadir}/aclocal/wine.m4 %attr(0755, root, root) %dir %{_includedir}/wine %{_includedir}/wine/* @@ -764,6 +783,19 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Dec 28 2007 Andreas Bierfert +- 0.9.51-2 +- add fix for #344281 pulseaudio workaround +- fix #253474: wine-jack should require jack-audio-connection-kit + +* Sun Dec 16 2007 Andreas Bierfert +- 0.9.51-1 +- version upgrade + +* Sat Dec 01 2007 Andreas Bierfert +- 0.9.50-1 +- version upgrade + * Sun Dec 09 2007 Alex Lancaster - 0.9.49-2 - Rebuild for new openssl/openldap soname bump From b01d1c330700060399dd5dabf0af58da0c8b496b Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 28 Dec 2007 09:34:21 +0000 Subject: [PATCH 078/161] - fix cl --- wine.spec | 4 ---- 1 file changed, 4 deletions(-) diff --git a/wine.spec b/wine.spec index c289ec5..6a04a4c 100644 --- a/wine.spec +++ b/wine.spec @@ -796,10 +796,6 @@ update-desktop-database &>/dev/null || : - 0.9.50-1 - version upgrade -* Sun Dec 09 2007 Alex Lancaster -- 0.9.49-2 -- Rebuild for new openssl/openldap soname bump - * Tue Nov 13 2007 Andreas Bierfert - 0.9.49-1 - version upgrade From 9cf4848d64fba306a9dcfd9e9d5e0e26a62edf19 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 28 Dec 2007 18:57:37 +0000 Subject: [PATCH 079/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-pulseaudio.sh | 2 +- wine.spec | 19 ++++++++++++++----- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/.cvsignore b/.cvsignore index 8845c43..056e082 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.51-fe.tar.bz2 +wine-0.9.52-fe.tar.bz2 diff --git a/sources b/sources index b1145e3..9b90ab2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a111b62c764559202c03c9076e983b9d wine-0.9.51-fe.tar.bz2 +30fe8f8c57d8ad9a68324a8479a3cff7 wine-0.9.52-fe.tar.bz2 diff --git a/wine-pulseaudio.sh b/wine-pulseaudio.sh index 08452fa..e73d7c4 100644 --- a/wine-pulseaudio.sh +++ b/wine-pulseaudio.sh @@ -1,7 +1,7 @@ #!/bin/sh if [ -x /usr/lib*/alsa-lib/libasound_module_pcm_pulse.so ] && [ -x "/usr/bin/padsp" ] ; then echo "Running padsp as pulseaudio wrapper for wine" - exec padsp -- /usr/bin/wine_bin "$@" + exec padsp -n Wine -- /usr/bin/wine_bin "$@" else exec /usr/bin/wine_bin "$@" fi diff --git a/wine.spec b/wine.spec index 6a04a4c..4640ee3 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 0.9.51 -Release: 2%{?dist} +Version: 0.9.52 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.51-fe.tar.bz2 +Source0: wine-0.9.52-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -241,7 +241,7 @@ install -p -m 644 %{SOURCE200} \ %{buildroot}%{_sysconfdir}/xdg/menus/applications-merged/wine.menu mkdir -p %{buildroot}%{_datadir}/desktop-directories install -p -m 644 %{SOURCE201} \ -%{buildroot}%{_datadir}/desktop-directories/wine.directory +%{buildroot}%{_datadir}/desktop-directories/Wine.directory # install desktop files @@ -405,7 +405,7 @@ update-desktop-database &>/dev/null || : %{_datadir}/applications/fedora-wine-uninstaller.desktop %{_datadir}/applications/fedora-wine-winecfg.desktop %{_datadir}/applications/fedora-wine-wineboot.desktop -%{_datadir}/desktop-directories/wine.directory +%{_datadir}/desktop-directories/Wine.directory %{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_mandir}/man1/wine.1.gz %{_datadir}/wine/generic.ppd @@ -783,6 +783,15 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Dec 28 2007 Andreas Bierfert +- 0.9.52-1 +- version upgrade + +* Fri Dec 28 2007 Andreas Bierfert +- 0.9.51-3 +- add -n Wine to pulseaudio workaround +- try to fix menu bug #393641 + * Fri Dec 28 2007 Andreas Bierfert - 0.9.51-2 - add fix for #344281 pulseaudio workaround From a46e28951f6a70b3f9170cd1fa8a4128f48f07dd Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 29 Dec 2007 01:39:39 +0000 Subject: [PATCH 080/161] - fix menu bug (#393641) --- wine.menu | 2 +- wine.spec | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/wine.menu b/wine.menu index 2e5c4e0..8cfd94c 100644 --- a/wine.menu +++ b/wine.menu @@ -7,7 +7,7 @@ Wine Wine.directory - Wine + X-Wine diff --git a/wine.spec b/wine.spec index 4640ee3..5389711 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 0.9.52 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -783,6 +783,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Dec 29 2007 Andreas Bierfert +- 0.9.52-2 +- fix menu bug (#393641) + * Fri Dec 28 2007 Andreas Bierfert - 0.9.52-1 - version upgrade From 3ba8fba3e64e6a1415ef43692776d46979eeefa6 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 12 Jan 2008 01:37:54 +0000 Subject: [PATCH 081/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 14 ++++++++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.cvsignore b/.cvsignore index 056e082..0234268 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.52-fe.tar.bz2 +wine-0.9.53-fe.tar.bz2 diff --git a/sources b/sources index 9b90ab2..f55872a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -30fe8f8c57d8ad9a68324a8479a3cff7 wine-0.9.52-fe.tar.bz2 +afead7bf1c9b4ae2758e03f82e0d6e88 wine-0.9.53-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 5389711..b201146 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 0.9.52 -Release: 2%{?dist} +Version: 0.9.53 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: wine-0.9.52-fe.tar.bz2 +Source0: %{name}-%{version}-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -408,6 +408,8 @@ update-desktop-database &>/dev/null || : %{_datadir}/desktop-directories/Wine.directory %{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_mandir}/man1/wine.1.gz +%{_mandir}/man1/wineserver.1* +%lang(fr) %{_mandir}/fr.UTF-8/man1/* %{_datadir}/wine/generic.ppd %{_datadir}/wine/wine.inf %{_bindir}/wine-kthread @@ -415,7 +417,6 @@ update-desktop-database &>/dev/null || : %{_bindir}/wine-pthread %{_bindir}/winelauncher %{_bindir}/wineserver -%{_mandir}/man1/wineserver.1* %{_libdir}/libwine.so.1* %dir %{_libdir}/wine %{_libdir}/wine/acledit.dll.so @@ -526,6 +527,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/mmdevldr.vxd.so %{_libdir}/wine/mmsystem.dll16 %{_libdir}/wine/monodebg.vxd.so +%{_libdir}/wine/mountmgr.sys.so %{_libdir}/wine/mouse.drv16 %{_libdir}/wine/mpr.dll.so %{_libdir}/wine/mprapi.dll.so @@ -783,6 +785,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Jan 12 2008 Andreas Bierfert +- 0.9.53-1 +- version upgrade + * Sat Dec 29 2007 Andreas Bierfert - 0.9.52-2 - fix menu bug (#393641) From 37a6f80183bcbf316da16308944511d15e43e62f Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 13 Jan 2008 10:57:34 +0000 Subject: [PATCH 082/161] - fix up BR --- wine.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index b201146..673a233 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 0.9.53 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -63,12 +63,14 @@ BuildRequires: freeglut-devel BuildRequires: lcms-devel BuildRequires: libieee1284-devel BuildRequires: libjpeg-devel +BuildRequires: libpng-devel BuildRequires: libstdc++-devel BuildRequires: libusb-devel BuildRequires: libxml2-devel BuildRequires: libxslt-devel BuildRequires: ncurses-devel BuildRequires: openldap-devel +BuildRequires: unixODBC-devel BuildRequires: openssl-devel BuildRequires: sane-backends-devel BuildRequires: zlib-devel @@ -84,6 +86,7 @@ BuildRequires: mesa-libGL-devel mesa-libGLU-devel BuildRequires: libXxf86dga-devel libXxf86vm-devel BuildRequires: libXrandr-devel libXrender-devel libXext-devel BuildRequires: libXinerama-devel +BuildRequires: libXcomposite-devel BuildRequires: fontconfig-devel BuildRequires: giflib-devel BuildRequires: cups-devel @@ -785,6 +788,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Jan 13 2008 Andreas Bierfert +- 0.9.53-2 +- add some missing BR + * Sat Jan 12 2008 Andreas Bierfert - 0.9.53-1 - version upgrade From e09f4c971cb53bfc61972dfd7729b5aa15920614 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 25 Jan 2008 18:00:21 +0000 Subject: [PATCH 083/161] - version upgrade --- .cvsignore | 2 +- README-FEDORA-PULSEAUDIO | 36 ++++++++++++++++++++++++++++++++---- sources | 2 +- wine.spec | 22 ++++++++++++++-------- 4 files changed, 48 insertions(+), 14 deletions(-) diff --git a/.cvsignore b/.cvsignore index 0234268..7dc8e35 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.53-fe.tar.bz2 +wine-0.9.54-fe.tar.bz2 diff --git a/README-FEDORA-PULSEAUDIO b/README-FEDORA-PULSEAUDIO index c600672..764a1e5 100644 --- a/README-FEDORA-PULSEAUDIO +++ b/README-FEDORA-PULSEAUDIO @@ -1,10 +1,38 @@ Wine and Pulseaudio Support --------------------------- +Currently wine does not have native support for pulseaudio. However different +ways exist to make wine sound work alongside pulseaudio. Different sound +outputs can be selected via `winecfg` or in the registry of wine. -Currently wine does not have native support for pulseaudio. As a workaround to -make wine work alongside pulseaudio select OSS sound output in winecfg. Wine -then calls padsp as a wrapper if alsa-plugin-pulseaudio and pulseaudio-utils is -installed. + +ALSA +---- +To achieve sound output via the wine alsa driver you need to add +a pulseaudio alsa device to the alsa configuration and activate it in wine. See +http://www.pulseaudio.org/wiki/PerfectSetup#ALSAApplications on how to do this. + + +Esound +------ +If the pulseaudio-esound-compat package is installed selecting the EsounD driver +in wine should enable sound via pulseaudio. + +OSS +--- +To use the oss driver of wine copy the following script to ~/bin/wine and make +sure that ~/bin is in your path with a higher priority then /usr/bin. The script +will call the pulseaudio dsp wrapper padsp. + +#!/bin/sh +if [ -x /usr/lib*/alsa-lib/libasound_module_pcm_pulse.so ] && [ -x "/usr/bin/padsp" ] ; then + echo "Running padsp as pulseaudio wrapper for wine" + exec padsp -n Wine -- /usr/bin/wine "$@" +else + exec /usr/bin/wine "$@" +fi + +For more information on a good pulseaudio setup see: +http://www.pulseaudio.org/wiki/PerfectSetup If you think you have found a bug related to this take a look at the bug reporting procedure at http://fedoraproject.org/wiki/AndreasBierfert/Wine. diff --git a/sources b/sources index f55872a..9347104 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -afead7bf1c9b4ae2758e03f82e0d6e88 wine-0.9.53-fe.tar.bz2 +a2677aa04cc7e9a27e8de533b8166627 wine-0.9.54-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 673a233..3104693 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 0.9.53 -Release: 2%{?dist} +Version: 0.9.54 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -43,8 +43,7 @@ Source300: wine-mime-msi.desktop Source400: wineshelllink-fedora Patch400: wine-wineshelllink.patch -# fix for pulseaudio playback (#344281) -Source401: wine-pulseaudio.sh +# explain how to use wine with pulseaudio Source402: README-FEDORA-PULSEAUDIO @@ -309,9 +308,7 @@ install -p -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ install -p -m755 %{SOURCE400} $RPM_BUILD_ROOT%{_bindir}/wineshelllink-fedora -# pulseaudio workaround (#344281) -mv $RPM_BUILD_ROOT%{_bindir}/{wine,wine_bin} -install -pm755 %{SOURCE401} $RPM_BUILD_ROOT%{_bindir}/wine +# deploy pulseaudio readme cp %{SOURCE402} . %clean @@ -372,7 +369,6 @@ update-desktop-database &>/dev/null || : %{_bindir}/regedit %{_bindir}/regsvr32 %{_bindir}/wine -%{_bindir}/wine_bin %{_bindir}/wineboot %{_bindir}/winebrowser %{_bindir}/wineconsole @@ -457,6 +453,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/d3d10.dll.so %{_libdir}/wine/d3dim.dll.so %{_libdir}/wine/d3drm.dll.so +%{_libdir}/wine/d3dx9_36.dll.so %{_libdir}/wine/d3dxof.dll.so %{_libdir}/wine/dbghelp.dll.so %{_libdir}/wine/dciman32.dll.so @@ -552,6 +549,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msnet32.dll.so %{_libdir}/wine/msrle32.dll.so %{_libdir}/wine/msvcirt.dll.so +%{_libdir}/wine/msvcr71.dll.so %{_libdir}/wine/msvcrt.dll.so %{_libdir}/wine/msvcrt20.dll.so %{_libdir}/wine/msvcrt40.dll.so @@ -589,6 +587,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/pdh.dll.so %{_libdir}/wine/powrprof.dll.so %{_libdir}/wine/printui.dll.so +%{_libdir}/wine/propsys.dll.so %{_libdir}/wine/psapi.dll.so %{_libdir}/wine/pstorec.dll.so %{_libdir}/wine/qcap.dll.so @@ -670,6 +669,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winnls32.dll.so %{_libdir}/wine/winsock.dll16 %{_libdir}/wine/winspool.drv.so +%{_libdir}/wine/wmi.dll.so %{_libdir}/wine/spoolss.dll.so %{_libdir}/wine/winscard.dll.so %{_libdir}/wine/wintab.dll16 @@ -788,6 +788,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Jan 25 2008 Andreas Bierfert +- 0.9.54-1 +- version upgrade +- remove default pulseaudio workaround (#429420,#428745) +- improve pulseaudio readme + * Sun Jan 13 2008 Andreas Bierfert - 0.9.53-2 - add some missing BR From b72eca45bbe6807f5a48eb78167983713730dd36 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 10 Feb 2008 15:54:23 +0000 Subject: [PATCH 084/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.cvsignore b/.cvsignore index 7dc8e35..b927192 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.54-fe.tar.bz2 +wine-0.9.55-fe.tar.bz2 diff --git a/sources b/sources index 9347104..061b035 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a2677aa04cc7e9a27e8de533b8166627 wine-0.9.54-fe.tar.bz2 +afc80c458acd9876919d47d1cf92d37e wine-0.9.55-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 3104693..8878810 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.54 +Version: 0.9.55 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -788,6 +788,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Feb 10 2008 Andreas Bierfert +- 0.9.55-1 +- version upgrade + * Fri Jan 25 2008 Andreas Bierfert - 0.9.54-1 - version upgrade From f5a32a92af46558b182145691528ecf251b89d9d Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 24 Feb 2008 07:45:42 +0000 Subject: [PATCH 085/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 19 +++++++++++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index b927192..5c90579 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.55-fe.tar.bz2 +wine-0.9.56-fe.tar.bz2 diff --git a/sources b/sources index 061b035..21bae95 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -afc80c458acd9876919d47d1cf92d37e wine-0.9.55-fe.tar.bz2 +7967c78aec5e3c3a2ba23e092c30bfa5 wine-0.9.56-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 8878810..098cc9b 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.55 +Version: 0.9.56 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -444,6 +444,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/credui.dll.so %{_libdir}/wine/crtdll.dll.so %{_libdir}/wine/crypt32.dll.so +%{_libdir}/wine/cryptdlg.dll.so %{_libdir}/wine/cryptdll.dll.so %{_libdir}/wine/cryptnet.dll.so %{_libdir}/wine/ctapi32.dll.so @@ -453,7 +454,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/d3d10.dll.so %{_libdir}/wine/d3dim.dll.so %{_libdir}/wine/d3drm.dll.so -%{_libdir}/wine/d3dx9_36.dll.so +%{_libdir}/wine/d3dx9_*.dll.so %{_libdir}/wine/d3dxof.dll.so %{_libdir}/wine/dbghelp.dll.so %{_libdir}/wine/dciman32.dll.so @@ -481,6 +482,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dpnhpast.dll.so %{_libdir}/wine/dpnlobby.dll.so %{_libdir}/wine/dsound.dll.so +%{_libdir}/wine/dssenh.dll.so %{_libdir}/wine/dswave.dll.so %{_libdir}/wine/dwmapi.dll.so %{_libdir}/wine/dxdiagn.dll.so @@ -490,6 +492,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gdiplus.dll.so %{_libdir}/wine/gphoto2.ds.so +%{_libdir}/wine/gpkcsp.dll.so %{_libdir}/wine/hal.dll.so %{_libdir}/wine/hid.dll.so %{_libdir}/wine/hh.exe.so @@ -506,9 +509,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/imm32.dll.so %{_libdir}/wine/inetcomm.dll.so %{_libdir}/wine/infosoft.dll.so +%{_libdir}/wine/initpki.dll.so %{_libdir}/wine/inkobj.dll.so %{_libdir}/wine/inseng.dll.so %{_libdir}/wine/iphlpapi.dll.so +%{_libdir}/wine/itircl.dll.so %{_libdir}/wine/itss.dll.so %{_libdir}/wine/kernel32.dll.so %{_libdir}/wine/keyboard.drv16 @@ -547,6 +552,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msimg32.dll.so %{_libdir}/wine/msisys.ocx.so %{_libdir}/wine/msnet32.dll.so +%{_libdir}/wine/mssip32.dll.so %{_libdir}/wine/msrle32.dll.so %{_libdir}/wine/msvcirt.dll.so %{_libdir}/wine/msvcr71.dll.so @@ -591,6 +597,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/psapi.dll.so %{_libdir}/wine/pstorec.dll.so %{_libdir}/wine/qcap.dll.so +%{_libdir}/wine/qedit.dll.so %{_libdir}/wine/qmgr.dll.so %{_libdir}/wine/qmgrprxy.dll.so %{_libdir}/wine/quartz.dll.so @@ -603,6 +610,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/rpcrt4.dll.so %{_libdir}/wine/rsabase.dll.so %{_libdir}/wine/rsaenh.dll.so +%{_libdir}/wine/sccbase.dll.so %{_libdir}/wine/schannel.dll.so %{_libdir}/wine/secur32.dll.so %{_libdir}/wine/sensapi.dll.so @@ -616,7 +624,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/shell32.dll.so %{_libdir}/wine/shfolder.dll.so %{_libdir}/wine/shlwapi.dll.so +%{_libdir}/wine/slbcsp.dll.so +%{_libdir}/wine/slc.dll.so %{_libdir}/wine/snmpapi.dll.so +%{_libdir}/wine/softpub.dll.so %{_libdir}/wine/sound.drv16 %{_libdir}/wine/spoolsv.exe.so %{_libdir}/wine/stdole2.tlb.so @@ -788,6 +799,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Feb 23 2008 Andreas Bierfert +- 0.9.56-1 +- version upgrade + * Sun Feb 10 2008 Andreas Bierfert - 0.9.55-1 - version upgrade From 054de6767bbde51b30db888fa4bec5d34d09a5ce Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 11 Mar 2008 09:31:31 +0000 Subject: [PATCH 086/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.cvsignore b/.cvsignore index 5c90579..ad7c824 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.56-fe.tar.bz2 +wine-0.9.57-fe.tar.bz2 diff --git a/sources b/sources index 21bae95..a9b0ac7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -7967c78aec5e3c3a2ba23e092c30bfa5 wine-0.9.56-fe.tar.bz2 +26fc25db994dc0563e7da12edd8596dc wine-0.9.57-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 098cc9b..949a4d3 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.56 +Version: 0.9.57 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -388,6 +388,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/regsvr32.exe.so %{_libdir}/wine/rpcss.exe.so %{_libdir}/wine/rundll32.exe.so +%{_libdir}/wine/secedit.exe.so %{_libdir}/wine/start.exe.so %{_libdir}/wine/wineboot.exe.so %{_libdir}/wine/winebrowser.exe.so @@ -682,6 +683,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winspool.drv.so %{_libdir}/wine/wmi.dll.so %{_libdir}/wine/spoolss.dll.so +%{_libdir}/wine/winoldap.mod16 %{_libdir}/wine/winscard.dll.so %{_libdir}/wine/wintab.dll16 %{_libdir}/wine/wintab32.dll.so @@ -799,6 +801,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Tue Mar 11 2008 Andreas Bierfert +- 0.9.57-1 +- version upgrade + * Sat Feb 23 2008 Andreas Bierfert - 0.9.56-1 - version upgrade From 91a159e8a56fdbd9331fbc1a4ddd3d2beff09cc6 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 25 Mar 2008 09:43:31 +0000 Subject: [PATCH 087/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.cvsignore b/.cvsignore index ad7c824..e63bce9 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.57-fe.tar.bz2 +wine-0.9.58-fe.tar.bz2 diff --git a/sources b/sources index a9b0ac7..a35513e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -26fc25db994dc0563e7da12edd8596dc wine-0.9.57-fe.tar.bz2 +c390982518ae62e5a8ef0ce354c4752e wine-0.9.58-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 949a4d3..95f2d8c 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.57 +Version: 0.9.58 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -384,6 +384,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/net.exe.so %{_libdir}/wine/ntoskrnl.exe.so %{_libdir}/wine/oleview.exe.so +%{_libdir}/wine/reg.exe.so %{_libdir}/wine/regedit.exe.so %{_libdir}/wine/regsvr32.exe.so %{_libdir}/wine/rpcss.exe.so @@ -489,6 +490,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dxdiagn.dll.so %{_libdir}/wine/eject.exe.so %{_libdir}/wine/faultrep.dll.so +%{_libdir}/wine/fusion.dll.so %{_libdir}/wine/gdi.exe16 %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gdiplus.dll.so @@ -516,6 +518,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/iphlpapi.dll.so %{_libdir}/wine/itircl.dll.so %{_libdir}/wine/itss.dll.so +%{_libdir}/wine/jscript.dll.so %{_libdir}/wine/kernel32.dll.so %{_libdir}/wine/keyboard.drv16 %{_libdir}/wine/krnl386.exe16 @@ -801,6 +804,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Mar 22 2008 Andreas Bierfert +- 0.9.58-1 +- version upgrade + * Tue Mar 11 2008 Andreas Bierfert - 0.9.57-1 - version upgrade From 9d6062e17ce634e5fec469cf72006aaf73428072 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 7 Apr 2008 07:11:45 +0000 Subject: [PATCH 088/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.cvsignore b/.cvsignore index e63bce9..de7dd6e 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.58-fe.tar.bz2 +wine-0.9.59-fe.tar.bz2 diff --git a/sources b/sources index a35513e..1af4e17 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -c390982518ae62e5a8ef0ce354c4752e wine-0.9.58-fe.tar.bz2 +0417cd64e0d5edf8afcbd42da79a674c wine-0.9.59-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 95f2d8c..a3aa7f9 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.58 +Version: 0.9.59 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -390,6 +390,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/rpcss.exe.so %{_libdir}/wine/rundll32.exe.so %{_libdir}/wine/secedit.exe.so +%{_libdir}/wine/services.exe.so %{_libdir}/wine/start.exe.so %{_libdir}/wine/wineboot.exe.so %{_libdir}/wine/winebrowser.exe.so @@ -804,6 +805,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Apr 05 2008 Andreas Bierfert +- 0.9.59-1 +- version upgrade + * Sat Mar 22 2008 Andreas Bierfert - 0.9.58-1 - version upgrade From acdacb77dc135d4e2297137614eb72c1a5c7e87b Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 19 Apr 2008 07:02:10 +0000 Subject: [PATCH 089/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 10 ++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index de7dd6e..42b5d56 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.59-fe.tar.bz2 +wine-0.9.60-fe.tar.bz2 diff --git a/sources b/sources index 1af4e17..ca13613 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0417cd64e0d5edf8afcbd42da79a674c wine-0.9.59-fe.tar.bz2 +df41988077c2249725655b9eaf04edb2 wine-0.9.60-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index a3aa7f9..3865837 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.59 +Version: 0.9.60 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -417,7 +417,8 @@ update-desktop-database &>/dev/null || : %{_bindir}/wine-kthread %{_bindir}/wine-preloader %{_bindir}/wine-pthread -%{_bindir}/winelauncher +# < 0.9.60 +#%{_bindir}/winelauncher %{_bindir}/wineserver %{_libdir}/libwine.so.1* %dir %{_libdir}/wine @@ -450,6 +451,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/cryptdlg.dll.so %{_libdir}/wine/cryptdll.dll.so %{_libdir}/wine/cryptnet.dll.so +%{_libdir}/wine/cryptui.dll.so %{_libdir}/wine/ctapi32.dll.so %{_libdir}/wine/ctl3d.dll16 %{_libdir}/wine/ctl3d32.dll.so @@ -805,6 +807,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Apr 18 2008 Andreas Bierfert +- 0.9.60-1 +- version upgrade + * Sat Apr 05 2008 Andreas Bierfert - 0.9.59-1 - version upgrade From e219486479c613be68cccc0ec7f1b3d591e6a1c4 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 9 May 2008 05:13:24 +0000 Subject: [PATCH 090/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.cvsignore b/.cvsignore index 42b5d56..680a4ff 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.60-fe.tar.bz2 +wine-0.9.61-fe.tar.bz2 diff --git a/sources b/sources index ca13613..db1170e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -df41988077c2249725655b9eaf04edb2 wine-0.9.60-fe.tar.bz2 +23c9fae1e44a6a4be8efe044bf0968ac wine-0.9.61-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 3865837..44ee54c 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 0.9.60 +Version: 0.9.61 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -807,6 +807,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon May 05 2008 Andreas Bierfert +- 0.9.61-1 +- version upgrade + * Fri Apr 18 2008 Andreas Bierfert - 0.9.60-1 - version upgrade From 157058aab8c7c9ff755b6b6b973be5ab7cbed948 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 10 May 2008 06:58:47 +0000 Subject: [PATCH 091/161] - version upgrade to rc1 --- .cvsignore | 2 +- sources | 2 +- wine.spec | 12 ++++++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.cvsignore b/.cvsignore index 680a4ff..1aa4bb7 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-0.9.61-fe.tar.bz2 +wine-1.0-rc1-fe.tar.bz2 diff --git a/sources b/sources index db1170e..a3ed636 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -23c9fae1e44a6a4be8efe044bf0968ac wine-0.9.61-fe.tar.bz2 +fd37e7d4098f298b98592f32d775f40a wine-1.0-rc1-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 44ee54c..9ca2418 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 0.9.61 -Release: 1%{?dist} +Version: 1.0 +Release: 0.1.rc1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: %{name}-%{version}-fe.tar.bz2 +Source0: %{name}-%{version}-rc1-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -207,7 +207,7 @@ Header, include files and library definition files for developing applications with the Wine Windows(TM) emulation libraries. %prep -%setup -q -n %{name}-%{version}-fe +%setup -q -n %{name}-%{version}-rc1-fe %patch0 %patch1 %patch400 @@ -807,6 +807,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat May 10 2008 Andreas Bierfert +- 1.0-0.1.rc1 +- version upgrade to rc1 + * Mon May 05 2008 Andreas Bierfert - 0.9.61-1 - version upgrade From a5fe004782eb7126f1daf2d2ba8031873d293c39 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 23 May 2008 20:22:45 +0000 Subject: [PATCH 092/161] - version upgrade - fix f9/devel compile --- .cvsignore | 2 +- sources | 2 +- wine.spec | 21 ++++++++++++++++++--- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index 1aa4bb7..236078e 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.0-rc1-fe.tar.bz2 +wine-1.0-rc2-fe.tar.bz2 diff --git a/sources b/sources index a3ed636..fb53574 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -fd37e7d4098f298b98592f32d775f40a wine-1.0-rc1-fe.tar.bz2 +f785ae667aad13edc3aa504ca6175513 wine-1.0-rc2-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 9ca2418..897ba52 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 1.0 -Release: 0.1.rc1%{?dist} +Release: 0.2.rc2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: %{name}-%{version}-rc1-fe.tar.bz2 +Source0: %{name}-%{version}-rc2-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -207,18 +207,26 @@ Header, include files and library definition files for developing applications with the Wine Windows(TM) emulation libraries. %prep -%setup -q -n %{name}-%{version}-rc1-fe +%setup -q -n %{name}-%{version}-rc2-fe %patch0 %patch1 %patch400 %build +# work around gcc bug see #440139 +# this affects more then just dlls/user32/menu.c +%if %{?fedora} > 8 +export CFLAGS="$RPM_OPT_FLAGS -fno-tree-fre -fno-tree-pre" +%else export CFLAGS="$RPM_OPT_FLAGS" +%endif + %configure \ --sysconfdir=%{_sysconfdir}/wine --disable-static \ --x-includes=%{_includedir} --x-libraries=%{_libdir} %{__make} depend + %{__make} %{?_smp_mflags} %install @@ -380,6 +388,8 @@ update-desktop-database &>/dev/null || : %{_bindir}/uninstaller %{_initrddir}/wine %{_libdir}/wine/expand.exe.so +%{_libdir}/wine/winhelp.exe16 +%{_libdir}/wine/winhlp32.exe.so %{_libdir}/wine/msiexec.exe.so %{_libdir}/wine/net.exe.so %{_libdir}/wine/ntoskrnl.exe.so @@ -807,6 +817,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri May 23 2008 Andreas Bierfert +- 1.0-0.2.rc2 +- version upgrade +- add compile workaround for fedora 9/rawhide (#440139) + * Sat May 10 2008 Andreas Bierfert - 1.0-0.1.rc1 - version upgrade to rc1 From ddfe6d83c868f19bf6905972be32ba10a57559b6 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 27 May 2008 21:16:12 +0000 Subject: [PATCH 093/161] - fix files section --- wine.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/wine.spec b/wine.spec index 897ba52..d50c794 100644 --- a/wine.spec +++ b/wine.spec @@ -737,7 +737,8 @@ update-desktop-database &>/dev/null || : %{_bindir}/winemaker %{_bindir}/winemine %{_bindir}/winepath -%{_bindir}/winhelp +#%{_bindir}/winhelp +#%{_libdir}/wine/winhelp.exe.so %{_libdir}/wine/explorer.exe.so %{_libdir}/wine/control.exe.so %{_libdir}/wine/cmd.exe.so @@ -748,7 +749,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winefile.exe.so %{_libdir}/wine/winemine.exe.so %{_libdir}/wine/winepath.exe.so -%{_libdir}/wine/winhelp.exe.so %{_libdir}/wine/winver.exe.so %{_libdir}/wine/wordpad.exe.so %{_libdir}/wine/write.exe.so From 3adf01779cf53c49cd60ec33870a845b8ec10076 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 1 Jun 2008 10:48:21 +0000 Subject: [PATCH 094/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index 236078e..76b293e 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.0-rc2-fe.tar.bz2 +wine-1.0-rc3-fe.tar.bz2 diff --git a/sources b/sources index fb53574..925fa72 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -f785ae667aad13edc3aa504ca6175513 wine-1.0-rc2-fe.tar.bz2 +0d161b0d37f872c960a984b64dfaf1cd wine-1.0-rc3-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index d50c794..c9b78fa 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 1.0 -Release: 0.2.rc2%{?dist} +Release: 0.3.rc3%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: %{name}-%{version}-rc2-fe.tar.bz2 +Source0: %{name}-%{version}-rc3-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -207,7 +207,7 @@ Header, include files and library definition files for developing applications with the Wine Windows(TM) emulation libraries. %prep -%setup -q -n %{name}-%{version}-rc2-fe +%setup -q -n %{name}-%{version}-rc3-fe %patch0 %patch1 %patch400 @@ -817,6 +817,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Jun 01 2008 Andreas Bierfert +- 1.0-0.3.rc3 +- version upgrade + * Fri May 23 2008 Andreas Bierfert - 1.0-0.2.rc2 - version upgrade From bb341588d63e7cecc0906fcbfe908744016f4a80 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 7 Jun 2008 09:20:04 +0000 Subject: [PATCH 095/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 14 +++++++++----- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.cvsignore b/.cvsignore index 76b293e..d2fe1db 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.0-rc3-fe.tar.bz2 +wine-1.0-rc4-fe.tar.bz2 diff --git a/sources b/sources index 925fa72..9637e0a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0d161b0d37f872c960a984b64dfaf1cd wine-1.0-rc3-fe.tar.bz2 +5d25a801d1b3dfcb0b76337dc14db95c wine-1.0-rc4-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index c9b78fa..528c466 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 1.0 -Release: 0.3.rc3%{?dist} +Release: 0.4.rc4%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: %{name}-%{version}-rc3-fe.tar.bz2 +Source0: %{name}-%{version}-rc4-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -207,7 +207,7 @@ Header, include files and library definition files for developing applications with the Wine Windows(TM) emulation libraries. %prep -%setup -q -n %{name}-%{version}-rc3-fe +%setup -q -n %{name}-%{version}-rc4-fe %patch0 %patch1 %patch400 @@ -367,9 +367,9 @@ update-desktop-database &>/dev/null || : %files core %defattr(-,root,root,-) -%doc ANNOUNCE COPYING.LIB ChangeLog LICENSE LICENSE.OLD +%doc ANNOUNCE COPYING.LIB LICENSE LICENSE.OLD %doc AUTHORS README-Fedora README VERSION -# do not include huge changelogs .OLD .ALPHA (#204302) +# do not include huge changelogs .OLD .ALPHA .BETA (#204302) %doc documentation/README.* # pulseaudio workaround documentation %doc README-FEDORA-PULSEAUDIO @@ -817,6 +817,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Jun 06 2008 Andreas Bierfert +- 1.0-0.4.rc4 +- version upgrade + * Sun Jun 01 2008 Andreas Bierfert - 1.0-0.3.rc3 - version upgrade From 847f984f35dad0af852163d29672f9641c8a6fe3 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 17 Jun 2008 19:12:27 +0000 Subject: [PATCH 096/161] - version upgrade - several bugfixes --- .cvsignore | 2 +- sources | 2 +- wine-alsa-pulseaudio.patch | 27 ++++++++++++++ wine-desktop-mime.patch | 9 +++++ wine.spec | 74 ++++++++++++++++++++++++++------------ 5 files changed, 89 insertions(+), 25 deletions(-) create mode 100644 wine-alsa-pulseaudio.patch create mode 100644 wine-desktop-mime.patch diff --git a/.cvsignore b/.cvsignore index d2fe1db..094396c 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.0-rc4-fe.tar.bz2 +wine-1.0-fe.tar.bz2 diff --git a/sources b/sources index 9637e0a..ee21747 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -5d25a801d1b3dfcb0b76337dc14db95c wine-1.0-rc4-fe.tar.bz2 +8131688557a6168bf9248e48ee9e90ad wine-1.0-fe.tar.bz2 diff --git a/wine-alsa-pulseaudio.patch b/wine-alsa-pulseaudio.patch new file mode 100644 index 0000000..382edd9 --- /dev/null +++ b/wine-alsa-pulseaudio.patch @@ -0,0 +1,27 @@ +diff --git a/dlls/winealsa.drv/waveout.c b/dlls/winealsa.drv/waveout.c +index f4452e5..34ab57a 100644 +--- a/dlls/winealsa.drv/waveout.c ++++ b/dlls/winealsa.drv/waveout.c +@@ -570,7 +570,7 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) + snd_pcm_access_t access; + snd_pcm_format_t format = -1; + unsigned int rate; +- unsigned int buffer_time = 500000; ++ unsigned int buffer_time = 120000; + unsigned int period_time = 10000; + snd_pcm_uframes_t buffer_size; + snd_pcm_uframes_t period_size; + +diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c +index 31078cb..ad08fae 100644 +--- a/dlls/dsound/dsound_main.c ++++ b/dlls/dsound/dsound_main.c +@@ -91,7 +91,7 @@ HRESULT mmErr(UINT err) + /* All default settings, you most likely don't want to touch these, see wiki on UsefulRegistryKeys */ + int ds_emuldriver = 0; + int ds_hel_buflen = 32768; +-int ds_snd_queue_max = 10; ++int ds_snd_queue_max = 12; + int ds_snd_queue_min = 6; + int ds_snd_shadow_maxsize = 2; + int ds_hw_accel = DS_HW_ACCEL_FULL; diff --git a/wine-desktop-mime.patch b/wine-desktop-mime.patch new file mode 100644 index 0000000..e3de996 --- /dev/null +++ b/wine-desktop-mime.patch @@ -0,0 +1,9 @@ +--- tools/wine.desktop.orig 2008-06-17 11:21:52.000000000 +0200 ++++ tools/wine.desktop 2008-06-17 11:23:16.000000000 +0200 +@@ -8,5 +8,5 @@ + Name[ru]=Wine Эмулятор Windows + Name[fr]=Émulateur Windows Wine + Exec=wine start /unix %f +-MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed;application/x-executable; ++MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed; + NoDisplay=true diff --git a/wine.spec b/wine.spec index 528c466..c31a13f 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 1.0 -Release: 0.4.rc4%{?dist} +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -18,7 +18,7 @@ URL: http://www.winehq.org/ # Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules # programs/winecfg/libraries.c: "winemp3.acm", -Source0: %{name}-%{version}-rc4-fe.tar.bz2 +Source0: %{name}-%{version}-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -45,10 +45,13 @@ Patch400: wine-wineshelllink.patch # explain how to use wine with pulseaudio Source402: README-FEDORA-PULSEAUDIO +Patch402: wine-alsa-pulseaudio.patch Patch0: wine-prefixfonts.patch Patch1: wine-rpath.patch +# fix #448338 +Patch2: wine-desktop-mime.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) ExclusiveArch: i386 @@ -98,6 +101,7 @@ BuildRequires: dbus-devel hal-devel Requires: wine-core = %{version}-%{release} Requires: wine-capi = %{version}-%{release} Requires: wine-cms = %{version}-%{release} +Requires: wine-desktop = %{version}-%{release} Requires: wine-esd = %{version}-%{release} Requires: wine-jack = %{version}-%{release} Requires: wine-ldap = %{version}-%{release} @@ -121,17 +125,27 @@ wine-* sub packages. Summary: Wine core package Group: Applications/Emulators Requires: %{_bindir}/xmessage -Requires(post): /sbin/ldconfig, /sbin/chkconfig, /sbin/service, -Requires(post): desktop-file-utils >= 0.8 -Requires(preun): /sbin/chkconfig, /sbin/service +Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig -Requires(postun): desktop-file-utils >= 0.8 Obsoletes: wine <= 0.9.15-1%{?dist} Obsoletes: wine-arts < 0.9.34 %description core Wine core package includes the basic wine stuff needed by all other packages. +%package desktop +Summary: Desktop integration features for wine +Group: Application/Emulators +Requires(post): /sbin/chkconfig, /sbin/service, +Requires(post): desktop-file-utils >= 0.8 +Requires(preun): /sbin/chkconfig, /sbin/service +Requires(postun): desktop-file-utils >= 0.8 +Requires: wine-core = %{version}-%{release} + +%description desktop +Desktop integration features for wine, including mime-types and a binary format +handler service. + %package tools Summary: Additional wine tools Group: Applications/Emulators @@ -207,10 +221,12 @@ Header, include files and library definition files for developing applications with the Wine Windows(TM) emulation libraries. %prep -%setup -q -n %{name}-%{version}-rc4-fe +%setup -q -n %{name}-%{version}-fe %patch0 %patch1 +%patch2 %patch400 +%patch402 -p1 %build # work around gcc bug see #440139 @@ -322,8 +338,10 @@ cp %{SOURCE402} . %clean rm -rf %{buildroot} -%post core -/sbin/ldconfig +%post core -p /sbin/ldconfig +%postun core -p /sbin/ldconfig + +%post desktop update-desktop-database &>/dev/null || : if [ $1 = 1 ]; then /sbin/chkconfig --add wine @@ -331,14 +349,13 @@ if [ $1 = 1 ]; then /sbin/service wine start &>/dev/null || : fi -%preun core +%preun desktop if [ $1 = 0 ]; then /sbin/service wine stop >/dev/null 2>&1 /sbin/chkconfig --del wine fi -%postun core -/sbin/ldconfig +%postun desktop update-desktop-database &>/dev/null || : %post esd -p /sbin/ldconfig @@ -386,7 +403,6 @@ update-desktop-database &>/dev/null || : %{_bindir}/wineshelllink-fedora %{_bindir}/winecfg %{_bindir}/uninstaller -%{_initrddir}/wine %{_libdir}/wine/expand.exe.so %{_libdir}/wine/winhelp.exe16 %{_libdir}/wine/winhlp32.exe.so @@ -411,14 +427,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winedevice.exe.so %{_libdir}/wine/uninstaller.exe.so %dir %{_datadir}/wine -%{_datadir}/applications/fedora-wine-mime-msi.desktop -%{_datadir}/applications/fedora-wine.desktop -%{_datadir}/applications/fedora-wine-regedit.desktop -%{_datadir}/applications/fedora-wine-uninstaller.desktop -%{_datadir}/applications/fedora-wine-winecfg.desktop -%{_datadir}/applications/fedora-wine-wineboot.desktop -%{_datadir}/desktop-directories/Wine.directory -%{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_mandir}/man1/wine.1.gz %{_mandir}/man1/wineserver.1* %lang(fr) %{_mandir}/fr.UTF-8/man1/* @@ -737,8 +745,6 @@ update-desktop-database &>/dev/null || : %{_bindir}/winemaker %{_bindir}/winemine %{_bindir}/winepath -#%{_bindir}/winhelp -#%{_libdir}/wine/winhelp.exe.so %{_libdir}/wine/explorer.exe.so %{_libdir}/wine/control.exe.so %{_libdir}/wine/cmd.exe.so @@ -752,10 +758,21 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winver.exe.so %{_libdir}/wine/wordpad.exe.so %{_libdir}/wine/write.exe.so + +%files desktop %{_datadir}/applications/fedora-wine-notepad.desktop %{_datadir}/applications/fedora-wine-winefile.desktop %{_datadir}/applications/fedora-wine-winemine.desktop %{_datadir}/applications/fedora-wine-winhelp.desktop +%{_datadir}/applications/fedora-wine-mime-msi.desktop +%{_datadir}/applications/fedora-wine.desktop +%{_datadir}/applications/fedora-wine-regedit.desktop +%{_datadir}/applications/fedora-wine-uninstaller.desktop +%{_datadir}/applications/fedora-wine-winecfg.desktop +%{_datadir}/applications/fedora-wine-wineboot.desktop +%{_datadir}/desktop-directories/Wine.directory +%{_sysconfdir}/xdg/menus/applications-merged/wine.menu +%{_initrddir}/wine %files esd %defattr(-,root,root,-) @@ -817,6 +834,17 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Tue Jun 17 2008 Andreas Bierfert +- 1.0-1 +- version upgrade (#446311,#417161) +- fix wine.desktop mime types (#448338) +- add desktop package including desktop files and binary handler (#441310) +- pull in some wine alsa/pulseaudio patches (#344281) + +* Mon Jun 16 2008 Andreas Bierfert +- 1.0-0.5.rc5 +- version upgrade + * Fri Jun 06 2008 Andreas Bierfert - 1.0-0.4.rc4 - version upgrade From 99d7beee9f9d7f513e9c7c560d3cf3b35a2cd2b5 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 29 Jul 2008 19:31:56 +0000 Subject: [PATCH 097/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-desktop-mime.patch | 14 +++++++------- wine.spec | 29 ++++++++++++++++++++++------- 4 files changed, 31 insertions(+), 16 deletions(-) diff --git a/.cvsignore b/.cvsignore index 094396c..dc3cf4f 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.0-fe.tar.bz2 +wine-1.1.2-fe.tar.bz2 diff --git a/sources b/sources index ee21747..3cbeb5a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -8131688557a6168bf9248e48ee9e90ad wine-1.0-fe.tar.bz2 +0c2bd312ed15b4ff15fef18794803c7e wine-1.1.2-fe.tar.bz2 diff --git a/wine-desktop-mime.patch b/wine-desktop-mime.patch index e3de996..99dfda7 100644 --- a/wine-desktop-mime.patch +++ b/wine-desktop-mime.patch @@ -1,9 +1,9 @@ ---- tools/wine.desktop.orig 2008-06-17 11:21:52.000000000 +0200 -+++ tools/wine.desktop 2008-06-17 11:23:16.000000000 +0200 -@@ -8,5 +8,5 @@ - Name[ru]=Wine Эмулятор Windows - Name[fr]=Émulateur Windows Wine +--- tools/wine.desktop.orig 2008-07-28 20:36:29.000000000 +0200 ++++ tools/wine.desktop 2008-07-28 20:36:43.000000000 +0200 +@@ -16,5 +16,5 @@ + Name[nb]=Wine Programlaster for Windowsapplikasjoner + Name[nn]=Wine Programlaster for Windowsapplikasjoner Exec=wine start /unix %f --MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed;application/x-executable; -+MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed; +-MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed;application/x-executable;application/x-msi; ++MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed;application/x-msi; NoDisplay=true diff --git a/wine.spec b/wine.spec index c31a13f..5152d17 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.0 +Version: 1.1.2 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -125,6 +125,7 @@ wine-* sub packages. Summary: Wine core package Group: Applications/Emulators Requires: %{_bindir}/xmessage +Requires: freetype Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig Obsoletes: wine <= 0.9.15-1%{?dist} @@ -222,7 +223,7 @@ with the Wine Windows(TM) emulation libraries. %prep %setup -q -n %{name}-%{version}-fe -%patch0 +#%patch0 %patch1 %patch2 %patch400 @@ -231,11 +232,11 @@ with the Wine Windows(TM) emulation libraries. %build # work around gcc bug see #440139 # this affects more then just dlls/user32/menu.c -%if %{?fedora} > 8 -export CFLAGS="$RPM_OPT_FLAGS -fno-tree-fre -fno-tree-pre" -%else +#%if %{?fedora} > 8 +#export CFLAGS="$RPM_OPT_FLAGS -fno-tree-fre -fno-tree-pre" +#%else export CFLAGS="$RPM_OPT_FLAGS" -%endif +#%endif %configure \ --sysconfdir=%{_sysconfdir}/wine --disable-static \ @@ -446,6 +447,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/advapi32.dll.so %{_libdir}/wine/advpack.dll.so %{_libdir}/wine/amstream.dll.so +%{_libdir}/wine/appwiz.cpl.so %{_libdir}/wine/atl.dll.so %{_libdir}/wine/avicap32.dll.so %{_libdir}/wine/avifil32.dll.so @@ -504,6 +506,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dpnet.dll.so %{_libdir}/wine/dpnhpast.dll.so %{_libdir}/wine/dpnlobby.dll.so +%{_libdir}/wine/dpwsockx.dll.so %{_libdir}/wine/dsound.dll.so %{_libdir}/wine/dssenh.dll.so %{_libdir}/wine/dswave.dll.so @@ -515,6 +518,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/gdi.exe16 %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gdiplus.dll.so +%{_libdir}/wine/glu32.dll.so %{_libdir}/wine/gphoto2.ds.so %{_libdir}/wine/gpkcsp.dll.so %{_libdir}/wine/hal.dll.so @@ -532,6 +536,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/imm.dll16 %{_libdir}/wine/imm32.dll.so %{_libdir}/wine/inetcomm.dll.so +%{_libdir}/wine/inetmib1.dll.so %{_libdir}/wine/infosoft.dll.so %{_libdir}/wine/initpki.dll.so %{_libdir}/wine/inkobj.dll.so @@ -579,6 +584,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msnet32.dll.so %{_libdir}/wine/mssip32.dll.so %{_libdir}/wine/msrle32.dll.so +%{_libdir}/wine/mstask.dll.so %{_libdir}/wine/msvcirt.dll.so %{_libdir}/wine/msvcr71.dll.so %{_libdir}/wine/msvcrt.dll.so @@ -727,7 +733,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/d3d8.dll.so %{_libdir}/wine/d3d9.dll.so %{_libdir}/wine/d3dx8.dll.so -%{_libdir}/wine/glu32.dll.so %{_libdir}/wine/opengl32.dll.so %{_libdir}/wine/wined3d.dll.so %{_libdir}/wine/dnsapi.dll.so @@ -834,6 +839,16 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Jul 27 2008 Andreas Bierfert +- 1.1.2-1 +- version upgrade (#455960, #456831) +- require freetype (#452417) +- disable wineprefixcreate patch for now + +* Fri Jul 11 2008 Andreas Bierfert +- 1.1.1-1 +- version upgrade + * Tue Jun 17 2008 Andreas Bierfert - 1.0-1 - version upgrade (#446311,#417161) From dbd7bd3c48f691f1fc97f5c2e973420060e856a9 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 5 Sep 2008 22:24:26 +0000 Subject: [PATCH 098/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 24 +++++++++++++++--------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/.cvsignore b/.cvsignore index dc3cf4f..f7894a9 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.2-fe.tar.bz2 +wine-1.1.4-fe.tar.bz2 diff --git a/sources b/sources index 3cbeb5a..fb6339a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -0c2bd312ed15b4ff15fef18794803c7e wine-1.1.2-fe.tar.bz2 +9d1a87a5de2f9e10cb2b7c14ebe25f7f wine-1.1.4-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 5152d17..df7ddd8 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.2 +Version: 1.1.4 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -45,10 +45,8 @@ Patch400: wine-wineshelllink.patch # explain how to use wine with pulseaudio Source402: README-FEDORA-PULSEAUDIO -Patch402: wine-alsa-pulseaudio.patch -Patch0: wine-prefixfonts.patch Patch1: wine-rpath.patch # fix #448338 Patch2: wine-desktop-mime.patch @@ -223,20 +221,18 @@ with the Wine Windows(TM) emulation libraries. %prep %setup -q -n %{name}-%{version}-fe -#%patch0 %patch1 %patch2 %patch400 -%patch402 -p1 %build # work around gcc bug see #440139 # this affects more then just dlls/user32/menu.c -#%if %{?fedora} > 8 -#export CFLAGS="$RPM_OPT_FLAGS -fno-tree-fre -fno-tree-pre" -#%else +%if %{?fedora} > 8 +export CFLAGS="$RPM_OPT_FLAGS -fno-tree-fre -fno-tree-pre" +%else export CFLAGS="$RPM_OPT_FLAGS" -#%endif +%endif %configure \ --sysconfdir=%{_sysconfdir}/wine --disable-static \ @@ -580,6 +576,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msi.dll.so %{_libdir}/wine/msimtf.dll.so %{_libdir}/wine/msimg32.dll.so +%{_libdir}/wine/msisip.dll.so %{_libdir}/wine/msisys.ocx.so %{_libdir}/wine/msnet32.dll.so %{_libdir}/wine/mssip32.dll.so @@ -839,6 +836,15 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Fri Sep 05 2008 Andreas Bierfert +- 1.1.4-1 +- version upgrade +- drop wine-prefixfonts.patch (#460745) + +* Fri Aug 29 2008 Andreas Bierfert +- 1.1.3-1 +- version upgrade + * Sun Jul 27 2008 Andreas Bierfert - 1.1.2-1 - version upgrade (#455960, #456831) From e29d84bd9049cc5b624a267c31ea496dca3a9fe5 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 20 Sep 2008 06:57:03 +0000 Subject: [PATCH 099/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.cvsignore b/.cvsignore index f7894a9..0d38f18 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.4-fe.tar.bz2 +wine-1.1.5-fe.tar.bz2 diff --git a/sources b/sources index fb6339a..b82a492 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -9d1a87a5de2f9e10cb2b7c14ebe25f7f wine-1.1.4-fe.tar.bz2 +659169626a027d2f1920fcb23beefe64 wine-1.1.5-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index df7ddd8..db88399 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.4 +Version: 1.1.5 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -134,7 +134,7 @@ Wine core package includes the basic wine stuff needed by all other packages. %package desktop Summary: Desktop integration features for wine -Group: Application/Emulators +Group: Applications/Emulators Requires(post): /sbin/chkconfig, /sbin/service, Requires(post): desktop-file-utils >= 0.8 Requires(preun): /sbin/chkconfig, /sbin/service @@ -836,6 +836,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sat Sep 20 2008 Andreas Bierfert +- 1.1.5-1 +- version upgrade + * Fri Sep 05 2008 Andreas Bierfert - 1.1.4-1 - version upgrade From 636f6bfbf0d819ea9253ef4d0825c02ce3c3acfb Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 23 Oct 2008 17:17:10 +0000 Subject: [PATCH 100/161] - version upgrade - fix multiarch bugs in devel --- .cvsignore | 2 +- sources | 2 +- wine.spec | 12 +++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index 0d38f18..e9ba791 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.5-fe.tar.bz2 +wine-1.1.6-fe.tar.bz2 diff --git a/sources b/sources index b82a492..9a0c8d4 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -659169626a027d2f1920fcb23beefe64 wine-1.1.5-fe.tar.bz2 +af9ee8ba3121695d7ed44710dea854ae wine-1.1.6-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index db88399..36ed61e 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.5 +Version: 1.1.6 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -95,6 +95,7 @@ BuildRequires: libXi-devel BuildRequires: libXcursor-devel # dbus/hal >= FC5 BuildRequires: dbus-devel hal-devel +BuildRequires: gnutls-devel Requires: wine-core = %{version}-%{release} Requires: wine-capi = %{version}-%{release} @@ -123,7 +124,7 @@ wine-* sub packages. Summary: Wine core package Group: Applications/Emulators Requires: %{_bindir}/xmessage -Requires: freetype +Requires: freetype%{_isa} Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig Obsoletes: wine <= 0.9.15-1%{?dist} @@ -165,7 +166,7 @@ ESD sound support for wine Summary: JACK sound support for wine Group: System Environment/Libraries Requires: wine-core = %{version}-%{release} -Requires: jack-audio-connection-kit +Requires: jack-audio-connection-kit%{_isa} %description jack JACK sound support for wine @@ -836,6 +837,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Thu Oct 23 2008 Andreas Bierfert +- 1.1.6-1 +- version upgrade +- fix multiarch problems (#466892,#467480) + * Sat Sep 20 2008 Andreas Bierfert - 1.1.5-1 - version upgrade From 05192759774962809037e6e0d9194cb6fdfff920 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 26 Oct 2008 13:04:22 +0000 Subject: [PATCH 101/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.cvsignore b/.cvsignore index e9ba791..940f4b3 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.6-fe.tar.bz2 +wine-1.1.7-fe.tar.bz2 diff --git a/sources b/sources index 9a0c8d4..2957bac 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -af9ee8ba3121695d7ed44710dea854ae wine-1.1.6-fe.tar.bz2 +f2a4216dd36c202eafaeac56e557c983 wine-1.1.7-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 36ed61e..dd8a67c 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.6 +Version: 1.1.7 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -509,6 +509,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dswave.dll.so %{_libdir}/wine/dwmapi.dll.so %{_libdir}/wine/dxdiagn.dll.so +%{_libdir}/wine/dxgi.dll.so %{_libdir}/wine/eject.exe.so %{_libdir}/wine/faultrep.dll.so %{_libdir}/wine/fusion.dll.so @@ -837,6 +838,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Oct 26 2008 Andreas Bierfert +- 1.1.7-1 +- version upgrade + * Thu Oct 23 2008 Andreas Bierfert - 1.1.6-1 - version upgrade From 5399e628b4f74a9046213d6bbba6a9e8146a6d4a Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 23 Nov 2008 10:44:34 +0000 Subject: [PATCH 102/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-rpath.patch | 48 ++++++++++++++++-------------------------------- wine.spec | 21 ++++++++++----------- 4 files changed, 28 insertions(+), 45 deletions(-) diff --git a/.cvsignore b/.cvsignore index 940f4b3..34426fe 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.7-fe.tar.bz2 +wine-1.1.9-fe.tar.bz2 diff --git a/sources b/sources index 2957bac..27a28e7 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -f2a4216dd36c202eafaeac56e557c983 wine-1.1.7-fe.tar.bz2 +b671c6fbce7ed91cce9539cf418a2a75 wine-1.1.9-fe.tar.bz2 diff --git a/wine-rpath.patch b/wine-rpath.patch index 8b37fe3..0836ea1 100644 --- a/wine-rpath.patch +++ b/wine-rpath.patch @@ -1,17 +1,17 @@ ---- configure.orig 2007-08-18 09:42:40.000000000 +0200 -+++ configure 2007-08-18 09:44:10.000000000 +0200 -@@ -8525,14 +8525,14 @@ +--- configure.orig 2008-11-05 12:25:10.000000000 +0300 ++++ configure 2008-11-06 22:22:27.000000000 +0300 +@@ -9306,14 +9306,14 @@ fi -- as_ac_var=`echo "ac_cv_cflags_-fPIC -Wl,--rpath,\$ORIGIN/../lib" | $as_tr_sh` --{ echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib" >&5 --echo $ECHO_N "checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib... $ECHO_C" >&6; } -+ as_ac_var=`echo "ac_cv_cflags_-fPIC" | $as_tr_sh` -+{ echo "$as_me:$LINENO: checking whether the compiler supports -fPIC" >&5 -+echo $ECHO_N "checking whether the compiler supports -fPIC $ECHO_C" >&6; } +- as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,--rpath,\$ORIGIN/../lib" | $as_tr_sh` +-{ $as_echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib" >&5 +-$as_echo_n "checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib... " >&6; } ++ as_ac_var=`$as_echo "ac_cv_cflags_-fPIC" | $as_tr_sh` ++{ $as_echo "$as_me:$LINENO: checking whether the compiler supports -fPIC" >&5 ++$as_echo_n "checking whether the compiler supports -fPIC" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + $as_echo_n "(cached) " >&6 else ac_wine_try_cflags_saved=$CFLAGS -CFLAGS="$CFLAGS -fPIC -Wl,--rpath,\$ORIGIN/../lib" @@ -19,30 +19,14 @@ cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF -@@ -8582,8 +8582,8 @@ - { echo "$as_me:$LINENO: result: $ac_res" >&5 - echo "${ECHO_T}$ac_res" >&6; } - if test `eval echo '${'$as_ac_var'}'` = yes; then +@@ -9369,8 +9369,8 @@ + $as_echo "$ac_res" >&6; } + if test `eval 'as_val=${'$as_ac_var'} + $as_echo "$as_val"'` = yes; then - LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" - LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" + LDRPATH_INSTALL="" + LDRPATH_LOCAL="" else - as_ac_var=`echo "ac_cv_cflags_-fPIC -Wl,-R,\$ORIGIN/../lib" | $as_tr_sh` - { echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 ---- configure.ac.orig 2007-08-18 09:44:15.000000000 +0200 -+++ configure.ac 2007-08-18 09:44:46.000000000 +0200 -@@ -439,13 +439,6 @@ - WINE_TRY_CFLAGS([-fPIC -Wl,--export-dynamic], - [AC_SUBST(LDEXECFLAGS,["-Wl,--export-dynamic"])]) - -- WINE_TRY_CFLAGS([-fPIC -Wl,--rpath,\$ORIGIN/../lib], -- [LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" -- LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine"], -- [WINE_TRY_CFLAGS([-fPIC -Wl,-R,\$ORIGIN/../lib], -- [LDRPATH_INSTALL="-Wl,-R,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" -- LDRPATH_LOCAL="-Wl,-R,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine"])]) -- - WINE_TRY_CFLAGS([-Wl,--enable-new-dtags], - [LDRPATH_INSTALL="$LDRPATH_INSTALL -Wl,--enable-new-dtags"]) - + as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,-R,\$ORIGIN/../lib" | $as_tr_sh` + { $as_echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 diff --git a/wine.spec b/wine.spec index dd8a67c..b1726ae 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.7 +Version: 1.1.9 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -39,10 +39,6 @@ Source201: wine.directory # mime types Source300: wine-mime-msi.desktop -# enhancements -Source400: wineshelllink-fedora -Patch400: wine-wineshelllink.patch - # explain how to use wine with pulseaudio Source402: README-FEDORA-PULSEAUDIO @@ -224,7 +220,6 @@ with the Wine Windows(TM) emulation libraries. %setup -q -n %{name}-%{version}-fe %patch1 %patch2 -%patch400 %build # work around gcc bug see #440139 @@ -327,9 +322,6 @@ cp %{SOURCE3} README-Fedora mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ install -p -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ -install -p -m755 %{SOURCE400} $RPM_BUILD_ROOT%{_bindir}/wineshelllink-fedora - - # deploy pulseaudio readme cp %{SOURCE402} . @@ -397,8 +389,6 @@ update-desktop-database &>/dev/null || : %{_bindir}/wineconsole %{_bindir}/wineprefixcreate %{_mandir}/man1/wineprefixcreate.1* -%{_bindir}/wineshelllink -%{_bindir}/wineshelllink-fedora %{_bindir}/winecfg %{_bindir}/uninstaller %{_libdir}/wine/expand.exe.so @@ -474,6 +464,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/ctl3d32.dll.so %{_libdir}/wine/ctl3dv2.dll16 %{_libdir}/wine/d3d10.dll.so +%{_libdir}/wine/d3d10core.dll.so %{_libdir}/wine/d3dim.dll.so %{_libdir}/wine/d3drm.dll.so %{_libdir}/wine/d3dx9_*.dll.so @@ -737,6 +728,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dnsapi.dll.so %{_libdir}/wine/iexplore.exe.so %{_libdir}/wine/xcopy.exe.so +%{_libdir}/wine/xinput1_1.dll.so +%{_libdir}/wine/xinput1_2.dll.so +%{_libdir}/wine/xinput1_3.dll.so +%{_libdir}/wine/xinput9_1_0.dll.so %{_sysconfdir}/ld.so.conf.d/wine-32.conf %files tools @@ -838,6 +833,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Sun Nov 23 2008 Andreas Bierfert +- 1.1.9-1 +- version upgrade + * Sun Oct 26 2008 Andreas Bierfert - 1.1.7-1 - version upgrade From 5cbbd27ca25128bf9dd73787944ea8598c650c1b Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 24 Nov 2008 22:19:32 +0000 Subject: [PATCH 103/161] - fix #469907 --- wine-winemine.desktop | 2 +- wine.spec | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/wine-winemine.desktop b/wine-winemine.desktop index fe0963c..f92401c 100644 --- a/wine-winemine.desktop +++ b/wine-winemine.desktop @@ -5,4 +5,4 @@ Exec=winemine Terminal=false Type=Application Encoding=UTF-8 -Categories=Application;Game; +Categories=Application;Game;LogicGame; diff --git a/wine.spec b/wine.spec index b1726ae..e8cda9f 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 1.1.9 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -833,6 +833,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %changelog +* Mon Nov 24 2008 Andreas Bierfert +- 1.1.9-2 +- fix #469907 + * Sun Nov 23 2008 Andreas Bierfert - 1.1.9-1 - version upgrade From b9fd799c67c1f7acc933c96f7040f8975f1a219b Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 10 Dec 2008 05:27:04 +0000 Subject: [PATCH 104/161] - version upgrade - add pulseaudio support --- .cvsignore | 2 +- README-FEDORA-PULSEAUDIO | 10 +- sources | 2 +- wine-pulseaudio-waveout.patch | 1204 +++++++++++++++++++++++++++++++++ wine-pulseaudio.patch | 1188 ++++++++++++++++++++++++++++++++ wine.spec | 41 +- 6 files changed, 2435 insertions(+), 12 deletions(-) create mode 100644 wine-pulseaudio-waveout.patch create mode 100644 wine-pulseaudio.patch diff --git a/.cvsignore b/.cvsignore index 34426fe..18ed564 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.9-fe.tar.bz2 +wine-1.1.10-fe.tar.bz2 diff --git a/README-FEDORA-PULSEAUDIO b/README-FEDORA-PULSEAUDIO index 764a1e5..5704086 100644 --- a/README-FEDORA-PULSEAUDIO +++ b/README-FEDORA-PULSEAUDIO @@ -1,15 +1,19 @@ Wine and Pulseaudio Support --------------------------- -Currently wine does not have native support for pulseaudio. However different -ways exist to make wine sound work alongside pulseaudio. Different sound -outputs can be selected via `winecfg` or in the registry of wine. +Currently wine does not have native support for pulseaudio. However, some +patches exist to make wine use a native pulseaudio backend +(see http://bugs.winehq.org/show_bug.cgi?id=10495). These have been included +into the fedora wine package. If you have problems please do _not_ report them +to the wine project. +Other ways to get wine working with pulseaudio are described below: ALSA ---- To achieve sound output via the wine alsa driver you need to add a pulseaudio alsa device to the alsa configuration and activate it in wine. See http://www.pulseaudio.org/wiki/PerfectSetup#ALSAApplications on how to do this. +For this alsa-plugins-pulseaudio.i386 should be installed. Esound diff --git a/sources b/sources index 27a28e7..37c0a2e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -b671c6fbce7ed91cce9539cf418a2a75 wine-1.1.9-fe.tar.bz2 +e8e6a40936896d488bae6d517ececed9 wine-1.1.10-fe.tar.bz2 diff --git a/wine-pulseaudio-waveout.patch b/wine-pulseaudio-waveout.patch new file mode 100644 index 0000000..a85e35c --- /dev/null +++ b/wine-pulseaudio-waveout.patch @@ -0,0 +1,1204 @@ +diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c +index 3ef6a03..64274d4 100644 +--- a/dlls/winepulse.drv/pulse.c ++++ b/dlls/winepulse.drv/pulse.c +@@ -251,6 +251,75 @@ int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, + */ + + /****************************************************************** ++ * PULSE_setupFormat ++ * ++ * Checks to see if the audio format in wf is supported, and if so set up the ++ * pa_sample_spec at ss to that format. ++ */ ++BOOL PULSE_setupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss) { ++ ++ if (wf->nSamplesPerSecnSamplesPerSec>DSBFREQUENCY_MAX) ++ return FALSE; ++ ++ ss->channels=wf->nChannels; ++ ss->rate=wf->nSamplesPerSec; ++ ++ if (wf->wFormatTag == WAVE_FORMAT_PCM) { ++ if (ss->channels==1 || ss->channels==2) { ++ switch (wf->wBitsPerSample) { ++ case 8: ++ ss->format = PA_SAMPLE_U8; ++ return TRUE; ++ case 16: ++ ss->format = PA_SAMPLE_S16NE; ++ return TRUE; ++ } ++ } ++ } else if (wf->wFormatTag == WAVE_FORMAT_EXTENSIBLE) { ++ WAVEFORMATEXTENSIBLE * wfex = (WAVEFORMATEXTENSIBLE *)wf; ++ ++ if (wf->cbSize == 22 && ++ (IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM))) { ++ if (ss->channels>=1 && ss->channels<=6) { ++ if (wf->wBitsPerSample==wfex->Samples.wValidBitsPerSample) { ++ switch (wf->wBitsPerSample) { ++ case 8: ++ ss->format=PA_SAMPLE_U8; ++ return TRUE; ++ case 16: ++ ss->format=PA_SAMPLE_S16NE; ++ return TRUE; ++ case 43: ++ ss->format=PA_SAMPLE_S32NE; ++ return TRUE; ++ } ++ } else ++ WARN("wBitsPerSample != wValidBitsPerSample not supported yet\n"); ++ } ++ } else if (wf->cbSize == 22 && ++ (IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))) { ++ if (ss->channels>=1 && ss->channels<=6) { ++ if (wf->wBitsPerSample==wfex->Samples.wValidBitsPerSample && wf->wBitsPerSample == 32) { ++ ss->format=PA_SAMPLE_FLOAT32NE; ++ return TRUE; ++ } ++ } ++ } else ++ WARN("only KSDATAFORMAT_SUBTYPE_PCM and KSDATAFORMAT_SUBTYPE_IEEE_FLOAT " ++ "supported\n"); ++ } else if (wf->wFormatTag == WAVE_FORMAT_MULAW || wf->wFormatTag == WAVE_FORMAT_ALAW) { ++ if (wf->wBitsPerSample==8) { ++ ss->format= (wf->wFormatTag==WAVE_FORMAT_MULAW) ? PA_SAMPLE_ULAW : PA_SAMPLE_ALAW; ++ return TRUE; ++ } else ++ ERR("WAVE_FORMAT_MULAW and WAVE_FORMAT_ALAW wBitsPerSample must = 8\n"); ++ } else ++ WARN("only WAVE_FORMAT_PCM, WAVE_FORMAT_MULAW, WAVE_FORMAT_ALAW and WAVE_FORMAT_EXTENSIBLE supported\n"); ++ ++ return FALSE; ++} ++ ++/****************************************************************** + * PULSE_free_wavedevs [internal] + * + * Free and deallocated all the wavedevs in the array of size allocated +@@ -328,6 +397,23 @@ void PULSE_wait_for_operation(pa_operation *o, WINE_WAVEINST *wd) { + * Common Callbacks + */ + ++/************************************************************************** ++ * PULSE_stream_request_callback ++ * ++ * Called by the pulse mainloop whenever it wants or has audio data. ++ */ ++void PULSE_stream_request_callback(pa_stream *s, size_t nbytes, void *userdata) { ++ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; ++ assert(s && ww); ++ ++ TRACE("Asking to feed.\n"); ++ ++ /* Make sure that the player is running */ ++ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { ++ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); ++ } ++} ++ + /****************************************************************** + * PULSE_stream_state_callback + * +diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c +index fe7543f..9f0ade5 100644 +--- a/dlls/winepulse.drv/waveout.c ++++ b/dlls/winepulse.drv/waveout.c +@@ -70,6 +70,879 @@ WINE_DEFAULT_DEBUG_CHANNEL(wave); + * +---------+-------------+---------------+---------------------------------+ + */ + ++/* ++ * - It is currently unknown if pausing in a loop works the same as expected. ++ */ ++ ++/*======================================================================* ++ * WAVE OUT specific PulseAudio Callbacks * ++ *======================================================================*/ ++ ++#if HAVE_PULSEAUDIO_0_9_11 ++/************************************************************************** ++ * PULSE_started_callback [internal] ++ * ++ * Called by the pulse mainloop whenever stream playback resumes after an ++ * underflow or an initial start ++ */ ++static void PULSE_started_callback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ TRACE("Audio flowing.\n"); ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size) { ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_STARTING, 0, FALSE); ++ } ++} ++#else /* HAVE_PULSEAUDIO_0_9_11 */ ++/************************************************************************** ++ * PULSE_timing_info_update_callback [internal] ++ * ++ * Called by the pulse mainloop whenever the timing info gets updated, we ++ * use this to send the started signal */ ++static void PULSE_timing_info_update_callback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ if (wwo->is_buffering && wwo->timing_info && wwo->timing_info->playing) { ++ TRACE("Audio flowing.\n"); ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_STARTING, 0, FALSE); ++ } ++} ++#endif ++ ++/************************************************************************** ++ * PULSE_suspended_callback [internal] ++ * ++ * Called by the pulse mainloop any time stream playback is intentionally ++ * suspended or resumed from being suspended. ++ */ ++static void PULSE_suspended_callback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ /* Currently we handle this kinda like an underrun. Perhaps we should ++ * tell the client somehow so it doesn't just hang? */ ++ ++ if (!pa_stream_is_suspended(s) && wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); ++} ++ ++/************************************************************************** ++ * PULSE_underrun_callback [internal] ++ * ++ * Called by the pulse mainloop when the prebuf runs out of data. ++ */ ++static void PULSE_underrun_callback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ /* If we aren't playing, don't care ^_^ */ ++ if (wwo->state != WINE_WS_PLAYING) return; ++ ++ TRACE("Underrun occurred.\n"); ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0); ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); ++} ++ ++/*======================================================================* ++ * "Low level" WAVE OUT implementation * ++ *======================================================================*/ ++ ++/************************************************************************** ++ * wodNotifyClient [internal] ++ */ ++static DWORD wodNotifyClient(WINE_WAVEINST* wwo, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { ++ TRACE("wMsg = 0x%04x dwParm1 = %04X dwParam2 = %04X\n", wMsg, dwParam1, dwParam2); ++ ++ switch (wMsg) { ++ case WOM_OPEN: ++ case WOM_CLOSE: ++ case WOM_DONE: ++ if (wwo->wFlags != DCB_NULL && ++ !DriverCallback(wwo->waveDesc.dwCallback, wwo->wFlags, (HDRVR)wwo->waveDesc.hWave, ++ wMsg, wwo->waveDesc.dwInstance, dwParam1, dwParam2)) { ++ WARN("can't notify client !\n"); ++ return MMSYSERR_ERROR; ++ } ++ break; ++ default: ++ FIXME("Unknown callback message %u\n", wMsg); ++ return MMSYSERR_INVALPARAM; ++ } ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodPlayer_BeginWaveHdr [internal] ++ * ++ * Makes the specified lpWaveHdr the currently playing wave header. ++ * If the specified wave header is a begin loop and we're not already in ++ * a loop, setup the loop. ++ */ ++static void wodPlayer_BeginWaveHdr(WINE_WAVEINST* wwo, LPWAVEHDR lpWaveHdr) { ++ wwo->lpPlayPtr = lpWaveHdr; ++ ++ if (!lpWaveHdr) return; ++ ++ if (lpWaveHdr->dwFlags & WHDR_BEGINLOOP) { ++ if (wwo->lpLoopPtr) { ++ WARN("Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr); ++ } else { ++ TRACE("Starting loop (%dx) with %p\n", lpWaveHdr->dwLoops, lpWaveHdr); ++ wwo->lpLoopPtr = lpWaveHdr; ++ /* Windows does not touch WAVEHDR.dwLoops, ++ * so we need to make an internal copy */ ++ wwo->dwLoops = lpWaveHdr->dwLoops; ++ } ++ } ++ wwo->dwPartialOffset = 0; ++} ++ ++/************************************************************************** ++ * wodPlayer_PlayPtrNext [internal] ++ * ++ * Advance the play pointer to the next waveheader, looping if required. ++ */ ++static LPWAVEHDR wodPlayer_PlayPtrNext(WINE_WAVEINST* wwo) { ++ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; ++ ++ wwo->dwPartialOffset = 0; ++ if ((lpWaveHdr->dwFlags & WHDR_ENDLOOP) && wwo->lpLoopPtr) { ++ /* We're at the end of a loop, loop if required */ ++ if (--wwo->dwLoops > 0) { ++ wwo->lpPlayPtr = wwo->lpLoopPtr; ++ } else { ++ /* Handle overlapping loops correctly */ ++ if (wwo->lpLoopPtr != lpWaveHdr && (lpWaveHdr->dwFlags & WHDR_BEGINLOOP)) { ++ FIXME("Correctly handled case ? (ending loop buffer also starts a new loop)\n"); ++ /* shall we consider the END flag for the closing loop or for ++ * the opening one or for both ??? ++ * code assumes for closing loop only ++ */ ++ } else { ++ lpWaveHdr = lpWaveHdr->lpNext; ++ } ++ wwo->lpLoopPtr = NULL; ++ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr); ++ } ++ } else { ++ /* We're not in a loop. Advance to the next wave header */ ++ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr = lpWaveHdr->lpNext); ++ } ++ ++ return lpWaveHdr; ++} ++ ++/************************************************************************** ++ * wodPlayer_CheckReleasing [internal] ++ * ++ * Check to see if data has stopped being fed to us before actual playback ++ * starts. In this case the app wants a smaller buffer than pulse currently is ++ * offering. We ignore this and just start the releasing reference. The ++ * downside is that there is a latency unknown to the app. The upside is that ++ * pulse is good at managing latencies ++ */ ++static void wodPlayer_CheckReleasing(WINE_WAVEINST *wwo) { ++ LPWAVEHDR lpWaveHdr = wwo->lpQueuePtr; ++ ++ /* If we aren't playing, (only valid on pulse >= 0.9.11) and we have ++ * queued data and we aren't relasing, start releasing if either: ++ * - We have stopped being given wavehdrs, or ++ * - We have 2s worth of audio built up.*/ ++ if (wwo->is_buffering && lpWaveHdr && !wwo->is_releasing && ++ (pa_bytes_to_usec(lpWaveHdr->dwBufferLength, &wwo->sample_spec)/2 < pa_timeval_age(&wwo->last_header)|| ++ wwo->timing_info->write_index - lpWaveHdr->reserved > pa_bytes_per_second(&wwo->sample_spec)*2)) { ++ ++ pa_gettimeofday(&wwo->started_releasing); ++ wwo->is_releasing = TRUE; ++ wwo->releasing_offset = wwo->lpQueuePtr->reserved; ++ TRACE("Starting to release early: %u\n", wwo->releasing_offset); ++ } ++} ++ ++/************************************************************************** ++ * wodPlayer_NotifyCompletions [internal] ++ * ++ * Notifies and remove from queue all wavehdrs which have been played to ++ * the speaker based on a reference time of (theoretical) playback start. If ++ * force is true, we notify all wavehdrs and remove them all from the queue ++ * even if they are unplayed or part of a loop. We return the time to wait ++ * until the next wavehdr needs to be freed, or INFINITE if there are no more ++ * wavehdrs. ++ */ ++static DWORD wodPlayer_NotifyCompletions(WINE_WAVEINST* wwo, BOOL force) { ++ LPWAVEHDR lpWaveHdr; ++ pa_usec_t time; ++ pa_usec_t wait; ++ ++ time = pa_bytes_to_usec(wwo->releasing_offset, &wwo->sample_spec); ++ if (wwo->is_releasing) ++ time += pa_timeval_age(&wwo->started_releasing); ++ ++ for (lpWaveHdr = wwo->lpQueuePtr; lpWaveHdr; lpWaveHdr = wwo->lpQueuePtr) { ++ if (!force) { ++ /* Start from lpQueuePtr and keep notifying until: ++ * - we hit an unwritten wavehdr ++ * - we hit the beginning of a running loop ++ * - we hit a wavehdr which hasn't finished playing ++ */ ++ if (lpWaveHdr == wwo->lpPlayPtr) { TRACE("play %p\n", lpWaveHdr); return INFINITE; } ++ if (lpWaveHdr == wwo->lpLoopPtr) { TRACE("loop %p\n", lpWaveHdr); return INFINITE; } ++ ++ /* See if this data has been played, and if not, return when it will have been */ ++ wait = pa_bytes_to_usec(lpWaveHdr->reserved + lpWaveHdr->dwBufferLength, &wwo->sample_spec); ++ if (wait >= time) { ++ wait = (wait - time) / 1000; ++ return wait ?: 1; ++ } ++ } ++ ++ /* return the wavehdr */ ++ wwo->lpQueuePtr = lpWaveHdr->lpNext; ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ ++ wodNotifyClient(wwo, WOM_DONE, (DWORD)lpWaveHdr, 0); ++ } ++ /* No more wavehdrs */ ++ TRACE("Empty queue\n"); ++ return INFINITE; ++} ++ ++/************************************************************************** ++ * wodPlayer_WriteMax [internal] ++ * Writes either space or the wavehdr's size into pulse's buffer, and ++ * returning how much data was written. ++ */ ++static int wodPlayer_WriteMax(WINE_WAVEINST *wwo, size_t *space) { ++ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; ++ size_t toWrite = min(lpWaveHdr->dwBufferLength - wwo->dwPartialOffset, *space); ++ size_t written = 0; ++ ++ if (!wwo->stream || ++ !PULSE_context || ++ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) { ++ return 0; ++ } ++ ++ if (toWrite > 0 && ++ pa_stream_write(wwo->stream, lpWaveHdr->lpData + wwo->dwPartialOffset, toWrite, NULL, 0, PA_SEEK_RELATIVE) >= 0) { ++ TRACE("Writing wavehdr %p.%u[%u]\n", lpWaveHdr, wwo->dwPartialOffset, lpWaveHdr->dwBufferLength); ++ written = toWrite; ++ } ++ ++ /* Check to see if we wrote all of the wavehdr */ ++ if ((wwo->dwPartialOffset += written) >= lpWaveHdr->dwBufferLength) ++ wodPlayer_PlayPtrNext(wwo); ++ *space -= written; ++ ++ return written; ++} ++ ++/************************************************************************** ++ * wodPlayer_Feed [internal] ++ * ++ * Feed as much sound data as we can into pulse using wodPlayer_WriteMax ++ */ ++static void wodPlayer_Feed(WINE_WAVEINST* wwo, size_t space) { ++ /* no more room... no need to try to feed */ ++ if (space > 0) { ++ /* Feed from a partial wavehdr */ ++ if (wwo->lpPlayPtr && wwo->dwPartialOffset != 0) ++ wodPlayer_WriteMax(wwo, &space); ++ ++ /* Feed wavehdrs until we run out of wavehdrs or buffer space */ ++ 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); ++ } ++ } ++} ++ ++/************************************************************************** ++ * wodPlayer_Reset [internal] ++ * ++ * wodPlayer helper. Resets current output stream. ++ */ ++static void wodPlayer_Reset(WINE_WAVEINST* wwo) { ++ enum win_wm_message msg; ++ DWORD param; ++ HANDLE ev; ++ pa_operation *o; ++ ++ TRACE("(%p)\n", wwo); ++ ++ /* remove any buffer */ ++ wodPlayer_NotifyCompletions(wwo, TRUE); ++ ++ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; ++ if (wwo->state != WINE_WS_PAUSED) ++ wwo->state = WINE_WS_STOPPED; ++ wwo->dwPartialOffset = 0; ++ ++ if (!wwo->stream || ++ !PULSE_context || ++ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) { ++ return; ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ /* flush the output buffer of written data*/ ++ if ((o = pa_stream_flush(wwo->stream, PULSE_stream_success_callback, NULL))) ++ PULSE_wait_for_operation(o, wwo); ++ ++ /* Ask for the timing info to be updated (sanity, I don't know if we _have_ to) */ ++ if ((o = pa_stream_update_timing_info(wwo->stream, PULSE_stream_success_callback, wwo))) ++ PULSE_wait_for_operation(o, wwo); ++ ++ /* Reset the written byte count as some data may have been flushed */ ++ wwo->releasing_offset = wwo->last_reset = wwo->timing_info->write_index; ++ if (wwo->is_releasing) ++ pa_gettimeofday(&wwo->started_releasing); ++ ++ /* return all pending headers in queue */ ++ EnterCriticalSection(&wwo->msgRing.msg_crst); ++ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { ++ if (msg != WINE_WM_HEADER) { ++ SetEvent(ev); ++ continue; ++ } ++ ((LPWAVEHDR)param)->dwFlags &= ~WHDR_INQUEUE; ++ ((LPWAVEHDR)param)->dwFlags |= WHDR_DONE; ++ wodNotifyClient(wwo, WOM_DONE, param, 0); ++ } ++ PULSE_ResetRingMessage(&wwo->msgRing); ++ LeaveCriticalSection(&wwo->msgRing.msg_crst); ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++} ++ ++/************************************************************************** ++ * wodPlayer_Underrun [internal] ++ * ++ * wodPlayer helper. Deal with a stream underrun. ++ */ ++static void wodPlayer_Underrun(WINE_WAVEINST* wwo) { ++ size_t space; ++ pa_operation *o; ++ ++ wwo->is_buffering = TRUE; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ if (wwo->lpPlayPtr) { ++ TRACE("There is queued data. Trying to recover.\n"); ++ space = pa_stream_writable_size(wwo->stream); ++ ++ if (!space) { ++ TRACE("No space to feed. Flushing.\n"); ++ if ((o = pa_stream_flush(wwo->stream, PULSE_stream_success_callback, wwo))) ++ PULSE_wait_for_operation(o, wwo); ++ space = pa_stream_writable_size(wwo->stream); ++ } ++ wodPlayer_Feed(wwo, space); ++ } ++ ++ /* Ask for a timing update */ ++ if ((o = pa_stream_update_timing_info(wwo->stream, PULSE_stream_success_callback, wwo))) ++ PULSE_wait_for_operation(o, wwo); ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ if (wwo->timing_info->playing) { ++ TRACE("Recovered.\n"); ++ wwo->is_buffering = FALSE; ++ } else { ++ ERR("Stream underrun! %i\n", wwo->instance_ref); ++ wwo->is_releasing = FALSE; ++ wwo->releasing_offset = wwo->timing_info->write_index; ++ } ++ ++ wwo->releasing_offset = wwo->timing_info->write_index; ++} ++ ++ ++/************************************************************************** ++ * wodPlayer_ProcessMessages [internal] ++ */ ++static void wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { ++ LPWAVEHDR lpWaveHdr; ++ enum win_wm_message msg; ++ DWORD param; ++ HANDLE ev; ++ pa_operation *o; ++ ++ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { ++ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); ++ ++ switch (msg) { ++ case WINE_WM_PAUSING: ++ wwo->state = WINE_WS_PAUSED; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if ((o = pa_stream_cork(wwo->stream, 1, PULSE_stream_success_callback, NULL))) ++ PULSE_wait_for_operation(o, wwo); ++ ++ /* save how far we are, as releasing will restart from here */ ++ if (wwo->is_releasing) ++ wwo->releasing_offset = wwo->timing_info->write_index; ++ ++ wwo->is_buffering = TRUE; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_RESTARTING: ++ if (wwo->state == WINE_WS_PAUSED) { ++ wwo->state = WINE_WS_PLAYING; ++ if (wwo->is_releasing) ++ pa_gettimeofday(&wwo->started_releasing); ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if ((o = pa_stream_cork(wwo->stream, 0, PULSE_stream_success_callback, NULL))) ++ PULSE_wait_for_operation(o, wwo); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_HEADER: ++ lpWaveHdr = (LPWAVEHDR)param; ++ /* insert buffer at the end of queue */ ++ { ++ LPWAVEHDR* wh; ++ for (wh = &(wwo->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); ++ *wh = lpWaveHdr; ++ } ++ ++ if (!wwo->lpPlayPtr) ++ wodPlayer_BeginWaveHdr(wwo,lpWaveHdr); ++ /* Try and feed now, as we may have missed when pulse first asked */ ++ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); ++ if (wwo->state == WINE_WS_STOPPED) ++ wwo->state = WINE_WS_PLAYING; ++ if (wwo->is_buffering && !wwo->is_releasing) ++ pa_gettimeofday(&wwo->last_header); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_RESETTING: ++ wodPlayer_Reset(wwo); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_BREAKLOOP: ++ if (wwo->state == WINE_WS_PLAYING && wwo->lpLoopPtr != NULL) ++ /* ensure exit at end of current loop */ ++ wwo->dwLoops = 1; ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_FEED: /* Sent by the pulse thread */ ++ wodPlayer_Feed(wwo, (size_t)param); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_XRUN: /* Sent by the pulse thread */ ++ wodPlayer_Underrun(wwo); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_STARTING: /* Set by the pulse thread */ ++ wwo->is_buffering = FALSE; ++ /* Start releasing wavehdrs if we haven't already */ ++ if (!wwo->is_releasing) { ++ wwo->is_releasing = TRUE; ++ pa_gettimeofday(&wwo->started_releasing); ++ } ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_CLOSING: /* If param = 1, close because of a failure */ ++ wwo->hThread = NULL; ++ if ((DWORD)param == 1) { ++ /* If we are here, the stream has failed */ ++ wwo->state = WINE_WS_FAILED; ++ SetEvent(ev); ++ PULSE_DestroyRingMessage(&wwo->msgRing); ++ wodPlayer_NotifyCompletions(wwo, TRUE); ++ wodNotifyClient(wwo, WOM_CLOSE, 0L, 0L); ++ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_disconnect(wwo->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ TRACE("Thread exiting because of failure.\n"); ++ ExitThread(1); ++ } ++ wwo->state = WINE_WS_CLOSED; ++ /* sanity check: this should not happen since the device must have been reset before */ ++ if (wwo->lpQueuePtr || wwo->lpPlayPtr) ERR("out of sync\n"); ++ SetEvent(ev); ++ TRACE("Thread exiting.\n"); ++ ExitThread(0); ++ /* shouldn't go here */ ++ ++ default: ++ FIXME("unknown message %d\n", msg); ++ break; ++ } ++ } ++} ++ ++/************************************************************************** ++ * wodPlayer [internal] ++ */ ++static DWORD CALLBACK wodPlayer(LPVOID lpParam) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)lpParam; ++ DWORD dwSleepTime = INFINITE; ++ ++ wwo->state = WINE_WS_STOPPED; ++ SetEvent(wwo->hStartUpEvent); ++ ++ /* Wait for the shortest time before an action is required. If there are ++ * no pending actions, wait forever for a command. */ ++ for (;;) { ++ TRACE("Waiting %u ms\n", dwSleepTime); ++ PULSE_WaitRingMessage(&wwo->msgRing, dwSleepTime); ++ wodPlayer_ProcessMessages(wwo); ++ if (wwo->state == WINE_WS_PLAYING) { ++ wodPlayer_CheckReleasing(wwo); ++ dwSleepTime = wodPlayer_NotifyCompletions(wwo, FALSE); ++ } else ++ dwSleepTime = INFINITE; ++ } ++} ++ ++/************************************************************************** ++ * wodOpen [internal] ++ */ ++static DWORD wodOpen(WORD wDevID, LPDWORD lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { ++ WINE_WAVEDEV *wdo; ++ WINE_WAVEINST *wwo = NULL; ++ pa_operation *o; ++ DWORD x, ret = MMSYSERR_NOERROR; ++ pa_sample_spec test; ++ ++ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); ++ if (lpDesc == NULL) { ++ WARN("Invalid Parameter !\n"); ++ return MMSYSERR_INVALPARAM; ++ } ++ ++ if (wDevID >= PULSE_WodNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_BADDEVICEID; ++ } ++ wdo = &WOutDev[wDevID]; ++ ++ /* check to see if format is supported and make pa_sample_spec struct */ ++ if (!PULSE_setupFormat(lpDesc->lpFormat, &test) && ++ !pa_sample_spec_valid(&test)) { ++ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ return WAVERR_BADFORMAT; ++ } ++ ++ if (TRACE_ON(wave)) { ++ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; ++ pa_sample_spec_snprint(t, sizeof(t), &test); ++ TRACE("Sample spec '%s'\n", t); ++ } ++ ++ if (dwFlags & WAVE_FORMAT_QUERY) { ++ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ return MMSYSERR_NOERROR; ++ } ++ ++ for (x = 0; x < PULSE_MAX_STREAM_INSTANCES; x++) { ++ if (wdo->instance[x] == NULL) { ++ if (!(wdo->instance[x] = wwo = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEINST)))) ++ return MMSYSERR_NOMEM; ++ TRACE("Allocated new playback instance %u on device %u.\n", x, wDevID); ++ break; ++ } ++ } ++ if (x >= PULSE_MAX_STREAM_INSTANCES) return MMSYSERR_ALLOCATED; ++ ++ *lpdwUser = (DWORD)wwo; ++ wwo->instance_ref = x; ++ wwo->sample_spec.format = test.format; ++ wwo->sample_spec.rate = test.rate; ++ wwo->sample_spec.channels = test.channels; ++ if (test.channels == 2) { ++ wwo->volume.channels = 2; ++ wwo->volume.values[0] = wdo->left_vol; ++ wwo->volume.values[1] = wdo->right_vol; ++ } else ++ pa_cvolume_set(&wwo->volume, test.channels, (wdo->left_vol + wdo->right_vol)/2); ++ wwo->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); ++ wwo->waveDesc = *lpDesc; ++ wwo->lpQueuePtr = wwo->lpPlayPtr = wwo->lpLoopPtr = NULL; ++ wwo->dwPartialOffset = 0; ++ wwo->is_buffering = TRUE; ++ wwo->is_releasing = FALSE; ++ wwo->releasing_offset = 0; ++ wwo->timing_info = NULL; ++ PULSE_InitRingMessage(&wwo->msgRing); ++ ++ /* FIXME Find a better name for the stream */ ++ wwo->stream = pa_stream_new(PULSE_context, "Wine Playback", &wwo->sample_spec, NULL); ++ assert(wwo->stream); ++ ++ pa_stream_set_state_callback(wwo->stream, PULSE_stream_state_callback, wwo); ++ pa_stream_set_write_callback(wwo->stream, PULSE_stream_request_callback, wwo); ++ pa_stream_set_underflow_callback(wwo->stream, PULSE_underrun_callback, wwo); ++ pa_stream_set_suspended_callback(wwo->stream, PULSE_suspended_callback, wwo); ++#if HAVE_PULSEAUDIO_0_9_11 ++ pa_stream_set_started_callback(wwo->stream, PULSE_started_callback, wwo); ++#else ++ pa_stream_set_latency_update_callback(wwo->stream, PULSE_timing_info_update_callback, wwo); ++#endif ++ ++ /* I don't like this, but... */ ++ wwo->buffer_attr = pa_xmalloc(sizeof(pa_buffer_attr)); ++ wwo->buffer_attr->maxlength = (uint32_t) -1; ++ wwo->buffer_attr->tlength = pa_bytes_per_second(&wwo->sample_spec)/5; ++ wwo->buffer_attr->prebuf = (uint32_t) -1; ++ wwo->buffer_attr->minreq = (uint32_t) -1; ++ ++ TRACE("Connecting stream for playback.\n"); ++ pa_threaded_mainloop_lock(PULSE_ml); ++#if HAVE_PULSEAUDIO_0_9_11 ++ pa_stream_connect_playback(wwo->stream, wdo->device_name, wwo->buffer_attr, PA_STREAM_ADJUST_LATENCY, &wwo->volume, NULL); ++#else ++ pa_stream_connect_playback(wwo->stream, wdo->device_name, wwo->buffer_attr, PA_STREAM_AUTO_TIMING_UPDATE, &wwo->volume, NULL); ++#endif ++ ++ for (;;) { ++ pa_context_state_t cstate = pa_context_get_state(PULSE_context); ++ pa_stream_state_t sstate = pa_stream_get_state(wwo->stream); ++ ++ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || ++ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { ++ ERR("Failed to connect context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ret = MMSYSERR_NODRIVER; ++ goto err; ++ } ++ ++ if (sstate == PA_STREAM_READY) ++ break; ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ TRACE("Stream connected for playback.\n"); ++ ++ if ((o = pa_stream_update_timing_info(wwo->stream, PULSE_stream_success_callback, wwo))) ++ PULSE_wait_for_operation(o, wwo); ++ ++ wwo->timing_info = pa_stream_get_timing_info(wwo->stream); ++ assert(wwo->timing_info); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ wwo->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); ++ wwo->hThread = CreateThread(NULL, 0, wodPlayer, (LPVOID)wwo, 0, &(wwo->dwThreadID)); ++ if (wwo->hThread) ++ SetThreadPriority(wwo->hThread, THREAD_PRIORITY_TIME_CRITICAL); ++ else { ++ ERR("Thread creation for the wodPlayer failed!\n"); ++ ret = MMSYSERR_NOMEM; ++ goto err; ++ } ++ WaitForSingleObject(wwo->hStartUpEvent, INFINITE); ++ CloseHandle(wwo->hStartUpEvent); ++ wwo->hStartUpEvent = INVALID_HANDLE_VALUE; ++ ++ ++ return wodNotifyClient (wwo, WOM_OPEN, 0L, 0L); ++ ++err: ++ TRACE("Bailing out...\n"); ++ wdo->instance[x] = NULL; ++ if (!wwo) ++ return ret; ++ ++ if (wwo->hStartUpEvent != INVALID_HANDLE_VALUE) ++ CloseHandle(wwo->hStartUpEvent); ++ ++ if (wwo->msgRing.ring_buffer_size > 0) ++ PULSE_DestroyRingMessage(&wwo->msgRing); ++ ++ if (pa_stream_get_state(wwo->stream) == PA_STREAM_READY) ++ pa_stream_disconnect(wwo->stream); ++ pa_stream_unref(wwo->stream); ++ if (wwo->buffer_attr) ++ pa_xfree(wwo->buffer_attr); ++ HeapFree(GetProcessHeap(), 0, wwo); ++ ++ return ret; ++} ++ ++/************************************************************************** ++ * wodClose [internal] ++ */ ++static DWORD wodClose(WORD wDevID, WINE_WAVEINST *wwo) { ++ pa_operation *o; ++ DWORD ret; ++ ++ TRACE("(%u, %p);\n", wDevID, wwo); ++ if (wDevID >= PULSE_WodNumDevs) { ++ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } else if (!wwo) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (wwo->state != WINE_WS_FAILED) { ++ if (wwo->lpQueuePtr && wwo->lpPlayPtr) { ++ WARN("buffers still playing !\n"); ++ return WAVERR_STILLPLAYING; ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if ((o = pa_stream_drain(wwo->stream, PULSE_stream_success_callback, NULL))) ++ PULSE_wait_for_operation(o, wwo); ++ pa_stream_disconnect(wwo->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_CLOSING, 0, TRUE); ++ ++ PULSE_DestroyRingMessage(&wwo->msgRing); ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_disconnect(wwo->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ ret = wodNotifyClient(wwo, WOM_CLOSE, 0L, 0L); ++ ++ if (wwo->buffer_attr) ++ pa_xfree(wwo->buffer_attr); ++ pa_stream_unref(wwo->stream); ++ WOutDev[wDevID].instance[wwo->instance_ref] = NULL; ++ TRACE("Deallocating playback instance %u on device %u.\n", wwo->instance_ref, wDevID); ++ HeapFree(GetProcessHeap(), 0, wwo); ++ return ret; ++} ++ ++/************************************************************************** ++ * wodWrite [internal] ++ */ ++static DWORD wodWrite(WINE_WAVEINST *wwo, LPWAVEHDR lpWaveHdr, DWORD dwSize) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) ++ return WAVERR_UNPREPARED; ++ ++ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) ++ return WAVERR_STILLPLAYING; ++ ++ lpWaveHdr->dwFlags &= ~WHDR_DONE; ++ lpWaveHdr->dwFlags |= WHDR_INQUEUE; ++ lpWaveHdr->lpNext = 0; ++ lpWaveHdr->reserved = 0; ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodPause [internal] ++ */ ++static DWORD wodPause(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_PAUSING, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodGetPosition [internal] ++ */ ++static DWORD wodGetPosition(WINE_WAVEINST *wwo, LPMMTIME lpTime, DWORD uSize) { ++ pa_usec_t time; ++ ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpTime == NULL) return MMSYSERR_INVALPARAM; ++ ++ time = pa_bytes_to_usec(wwo->releasing_offset, &wwo->sample_spec); ++ ++ if (wwo->is_releasing) ++ time += pa_timeval_age(&wwo->started_releasing); ++ ++ if (wwo->last_reset > wwo->releasing_offset) ++ wwo->last_reset = 0; ++ ++ time -= pa_bytes_to_usec(wwo->last_reset, &wwo->sample_spec); ++ time /= 1000; ++ ++ switch (lpTime->wType) { ++ case TIME_SAMPLES: ++ lpTime->u.sample = (time * wwo->sample_spec.rate) / 1000; ++ break; ++ case TIME_MS: ++ lpTime->u.ms = time; ++ break; ++ case TIME_SMPTE: ++ lpTime->u.smpte.fps = 30; ++ lpTime->u.smpte.sec = time/1000; ++ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; ++ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; ++ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; ++ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; ++ lpTime->u.smpte.fps = 30; ++ lpTime->u.smpte.frame = time / lpTime->u.smpte.fps * 1000; ++ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", ++ lpTime->u.smpte.hour, lpTime->u.smpte.min, ++ lpTime->u.smpte.sec, lpTime->u.smpte.frame); ++ break; ++ default: ++ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); ++ lpTime->wType = TIME_BYTES; ++ /* fall through */ ++ case TIME_BYTES: ++ lpTime->u.cb = (pa_bytes_per_second(&wwo->sample_spec)*time) / 1000; ++ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); ++ break; ++ } ++ ++ return MMSYSERR_NOERROR; ++} ++/************************************************************************** ++ * wodBreakLoop [internal] ++ */ ++static DWORD wodBreakLoop(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_BREAKLOOP, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ + /************************************************************************** + * wodGetDevCaps [internal] + */ +@@ -88,6 +961,122 @@ static DWORD wodGetDevCaps(DWORD wDevID, LPWAVEOUTCAPSW lpCaps, DWORD dwSize) { + } + + /************************************************************************** ++ * wodGetVolume [internal] ++ */ ++static DWORD wodGetVolume(WORD wDevID, LPDWORD lpdwVol) { ++ DWORD wleft, wright; ++ WINE_WAVEDEV* wdo; ++ ++ TRACE("(%u, %p);\n", wDevID, lpdwVol); ++ ++ if (wDevID >= PULSE_WodNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpdwVol == NULL) ++ return MMSYSERR_NOTENABLED; ++ ++ wdo = &WOutDev[wDevID]; ++ ++ wleft=(long int)(pa_sw_volume_to_linear(wdo->left_vol)*0xFFFFl); ++ wright=(long int)(pa_sw_volume_to_linear(wdo->right_vol)*0xFFFFl); ++ ++ if (wleft > 0xFFFFl) ++ wleft = 0xFFFFl; ++ if (wright > 0xFFFFl) ++ wright = 0xFFFFl; ++ ++ *lpdwVol = (WORD)wleft + (WORD)(wright << 16); ++ ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodSetVolume [internal] ++ */ ++static DWORD wodSetVolume(WORD wDevID, DWORD dwParam1) { ++ WINE_WAVEDEV *wdo; ++ WINE_WAVEINST *current; ++ pa_operation *o; ++ DWORD x; ++ ++ TRACE("(%u, %08X);\n", wDevID, dwParam1); ++ ++ if (wDevID >= PULSE_WodNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ wdo = &WOutDev[wDevID]; ++ ++ wdo->left_vol = pa_sw_volume_from_linear((double)LOWORD(dwParam1)/0xFFFFl); ++ wdo->right_vol = pa_sw_volume_from_linear((double)HIWORD(dwParam1)/0xFFFFl); ++ ++ /* Windows assumes that this volume is for the entire device, so we have to ++ * hunt down all current streams of the device and set their volumes. ++ * Streams which are not stereo (channels!=2) don't pan correctly. */ ++ for (x = 0; (current = wdo->instance[x]); x++) { ++ switch (current->sample_spec.channels) { ++ case 2: ++ current->volume.channels = 2; ++ current->volume.values[0] = wdo->left_vol; ++ current->volume.values[1] = wdo->right_vol; ++ break; ++ case 1: ++ current->volume.channels = 1; ++ current->volume.values[0] = (wdo->left_vol + wdo->right_vol)/2; /* Is this right? */ ++ break; ++ default: ++ /* FIXME How does more than stereo work? */ ++ pa_cvolume_set(¤t->volume, current->sample_spec.channels, (wdo->left_vol + wdo->right_vol)/2); ++ } ++ ++ if (!current->stream || ++ !PULSE_context || ++ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(current->stream) != PA_STREAM_READY || ++ !pa_cvolume_valid(¤t->volume)) ++ continue; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if ((o = pa_context_set_sink_input_volume(PULSE_context, ++ pa_stream_get_index(current->stream), ¤t->volume, ++ PULSE_context_success_callback, current))) ++ PULSE_wait_for_operation(o, current); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodRestart [internal] ++ */ ++static DWORD wodRestart(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (wwo->state == WINE_WS_PAUSED) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESTARTING, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodReset [internal] ++ */ ++static DWORD wodReset(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESETTING, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** + * wodDevInterfaceSize [internal] + */ + static DWORD wodDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { +@@ -124,12 +1113,16 @@ static DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc) { + strcpy(desc->szDrvname, "winepulse.drv"); + return MMSYSERR_NOERROR; + } ++ + /************************************************************************** + * wodMessage (WINEPULSE.@) + */ + DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, + DWORD dwParam1, DWORD dwParam2) { +- ++/* ++ TRACE("(%u, %s, %08X, %08X, %08X);\n", ++ wDevID, PULSE_getMessage(wMsg), dwUser, dwParam1, dwParam2); ++*/ + switch (wMsg) { + case DRVM_INIT: + case DRVM_EXIT: +@@ -137,12 +1130,12 @@ DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, + case DRVM_DISABLE: + /* FIXME: Pretend this is supported */ + return 0; +- case WODM_OPEN: return MMSYSERR_NOTSUPPORTED; +- case WODM_CLOSE: return MMSYSERR_NOTSUPPORTED; +- case WODM_WRITE: return MMSYSERR_NOTSUPPORTED; +- case WODM_PAUSE: return MMSYSERR_NOTSUPPORTED; +- case WODM_GETPOS: return MMSYSERR_NOTSUPPORTED; +- case WODM_BREAKLOOP: return MMSYSERR_NOTSUPPORTED; ++ case WODM_OPEN: return wodOpen (wDevID, (LPDWORD)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); ++ case WODM_CLOSE: return wodClose (wDevID, (WINE_WAVEINST*)dwUser); ++ case WODM_WRITE: return wodWrite ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); ++ case WODM_PAUSE: return wodPause ((WINE_WAVEINST*)dwUser); ++ case WODM_GETPOS: return wodGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); ++ case WODM_BREAKLOOP: return wodBreakLoop ((WINE_WAVEINST*)dwUser); + case WODM_PREPARE: return MMSYSERR_NOTSUPPORTED; + case WODM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; + case WODM_GETDEVCAPS: return wodGetDevCaps (wDevID, (LPWAVEOUTCAPSW)dwParam1, dwParam2); +@@ -151,13 +1144,13 @@ DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, + case WODM_SETPITCH: return MMSYSERR_NOTSUPPORTED; + case WODM_GETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* support if theoretically possible */ + case WODM_SETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* since pulseaudio 0.9.8 */ +- case WODM_GETVOLUME: return MMSYSERR_NOTSUPPORTED; +- case WODM_SETVOLUME: return MMSYSERR_NOTSUPPORTED; +- case WODM_RESTART: return MMSYSERR_NOTSUPPORTED; +- case WODM_RESET: return MMSYSERR_NOTSUPPORTED; ++ case WODM_GETVOLUME: return wodGetVolume (wDevID, (LPDWORD)dwParam1); ++ case WODM_SETVOLUME: return wodSetVolume (wDevID, dwParam1); ++ case WODM_RESTART: return wodRestart ((WINE_WAVEINST*)dwUser); ++ case WODM_RESET: return wodReset ((WINE_WAVEINST*)dwUser); + case DRV_QUERYDEVICEINTERFACESIZE: return wodDevInterfaceSize (wDevID, (LPDWORD)dwParam1); + case DRV_QUERYDEVICEINTERFACE: return wodDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); +- case DRV_QUERYDSOUNDIFACE: return wodDsCreate (wDevID, (PIDSDRIVER*)dwParam1); ++ case DRV_QUERYDSOUNDIFACE: return wodDsCreate (wDevID, (PIDSDRIVER*)dwParam1); + case DRV_QUERYDSOUNDDESC: return wodDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); + default: + FIXME("unknown message %d!\n", wMsg); +diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h +index 277221a..64778ca 100644 +--- a/dlls/winepulse.drv/winepulse.h ++++ b/dlls/winepulse.drv/winepulse.h +@@ -62,7 +62,7 @@ + + #define PULSE_MAX_STREAM_INSTANCES 16 /* Sixteen streams per device should be good enough? */ + +-/* events to be send to device */ ++/* events to be sent to device */ + enum win_wm_message { + WINE_WM_PAUSING = WM_USER + 1, WINE_WM_RESTARTING, WINE_WM_RESETTING, WINE_WM_HEADER, + WINE_WM_BREAKLOOP, WINE_WM_CLOSING, WINE_WM_STARTING, WINE_WM_STOPPING, WINE_WM_XRUN, WINE_WM_FEED +@@ -104,7 +104,7 @@ typedef struct { + + /* WavaHdr information */ + LPWAVEHDR lpQueuePtr; /* start of queued WAVEHDRs (waiting to be notified) */ +- LPWAVEHDR lpPlayPtr; /* start of not yet fully played buffers */ ++ LPWAVEHDR lpPlayPtr; /* start of not yet fully written buffers */ + DWORD dwPartialOffset; /* Offset of not yet written bytes in lpPlayPtr */ + LPWAVEHDR lpLoopPtr; /* pointer of first buffer in loop, if any */ + DWORD dwLoops; /* private copy of loop counter */ +@@ -151,13 +151,11 @@ DWORD PULSE_WodNumDevs; + DWORD PULSE_WidNumDevs; + + /* pulse.c */ +-void PULSE_set_buffer_attr_callback(pa_stream *stream, int success, void *userdata); + void PULSE_wait_for_operation(pa_operation *o, WINE_WAVEINST *ww); + void PULSE_stream_success_callback(pa_stream *s, int success, void *userdata); + void PULSE_stream_state_callback(pa_stream *s, void *userdata); + void PULSE_context_success_callback(pa_context *c, int success, void *userdata); + void PULSE_stream_request_callback(pa_stream *s, size_t n, void *userdata); +-DWORD PULSE_bytes_to_mmtime(LPMMTIME lpTime, DWORD position, pa_sample_spec *ss); + BOOL PULSE_setupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss); + int PULSE_InitRingMessage(PULSE_MSG_RING* omr); + int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr); + diff --git a/wine-pulseaudio.patch b/wine-pulseaudio.patch new file mode 100644 index 0000000..7320c17 --- /dev/null +++ b/wine-pulseaudio.patch @@ -0,0 +1,1188 @@ +diff --git a/configure.ac b/configure.ac +index 91850de..b21be92 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -55,6 +55,7 @@ AC_ARG_WITH(oss, AS_HELP_STRING([--without-oss],[do not use the OSS sound + [if test "x$withval" = "xno"; then ac_cv_header_soundcard_h=no; ac_cv_header_sys_soundcard_h=no; ac_cv_header_machine_soundcard_h=no; fi]) + AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), + [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) ++AC_ARG_WITH(pulse, AC_HELP_STRING([--without-pulse],[do not use PulseAudio sound support])) + AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) + AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), + [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) +@@ -1117,6 +1118,29 @@ then + CFLAGS="$save_CFLAGS" + fi + ++dnl **** Check for PulseAudio **** ++if test "x$with_pulse" != "xno"; then ++ if test "$PKG_CONFIG" != "false"; then ++ AC_MSG_CHECKING([for pulseaudio >= 0.9.8]) ++ if "$PKG_CONFIG" --atleast-version=0.9.8 libpulse; then ++ have_pulseaudio="yes" ++ else ++ have_pulseaudio="no" ++ fi ++ AC_MSG_RESULT([$have_pulseaudio]) ++ if test x"$have_pulseaudio" = xyes; then ++ if "$PKG_CONFIG" --atleast-version=0.9.11 libpulse; then ++ AC_DEFINE([HAVE_PULSEAUDIO_0_9_11], 1, [define this if pulseaudio is at least version 0.9.11]) ++ else ++ AC_DEFINE([HAVE_PULSEAUDIO_0_9_11], 0, [define this if pulseaudio is at least version 0.9.11]) ++ fi ++ ac_pulse_libs=`$PKG_CONFIG --libs libpulse` ++ AC_DEFINE([HAVE_PULSEAUDIO], 1, [define this if you have pulseaudio]) ++ AC_SUBST(PULSELIBS, "$ac_pulse_libs") ++ fi ++ fi ++fi ++ + dnl **** Check for ALSA 1.x **** + AC_SUBST(ALSALIBS,"") + if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" +@@ -1222,7 +1246,7 @@ dnl **** Check for libodbc **** + WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) + + dnl **** Check for any sound system **** +-if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$ac_cv_lib_soname_jack" = "x" -a \ ++if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$PULSELIBS$ac_cv_lib_soname_jack" = "x" -a \ + "$ac_cv_header_sys_soundcard_h" != "yes" -a \ + "$ac_cv_header_machine_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes" -a \ +@@ -2064,6 +2088,7 @@ WINE_CONFIG_MAKEFILE([dlls/winemp3.acm/Makefile],[dlls/Makedll.rules],[dlls],[AL + WINE_CONFIG_MAKEFILE([dlls/winenas.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/wineoss.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/wineps.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) ++WINE_CONFIG_MAKEFILE([dlls/winepulse.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/winequartz.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/winex11.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/wing32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) +diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in +new file mode 100644 +index 0000000..52a6671 +--- /dev/null ++++ b/dlls/winepulse.drv/Makefile.in +@@ -0,0 +1,15 @@ ++TOPSRCDIR = @top_srcdir@ ++TOPOBJDIR = ../.. ++SRCDIR = @srcdir@ ++VPATH = @srcdir@ ++MODULE = winepulse.drv ++IMPORTS = dxguid uuid winmm user32 advapi32 kernel32 ++EXTRALIBS = @PULSELIBS@ ++ ++C_SRCS = \ ++ waveout.c \ ++ pulse.c ++ ++@MAKE_DLL_RULES@ ++ ++@DEPENDENCIES@ # everything below this line is overwritten by make depend +diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c +new file mode 100644 +index 0000000..3ef6a03 +--- /dev/null ++++ b/dlls/winepulse.drv/pulse.c +@@ -0,0 +1,732 @@ ++/* ++ * Wine Driver for PulseAudio ++ * http://pulseaudio.org/ ++ * ++ * Copyright 2008 Arthur Taylor ++ * ++ * Contains code from other wine sound drivers. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++ ++#include ++#include ++ ++#include "windef.h" ++#include "winbase.h" ++#include "wingdi.h" ++#include "winuser.h" ++#include "mmddk.h" ++ ++#ifdef HAVE_UNISTD_H ++# include ++#endif ++#include ++ ++#ifdef HAVE_PULSEAUDIO ++ ++#include "wine/unicode.h" ++#include "wine/debug.h" ++#include "wine/library.h" ++ ++#include ++#include ++WINE_DEFAULT_DEBUG_CHANNEL(wave); ++ ++/* ++ * - Need to subscribe to sink/source events and keep the WInDev and WOutDev ++ * structures updated ++ */ ++ ++/* These strings used only for tracing */ ++const char * PULSE_getCmdString(enum win_wm_message msg) { ++ static char unknown[32]; ++#define MSG_TO_STR(x) case x: return #x ++ switch(msg) { ++ MSG_TO_STR(WINE_WM_PAUSING); ++ MSG_TO_STR(WINE_WM_RESTARTING); ++ MSG_TO_STR(WINE_WM_RESETTING); ++ MSG_TO_STR(WINE_WM_HEADER); ++ MSG_TO_STR(WINE_WM_BREAKLOOP); ++ MSG_TO_STR(WINE_WM_CLOSING); ++ MSG_TO_STR(WINE_WM_STARTING); ++ MSG_TO_STR(WINE_WM_STOPPING); ++ MSG_TO_STR(WINE_WM_XRUN); ++ MSG_TO_STR(WINE_WM_FEED); ++ } ++#undef MSG_TO_STR ++ sprintf(unknown, "UNKNOWN(0x%08x)", msg); ++ return unknown; ++} ++ ++/*======================================================================* ++ * Ring Buffer Functions - copied from winealsa.drv * ++ *======================================================================*/ ++ ++/* unless someone makes a wineserver kernel module, Unix pipes are faster than win32 events */ ++#define USE_PIPE_SYNC ++ ++#ifdef USE_PIPE_SYNC ++#define INIT_OMR(omr) do { if (pipe(omr->msg_pipe) < 0) { omr->msg_pipe[0] = omr->msg_pipe[1] = -1; } } while (0) ++#define CLOSE_OMR(omr) do { close(omr->msg_pipe[0]); close(omr->msg_pipe[1]); } while (0) ++#define SIGNAL_OMR(omr) do { int x = 0; write((omr)->msg_pipe[1], &x, sizeof(x)); } while (0) ++#define CLEAR_OMR(omr) do { int x = 0; read((omr)->msg_pipe[0], &x, sizeof(x)); } while (0) ++#define RESET_OMR(omr) do { } while (0) ++#define WAIT_OMR(omr, sleep) \ ++ do { struct pollfd pfd; pfd.fd = (omr)->msg_pipe[0]; \ ++ pfd.events = POLLIN; poll(&pfd, 1, sleep); } while (0) ++#else ++#define INIT_OMR(omr) do { omr->msg_event = CreateEventW(NULL, FALSE, FALSE, NULL); } while (0) ++#define CLOSE_OMR(omr) do { CloseHandle(omr->msg_event); } while (0) ++#define SIGNAL_OMR(omr) do { SetEvent((omr)->msg_event); } while (0) ++#define CLEAR_OMR(omr) do { } while (0) ++#define RESET_OMR(omr) do { ResetEvent((omr)->msg_event); } while (0) ++#define WAIT_OMR(omr, sleep) \ ++ do { WaitForSingleObject((omr)->msg_event, sleep); } while (0) ++#endif ++ ++#define PULSE_RING_BUFFER_INCREMENT 64 ++ ++/****************************************************************** ++ * PULSE_InitRingMessage ++ * ++ * Initialize the ring of messages for passing between driver's caller ++ * and playback/record thread ++ */ ++int PULSE_InitRingMessage(PULSE_MSG_RING* omr) ++{ ++ omr->msg_toget = 0; ++ omr->msg_tosave = 0; ++ INIT_OMR(omr); ++ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; ++ omr->messages = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,omr->ring_buffer_size * sizeof(PULSE_MSG)); ++ ++ InitializeCriticalSection(&omr->msg_crst); ++ omr->msg_crst.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": PULSE_MSG_RING.msg_crst"); ++ return 0; ++} ++ ++/****************************************************************** ++ * PULSE_DestroyRingMessage ++ * ++ */ ++int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr) ++{ ++ CLOSE_OMR(omr); ++ HeapFree(GetProcessHeap(),0,omr->messages); ++ omr->messages = NULL; ++ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; ++ omr->msg_crst.DebugInfo->Spare[0] = 0; ++ DeleteCriticalSection(&omr->msg_crst); ++ return 0; ++} ++/****************************************************************** ++ * PULSE_ResetRingMessage ++ * ++ */ ++void PULSE_ResetRingMessage(PULSE_MSG_RING* omr) ++{ ++ RESET_OMR(omr); ++} ++ ++/****************************************************************** ++ * PULSE_WaitRingMessage ++ * ++ */ ++void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep) ++{ ++ WAIT_OMR(omr, sleep); ++} ++ ++/****************************************************************** ++ * PULSE_AddRingMessage ++ * ++ * Inserts a new message into the ring (should be called from DriverProc derived routines) ++ */ ++int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait) ++{ ++ HANDLE hEvent = INVALID_HANDLE_VALUE; ++ ++ EnterCriticalSection(&omr->msg_crst); ++ if ((omr->msg_toget == ((omr->msg_tosave + 1) % omr->ring_buffer_size))) ++ { ++ int old_ring_buffer_size = omr->ring_buffer_size; ++ omr->ring_buffer_size += PULSE_RING_BUFFER_INCREMENT; ++ omr->messages = HeapReAlloc(GetProcessHeap(),0,omr->messages, omr->ring_buffer_size * sizeof(PULSE_MSG)); ++ /* Now we need to rearrange the ring buffer so that the new ++ buffers just allocated are in between omr->msg_tosave and ++ omr->msg_toget. ++ */ ++ if (omr->msg_tosave < omr->msg_toget) ++ { ++ memmove(&(omr->messages[omr->msg_toget + PULSE_RING_BUFFER_INCREMENT]), ++ &(omr->messages[omr->msg_toget]), ++ sizeof(PULSE_MSG)*(old_ring_buffer_size - omr->msg_toget) ++ ); ++ omr->msg_toget += PULSE_RING_BUFFER_INCREMENT; ++ } ++ } ++ if (wait) ++ { ++ hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); ++ if (hEvent == INVALID_HANDLE_VALUE) ++ { ++ ERR("can't create event !?\n"); ++ LeaveCriticalSection(&omr->msg_crst); ++ return 0; ++ } ++ if (omr->msg_toget != omr->msg_tosave && omr->messages[omr->msg_toget].msg != WINE_WM_HEADER) ++ FIXME("two fast messages in the queue!!!!\n"); /* toget = %d(%s), tosave=%d(%s)\n", ++ omr->msg_toget,ALSA_getCmdString(omr->messages[omr->msg_toget].msg), ++ omr->msg_tosave,ALSA_getCmdString(omr->messages[omr->msg_tosave].msg)); */ ++ ++ /* fast messages have to be added at the start of the queue */ ++ omr->msg_toget = (omr->msg_toget + omr->ring_buffer_size - 1) % omr->ring_buffer_size; ++ ++ omr->messages[omr->msg_toget].msg = msg; ++ omr->messages[omr->msg_toget].param = param; ++ omr->messages[omr->msg_toget].hEvent = hEvent; ++ } ++ else ++ { ++ omr->messages[omr->msg_tosave].msg = msg; ++ omr->messages[omr->msg_tosave].param = param; ++ omr->messages[omr->msg_tosave].hEvent = INVALID_HANDLE_VALUE; ++ omr->msg_tosave = (omr->msg_tosave + 1) % omr->ring_buffer_size; ++ } ++ LeaveCriticalSection(&omr->msg_crst); ++ /* signal a new message */ ++ SIGNAL_OMR(omr); ++ if (wait) ++ { ++ /* wait for playback/record thread to have processed the message */ ++ WaitForSingleObject(hEvent, INFINITE); ++ CloseHandle(hEvent); ++ } ++ return 1; ++} ++ ++/****************************************************************** ++ * PULSE_RetrieveRingMessage ++ * ++ * Get a message from the ring. Should be called by the playback/record thread. ++ */ ++int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, ++ enum win_wm_message *msg, DWORD *param, HANDLE *hEvent) ++{ ++ EnterCriticalSection(&omr->msg_crst); ++ ++ if (omr->msg_toget == omr->msg_tosave) /* buffer empty ? */ ++ { ++ LeaveCriticalSection(&omr->msg_crst); ++ return 0; ++ } ++ ++ *msg = omr->messages[omr->msg_toget].msg; ++ omr->messages[omr->msg_toget].msg = 0; ++ *param = omr->messages[omr->msg_toget].param; ++ *hEvent = omr->messages[omr->msg_toget].hEvent; ++ omr->msg_toget = (omr->msg_toget + 1) % omr->ring_buffer_size; ++ CLEAR_OMR(omr); ++ LeaveCriticalSection(&omr->msg_crst); ++ return 1; ++} ++ ++/************************************************************************** ++ * Utility Functions ++ */ ++ ++/****************************************************************** ++ * PULSE_free_wavedevs [internal] ++ * ++ * Free and deallocated all the wavedevs in the array of size allocated ++ */ ++static void PULSE_free_wavedevs(WINE_WAVEDEV *wd, DWORD *allocated) { ++ DWORD y, x = *allocated; ++ WINE_WAVEDEV *current_device; ++ WINE_WAVEINST *current_instance; ++ ++ TRACE("%i\n", *allocated); ++ ++ for (; x>0; ) { ++ current_device = &wd[--x]; ++ ++ pa_xfree(current_device->device_name); ++ ++ for (y = 0; y < PULSE_MAX_STREAM_INSTANCES; y++) { ++ if ((current_instance = current_device->instance[y])) { ++ if (current_instance->hThread != INVALID_HANDLE_VALUE && current_instance->msgRing.messages) { ++ PULSE_AddRingMessage(¤t_instance->msgRing, WINE_WM_CLOSING, 1, TRUE); ++ if (current_instance->hThread != INVALID_HANDLE_VALUE) { ++ /* Overkill? */ ++ TerminateThread(current_instance->hThread, 1); ++ current_instance->hThread = INVALID_HANDLE_VALUE; ++ } ++ if (current_instance->stream) ++ pa_stream_unref(current_instance->stream); ++ PULSE_DestroyRingMessage(¤t_instance->msgRing); ++ current_device->instance[current_instance->instance_ref] = NULL; ++ if (current_instance->buffer_attr) ++ pa_xfree(current_instance->buffer_attr); ++ HeapFree(GetProcessHeap(), 0, current_instance); ++ } ++ } ++ } ++ } ++ ++ HeapFree(GetProcessHeap(), 0, wd); ++ *allocated = 0; ++} ++ ++/****************************************************************** ++ * PULSE_wait_for_operation ++ * ++ * Waits for pa operations to complete, ensures success and dereferences the ++ * operations. ++ */ ++void PULSE_wait_for_operation(pa_operation *o, WINE_WAVEINST *wd) { ++ assert(o && wd); ++ ++ TRACE("Waiting..."); ++ ++ for (;;) { ++ ++ if (!wd->stream || ++ !PULSE_context || ++ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(wd->stream) != PA_STREAM_READY) { ++ wd->state = WINE_WS_FAILED; ++ if (wd->hThread != INVALID_HANDLE_VALUE && wd->msgRing.messages) ++ PULSE_AddRingMessage(&wd->msgRing, WINE_WM_CLOSING, 1, FALSE); ++ break; ++ } ++ ++ if (pa_operation_get_state(o) != PA_OPERATION_RUNNING) ++ break; ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ TRACE(" done\n"); ++ pa_operation_unref(o); ++} ++ ++/************************************************************************** ++ * Common Callbacks ++ */ ++ ++/****************************************************************** ++ * PULSE_stream_state_callback ++ * ++ * Called by pulse whenever the state of the stream changes. ++ */ ++void PULSE_stream_state_callback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wd = (WINE_WAVEINST*)userdata; ++ assert(s && wd); ++ ++ switch (pa_stream_get_state(s)) { ++ ++ case PA_STREAM_READY: ++ TRACE("Stream ready\n"); ++ break; ++ case PA_STREAM_TERMINATED: ++ TRACE("Stream terminated\n"); ++ break; ++ case PA_STREAM_FAILED: ++ WARN("Stream failed!\n"); ++ wd->state = WINE_WS_FAILED; ++ if (wd->hThread != INVALID_HANDLE_VALUE && wd->msgRing.messages) ++ PULSE_AddRingMessage(&wd->msgRing, WINE_WM_CLOSING, 1, FALSE); ++ break; ++ case PA_STREAM_UNCONNECTED: ++ case PA_STREAM_CREATING: ++ return; ++ } ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_stream_sucess_callback ++ */ ++void PULSE_stream_success_callback(pa_stream *s, int success, void *userdata) { ++ if (!success) ++ WARN("Stream operation failed: %s\n", pa_strerror(pa_context_errno(PULSE_context))); ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_context_success_callback ++ */ ++void PULSE_context_success_callback(pa_context *c, int success, void *userdata) { ++ if (!success) ++ WARN("Context operation failed: %s\n", pa_strerror(pa_context_errno(c))); ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * Connection management and sink / source management. ++ */ ++ ++/************************************************************************** ++ * PULSE_context_state_callback [internal] ++ */ ++static void PULSE_context_state_callback(pa_context *c, void *userdata) { ++ assert(c); ++ ++ switch (pa_context_get_state(c)) { ++ case PA_CONTEXT_CONNECTING: ++ case PA_CONTEXT_AUTHORIZING: ++ case PA_CONTEXT_SETTING_NAME: ++ break; ++ ++ case PA_CONTEXT_READY: ++ case PA_CONTEXT_TERMINATED: ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ break; ++ ++ case PA_CONTEXT_FAILED: ++ default: ++ ERR("Conneciton failure: %s\n", pa_strerror(pa_context_errno(c))); ++ ++ if (PULSE_context) { ++ pa_context_disconnect(PULSE_context); ++ } ++ ++ PULSE_free_wavedevs(WOutDev, &PULSE_WodNumDevs); ++ PULSE_free_wavedevs(WInDev, &PULSE_WidNumDevs); ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ } ++} ++ ++/************************************************************************** ++ * PULSE_add_input_device [internal] ++ * ++ * Creates or adds a device to WInDev based on the pa_source_info, or if ++ * pa_source_info is null, a default. ++ */ ++static void PULSE_add_input_device(pa_source_info *i, DWORD *allocated) { ++ WINE_WAVEDEV *wwi; ++ const char *description; ++ int x; ++ ++ if (WInDev) ++ wwi = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * ((*allocated)+1)); ++ else ++ wwi = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); ++ ++ if (!wwi) ++ return; ++ ++ WInDev = wwi; ++ wwi = &WInDev[(*allocated)++]; ++ ++ if (i) { ++ description = i->description; ++ wwi->device_name = pa_xstrdup(i->name); ++ strcpy(wwi->interface_name, "winepulse: "); ++ memcpy(wwi->interface_name + strlen(wwi->interface_name), ++ i->name, min(strlen(i->name), ++ sizeof(wwi->interface_name) - strlen("winepulse: "))); ++ } else { ++ description = pa_xstrdup("PulseAudio Server Default"); ++ wwi->device_name = NULL; ++ strcpy(wwi->interface_name, "winepulse: default"); ++ } ++ ++ memset(wwi, 0, sizeof(WINE_WAVEDEV)); ++ memset(&(wwi->caps.in), 0, sizeof(wwi->caps.in)); ++ MultiByteToWideChar(CP_ACP, 0, description, -1, wwi->caps.in.szPname, sizeof(wwi->caps.in.szPname)/sizeof(WCHAR)); ++ wwi->caps.in.szPname[sizeof(wwi->caps.in.szPname)/sizeof(WCHAR) - 1] = '\0'; ++ wwi->caps.in.wMid = MM_CREATIVE; ++ wwi->caps.in.wPid = MM_CREATIVE_SBP16_WAVEOUT; ++ wwi->caps.in.vDriverVersion = 0x0100; ++ wwi->caps.in.wChannels = 2; ++ wwi->caps.in.dwFormats |= ++ WAVE_FORMAT_1M08 | /* Mono 11025Hz 8-bit */ ++ WAVE_FORMAT_1M16 | /* Mono 11025Hz 16-bit */ ++ WAVE_FORMAT_1S08 | /* Stereo 11025Hz 8-bit */ ++ WAVE_FORMAT_1S16 | /* Stereo 11025Hz 16-bit */ ++ WAVE_FORMAT_2M08 | /* Mono 22050Hz 8-bit */ ++ WAVE_FORMAT_2M16 | /* Mono 22050Hz 16-bit */ ++ WAVE_FORMAT_2S08 | /* Stereo 22050Hz 8-bit */ ++ WAVE_FORMAT_2S16 | /* Stereo 22050Hz 16-bit */ ++ WAVE_FORMAT_4M08 | /* Mono 44100Hz 8-bit */ ++ WAVE_FORMAT_4M16 | /* Mono 44100Hz 16-bit */ ++ WAVE_FORMAT_4S08 | /* Stereo 44100Hz 8-bit */ ++ WAVE_FORMAT_4S16 | /* Stereo 44100Hz 16-bit */ ++ WAVE_FORMAT_48M08 | /* Mono 48000Hz 8-bit */ ++ WAVE_FORMAT_48S08 | /* Stereo 48000Hz 8-bit */ ++ WAVE_FORMAT_48M16 | /* Mono 48000Hz 16-bit */ ++ WAVE_FORMAT_48S16 | /* Stereo 48000Hz 16-bit */ ++ WAVE_FORMAT_96M08 | /* Mono 96000Hz 8-bit */ ++ WAVE_FORMAT_96S08 | /* Stereo 96000Hz 8-bit */ ++ WAVE_FORMAT_96M16 | /* Mono 96000Hz 16-bit */ ++ WAVE_FORMAT_96S16 ; /* Stereo 96000Hz 16-bit */ ++ ++ /* NULL out the instance pointers */ ++ for (x = 0; x < PULSE_MAX_STREAM_INSTANCES; x++) wwi->instance[x] = NULL; ++} ++ ++/************************************************************************** ++ * PULSE_add_output_device [internal] ++ * ++ * Creates or adds a device to WOutDev based on the pa_sinl_info, or if ++ * pa_sink_info is null, a default. ++ */ ++static void PULSE_add_output_device(pa_sink_info *i, DWORD *allocated) { ++ WINE_WAVEDEV *wwo; ++ const char *description; ++ int x; ++ ++ if (WOutDev) ++ wwo = HeapReAlloc(GetProcessHeap(), 0, WOutDev, sizeof(WINE_WAVEDEV) * ((*allocated)+1)); ++ else ++ wwo = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); ++ ++ if (!wwo) ++ return; ++ ++ WOutDev = wwo; ++ wwo = &WOutDev[(*allocated)++]; ++ ++ if (i) { ++ description = i->description; ++ wwo->device_name = pa_xstrdup(i->name); ++ strcpy(wwo->interface_name, "winepulse: "); ++ memcpy(wwo->interface_name + strlen(wwo->interface_name), ++ wwo->device_name, min(strlen(wwo->device_name), ++ sizeof(wwo->interface_name) - strlen("winepulse: "))); ++ } else { ++ description = pa_xstrdup("PulseAudio Server Default"); ++ wwo->device_name = NULL; ++ strcpy(wwo->interface_name, "winepulse: default"); ++ } ++ ++ memset(wwo, 0, sizeof(WINE_WAVEDEV)); ++ memset(&(wwo->caps.out), 0, sizeof(wwo->caps.out)); ++ MultiByteToWideChar(CP_ACP, 0, description, -1, wwo->caps.out.szPname, sizeof(wwo->caps.out.szPname)/sizeof(WCHAR)); ++ wwo->caps.out.szPname[sizeof(wwo->caps.out.szPname)/sizeof(WCHAR) - 1] = '\0'; ++ wwo->caps.out.wMid = MM_CREATIVE; ++ wwo->caps.out.wPid = MM_CREATIVE_SBP16_WAVEOUT; ++ wwo->caps.out.vDriverVersion = 0x0100; ++ wwo->caps.out.dwSupport |= WAVECAPS_VOLUME | WAVECAPS_LRVOLUME; ++ wwo->caps.out.wChannels = 2; ++ wwo->caps.out.dwFormats |= ++ WAVE_FORMAT_1M08 | /* Mono 11025Hz 8-bit */ ++ WAVE_FORMAT_1M16 | /* Mono 11025Hz 16-bit */ ++ WAVE_FORMAT_1S08 | /* Stereo 11025Hz 8-bit */ ++ WAVE_FORMAT_1S16 | /* Stereo 11025Hz 16-bit */ ++ WAVE_FORMAT_2M08 | /* Mono 22050Hz 8-bit */ ++ WAVE_FORMAT_2M16 | /* Mono 22050Hz 16-bit */ ++ WAVE_FORMAT_2S08 | /* Stereo 22050Hz 8-bit */ ++ WAVE_FORMAT_2S16 | /* Stereo 22050Hz 16-bit */ ++ WAVE_FORMAT_4M08 | /* Mono 44100Hz 8-bit */ ++ WAVE_FORMAT_4M16 | /* Mono 44100Hz 16-bit */ ++ WAVE_FORMAT_4S08 | /* Stereo 44100Hz 8-bit */ ++ WAVE_FORMAT_4S16 | /* Stereo 44100Hz 16-bit */ ++ WAVE_FORMAT_48M08 | /* Mono 48000Hz 8-bit */ ++ WAVE_FORMAT_48S08 | /* Stereo 48000Hz 8-bit */ ++ WAVE_FORMAT_48M16 | /* Mono 48000Hz 16-bit */ ++ WAVE_FORMAT_48S16 | /* Stereo 48000Hz 16-bit */ ++ WAVE_FORMAT_96M08 | /* Mono 96000Hz 8-bit */ ++ WAVE_FORMAT_96S08 | /* Stereo 96000Hz 8-bit */ ++ WAVE_FORMAT_96M16 | /* Mono 96000HZ 16-bit */ ++ WAVE_FORMAT_96S16 ; /* Stereo 96000Hz 16-bit */ ++ ++ wwo->left_vol = PA_VOLUME_NORM; ++ wwo->right_vol = PA_VOLUME_NORM; ++ ++ /* NULL out the instance pointers */ ++ for (x = 0; x < PULSE_MAX_STREAM_INSTANCES; x++) wwo->instance[x] = NULL; ++} ++ ++/************************************************************************** ++ * PULSE_source_info_callback [internal] ++ * ++ * Calls PULSE_add_input_device to add the source to the list of devices ++ */ ++static void PULSE_source_info_callback(pa_context *c, pa_source_info *i, int eol, void *userdata) { ++ assert(c); ++ if (!eol && i) ++ if (i->monitor_of_sink == PA_INVALID_INDEX) /* For now only add non-montior sources */ ++ PULSE_add_input_device(i, (DWORD*)userdata); ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_sink_info_callback [internal] ++ * ++ * Calls PULSE_add_output_device to add the sink to the list of devices ++ */ ++static void PULSE_sink_info_callback(pa_context *c, pa_sink_info *i, int eol, void *userdata) { ++ assert(c); ++ if (!eol && i) ++ PULSE_add_output_device(i, (DWORD*)userdata); ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_WaveInit [internal] ++ * ++ * Connects to the pulseaudio server, tries to discover sinks and sources and ++ * allocates the WaveIn/WaveOut devices. ++ */ ++LONG PULSE_WaveInit(void) { ++ pa_operation *o = NULL; ++ DWORD allocated; ++ ++ WOutDev = NULL; ++ WInDev = NULL; ++ PULSE_WodNumDevs = 0; ++ PULSE_WidNumDevs = 0; ++ PULSE_context = NULL; ++ PULSE_ml = NULL; ++ ++ if (!(PULSE_ml = pa_threaded_mainloop_new())) { ++ WARN("Failed to create mainloop object."); ++ return -1; ++ } ++ ++ pa_threaded_mainloop_start(PULSE_ml); ++ ++ /* FIXME: better name? */ ++ PULSE_context = pa_context_new(pa_threaded_mainloop_get_api(PULSE_ml), "Wine Application"); ++ assert(PULSE_context); ++ ++ pa_context_set_state_callback(PULSE_context, PULSE_context_state_callback, NULL); ++ ++ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_UNCONNECTED) ++ return 0; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ TRACE("Attempting to connect to pulseaudio server.\n"); ++ if (pa_context_connect(PULSE_context, NULL, 0, NULL) < 0) { ++ WARN("failed to connect context object %s\n", pa_strerror(pa_context_errno(PULSE_context))); ++ return -1; ++ } ++ ++ /* Wait for connection */ ++ for (;;) { ++ pa_context_state_t state = pa_context_get_state(PULSE_context); ++ ++ if (state == PA_CONTEXT_FAILED || state == PA_CONTEXT_TERMINATED) { ++ ERR("Failed to connect to pulseaudio server.\n"); ++ pa_context_unref(PULSE_context); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ pa_threaded_mainloop_stop(PULSE_ml); ++ pa_threaded_mainloop_free(PULSE_ml); ++ return -1; ++ } ++ ++ if (state == PA_CONTEXT_READY) { ++ TRACE("Connection succeeded!\n"); ++ break; ++ } ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ ++ /* Ask for all the sinks and create objects in the WOutDev array */ ++ allocated=0; ++ /* add a fake output (server default sink) */ ++ PULSE_add_output_device(NULL, &allocated); ++ o = pa_context_get_sink_info_list(PULSE_context, (pa_sink_info_cb_t)PULSE_sink_info_callback, &allocated); ++ assert(o); ++ while (pa_operation_get_state(o) != PA_OPERATION_DONE) ++ pa_threaded_mainloop_wait(PULSE_ml); ++ pa_operation_unref(o); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ TRACE("Allocated %i output device(s).\n",allocated); ++ PULSE_WodNumDevs=allocated; ++ if (PULSE_WodNumDevs == 1) /* Only the fake sink exists */ ++ PULSE_free_wavedevs(WOutDev, &PULSE_WodNumDevs); ++ ++ /* Repeate for all the sources */ ++ allocated=0; ++ /* add a fake input (server default source) */ ++ PULSE_add_input_device(NULL, &allocated); ++ pa_threaded_mainloop_lock(PULSE_ml); ++ o = pa_context_get_source_info_list(PULSE_context, (pa_source_info_cb_t)PULSE_source_info_callback, &allocated); ++ assert(o); ++ while (pa_operation_get_state(o) != PA_OPERATION_DONE) ++ pa_threaded_mainloop_wait(PULSE_ml); ++ pa_operation_unref(o); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ TRACE("Allocated %i input device(s).\n", allocated); ++ PULSE_WidNumDevs=allocated; ++ if (PULSE_WidNumDevs == 1) /* Only the fake source exists */ ++ PULSE_free_wavedevs(WInDev, &PULSE_WidNumDevs); ++ ++ return 1; ++} ++ ++/************************************************************************** ++ * PULSE_WaveClose [internal] ++ * ++ * Disconnect from the server, deallocated the WaveIn/WaveOut devices, stop and ++ * free the mainloop. ++ */ ++ ++LONG PULSE_WaveClose(void) { ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (PULSE_context) { ++ pa_context_disconnect(PULSE_context); ++ pa_context_unref(PULSE_context); ++ PULSE_context = NULL; ++ } ++ ++ PULSE_free_wavedevs(WOutDev, &PULSE_WodNumDevs); ++ PULSE_free_wavedevs(WInDev, &PULSE_WidNumDevs); ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ pa_threaded_mainloop_stop(PULSE_ml); ++ pa_threaded_mainloop_free(PULSE_ml); ++ ++ return 1; ++} ++ ++#endif /* HAVE_PULSEAUDIO */ ++ ++/************************************************************************** ++ * DriverProc (WINEPULSE.@) ++ */ ++LRESULT CALLBACK PULSE_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, ++ LPARAM dwParam1, LPARAM dwParam2) { ++ ++ switch(wMsg) { ++#ifdef HAVE_PULSEAUDIO ++ case DRV_LOAD: PULSE_WaveInit(); ++ return 1; ++ case DRV_FREE: return PULSE_WaveClose(); ++ case DRV_OPEN: return 1; ++ case DRV_CLOSE: return 1; ++ case DRV_ENABLE: return 1; ++ case DRV_DISABLE: return 1; ++ case DRV_QUERYCONFIGURE: return 1; ++ case DRV_CONFIGURE: MessageBoxA(0, "PulseAudio MultiMedia Driver !", "PulseAudio Driver", MB_OK); return 1; ++ case DRV_INSTALL: return DRVCNF_RESTART; ++ case DRV_REMOVE: return DRVCNF_RESTART; ++#endif ++ default: ++ return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2); ++ } ++} +diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c +new file mode 100644 +index 0000000..fe7543f +--- /dev/null ++++ b/dlls/winepulse.drv/waveout.c +@@ -0,0 +1,180 @@ ++/* ++ * Wine Driver for PulseAudio - WaveOut Functionality ++ * http://pulseaudio.org/ ++ * ++ * Copyright 2002 Eric Pouech ++ * 2002 Marco Pietrobono ++ * 2003 Christian Costa ++ * 2006-2007 Maarten Lankhorst ++ * 2008 Arthur Taylor (PulseAudio version) ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++ ++#include ++#include ++#include ++#include ++ ++#include "windef.h" ++#include "winbase.h" ++#include "wingdi.h" ++#include "winuser.h" ++#include "winnls.h" ++#include "winerror.h" ++#include "mmddk.h" ++#include "mmreg.h" ++#include "ks.h" ++#include "ksguid.h" ++#include "ksmedia.h" ++#include "dsound.h" ++#include "dsdriver.h" ++ ++#include ++ ++#include "wine/debug.h" ++ ++WINE_DEFAULT_DEBUG_CHANNEL(wave); ++ ++#if HAVE_PULSEAUDIO ++ ++/* state diagram for waveOut writing: ++ * ++ * +---------+-------------+---------------+---------------------------------+ ++ * | state | function | event | new state | ++ * +---------+-------------+---------------+---------------------------------+ ++ * | | open() | | STOPPED | ++ * | PAUSED | write() | | PAUSED | ++ * | STOPPED | write() | | PLAYING | ++ * | PLAYING | write() | HEADER | PLAYING | ++ * | (other) | write() | | | ++ * | (any) | pause() | PAUSING | PAUSED | ++ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | ++ * | PAUSED | reset() | RESETTING | PAUSED | ++ * | (other) | reset() | RESETTING | STOPPED | ++ * | (any) | close() | CLOSING | CLOSED | ++ * +---------+-------------+---------------+---------------------------------+ ++ */ ++ ++/************************************************************************** ++ * wodGetDevCaps [internal] ++ */ ++static DWORD wodGetDevCaps(DWORD wDevID, LPWAVEOUTCAPSW lpCaps, DWORD dwSize) { ++ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); ++ ++ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; ++ ++ if (wDevID >= PULSE_WodNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ memcpy(lpCaps, &(WOutDev[wDevID].caps.out), min(dwSize, sizeof(*lpCaps))); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodDevInterfaceSize [internal] ++ */ ++static DWORD wodDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { ++ ++ *dwParam1 = MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, NULL, 0) * sizeof(WCHAR); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodDevInterface [internal] ++ */ ++static DWORD wodDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { ++ if (dwParam2 >= MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, ++ NULL, 0 ) * sizeof(WCHAR)) ++ { ++ MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, ++ dwParam1, dwParam2 / sizeof(WCHAR)); ++ return MMSYSERR_NOERROR; ++ } ++ return MMSYSERR_INVALPARAM; ++} ++ ++/*======================================================================* ++ * Low level DSOUND implementation * ++ *======================================================================*/ ++static DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv) { ++ /* Is this possible ?*/ ++ return MMSYSERR_NOTSUPPORTED; ++} ++ ++static DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc) { ++ memset(desc, 0, sizeof(*desc)); ++ strcpy(desc->szDesc, "Wine PulseAudio DirectSound Driver"); ++ strcpy(desc->szDrvname, "winepulse.drv"); ++ return MMSYSERR_NOERROR; ++} ++/************************************************************************** ++ * wodMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, ++ DWORD dwParam1, DWORD dwParam2) { ++ ++ switch (wMsg) { ++ case DRVM_INIT: ++ case DRVM_EXIT: ++ case DRVM_ENABLE: ++ case DRVM_DISABLE: ++ /* FIXME: Pretend this is supported */ ++ return 0; ++ case WODM_OPEN: return MMSYSERR_NOTSUPPORTED; ++ case WODM_CLOSE: return MMSYSERR_NOTSUPPORTED; ++ case WODM_WRITE: return MMSYSERR_NOTSUPPORTED; ++ case WODM_PAUSE: return MMSYSERR_NOTSUPPORTED; ++ case WODM_GETPOS: return MMSYSERR_NOTSUPPORTED; ++ case WODM_BREAKLOOP: return MMSYSERR_NOTSUPPORTED; ++ case WODM_PREPARE: return MMSYSERR_NOTSUPPORTED; ++ case WODM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; ++ case WODM_GETDEVCAPS: return wodGetDevCaps (wDevID, (LPWAVEOUTCAPSW)dwParam1, dwParam2); ++ case WODM_GETNUMDEVS: return PULSE_WodNumDevs; ++ case WODM_GETPITCH: return MMSYSERR_NOTSUPPORTED; ++ case WODM_SETPITCH: return MMSYSERR_NOTSUPPORTED; ++ case WODM_GETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* support if theoretically possible */ ++ case WODM_SETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* since pulseaudio 0.9.8 */ ++ case WODM_GETVOLUME: return MMSYSERR_NOTSUPPORTED; ++ case WODM_SETVOLUME: return MMSYSERR_NOTSUPPORTED; ++ case WODM_RESTART: return MMSYSERR_NOTSUPPORTED; ++ case WODM_RESET: return MMSYSERR_NOTSUPPORTED; ++ case DRV_QUERYDEVICEINTERFACESIZE: return wodDevInterfaceSize (wDevID, (LPDWORD)dwParam1); ++ case DRV_QUERYDEVICEINTERFACE: return wodDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); ++ case DRV_QUERYDSOUNDIFACE: return wodDsCreate (wDevID, (PIDSDRIVER*)dwParam1); ++ case DRV_QUERYDSOUNDDESC: return wodDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); ++ default: ++ FIXME("unknown message %d!\n", wMsg); ++ } ++ return MMSYSERR_NOTSUPPORTED; ++} ++ ++#else /* !HAVE_PULSEAUDIO */ ++ ++/************************************************************************** ++ * wodMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, ++ DWORD dwParam1, DWORD dwParam2) { ++ FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, ++ dwParam1, dwParam2); ++ return MMSYSERR_NOTENABLED; ++} ++ ++#endif /* HAVE_PULSEAUDIO */ +diff --git a/dlls/winepulse.drv/winepulse.drv.spec b/dlls/winepulse.drv/winepulse.drv.spec +new file mode 100644 +index 0000000..1707969 +--- /dev/null ++++ b/dlls/winepulse.drv/winepulse.drv.spec +@@ -0,0 +1,2 @@ ++@ stdcall -private DriverProc(long long long long long long) PULSE_DriverProc ++@ stdcall -private wodMessage(long long long long long long) PULSE_wodMessage +diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h +new file mode 100644 +index 0000000..277221a +--- /dev/null ++++ b/dlls/winepulse.drv/winepulse.h +@@ -0,0 +1,169 @@ ++/* Definitions for PulseAudio Wine Driver ++ * ++ * Copyright 2008 Arthur Taylor ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#ifndef __WINE_CONFIG_H ++# error You must include config.h to use this header ++#endif ++ ++#if defined(HAVE_PULSEAUDIO) && !defined(__WINEPULSE_H) ++#define __WINEPULSE_H ++ ++#include "mmreg.h" ++#include "dsound.h" ++#include "dsdriver.h" ++ ++#include "ks.h" ++#include "ksmedia.h" ++#include "ksguid.h" ++ ++#include ++ ++/* state diagram for waveOut writing: ++ * ++ * +---------+-------------+---------------+---------------------------------+ ++ * | state | function | event | new state | ++ * +---------+-------------+---------------+---------------------------------+ ++ * | | open() | | STOPPED | ++ * | PAUSED | write() | | PAUSED | ++ * | STOPPED | write() | | PLAYING | ++ * | PLAYING | write() | HEADER | PLAYING | ++ * | (other) | write() | | | ++ * | (any) | pause() | PAUSING | PAUSED | ++ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | ++ * | (any) | reset() | RESETTING | STOPPED | ++ * | (any) | close() | CLOSING | CLOSED | ++ * +---------+-------------+---------------+---------------------------------+ ++ */ ++ ++#undef PULSE_VERBOSE ++ ++/* states of the playing device */ ++#define WINE_WS_PLAYING 1 ++#define WINE_WS_PAUSED 2 ++#define WINE_WS_STOPPED 3 ++#define WINE_WS_CLOSED 4 ++#define WINE_WS_FAILED 5 ++ ++#define PULSE_MAX_STREAM_INSTANCES 16 /* Sixteen streams per device should be good enough? */ ++ ++/* events to be send to device */ ++enum win_wm_message { ++ WINE_WM_PAUSING = WM_USER + 1, WINE_WM_RESTARTING, WINE_WM_RESETTING, WINE_WM_HEADER, ++ WINE_WM_BREAKLOOP, WINE_WM_CLOSING, WINE_WM_STARTING, WINE_WM_STOPPING, WINE_WM_XRUN, WINE_WM_FEED ++}; ++ ++typedef struct { ++ enum win_wm_message msg; /* message identifier */ ++ DWORD param; /* parameter for this message */ ++ HANDLE hEvent; /* if message is synchronous, handle of event for synchro */ ++} PULSE_MSG; ++ ++/* implement an in-process message ring for better performance ++ * (compared to passing thru the server) ++ * this ring will be used by the input (resp output) record (resp playback) routine ++ */ ++typedef struct { ++ PULSE_MSG * messages; ++ int ring_buffer_size; ++ int msg_tosave; ++ int msg_toget; ++/* Either pipe or event is used, but that is defined in pulse.c, ++ * since this is a global header we define both here */ ++ int msg_pipe[2]; ++ HANDLE msg_event; ++ CRITICAL_SECTION msg_crst; ++} PULSE_MSG_RING; ++ ++/* Per-playback/record instance */ ++typedef struct { ++ int instance_ref; /* The array index of WINE_WAVEDEV->instance[] that this is */ ++ volatile int state; /* one of the WINE_WS_ manifest constants */ ++ WAVEOPENDESC waveDesc; ++ WORD wFlags; ++ pa_stream *stream; /* The PulseAudio stream */ ++ const pa_timing_info *timing_info; ++ pa_buffer_attr *buffer_attr; ++ pa_sample_spec sample_spec; /* Sample spec of this stream / device */ ++ pa_cvolume volume; ++ ++ /* WavaHdr information */ ++ LPWAVEHDR lpQueuePtr; /* start of queued WAVEHDRs (waiting to be notified) */ ++ LPWAVEHDR lpPlayPtr; /* start of not yet fully played buffers */ ++ DWORD dwPartialOffset; /* Offset of not yet written bytes in lpPlayPtr */ ++ LPWAVEHDR lpLoopPtr; /* pointer of first buffer in loop, if any */ ++ DWORD dwLoops; /* private copy of loop counter */ ++ ++ /* Virtual stream positioning information */ ++ DWORD last_reset; /* When the last reset occured, as pa stream time doesn't reset */ ++ BOOL is_buffering; /* !is_playing */ ++ struct timeval last_header; /* When the last wavehdr was received, only updated when is_buffering is true */ ++ BOOL is_releasing; /* Whether we are releasing wavehdrs, may not always be the inverse of is_buffering */ ++ struct timeval started_releasing; /* When wavehdr releasing started, for comparison to queued written wavehdrs */ ++ DWORD releasing_offset; /* How much audio has been released prior when releasing started in this instance */ ++ ++ /* Thread communication and synchronization stuff */ ++ HANDLE hStartUpEvent; ++ HANDLE hThread; ++ DWORD dwThreadID; ++ PULSE_MSG_RING msgRing; ++} WINE_WAVEINST; ++ ++/* Per-playback/record device */ ++typedef struct { ++ char *device_name; /* Name of the device used as an identifer on the server */ ++ char interface_name[MAXPNAMELEN * 2]; ++ ++ pa_volume_t left_vol; /* Volume is per device and always stereo */ ++ pa_volume_t right_vol; ++ ++ union { ++ WAVEOUTCAPSW out; ++ WAVEINCAPSW in; ++ } caps; ++ ++ WINE_WAVEINST *instance[PULSE_MAX_STREAM_INSTANCES]; ++} WINE_WAVEDEV; ++ ++/* We establish one context per instance, so make it global to the lib */ ++pa_context *PULSE_context; /* Connection Context */ ++pa_threaded_mainloop *PULSE_ml; /* PA Runtime information */ ++ ++/* WaveIn / WaveOut devices */ ++WINE_WAVEDEV *WOutDev; ++WINE_WAVEDEV *WInDev; ++DWORD PULSE_WodNumDevs; ++DWORD PULSE_WidNumDevs; ++ ++/* pulse.c */ ++void PULSE_set_buffer_attr_callback(pa_stream *stream, int success, void *userdata); ++void PULSE_wait_for_operation(pa_operation *o, WINE_WAVEINST *ww); ++void PULSE_stream_success_callback(pa_stream *s, int success, void *userdata); ++void PULSE_stream_state_callback(pa_stream *s, void *userdata); ++void PULSE_context_success_callback(pa_context *c, int success, void *userdata); ++void PULSE_stream_request_callback(pa_stream *s, size_t n, void *userdata); ++DWORD PULSE_bytes_to_mmtime(LPMMTIME lpTime, DWORD position, pa_sample_spec *ss); ++BOOL PULSE_setupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss); ++int PULSE_InitRingMessage(PULSE_MSG_RING* omr); ++int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr); ++void PULSE_ResetRingMessage(PULSE_MSG_RING* omr); ++void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep); ++int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait); ++int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, enum win_wm_message *msg, DWORD *param, HANDLE *hEvent); ++const char * PULSE_getCmdString(enum win_wm_message msg); ++#endif + diff --git a/wine.spec b/wine.spec index e8cda9f..b60f2d6 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 1.1.9 -Release: 2%{?dist} +Version: 1.1.10 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -40,6 +40,9 @@ Source201: wine.directory Source300: wine-mime-msi.desktop # explain how to use wine with pulseaudio +# see http://bugs.winehq.org/show_bug.cgi?id=10495 +Patch400: wine-pulseaudio.patch +Patch401: wine-pulseaudio-waveout.patch Source402: README-FEDORA-PULSEAUDIO @@ -90,8 +93,10 @@ BuildRequires: libXmu-devel BuildRequires: libXi-devel BuildRequires: libXcursor-devel # dbus/hal >= FC5 -BuildRequires: dbus-devel hal-devel -BuildRequires: gnutls-devel +BuildRequires: dbus-devel hal-devel +BuildRequires: gnutls-devel +BuildRequires: pulseaudio-libs-devel +BuildRequires: autoconf Requires: wine-core = %{version}-%{release} Requires: wine-capi = %{version}-%{release} @@ -216,10 +221,22 @@ Requires: wine-core = %{version}-%{release} Header, include files and library definition files for developing applications with the Wine Windows(TM) emulation libraries. +%package pulseaudio +Summary: Pulseaudio support for wine +Group: System Environment/Libraries +Requires: wine-core = %{version}-%{release} + +%description pulseaudio +This package adds a native pulseaudio driver for wine. This is not an official +wine audio driver. Please do not report bugs regarding this driver at winehq.org. + %prep %setup -q -n %{name}-%{version}-fe %patch1 %patch2 +%patch400 -p1 +%patch401 -p1 +autoconf -f %build # work around gcc bug see #440139 @@ -232,7 +249,8 @@ export CFLAGS="$RPM_OPT_FLAGS" %configure \ --sysconfdir=%{_sysconfdir}/wine --disable-static \ - --x-includes=%{_includedir} --x-libraries=%{_libdir} + --x-includes=%{_includedir} --x-libraries=%{_libdir} \ + --with-pulse %{__make} depend @@ -378,8 +396,6 @@ update-desktop-database &>/dev/null || : %doc AUTHORS README-Fedora README VERSION # do not include huge changelogs .OLD .ALPHA .BETA (#204302) %doc documentation/README.* -# pulseaudio workaround documentation -%doc README-FEDORA-PULSEAUDIO %{_bindir}/msiexec %{_bindir}/regedit %{_bindir}/regsvr32 @@ -832,7 +848,18 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.a %{_libdir}/wine/*.def +%files pulseaudio +# pulseaudio workaround documentation +%doc README-FEDORA-PULSEAUDIO +%{_libdir}/wine/winepulse.drv.so + %changelog +* Sat Dec 06 2008 Andreas Bierfert +- 1.1.10-1 +- version upgrade +- add native pulseaudio driver from winehq bugzilla (#10495) + fixes #474435, #344281 + * Mon Nov 24 2008 Andreas Bierfert - 1.1.9-2 - fix #469907 From 1ce215fb05fb4c13605e6750d574dd384fff26d7 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 8 Jan 2009 17:58:18 +0000 Subject: [PATCH 105/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.cvsignore b/.cvsignore index 18ed564..f861725 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.10-fe.tar.bz2 +wine-1.1.12-fe.tar.bz2 diff --git a/sources b/sources index 37c0a2e..bf49a49 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -e8e6a40936896d488bae6d517ececed9 wine-1.1.10-fe.tar.bz2 +038acc9568ecf813ecd0b108e83a946d wine-1.1.12-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index b60f2d6..87a206e 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.10 +Version: 1.1.12 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -628,6 +628,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/olesvr32.dll.so %{_libdir}/wine/olethk32.dll.so %{_libdir}/wine/pdh.dll.so +%{_libdir}/wine/pidgen.dll.so %{_libdir}/wine/powrprof.dll.so %{_libdir}/wine/printui.dll.so %{_libdir}/wine/propsys.dll.so @@ -730,6 +731,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/ws2_32.dll.so %{_libdir}/wine/wsock32.dll.so %{_libdir}/wine/wtsapi32.dll.so +%{_libdir}/wine/wuapi.dll.so %{_libdir}/wine/security.dll.so %{_libdir}/wine/sfc.dll.so %{_datadir}/wine/fonts/ @@ -854,6 +856,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepulse.drv.so %changelog +* Mon Jan 05 2009 Andreas Bierfert +- 1.1.12-1 +- version upgrade + * Sat Dec 06 2008 Andreas Bierfert - 1.1.10-1 - version upgrade From f12c5733cac69256c577989b09f2de8cfb22bb05 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 8 Feb 2009 07:44:01 +0000 Subject: [PATCH 106/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-desktop-mime.patch | 7 +++-- wine-pulseaudio-winecfg.patch | 49 ++++++++++++++++++++++++++++++++ wine.spec | 53 ++++++++++++++++++++++++++--------- 5 files changed, 95 insertions(+), 18 deletions(-) create mode 100644 wine-pulseaudio-winecfg.patch diff --git a/.cvsignore b/.cvsignore index f861725..c0b9309 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.12-fe.tar.bz2 +wine-1.1.14-fe.tar.bz2 diff --git a/sources b/sources index bf49a49..076ec2e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -038acc9568ecf813ecd0b108e83a946d wine-1.1.12-fe.tar.bz2 +2ba8d6bcddf2b969da0281f867b713dd wine-1.1.14-fe.tar.bz2 diff --git a/wine-desktop-mime.patch b/wine-desktop-mime.patch index 99dfda7..ed87de5 100644 --- a/wine-desktop-mime.patch +++ b/wine-desktop-mime.patch @@ -1,9 +1,10 @@ ---- tools/wine.desktop.orig 2008-07-28 20:36:29.000000000 +0200 -+++ tools/wine.desktop 2008-07-28 20:36:43.000000000 +0200 -@@ -16,5 +16,5 @@ +--- tools/wine.desktop.orig 2009-01-17 09:46:27.000000000 +0100 ++++ tools/wine.desktop 2009-01-17 09:46:59.000000000 +0100 +@@ -16,6 +16,6 @@ Name[nb]=Wine Programlaster for Windowsapplikasjoner Name[nn]=Wine Programlaster for Windowsapplikasjoner Exec=wine start /unix %f -MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed;application/x-executable;application/x-msi; +MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed;application/x-msi; NoDisplay=true + StartupNotify=true diff --git a/wine-pulseaudio-winecfg.patch b/wine-pulseaudio-winecfg.patch new file mode 100644 index 0000000..6c23ae9 --- /dev/null +++ b/wine-pulseaudio-winecfg.patch @@ -0,0 +1,49 @@ +diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc +index 1a07d71..7f45434 100644 +--- a/programs/winecfg/En.rc ++++ b/programs/winecfg/En.rc +@@ -276,6 +276,7 @@ BEGIN + IDS_DRIVER_NAS "NAS Driver" + IDS_DRIVER_AUDIOIO "Audio IO (Solaris) Driver" + IDS_DRIVER_COREAUDIO "CoreAudio Driver" ++ IDS_DRIVER_PULSE "PulseAudio Driver" + IDS_OPEN_DRIVER_ERROR "Couldn't open %s!" + IDS_SOUNDDRIVERS "Sound Drivers" + IDS_DEVICES_WAVEOUT "Wave Out Devices" +diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c +index 3ce0e25..b716d25 100644 +--- a/programs/winecfg/audio.c ++++ b/programs/winecfg/audio.c +@@ -95,6 +95,7 @@ static const AUDIO_DRIVER sAudioDrivers[] = { + {IDS_DRIVER_NAS, "nas"}, + {IDS_DRIVER_ESOUND, "esd"}, + {IDS_DRIVER_AUDIOIO, "audioio"}, ++ {IDS_DRIVER_PULSE, "pulse"}, + {0, ""} + }; + +diff --git a/programs/winecfg/libraries.c b/programs/winecfg/libraries.c +index 92dd970..42b6e41 100644 +--- a/programs/winecfg/libraries.c ++++ b/programs/winecfg/libraries.c +@@ -79,6 +79,7 @@ static const char * const builtin_only[] = + "wineoss.drv", + "wineps", + "wineps.drv", ++ "winepulse.drv", + "winex11.drv", + "winmm", + "wintab32", +diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h +index 2182c29..b8f07fb 100644 +--- a/programs/winecfg/resource.h ++++ b/programs/winecfg/resource.h +@@ -180,6 +180,7 @@ + #define IDS_ACCEL_BASIC 8302 + #define IDS_ACCEL_EMULATION 8303 + #define IDS_DRIVER_ALSA 8304 ++#define IDS_DRIVER_PULSE 8305 + + #define IDS_DRIVER_ESOUND 8306 + #define IDS_DRIVER_OSS 8307 + diff --git a/wine.spec b/wine.spec index 87a206e..1b3b64f 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.12 +Version: 1.1.14 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -43,6 +43,7 @@ Source300: wine-mime-msi.desktop # see http://bugs.winehq.org/show_bug.cgi?id=10495 Patch400: wine-pulseaudio.patch Patch401: wine-pulseaudio-waveout.patch +Patch402: wine-pulseaudio-winecfg.patch Source402: README-FEDORA-PULSEAUDIO @@ -53,8 +54,13 @@ Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) ExclusiveArch: i386 +# BR: All builds BuildRequires: bison BuildRequires: flex +BuildRequires: autoconf +BuildRequires: desktop-file-utils + +# x86-32 BR BuildRequires: alsa-lib-devel BuildRequires: audiofile-devel BuildRequires: esound-devel @@ -73,17 +79,17 @@ BuildRequires: unixODBC-devel BuildRequires: openssl-devel BuildRequires: sane-backends-devel BuildRequires: zlib-devel -BuildRequires: desktop-file-utils BuildRequires: fontforge -BuildRequires: gphoto2 gphoto2-devel +BuildRequires: libgphoto2-devel BuildRequires: jack-audio-connection-kit-devel -#217338 +# #217338 BuildRequires: isdn4k-utils-devel # modular x BuildRequires: libX11-devel BuildRequires: mesa-libGL-devel mesa-libGLU-devel BuildRequires: libXxf86dga-devel libXxf86vm-devel -BuildRequires: libXrandr-devel libXrender-devel libXext-devel +BuildRequires: libXrandr-devel libXrender-devel +BuildRequires: libXext-devel BuildRequires: libXinerama-devel BuildRequires: libXcomposite-devel BuildRequires: fontconfig-devel @@ -92,11 +98,9 @@ BuildRequires: cups-devel BuildRequires: libXmu-devel BuildRequires: libXi-devel BuildRequires: libXcursor-devel -# dbus/hal >= FC5 BuildRequires: dbus-devel hal-devel BuildRequires: gnutls-devel BuildRequires: pulseaudio-libs-devel -BuildRequires: autoconf Requires: wine-core = %{version}-%{release} Requires: wine-capi = %{version}-%{release} @@ -108,6 +112,7 @@ Requires: wine-ldap = %{version}-%{release} Requires: wine-nas = %{version}-%{release} Requires: wine-tools = %{version}-%{release} Requires: wine-twain = %{version}-%{release} +Requires: wine-pulseaudio = %{version}-%{release} %description While Wine is usually thought of as a Windows(TM) emulator, the Wine @@ -236,16 +241,17 @@ wine audio driver. Please do not report bugs regarding this driver at winehq.org %patch2 %patch400 -p1 %patch401 -p1 +%patch402 -p1 autoconf -f %build # work around gcc bug see #440139 # this affects more then just dlls/user32/menu.c -%if %{?fedora} > 8 -export CFLAGS="$RPM_OPT_FLAGS -fno-tree-fre -fno-tree-pre" -%else +#%if %{?fedora} > 8 +#export CFLAGS="$RPM_OPT_FLAGS -fno-tree-fre -fno-tree-pre" +#%else export CFLAGS="$RPM_OPT_FLAGS" -%endif +#%endif %configure \ --sysconfdir=%{_sysconfdir}/wine --disable-static \ @@ -407,6 +413,7 @@ update-desktop-database &>/dev/null || : %{_mandir}/man1/wineprefixcreate.1* %{_bindir}/winecfg %{_bindir}/uninstaller +%{_libdir}/wine/cacls.exe.so %{_libdir}/wine/expand.exe.so %{_libdir}/wine/winhelp.exe16 %{_libdir}/wine/winhlp32.exe.so @@ -445,6 +452,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/libwine.so.1* %dir %{_libdir}/wine %{_libdir}/wine/acledit.dll.so +%{_libdir}/wine/aclui.dll.so %{_libdir}/wine/activeds.dll.so %{_libdir}/wine/actxprxy.dll.so %{_libdir}/wine/advapi32.dll.so @@ -452,6 +460,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/amstream.dll.so %{_libdir}/wine/appwiz.cpl.so %{_libdir}/wine/atl.dll.so +%{_libdir}/wine/authz.dll.so %{_libdir}/wine/avicap32.dll.so %{_libdir}/wine/avifil32.dll.so %{_libdir}/wine/avifile.dll16 @@ -527,11 +536,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/gphoto2.ds.so %{_libdir}/wine/gpkcsp.dll.so %{_libdir}/wine/hal.dll.so -%{_libdir}/wine/hid.dll.so %{_libdir}/wine/hh.exe.so +%{_libdir}/wine/hhctrl.ocx.so +%{_libdir}/wine/hid.dll.so %{_libdir}/wine/hlink.dll.so %{_libdir}/wine/hnetcfg.dll.so -%{_libdir}/wine/hhctrl.ocx.so +%{_libdir}/wine/httpapi.dll.so %{_libdir}/wine/iccvid.dll.so %{_libdir}/wine/icinfo.exe.so %{_libdir}/wine/icmp.dll.so @@ -553,8 +563,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/kernel32.dll.so %{_libdir}/wine/keyboard.drv16 %{_libdir}/wine/krnl386.exe16 +%{_libdir}/wine/loadperf.dll.so %{_libdir}/wine/localspl.dll.so %{_libdir}/wine/localui.dll.so +%{_libdir}/wine/lodctr.exe.so %{_libdir}/wine/lz32.dll.so %{_libdir}/wine/lzexpand.dll16 %{_libdir}/wine/mapi32.dll.so @@ -577,6 +589,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msadp32.acm.so %{_libdir}/wine/mscat32.dll.so %{_libdir}/wine/mscoree.dll.so +%{_libdir}/wine/msctf.dll.so %{_libdir}/wine/msdmo.dll.so %{_libdir}/wine/msftedit.dll.so %{_libdir}/wine/msg711.acm.so @@ -588,6 +601,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msisip.dll.so %{_libdir}/wine/msisys.ocx.so %{_libdir}/wine/msnet32.dll.so +%{_libdir}/wine/mssign32.dll.so %{_libdir}/wine/mssip32.dll.so %{_libdir}/wine/msrle32.dll.so %{_libdir}/wine/mstask.dll.so @@ -642,6 +656,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/query.dll.so %{_libdir}/wine/rasapi16.dll16 %{_libdir}/wine/rasapi32.dll.so +%{_libdir}/wine/rasdlg.dll.so %{_libdir}/wine/resutils.dll.so %{_libdir}/wine/riched20.dll.so %{_libdir}/wine/riched32.dll.so @@ -679,8 +694,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/system.drv16 %{_libdir}/wine/tapi32.dll.so %{_libdir}/wine/toolhelp.dll16 +%{_libdir}/wine/traffic.dll.so %{_libdir}/wine/typelib.dll16 %{_libdir}/wine/unicows.dll.so +%{_libdir}/wine/unlodctr.exe.so +%{_libdir}/wine/updspapi.dll.so %{_libdir}/wine/url.dll.so %{_libdir}/wine/urlmon.dll.so %{_libdir}/wine/user.exe16 @@ -856,6 +874,15 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepulse.drv.so %changelog +* Sat Jan 31 2009 Andreas Bierfert +- 1.1.14-1 +- version upgrade + +* Sat Jan 17 2009 Andreas Bierfert +- 1.1.13-1 +- version upgrade +- fix gcc compile problems (#440139, #461720) + * Mon Jan 05 2009 Andreas Bierfert - 1.1.12-1 - version upgrade From dc038b92424bc1d3b4dd0b6f90f7357b44d46e21 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 24 Feb 2009 20:45:09 +0000 Subject: [PATCH 107/161] - version upgrade - update winepulse patches --- .cvsignore | 2 +- README-FEDORA-PULSEAUDIO | 27 +- adding-pulseaudio-to-winecfg.patch | 289 +++ sources | 2 +- wine-alsa-pulseaudio.patch | 27 - wine-pulseaudio-waveout.patch | 1204 ---------- wine-pulseaudio-winecfg.patch | 49 - wine-pulseaudio.patch | 1188 ---------- wine-pulseaudio.sh | 7 - wine.spec | 28 +- winepulse-0.17-configure.ac.patch | 54 + winepulse-0.20.patch | 3436 ++++++++++++++++++++++++++++ 12 files changed, 3818 insertions(+), 2495 deletions(-) create mode 100644 adding-pulseaudio-to-winecfg.patch delete mode 100644 wine-alsa-pulseaudio.patch delete mode 100644 wine-pulseaudio-waveout.patch delete mode 100644 wine-pulseaudio-winecfg.patch delete mode 100644 wine-pulseaudio.patch delete mode 100644 wine-pulseaudio.sh create mode 100644 winepulse-0.17-configure.ac.patch create mode 100644 winepulse-0.20.patch diff --git a/.cvsignore b/.cvsignore index c0b9309..c038f0e 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.14-fe.tar.bz2 +wine-1.1.15-fe.tar.bz2 diff --git a/README-FEDORA-PULSEAUDIO b/README-FEDORA-PULSEAUDIO index 5704086..41645fb 100644 --- a/README-FEDORA-PULSEAUDIO +++ b/README-FEDORA-PULSEAUDIO @@ -1,10 +1,29 @@ Wine and Pulseaudio Support --------------------------- Currently wine does not have native support for pulseaudio. However, some -patches exist to make wine use a native pulseaudio backend -(see http://bugs.winehq.org/show_bug.cgi?id=10495). These have been included -into the fedora wine package. If you have problems please do _not_ report them -to the wine project. +patches exist to make wine use a native pulseaudio backend (see [1]) +These have been included into the fedora wine package. If you have problems +please do _not_ report them to the wine project. + +Here are some useful configuration options taken from [1]: + +HKCU\Software\Wine\Drivers:Audio +A string which contains a comma seperated list of audio backends for wine to +try, in order of preference. For example “pulse,alsa,esd”. Settable through +winecfg. + +HKCU\Software\Wine\Pulse Driver:MonitorDevices +A string which contains Y or N. If Y, sink monitors will show up as input +devices. If N, only capture sources will be show up as input devices. +Default is Y. + +HKCU\Software\Wine\DirectSound:HardwareAcceleration +A string. Also settable in winecfg. When set to “Emulation” WaveOut will be +used for directsound, which is more likely to work, but will have more latency. +When set to “Full” the directsound driver is tried for directsound support, +resulting in less latency, but possibley failure or bad sound. + +[1] - http://art.ified.ca/?page_id=40 Other ways to get wine working with pulseaudio are described below: diff --git a/adding-pulseaudio-to-winecfg.patch b/adding-pulseaudio-to-winecfg.patch new file mode 100644 index 0000000..f8770eb --- /dev/null +++ b/adding-pulseaudio-to-winecfg.patch @@ -0,0 +1,289 @@ +diff --git a/programs/winecfg/Bg.rc b/programs/winecfg/Bg.rc +index 8861657..cf91012 100644 +--- a/programs/winecfg/Bg.rc ++++ b/programs/winecfg/Bg.rc +@@ -274,6 +274,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Basic" + IDS_ACCEL_EMULATION "Emulation" ++ IDS_DRIVER_PULSE "PulseAudio Driver" + IDS_DRIVER_ALSA "ALSA Driver" + IDS_DRIVER_ESOUND "EsounD Driver" + IDS_DRIVER_OSS "OSS Driver" +diff --git a/programs/winecfg/Cs.rc b/programs/winecfg/Cs.rc +index 07f035f..8897237 100644 +--- a/programs/winecfg/Cs.rc ++++ b/programs/winecfg/Cs.rc +@@ -273,6 +273,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standardn" + IDS_ACCEL_BASIC "Zkladn" + IDS_ACCEL_EMULATION "Emulace" ++ IDS_DRIVER_PULSE "Ovlada PulseAudio" + IDS_DRIVER_ALSA "Ovlada ALSA" + IDS_DRIVER_ESOUND "Ovlada EsounD" + IDS_DRIVER_OSS "Ovlada OSS" +diff --git a/programs/winecfg/Da.rc b/programs/winecfg/Da.rc +index 1d655ad..a1c9653 100644 +--- a/programs/winecfg/Da.rc ++++ b/programs/winecfg/Da.rc +@@ -268,6 +268,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Grundlggende" + IDS_ACCEL_EMULATION "Emulring" ++ IDS_DRIVER_PULSE "PulseAudio-driver" + IDS_DRIVER_ALSA "ALSA-driver" + IDS_DRIVER_ESOUND "EsounD-driver" + IDS_DRIVER_OSS "OSS-driver" +diff --git a/programs/winecfg/De.rc b/programs/winecfg/De.rc +index 9ed3d63..614247b 100644 +--- a/programs/winecfg/De.rc ++++ b/programs/winecfg/De.rc +@@ -268,6 +268,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Einfach" + IDS_ACCEL_EMULATION "Emulation" ++ IDS_DRIVER_PULSE "PulseAudio-Treiber" + IDS_DRIVER_ALSA "ALSA-Treiber" + IDS_DRIVER_ESOUND "EsounD-Treiber" + IDS_DRIVER_OSS "OSS-Treiber" +diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc +index 5743ba3..b165a81 100644 +--- a/programs/winecfg/En.rc ++++ b/programs/winecfg/En.rc +@@ -270,6 +270,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Basic" + IDS_ACCEL_EMULATION "Emulation" ++ IDS_DRIVER_PULSE "PulseAudio Driver" + IDS_DRIVER_ALSA "ALSA Driver" + IDS_DRIVER_ESOUND "EsounD Driver" + IDS_DRIVER_OSS "OSS Driver" +diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc +index 440ea71..dd1b764 100644 +--- a/programs/winecfg/Es.rc ++++ b/programs/winecfg/Es.rc +@@ -268,6 +268,7 @@ BEGIN + IDS_ACCEL_STANDARD "Estndar" + IDS_ACCEL_BASIC "Bsica" + IDS_ACCEL_EMULATION "Emulacin" ++ IDS_DRIVER_PULSE "Manejador PulseAudio" + IDS_DRIVER_ALSA "Manejador ALSA" + IDS_DRIVER_ESOUND "Manejador EsounD" + IDS_DRIVER_OSS "Manejador OSS" +diff --git a/programs/winecfg/Fi.rc b/programs/winecfg/Fi.rc +index 1d761f8..e1b1583 100644 +--- a/programs/winecfg/Fi.rc ++++ b/programs/winecfg/Fi.rc +@@ -268,6 +268,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Basic" + IDS_ACCEL_EMULATION "Emulation" ++ IDS_DRIVER_PULSE "PulseAudio Driver" + IDS_DRIVER_ALSA "ALSA Driver" + IDS_DRIVER_ESOUND "EsounD Driver" + IDS_DRIVER_OSS "OSS Driver" +diff --git a/programs/winecfg/Fr.rc b/programs/winecfg/Fr.rc +index 818c50f..97a1f44 100644 +--- a/programs/winecfg/Fr.rc ++++ b/programs/winecfg/Fr.rc +@@ -268,6 +268,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Basique" + IDS_ACCEL_EMULATION "mulation" ++ IDS_DRIVER_PULSE "Pilote PulseAudio" + IDS_DRIVER_ALSA "Pilote ALSA" + IDS_DRIVER_ESOUND "Pilote EsounD" + IDS_DRIVER_OSS "Pilote OSS" +diff --git a/programs/winecfg/Hu.rc b/programs/winecfg/Hu.rc +index 5afbf91..4131f5f 100644 +--- a/programs/winecfg/Hu.rc ++++ b/programs/winecfg/Hu.rc +@@ -268,6 +268,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Basic" + IDS_ACCEL_EMULATION "Emulation" ++ IDS_DRIVER_PULSE "PulseAudio Driver" + IDS_DRIVER_ALSA "ALSA Driver" + IDS_DRIVER_ESOUND "EsounD Driver" + IDS_DRIVER_OSS "OSS Driver" +diff --git a/programs/winecfg/Ja.rc b/programs/winecfg/Ja.rc +index 8eaa603..543ed2c 100644 +--- a/programs/winecfg/Ja.rc ++++ b/programs/winecfg/Ja.rc +@@ -273,6 +273,7 @@ BEGIN + IDS_ACCEL_STANDARD "標準" + IDS_ACCEL_BASIC "基本" + IDS_ACCEL_EMULATION "エミュレーション" ++ IDS_DRIVER_PULSE "PulseAudio Driver" + IDS_DRIVER_ALSA "ALSA Driver" + IDS_DRIVER_ESOUND "EsounD Driver" + IDS_DRIVER_OSS "OSS Driver" +diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc +index ca94b5b..a79cc03 100644 +--- a/programs/winecfg/Ko.rc ++++ b/programs/winecfg/Ko.rc +@@ -272,6 +272,7 @@ BEGIN + IDS_ACCEL_STANDARD "ǥ" + IDS_ACCEL_BASIC "⺻" + IDS_ACCEL_EMULATION "ֹķ̼" ++ IDS_DRIVER_PULSE "PulseAudio ̹" + IDS_DRIVER_ALSA "ALSA ̹" + IDS_DRIVER_ESOUND "EsounD ̹" + IDS_DRIVER_OSS "OSS ̹" +diff --git a/programs/winecfg/Nl.rc b/programs/winecfg/Nl.rc +index fb91290..b23e919 100644 +--- a/programs/winecfg/Nl.rc ++++ b/programs/winecfg/Nl.rc +@@ -270,6 +270,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standaard" + IDS_ACCEL_BASIC "Eenvoudig" + IDS_ACCEL_EMULATION "Emulatie" ++ IDS_DRIVER_PULSE "PulseAudio Stuurprogramma" + IDS_DRIVER_ALSA "ALSA Stuurprogramma" + IDS_DRIVER_ESOUND "EsounD Stuurprogramma" + IDS_DRIVER_OSS "OSS Stuurprogramma" +diff --git a/programs/winecfg/No.rc b/programs/winecfg/No.rc +index aaa64c3..9dd3572 100644 +--- a/programs/winecfg/No.rc ++++ b/programs/winecfg/No.rc +@@ -268,6 +268,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Grunnleggende" + IDS_ACCEL_EMULATION "Emulering" ++ IDS_DRIVER_PULSE "PulseAudio-driver" + IDS_DRIVER_ALSA "ALSA-driver" + IDS_DRIVER_ESOUND "EsounD-driver" + IDS_DRIVER_OSS "OSS-driver" +diff --git a/programs/winecfg/Pl.rc b/programs/winecfg/Pl.rc +index c426443..e3bf093 100644 +--- a/programs/winecfg/Pl.rc ++++ b/programs/winecfg/Pl.rc +@@ -271,6 +271,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standardowe" + IDS_ACCEL_BASIC "Podstawowe" + IDS_ACCEL_EMULATION "Emulacja" ++ IDS_DRIVER_PULSE "Sterownik PulseAudio" + IDS_DRIVER_ALSA "Sterownik ALSA" + IDS_DRIVER_ESOUND "Sterownik EsounD" + IDS_DRIVER_OSS "Sterownik OSS" +diff --git a/programs/winecfg/Pt.rc b/programs/winecfg/Pt.rc +index 830cabf..0ed1dbd 100644 +--- a/programs/winecfg/Pt.rc ++++ b/programs/winecfg/Pt.rc +@@ -465,6 +465,7 @@ BEGIN + IDS_ACCEL_STANDARD "Padro" + IDS_ACCEL_BASIC "Bsico" + IDS_ACCEL_EMULATION "Emulao" ++ IDS_DRIVER_PULSE "Controlador PulseAudio" + IDS_DRIVER_ALSA "Controlador ALSA" + IDS_DRIVER_ESOUND "Controlador EsounD" + IDS_DRIVER_OSS "Controlador OSS" +diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc +index a4b0cad..c065d36 100644 +--- a/programs/winecfg/Ro.rc ++++ b/programs/winecfg/Ro.rc +@@ -270,6 +270,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "De basă" + IDS_ACCEL_EMULATION "Emulare" ++ IDS_DRIVER_PULSE "Driver PulseAudio" + IDS_DRIVER_ALSA "Driver ALSA" + IDS_DRIVER_ESOUND "Driver Esound" + IDS_DRIVER_OSS "Driver OSS" +diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc +index 782e1fd..f516399 100644 +--- a/programs/winecfg/Ru.rc ++++ b/programs/winecfg/Ru.rc +@@ -272,6 +272,7 @@ BEGIN + IDS_ACCEL_STANDARD "" + IDS_ACCEL_BASIC "" + IDS_ACCEL_EMULATION "" ++ IDS_DRIVER_PULSE "PulseAudio " + IDS_DRIVER_ALSA "ALSA " + IDS_DRIVER_ESOUND "EsounD " + IDS_DRIVER_OSS "OSS " +diff --git a/programs/winecfg/Si.rc b/programs/winecfg/Si.rc +index 0bd04ef..c8bd35e 100644 +--- a/programs/winecfg/Si.rc ++++ b/programs/winecfg/Si.rc +@@ -270,6 +270,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standardno" + IDS_ACCEL_BASIC "Osnovno" + IDS_ACCEL_EMULATION "Emulacija" ++ IDS_DRIVER_PULSE "PulseAudio gonilnik" + IDS_DRIVER_ALSA "ALSA gonilnik" + IDS_DRIVER_ESOUND "EsounD gonilnik" + IDS_DRIVER_OSS "OSS gonilnik" +diff --git a/programs/winecfg/Sv.rc b/programs/winecfg/Sv.rc +index 49bb236..7efe2c0 100644 +--- a/programs/winecfg/Sv.rc ++++ b/programs/winecfg/Sv.rc +@@ -268,6 +268,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Grundlggande" + IDS_ACCEL_EMULATION "Emulering" ++ IDS_DRIVER_PULSE "PulseAudio-drivrutin" + IDS_DRIVER_ALSA "ALSA-drivrutin" + IDS_DRIVER_ESOUND "EsounD-drivrutin" + IDS_DRIVER_OSS "OSS-drivrutin" +diff --git a/programs/winecfg/Tr.rc b/programs/winecfg/Tr.rc +index 4157f86..1be23c5 100644 +--- a/programs/winecfg/Tr.rc ++++ b/programs/winecfg/Tr.rc +@@ -268,6 +268,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standart" + IDS_ACCEL_BASIC "Temel" + IDS_ACCEL_EMULATION "Taklit" ++ IDS_DRIVER_PULSE "PulseAudio Srcs" + IDS_DRIVER_ALSA "ALSA Srcs" + IDS_DRIVER_ESOUND "EsounD Srcs" + IDS_DRIVER_OSS "OSS Srcs" +diff --git a/programs/winecfg/Zh.rc b/programs/winecfg/Zh.rc +index 4c18e99..029a26d 100644 +--- a/programs/winecfg/Zh.rc ++++ b/programs/winecfg/Zh.rc +@@ -271,6 +271,7 @@ BEGIN + IDS_ACCEL_STANDARD "标准" + IDS_ACCEL_BASIC "基本" + IDS_ACCEL_EMULATION "软件模拟" ++ IDS_DRIVER_PULSE "PulseAudio 驱动" + IDS_DRIVER_ALSA "ALSA 驱动" + IDS_DRIVER_ESOUND "EsounD 驱动" + IDS_DRIVER_OSS "OSS 驱动" +diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c +index 8e966a5..9c2cde3 100644 +--- a/programs/winecfg/audio.c ++++ b/programs/winecfg/audio.c +@@ -88,6 +88,7 @@ typedef struct + } AUDIO_DRIVER; + + static const AUDIO_DRIVER sAudioDrivers[] = { ++ {IDS_DRIVER_PULSE, "pulse"}, + {IDS_DRIVER_ALSA, "alsa"}, + {IDS_DRIVER_OSS, "oss"}, + {IDS_DRIVER_COREAUDIO, "coreaudio"}, +diff --git a/programs/winecfg/libraries.c b/programs/winecfg/libraries.c +index 6abe04d..2fa6a95 100644 +--- a/programs/winecfg/libraries.c ++++ b/programs/winecfg/libraries.c +@@ -67,6 +67,7 @@ static const char * const builtin_only[] = + "user32", + "vdmdbg", + "w32skrnl", ++ "winepulse.drv", + "winealsa.drv", + "wineaudioio.drv", + "wined3d", +diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h +index a18fe76..1c4a1e7 100644 +--- a/programs/winecfg/resource.h ++++ b/programs/winecfg/resource.h +@@ -182,7 +182,7 @@ + #define IDS_ACCEL_BASIC 8302 + #define IDS_ACCEL_EMULATION 8303 + #define IDS_DRIVER_ALSA 8304 +- ++#define IDS_DRIVER_PULSE 8305 + #define IDS_DRIVER_ESOUND 8306 + #define IDS_DRIVER_OSS 8307 + #define IDS_DRIVER_JACK 8308 diff --git a/sources b/sources index 076ec2e..3554a20 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -2ba8d6bcddf2b969da0281f867b713dd wine-1.1.14-fe.tar.bz2 +cfeb6cfd7404c2fed2c9f2623976ea7e wine-1.1.15-fe.tar.bz2 diff --git a/wine-alsa-pulseaudio.patch b/wine-alsa-pulseaudio.patch deleted file mode 100644 index 382edd9..0000000 --- a/wine-alsa-pulseaudio.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff --git a/dlls/winealsa.drv/waveout.c b/dlls/winealsa.drv/waveout.c -index f4452e5..34ab57a 100644 ---- a/dlls/winealsa.drv/waveout.c -+++ b/dlls/winealsa.drv/waveout.c -@@ -570,7 +570,7 @@ static DWORD wodOpen(WORD wDevID, LPWAVEOPENDESC lpDesc, DWORD dwFlags) - snd_pcm_access_t access; - snd_pcm_format_t format = -1; - unsigned int rate; -- unsigned int buffer_time = 500000; -+ unsigned int buffer_time = 120000; - unsigned int period_time = 10000; - snd_pcm_uframes_t buffer_size; - snd_pcm_uframes_t period_size; - -diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c -index 31078cb..ad08fae 100644 ---- a/dlls/dsound/dsound_main.c -+++ b/dlls/dsound/dsound_main.c -@@ -91,7 +91,7 @@ HRESULT mmErr(UINT err) - /* All default settings, you most likely don't want to touch these, see wiki on UsefulRegistryKeys */ - int ds_emuldriver = 0; - int ds_hel_buflen = 32768; --int ds_snd_queue_max = 10; -+int ds_snd_queue_max = 12; - int ds_snd_queue_min = 6; - int ds_snd_shadow_maxsize = 2; - int ds_hw_accel = DS_HW_ACCEL_FULL; diff --git a/wine-pulseaudio-waveout.patch b/wine-pulseaudio-waveout.patch deleted file mode 100644 index a85e35c..0000000 --- a/wine-pulseaudio-waveout.patch +++ /dev/null @@ -1,1204 +0,0 @@ -diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c -index 3ef6a03..64274d4 100644 ---- a/dlls/winepulse.drv/pulse.c -+++ b/dlls/winepulse.drv/pulse.c -@@ -251,6 +251,75 @@ int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, - */ - - /****************************************************************** -+ * PULSE_setupFormat -+ * -+ * Checks to see if the audio format in wf is supported, and if so set up the -+ * pa_sample_spec at ss to that format. -+ */ -+BOOL PULSE_setupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss) { -+ -+ if (wf->nSamplesPerSecnSamplesPerSec>DSBFREQUENCY_MAX) -+ return FALSE; -+ -+ ss->channels=wf->nChannels; -+ ss->rate=wf->nSamplesPerSec; -+ -+ if (wf->wFormatTag == WAVE_FORMAT_PCM) { -+ if (ss->channels==1 || ss->channels==2) { -+ switch (wf->wBitsPerSample) { -+ case 8: -+ ss->format = PA_SAMPLE_U8; -+ return TRUE; -+ case 16: -+ ss->format = PA_SAMPLE_S16NE; -+ return TRUE; -+ } -+ } -+ } else if (wf->wFormatTag == WAVE_FORMAT_EXTENSIBLE) { -+ WAVEFORMATEXTENSIBLE * wfex = (WAVEFORMATEXTENSIBLE *)wf; -+ -+ if (wf->cbSize == 22 && -+ (IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM))) { -+ if (ss->channels>=1 && ss->channels<=6) { -+ if (wf->wBitsPerSample==wfex->Samples.wValidBitsPerSample) { -+ switch (wf->wBitsPerSample) { -+ case 8: -+ ss->format=PA_SAMPLE_U8; -+ return TRUE; -+ case 16: -+ ss->format=PA_SAMPLE_S16NE; -+ return TRUE; -+ case 43: -+ ss->format=PA_SAMPLE_S32NE; -+ return TRUE; -+ } -+ } else -+ WARN("wBitsPerSample != wValidBitsPerSample not supported yet\n"); -+ } -+ } else if (wf->cbSize == 22 && -+ (IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))) { -+ if (ss->channels>=1 && ss->channels<=6) { -+ if (wf->wBitsPerSample==wfex->Samples.wValidBitsPerSample && wf->wBitsPerSample == 32) { -+ ss->format=PA_SAMPLE_FLOAT32NE; -+ return TRUE; -+ } -+ } -+ } else -+ WARN("only KSDATAFORMAT_SUBTYPE_PCM and KSDATAFORMAT_SUBTYPE_IEEE_FLOAT " -+ "supported\n"); -+ } else if (wf->wFormatTag == WAVE_FORMAT_MULAW || wf->wFormatTag == WAVE_FORMAT_ALAW) { -+ if (wf->wBitsPerSample==8) { -+ ss->format= (wf->wFormatTag==WAVE_FORMAT_MULAW) ? PA_SAMPLE_ULAW : PA_SAMPLE_ALAW; -+ return TRUE; -+ } else -+ ERR("WAVE_FORMAT_MULAW and WAVE_FORMAT_ALAW wBitsPerSample must = 8\n"); -+ } else -+ WARN("only WAVE_FORMAT_PCM, WAVE_FORMAT_MULAW, WAVE_FORMAT_ALAW and WAVE_FORMAT_EXTENSIBLE supported\n"); -+ -+ return FALSE; -+} -+ -+/****************************************************************** - * PULSE_free_wavedevs [internal] - * - * Free and deallocated all the wavedevs in the array of size allocated -@@ -328,6 +397,23 @@ void PULSE_wait_for_operation(pa_operation *o, WINE_WAVEINST *wd) { - * Common Callbacks - */ - -+/************************************************************************** -+ * PULSE_stream_request_callback -+ * -+ * Called by the pulse mainloop whenever it wants or has audio data. -+ */ -+void PULSE_stream_request_callback(pa_stream *s, size_t nbytes, void *userdata) { -+ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; -+ assert(s && ww); -+ -+ TRACE("Asking to feed.\n"); -+ -+ /* Make sure that the player is running */ -+ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { -+ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); -+ } -+} -+ - /****************************************************************** - * PULSE_stream_state_callback - * -diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c -index fe7543f..9f0ade5 100644 ---- a/dlls/winepulse.drv/waveout.c -+++ b/dlls/winepulse.drv/waveout.c -@@ -70,6 +70,879 @@ WINE_DEFAULT_DEBUG_CHANNEL(wave); - * +---------+-------------+---------------+---------------------------------+ - */ - -+/* -+ * - It is currently unknown if pausing in a loop works the same as expected. -+ */ -+ -+/*======================================================================* -+ * WAVE OUT specific PulseAudio Callbacks * -+ *======================================================================*/ -+ -+#if HAVE_PULSEAUDIO_0_9_11 -+/************************************************************************** -+ * PULSE_started_callback [internal] -+ * -+ * Called by the pulse mainloop whenever stream playback resumes after an -+ * underflow or an initial start -+ */ -+static void PULSE_started_callback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ TRACE("Audio flowing.\n"); -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size) { -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_STARTING, 0, FALSE); -+ } -+} -+#else /* HAVE_PULSEAUDIO_0_9_11 */ -+/************************************************************************** -+ * PULSE_timing_info_update_callback [internal] -+ * -+ * Called by the pulse mainloop whenever the timing info gets updated, we -+ * use this to send the started signal */ -+static void PULSE_timing_info_update_callback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ if (wwo->is_buffering && wwo->timing_info && wwo->timing_info->playing) { -+ TRACE("Audio flowing.\n"); -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_STARTING, 0, FALSE); -+ } -+} -+#endif -+ -+/************************************************************************** -+ * PULSE_suspended_callback [internal] -+ * -+ * Called by the pulse mainloop any time stream playback is intentionally -+ * suspended or resumed from being suspended. -+ */ -+static void PULSE_suspended_callback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ /* Currently we handle this kinda like an underrun. Perhaps we should -+ * tell the client somehow so it doesn't just hang? */ -+ -+ if (!pa_stream_is_suspended(s) && wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); -+} -+ -+/************************************************************************** -+ * PULSE_underrun_callback [internal] -+ * -+ * Called by the pulse mainloop when the prebuf runs out of data. -+ */ -+static void PULSE_underrun_callback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ /* If we aren't playing, don't care ^_^ */ -+ if (wwo->state != WINE_WS_PLAYING) return; -+ -+ TRACE("Underrun occurred.\n"); -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0); -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); -+} -+ -+/*======================================================================* -+ * "Low level" WAVE OUT implementation * -+ *======================================================================*/ -+ -+/************************************************************************** -+ * wodNotifyClient [internal] -+ */ -+static DWORD wodNotifyClient(WINE_WAVEINST* wwo, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { -+ TRACE("wMsg = 0x%04x dwParm1 = %04X dwParam2 = %04X\n", wMsg, dwParam1, dwParam2); -+ -+ switch (wMsg) { -+ case WOM_OPEN: -+ case WOM_CLOSE: -+ case WOM_DONE: -+ if (wwo->wFlags != DCB_NULL && -+ !DriverCallback(wwo->waveDesc.dwCallback, wwo->wFlags, (HDRVR)wwo->waveDesc.hWave, -+ wMsg, wwo->waveDesc.dwInstance, dwParam1, dwParam2)) { -+ WARN("can't notify client !\n"); -+ return MMSYSERR_ERROR; -+ } -+ break; -+ default: -+ FIXME("Unknown callback message %u\n", wMsg); -+ return MMSYSERR_INVALPARAM; -+ } -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodPlayer_BeginWaveHdr [internal] -+ * -+ * Makes the specified lpWaveHdr the currently playing wave header. -+ * If the specified wave header is a begin loop and we're not already in -+ * a loop, setup the loop. -+ */ -+static void wodPlayer_BeginWaveHdr(WINE_WAVEINST* wwo, LPWAVEHDR lpWaveHdr) { -+ wwo->lpPlayPtr = lpWaveHdr; -+ -+ if (!lpWaveHdr) return; -+ -+ if (lpWaveHdr->dwFlags & WHDR_BEGINLOOP) { -+ if (wwo->lpLoopPtr) { -+ WARN("Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr); -+ } else { -+ TRACE("Starting loop (%dx) with %p\n", lpWaveHdr->dwLoops, lpWaveHdr); -+ wwo->lpLoopPtr = lpWaveHdr; -+ /* Windows does not touch WAVEHDR.dwLoops, -+ * so we need to make an internal copy */ -+ wwo->dwLoops = lpWaveHdr->dwLoops; -+ } -+ } -+ wwo->dwPartialOffset = 0; -+} -+ -+/************************************************************************** -+ * wodPlayer_PlayPtrNext [internal] -+ * -+ * Advance the play pointer to the next waveheader, looping if required. -+ */ -+static LPWAVEHDR wodPlayer_PlayPtrNext(WINE_WAVEINST* wwo) { -+ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; -+ -+ wwo->dwPartialOffset = 0; -+ if ((lpWaveHdr->dwFlags & WHDR_ENDLOOP) && wwo->lpLoopPtr) { -+ /* We're at the end of a loop, loop if required */ -+ if (--wwo->dwLoops > 0) { -+ wwo->lpPlayPtr = wwo->lpLoopPtr; -+ } else { -+ /* Handle overlapping loops correctly */ -+ if (wwo->lpLoopPtr != lpWaveHdr && (lpWaveHdr->dwFlags & WHDR_BEGINLOOP)) { -+ FIXME("Correctly handled case ? (ending loop buffer also starts a new loop)\n"); -+ /* shall we consider the END flag for the closing loop or for -+ * the opening one or for both ??? -+ * code assumes for closing loop only -+ */ -+ } else { -+ lpWaveHdr = lpWaveHdr->lpNext; -+ } -+ wwo->lpLoopPtr = NULL; -+ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr); -+ } -+ } else { -+ /* We're not in a loop. Advance to the next wave header */ -+ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr = lpWaveHdr->lpNext); -+ } -+ -+ return lpWaveHdr; -+} -+ -+/************************************************************************** -+ * wodPlayer_CheckReleasing [internal] -+ * -+ * Check to see if data has stopped being fed to us before actual playback -+ * starts. In this case the app wants a smaller buffer than pulse currently is -+ * offering. We ignore this and just start the releasing reference. The -+ * downside is that there is a latency unknown to the app. The upside is that -+ * pulse is good at managing latencies -+ */ -+static void wodPlayer_CheckReleasing(WINE_WAVEINST *wwo) { -+ LPWAVEHDR lpWaveHdr = wwo->lpQueuePtr; -+ -+ /* If we aren't playing, (only valid on pulse >= 0.9.11) and we have -+ * queued data and we aren't relasing, start releasing if either: -+ * - We have stopped being given wavehdrs, or -+ * - We have 2s worth of audio built up.*/ -+ if (wwo->is_buffering && lpWaveHdr && !wwo->is_releasing && -+ (pa_bytes_to_usec(lpWaveHdr->dwBufferLength, &wwo->sample_spec)/2 < pa_timeval_age(&wwo->last_header)|| -+ wwo->timing_info->write_index - lpWaveHdr->reserved > pa_bytes_per_second(&wwo->sample_spec)*2)) { -+ -+ pa_gettimeofday(&wwo->started_releasing); -+ wwo->is_releasing = TRUE; -+ wwo->releasing_offset = wwo->lpQueuePtr->reserved; -+ TRACE("Starting to release early: %u\n", wwo->releasing_offset); -+ } -+} -+ -+/************************************************************************** -+ * wodPlayer_NotifyCompletions [internal] -+ * -+ * Notifies and remove from queue all wavehdrs which have been played to -+ * the speaker based on a reference time of (theoretical) playback start. If -+ * force is true, we notify all wavehdrs and remove them all from the queue -+ * even if they are unplayed or part of a loop. We return the time to wait -+ * until the next wavehdr needs to be freed, or INFINITE if there are no more -+ * wavehdrs. -+ */ -+static DWORD wodPlayer_NotifyCompletions(WINE_WAVEINST* wwo, BOOL force) { -+ LPWAVEHDR lpWaveHdr; -+ pa_usec_t time; -+ pa_usec_t wait; -+ -+ time = pa_bytes_to_usec(wwo->releasing_offset, &wwo->sample_spec); -+ if (wwo->is_releasing) -+ time += pa_timeval_age(&wwo->started_releasing); -+ -+ for (lpWaveHdr = wwo->lpQueuePtr; lpWaveHdr; lpWaveHdr = wwo->lpQueuePtr) { -+ if (!force) { -+ /* Start from lpQueuePtr and keep notifying until: -+ * - we hit an unwritten wavehdr -+ * - we hit the beginning of a running loop -+ * - we hit a wavehdr which hasn't finished playing -+ */ -+ if (lpWaveHdr == wwo->lpPlayPtr) { TRACE("play %p\n", lpWaveHdr); return INFINITE; } -+ if (lpWaveHdr == wwo->lpLoopPtr) { TRACE("loop %p\n", lpWaveHdr); return INFINITE; } -+ -+ /* See if this data has been played, and if not, return when it will have been */ -+ wait = pa_bytes_to_usec(lpWaveHdr->reserved + lpWaveHdr->dwBufferLength, &wwo->sample_spec); -+ if (wait >= time) { -+ wait = (wait - time) / 1000; -+ return wait ?: 1; -+ } -+ } -+ -+ /* return the wavehdr */ -+ wwo->lpQueuePtr = lpWaveHdr->lpNext; -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ -+ wodNotifyClient(wwo, WOM_DONE, (DWORD)lpWaveHdr, 0); -+ } -+ /* No more wavehdrs */ -+ TRACE("Empty queue\n"); -+ return INFINITE; -+} -+ -+/************************************************************************** -+ * wodPlayer_WriteMax [internal] -+ * Writes either space or the wavehdr's size into pulse's buffer, and -+ * returning how much data was written. -+ */ -+static int wodPlayer_WriteMax(WINE_WAVEINST *wwo, size_t *space) { -+ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; -+ size_t toWrite = min(lpWaveHdr->dwBufferLength - wwo->dwPartialOffset, *space); -+ size_t written = 0; -+ -+ if (!wwo->stream || -+ !PULSE_context || -+ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || -+ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) { -+ return 0; -+ } -+ -+ if (toWrite > 0 && -+ pa_stream_write(wwo->stream, lpWaveHdr->lpData + wwo->dwPartialOffset, toWrite, NULL, 0, PA_SEEK_RELATIVE) >= 0) { -+ TRACE("Writing wavehdr %p.%u[%u]\n", lpWaveHdr, wwo->dwPartialOffset, lpWaveHdr->dwBufferLength); -+ written = toWrite; -+ } -+ -+ /* Check to see if we wrote all of the wavehdr */ -+ if ((wwo->dwPartialOffset += written) >= lpWaveHdr->dwBufferLength) -+ wodPlayer_PlayPtrNext(wwo); -+ *space -= written; -+ -+ return written; -+} -+ -+/************************************************************************** -+ * wodPlayer_Feed [internal] -+ * -+ * Feed as much sound data as we can into pulse using wodPlayer_WriteMax -+ */ -+static void wodPlayer_Feed(WINE_WAVEINST* wwo, size_t space) { -+ /* no more room... no need to try to feed */ -+ if (space > 0) { -+ /* Feed from a partial wavehdr */ -+ if (wwo->lpPlayPtr && wwo->dwPartialOffset != 0) -+ wodPlayer_WriteMax(wwo, &space); -+ -+ /* Feed wavehdrs until we run out of wavehdrs or buffer space */ -+ 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); -+ } -+ } -+} -+ -+/************************************************************************** -+ * wodPlayer_Reset [internal] -+ * -+ * wodPlayer helper. Resets current output stream. -+ */ -+static void wodPlayer_Reset(WINE_WAVEINST* wwo) { -+ enum win_wm_message msg; -+ DWORD param; -+ HANDLE ev; -+ pa_operation *o; -+ -+ TRACE("(%p)\n", wwo); -+ -+ /* remove any buffer */ -+ wodPlayer_NotifyCompletions(wwo, TRUE); -+ -+ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; -+ if (wwo->state != WINE_WS_PAUSED) -+ wwo->state = WINE_WS_STOPPED; -+ wwo->dwPartialOffset = 0; -+ -+ if (!wwo->stream || -+ !PULSE_context || -+ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || -+ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) { -+ return; -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ -+ /* flush the output buffer of written data*/ -+ if ((o = pa_stream_flush(wwo->stream, PULSE_stream_success_callback, NULL))) -+ PULSE_wait_for_operation(o, wwo); -+ -+ /* Ask for the timing info to be updated (sanity, I don't know if we _have_ to) */ -+ if ((o = pa_stream_update_timing_info(wwo->stream, PULSE_stream_success_callback, wwo))) -+ PULSE_wait_for_operation(o, wwo); -+ -+ /* Reset the written byte count as some data may have been flushed */ -+ wwo->releasing_offset = wwo->last_reset = wwo->timing_info->write_index; -+ if (wwo->is_releasing) -+ pa_gettimeofday(&wwo->started_releasing); -+ -+ /* return all pending headers in queue */ -+ EnterCriticalSection(&wwo->msgRing.msg_crst); -+ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { -+ if (msg != WINE_WM_HEADER) { -+ SetEvent(ev); -+ continue; -+ } -+ ((LPWAVEHDR)param)->dwFlags &= ~WHDR_INQUEUE; -+ ((LPWAVEHDR)param)->dwFlags |= WHDR_DONE; -+ wodNotifyClient(wwo, WOM_DONE, param, 0); -+ } -+ PULSE_ResetRingMessage(&wwo->msgRing); -+ LeaveCriticalSection(&wwo->msgRing.msg_crst); -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+} -+ -+/************************************************************************** -+ * wodPlayer_Underrun [internal] -+ * -+ * wodPlayer helper. Deal with a stream underrun. -+ */ -+static void wodPlayer_Underrun(WINE_WAVEINST* wwo) { -+ size_t space; -+ pa_operation *o; -+ -+ wwo->is_buffering = TRUE; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ -+ if (wwo->lpPlayPtr) { -+ TRACE("There is queued data. Trying to recover.\n"); -+ space = pa_stream_writable_size(wwo->stream); -+ -+ if (!space) { -+ TRACE("No space to feed. Flushing.\n"); -+ if ((o = pa_stream_flush(wwo->stream, PULSE_stream_success_callback, wwo))) -+ PULSE_wait_for_operation(o, wwo); -+ space = pa_stream_writable_size(wwo->stream); -+ } -+ wodPlayer_Feed(wwo, space); -+ } -+ -+ /* Ask for a timing update */ -+ if ((o = pa_stream_update_timing_info(wwo->stream, PULSE_stream_success_callback, wwo))) -+ PULSE_wait_for_operation(o, wwo); -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ if (wwo->timing_info->playing) { -+ TRACE("Recovered.\n"); -+ wwo->is_buffering = FALSE; -+ } else { -+ ERR("Stream underrun! %i\n", wwo->instance_ref); -+ wwo->is_releasing = FALSE; -+ wwo->releasing_offset = wwo->timing_info->write_index; -+ } -+ -+ wwo->releasing_offset = wwo->timing_info->write_index; -+} -+ -+ -+/************************************************************************** -+ * wodPlayer_ProcessMessages [internal] -+ */ -+static void wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { -+ LPWAVEHDR lpWaveHdr; -+ enum win_wm_message msg; -+ DWORD param; -+ HANDLE ev; -+ pa_operation *o; -+ -+ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { -+ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); -+ -+ switch (msg) { -+ case WINE_WM_PAUSING: -+ wwo->state = WINE_WS_PAUSED; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if ((o = pa_stream_cork(wwo->stream, 1, PULSE_stream_success_callback, NULL))) -+ PULSE_wait_for_operation(o, wwo); -+ -+ /* save how far we are, as releasing will restart from here */ -+ if (wwo->is_releasing) -+ wwo->releasing_offset = wwo->timing_info->write_index; -+ -+ wwo->is_buffering = TRUE; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_RESTARTING: -+ if (wwo->state == WINE_WS_PAUSED) { -+ wwo->state = WINE_WS_PLAYING; -+ if (wwo->is_releasing) -+ pa_gettimeofday(&wwo->started_releasing); -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if ((o = pa_stream_cork(wwo->stream, 0, PULSE_stream_success_callback, NULL))) -+ PULSE_wait_for_operation(o, wwo); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_HEADER: -+ lpWaveHdr = (LPWAVEHDR)param; -+ /* insert buffer at the end of queue */ -+ { -+ LPWAVEHDR* wh; -+ for (wh = &(wwo->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); -+ *wh = lpWaveHdr; -+ } -+ -+ if (!wwo->lpPlayPtr) -+ wodPlayer_BeginWaveHdr(wwo,lpWaveHdr); -+ /* Try and feed now, as we may have missed when pulse first asked */ -+ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); -+ if (wwo->state == WINE_WS_STOPPED) -+ wwo->state = WINE_WS_PLAYING; -+ if (wwo->is_buffering && !wwo->is_releasing) -+ pa_gettimeofday(&wwo->last_header); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_RESETTING: -+ wodPlayer_Reset(wwo); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_BREAKLOOP: -+ if (wwo->state == WINE_WS_PLAYING && wwo->lpLoopPtr != NULL) -+ /* ensure exit at end of current loop */ -+ wwo->dwLoops = 1; -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_FEED: /* Sent by the pulse thread */ -+ wodPlayer_Feed(wwo, (size_t)param); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_XRUN: /* Sent by the pulse thread */ -+ wodPlayer_Underrun(wwo); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_STARTING: /* Set by the pulse thread */ -+ wwo->is_buffering = FALSE; -+ /* Start releasing wavehdrs if we haven't already */ -+ if (!wwo->is_releasing) { -+ wwo->is_releasing = TRUE; -+ pa_gettimeofday(&wwo->started_releasing); -+ } -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_CLOSING: /* If param = 1, close because of a failure */ -+ wwo->hThread = NULL; -+ if ((DWORD)param == 1) { -+ /* If we are here, the stream has failed */ -+ wwo->state = WINE_WS_FAILED; -+ SetEvent(ev); -+ PULSE_DestroyRingMessage(&wwo->msgRing); -+ wodPlayer_NotifyCompletions(wwo, TRUE); -+ wodNotifyClient(wwo, WOM_CLOSE, 0L, 0L); -+ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_disconnect(wwo->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ TRACE("Thread exiting because of failure.\n"); -+ ExitThread(1); -+ } -+ wwo->state = WINE_WS_CLOSED; -+ /* sanity check: this should not happen since the device must have been reset before */ -+ if (wwo->lpQueuePtr || wwo->lpPlayPtr) ERR("out of sync\n"); -+ SetEvent(ev); -+ TRACE("Thread exiting.\n"); -+ ExitThread(0); -+ /* shouldn't go here */ -+ -+ default: -+ FIXME("unknown message %d\n", msg); -+ break; -+ } -+ } -+} -+ -+/************************************************************************** -+ * wodPlayer [internal] -+ */ -+static DWORD CALLBACK wodPlayer(LPVOID lpParam) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)lpParam; -+ DWORD dwSleepTime = INFINITE; -+ -+ wwo->state = WINE_WS_STOPPED; -+ SetEvent(wwo->hStartUpEvent); -+ -+ /* Wait for the shortest time before an action is required. If there are -+ * no pending actions, wait forever for a command. */ -+ for (;;) { -+ TRACE("Waiting %u ms\n", dwSleepTime); -+ PULSE_WaitRingMessage(&wwo->msgRing, dwSleepTime); -+ wodPlayer_ProcessMessages(wwo); -+ if (wwo->state == WINE_WS_PLAYING) { -+ wodPlayer_CheckReleasing(wwo); -+ dwSleepTime = wodPlayer_NotifyCompletions(wwo, FALSE); -+ } else -+ dwSleepTime = INFINITE; -+ } -+} -+ -+/************************************************************************** -+ * wodOpen [internal] -+ */ -+static DWORD wodOpen(WORD wDevID, LPDWORD lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { -+ WINE_WAVEDEV *wdo; -+ WINE_WAVEINST *wwo = NULL; -+ pa_operation *o; -+ DWORD x, ret = MMSYSERR_NOERROR; -+ pa_sample_spec test; -+ -+ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); -+ if (lpDesc == NULL) { -+ WARN("Invalid Parameter !\n"); -+ return MMSYSERR_INVALPARAM; -+ } -+ -+ if (wDevID >= PULSE_WodNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_BADDEVICEID; -+ } -+ wdo = &WOutDev[wDevID]; -+ -+ /* check to see if format is supported and make pa_sample_spec struct */ -+ if (!PULSE_setupFormat(lpDesc->lpFormat, &test) && -+ !pa_sample_spec_valid(&test)) { -+ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ return WAVERR_BADFORMAT; -+ } -+ -+ if (TRACE_ON(wave)) { -+ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; -+ pa_sample_spec_snprint(t, sizeof(t), &test); -+ TRACE("Sample spec '%s'\n", t); -+ } -+ -+ if (dwFlags & WAVE_FORMAT_QUERY) { -+ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ return MMSYSERR_NOERROR; -+ } -+ -+ for (x = 0; x < PULSE_MAX_STREAM_INSTANCES; x++) { -+ if (wdo->instance[x] == NULL) { -+ if (!(wdo->instance[x] = wwo = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEINST)))) -+ return MMSYSERR_NOMEM; -+ TRACE("Allocated new playback instance %u on device %u.\n", x, wDevID); -+ break; -+ } -+ } -+ if (x >= PULSE_MAX_STREAM_INSTANCES) return MMSYSERR_ALLOCATED; -+ -+ *lpdwUser = (DWORD)wwo; -+ wwo->instance_ref = x; -+ wwo->sample_spec.format = test.format; -+ wwo->sample_spec.rate = test.rate; -+ wwo->sample_spec.channels = test.channels; -+ if (test.channels == 2) { -+ wwo->volume.channels = 2; -+ wwo->volume.values[0] = wdo->left_vol; -+ wwo->volume.values[1] = wdo->right_vol; -+ } else -+ pa_cvolume_set(&wwo->volume, test.channels, (wdo->left_vol + wdo->right_vol)/2); -+ wwo->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); -+ wwo->waveDesc = *lpDesc; -+ wwo->lpQueuePtr = wwo->lpPlayPtr = wwo->lpLoopPtr = NULL; -+ wwo->dwPartialOffset = 0; -+ wwo->is_buffering = TRUE; -+ wwo->is_releasing = FALSE; -+ wwo->releasing_offset = 0; -+ wwo->timing_info = NULL; -+ PULSE_InitRingMessage(&wwo->msgRing); -+ -+ /* FIXME Find a better name for the stream */ -+ wwo->stream = pa_stream_new(PULSE_context, "Wine Playback", &wwo->sample_spec, NULL); -+ assert(wwo->stream); -+ -+ pa_stream_set_state_callback(wwo->stream, PULSE_stream_state_callback, wwo); -+ pa_stream_set_write_callback(wwo->stream, PULSE_stream_request_callback, wwo); -+ pa_stream_set_underflow_callback(wwo->stream, PULSE_underrun_callback, wwo); -+ pa_stream_set_suspended_callback(wwo->stream, PULSE_suspended_callback, wwo); -+#if HAVE_PULSEAUDIO_0_9_11 -+ pa_stream_set_started_callback(wwo->stream, PULSE_started_callback, wwo); -+#else -+ pa_stream_set_latency_update_callback(wwo->stream, PULSE_timing_info_update_callback, wwo); -+#endif -+ -+ /* I don't like this, but... */ -+ wwo->buffer_attr = pa_xmalloc(sizeof(pa_buffer_attr)); -+ wwo->buffer_attr->maxlength = (uint32_t) -1; -+ wwo->buffer_attr->tlength = pa_bytes_per_second(&wwo->sample_spec)/5; -+ wwo->buffer_attr->prebuf = (uint32_t) -1; -+ wwo->buffer_attr->minreq = (uint32_t) -1; -+ -+ TRACE("Connecting stream for playback.\n"); -+ pa_threaded_mainloop_lock(PULSE_ml); -+#if HAVE_PULSEAUDIO_0_9_11 -+ pa_stream_connect_playback(wwo->stream, wdo->device_name, wwo->buffer_attr, PA_STREAM_ADJUST_LATENCY, &wwo->volume, NULL); -+#else -+ pa_stream_connect_playback(wwo->stream, wdo->device_name, wwo->buffer_attr, PA_STREAM_AUTO_TIMING_UPDATE, &wwo->volume, NULL); -+#endif -+ -+ for (;;) { -+ pa_context_state_t cstate = pa_context_get_state(PULSE_context); -+ pa_stream_state_t sstate = pa_stream_get_state(wwo->stream); -+ -+ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || -+ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { -+ ERR("Failed to connect context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ ret = MMSYSERR_NODRIVER; -+ goto err; -+ } -+ -+ if (sstate == PA_STREAM_READY) -+ break; -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ TRACE("Stream connected for playback.\n"); -+ -+ if ((o = pa_stream_update_timing_info(wwo->stream, PULSE_stream_success_callback, wwo))) -+ PULSE_wait_for_operation(o, wwo); -+ -+ wwo->timing_info = pa_stream_get_timing_info(wwo->stream); -+ assert(wwo->timing_info); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ wwo->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); -+ wwo->hThread = CreateThread(NULL, 0, wodPlayer, (LPVOID)wwo, 0, &(wwo->dwThreadID)); -+ if (wwo->hThread) -+ SetThreadPriority(wwo->hThread, THREAD_PRIORITY_TIME_CRITICAL); -+ else { -+ ERR("Thread creation for the wodPlayer failed!\n"); -+ ret = MMSYSERR_NOMEM; -+ goto err; -+ } -+ WaitForSingleObject(wwo->hStartUpEvent, INFINITE); -+ CloseHandle(wwo->hStartUpEvent); -+ wwo->hStartUpEvent = INVALID_HANDLE_VALUE; -+ -+ -+ return wodNotifyClient (wwo, WOM_OPEN, 0L, 0L); -+ -+err: -+ TRACE("Bailing out...\n"); -+ wdo->instance[x] = NULL; -+ if (!wwo) -+ return ret; -+ -+ if (wwo->hStartUpEvent != INVALID_HANDLE_VALUE) -+ CloseHandle(wwo->hStartUpEvent); -+ -+ if (wwo->msgRing.ring_buffer_size > 0) -+ PULSE_DestroyRingMessage(&wwo->msgRing); -+ -+ if (pa_stream_get_state(wwo->stream) == PA_STREAM_READY) -+ pa_stream_disconnect(wwo->stream); -+ pa_stream_unref(wwo->stream); -+ if (wwo->buffer_attr) -+ pa_xfree(wwo->buffer_attr); -+ HeapFree(GetProcessHeap(), 0, wwo); -+ -+ return ret; -+} -+ -+/************************************************************************** -+ * wodClose [internal] -+ */ -+static DWORD wodClose(WORD wDevID, WINE_WAVEINST *wwo) { -+ pa_operation *o; -+ DWORD ret; -+ -+ TRACE("(%u, %p);\n", wDevID, wwo); -+ if (wDevID >= PULSE_WodNumDevs) { -+ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } else if (!wwo) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (wwo->state != WINE_WS_FAILED) { -+ if (wwo->lpQueuePtr && wwo->lpPlayPtr) { -+ WARN("buffers still playing !\n"); -+ return WAVERR_STILLPLAYING; -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if ((o = pa_stream_drain(wwo->stream, PULSE_stream_success_callback, NULL))) -+ PULSE_wait_for_operation(o, wwo); -+ pa_stream_disconnect(wwo->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_CLOSING, 0, TRUE); -+ -+ PULSE_DestroyRingMessage(&wwo->msgRing); -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_disconnect(wwo->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ ret = wodNotifyClient(wwo, WOM_CLOSE, 0L, 0L); -+ -+ if (wwo->buffer_attr) -+ pa_xfree(wwo->buffer_attr); -+ pa_stream_unref(wwo->stream); -+ WOutDev[wDevID].instance[wwo->instance_ref] = NULL; -+ TRACE("Deallocating playback instance %u on device %u.\n", wwo->instance_ref, wDevID); -+ HeapFree(GetProcessHeap(), 0, wwo); -+ return ret; -+} -+ -+/************************************************************************** -+ * wodWrite [internal] -+ */ -+static DWORD wodWrite(WINE_WAVEINST *wwo, LPWAVEHDR lpWaveHdr, DWORD dwSize) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) -+ return WAVERR_UNPREPARED; -+ -+ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) -+ return WAVERR_STILLPLAYING; -+ -+ lpWaveHdr->dwFlags &= ~WHDR_DONE; -+ lpWaveHdr->dwFlags |= WHDR_INQUEUE; -+ lpWaveHdr->lpNext = 0; -+ lpWaveHdr->reserved = 0; -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodPause [internal] -+ */ -+static DWORD wodPause(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_PAUSING, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodGetPosition [internal] -+ */ -+static DWORD wodGetPosition(WINE_WAVEINST *wwo, LPMMTIME lpTime, DWORD uSize) { -+ pa_usec_t time; -+ -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpTime == NULL) return MMSYSERR_INVALPARAM; -+ -+ time = pa_bytes_to_usec(wwo->releasing_offset, &wwo->sample_spec); -+ -+ if (wwo->is_releasing) -+ time += pa_timeval_age(&wwo->started_releasing); -+ -+ if (wwo->last_reset > wwo->releasing_offset) -+ wwo->last_reset = 0; -+ -+ time -= pa_bytes_to_usec(wwo->last_reset, &wwo->sample_spec); -+ time /= 1000; -+ -+ switch (lpTime->wType) { -+ case TIME_SAMPLES: -+ lpTime->u.sample = (time * wwo->sample_spec.rate) / 1000; -+ break; -+ case TIME_MS: -+ lpTime->u.ms = time; -+ break; -+ case TIME_SMPTE: -+ lpTime->u.smpte.fps = 30; -+ lpTime->u.smpte.sec = time/1000; -+ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; -+ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; -+ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; -+ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; -+ lpTime->u.smpte.fps = 30; -+ lpTime->u.smpte.frame = time / lpTime->u.smpte.fps * 1000; -+ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", -+ lpTime->u.smpte.hour, lpTime->u.smpte.min, -+ lpTime->u.smpte.sec, lpTime->u.smpte.frame); -+ break; -+ default: -+ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); -+ lpTime->wType = TIME_BYTES; -+ /* fall through */ -+ case TIME_BYTES: -+ lpTime->u.cb = (pa_bytes_per_second(&wwo->sample_spec)*time) / 1000; -+ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); -+ break; -+ } -+ -+ return MMSYSERR_NOERROR; -+} -+/************************************************************************** -+ * wodBreakLoop [internal] -+ */ -+static DWORD wodBreakLoop(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_BREAKLOOP, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ - /************************************************************************** - * wodGetDevCaps [internal] - */ -@@ -88,6 +961,122 @@ static DWORD wodGetDevCaps(DWORD wDevID, LPWAVEOUTCAPSW lpCaps, DWORD dwSize) { - } - - /************************************************************************** -+ * wodGetVolume [internal] -+ */ -+static DWORD wodGetVolume(WORD wDevID, LPDWORD lpdwVol) { -+ DWORD wleft, wright; -+ WINE_WAVEDEV* wdo; -+ -+ TRACE("(%u, %p);\n", wDevID, lpdwVol); -+ -+ if (wDevID >= PULSE_WodNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpdwVol == NULL) -+ return MMSYSERR_NOTENABLED; -+ -+ wdo = &WOutDev[wDevID]; -+ -+ wleft=(long int)(pa_sw_volume_to_linear(wdo->left_vol)*0xFFFFl); -+ wright=(long int)(pa_sw_volume_to_linear(wdo->right_vol)*0xFFFFl); -+ -+ if (wleft > 0xFFFFl) -+ wleft = 0xFFFFl; -+ if (wright > 0xFFFFl) -+ wright = 0xFFFFl; -+ -+ *lpdwVol = (WORD)wleft + (WORD)(wright << 16); -+ -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodSetVolume [internal] -+ */ -+static DWORD wodSetVolume(WORD wDevID, DWORD dwParam1) { -+ WINE_WAVEDEV *wdo; -+ WINE_WAVEINST *current; -+ pa_operation *o; -+ DWORD x; -+ -+ TRACE("(%u, %08X);\n", wDevID, dwParam1); -+ -+ if (wDevID >= PULSE_WodNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ wdo = &WOutDev[wDevID]; -+ -+ wdo->left_vol = pa_sw_volume_from_linear((double)LOWORD(dwParam1)/0xFFFFl); -+ wdo->right_vol = pa_sw_volume_from_linear((double)HIWORD(dwParam1)/0xFFFFl); -+ -+ /* Windows assumes that this volume is for the entire device, so we have to -+ * hunt down all current streams of the device and set their volumes. -+ * Streams which are not stereo (channels!=2) don't pan correctly. */ -+ for (x = 0; (current = wdo->instance[x]); x++) { -+ switch (current->sample_spec.channels) { -+ case 2: -+ current->volume.channels = 2; -+ current->volume.values[0] = wdo->left_vol; -+ current->volume.values[1] = wdo->right_vol; -+ break; -+ case 1: -+ current->volume.channels = 1; -+ current->volume.values[0] = (wdo->left_vol + wdo->right_vol)/2; /* Is this right? */ -+ break; -+ default: -+ /* FIXME How does more than stereo work? */ -+ pa_cvolume_set(¤t->volume, current->sample_spec.channels, (wdo->left_vol + wdo->right_vol)/2); -+ } -+ -+ if (!current->stream || -+ !PULSE_context || -+ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || -+ pa_stream_get_state(current->stream) != PA_STREAM_READY || -+ !pa_cvolume_valid(¤t->volume)) -+ continue; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if ((o = pa_context_set_sink_input_volume(PULSE_context, -+ pa_stream_get_index(current->stream), ¤t->volume, -+ PULSE_context_success_callback, current))) -+ PULSE_wait_for_operation(o, current); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodRestart [internal] -+ */ -+static DWORD wodRestart(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (wwo->state == WINE_WS_PAUSED) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESTARTING, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodReset [internal] -+ */ -+static DWORD wodReset(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESETTING, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** - * wodDevInterfaceSize [internal] - */ - static DWORD wodDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { -@@ -124,12 +1113,16 @@ static DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc) { - strcpy(desc->szDrvname, "winepulse.drv"); - return MMSYSERR_NOERROR; - } -+ - /************************************************************************** - * wodMessage (WINEPULSE.@) - */ - DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, - DWORD dwParam1, DWORD dwParam2) { -- -+/* -+ TRACE("(%u, %s, %08X, %08X, %08X);\n", -+ wDevID, PULSE_getMessage(wMsg), dwUser, dwParam1, dwParam2); -+*/ - switch (wMsg) { - case DRVM_INIT: - case DRVM_EXIT: -@@ -137,12 +1130,12 @@ DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, - case DRVM_DISABLE: - /* FIXME: Pretend this is supported */ - return 0; -- case WODM_OPEN: return MMSYSERR_NOTSUPPORTED; -- case WODM_CLOSE: return MMSYSERR_NOTSUPPORTED; -- case WODM_WRITE: return MMSYSERR_NOTSUPPORTED; -- case WODM_PAUSE: return MMSYSERR_NOTSUPPORTED; -- case WODM_GETPOS: return MMSYSERR_NOTSUPPORTED; -- case WODM_BREAKLOOP: return MMSYSERR_NOTSUPPORTED; -+ case WODM_OPEN: return wodOpen (wDevID, (LPDWORD)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); -+ case WODM_CLOSE: return wodClose (wDevID, (WINE_WAVEINST*)dwUser); -+ case WODM_WRITE: return wodWrite ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); -+ case WODM_PAUSE: return wodPause ((WINE_WAVEINST*)dwUser); -+ case WODM_GETPOS: return wodGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); -+ case WODM_BREAKLOOP: return wodBreakLoop ((WINE_WAVEINST*)dwUser); - case WODM_PREPARE: return MMSYSERR_NOTSUPPORTED; - case WODM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; - case WODM_GETDEVCAPS: return wodGetDevCaps (wDevID, (LPWAVEOUTCAPSW)dwParam1, dwParam2); -@@ -151,13 +1144,13 @@ DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, - case WODM_SETPITCH: return MMSYSERR_NOTSUPPORTED; - case WODM_GETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* support if theoretically possible */ - case WODM_SETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* since pulseaudio 0.9.8 */ -- case WODM_GETVOLUME: return MMSYSERR_NOTSUPPORTED; -- case WODM_SETVOLUME: return MMSYSERR_NOTSUPPORTED; -- case WODM_RESTART: return MMSYSERR_NOTSUPPORTED; -- case WODM_RESET: return MMSYSERR_NOTSUPPORTED; -+ case WODM_GETVOLUME: return wodGetVolume (wDevID, (LPDWORD)dwParam1); -+ case WODM_SETVOLUME: return wodSetVolume (wDevID, dwParam1); -+ case WODM_RESTART: return wodRestart ((WINE_WAVEINST*)dwUser); -+ case WODM_RESET: return wodReset ((WINE_WAVEINST*)dwUser); - case DRV_QUERYDEVICEINTERFACESIZE: return wodDevInterfaceSize (wDevID, (LPDWORD)dwParam1); - case DRV_QUERYDEVICEINTERFACE: return wodDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); -- case DRV_QUERYDSOUNDIFACE: return wodDsCreate (wDevID, (PIDSDRIVER*)dwParam1); -+ case DRV_QUERYDSOUNDIFACE: return wodDsCreate (wDevID, (PIDSDRIVER*)dwParam1); - case DRV_QUERYDSOUNDDESC: return wodDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); - default: - FIXME("unknown message %d!\n", wMsg); -diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h -index 277221a..64778ca 100644 ---- a/dlls/winepulse.drv/winepulse.h -+++ b/dlls/winepulse.drv/winepulse.h -@@ -62,7 +62,7 @@ - - #define PULSE_MAX_STREAM_INSTANCES 16 /* Sixteen streams per device should be good enough? */ - --/* events to be send to device */ -+/* events to be sent to device */ - enum win_wm_message { - WINE_WM_PAUSING = WM_USER + 1, WINE_WM_RESTARTING, WINE_WM_RESETTING, WINE_WM_HEADER, - WINE_WM_BREAKLOOP, WINE_WM_CLOSING, WINE_WM_STARTING, WINE_WM_STOPPING, WINE_WM_XRUN, WINE_WM_FEED -@@ -104,7 +104,7 @@ typedef struct { - - /* WavaHdr information */ - LPWAVEHDR lpQueuePtr; /* start of queued WAVEHDRs (waiting to be notified) */ -- LPWAVEHDR lpPlayPtr; /* start of not yet fully played buffers */ -+ LPWAVEHDR lpPlayPtr; /* start of not yet fully written buffers */ - DWORD dwPartialOffset; /* Offset of not yet written bytes in lpPlayPtr */ - LPWAVEHDR lpLoopPtr; /* pointer of first buffer in loop, if any */ - DWORD dwLoops; /* private copy of loop counter */ -@@ -151,13 +151,11 @@ DWORD PULSE_WodNumDevs; - DWORD PULSE_WidNumDevs; - - /* pulse.c */ --void PULSE_set_buffer_attr_callback(pa_stream *stream, int success, void *userdata); - void PULSE_wait_for_operation(pa_operation *o, WINE_WAVEINST *ww); - void PULSE_stream_success_callback(pa_stream *s, int success, void *userdata); - void PULSE_stream_state_callback(pa_stream *s, void *userdata); - void PULSE_context_success_callback(pa_context *c, int success, void *userdata); - void PULSE_stream_request_callback(pa_stream *s, size_t n, void *userdata); --DWORD PULSE_bytes_to_mmtime(LPMMTIME lpTime, DWORD position, pa_sample_spec *ss); - BOOL PULSE_setupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss); - int PULSE_InitRingMessage(PULSE_MSG_RING* omr); - int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr); - diff --git a/wine-pulseaudio-winecfg.patch b/wine-pulseaudio-winecfg.patch deleted file mode 100644 index 6c23ae9..0000000 --- a/wine-pulseaudio-winecfg.patch +++ /dev/null @@ -1,49 +0,0 @@ -diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc -index 1a07d71..7f45434 100644 ---- a/programs/winecfg/En.rc -+++ b/programs/winecfg/En.rc -@@ -276,6 +276,7 @@ BEGIN - IDS_DRIVER_NAS "NAS Driver" - IDS_DRIVER_AUDIOIO "Audio IO (Solaris) Driver" - IDS_DRIVER_COREAUDIO "CoreAudio Driver" -+ IDS_DRIVER_PULSE "PulseAudio Driver" - IDS_OPEN_DRIVER_ERROR "Couldn't open %s!" - IDS_SOUNDDRIVERS "Sound Drivers" - IDS_DEVICES_WAVEOUT "Wave Out Devices" -diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c -index 3ce0e25..b716d25 100644 ---- a/programs/winecfg/audio.c -+++ b/programs/winecfg/audio.c -@@ -95,6 +95,7 @@ static const AUDIO_DRIVER sAudioDrivers[] = { - {IDS_DRIVER_NAS, "nas"}, - {IDS_DRIVER_ESOUND, "esd"}, - {IDS_DRIVER_AUDIOIO, "audioio"}, -+ {IDS_DRIVER_PULSE, "pulse"}, - {0, ""} - }; - -diff --git a/programs/winecfg/libraries.c b/programs/winecfg/libraries.c -index 92dd970..42b6e41 100644 ---- a/programs/winecfg/libraries.c -+++ b/programs/winecfg/libraries.c -@@ -79,6 +79,7 @@ static const char * const builtin_only[] = - "wineoss.drv", - "wineps", - "wineps.drv", -+ "winepulse.drv", - "winex11.drv", - "winmm", - "wintab32", -diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h -index 2182c29..b8f07fb 100644 ---- a/programs/winecfg/resource.h -+++ b/programs/winecfg/resource.h -@@ -180,6 +180,7 @@ - #define IDS_ACCEL_BASIC 8302 - #define IDS_ACCEL_EMULATION 8303 - #define IDS_DRIVER_ALSA 8304 -+#define IDS_DRIVER_PULSE 8305 - - #define IDS_DRIVER_ESOUND 8306 - #define IDS_DRIVER_OSS 8307 - diff --git a/wine-pulseaudio.patch b/wine-pulseaudio.patch deleted file mode 100644 index 7320c17..0000000 --- a/wine-pulseaudio.patch +++ /dev/null @@ -1,1188 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index 91850de..b21be92 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -55,6 +55,7 @@ AC_ARG_WITH(oss, AS_HELP_STRING([--without-oss],[do not use the OSS sound - [if test "x$withval" = "xno"; then ac_cv_header_soundcard_h=no; ac_cv_header_sys_soundcard_h=no; ac_cv_header_machine_soundcard_h=no; fi]) - AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), - [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) -+AC_ARG_WITH(pulse, AC_HELP_STRING([--without-pulse],[do not use PulseAudio sound support])) - AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) - AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), - [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) -@@ -1117,6 +1118,29 @@ then - CFLAGS="$save_CFLAGS" - fi - -+dnl **** Check for PulseAudio **** -+if test "x$with_pulse" != "xno"; then -+ if test "$PKG_CONFIG" != "false"; then -+ AC_MSG_CHECKING([for pulseaudio >= 0.9.8]) -+ if "$PKG_CONFIG" --atleast-version=0.9.8 libpulse; then -+ have_pulseaudio="yes" -+ else -+ have_pulseaudio="no" -+ fi -+ AC_MSG_RESULT([$have_pulseaudio]) -+ if test x"$have_pulseaudio" = xyes; then -+ if "$PKG_CONFIG" --atleast-version=0.9.11 libpulse; then -+ AC_DEFINE([HAVE_PULSEAUDIO_0_9_11], 1, [define this if pulseaudio is at least version 0.9.11]) -+ else -+ AC_DEFINE([HAVE_PULSEAUDIO_0_9_11], 0, [define this if pulseaudio is at least version 0.9.11]) -+ fi -+ ac_pulse_libs=`$PKG_CONFIG --libs libpulse` -+ AC_DEFINE([HAVE_PULSEAUDIO], 1, [define this if you have pulseaudio]) -+ AC_SUBST(PULSELIBS, "$ac_pulse_libs") -+ fi -+ fi -+fi -+ - dnl **** Check for ALSA 1.x **** - AC_SUBST(ALSALIBS,"") - if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" -@@ -1222,7 +1246,7 @@ dnl **** Check for libodbc **** - WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) - - dnl **** Check for any sound system **** --if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$ac_cv_lib_soname_jack" = "x" -a \ -+if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$PULSELIBS$ac_cv_lib_soname_jack" = "x" -a \ - "$ac_cv_header_sys_soundcard_h" != "yes" -a \ - "$ac_cv_header_machine_soundcard_h" != "yes" -a \ - "$ac_cv_header_soundcard_h" != "yes" -a \ -@@ -2064,6 +2088,7 @@ WINE_CONFIG_MAKEFILE([dlls/winemp3.acm/Makefile],[dlls/Makedll.rules],[dlls],[AL - WINE_CONFIG_MAKEFILE([dlls/winenas.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/wineoss.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/wineps.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) -+WINE_CONFIG_MAKEFILE([dlls/winepulse.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/winequartz.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/winex11.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/wing32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) -diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in -new file mode 100644 -index 0000000..52a6671 ---- /dev/null -+++ b/dlls/winepulse.drv/Makefile.in -@@ -0,0 +1,15 @@ -+TOPSRCDIR = @top_srcdir@ -+TOPOBJDIR = ../.. -+SRCDIR = @srcdir@ -+VPATH = @srcdir@ -+MODULE = winepulse.drv -+IMPORTS = dxguid uuid winmm user32 advapi32 kernel32 -+EXTRALIBS = @PULSELIBS@ -+ -+C_SRCS = \ -+ waveout.c \ -+ pulse.c -+ -+@MAKE_DLL_RULES@ -+ -+@DEPENDENCIES@ # everything below this line is overwritten by make depend -diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c -new file mode 100644 -index 0000000..3ef6a03 ---- /dev/null -+++ b/dlls/winepulse.drv/pulse.c -@@ -0,0 +1,732 @@ -+/* -+ * Wine Driver for PulseAudio -+ * http://pulseaudio.org/ -+ * -+ * Copyright 2008 Arthur Taylor -+ * -+ * Contains code from other wine sound drivers. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wingdi.h" -+#include "winuser.h" -+#include "mmddk.h" -+ -+#ifdef HAVE_UNISTD_H -+# include -+#endif -+#include -+ -+#ifdef HAVE_PULSEAUDIO -+ -+#include "wine/unicode.h" -+#include "wine/debug.h" -+#include "wine/library.h" -+ -+#include -+#include -+WINE_DEFAULT_DEBUG_CHANNEL(wave); -+ -+/* -+ * - Need to subscribe to sink/source events and keep the WInDev and WOutDev -+ * structures updated -+ */ -+ -+/* These strings used only for tracing */ -+const char * PULSE_getCmdString(enum win_wm_message msg) { -+ static char unknown[32]; -+#define MSG_TO_STR(x) case x: return #x -+ switch(msg) { -+ MSG_TO_STR(WINE_WM_PAUSING); -+ MSG_TO_STR(WINE_WM_RESTARTING); -+ MSG_TO_STR(WINE_WM_RESETTING); -+ MSG_TO_STR(WINE_WM_HEADER); -+ MSG_TO_STR(WINE_WM_BREAKLOOP); -+ MSG_TO_STR(WINE_WM_CLOSING); -+ MSG_TO_STR(WINE_WM_STARTING); -+ MSG_TO_STR(WINE_WM_STOPPING); -+ MSG_TO_STR(WINE_WM_XRUN); -+ MSG_TO_STR(WINE_WM_FEED); -+ } -+#undef MSG_TO_STR -+ sprintf(unknown, "UNKNOWN(0x%08x)", msg); -+ return unknown; -+} -+ -+/*======================================================================* -+ * Ring Buffer Functions - copied from winealsa.drv * -+ *======================================================================*/ -+ -+/* unless someone makes a wineserver kernel module, Unix pipes are faster than win32 events */ -+#define USE_PIPE_SYNC -+ -+#ifdef USE_PIPE_SYNC -+#define INIT_OMR(omr) do { if (pipe(omr->msg_pipe) < 0) { omr->msg_pipe[0] = omr->msg_pipe[1] = -1; } } while (0) -+#define CLOSE_OMR(omr) do { close(omr->msg_pipe[0]); close(omr->msg_pipe[1]); } while (0) -+#define SIGNAL_OMR(omr) do { int x = 0; write((omr)->msg_pipe[1], &x, sizeof(x)); } while (0) -+#define CLEAR_OMR(omr) do { int x = 0; read((omr)->msg_pipe[0], &x, sizeof(x)); } while (0) -+#define RESET_OMR(omr) do { } while (0) -+#define WAIT_OMR(omr, sleep) \ -+ do { struct pollfd pfd; pfd.fd = (omr)->msg_pipe[0]; \ -+ pfd.events = POLLIN; poll(&pfd, 1, sleep); } while (0) -+#else -+#define INIT_OMR(omr) do { omr->msg_event = CreateEventW(NULL, FALSE, FALSE, NULL); } while (0) -+#define CLOSE_OMR(omr) do { CloseHandle(omr->msg_event); } while (0) -+#define SIGNAL_OMR(omr) do { SetEvent((omr)->msg_event); } while (0) -+#define CLEAR_OMR(omr) do { } while (0) -+#define RESET_OMR(omr) do { ResetEvent((omr)->msg_event); } while (0) -+#define WAIT_OMR(omr, sleep) \ -+ do { WaitForSingleObject((omr)->msg_event, sleep); } while (0) -+#endif -+ -+#define PULSE_RING_BUFFER_INCREMENT 64 -+ -+/****************************************************************** -+ * PULSE_InitRingMessage -+ * -+ * Initialize the ring of messages for passing between driver's caller -+ * and playback/record thread -+ */ -+int PULSE_InitRingMessage(PULSE_MSG_RING* omr) -+{ -+ omr->msg_toget = 0; -+ omr->msg_tosave = 0; -+ INIT_OMR(omr); -+ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; -+ omr->messages = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,omr->ring_buffer_size * sizeof(PULSE_MSG)); -+ -+ InitializeCriticalSection(&omr->msg_crst); -+ omr->msg_crst.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": PULSE_MSG_RING.msg_crst"); -+ return 0; -+} -+ -+/****************************************************************** -+ * PULSE_DestroyRingMessage -+ * -+ */ -+int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr) -+{ -+ CLOSE_OMR(omr); -+ HeapFree(GetProcessHeap(),0,omr->messages); -+ omr->messages = NULL; -+ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; -+ omr->msg_crst.DebugInfo->Spare[0] = 0; -+ DeleteCriticalSection(&omr->msg_crst); -+ return 0; -+} -+/****************************************************************** -+ * PULSE_ResetRingMessage -+ * -+ */ -+void PULSE_ResetRingMessage(PULSE_MSG_RING* omr) -+{ -+ RESET_OMR(omr); -+} -+ -+/****************************************************************** -+ * PULSE_WaitRingMessage -+ * -+ */ -+void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep) -+{ -+ WAIT_OMR(omr, sleep); -+} -+ -+/****************************************************************** -+ * PULSE_AddRingMessage -+ * -+ * Inserts a new message into the ring (should be called from DriverProc derived routines) -+ */ -+int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait) -+{ -+ HANDLE hEvent = INVALID_HANDLE_VALUE; -+ -+ EnterCriticalSection(&omr->msg_crst); -+ if ((omr->msg_toget == ((omr->msg_tosave + 1) % omr->ring_buffer_size))) -+ { -+ int old_ring_buffer_size = omr->ring_buffer_size; -+ omr->ring_buffer_size += PULSE_RING_BUFFER_INCREMENT; -+ omr->messages = HeapReAlloc(GetProcessHeap(),0,omr->messages, omr->ring_buffer_size * sizeof(PULSE_MSG)); -+ /* Now we need to rearrange the ring buffer so that the new -+ buffers just allocated are in between omr->msg_tosave and -+ omr->msg_toget. -+ */ -+ if (omr->msg_tosave < omr->msg_toget) -+ { -+ memmove(&(omr->messages[omr->msg_toget + PULSE_RING_BUFFER_INCREMENT]), -+ &(omr->messages[omr->msg_toget]), -+ sizeof(PULSE_MSG)*(old_ring_buffer_size - omr->msg_toget) -+ ); -+ omr->msg_toget += PULSE_RING_BUFFER_INCREMENT; -+ } -+ } -+ if (wait) -+ { -+ hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); -+ if (hEvent == INVALID_HANDLE_VALUE) -+ { -+ ERR("can't create event !?\n"); -+ LeaveCriticalSection(&omr->msg_crst); -+ return 0; -+ } -+ if (omr->msg_toget != omr->msg_tosave && omr->messages[omr->msg_toget].msg != WINE_WM_HEADER) -+ FIXME("two fast messages in the queue!!!!\n"); /* toget = %d(%s), tosave=%d(%s)\n", -+ omr->msg_toget,ALSA_getCmdString(omr->messages[omr->msg_toget].msg), -+ omr->msg_tosave,ALSA_getCmdString(omr->messages[omr->msg_tosave].msg)); */ -+ -+ /* fast messages have to be added at the start of the queue */ -+ omr->msg_toget = (omr->msg_toget + omr->ring_buffer_size - 1) % omr->ring_buffer_size; -+ -+ omr->messages[omr->msg_toget].msg = msg; -+ omr->messages[omr->msg_toget].param = param; -+ omr->messages[omr->msg_toget].hEvent = hEvent; -+ } -+ else -+ { -+ omr->messages[omr->msg_tosave].msg = msg; -+ omr->messages[omr->msg_tosave].param = param; -+ omr->messages[omr->msg_tosave].hEvent = INVALID_HANDLE_VALUE; -+ omr->msg_tosave = (omr->msg_tosave + 1) % omr->ring_buffer_size; -+ } -+ LeaveCriticalSection(&omr->msg_crst); -+ /* signal a new message */ -+ SIGNAL_OMR(omr); -+ if (wait) -+ { -+ /* wait for playback/record thread to have processed the message */ -+ WaitForSingleObject(hEvent, INFINITE); -+ CloseHandle(hEvent); -+ } -+ return 1; -+} -+ -+/****************************************************************** -+ * PULSE_RetrieveRingMessage -+ * -+ * Get a message from the ring. Should be called by the playback/record thread. -+ */ -+int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, -+ enum win_wm_message *msg, DWORD *param, HANDLE *hEvent) -+{ -+ EnterCriticalSection(&omr->msg_crst); -+ -+ if (omr->msg_toget == omr->msg_tosave) /* buffer empty ? */ -+ { -+ LeaveCriticalSection(&omr->msg_crst); -+ return 0; -+ } -+ -+ *msg = omr->messages[omr->msg_toget].msg; -+ omr->messages[omr->msg_toget].msg = 0; -+ *param = omr->messages[omr->msg_toget].param; -+ *hEvent = omr->messages[omr->msg_toget].hEvent; -+ omr->msg_toget = (omr->msg_toget + 1) % omr->ring_buffer_size; -+ CLEAR_OMR(omr); -+ LeaveCriticalSection(&omr->msg_crst); -+ return 1; -+} -+ -+/************************************************************************** -+ * Utility Functions -+ */ -+ -+/****************************************************************** -+ * PULSE_free_wavedevs [internal] -+ * -+ * Free and deallocated all the wavedevs in the array of size allocated -+ */ -+static void PULSE_free_wavedevs(WINE_WAVEDEV *wd, DWORD *allocated) { -+ DWORD y, x = *allocated; -+ WINE_WAVEDEV *current_device; -+ WINE_WAVEINST *current_instance; -+ -+ TRACE("%i\n", *allocated); -+ -+ for (; x>0; ) { -+ current_device = &wd[--x]; -+ -+ pa_xfree(current_device->device_name); -+ -+ for (y = 0; y < PULSE_MAX_STREAM_INSTANCES; y++) { -+ if ((current_instance = current_device->instance[y])) { -+ if (current_instance->hThread != INVALID_HANDLE_VALUE && current_instance->msgRing.messages) { -+ PULSE_AddRingMessage(¤t_instance->msgRing, WINE_WM_CLOSING, 1, TRUE); -+ if (current_instance->hThread != INVALID_HANDLE_VALUE) { -+ /* Overkill? */ -+ TerminateThread(current_instance->hThread, 1); -+ current_instance->hThread = INVALID_HANDLE_VALUE; -+ } -+ if (current_instance->stream) -+ pa_stream_unref(current_instance->stream); -+ PULSE_DestroyRingMessage(¤t_instance->msgRing); -+ current_device->instance[current_instance->instance_ref] = NULL; -+ if (current_instance->buffer_attr) -+ pa_xfree(current_instance->buffer_attr); -+ HeapFree(GetProcessHeap(), 0, current_instance); -+ } -+ } -+ } -+ } -+ -+ HeapFree(GetProcessHeap(), 0, wd); -+ *allocated = 0; -+} -+ -+/****************************************************************** -+ * PULSE_wait_for_operation -+ * -+ * Waits for pa operations to complete, ensures success and dereferences the -+ * operations. -+ */ -+void PULSE_wait_for_operation(pa_operation *o, WINE_WAVEINST *wd) { -+ assert(o && wd); -+ -+ TRACE("Waiting..."); -+ -+ for (;;) { -+ -+ if (!wd->stream || -+ !PULSE_context || -+ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || -+ pa_stream_get_state(wd->stream) != PA_STREAM_READY) { -+ wd->state = WINE_WS_FAILED; -+ if (wd->hThread != INVALID_HANDLE_VALUE && wd->msgRing.messages) -+ PULSE_AddRingMessage(&wd->msgRing, WINE_WM_CLOSING, 1, FALSE); -+ break; -+ } -+ -+ if (pa_operation_get_state(o) != PA_OPERATION_RUNNING) -+ break; -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ TRACE(" done\n"); -+ pa_operation_unref(o); -+} -+ -+/************************************************************************** -+ * Common Callbacks -+ */ -+ -+/****************************************************************** -+ * PULSE_stream_state_callback -+ * -+ * Called by pulse whenever the state of the stream changes. -+ */ -+void PULSE_stream_state_callback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wd = (WINE_WAVEINST*)userdata; -+ assert(s && wd); -+ -+ switch (pa_stream_get_state(s)) { -+ -+ case PA_STREAM_READY: -+ TRACE("Stream ready\n"); -+ break; -+ case PA_STREAM_TERMINATED: -+ TRACE("Stream terminated\n"); -+ break; -+ case PA_STREAM_FAILED: -+ WARN("Stream failed!\n"); -+ wd->state = WINE_WS_FAILED; -+ if (wd->hThread != INVALID_HANDLE_VALUE && wd->msgRing.messages) -+ PULSE_AddRingMessage(&wd->msgRing, WINE_WM_CLOSING, 1, FALSE); -+ break; -+ case PA_STREAM_UNCONNECTED: -+ case PA_STREAM_CREATING: -+ return; -+ } -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_stream_sucess_callback -+ */ -+void PULSE_stream_success_callback(pa_stream *s, int success, void *userdata) { -+ if (!success) -+ WARN("Stream operation failed: %s\n", pa_strerror(pa_context_errno(PULSE_context))); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_context_success_callback -+ */ -+void PULSE_context_success_callback(pa_context *c, int success, void *userdata) { -+ if (!success) -+ WARN("Context operation failed: %s\n", pa_strerror(pa_context_errno(c))); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * Connection management and sink / source management. -+ */ -+ -+/************************************************************************** -+ * PULSE_context_state_callback [internal] -+ */ -+static void PULSE_context_state_callback(pa_context *c, void *userdata) { -+ assert(c); -+ -+ switch (pa_context_get_state(c)) { -+ case PA_CONTEXT_CONNECTING: -+ case PA_CONTEXT_AUTHORIZING: -+ case PA_CONTEXT_SETTING_NAME: -+ break; -+ -+ case PA_CONTEXT_READY: -+ case PA_CONTEXT_TERMINATED: -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ break; -+ -+ case PA_CONTEXT_FAILED: -+ default: -+ ERR("Conneciton failure: %s\n", pa_strerror(pa_context_errno(c))); -+ -+ if (PULSE_context) { -+ pa_context_disconnect(PULSE_context); -+ } -+ -+ PULSE_free_wavedevs(WOutDev, &PULSE_WodNumDevs); -+ PULSE_free_wavedevs(WInDev, &PULSE_WidNumDevs); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ } -+} -+ -+/************************************************************************** -+ * PULSE_add_input_device [internal] -+ * -+ * Creates or adds a device to WInDev based on the pa_source_info, or if -+ * pa_source_info is null, a default. -+ */ -+static void PULSE_add_input_device(pa_source_info *i, DWORD *allocated) { -+ WINE_WAVEDEV *wwi; -+ const char *description; -+ int x; -+ -+ if (WInDev) -+ wwi = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * ((*allocated)+1)); -+ else -+ wwi = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); -+ -+ if (!wwi) -+ return; -+ -+ WInDev = wwi; -+ wwi = &WInDev[(*allocated)++]; -+ -+ if (i) { -+ description = i->description; -+ wwi->device_name = pa_xstrdup(i->name); -+ strcpy(wwi->interface_name, "winepulse: "); -+ memcpy(wwi->interface_name + strlen(wwi->interface_name), -+ i->name, min(strlen(i->name), -+ sizeof(wwi->interface_name) - strlen("winepulse: "))); -+ } else { -+ description = pa_xstrdup("PulseAudio Server Default"); -+ wwi->device_name = NULL; -+ strcpy(wwi->interface_name, "winepulse: default"); -+ } -+ -+ memset(wwi, 0, sizeof(WINE_WAVEDEV)); -+ memset(&(wwi->caps.in), 0, sizeof(wwi->caps.in)); -+ MultiByteToWideChar(CP_ACP, 0, description, -1, wwi->caps.in.szPname, sizeof(wwi->caps.in.szPname)/sizeof(WCHAR)); -+ wwi->caps.in.szPname[sizeof(wwi->caps.in.szPname)/sizeof(WCHAR) - 1] = '\0'; -+ wwi->caps.in.wMid = MM_CREATIVE; -+ wwi->caps.in.wPid = MM_CREATIVE_SBP16_WAVEOUT; -+ wwi->caps.in.vDriverVersion = 0x0100; -+ wwi->caps.in.wChannels = 2; -+ wwi->caps.in.dwFormats |= -+ WAVE_FORMAT_1M08 | /* Mono 11025Hz 8-bit */ -+ WAVE_FORMAT_1M16 | /* Mono 11025Hz 16-bit */ -+ WAVE_FORMAT_1S08 | /* Stereo 11025Hz 8-bit */ -+ WAVE_FORMAT_1S16 | /* Stereo 11025Hz 16-bit */ -+ WAVE_FORMAT_2M08 | /* Mono 22050Hz 8-bit */ -+ WAVE_FORMAT_2M16 | /* Mono 22050Hz 16-bit */ -+ WAVE_FORMAT_2S08 | /* Stereo 22050Hz 8-bit */ -+ WAVE_FORMAT_2S16 | /* Stereo 22050Hz 16-bit */ -+ WAVE_FORMAT_4M08 | /* Mono 44100Hz 8-bit */ -+ WAVE_FORMAT_4M16 | /* Mono 44100Hz 16-bit */ -+ WAVE_FORMAT_4S08 | /* Stereo 44100Hz 8-bit */ -+ WAVE_FORMAT_4S16 | /* Stereo 44100Hz 16-bit */ -+ WAVE_FORMAT_48M08 | /* Mono 48000Hz 8-bit */ -+ WAVE_FORMAT_48S08 | /* Stereo 48000Hz 8-bit */ -+ WAVE_FORMAT_48M16 | /* Mono 48000Hz 16-bit */ -+ WAVE_FORMAT_48S16 | /* Stereo 48000Hz 16-bit */ -+ WAVE_FORMAT_96M08 | /* Mono 96000Hz 8-bit */ -+ WAVE_FORMAT_96S08 | /* Stereo 96000Hz 8-bit */ -+ WAVE_FORMAT_96M16 | /* Mono 96000Hz 16-bit */ -+ WAVE_FORMAT_96S16 ; /* Stereo 96000Hz 16-bit */ -+ -+ /* NULL out the instance pointers */ -+ for (x = 0; x < PULSE_MAX_STREAM_INSTANCES; x++) wwi->instance[x] = NULL; -+} -+ -+/************************************************************************** -+ * PULSE_add_output_device [internal] -+ * -+ * Creates or adds a device to WOutDev based on the pa_sinl_info, or if -+ * pa_sink_info is null, a default. -+ */ -+static void PULSE_add_output_device(pa_sink_info *i, DWORD *allocated) { -+ WINE_WAVEDEV *wwo; -+ const char *description; -+ int x; -+ -+ if (WOutDev) -+ wwo = HeapReAlloc(GetProcessHeap(), 0, WOutDev, sizeof(WINE_WAVEDEV) * ((*allocated)+1)); -+ else -+ wwo = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); -+ -+ if (!wwo) -+ return; -+ -+ WOutDev = wwo; -+ wwo = &WOutDev[(*allocated)++]; -+ -+ if (i) { -+ description = i->description; -+ wwo->device_name = pa_xstrdup(i->name); -+ strcpy(wwo->interface_name, "winepulse: "); -+ memcpy(wwo->interface_name + strlen(wwo->interface_name), -+ wwo->device_name, min(strlen(wwo->device_name), -+ sizeof(wwo->interface_name) - strlen("winepulse: "))); -+ } else { -+ description = pa_xstrdup("PulseAudio Server Default"); -+ wwo->device_name = NULL; -+ strcpy(wwo->interface_name, "winepulse: default"); -+ } -+ -+ memset(wwo, 0, sizeof(WINE_WAVEDEV)); -+ memset(&(wwo->caps.out), 0, sizeof(wwo->caps.out)); -+ MultiByteToWideChar(CP_ACP, 0, description, -1, wwo->caps.out.szPname, sizeof(wwo->caps.out.szPname)/sizeof(WCHAR)); -+ wwo->caps.out.szPname[sizeof(wwo->caps.out.szPname)/sizeof(WCHAR) - 1] = '\0'; -+ wwo->caps.out.wMid = MM_CREATIVE; -+ wwo->caps.out.wPid = MM_CREATIVE_SBP16_WAVEOUT; -+ wwo->caps.out.vDriverVersion = 0x0100; -+ wwo->caps.out.dwSupport |= WAVECAPS_VOLUME | WAVECAPS_LRVOLUME; -+ wwo->caps.out.wChannels = 2; -+ wwo->caps.out.dwFormats |= -+ WAVE_FORMAT_1M08 | /* Mono 11025Hz 8-bit */ -+ WAVE_FORMAT_1M16 | /* Mono 11025Hz 16-bit */ -+ WAVE_FORMAT_1S08 | /* Stereo 11025Hz 8-bit */ -+ WAVE_FORMAT_1S16 | /* Stereo 11025Hz 16-bit */ -+ WAVE_FORMAT_2M08 | /* Mono 22050Hz 8-bit */ -+ WAVE_FORMAT_2M16 | /* Mono 22050Hz 16-bit */ -+ WAVE_FORMAT_2S08 | /* Stereo 22050Hz 8-bit */ -+ WAVE_FORMAT_2S16 | /* Stereo 22050Hz 16-bit */ -+ WAVE_FORMAT_4M08 | /* Mono 44100Hz 8-bit */ -+ WAVE_FORMAT_4M16 | /* Mono 44100Hz 16-bit */ -+ WAVE_FORMAT_4S08 | /* Stereo 44100Hz 8-bit */ -+ WAVE_FORMAT_4S16 | /* Stereo 44100Hz 16-bit */ -+ WAVE_FORMAT_48M08 | /* Mono 48000Hz 8-bit */ -+ WAVE_FORMAT_48S08 | /* Stereo 48000Hz 8-bit */ -+ WAVE_FORMAT_48M16 | /* Mono 48000Hz 16-bit */ -+ WAVE_FORMAT_48S16 | /* Stereo 48000Hz 16-bit */ -+ WAVE_FORMAT_96M08 | /* Mono 96000Hz 8-bit */ -+ WAVE_FORMAT_96S08 | /* Stereo 96000Hz 8-bit */ -+ WAVE_FORMAT_96M16 | /* Mono 96000HZ 16-bit */ -+ WAVE_FORMAT_96S16 ; /* Stereo 96000Hz 16-bit */ -+ -+ wwo->left_vol = PA_VOLUME_NORM; -+ wwo->right_vol = PA_VOLUME_NORM; -+ -+ /* NULL out the instance pointers */ -+ for (x = 0; x < PULSE_MAX_STREAM_INSTANCES; x++) wwo->instance[x] = NULL; -+} -+ -+/************************************************************************** -+ * PULSE_source_info_callback [internal] -+ * -+ * Calls PULSE_add_input_device to add the source to the list of devices -+ */ -+static void PULSE_source_info_callback(pa_context *c, pa_source_info *i, int eol, void *userdata) { -+ assert(c); -+ if (!eol && i) -+ if (i->monitor_of_sink == PA_INVALID_INDEX) /* For now only add non-montior sources */ -+ PULSE_add_input_device(i, (DWORD*)userdata); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_sink_info_callback [internal] -+ * -+ * Calls PULSE_add_output_device to add the sink to the list of devices -+ */ -+static void PULSE_sink_info_callback(pa_context *c, pa_sink_info *i, int eol, void *userdata) { -+ assert(c); -+ if (!eol && i) -+ PULSE_add_output_device(i, (DWORD*)userdata); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_WaveInit [internal] -+ * -+ * Connects to the pulseaudio server, tries to discover sinks and sources and -+ * allocates the WaveIn/WaveOut devices. -+ */ -+LONG PULSE_WaveInit(void) { -+ pa_operation *o = NULL; -+ DWORD allocated; -+ -+ WOutDev = NULL; -+ WInDev = NULL; -+ PULSE_WodNumDevs = 0; -+ PULSE_WidNumDevs = 0; -+ PULSE_context = NULL; -+ PULSE_ml = NULL; -+ -+ if (!(PULSE_ml = pa_threaded_mainloop_new())) { -+ WARN("Failed to create mainloop object."); -+ return -1; -+ } -+ -+ pa_threaded_mainloop_start(PULSE_ml); -+ -+ /* FIXME: better name? */ -+ PULSE_context = pa_context_new(pa_threaded_mainloop_get_api(PULSE_ml), "Wine Application"); -+ assert(PULSE_context); -+ -+ pa_context_set_state_callback(PULSE_context, PULSE_context_state_callback, NULL); -+ -+ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_UNCONNECTED) -+ return 0; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ -+ TRACE("Attempting to connect to pulseaudio server.\n"); -+ if (pa_context_connect(PULSE_context, NULL, 0, NULL) < 0) { -+ WARN("failed to connect context object %s\n", pa_strerror(pa_context_errno(PULSE_context))); -+ return -1; -+ } -+ -+ /* Wait for connection */ -+ for (;;) { -+ pa_context_state_t state = pa_context_get_state(PULSE_context); -+ -+ if (state == PA_CONTEXT_FAILED || state == PA_CONTEXT_TERMINATED) { -+ ERR("Failed to connect to pulseaudio server.\n"); -+ pa_context_unref(PULSE_context); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ pa_threaded_mainloop_stop(PULSE_ml); -+ pa_threaded_mainloop_free(PULSE_ml); -+ return -1; -+ } -+ -+ if (state == PA_CONTEXT_READY) { -+ TRACE("Connection succeeded!\n"); -+ break; -+ } -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ -+ /* Ask for all the sinks and create objects in the WOutDev array */ -+ allocated=0; -+ /* add a fake output (server default sink) */ -+ PULSE_add_output_device(NULL, &allocated); -+ o = pa_context_get_sink_info_list(PULSE_context, (pa_sink_info_cb_t)PULSE_sink_info_callback, &allocated); -+ assert(o); -+ while (pa_operation_get_state(o) != PA_OPERATION_DONE) -+ pa_threaded_mainloop_wait(PULSE_ml); -+ pa_operation_unref(o); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ TRACE("Allocated %i output device(s).\n",allocated); -+ PULSE_WodNumDevs=allocated; -+ if (PULSE_WodNumDevs == 1) /* Only the fake sink exists */ -+ PULSE_free_wavedevs(WOutDev, &PULSE_WodNumDevs); -+ -+ /* Repeate for all the sources */ -+ allocated=0; -+ /* add a fake input (server default source) */ -+ PULSE_add_input_device(NULL, &allocated); -+ pa_threaded_mainloop_lock(PULSE_ml); -+ o = pa_context_get_source_info_list(PULSE_context, (pa_source_info_cb_t)PULSE_source_info_callback, &allocated); -+ assert(o); -+ while (pa_operation_get_state(o) != PA_OPERATION_DONE) -+ pa_threaded_mainloop_wait(PULSE_ml); -+ pa_operation_unref(o); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ TRACE("Allocated %i input device(s).\n", allocated); -+ PULSE_WidNumDevs=allocated; -+ if (PULSE_WidNumDevs == 1) /* Only the fake source exists */ -+ PULSE_free_wavedevs(WInDev, &PULSE_WidNumDevs); -+ -+ return 1; -+} -+ -+/************************************************************************** -+ * PULSE_WaveClose [internal] -+ * -+ * Disconnect from the server, deallocated the WaveIn/WaveOut devices, stop and -+ * free the mainloop. -+ */ -+ -+LONG PULSE_WaveClose(void) { -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (PULSE_context) { -+ pa_context_disconnect(PULSE_context); -+ pa_context_unref(PULSE_context); -+ PULSE_context = NULL; -+ } -+ -+ PULSE_free_wavedevs(WOutDev, &PULSE_WodNumDevs); -+ PULSE_free_wavedevs(WInDev, &PULSE_WidNumDevs); -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ pa_threaded_mainloop_stop(PULSE_ml); -+ pa_threaded_mainloop_free(PULSE_ml); -+ -+ return 1; -+} -+ -+#endif /* HAVE_PULSEAUDIO */ -+ -+/************************************************************************** -+ * DriverProc (WINEPULSE.@) -+ */ -+LRESULT CALLBACK PULSE_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, -+ LPARAM dwParam1, LPARAM dwParam2) { -+ -+ switch(wMsg) { -+#ifdef HAVE_PULSEAUDIO -+ case DRV_LOAD: PULSE_WaveInit(); -+ return 1; -+ case DRV_FREE: return PULSE_WaveClose(); -+ case DRV_OPEN: return 1; -+ case DRV_CLOSE: return 1; -+ case DRV_ENABLE: return 1; -+ case DRV_DISABLE: return 1; -+ case DRV_QUERYCONFIGURE: return 1; -+ case DRV_CONFIGURE: MessageBoxA(0, "PulseAudio MultiMedia Driver !", "PulseAudio Driver", MB_OK); return 1; -+ case DRV_INSTALL: return DRVCNF_RESTART; -+ case DRV_REMOVE: return DRVCNF_RESTART; -+#endif -+ default: -+ return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2); -+ } -+} -diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c -new file mode 100644 -index 0000000..fe7543f ---- /dev/null -+++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,180 @@ -+/* -+ * Wine Driver for PulseAudio - WaveOut Functionality -+ * http://pulseaudio.org/ -+ * -+ * Copyright 2002 Eric Pouech -+ * 2002 Marco Pietrobono -+ * 2003 Christian Costa -+ * 2006-2007 Maarten Lankhorst -+ * 2008 Arthur Taylor (PulseAudio version) -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+#include -+#include -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wingdi.h" -+#include "winuser.h" -+#include "winnls.h" -+#include "winerror.h" -+#include "mmddk.h" -+#include "mmreg.h" -+#include "ks.h" -+#include "ksguid.h" -+#include "ksmedia.h" -+#include "dsound.h" -+#include "dsdriver.h" -+ -+#include -+ -+#include "wine/debug.h" -+ -+WINE_DEFAULT_DEBUG_CHANNEL(wave); -+ -+#if HAVE_PULSEAUDIO -+ -+/* state diagram for waveOut writing: -+ * -+ * +---------+-------------+---------------+---------------------------------+ -+ * | state | function | event | new state | -+ * +---------+-------------+---------------+---------------------------------+ -+ * | | open() | | STOPPED | -+ * | PAUSED | write() | | PAUSED | -+ * | STOPPED | write() | | PLAYING | -+ * | PLAYING | write() | HEADER | PLAYING | -+ * | (other) | write() | | | -+ * | (any) | pause() | PAUSING | PAUSED | -+ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | -+ * | PAUSED | reset() | RESETTING | PAUSED | -+ * | (other) | reset() | RESETTING | STOPPED | -+ * | (any) | close() | CLOSING | CLOSED | -+ * +---------+-------------+---------------+---------------------------------+ -+ */ -+ -+/************************************************************************** -+ * wodGetDevCaps [internal] -+ */ -+static DWORD wodGetDevCaps(DWORD wDevID, LPWAVEOUTCAPSW lpCaps, DWORD dwSize) { -+ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); -+ -+ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; -+ -+ if (wDevID >= PULSE_WodNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ memcpy(lpCaps, &(WOutDev[wDevID].caps.out), min(dwSize, sizeof(*lpCaps))); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodDevInterfaceSize [internal] -+ */ -+static DWORD wodDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { -+ -+ *dwParam1 = MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, NULL, 0) * sizeof(WCHAR); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodDevInterface [internal] -+ */ -+static DWORD wodDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { -+ if (dwParam2 >= MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, -+ NULL, 0 ) * sizeof(WCHAR)) -+ { -+ MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, -+ dwParam1, dwParam2 / sizeof(WCHAR)); -+ return MMSYSERR_NOERROR; -+ } -+ return MMSYSERR_INVALPARAM; -+} -+ -+/*======================================================================* -+ * Low level DSOUND implementation * -+ *======================================================================*/ -+static DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv) { -+ /* Is this possible ?*/ -+ return MMSYSERR_NOTSUPPORTED; -+} -+ -+static DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc) { -+ memset(desc, 0, sizeof(*desc)); -+ strcpy(desc->szDesc, "Wine PulseAudio DirectSound Driver"); -+ strcpy(desc->szDrvname, "winepulse.drv"); -+ return MMSYSERR_NOERROR; -+} -+/************************************************************************** -+ * wodMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, -+ DWORD dwParam1, DWORD dwParam2) { -+ -+ switch (wMsg) { -+ case DRVM_INIT: -+ case DRVM_EXIT: -+ case DRVM_ENABLE: -+ case DRVM_DISABLE: -+ /* FIXME: Pretend this is supported */ -+ return 0; -+ case WODM_OPEN: return MMSYSERR_NOTSUPPORTED; -+ case WODM_CLOSE: return MMSYSERR_NOTSUPPORTED; -+ case WODM_WRITE: return MMSYSERR_NOTSUPPORTED; -+ case WODM_PAUSE: return MMSYSERR_NOTSUPPORTED; -+ case WODM_GETPOS: return MMSYSERR_NOTSUPPORTED; -+ case WODM_BREAKLOOP: return MMSYSERR_NOTSUPPORTED; -+ case WODM_PREPARE: return MMSYSERR_NOTSUPPORTED; -+ case WODM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; -+ case WODM_GETDEVCAPS: return wodGetDevCaps (wDevID, (LPWAVEOUTCAPSW)dwParam1, dwParam2); -+ case WODM_GETNUMDEVS: return PULSE_WodNumDevs; -+ case WODM_GETPITCH: return MMSYSERR_NOTSUPPORTED; -+ case WODM_SETPITCH: return MMSYSERR_NOTSUPPORTED; -+ case WODM_GETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* support if theoretically possible */ -+ case WODM_SETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* since pulseaudio 0.9.8 */ -+ case WODM_GETVOLUME: return MMSYSERR_NOTSUPPORTED; -+ case WODM_SETVOLUME: return MMSYSERR_NOTSUPPORTED; -+ case WODM_RESTART: return MMSYSERR_NOTSUPPORTED; -+ case WODM_RESET: return MMSYSERR_NOTSUPPORTED; -+ case DRV_QUERYDEVICEINTERFACESIZE: return wodDevInterfaceSize (wDevID, (LPDWORD)dwParam1); -+ case DRV_QUERYDEVICEINTERFACE: return wodDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); -+ case DRV_QUERYDSOUNDIFACE: return wodDsCreate (wDevID, (PIDSDRIVER*)dwParam1); -+ case DRV_QUERYDSOUNDDESC: return wodDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); -+ default: -+ FIXME("unknown message %d!\n", wMsg); -+ } -+ return MMSYSERR_NOTSUPPORTED; -+} -+ -+#else /* !HAVE_PULSEAUDIO */ -+ -+/************************************************************************** -+ * wodMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, -+ DWORD dwParam1, DWORD dwParam2) { -+ FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, -+ dwParam1, dwParam2); -+ return MMSYSERR_NOTENABLED; -+} -+ -+#endif /* HAVE_PULSEAUDIO */ -diff --git a/dlls/winepulse.drv/winepulse.drv.spec b/dlls/winepulse.drv/winepulse.drv.spec -new file mode 100644 -index 0000000..1707969 ---- /dev/null -+++ b/dlls/winepulse.drv/winepulse.drv.spec -@@ -0,0 +1,2 @@ -+@ stdcall -private DriverProc(long long long long long long) PULSE_DriverProc -+@ stdcall -private wodMessage(long long long long long long) PULSE_wodMessage -diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h -new file mode 100644 -index 0000000..277221a ---- /dev/null -+++ b/dlls/winepulse.drv/winepulse.h -@@ -0,0 +1,169 @@ -+/* Definitions for PulseAudio Wine Driver -+ * -+ * Copyright 2008 Arthur Taylor -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#ifndef __WINE_CONFIG_H -+# error You must include config.h to use this header -+#endif -+ -+#if defined(HAVE_PULSEAUDIO) && !defined(__WINEPULSE_H) -+#define __WINEPULSE_H -+ -+#include "mmreg.h" -+#include "dsound.h" -+#include "dsdriver.h" -+ -+#include "ks.h" -+#include "ksmedia.h" -+#include "ksguid.h" -+ -+#include -+ -+/* state diagram for waveOut writing: -+ * -+ * +---------+-------------+---------------+---------------------------------+ -+ * | state | function | event | new state | -+ * +---------+-------------+---------------+---------------------------------+ -+ * | | open() | | STOPPED | -+ * | PAUSED | write() | | PAUSED | -+ * | STOPPED | write() | | PLAYING | -+ * | PLAYING | write() | HEADER | PLAYING | -+ * | (other) | write() | | | -+ * | (any) | pause() | PAUSING | PAUSED | -+ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | -+ * | (any) | reset() | RESETTING | STOPPED | -+ * | (any) | close() | CLOSING | CLOSED | -+ * +---------+-------------+---------------+---------------------------------+ -+ */ -+ -+#undef PULSE_VERBOSE -+ -+/* states of the playing device */ -+#define WINE_WS_PLAYING 1 -+#define WINE_WS_PAUSED 2 -+#define WINE_WS_STOPPED 3 -+#define WINE_WS_CLOSED 4 -+#define WINE_WS_FAILED 5 -+ -+#define PULSE_MAX_STREAM_INSTANCES 16 /* Sixteen streams per device should be good enough? */ -+ -+/* events to be send to device */ -+enum win_wm_message { -+ WINE_WM_PAUSING = WM_USER + 1, WINE_WM_RESTARTING, WINE_WM_RESETTING, WINE_WM_HEADER, -+ WINE_WM_BREAKLOOP, WINE_WM_CLOSING, WINE_WM_STARTING, WINE_WM_STOPPING, WINE_WM_XRUN, WINE_WM_FEED -+}; -+ -+typedef struct { -+ enum win_wm_message msg; /* message identifier */ -+ DWORD param; /* parameter for this message */ -+ HANDLE hEvent; /* if message is synchronous, handle of event for synchro */ -+} PULSE_MSG; -+ -+/* implement an in-process message ring for better performance -+ * (compared to passing thru the server) -+ * this ring will be used by the input (resp output) record (resp playback) routine -+ */ -+typedef struct { -+ PULSE_MSG * messages; -+ int ring_buffer_size; -+ int msg_tosave; -+ int msg_toget; -+/* Either pipe or event is used, but that is defined in pulse.c, -+ * since this is a global header we define both here */ -+ int msg_pipe[2]; -+ HANDLE msg_event; -+ CRITICAL_SECTION msg_crst; -+} PULSE_MSG_RING; -+ -+/* Per-playback/record instance */ -+typedef struct { -+ int instance_ref; /* The array index of WINE_WAVEDEV->instance[] that this is */ -+ volatile int state; /* one of the WINE_WS_ manifest constants */ -+ WAVEOPENDESC waveDesc; -+ WORD wFlags; -+ pa_stream *stream; /* The PulseAudio stream */ -+ const pa_timing_info *timing_info; -+ pa_buffer_attr *buffer_attr; -+ pa_sample_spec sample_spec; /* Sample spec of this stream / device */ -+ pa_cvolume volume; -+ -+ /* WavaHdr information */ -+ LPWAVEHDR lpQueuePtr; /* start of queued WAVEHDRs (waiting to be notified) */ -+ LPWAVEHDR lpPlayPtr; /* start of not yet fully played buffers */ -+ DWORD dwPartialOffset; /* Offset of not yet written bytes in lpPlayPtr */ -+ LPWAVEHDR lpLoopPtr; /* pointer of first buffer in loop, if any */ -+ DWORD dwLoops; /* private copy of loop counter */ -+ -+ /* Virtual stream positioning information */ -+ DWORD last_reset; /* When the last reset occured, as pa stream time doesn't reset */ -+ BOOL is_buffering; /* !is_playing */ -+ struct timeval last_header; /* When the last wavehdr was received, only updated when is_buffering is true */ -+ BOOL is_releasing; /* Whether we are releasing wavehdrs, may not always be the inverse of is_buffering */ -+ struct timeval started_releasing; /* When wavehdr releasing started, for comparison to queued written wavehdrs */ -+ DWORD releasing_offset; /* How much audio has been released prior when releasing started in this instance */ -+ -+ /* Thread communication and synchronization stuff */ -+ HANDLE hStartUpEvent; -+ HANDLE hThread; -+ DWORD dwThreadID; -+ PULSE_MSG_RING msgRing; -+} WINE_WAVEINST; -+ -+/* Per-playback/record device */ -+typedef struct { -+ char *device_name; /* Name of the device used as an identifer on the server */ -+ char interface_name[MAXPNAMELEN * 2]; -+ -+ pa_volume_t left_vol; /* Volume is per device and always stereo */ -+ pa_volume_t right_vol; -+ -+ union { -+ WAVEOUTCAPSW out; -+ WAVEINCAPSW in; -+ } caps; -+ -+ WINE_WAVEINST *instance[PULSE_MAX_STREAM_INSTANCES]; -+} WINE_WAVEDEV; -+ -+/* We establish one context per instance, so make it global to the lib */ -+pa_context *PULSE_context; /* Connection Context */ -+pa_threaded_mainloop *PULSE_ml; /* PA Runtime information */ -+ -+/* WaveIn / WaveOut devices */ -+WINE_WAVEDEV *WOutDev; -+WINE_WAVEDEV *WInDev; -+DWORD PULSE_WodNumDevs; -+DWORD PULSE_WidNumDevs; -+ -+/* pulse.c */ -+void PULSE_set_buffer_attr_callback(pa_stream *stream, int success, void *userdata); -+void PULSE_wait_for_operation(pa_operation *o, WINE_WAVEINST *ww); -+void PULSE_stream_success_callback(pa_stream *s, int success, void *userdata); -+void PULSE_stream_state_callback(pa_stream *s, void *userdata); -+void PULSE_context_success_callback(pa_context *c, int success, void *userdata); -+void PULSE_stream_request_callback(pa_stream *s, size_t n, void *userdata); -+DWORD PULSE_bytes_to_mmtime(LPMMTIME lpTime, DWORD position, pa_sample_spec *ss); -+BOOL PULSE_setupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss); -+int PULSE_InitRingMessage(PULSE_MSG_RING* omr); -+int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr); -+void PULSE_ResetRingMessage(PULSE_MSG_RING* omr); -+void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep); -+int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait); -+int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, enum win_wm_message *msg, DWORD *param, HANDLE *hEvent); -+const char * PULSE_getCmdString(enum win_wm_message msg); -+#endif - diff --git a/wine-pulseaudio.sh b/wine-pulseaudio.sh deleted file mode 100644 index e73d7c4..0000000 --- a/wine-pulseaudio.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -if [ -x /usr/lib*/alsa-lib/libasound_module_pcm_pulse.so ] && [ -x "/usr/bin/padsp" ] ; then - echo "Running padsp as pulseaudio wrapper for wine" - exec padsp -n Wine -- /usr/bin/wine_bin "$@" -else - exec /usr/bin/wine_bin "$@" -fi diff --git a/wine.spec b/wine.spec index 1b3b64f..e780def 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.14 +Version: 1.1.15 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -41,9 +41,10 @@ Source300: wine-mime-msi.desktop # explain how to use wine with pulseaudio # see http://bugs.winehq.org/show_bug.cgi?id=10495 -Patch400: wine-pulseaudio.patch -Patch401: wine-pulseaudio-waveout.patch -Patch402: wine-pulseaudio-winecfg.patch +# and http://art.ified.ca/?page_id=40 +Patch400: http://art.ified.ca/downloads/winepulse-0.17-configure.ac.patch +Patch401: http://art.ified.ca/downloads/winepulse-0.20.patch +Patch402: http://art.ified.ca/downloads/adding-pulseaudio-to-winecfg.patch Source402: README-FEDORA-PULSEAUDIO @@ -242,25 +243,19 @@ wine audio driver. Please do not report bugs regarding this driver at winehq.org %patch400 -p1 %patch401 -p1 %patch402 -p1 -autoconf -f +autoreconf %build -# work around gcc bug see #440139 -# this affects more then just dlls/user32/menu.c -#%if %{?fedora} > 8 -#export CFLAGS="$RPM_OPT_FLAGS -fno-tree-fre -fno-tree-pre" -#%else export CFLAGS="$RPM_OPT_FLAGS" -#%endif %configure \ - --sysconfdir=%{_sysconfdir}/wine --disable-static \ + --sysconfdir=%{_sysconfdir}/wine \ --x-includes=%{_includedir} --x-libraries=%{_libdir} \ --with-pulse %{__make} depend -%{__make} %{?_smp_mflags} +%{__make} TARGETFLAGS="" %{?_smp_mflags} %install rm -rf %{buildroot} @@ -869,11 +864,16 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %files pulseaudio -# pulseaudio workaround documentation +# winepulse documentation %doc README-FEDORA-PULSEAUDIO %{_libdir}/wine/winepulse.drv.so %changelog +* Sun Feb 15 2009 Andreas Bierfert +- 1.1.15-1 +- version upgrade +- new pulse patches + * Sat Jan 31 2009 Andreas Bierfert - 1.1.14-1 - version upgrade diff --git a/winepulse-0.17-configure.ac.patch b/winepulse-0.17-configure.ac.patch new file mode 100644 index 0000000..776d724 --- /dev/null +++ b/winepulse-0.17-configure.ac.patch @@ -0,0 +1,54 @@ +diff --git a/configure.ac b/configure.ac +index 57ec39d..2ca94ca 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -58,6 +58,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), + [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) + AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]), + [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi]) ++AC_ARG_WITH(pulse, AC_HELP_STRING([--without-pulse],[do not use PulseAudio sound support])) + AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) + AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), + [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) +@@ -1186,6 +1187,24 @@ then + CFLAGS="$save_CFLAGS" + fi + ++dnl **** Check for PulseAudio **** ++if test "x$with_pulse" != "xno"; then ++ if test "$PKG_CONFIG" != "false"; then ++ AC_MSG_CHECKING([for pulseaudio >= 0.9.8]) ++ if "$PKG_CONFIG" --atleast-version=0.9.8 libpulse; then ++ have_pulseaudio="yes" ++ else ++ have_pulseaudio="no" ++ fi ++ AC_MSG_RESULT([$have_pulseaudio]) ++ if test x"$have_pulseaudio" = xyes; then ++ ac_pulse_libs=`$PKG_CONFIG --libs libpulse` ++ AC_DEFINE([HAVE_PULSEAUDIO], 1, [define this if you have pulseaudio]) ++ AC_SUBST(PULSELIBS, "$ac_pulse_libs") ++ fi ++ fi ++fi ++ + dnl **** Check for ALSA 1.x **** + AC_SUBST(ALSALIBS,"") + if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" +@@ -1291,7 +1310,7 @@ dnl **** Check for libodbc **** + WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) + + dnl **** Check for any sound system **** +-if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$ac_cv_lib_soname_jack" = "x" -a \ ++if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$PULSELIBS$ac_cv_lib_soname_jack" = "x" -a \ + "$ac_cv_header_sys_soundcard_h" != "yes" -a \ + "$ac_cv_header_machine_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes" -a \ +@@ -2223,6 +2242,7 @@ WINE_CONFIG_MAKEFILE([dlls/winemp3.acm/Makefile],[dlls/Makedll.rules],[dlls],[AL + WINE_CONFIG_MAKEFILE([dlls/winenas.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/wineoss.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/wineps.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) ++WINE_CONFIG_MAKEFILE([dlls/winepulse.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/winequartz.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/winex11.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/wing32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) diff --git a/winepulse-0.20.patch b/winepulse-0.20.patch new file mode 100644 index 0000000..97de6d9 --- /dev/null +++ b/winepulse-0.20.patch @@ -0,0 +1,3436 @@ +diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in +new file mode 100644 +index 0000000..327f225 +--- /dev/null ++++ b/dlls/winepulse.drv/Makefile.in +@@ -0,0 +1,16 @@ ++TOPSRCDIR = @top_srcdir@ ++TOPOBJDIR = ../.. ++SRCDIR = @srcdir@ ++VPATH = @srcdir@ ++MODULE = winepulse.drv ++IMPORTS = dxguid uuid winmm user32 advapi32 kernel32 ++EXTRALIBS = @PULSELIBS@ ++ ++C_SRCS = dsoutput.c \ ++ waveout.c \ ++ wavein.c \ ++ pulse.c ++ ++@MAKE_DLL_RULES@ ++ ++@DEPENDENCIES@ # everything below this line is overwritten by make depend +diff --git a/dlls/winepulse.drv/dsoutput.c b/dlls/winepulse.drv/dsoutput.c +new file mode 100644 +index 0000000..5086917 +--- /dev/null ++++ b/dlls/winepulse.drv/dsoutput.c +@@ -0,0 +1,568 @@ ++/* ++ * Wine Driver for PulseAudio - DSound Output Functionality ++ * http://pulseaudio.org/ ++ * ++ * Copyright 2009 Arthur Talyor ++ * ++ * Conatins code from other wine multimedia drivers. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++ ++#include ++ ++#include "windef.h" ++#include "winbase.h" ++#include "wingdi.h" ++#include "winuser.h" ++#include "winerror.h" ++#include "mmddk.h" ++#include "dsound.h" ++#include "dsdriver.h" ++#include "winreg.h" ++ ++#include ++#include "wine/debug.h" ++ ++WINE_DEFAULT_DEBUG_CHANNEL(dspulse); ++ ++#if HAVE_PULSEAUDIO ++ ++/*======================================================================* ++ * Low level DSOUND implementation * ++ *======================================================================*/ ++ ++/* Fragment lengths try to be a power of two close to 10ms worth of data. See ++ * dlls/dsound/mixer.c ++ */ ++static int fragment_length(pa_sample_spec *s) { ++ if (s->rate <= 12800) ++ return 128 * pa_frame_size(s); ++ ++ if (s->rate <= 25600) ++ return 256 * pa_frame_size(s); ++ ++ if (s->rate <= 51200) ++ return 512 * pa_frame_size(s); ++ ++ return 1024 * pa_frame_size(s); ++} ++ ++/* Callback from the pulse thread for stream data */ ++static void DSPULSE_BufferReadCallback(pa_stream *s, size_t nbytes, void *userdata) { ++ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)userdata; ++ ++ if (!This->buffer) ++ return; ++ ++ /* Fraglens are always powers of 2 */ ++ nbytes+= This->fraglen - 1; ++ nbytes&= ~(This->fraglen - 1); ++ /* If we advance more than 10 fragments at a time it appears that the buffer ++ * pointer is never advancing because of wrap-around. Evil magic numbers. */ ++ if (nbytes > This->fraglen * 6) ++ nbytes = This->fraglen * 6; ++ ++ TRACE("Reading %u bytes.\n", nbytes); ++ ++ if (This->buffer_read_offset + nbytes > This->buffer_length) { ++ size_t write_length = This->buffer_length - This->buffer_read_offset; ++ if (nbytes > This->buffer_length) ++ nbytes = This->buffer_length; ++ nbytes -= write_length; ++ pa_stream_write(s, This->buffer + This->buffer_read_offset, write_length, NULL, 0, PA_SEEK_RELATIVE); ++ pa_stream_write(s, This->buffer, nbytes, NULL, 0, PA_SEEK_RELATIVE); ++ This->buffer_read_offset = nbytes; ++ } else { ++ pa_stream_write(s, This->buffer + This->buffer_read_offset, nbytes, NULL, 0, PA_SEEK_RELATIVE); ++ This->buffer_read_offset += nbytes; ++ } ++ ++ This->buffer_read_offset %= This->buffer_length; ++} ++ ++/* Called when the stream underruns. Just for information */ ++static void DSPULSE_BufferUnderflowCallback(pa_stream *s, void *userdata) { ++ WARN("(%p) underrun.\n", userdata); ++} ++ ++/* Connects a stream to the server for use in setting the sample format or ++ * stream creation. Does not update IDsDriverBufferImpl->fraglen */ ++static HRESULT DSPULSE_ConnectStream(IDsDriverBufferImpl* This) { ++ pa_buffer_attr ba_request; ++ const pa_buffer_attr *ba_obtained; ++ char c[PA_SAMPLE_SPEC_SNPRINT_MAX]; ++ pa_stream_flags_t flags = PA_STREAM_START_CORKED; ++ ++#if PA_API_VERSION >= 12 ++ flags |= PA_STREAM_EARLY_REQUESTS; ++#endif ++ ++ pa_sample_spec_snprint(c, PA_SAMPLE_SPEC_SNPRINT_MAX, &This->sample_spec); ++ TRACE("Sample spec %s fragment size %u.\n", c, This->fraglen); ++ ++ ba_request.tlength = This->fraglen * 4; ++ ba_request.minreq = This->fraglen / 2; ++ ba_request.prebuf = (uint32_t) -1; /* same as tlength */ ++ ba_request.maxlength = This->buffer_length; ++ ++ TRACE("Asking for buffer tlength:%u (%llums) minreq:%u (%llums)\n", ++ ba_request.tlength, pa_bytes_to_usec(ba_request.tlength, &This->sample_spec)/1000, ++ ba_request.minreq, pa_bytes_to_usec(ba_request.minreq, &This->sample_spec)/1000); ++ ++ This->stream = pa_stream_new(PULSE_context, "DirectSound Buffer", &This->sample_spec, NULL); ++ if (!This->stream) return DSERR_BADFORMAT; ++ ++ pa_stream_set_state_callback(This->stream, PULSE_StreamStateCallback, This); ++ pa_stream_set_write_callback(This->stream, DSPULSE_BufferReadCallback, This); ++ pa_stream_set_underflow_callback(This->stream, DSPULSE_BufferUnderflowCallback, This); ++ ++ TRACE("Attempting to connect (%p)->stream for playback on %s\n", This, WOutDev[This->drv->wDevID].device_name); ++ pa_stream_connect_playback(This->stream, WOutDev[This->drv->wDevID].device_name, &ba_request, flags, NULL, NULL); ++ for (;;) { ++ pa_context_state_t cstate = pa_context_get_state(PULSE_context); ++ pa_stream_state_t sstate = pa_stream_get_state(This->stream); ++ ++ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || ++ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { ++ ERR("Failed to connect stream context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); ++ return DSERR_BUFFERLOST; ++ } ++ ++ if (sstate == PA_STREAM_READY) ++ break; ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ TRACE("(%p)->stream connected for playback.\n", This); ++ ba_obtained = pa_stream_get_buffer_attr(This->stream); ++ ++ TRACE("Obtained buffer tlength:%u (%llums) minreq:%u (%llums)\n", ++ ba_obtained->tlength, pa_bytes_to_usec(ba_obtained->tlength, &This->sample_spec)/1000, ++ ba_obtained->minreq, pa_bytes_to_usec(ba_obtained->minreq, &This->sample_spec)/1000); ++ ++ return DS_OK; ++} ++ ++static HRESULT WINAPI IDsDriverBufferImpl_QueryInterface(PIDSDRIVERBUFFER iface, REFIID riid, LPVOID *ppobj) { ++ /* IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; */ ++ FIXME("(): stub!\n"); ++ return DSERR_UNSUPPORTED; ++} ++ ++static ULONG WINAPI IDsDriverBufferImpl_AddRef(PIDSDRIVERBUFFER iface) { ++ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; ++ ULONG refCount = InterlockedIncrement(&This->ref); ++ ++ TRACE("(%p)->(ref before=%u)\n",This, refCount - 1); ++ ++ return refCount; ++} ++ ++static ULONG WINAPI IDsDriverBufferImpl_Release(PIDSDRIVERBUFFER iface) { ++ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; ++ ULONG refCount = InterlockedDecrement(&This->ref); ++ ++ TRACE("(%p)->(ref before=%u)\n",This, refCount + 1); ++ ++ if (refCount) ++ return refCount; ++ ++ TRACE("mmap buffer %p destroyed\n", This->buffer); ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(This->stream, 1, PULSE_StreamSuccessCallback, This)); ++ pa_stream_disconnect(This->stream); ++ ++ if (This == This->drv->primary) ++ This->drv->primary = NULL; ++ ++ HeapFree(GetProcessHeap(), 0, This->buffer); ++ This->buffer = NULL; ++ ++ pa_stream_unref(This->stream); ++ This->stream = NULL; ++ ++ HeapFree(GetProcessHeap(), 0, This); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ return 0; ++} ++ ++static HRESULT WINAPI IDsDriverBufferImpl_Lock(PIDSDRIVERBUFFER iface, ++ LPVOID*ppvAudio1,LPDWORD pdwLen1, ++ LPVOID*ppvAudio2,LPDWORD pdwLen2, ++ DWORD dwWritePosition,DWORD dwWriteLen, ++ DWORD dwFlags) ++{ ++ /* We set DSDDESC_DONTNEEDPRIMARYLOCK so this should never be called */ ++ TRACE("(%p): stub", iface); ++ return DSERR_UNSUPPORTED; ++} ++ ++static HRESULT WINAPI IDsDriverBufferImpl_Unlock(PIDSDRIVERBUFFER iface, ++ LPVOID pvAudio1,DWORD dwLen1, ++ LPVOID pvAudio2,DWORD dwLen2) ++{ ++ /* We set DSDDESC_DONTNEEDPRIMARYLOCK so this should never be called */ ++ TRACE("(%p): stub", iface); ++ return DSERR_UNSUPPORTED; ++} ++ ++/* You cannot change the sample format of a connected stream, so we need to ++ * destroy and re-create the stream if the sample spec is different */ ++static HRESULT WINAPI IDsDriverBufferImpl_SetFormat(PIDSDRIVERBUFFER iface, LPWAVEFORMATEX pwfx) { ++ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; ++ HRESULT ret = DS_OK; ++ pa_sample_spec old_spec; ++ ++ TRACE("(%p, %p)\n", iface, pwfx); ++ ++ old_spec.rate = This->sample_spec.rate; ++ old_spec.format = This->sample_spec.format; ++ old_spec.channels = This->sample_spec.channels; ++ ++ if (!PULSE_SetupFormat(pwfx, &This->sample_spec)) ++ return DSERR_BADFORMAT; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (old_spec.rate == This->sample_spec.rate && ++ old_spec.format == This->sample_spec.format && ++ old_spec.channels == This->sample_spec.channels) { ++ TRACE("same as original sample spec, exiting.\n"); ++ ret = DS_OK; ++ goto leave; ++ } ++ ++ This->fraglen = fragment_length(&This->sample_spec); ++ ++ TRACE("Disconnecting old stream.\n"); ++ pa_stream_disconnect(This->stream); ++ pa_stream_unref(This->stream); ++ ret = DSPULSE_ConnectStream(This); ++ ++leave: ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ TRACE("Exiting\n"); ++ return ret; ++} ++ ++static HRESULT WINAPI IDsDriverBufferImpl_SetFrequency(PIDSDRIVERBUFFER iface, DWORD dwFreq) ++{ ++ /* IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; */ ++ /* You can't do for primary buffers anyways */ ++ return S_OK; ++} ++ ++static HRESULT WINAPI IDsDriverBufferImpl_SetVolumePan(PIDSDRIVERBUFFER iface, PDSVOLUMEPAN pVolPan) { ++ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; ++ ++ if (This->sample_spec.channels == 2) { ++ This->volume.channels = 2; ++ if (pVolPan->lPan < 0) { ++ This->volume.values[0] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0 + pVolPan->lPan/10.0); ++ This->volume.values[1] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0); ++ } else { ++ This->volume.values[0] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0); ++ This->volume.values[1] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0 - pVolPan->lPan/10.0); ++ } ++ } else { ++ WARN("Panning non-stereo streams not supported yet!\n"); ++ pa_cvolume_set(&This->volume, This->sample_spec.channels, pa_sw_volume_from_dB(pVolPan->lVolume/-10.0)); ++ /* Would be nice to return DSERR_CONTROLUNAVAIL, but that isn't up to us ++ * here */ ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (This->stream && PULSE_context && pa_context_get_state(PULSE_context) == PA_CONTEXT_READY && ++ pa_stream_get_state(This->stream) == PA_STREAM_READY && pa_cvolume_valid(&This->volume)) ++ PULSE_WaitForOperation( ++ pa_context_set_sink_input_volume( ++ PULSE_context, pa_stream_get_index(This->stream), ++ &This->volume, PULSE_ContextSuccessCallback, This)); ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ return DS_OK; ++} ++ ++static HRESULT WINAPI IDsDriverBufferImpl_SetPosition(PIDSDRIVERBUFFER iface, DWORD dwNewPos) ++{ ++ /* IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; */ ++ /* Not allowed on primary buffers */ ++ return DSERR_UNSUPPORTED; ++} ++ ++static HRESULT WINAPI IDsDriverBufferImpl_GetPosition(PIDSDRIVERBUFFER iface, ++ LPDWORD lpdwPlay, LPDWORD lpdwWrite) ++{ ++ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ if (!This->buffer || pa_stream_get_state(This->stream) != PA_STREAM_READY) { ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return DSERR_UNINITIALIZED; ++ } ++ ++ /* These values are fake, and must remain so */ ++ if (lpdwPlay) ++ *lpdwPlay = (This->buffer_read_offset + This->buffer_length - This->fraglen * 2) % This->buffer_length; ++ if (lpdwWrite) ++ *lpdwWrite = This->buffer_read_offset; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ return DS_OK; ++} ++ ++static HRESULT WINAPI IDsDriverBufferImpl_Play(PIDSDRIVERBUFFER iface, DWORD dwRes1, DWORD dwRes2, DWORD dwFlags) { ++ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; ++ TRACE("(%p,%x,%x,%x)\n",iface,dwRes1,dwRes2,dwFlags); ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(This->stream, 0, PULSE_StreamSuccessCallback, This)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return DS_OK; ++} ++ ++static HRESULT WINAPI IDsDriverBufferImpl_Stop(PIDSDRIVERBUFFER iface) { ++ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; ++ TRACE("(%p)\n",iface); ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(This->stream, 1, PULSE_StreamSuccessCallback, This)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return DS_OK; ++} ++ ++/*****************************************************************************/ ++ ++static const IDsDriverBufferVtbl dsdbvt = ++{ ++ IDsDriverBufferImpl_QueryInterface, ++ IDsDriverBufferImpl_AddRef, ++ IDsDriverBufferImpl_Release, ++ IDsDriverBufferImpl_Lock, ++ IDsDriverBufferImpl_Unlock, ++ IDsDriverBufferImpl_SetFormat, ++ IDsDriverBufferImpl_SetFrequency, ++ IDsDriverBufferImpl_SetVolumePan, ++ IDsDriverBufferImpl_SetPosition, ++ IDsDriverBufferImpl_GetPosition, ++ IDsDriverBufferImpl_Play, ++ IDsDriverBufferImpl_Stop ++}; ++ ++static HRESULT WINAPI IDsDriverImpl_CreateSoundBuffer(PIDSDRIVER iface, ++ LPWAVEFORMATEX pwfx, ++ DWORD dwFlags, DWORD dwCardAddress, ++ LPDWORD pdwcbBufferSize, ++ LPBYTE *ppbBuffer, ++ LPVOID *ppvObj) { ++ IDsDriverImpl *This = (IDsDriverImpl *)iface; ++ IDsDriverBufferImpl** ippdsdb = (IDsDriverBufferImpl**)ppvObj; ++ IDsDriverBufferImpl *That; ++ HRESULT ret; ++ ++ TRACE("(%p,%p,%x,%x)\n",iface,pwfx,dwFlags,dwCardAddress); ++ /* we only support primary buffers */ ++ if (!(dwFlags & DSBCAPS_PRIMARYBUFFER)) ++ return DSERR_UNSUPPORTED; ++ if (This->primary) ++ return DSERR_ALLOCATED; ++ This->primary = *ippdsdb; ++ ++ *ippdsdb = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDsDriverBufferImpl)); ++ ++ if (!*ippdsdb) { ++ ERR("Out of memory\n"); ++ return DSERR_OUTOFMEMORY; ++ } ++ ++ That = *ippdsdb; ++ That->lpVtbl = &dsdbvt; ++ That->ref = 1; ++ That->drv = This; ++ ++ if (!PULSE_SetupFormat(pwfx, &That->sample_spec)) { ++ WARN("Bad audio format.\n"); ++ ret = DSERR_BADFORMAT; ++ goto err; ++ } ++ ++ /* The buffer length has to be greater than fraglen * 20 or else logic in ++ * dlls/dsound/mixer.c fails to correctly understand buffer wrap around. */ ++ That->fraglen = fragment_length(&That->sample_spec); ++ That->buffer_length = That->fraglen * 32; ++ That->buffer = pa_xmalloc0(That->buffer_length); ++ That->buffer_read_offset = 0; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ret = DSPULSE_ConnectStream(That); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ if (ret != DS_OK) ++ goto err; ++ ++ *pdwcbBufferSize = That->buffer_length; ++ *ppbBuffer = That->buffer; ++ ++ TRACE("Exiting with success. Have buffer %p of length %u\n", That->buffer, That->buffer_length); ++ return DS_OK; ++ ++err: ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (That->stream) { ++ if (pa_stream_get_state(That->stream) == PA_STREAM_READY) ++ pa_stream_disconnect(That->stream); ++ pa_stream_unref(That->stream); ++ That->stream = NULL; ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ if (That->buffer) ++ HeapFree(GetProcessHeap(), 0, That->buffer); ++ ++ if (*ippdsdb) ++ HeapFree(GetProcessHeap(), 0, That); ++ *ippdsdb = NULL; ++ TRACE("exiting with failure\n"); ++ return ret; ++} ++ ++static HRESULT WINAPI IDsDriverImpl_QueryInterface(PIDSDRIVER iface, REFIID riid, LPVOID *ppobj) { ++ /* IDsDriverImpl *This = (IDsDriverImpl *)iface; */ ++ FIXME("(%p): stub!\n",iface); ++ return DSERR_UNSUPPORTED; ++} ++ ++static ULONG WINAPI IDsDriverImpl_AddRef(PIDSDRIVER iface) { ++ IDsDriverImpl *This = (IDsDriverImpl *)iface; ++ ULONG refCount = InterlockedIncrement(&This->ref); ++ ++ TRACE("(%p)->(ref before=%u)\n",This, refCount - 1); ++ ++ return refCount; ++} ++ ++static ULONG WINAPI IDsDriverImpl_Release(PIDSDRIVER iface) { ++ IDsDriverImpl *This = (IDsDriverImpl *)iface; ++ ULONG refCount = InterlockedDecrement(&This->ref); ++ ++ TRACE("(%p)->(ref before=%u)\n",This, refCount + 1); ++ ++ if (refCount) ++ return refCount; ++ ++ HeapFree(GetProcessHeap(), 0, This); ++ return 0; ++} ++ ++static HRESULT WINAPI IDsDriverImpl_GetDriverDesc(PIDSDRIVER iface, PDSDRIVERDESC pDesc) { ++ IDsDriverImpl *This = (IDsDriverImpl *)iface; ++ TRACE("(%p,%p)\n",iface,pDesc); ++ *pDesc = WOutDev[This->wDevID].ds_desc; ++ pDesc->dwFlags = DSDDESC_DONTNEEDSECONDARYLOCK | DSDDESC_DONTNEEDPRIMARYLOCK; ++ pDesc->dnDevNode = 0; /*TODO: Bwah? */ ++ pDesc->wVxdId = 0; ++ pDesc->wReserved = 0; ++ pDesc->ulDeviceNum = This->wDevID; ++ pDesc->dwHeapType = DSDHEAP_NOHEAP; ++ pDesc->pvDirectDrawHeap = NULL; ++ pDesc->dwMemStartAddress = 0xDEAD0000; ++ pDesc->dwMemEndAddress = 0xDEAF0000; ++ pDesc->dwMemAllocExtra = 0; ++ pDesc->pvReserved1 = NULL; ++ pDesc->pvReserved2 = NULL; ++ return DS_OK; ++} ++ ++static HRESULT WINAPI IDsDriverImpl_Close(PIDSDRIVER iface) { ++ IDsDriverImpl *This = (IDsDriverImpl *)iface; ++ TRACE("(%p) stub, harmless\n",This); ++ return DS_OK; ++} ++ ++static HRESULT WINAPI IDsDriverImpl_Open(PIDSDRIVER iface) { ++ IDsDriverImpl *This = (IDsDriverImpl *)iface; ++ TRACE("(%p) stub, harmless\n",This); ++ return S_OK; ++} ++ ++static HRESULT WINAPI IDsDriverImpl_GetCaps(PIDSDRIVER iface, PDSDRIVERCAPS pCaps) { ++ IDsDriverImpl *This = (IDsDriverImpl *)iface; ++ ++ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) { ++ ERR("Context failure.\n"); ++ return DSERR_GENERIC; ++ } ++ ++ TRACE("(%p,%p)\n",iface,pCaps); ++ *pCaps = WOutDev[This->wDevID].ds_caps; ++ return DS_OK; ++} ++ ++static HRESULT WINAPI IDsDriverImpl_DuplicateSoundBuffer(PIDSDRIVER iface, ++ PIDSDRIVERBUFFER pBuffer, ++ LPVOID *ppvObj) ++{ ++ IDsDriverImpl *This = (IDsDriverImpl *)iface; ++ FIXME("(%p,%p): stub\n",This,pBuffer); ++ return DSERR_INVALIDCALL; ++} ++ ++static const IDsDriverVtbl dsdvt = ++{ ++ IDsDriverImpl_QueryInterface, ++ IDsDriverImpl_AddRef, ++ IDsDriverImpl_Release, ++ IDsDriverImpl_GetDriverDesc, ++ IDsDriverImpl_Open, ++ IDsDriverImpl_Close, ++ IDsDriverImpl_GetCaps, ++ IDsDriverImpl_CreateSoundBuffer, ++ IDsDriverImpl_DuplicateSoundBuffer ++}; ++ ++DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv) { ++ IDsDriverImpl** idrv = (IDsDriverImpl**)drv; ++ ++ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || pa_context_is_local(PULSE_context) != 1) { ++ WARN("Connection failure or server is not local, falling back to WaveOut HEL.\n"); ++ return MMSYSERR_NOTSUPPORTED; ++ } ++ ++ *idrv = HeapAlloc(GetProcessHeap(), 0, sizeof(IDsDriverImpl)); ++ if (!*idrv) ++ return MMSYSERR_NOMEM; ++ ++ TRACE("driver created\n"); ++ ++ (*idrv)->lpVtbl = &dsdvt; ++ (*idrv)->ref = 1; ++ (*idrv)->wDevID = wDevID; ++ (*idrv)->primary = NULL; ++ ++ return MMSYSERR_NOERROR; ++} ++ ++DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc) { ++ TRACE("(%u, %p)\n", wDevID, desc); ++ *desc = WOutDev[wDevID].ds_desc; ++ return MMSYSERR_NOERROR; ++} ++#endif /* HAVE_PULSEAUDIO */ +diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c +new file mode 100644 +index 0000000..337814d +--- /dev/null ++++ b/dlls/winepulse.drv/pulse.c +@@ -0,0 +1,922 @@ ++/* ++ * Wine Driver for PulseAudio ++ * http://pulseaudio.org/ ++ * ++ * Copyright 2008 Arthur Taylor ++ * ++ * Contains code from other wine sound drivers. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++ ++#include ++#include ++ ++#include "windef.h" ++#include "winbase.h" ++#include "wingdi.h" ++#include "winuser.h" ++#include "winreg.h" ++#include "mmddk.h" ++#include "ks.h" ++#include "ksguid.h" ++#include "ksmedia.h" ++ ++#ifdef HAVE_UNISTD_H ++# include ++#endif ++#include ++ ++#ifdef HAVE_PULSEAUDIO ++ ++#include "wine/unicode.h" ++#include "wine/debug.h" ++#include "wine/library.h" ++ ++#include ++#include ++WINE_DEFAULT_DEBUG_CHANNEL(wave); ++ ++/* ++ * - Need to subscribe to sink/source events and keep the WInDev and WOutDev ++ * structures updated ++ */ ++ ++/* These strings used only for tracing */ ++const char * PULSE_getCmdString(enum win_wm_message msg) { ++ static char unknown[32]; ++#define MSG_TO_STR(x) case x: return #x ++ switch(msg) { ++ MSG_TO_STR(WINE_WM_PAUSING); ++ MSG_TO_STR(WINE_WM_RESTARTING); ++ MSG_TO_STR(WINE_WM_RESETTING); ++ MSG_TO_STR(WINE_WM_HEADER); ++ MSG_TO_STR(WINE_WM_BREAKLOOP); ++ MSG_TO_STR(WINE_WM_CLOSING); ++ MSG_TO_STR(WINE_WM_STARTING); ++ MSG_TO_STR(WINE_WM_STOPPING); ++ MSG_TO_STR(WINE_WM_XRUN); ++ MSG_TO_STR(WINE_WM_FEED); ++ } ++#undef MSG_TO_STR ++ sprintf(unknown, "UNKNOWN(0x%08x)", msg); ++ return unknown; ++} ++ ++/*======================================================================* ++ * Ring Buffer Functions - copied from winealsa.drv * ++ *======================================================================*/ ++ ++/* unless someone makes a wineserver kernel module, Unix pipes are faster than win32 events */ ++#define USE_PIPE_SYNC ++ ++#ifdef USE_PIPE_SYNC ++#define INIT_OMR(omr) do { if (pipe(omr->msg_pipe) < 0) { omr->msg_pipe[0] = omr->msg_pipe[1] = -1; } } while (0) ++#define CLOSE_OMR(omr) do { close(omr->msg_pipe[0]); close(omr->msg_pipe[1]); } while (0) ++#define SIGNAL_OMR(omr) do { int x = 0; int foo; foo = write((omr)->msg_pipe[1], &x, sizeof(x)); } while (0) ++#define CLEAR_OMR(omr) do { int x = 0; int foo; foo = read((omr)->msg_pipe[0], &x, sizeof(x)); } while (0) ++#define RESET_OMR(omr) do { } while (0) ++#define WAIT_OMR(omr, sleep) \ ++ do { struct pollfd pfd; pfd.fd = (omr)->msg_pipe[0]; \ ++ pfd.events = POLLIN; poll(&pfd, 1, sleep); } while (0) ++#else ++#define INIT_OMR(omr) do { omr->msg_event = CreateEventW(NULL, FALSE, FALSE, NULL); } while (0) ++#define CLOSE_OMR(omr) do { CloseHandle(omr->msg_event); } while (0) ++#define SIGNAL_OMR(omr) do { SetEvent((omr)->msg_event); } while (0) ++#define CLEAR_OMR(omr) do { } while (0) ++#define RESET_OMR(omr) do { ResetEvent((omr)->msg_event); } while (0) ++#define WAIT_OMR(omr, sleep) \ ++ do { WaitForSingleObject((omr)->msg_event, sleep); } while (0) ++#endif ++ ++#define PULSE_RING_BUFFER_INCREMENT 64 ++ ++/****************************************************************** ++ * PULSE_InitRingMessage ++ * ++ * Initialize the ring of messages for passing between driver's caller ++ * and playback/record thread ++ */ ++int PULSE_InitRingMessage(PULSE_MSG_RING* omr) ++{ ++ omr->msg_toget = 0; ++ omr->msg_tosave = 0; ++ INIT_OMR(omr); ++ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; ++ omr->messages = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,omr->ring_buffer_size * sizeof(PULSE_MSG)); ++ ++ InitializeCriticalSection(&omr->msg_crst); ++ omr->msg_crst.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": PULSE_MSG_RING.msg_crst"); ++ return 0; ++} ++ ++/****************************************************************** ++ * PULSE_DestroyRingMessage ++ * ++ */ ++int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr) ++{ ++ CLOSE_OMR(omr); ++ HeapFree(GetProcessHeap(),0,omr->messages); ++ omr->messages = NULL; ++ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; ++ omr->msg_crst.DebugInfo->Spare[0] = 0; ++ DeleteCriticalSection(&omr->msg_crst); ++ return 0; ++} ++/****************************************************************** ++ * PULSE_ResetRingMessage ++ * ++ */ ++void PULSE_ResetRingMessage(PULSE_MSG_RING* omr) ++{ ++ RESET_OMR(omr); ++} ++ ++/****************************************************************** ++ * PULSE_WaitRingMessage ++ * ++ */ ++void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep) ++{ ++ WAIT_OMR(omr, sleep); ++} ++ ++/****************************************************************** ++ * PULSE_AddRingMessage ++ * ++ * Inserts a new message into the ring (should be called from DriverProc derived routines) ++ */ ++int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait) ++{ ++ HANDLE hEvent = INVALID_HANDLE_VALUE; ++ ++ EnterCriticalSection(&omr->msg_crst); ++ if ((omr->msg_toget == ((omr->msg_tosave + 1) % omr->ring_buffer_size))) ++ { ++ int old_ring_buffer_size = omr->ring_buffer_size; ++ omr->ring_buffer_size += PULSE_RING_BUFFER_INCREMENT; ++ omr->messages = HeapReAlloc(GetProcessHeap(),0,omr->messages, omr->ring_buffer_size * sizeof(PULSE_MSG)); ++ /* Now we need to rearrange the ring buffer so that the new ++ buffers just allocated are in between omr->msg_tosave and ++ omr->msg_toget. ++ */ ++ if (omr->msg_tosave < omr->msg_toget) ++ { ++ memmove(&(omr->messages[omr->msg_toget + PULSE_RING_BUFFER_INCREMENT]), ++ &(omr->messages[omr->msg_toget]), ++ sizeof(PULSE_MSG)*(old_ring_buffer_size - omr->msg_toget) ++ ); ++ omr->msg_toget += PULSE_RING_BUFFER_INCREMENT; ++ } ++ } ++ if (wait) ++ { ++ hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); ++ if (hEvent == INVALID_HANDLE_VALUE) ++ { ++ ERR("can't create event !?\n"); ++ LeaveCriticalSection(&omr->msg_crst); ++ return 0; ++ } ++ /* fast messages have to be added at the start of the queue */ ++ omr->msg_toget = (omr->msg_toget + omr->ring_buffer_size - 1) % omr->ring_buffer_size; ++ ++ omr->messages[omr->msg_toget].msg = msg; ++ omr->messages[omr->msg_toget].param = param; ++ omr->messages[omr->msg_toget].hEvent = hEvent; ++ } ++ else ++ { ++ omr->messages[omr->msg_tosave].msg = msg; ++ omr->messages[omr->msg_tosave].param = param; ++ omr->messages[omr->msg_tosave].hEvent = INVALID_HANDLE_VALUE; ++ omr->msg_tosave = (omr->msg_tosave + 1) % omr->ring_buffer_size; ++ } ++ LeaveCriticalSection(&omr->msg_crst); ++ /* signal a new message */ ++ SIGNAL_OMR(omr); ++ if (wait) ++ { ++ /* wait for playback/record thread to have processed the message */ ++ WaitForSingleObject(hEvent, INFINITE); ++ CloseHandle(hEvent); ++ } ++ return 1; ++} ++ ++/****************************************************************** ++ * PULSE_RetrieveRingMessage ++ * ++ * Get a message from the ring. Should be called by the playback/record thread. ++ */ ++int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, ++ enum win_wm_message *msg, DWORD *param, HANDLE *hEvent) ++{ ++ EnterCriticalSection(&omr->msg_crst); ++ ++ if (omr->msg_toget == omr->msg_tosave) /* buffer empty ? */ ++ { ++ LeaveCriticalSection(&omr->msg_crst); ++ return 0; ++ } ++ ++ *msg = omr->messages[omr->msg_toget].msg; ++ omr->messages[omr->msg_toget].msg = 0; ++ *param = omr->messages[omr->msg_toget].param; ++ *hEvent = omr->messages[omr->msg_toget].hEvent; ++ omr->msg_toget = (omr->msg_toget + 1) % omr->ring_buffer_size; ++ CLEAR_OMR(omr); ++ LeaveCriticalSection(&omr->msg_crst); ++ return 1; ++} ++ ++/************************************************************************** ++ * Utility Functions ++ *************************************************************************/ ++ ++/****************************************************************** ++ * PULSE_SetupFormat ++ * ++ * Checks to see if the audio format in wf is supported, and if so set up the ++ * pa_sample_spec at ss to that format. ++ */ ++BOOL PULSE_SetupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss) { ++ WAVEFORMATEXTENSIBLE *wfex; ++ ++ ss->channels = wf->nChannels; ++ ss->rate = wf->nSamplesPerSec; ++ ss->format = PA_SAMPLE_INVALID; ++ ++ if (ss->rate < DSBFREQUENCY_MIN || ss->rate > DSBFREQUENCY_MAX) return FALSE; ++ ++ switch (wf->wFormatTag) { ++ case WAVE_FORMAT_PCM: ++ if (ss->channels > 2 || ss->channels < 1) return FALSE; ++ ss->format = wf->wBitsPerSample == 8 ? PA_SAMPLE_U8 ++ : wf->wBitsPerSample == 16 ? PA_SAMPLE_S16NE ++ : PA_SAMPLE_INVALID; ++ break; ++ ++ case WAVE_FORMAT_MULAW: ++ if (wf->wBitsPerSample == 8) ss->format = PA_SAMPLE_ULAW; ++ break; ++ ++ case WAVE_FORMAT_ALAW: ++ if (wf->wBitsPerSample == 8) ss->format = PA_SAMPLE_ALAW; ++ break; ++ ++ case WAVE_FORMAT_EXTENSIBLE: ++ if (wf->cbSize > 22) return FALSE; ++ if (ss->channels < 1 || ss->channels > 6) return FALSE; ++ wfex = (WAVEFORMATEXTENSIBLE *)wf; ++ if (IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM)) { ++ if (wf->wBitsPerSample == wfex->Samples.wValidBitsPerSample) { ++ ss->format = wf->wBitsPerSample == 8 ? PA_SAMPLE_U8 ++ : wf->wBitsPerSample == 16 ? PA_SAMPLE_S16NE ++#if PA_PROTOCOL_VERSION >= 15 ++ : wf->wBitsPerSample == 24 ? PA_SAMPLE_S24NE ++#endif ++ : wf->wBitsPerSample == 32 ? PA_SAMPLE_S32NE ++ : PA_SAMPLE_INVALID; ++ } else { ++#if PA_PROTOCOL_VERSION >= 15 ++ if (wf->wBitsPerSample == 32 && wfex->Samples.wValidBitsPerSample == 24) ++ ss->format = PA_SAMPLE_S24_32NE; ++ else ++#endif ++ return FALSE; ++ } ++ } else if (wf->wBitsPerSample != wfex->Samples.wValidBitsPerSample) { ++ return FALSE; ++ } else if ((IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))) { ++ ss->format = PA_SAMPLE_FLOAT32NE; ++ } else { ++ WARN("only KSDATAFORMAT_SUBTYPE_PCM and KSDATAFORMAT_SUBTYPE_IEEE_FLOAT of WAVE_FORMAT_EXTENSIBLE supported\n"); ++ return FALSE; ++ } ++ break; ++ ++ default: ++ WARN("only WAVE_FORMAT_PCM, WAVE_FORMAT_MULAW, WAVE_FORMAT_ALAW and WAVE_FORMAT_EXTENSIBLE supported\n"); ++ return FALSE; ++ } ++ ++ if (!pa_sample_spec_valid(ss)) return FALSE; ++ if (wf->nBlockAlign != pa_frame_size(ss)) { ++ ERR("wf->nBlockAlign != the format frame size!\n"); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++/************************************************************************** ++ * PULSE_GetMMTime [internal] ++ */ ++void PULSE_GetMMTime(const pa_timing_info *t, pa_sample_spec *s, size_t last_reset, LPMMTIME lpTime) { ++ pa_usec_t time, time_temp; ++ size_t bytes, bytes_temp; ++ ++ /* If this is a recording stream we want the write_index and not the read index */ ++ if (last_reset == (size_t) -1) { ++ bytes = t->write_index; ++ last_reset = 0; ++ } else { ++ bytes = t->read_index; ++ if (last_reset > bytes) ++ last_reset = 0; ++ } ++ time = pa_bytes_to_usec(bytes, s); ++ time += pa_timeval_age(&t->timestamp); ++ ++ if (t->playing) { ++ bytes += ((pa_timeval_age(&t->timestamp) / 1000) * pa_bytes_per_second(s)) / 1000; ++ bytes_temp = (time_temp = t->sink_usec + t->transport_usec)/1000 * pa_bytes_per_second(s)/1000; ++ } else { ++ time = 0; ++ time_temp = 0; ++ bytes_temp = 0; ++ } ++ ++ time -= pa_bytes_to_usec(last_reset, s); ++ bytes -= last_reset; ++ if (bytes > bytes_temp) ++ bytes -= bytes_temp; ++ else ++ bytes = 0; ++ ++ if (time > time_temp) ++ time -= time_temp; ++ else ++ time = 0; ++ ++ bytes -= bytes % pa_frame_size(s); ++ time /= 1000; /* In milliseconds now */ ++ ++ switch (lpTime->wType) { ++ case TIME_SAMPLES: ++ lpTime->u.sample = bytes / pa_frame_size(s); ++ TRACE("TIME_SAMPLES=%u\n", lpTime->u.sample); ++ break; ++ case TIME_MS: ++ lpTime->u.ms = time; ++ TRACE("TIME_MS=%u\n", lpTime->u.ms); ++ break; ++ case TIME_SMPTE: ++ lpTime->u.smpte.fps = 30; ++ lpTime->u.smpte.sec = time/1000; ++ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; ++ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; ++ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; ++ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; ++ lpTime->u.smpte.frame = time / lpTime->u.smpte.fps * 1000; ++ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", ++ lpTime->u.smpte.hour, lpTime->u.smpte.min, ++ lpTime->u.smpte.sec, lpTime->u.smpte.frame); ++ break; ++ default: ++ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); ++ lpTime->wType = TIME_BYTES; ++ /* fall through */ ++ case TIME_BYTES: ++ lpTime->u.cb = bytes; ++ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); ++ break; ++ } ++} ++ ++/************************************************************************** ++ * PULSE_WaitForOperation ++ * ++ * Waits for pa operations to complete, and dereferences the operation. ++ */ ++void PULSE_WaitForOperation(pa_operation *o) { ++ if (!o) return; ++ ++ for (;;) { ++ if (pa_operation_get_state(o) != PA_OPERATION_RUNNING) ++ break; ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ pa_operation_unref(o); ++} ++ ++/************************************************************************** ++ * Common Callbacks ++ */ ++ ++/************************************************************************** ++ * PULSE_StreamRequestCallback ++ * ++ * Called by the pulse mainloop whenever it wants or has audio data. ++ */ ++void PULSE_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata) { ++ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; ++ assert(s && ww); ++ ++ TRACE("Asking to feed/be fed %u bytes\n", nbytes); ++ ++ /* Make sure that the player/recorder is running */ ++ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { ++ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); ++ } ++} ++/************************************************************************** ++ * PULSE_StreamSuspendedCallback [internal] ++ * ++ * Called by the pulse mainloop any time stream playback is intentionally ++ * suspended or resumed from being suspended. ++ */ ++void PULSE_StreamSuspendedCallback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ /* Currently we handle this kinda like an underrun. Perhaps we should ++ * tell the client somehow so it doesn't just hang? */ ++ ++ if (!pa_stream_is_suspended(s) && wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); ++} ++ ++/************************************************************************** ++ * PULSE_StreamUnderflowCallback [internal] ++ * ++ * Called by the pulse mainloop when the prebuf runs out of data. ++ */ ++void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ /* If we aren't playing, don't care ^_^ */ ++ if (wwo->state != WINE_WS_PLAYING) return; ++ ++ TRACE("Underrun occurred.\n"); ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0); ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); ++} ++ ++/************************************************************************** ++ * PULSE_StreamOverflowCallback [internal] ++ * ++ * Called by the pulse mainloop when the write buffer was overflowed and data ++ * was lost. ++ */ ++void PULSE_StreamOverflowCallback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ ERR("Overflow occurred!?!\n"); ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0); ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 1, FALSE); ++} ++ ++/************************************************************************** ++ * PULSE_StreamMovedCallback [internal] ++ * ++ * Called by the pulse mainloop when the stream gets moved, resulting in ++ * possibly different metrics. ++ */ ++void PULSE_StreamMovedCallback(pa_stream *s, void *userdata) { ++ FIXME("stub"); ++} ++ ++ ++/****************************************************************** ++ * PULSE_StreamStateCallback ++ * ++ * Called by pulse whenever the state of the stream changes. ++ * ++ * void *userdata is either the dsound or wave instance ++ */ ++void PULSE_StreamStateCallback(pa_stream *s, void *userdata) { ++ assert(s); ++ ++ switch (pa_stream_get_state(s)) { ++ case PA_STREAM_READY: ++ TRACE("Stream %p ready\n", userdata); ++ break; ++ ++ case PA_STREAM_TERMINATED: ++ TRACE("Stream %p terminated\n", userdata); ++ break; ++ ++ case PA_STREAM_FAILED: ++ ERR("Stream %p failed!\n", userdata); ++ break; ++ ++ case PA_STREAM_UNCONNECTED: ++ case PA_STREAM_CREATING: ++ return; ++ } ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_StreamSucessCallback ++ */ ++void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata) { ++ if (!success) ++ WARN("Stream %p operation failed: %s\n", userdata, pa_strerror(pa_context_errno(PULSE_context))); ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_ContextSuccessCallback ++ */ ++void PULSE_ContextSuccessCallback(pa_context *c, int success, void *userdata) { ++ if (!success) ERR("Context operation failed: %s\n", pa_strerror(pa_context_errno(c))); ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * Connection management and sink / source management. ++ */ ++ ++/************************************************************************** ++ * PULSE_ContextStateCallback [internal] ++ */ ++static void PULSE_ContextStateCallback(pa_context *c, void *userdata) { ++ assert(c); ++ ++ switch (pa_context_get_state(c)) { ++ case PA_CONTEXT_CONNECTING: ++ case PA_CONTEXT_AUTHORIZING: ++ case PA_CONTEXT_SETTING_NAME: ++ break; ++ ++ case PA_CONTEXT_READY: ++ case PA_CONTEXT_TERMINATED: ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ break; ++ ++ case PA_CONTEXT_FAILED: ++ default: ++ ERR("Context failure: %s\n", pa_strerror(pa_context_errno(c))); ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ } ++} ++ ++/************************************************************************** ++ * PULSE_SourceInfoCallback [internal] ++ * ++ * Creates or adds a device to WInDev based on the pa_source_info. ++ */ ++ ++static void PULSE_SourceInfoCallback(pa_context *c, const pa_source_info *i, int eol, void *userdata) { ++ DWORD *allocated = (DWORD*)userdata; ++ WINE_WAVEDEV *wdi; ++ ++ if (eol || !i) { ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ return; ++ } ++ ++ if (WInDev) ++ wdi = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * (*allocated + 1)); ++ else ++ wdi = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); ++ ++ if (!wdi) return; ++ ++ WInDev = wdi; ++ wdi = &WInDev[(*allocated)++]; ++ memset(wdi, 0, sizeof(WINE_WAVEDEV)); ++ memset(&(wdi->caps.in), 0, sizeof(wdi->caps.in)); ++ ++ wdi->device_name = pa_xstrdup(i->name); ++ strcpy(wdi->interface_name, "winepulse: "); ++ memcpy(wdi->interface_name + strlen(wdi->interface_name), ++ i->name, min(strlen(i->name), sizeof(wdi->interface_name) - strlen("winepulse: "))); ++ MultiByteToWideChar(CP_ACP, 0, i->description, -1, wdi->caps.in.szPname, sizeof(wdi->caps.in.szPname)/sizeof(WCHAR)); ++ wdi->caps.in.szPname[sizeof(wdi->caps.in.szPname)/sizeof(WCHAR) - 1] = '\0'; ++ wdi->caps.in.wMid = MM_CREATIVE; ++ wdi->caps.in.wPid = MM_CREATIVE_SBP16_WAVEOUT; ++ wdi->caps.in.vDriverVersion = 0x0100; ++ wdi->caps.in.wChannels = i->sample_spec.channels == 1 ? 1 : 2; ++ wdi->caps.in.dwFormats = PULSE_ALL_FORMATS; ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_SinkInfoCallback [internal] ++ * ++ * Creates or adds a sink to the WOutDev array. ++ */ ++static void PULSE_SinkInfoCallback(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { ++ DWORD *allocated = (DWORD*)userdata; ++ WINE_WAVEDEV *wdo; ++ int x; ++ ++ if (eol || !i) { ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ return; ++ } ++ ++ if (WOutDev) ++ wdo = HeapReAlloc(GetProcessHeap(), 0, WOutDev, sizeof(WINE_WAVEDEV) * (*allocated + 1)); ++ else ++ wdo = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); ++ ++ if (!wdo) return; ++ ++ WOutDev = wdo; ++ wdo = &WOutDev[(*allocated)++]; ++ memset(wdo, 0, sizeof(WINE_WAVEDEV)); ++ ++ wdo->device_name = pa_xstrdup(i->name); ++ wdo->volume.channels = i->volume.channels; ++ for (x = 0; x < i->volume.channels; x++) wdo->volume.values[x] = i->volume.values[x]; ++ strcpy(wdo->interface_name, "winepulse: "); ++ memcpy(wdo->interface_name + strlen(wdo->interface_name), ++ i->name, min(strlen(i->name), ++ sizeof(wdo->interface_name) - strlen("winepulse: "))); ++ MultiByteToWideChar(CP_ACP, 0, i->description, -1, wdo->caps.out.szPname, sizeof(wdo->caps.out.szPname)/sizeof(WCHAR)); ++ wdo->caps.out.szPname[sizeof(wdo->caps.out.szPname)/sizeof(WCHAR) - 1] = '\0'; ++ wdo->caps.out.wMid = MM_CREATIVE; ++ wdo->caps.out.wPid = MM_CREATIVE_SBP16_WAVEOUT; ++ wdo->caps.out.vDriverVersion = 0x0100; ++ wdo->caps.out.dwSupport = WAVECAPS_VOLUME | WAVECAPS_SAMPLEACCURATE; ++ if (i->sample_spec.channels == 2) { ++ wdo->caps.out.wChannels = 2; ++ wdo->caps.out.dwSupport |= WAVECAPS_LRVOLUME; ++ } else ++ wdo->caps.out.wChannels = i->sample_spec.channels == 1 ? 1 : 2; ++ wdo->caps.out.dwFormats = PULSE_ALL_FORMATS; ++ memset(&wdo->ds_desc, 0, sizeof(DSDRIVERDESC)); ++ memcpy(wdo->ds_desc.szDesc, i->description, min(sizeof(wdo->ds_desc.szDesc) - 1, strlen(i->description))); ++ strcpy(wdo->ds_desc.szDrvname, "winepulse.drv"); ++ wdo->ds_caps.dwMinSecondarySampleRate = DSBFREQUENCY_MIN; ++ wdo->ds_caps.dwMaxSecondarySampleRate = DSBFREQUENCY_MAX; ++ wdo->ds_caps.dwPrimaryBuffers = 1; ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_UpdateWavedevs [internal] ++ * ++ * Calls PULSE_add_output_device to add the sink to the list of devices ++ */ ++BOOL PULSE_UpdateWavedevs(int devices) { ++ WINE_WAVEDEV *old_devs; ++ DWORD old_numdevs; ++ DWORD rc; ++ HKEY key; ++ BOOL show_monitor_sources = TRUE; ++ ++ rc = RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Wine\\Pulse Driver", 0, KEY_QUERY_VALUE, &key); ++ if (rc == ERROR_SUCCESS) { ++ DWORD type; ++ DWORD bufsize; ++ char *bufp; ++ ++ rc = RegQueryValueExA(key, "MonitorDevices", NULL, &type, NULL, &bufsize); ++ if (rc == ERROR_SUCCESS || type == REG_SZ) { ++ bufp = HeapAlloc(GetProcessHeap(), 0, bufsize); ++ if (bufp) { ++ rc = RegQueryValueExA(key, "MonitorDevices", NULL, NULL, (LPBYTE)bufp, &bufsize); ++ if (rc == ERROR_SUCCESS && ( ++ *bufp == 'n' || *bufp == 'N' || ++ *bufp == 'f' || *bufp == 'F' || ++ *bufp == 'd' || *bufp == 'D' || ++ *bufp == '0')) ++ show_monitor_sources = FALSE; ++ HeapFree(GetProcessHeap(), 0, bufp); ++ } ++ } ++ } ++ if (key) ++ RegCloseKey(key); ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (devices & PULSE_OUT_DEVS) { ++ old_devs = WOutDev; ++ old_numdevs = PULSE_WodNumDevs; ++ WOutDev = NULL; ++ PULSE_WodNumDevs = 0; ++ ++ /* Ask for all the sinks and create objects in the WOutDev array */ ++ PULSE_WaitForOperation(pa_context_get_sink_info_list(PULSE_context, PULSE_SinkInfoCallback, &PULSE_WodNumDevs)); ++ if (PULSE_WodNumDevs) { ++ if (old_devs) ++ HeapFree(GetProcessHeap(), 0, old_devs); ++ TRACE("Allocated %i output device%s.\n", PULSE_WodNumDevs, PULSE_WodNumDevs > 1 ? "s" : ""); ++ } else { ++ WARN("Didn't seem to find any waveout devices upon update, not updating!\n"); ++ if (WOutDev) ++ HeapFree(GetProcessHeap(), 0, WOutDev); ++ WOutDev = old_devs; ++ PULSE_WodNumDevs = old_numdevs; ++ } ++ } ++ ++ if (devices & PULSE_IN_DEVS) { ++ old_devs = WInDev; ++ old_numdevs = PULSE_WidNumDevs; ++ WInDev = NULL; ++ PULSE_WidNumDevs = 0; ++ ++ /* Ask for all the sources and create objects in the WOutDev array */ ++ PULSE_WaitForOperation(pa_context_get_source_info_list(PULSE_context, PULSE_SourceInfoCallback, &PULSE_WidNumDevs)); ++ if (PULSE_WidNumDevs) { ++ if (old_devs) ++ HeapFree(GetProcessHeap(), 0, old_devs); ++ TRACE("Allocated %i input device%s.\n", PULSE_WidNumDevs, PULSE_WidNumDevs > 1 ? "s" : ""); ++ } else { ++ WARN("Didn't seem to find any wavein devices upon update, not updating!\n"); ++ if (WInDev) ++ HeapFree(GetProcessHeap(), 0, WInDev); ++ WInDev = old_devs; ++ PULSE_WidNumDevs = old_numdevs; ++ } ++ ++ /* Swap around the devices so monitor streams come last. */ ++ { ++ int x; ++ int count = 0; ++ WINE_WAVEDEV tmp[PULSE_WidNumDevs]; ++ ++ memcpy(tmp, WInDev, sizeof(WINE_WAVEDEV) * PULSE_WidNumDevs); ++ for (x = 0; x < PULSE_WidNumDevs; x++) { ++ if (!strstr(tmp[x].device_name, ".monitor")) { ++ memcpy(&WInDev[count++], &tmp[x], sizeof(WINE_WAVEDEV)); ++ } ++ } ++ if (show_monitor_sources) { ++ for (x = 0; x < PULSE_WidNumDevs; x++) { ++ if (strstr(tmp[x].device_name, ".monitor")) { ++ memcpy(&WInDev[count++], &tmp[x], sizeof(WINE_WAVEDEV)); ++ } ++ } ++ } ++ if (PULSE_WidNumDevs != count) { ++ TRACE("Removed monitors sources, now have %u input devices.\n", count); ++ WInDev = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * count); ++ PULSE_WidNumDevs = count; ++ } ++ } ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ return TRUE; ++} ++ ++static void PULSE_ContextNotifyCallback(pa_context *c, void *userdata) { ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_WaveClose [internal] ++ * ++ * Disconnect from the server, deallocated the WaveIn/WaveOut devices, stop and ++ * free the mainloop. ++ */ ++ ++static LONG PULSE_WaveClose(void) { ++ TRACE("()\n"); ++ if (!PULSE_ml) return 1; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ HeapFree(GetProcessHeap(), 0, WOutDev); ++ HeapFree(GetProcessHeap(), 0, WInDev); ++ if (PULSE_context) { ++ PULSE_WaitForOperation(pa_context_drain(PULSE_context, PULSE_ContextNotifyCallback, NULL)); ++ pa_context_disconnect(PULSE_context); ++ pa_context_unref(PULSE_context); ++ PULSE_context = NULL; ++ } ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ pa_threaded_mainloop_stop(PULSE_ml); ++ pa_threaded_mainloop_free(PULSE_ml); ++ PULSE_ml = NULL; ++ ++ return DRV_SUCCESS; ++} ++ ++/************************************************************************** ++ * PULSE_WaveInit [internal] ++ * ++ * Connects to the pulseaudio server, tries to discover sinks and sources and ++ * allocates the WaveIn/WaveOut devices. ++ */ ++static LONG PULSE_WaveInit(void) { ++ char *app_name; ++ char path[PATH_MAX]; ++ char *offset = NULL; ++ int x = 0; ++ ++ WOutDev = NULL; ++ WInDev = NULL; ++ PULSE_WodNumDevs = 0; ++ PULSE_WidNumDevs = 0; ++ PULSE_context = NULL; ++ PULSE_ml = NULL; ++ ++ if (!(PULSE_ml = pa_threaded_mainloop_new())) { ++ WARN("Failed to create mainloop object."); ++ return -1; ++ } ++ ++ /* Application name giving to pulse should be unique to the binary so that ++ * pulse-*-restore can be useful */ ++ ++ /* Get binary path, and remove path a-la strrchr */ ++ if (GetModuleFileNameA(NULL, path, PATH_MAX)) ++ for (offset = path; *offset; offset++) ++ if (*offset == '\\') x = offset - path + 1; ++ ++ if (offset || path[x]) { ++ app_name = pa_xmalloc(strlen(path + x) + 8); ++ snprintf(app_name, strlen(path + x) + 8, "WINE [%s]", path + x); ++ } else ++ app_name = pa_xstrdup("WINE Application"); ++ ++ TRACE("App name is \"%s\"\n", app_name); ++ ++ pa_threaded_mainloop_start(PULSE_ml); ++ PULSE_context = pa_context_new(pa_threaded_mainloop_get_api(PULSE_ml), app_name); ++ assert(PULSE_context); ++ pa_xfree(app_name); ++ ++ pa_context_set_state_callback(PULSE_context, PULSE_ContextStateCallback, NULL); ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ TRACE("libpulse protocol version: %u.\n", pa_context_get_protocol_version(PULSE_context)); ++ TRACE("Attempting to connect to pulseaudio server.\n"); ++ if (pa_context_connect(PULSE_context, NULL, 0, NULL) < 0) ++ goto fail; ++ ++ /* Wait for connection */ ++ for (;;) { ++ pa_context_state_t state = pa_context_get_state(PULSE_context); ++ ++ if (state == PA_CONTEXT_FAILED || state == PA_CONTEXT_TERMINATED) ++ goto fail; ++ ++ if (state == PA_CONTEXT_READY) ++ break; ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ ++ x = pa_context_get_server_protocol_version(PULSE_context); ++ TRACE("Connected to server %s with protocol version: %i.\n", pa_context_get_server(PULSE_context), x); ++ if (x < 14) ++ WARN("Server is old, expect poor latency or bugginess!\n"); ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ return DRV_SUCCESS; ++ ++fail: ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ERR("Failed to connect to server\n"); ++ return DRV_FAILURE; ++} ++ ++#endif /* HAVE_PULSEAUDIO */ ++ ++/************************************************************************** ++ * DriverProc (WINEPULSE.@) ++ */ ++LRESULT CALLBACK PULSE_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, ++ LPARAM dwParam1, LPARAM dwParam2) { ++ ++ switch(wMsg) { ++#ifdef HAVE_PULSEAUDIO ++ case DRV_LOAD: PULSE_WaveInit(); ++ return 1; ++ case DRV_FREE: return PULSE_WaveClose(); ++ case DRV_OPEN: return 1; ++ case DRV_CLOSE: return 1; ++ case DRV_ENABLE: return 1; ++ case DRV_DISABLE: return 1; ++ case DRV_QUERYCONFIGURE: return 1; ++ case DRV_CONFIGURE: MessageBoxA(0, "PulseAudio MultiMedia Driver !", "PulseAudio Driver", MB_OK); return 1; ++ case DRV_INSTALL: return DRVCNF_RESTART; ++ case DRV_REMOVE: return DRVCNF_RESTART; ++#endif ++ default: ++ return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2); ++ } ++} +diff --git a/dlls/winepulse.drv/wavein.c b/dlls/winepulse.drv/wavein.c +new file mode 100644 +index 0000000..7024ccd +--- /dev/null ++++ b/dlls/winepulse.drv/wavein.c +@@ -0,0 +1,555 @@ ++/* ++ * Wine Driver for PulseAudio - WaveIn Functionality ++ * http://pulseaudio.org/ ++ * ++ * Copyright 2009 Arthur Taylor ++ * ++ * Contains code from other wine multimedia drivers. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++ ++#include ++ ++#include "windef.h" ++#include "winbase.h" ++#include "wingdi.h" ++#include "winuser.h" ++#include "winnls.h" ++#include "mmddk.h" ++ ++#include ++ ++#include "wine/debug.h" ++ ++WINE_DEFAULT_DEBUG_CHANNEL(wave); ++ ++#if HAVE_PULSEAUDIO ++ ++/*======================================================================* ++ * WAVE IN specific PulseAudio Callbacks * ++ *======================================================================*/ ++ ++/************************************************************************** ++* widNotifyClient [internal] ++*/ ++static DWORD widNotifyClient(WINE_WAVEINST* wwi, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { ++ TRACE("wMsg = 0x%04x dwParm1 = %04X dwParam2 = %04X\n", wMsg, dwParam1, dwParam2); ++ ++ switch (wMsg) { ++ case WIM_OPEN: ++ case WIM_CLOSE: ++ case WIM_DATA: ++ if (wwi->wFlags != DCB_NULL && ++ !DriverCallback(wwi->waveDesc.dwCallback, wwi->wFlags, (HDRVR)wwi->waveDesc.hWave, ++ wMsg, wwi->waveDesc.dwInstance, dwParam1, dwParam2)) { ++ WARN("can't notify client !\n"); ++ return MMSYSERR_ERROR; ++ } ++ break; ++ default: ++ FIXME("Unknown callback message %u\n", wMsg); ++ return MMSYSERR_INVALPARAM; ++ } ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widRecorder_CopyData [internal] ++ * ++ * Copys data from the fragments pulse returns to queued buffers. ++ */ ++static void widRecorder_CopyData(WINE_WAVEINST *wwi) { ++ LPWAVEHDR lpWaveHdr = wwi->lpQueuePtr; ++ size_t size; ++ while (lpWaveHdr && wwi->state == WINE_WS_PLAYING && wwi->buffer) { ++ size = min(wwi->buffer_length - wwi->buffer_read_offset, lpWaveHdr->dwBufferLength - lpWaveHdr->dwBytesRecorded); ++ if (size == 0) { ERR("Size is 0! buffer is full but not freed?\n"); continue; } ++ memcpy(lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded, (PBYTE)wwi->buffer + wwi->buffer_read_offset, size); ++ wwi->buffer_read_offset += size; ++ if (wwi->buffer_read_offset == wwi->buffer_length) { ++ pa_stream_drop(wwi->stream); ++ wwi->buffer = NULL; ++ wwi->buffer_length = 0; ++ wwi->buffer_read_offset = 0; ++ } ++ lpWaveHdr->dwBytesRecorded += size; ++ if (lpWaveHdr->dwBytesRecorded == lpWaveHdr->dwBufferLength) { ++ wwi->lpQueuePtr = lpWaveHdr->lpNext; ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); ++ lpWaveHdr = wwi->lpQueuePtr; ++ } ++ } ++} ++ ++/************************************************************************** ++* widRecorder_NextFragment [internal] ++* ++* Switches the current fragment to the next based upon a message from the ++* server. ++*/ ++static void widRecorder_NextFragment(WINE_WAVEINST *wwi, size_t size) { ++ widRecorder_CopyData(wwi); ++ if (wwi->buffer) { ++ if (wwi->buffer_read_offset != wwi->buffer_length) ++ ERR("We didn't read all of the data, there will be gaps. FO:%u, FS: %u\n", wwi->buffer_read_offset, wwi->buffer_length); ++ pa_stream_drop(wwi->stream); ++ wwi->buffer = NULL; ++ wwi->buffer_length = 0; ++ wwi->buffer_read_offset = 0; ++ } ++ pa_stream_peek(wwi->stream, &wwi->buffer, &size); ++ wwi->buffer_length = size; ++ wwi->buffer_read_offset = 0; ++} ++ ++/************************************************************************** ++ * widRecorder [internal] ++ */ ++static DWORD CALLBACK widRecorder(LPVOID lpParam) { ++ WINE_WAVEINST *wwi = (WINE_WAVEINST*)lpParam; ++ LPWAVEHDR lpWaveHdr; ++ enum win_wm_message msg; ++ DWORD param; ++ HANDLE ev; ++ ++ wwi->state = WINE_WS_STOPPED; ++ SetEvent(wwi->hStartUpEvent); ++ ++ for (;;) { ++ PULSE_WaitRingMessage(&wwi->msgRing, INFINITE); ++ while (PULSE_RetrieveRingMessage(&wwi->msgRing, &msg, ¶m, &ev)) { ++ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); ++ ++ switch (msg) { ++ case WINE_WM_FEED: ++ SetEvent(ev); ++ if (wwi->state == WINE_WS_PLAYING) ++ widRecorder_NextFragment(wwi, param); ++ else ++ (pa_stream_drop(wwi->stream)); ++ break; ++ case WINE_WM_STARTING: ++ wwi->state = WINE_WS_PLAYING; ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 0, PULSE_StreamSuccessCallback, NULL)); ++ SetEvent(ev); ++ break; ++ case WINE_WM_HEADER: ++ lpWaveHdr = (LPWAVEHDR)param; ++ lpWaveHdr->lpNext = 0; ++ ++ /* insert buffer at the end of queue */ ++ { ++ LPWAVEHDR* wh; ++ for (wh = &(wwi->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); ++ *wh = lpWaveHdr; ++ } ++ break; ++ case WINE_WM_STOPPING: ++ if (wwi->state != WINE_WS_STOPPED) { ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); ++ pa_stream_drop(wwi->stream); ++ ++ /* return current buffer to app */ ++ lpWaveHdr = wwi->lpQueuePtr; ++ if (lpWaveHdr) { ++ LPWAVEHDR lpNext = lpWaveHdr->lpNext; ++ TRACE("stop %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ wwi->lpQueuePtr = lpNext; ++ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); ++ } ++ } ++ wwi->state = WINE_WS_STOPPED; ++ SetEvent(ev); ++ break; ++ case WINE_WM_RESETTING: ++ if (wwi->state != WINE_WS_STOPPED) ++ pa_stream_drop(wwi->stream); ++ wwi->state = WINE_WS_STOPPED; ++ ++ /* return all buffers to the app */ ++ for (lpWaveHdr = wwi->lpQueuePtr; lpWaveHdr; lpWaveHdr = lpWaveHdr->lpNext) { ++ TRACE("reset %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ wwi->lpQueuePtr = lpWaveHdr->lpNext; ++ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); ++ } ++ ++ wwi->lpQueuePtr = NULL; ++ SetEvent(ev); ++ break; ++ case WINE_WM_XRUN: ++ pa_stream_drop(wwi->stream); ++ wwi->buffer_read_offset = 0; ++ break; ++ case WINE_WM_CLOSING: ++ wwi->hThread = 0; ++ if ((DWORD)param == 1) { ++ wwi->state = WINE_WS_FAILED; ++ SetEvent(ev); ++ PULSE_DestroyRingMessage(&wwi->msgRing); ++ widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); ++ wwi->lpPlayPtr = wwi->lpQueuePtr = NULL; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_disconnect(wwi->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ TRACE("Thread exiting because of failure.\n"); ++ ExitThread(1); ++ } ++ wwi->state = WINE_WS_CLOSED; ++ SetEvent(ev); ++ ExitThread(0); ++ /* shouldn't go here */ ++ default: ++ FIXME("unknown message %d\n", msg); ++ break; ++ } ++ } ++ ++ widRecorder_CopyData(wwi); ++ ++} /* for (;;) */ ++} ++ ++/************************************************************************** ++ * widOpen [internal] ++ */ ++static DWORD widOpen(WORD wDevID, LPDWORD lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { ++ WINE_WAVEDEV *wdi; ++ WINE_WAVEINST *wwi = NULL; ++ DWORD ret = MMSYSERR_NOERROR; ++ ++ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); ++ if (lpDesc == NULL) { ++ WARN("Invalid Parameter !\n"); ++ return MMSYSERR_INVALPARAM; ++ } ++ ++ if (wDevID >= PULSE_WidNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WidNumDevs); ++ return MMSYSERR_BADDEVICEID; ++ } ++ wdi = &WInDev[wDevID]; ++ ++ wwi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_WAVEINST)); ++ if (!wwi) return MMSYSERR_NOMEM; ++ *lpdwUser = (DWORD)wwi; ++ ++ /* check to see if format is supported and make pa_sample_spec struct */ ++ if (!PULSE_SetupFormat(lpDesc->lpFormat, &wwi->sample_spec)) { ++ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ ret = WAVERR_BADFORMAT; ++ goto exit; ++ } ++ ++ if (TRACE_ON(wave)) { ++ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; ++ pa_sample_spec_snprint(t, sizeof(t), &wwi->sample_spec); ++ TRACE("Sample spec '%s'\n", t); ++ } ++ ++ if (dwFlags & WAVE_FORMAT_QUERY) { ++ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ ret = MMSYSERR_NOERROR; ++ goto exit; ++ } ++ ++ wwi->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); ++ wwi->waveDesc = *lpDesc; ++ PULSE_InitRingMessage(&wwi->msgRing); ++ ++ wwi->stream = pa_stream_new(PULSE_context, "WaveIn", &wwi->sample_spec, NULL); ++ if (!wwi->stream) { ++ ret = WAVERR_BADFORMAT; ++ goto exit; ++ } ++ ++ pa_stream_set_state_callback(wwi->stream, PULSE_StreamStateCallback, wwi); ++ pa_stream_set_read_callback(wwi->stream, PULSE_StreamRequestCallback, wwi); ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ TRACE("Asking to open %s for recording.\n", wdi->device_name); ++ pa_stream_connect_record(wwi->stream, wdi->device_name, NULL, PA_STREAM_START_CORKED | PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_INTERPOLATE_TIMING); ++ for (;;) { ++ pa_context_state_t cstate = pa_context_get_state(PULSE_context); ++ pa_stream_state_t sstate = pa_stream_get_state(wwi->stream); ++ ++ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || ++ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { ++ ERR("Failed to connect context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); ++ ret = MMSYSERR_NODRIVER; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ goto exit; ++ } ++ ++ if (sstate == PA_STREAM_READY) ++ break; ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ TRACE("(%p)->stream connected for recording.\n", wwi); ++ ++ PULSE_WaitForOperation(pa_stream_update_timing_info(wwi->stream, PULSE_StreamSuccessCallback, wwi)); ++ ++ wwi->timing_info = pa_stream_get_timing_info(wwi->stream); ++ assert(wwi->timing_info); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ wwi->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); ++ wwi->hThread = CreateThread(NULL, 0, widRecorder, (LPVOID)wwi, 0, &(wwi->dwThreadID)); ++ if (wwi->hThread) ++ SetThreadPriority(wwi->hThread, THREAD_PRIORITY_TIME_CRITICAL); ++ else { ++ ERR("Thread creation for the widRecorder failed!\n"); ++ ret = MMSYSERR_NOMEM; ++ goto exit; ++ } ++ WaitForSingleObject(wwi->hStartUpEvent, INFINITE); ++ CloseHandle(wwi->hStartUpEvent); ++ wwi->hStartUpEvent = INVALID_HANDLE_VALUE; ++ ++ return widNotifyClient(wwi, WIM_OPEN, 0L, 0L); ++ ++exit: ++ if (!wwi) ++ return ret; ++ ++ if (wwi->hStartUpEvent != INVALID_HANDLE_VALUE) ++ CloseHandle(wwi->hStartUpEvent); ++ ++ if (wwi->msgRing.ring_buffer_size > 0) ++ PULSE_DestroyRingMessage(&wwi->msgRing); ++ ++ if (wwi->stream) { ++ if (pa_stream_get_state(wwi->stream) == PA_STREAM_READY) ++ pa_stream_disconnect(wwi->stream); ++ pa_stream_unref(wwi->stream); ++ } ++ HeapFree(GetProcessHeap(), 0, wwi); ++ ++ return ret; ++} ++/************************************************************************** ++ * widClose [internal] ++ */ ++static DWORD widClose(WORD wDevID, WINE_WAVEINST *wwi) { ++ DWORD ret; ++ ++ TRACE("(%u, %p);\n", wDevID, wwi); ++ if (wDevID >= PULSE_WidNumDevs) { ++ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } else if (!wwi) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (wwi->state != WINE_WS_FAILED) { ++ if (wwi->lpQueuePtr) { ++ WARN("buffers recording recording !\n"); ++ return WAVERR_STILLPLAYING; ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (pa_stream_get_state(wwi->stream) == PA_STREAM_READY) ++ pa_stream_drop(wwi->stream); ++ pa_stream_disconnect(wwi->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ if (wwi->hThread != INVALID_HANDLE_VALUE) ++ PULSE_AddRingMessage(&wwi->msgRing, WINE_WM_CLOSING, 0, TRUE); ++ ++ PULSE_DestroyRingMessage(&wwi->msgRing); ++ } ++ ret = widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); ++ ++ pa_stream_unref(wwi->stream); ++ TRACE("Deallocating record instance.\n"); ++ HeapFree(GetProcessHeap(), 0, wwi); ++ return ret; ++} ++ ++/************************************************************************** ++ * widAddBuffer [internal] ++ * ++ */ ++static DWORD widAddBuffer(WINE_WAVEINST* wwi, LPWAVEHDR lpWaveHdr, DWORD dwSize) { ++ TRACE("(%p, %p, %08X);\n", wwi, lpWaveHdr, dwSize); ++ ++ if (!wwi || wwi->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) ++ return WAVERR_UNPREPARED; ++ ++ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) ++ return WAVERR_STILLPLAYING; ++ ++ lpWaveHdr->dwFlags &= ~WHDR_DONE; ++ lpWaveHdr->dwFlags |= WHDR_INQUEUE; ++ lpWaveHdr->dwBytesRecorded = 0; ++ lpWaveHdr->lpNext = 0; ++ ++ PULSE_AddRingMessage(&wwi->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); ++ ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widRecorderMessage [internal] ++ */ ++static DWORD widRecorderMessage(WINE_WAVEINST *wwi, enum win_wm_message message) { ++ if (!wwi || wwi->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwi->msgRing, message, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widGetPosition [internal] ++ */ ++static DWORD widGetPosition(WINE_WAVEINST *wwi, LPMMTIME lpTime, DWORD uSize) { ++ if (!wwi || wwi->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpTime == NULL) return MMSYSERR_INVALPARAM; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_GetMMTime(wwi->timing_info, &wwi->sample_spec, (size_t)-1, lpTime); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widGetDevCaps [internal] ++ */ ++static DWORD widGetDevCaps(DWORD wDevID, LPWAVEINCAPSW lpCaps, DWORD dwSize) { ++ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); ++ ++ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; ++ ++ if (wDevID >= PULSE_WidNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WidNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ memcpy(lpCaps, &(WInDev[wDevID].caps.in), min(dwSize, sizeof(*lpCaps))); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widGetNumDevs [internal] ++ * Context-sanity check here, as if we respond with 0, WINE will move on ++ * to the next wavein driver. ++ */ ++static DWORD widGetNumDevs() { ++ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) ++ return 0; ++ ++ PULSE_UpdateWavedevs(PULSE_IN_DEVS); ++ ++ return PULSE_WidNumDevs; ++} ++ ++/************************************************************************** ++ * widDevInterfaceSize [internal] ++ */ ++static DWORD widDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { ++ TRACE("(%u, %p)\n", wDevID, dwParam1); ++ ++ *dwParam1 = MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, ++ NULL, 0 ) * sizeof(WCHAR); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widDevInterface [internal] ++ */ ++static DWORD widDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { ++ if (dwParam2 >= MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, ++ NULL, 0 ) * sizeof(WCHAR)) ++ { ++ MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, ++ dwParam1, dwParam2 / sizeof(WCHAR)); ++ return MMSYSERR_NOERROR; ++ } ++ return MMSYSERR_INVALPARAM; ++} ++ ++/************************************************************************** ++ * widMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_widMessage(UINT wDevID, UINT wMsg, DWORD dwUser, ++ DWORD dwParam1, DWORD dwParam2) { ++ ++ switch (wMsg) { ++ case DRVM_INIT: ++ case DRVM_EXIT: ++ case DRVM_ENABLE: ++ case DRVM_DISABLE: ++ /* FIXME: Pretend this is supported */ ++ return 0; ++ case WIDM_OPEN: return widOpen (wDevID, (LPDWORD)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); ++ case WIDM_CLOSE: return widClose (wDevID, (WINE_WAVEINST*)dwUser); ++ case WIDM_ADDBUFFER: return widAddBuffer ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); ++ case WIDM_PREPARE: return MMSYSERR_NOTSUPPORTED; ++ case WIDM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; ++ case WIDM_GETDEVCAPS: return widGetDevCaps (wDevID, (LPWAVEINCAPSW)dwParam1, dwParam2); ++ case WIDM_GETNUMDEVS: return widGetNumDevs (); ++ case WIDM_GETPOS: return widGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); ++ case WIDM_RESET: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_RESETTING); ++ case WIDM_START: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_STARTING); ++ case WIDM_STOP: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_STOPPING); ++ case DRV_QUERYDEVICEINTERFACESIZE: return widDevInterfaceSize (wDevID, (LPDWORD)dwParam1); ++ case DRV_QUERYDEVICEINTERFACE: return widDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); ++ case DRV_QUERYDSOUNDIFACE: return 0; ++ case DRV_QUERYDSOUNDDESC: return 0; ++ default: ++ FIXME("unknown message %d!\n", wMsg); ++ } ++ return MMSYSERR_NOTSUPPORTED; ++} ++ ++#else /* HAVE_PULSEAUDIO */ ++ ++/************************************************************************** ++ * widMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_widMessage(WORD wDevID, WORD wMsg, DWORD dwUser, ++ DWORD dwParam1, DWORD dwParam2) { ++// FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); ++ return MMSYSERR_NOTENABLED; ++} ++ ++#endif /* HAVE_PULSEAUDIO */ +diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c +new file mode 100644 +index 0000000..968d1bd +--- /dev/null ++++ b/dlls/winepulse.drv/waveout.c +@@ -0,0 +1,1098 @@ ++/* ++ * Wine Driver for PulseAudio - WaveOut Functionality ++ * http://pulseaudio.org/ ++ * ++ * Copyright 2009 Arthur Taylor ++ * ++ * Contains code from other wine multimedia drivers. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++ ++#include ++ ++#include "windef.h" ++#include "winbase.h" ++#include "wingdi.h" ++#include "winuser.h" ++#include "winnls.h" ++#include "winerror.h" ++#include "mmddk.h" ++#include "mmreg.h" ++ ++#include ++ ++#include "wine/debug.h" ++ ++WINE_DEFAULT_DEBUG_CHANNEL(wave); ++ ++#if HAVE_PULSEAUDIO ++ ++/* state diagram for waveOut writing: ++ * ++ * +---------+-------------+---------------+---------------------------------+ ++ * | state | function | event | new state | ++ * +---------+-------------+---------------+---------------------------------+ ++ * | | open() | | STOPPED | ++ * | PAUSED | write() | | PAUSED | ++ * | STOPPED | write() | | PLAYING | ++ * | PLAYING | write() | HEADER | PLAYING | ++ * | (other) | write() | | | ++ * | (any) | pause() | PAUSING | PAUSED | ++ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | ++ * | PAUSED | reset() | RESETTING | PAUSED | ++ * | (other) | reset() | RESETTING | STOPPED | ++ * | (any) | close() | CLOSING | CLOSED | ++ * +---------+-------------+---------------+---------------------------------+ ++ */ ++ ++/* ++ * - It is currently unknown if pausing in a loop works the same as expected. ++ */ ++ ++/*======================================================================* ++ * WAVE OUT specific PulseAudio Callbacks * ++ *======================================================================*/ ++ ++/************************************************************************** ++ * WAVEOUT_StreamStartedCallback [internal] ++ * ++ * Called by the pulse mainloop whenever stream playback resumes after an ++ * underflow or an initial start. Requires libpulse >= 0.9.11 ++ */ ++#if PA_API_VERSION >= 12 ++static void WAVEOUT_StreamStartedCallback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ TRACE("Audio flowing.\n"); ++ ++ if (wwo->buffer_attr.tlength == 0) ++ wwo->buffer_attr.tlength = (uint32_t) -1; ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size) { ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_STARTING, 0, FALSE); ++ } ++} ++#endif ++/************************************************************************** ++ * WAVEOUT_StreamTimingInfoUpdateCallback [internal] ++ * ++ * Called by the pulse mainloop whenever the timing info gets updated, we ++ * use this to send the started signal */ ++static void WAVEOUT_StreamTimingInfoUpdateCallback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ if (!wwo->is_releasing && wwo->timing_info && wwo->timing_info->playing) { ++ TRACE("Audio flowing.\n"); ++ ++ if (wwo->buffer_attr.tlength == 0) ++ wwo->buffer_attr.tlength = (uint32_t) -1; ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_STARTING, 0, FALSE); ++ } ++} ++ ++ ++static void WAVEOUT_SinkInputInfoCallback(pa_context *c, const pa_sink_input_info *i, int eol, void *userdata) { ++ WINE_WAVEINST* wwo = (WINE_WAVEINST*)userdata; ++ if (!eol && i) { ++ for (wwo->volume.channels = 0; wwo->volume.channels != i->volume.channels; wwo->volume.channels++) ++ wwo->volume.values[wwo->volume.channels] = i->volume.values[wwo->volume.channels]; ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ } ++} ++ ++/*======================================================================* ++ * "Low level" WAVE OUT implementation * ++ *======================================================================*/ ++ ++/************************************************************************** ++ * wodPlayer_NotifyClient [internal] ++ */ ++static DWORD wodPlayer_NotifyClient(WINE_WAVEINST* wwi, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { ++ TRACE("wMsg = 0x%04x dwParm1 = %04X dwParam2 = %04X\n", wMsg, dwParam1, dwParam2); ++ ++ switch (wMsg) { ++ case WOM_OPEN: ++ case WOM_CLOSE: ++ case WOM_DONE: ++ if (wwi->wFlags != DCB_NULL && ++ !DriverCallback(wwi->waveDesc.dwCallback, wwi->wFlags, (HDRVR)wwi->waveDesc.hWave, ++ wMsg, wwi->waveDesc.dwInstance, dwParam1, dwParam2)) { ++ WARN("can't notify client !\n"); ++ return MMSYSERR_ERROR; ++ } ++ break; ++ default: ++ FIXME("Unknown callback message %u\n", wMsg); ++ return MMSYSERR_INVALPARAM; ++ } ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodPlayer_BeginWaveHdr [internal] ++ * ++ * Makes the specified lpWaveHdr the currently playing wave header. ++ * If the specified wave header is a begin loop and we're not already in ++ * a loop, setup the loop. ++ */ ++static void wodPlayer_BeginWaveHdr(WINE_WAVEINST* wwo, LPWAVEHDR lpWaveHdr) { ++ wwo->lpPlayPtr = lpWaveHdr; ++ ++ if (!lpWaveHdr) return; ++ ++ if (lpWaveHdr->dwFlags & WHDR_BEGINLOOP) { ++ if (wwo->lpLoopPtr) { ++ WARN("Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr); ++ } else { ++ TRACE("Starting loop (%dx) with %p\n", lpWaveHdr->dwLoops, lpWaveHdr); ++ wwo->lpLoopPtr = lpWaveHdr; ++ /* Windows does not touch WAVEHDR.dwLoops, ++ * so we need to make an internal copy */ ++ wwo->dwLoops = lpWaveHdr->dwLoops; ++ } ++ } ++ wwo->dwPartialOffset = 0; ++} ++ ++/************************************************************************** ++ * wodPlayer_PlayPtrNext [internal] ++ * ++ * Advance the play pointer to the next waveheader, looping if required. ++ */ ++static LPWAVEHDR wodPlayer_PlayPtrNext(WINE_WAVEINST* wwo) { ++ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; ++ ++ wwo->dwPartialOffset = 0; ++ if ((lpWaveHdr->dwFlags & WHDR_ENDLOOP) && wwo->lpLoopPtr) { ++ /* We're at the end of a loop, loop if required */ ++ if (--wwo->dwLoops > 0) { ++ wwo->lpPlayPtr = wwo->lpLoopPtr; ++ } else { ++ /* Handle overlapping loops correctly */ ++ if (wwo->lpLoopPtr != lpWaveHdr && (lpWaveHdr->dwFlags & WHDR_BEGINLOOP)) { ++ FIXME("Correctly handled case ? (ending loop buffer also starts a new loop)\n"); ++ /* shall we consider the END flag for the closing loop or for ++ * the opening one or for both ??? ++ * code assumes for closing loop only ++ */ ++ } else { ++ lpWaveHdr = lpWaveHdr->lpNext; ++ } ++ wwo->lpLoopPtr = NULL; ++ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr); ++ } ++ } else { ++ /* We're not in a loop. Advance to the next wave header */ ++ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr = lpWaveHdr->lpNext); ++ } ++ ++ return lpWaveHdr; ++} ++ ++/************************************************************************** ++ * wodPlayer_CheckReleasing [internal] ++ * ++ * Check to make sure that playback has not stalled ++ */ ++static void wodPlayer_CheckReleasing(WINE_WAVEINST *wwo) { ++ LPWAVEHDR lpWaveHdr = wwo->lpQueuePtr; ++ ++ /* If we aren't playing, and we have queued data and we aren't relasing, ++ * start releasing if either: ++ * - We have stopped being given wavehdrs, or ++ * - We have 2s worth of audio built up.*/ ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (!wwo->timing_info->playing && ++ (pa_bytes_to_usec(lpWaveHdr->dwBufferLength, &wwo->sample_spec)/2 < pa_timeval_age(&wwo->last_header)|| ++ wwo->timing_info->write_index - wwo->releasing_offset > pa_bytes_per_second(&wwo->sample_spec)*2)) { ++ ++ /* Try and adjust the buffer attributes so there is less latency. ++ * Because of bugs this call does not work on older servers. Once ++ * new version of pulseaudio become ubiquitous we will drop support for ++ * versions before 0.9.15 because they have too many bugs.*/ ++ if (wwo->buffer_attr.tlength == 0 && ++ pa_context_get_server_protocol_version(PULSE_context) >= 15) { ++ wwo->buffer_attr.tlength = wwo->timing_info->write_index; ++ wwo->buffer_attr.prebuf = (uint32_t) -1; ++ wwo->buffer_attr.minreq = (uint32_t) -1; ++ wwo->buffer_attr.maxlength = (uint32_t) -1; ++ WARN("Asking for new buffer tlength of %u.\n", wwo->buffer_attr.tlength); ++ pa_stream_set_buffer_attr(wwo->stream, &wwo->buffer_attr, PULSE_StreamSuccessCallback, wwo); ++ } else { ++ /* Fake playback start earlier, introducing latency */ ++ pa_gettimeofday(&wwo->started_releasing); ++ wwo->is_releasing = TRUE; ++ wwo->releasing_offset = wwo->lpQueuePtr->reserved; ++ TRACE("Starting to release early: %u\n", wwo->releasing_offset); ++ } ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++} ++ ++/************************************************************************** ++ * wodPlayer_NotifyCompletions [internal] ++ * ++ * Notifies and remove from queue all wavehdrs which have been played to ++ * the speaker based on a reference time of (theoretical) playback start. If ++ * force is true, we notify all wavehdrs and remove them all from the queue ++ * even if they are unplayed or part of a loop. We return the time to wait ++ * until the next wavehdr needs to be freed, or INFINITE if there are no more ++ * wavehdrs. We use timevals rather than the stream position data that pulse ++ * gives us as realeasing needs to be constant and smooth for good application ++ * behaviour. ++ */ ++static DWORD wodPlayer_NotifyCompletions(WINE_WAVEINST* wwo, BOOL force) { ++ LPWAVEHDR lpWaveHdr; ++ pa_usec_t time; ++ pa_usec_t wait; ++ ++ time = pa_bytes_to_usec(wwo->releasing_offset, &wwo->sample_spec); ++ if (wwo->is_releasing) ++ time += pa_timeval_age(&wwo->started_releasing); ++ ++ for (lpWaveHdr = wwo->lpQueuePtr; lpWaveHdr;) { ++ if (!force) { ++ /* Start from lpQueuePtr and keep notifying until: ++ * - we hit an unwritten wavehdr ++ * - we hit the beginning of a running loop ++ * - we hit a wavehdr which hasn't finished playing ++ */ ++ if (lpWaveHdr == wwo->lpPlayPtr) { TRACE("play %p\n", lpWaveHdr); return INFINITE; } ++ if (lpWaveHdr == wwo->lpLoopPtr) { TRACE("loop %p\n", lpWaveHdr); return INFINITE; } ++ ++ /* See if this data has been played, and if not, return when it will have been */ ++ wait = pa_bytes_to_usec(lpWaveHdr->reserved + lpWaveHdr->dwBufferLength, &wwo->sample_spec); ++ if (wait >= time) { ++ wait = ((wait - time) + 999) / 1000; ++ return wait ?: 1; ++ } ++ } ++ ++ /* return the wavehdr */ ++ wwo->lpQueuePtr = lpWaveHdr->lpNext; ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ ++ wodPlayer_NotifyClient(wwo, WOM_DONE, (DWORD)lpWaveHdr, 0); ++ lpWaveHdr = wwo->lpQueuePtr; ++ } ++ /* No more wavehdrs */ ++ TRACE("Empty queue\n"); ++ return INFINITE; ++} ++ ++/************************************************************************** ++ * wodPlayer_WriteMax [internal] ++ * ++ * 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) { ++ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; ++ size_t toWrite = min(lpWaveHdr->dwBufferLength - wwo->dwPartialOffset, *space); ++ ++ if (toWrite > 0 && pa_stream_write(wwo->stream, lpWaveHdr->lpData + wwo->dwPartialOffset, toWrite, NULL, 0, PA_SEEK_RELATIVE) >= 0) ++ TRACE("Writing wavehdr %p.%u[%u]\n", lpWaveHdr, wwo->dwPartialOffset, lpWaveHdr->dwBufferLength); ++ else ++ return 0; ++ ++ /* Check to see if we wrote all of the wavehdr */ ++ if ((wwo->dwPartialOffset += toWrite) >= lpWaveHdr->dwBufferLength) ++ wodPlayer_PlayPtrNext(wwo); ++ ++ *space -= toWrite; ++ ++ return toWrite; ++} ++ ++/************************************************************************** ++ * wodPlayer_Feed [internal] ++ * ++ * Feed as much sound data as we can into pulse using wodPlayer_WriteMax. ++ * size_t space _must_ have come from either pa_stream_writable_size() or ++ * the value from a stream write callback, as if it isn't you run the risk ++ * of a buffer overflow in which audio data will be lost. ++ */ ++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 || ++ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) ++ return; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ /* Feed from a partial wavehdr */ ++ if (wwo->lpPlayPtr && wwo->dwPartialOffset != 0) ++ wodPlayer_WriteMax(wwo, &space); ++ ++ /* Feed wavehdrs until we run out of wavehdrs or buffer space */ ++ 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); ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++} ++ ++/************************************************************************** ++ * wodPlayer_Reset [internal] ++ * ++ * wodPlayer helper. Resets current output stream. ++ */ ++static void wodPlayer_Reset(WINE_WAVEINST* wwo) { ++ enum win_wm_message msg; ++ DWORD param; ++ HANDLE ev; ++ ++ TRACE("(%p)\n", wwo); ++ ++ /* remove any buffer */ ++ wodPlayer_NotifyCompletions(wwo, TRUE); ++ ++ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; ++ if (wwo->state != WINE_WS_PAUSED) ++ wwo->state = WINE_WS_STOPPED; ++ wwo->dwPartialOffset = 0; ++ ++ if (!wwo->stream || ++ !PULSE_context || ++ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) { ++ return; ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ /* flush the output buffer of written data*/ ++ PULSE_WaitForOperation(pa_stream_flush(wwo->stream, PULSE_StreamSuccessCallback, NULL)); ++ ++ /* Reset the written byte count as some data may have been flushed */ ++ if (wwo->timing_info->write_index_corrupt) ++ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ wwo->releasing_offset = wwo->last_reset = wwo->timing_info->write_index; ++ if (wwo->is_releasing) ++ pa_gettimeofday(&wwo->started_releasing); ++ ++ /* return all pending headers in queue */ ++ EnterCriticalSection(&wwo->msgRing.msg_crst); ++ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { ++ if (msg != WINE_WM_HEADER) { ++ SetEvent(ev); ++ continue; ++ } ++ ((LPWAVEHDR)param)->dwFlags &= ~WHDR_INQUEUE; ++ ((LPWAVEHDR)param)->dwFlags |= WHDR_DONE; ++ wodPlayer_NotifyClient(wwo, WOM_DONE, param, 0); ++ } ++ PULSE_ResetRingMessage(&wwo->msgRing); ++ LeaveCriticalSection(&wwo->msgRing.msg_crst); ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++} ++ ++/************************************************************************** ++ * wodPlayer_Underrun [internal] ++ * ++ * wodPlayer helper. Deal with a stream underrun. ++ */ ++static void wodPlayer_Underrun(WINE_WAVEINST* wwo) { ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ /* Ask for a timing update */ ++ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ ++ /* See if we recovered while the message was waiting in the queue */ ++ if (wwo->timing_info->playing) { ++ TRACE("False alarm\n"); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return; ++ } ++ ++ if (wwo->lpPlayPtr) { ++ size_t space; ++ ++ TRACE("There is queued data. Trying to recover.\n"); ++ ++ /* Ask for a timing update */ ++ if (wwo->timing_info->write_index_corrupt) ++ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ space = pa_stream_writable_size(wwo->stream); ++ wodPlayer_Feed(wwo, space); ++ } ++ WARN("Stream underrun!\n"); ++ wwo->is_releasing = FALSE; ++ wwo->releasing_offset = wwo->timing_info->write_index; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++} ++ ++ ++/************************************************************************** ++ * wodPlayer_ProcessMessages [internal] ++ */ ++static void wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { ++ LPWAVEHDR lpWaveHdr; ++ enum win_wm_message msg; ++ DWORD param; ++ HANDLE ev; ++ ++ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { ++ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); ++ ++ switch (msg) { ++ case WINE_WM_PAUSING: ++ wwo->state = WINE_WS_PAUSED; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwo->stream, 1, PULSE_StreamSuccessCallback, wwo)); ++ /* save how far we are, as releasing will restart from here */ ++ if (wwo->is_releasing) ++ wwo->releasing_offset = wwo->timing_info->write_index; ++ wwo->is_releasing = FALSE; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_RESTARTING: ++ if (wwo->state == WINE_WS_PAUSED) { ++ 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 */ ++ PULSE_WaitForOperation(pa_stream_trigger(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_HEADER: ++ lpWaveHdr = (LPWAVEHDR)param; ++ /* insert buffer at the end of queue */ ++ { ++ LPWAVEHDR* wh; ++ for (wh = &(wwo->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); ++ *wh = lpWaveHdr; ++ } ++ ++ if (!wwo->lpPlayPtr) ++ wodPlayer_BeginWaveHdr(wwo,lpWaveHdr); ++ if (wwo->state == WINE_WS_STOPPED) ++ wwo->state = WINE_WS_PLAYING; ++ ++ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); ++ if (!wwo->timing_info->playing && !wwo->is_releasing) ++ pa_gettimeofday(&wwo->last_header); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_RESETTING: ++ wodPlayer_Reset(wwo); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_BREAKLOOP: ++ if (wwo->state == WINE_WS_PLAYING && wwo->lpLoopPtr != NULL) ++ /* ensure exit at end of current loop */ ++ wwo->dwLoops = 1; ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_FEED: /* Sent by the pulse thread */ ++ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_XRUN: /* Sent by the pulse thread */ ++ if ((DWORD)param == 1) { ++ ERR("Buffer overflow!\n"); ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_drain(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ wwo->is_releasing = FALSE; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } else ++ wodPlayer_Underrun(wwo); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_STARTING: /* Sent by the pulse thread */ ++ /* Start releasing wavehdrs if we haven't already */ ++ if (!wwo->is_releasing) { ++ wwo->is_releasing = TRUE; ++ pa_gettimeofday(&wwo->started_releasing); ++ } ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_CLOSING: /* If param = 1, close because of a failure */ ++ wwo->hThread = NULL; ++ if ((DWORD)param == 1) { ++ /* If we are here, the stream has failed */ ++ wwo->state = WINE_WS_FAILED; ++ SetEvent(ev); ++ PULSE_DestroyRingMessage(&wwo->msgRing); ++ wodPlayer_NotifyCompletions(wwo, TRUE); ++ wodPlayer_NotifyClient(wwo, WOM_CLOSE, 0L, 0L); ++ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_disconnect(wwo->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ TRACE("Thread exiting because of failure.\n"); ++ ExitThread(1); ++ /* Stream instance will get de-refferenced upon close */ ++ } ++ wwo->state = WINE_WS_CLOSED; ++ /* sanity check: this should not happen since the device must have been reset before */ ++ if (wwo->lpQueuePtr || wwo->lpPlayPtr) ERR("out of sync\n"); ++ SetEvent(ev); ++ TRACE("Thread exiting.\n"); ++ ExitThread(0); ++ /* shouldn't go here */ ++ ++ default: ++ FIXME("unknown message %d\n", msg); ++ break; ++ } ++ } ++} ++ ++/************************************************************************** ++ * wodPlayer [internal] ++ */ ++static DWORD CALLBACK wodPlayer(LPVOID lpParam) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)lpParam; ++ DWORD dwSleepTime = INFINITE; ++ ++ wwo->state = WINE_WS_STOPPED; ++ SetEvent(wwo->hStartUpEvent); ++ ++ /* Wait for the shortest time before an action is required. If there are ++ * no pending actions, wait forever for a command. */ ++ for (;;) { ++ TRACE("Waiting %u ms\n", dwSleepTime); ++ PULSE_WaitRingMessage(&wwo->msgRing, dwSleepTime); ++ wodPlayer_ProcessMessages(wwo); ++ if (wwo->state == WINE_WS_PLAYING) { ++ if (!wwo->is_releasing && wwo->lpQueuePtr) ++ wodPlayer_CheckReleasing(wwo); ++ dwSleepTime = wodPlayer_NotifyCompletions(wwo, FALSE); ++ } else ++ dwSleepTime = INFINITE; ++ } ++} ++ ++/************************************************************************** ++ * wodOpen [internal] ++ */ ++static DWORD wodOpen(WORD wDevID, LPDWORD lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { ++ WINE_WAVEDEV *wdo; ++ WINE_WAVEINST *wwo = NULL; ++ DWORD ret = MMSYSERR_NOERROR; ++ ++ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); ++ if (lpDesc == NULL) { ++ WARN("Invalid Parameter !\n"); ++ return MMSYSERR_INVALPARAM; ++ } ++ ++ if (wDevID >= PULSE_WodNumDevs) { ++ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_BADDEVICEID; ++ } ++ wdo = &WOutDev[wDevID]; ++ ++ wwo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_WAVEINST)); ++ if (!wwo) return MMSYSERR_NOMEM; ++ *lpdwUser = (DWORD)wwo; ++ ++ /* check to see if format is supported and make pa_sample_spec struct */ ++ if (!PULSE_SetupFormat(lpDesc->lpFormat, &wwo->sample_spec)) { ++ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ ret = WAVERR_BADFORMAT; ++ goto exit; ++ } ++ ++ if (TRACE_ON(wave)) { ++ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; ++ pa_sample_spec_snprint(t, sizeof(t), &wwo->sample_spec); ++ TRACE("Sample spec '%s'\n", t); ++ } ++ ++ if (dwFlags & WAVE_FORMAT_QUERY) { ++ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ ret = MMSYSERR_NOERROR; ++ goto exit; ++ } ++ ++ wwo->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); ++ wwo->waveDesc = *lpDesc; ++ PULSE_InitRingMessage(&wwo->msgRing); ++ ++ wwo->stream = pa_stream_new(PULSE_context, "WaveOut", &wwo->sample_spec, NULL); ++ /* If server doesn't support sample_spec, we will error out here */ ++ if (!wwo->stream) { ++ ret = WAVERR_BADFORMAT; ++ goto exit; ++ } ++ ++ pa_stream_set_state_callback (wwo->stream, PULSE_StreamStateCallback, wwo); ++ pa_stream_set_write_callback (wwo->stream, PULSE_StreamRequestCallback, wwo); ++ pa_stream_set_underflow_callback (wwo->stream, PULSE_StreamUnderflowCallback, wwo); ++ pa_stream_set_overflow_callback (wwo->stream, PULSE_StreamOverflowCallback, wwo); ++ pa_stream_set_moved_callback (wwo->stream, PULSE_StreamMovedCallback, wwo); ++ pa_stream_set_suspended_callback (wwo->stream, PULSE_StreamSuspendedCallback, wwo); ++ ++#if PA_API_VERSION >= 12 ++ if (pa_context_get_server_protocol_version(PULSE_context) >= 15) { ++ pa_stream_set_started_callback(wwo->stream, WAVEOUT_StreamStartedCallback, wwo); ++ } else ++#endif ++ pa_stream_set_latency_update_callback(wwo->stream, WAVEOUT_StreamTimingInfoUpdateCallback, wwo); ++ ++ ++ TRACE("Connecting stream for playback on %s.\n", wdo->device_name); ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_connect_playback(wwo->stream, ++ /* Use WAVE_FORMAT_DIRECT to detect if we are being called by the ++ * wavemapper, in which case don't specify a device so that libpulse ++ * chooses based upon environment variables, x11 root window info, etc. If ++ * WAVE_FORMAT_DIRECT is inappropriate, maybe winmm could stop eating ++ * WAVE_MAPPER? */ ++ dwFlags & WAVE_FORMAT_DIRECT ? NULL : wdo->device_name, ++ NULL, ++ PA_STREAM_AUTO_TIMING_UPDATE, ++ NULL, ++ NULL); ++ ++ for (;;) { ++ pa_context_state_t cstate = pa_context_get_state(PULSE_context); ++ pa_stream_state_t sstate = pa_stream_get_state(wwo->stream); ++ ++ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || ++ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { ++ ERR("Failed to connect stream context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ret = MMSYSERR_NODRIVER; ++ goto exit; ++ } ++ ++ if (sstate == PA_STREAM_READY) ++ break; ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ TRACE("(%p)->stream connected for playback.\n", wwo); ++ ++ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ ++ wwo->timing_info = pa_stream_get_timing_info(wwo->stream); ++ assert(wwo->timing_info); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ wwo->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); ++ wwo->hThread = CreateThread(NULL, 0, wodPlayer, (LPVOID)wwo, 0, &(wwo->dwThreadID)); ++ if (wwo->hThread) ++ SetThreadPriority(wwo->hThread, THREAD_PRIORITY_TIME_CRITICAL); ++ else { ++ ERR("Thread creation for the wodPlayer failed!\n"); ++ ret = MMSYSERR_NOMEM; ++ goto exit; ++ } ++ WaitForSingleObject(wwo->hStartUpEvent, INFINITE); ++ CloseHandle(wwo->hStartUpEvent); ++ wwo->hStartUpEvent = INVALID_HANDLE_VALUE; ++ ++ ++ return wodPlayer_NotifyClient (wwo, WOM_OPEN, 0L, 0L); ++ ++exit: ++ if (!wwo) ++ return ret; ++ ++ if (wwo->hStartUpEvent != INVALID_HANDLE_VALUE) ++ CloseHandle(wwo->hStartUpEvent); ++ ++ if (wwo->msgRing.ring_buffer_size > 0) ++ PULSE_DestroyRingMessage(&wwo->msgRing); ++ ++ if (wwo->stream) { ++ if (pa_stream_get_state(wwo->stream) == PA_STREAM_READY) ++ pa_stream_disconnect(wwo->stream); ++ pa_stream_unref(wwo->stream); ++ wwo->stream = NULL; ++ } ++ HeapFree(GetProcessHeap(), 0, wwo); ++ ++ return ret; ++} ++ ++/************************************************************************** ++ * wodClose [internal] ++ */ ++static DWORD wodClose(WINE_WAVEINST *wwo) { ++ DWORD ret; ++ ++ TRACE("(%p);\n", wwo); ++ if (!wwo) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (wwo->state != WINE_WS_FAILED) { ++ if (wwo->lpQueuePtr && wwo->lpPlayPtr) { ++ WARN("buffers still playing !\n"); ++ return WAVERR_STILLPLAYING; ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_drain(wwo->stream, PULSE_StreamSuccessCallback, NULL)); ++ pa_stream_disconnect(wwo->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_CLOSING, 0, TRUE); ++ ++ PULSE_DestroyRingMessage(&wwo->msgRing); ++ } ++ ++ if (wwo->stream) ++ pa_stream_unref(wwo->stream); ++ ret = wodPlayer_NotifyClient(wwo, WOM_CLOSE, 0L, 0L); ++ ++ HeapFree(GetProcessHeap(), 0, wwo); ++ ++ return ret; ++} ++ ++/************************************************************************** ++ * wodWrite [internal] ++ */ ++static DWORD wodWrite(WINE_WAVEINST *wwo, LPWAVEHDR lpWaveHdr, DWORD dwSize) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) ++ return WAVERR_UNPREPARED; ++ ++ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) ++ return WAVERR_STILLPLAYING; ++ ++ lpWaveHdr->dwFlags &= ~WHDR_DONE; ++ lpWaveHdr->dwFlags |= WHDR_INQUEUE; ++ lpWaveHdr->lpNext = 0; ++ lpWaveHdr->reserved = 0; ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodPause [internal] ++ */ ++static DWORD wodPause(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_PAUSING, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodGetPosition [internal] ++ */ ++static DWORD wodGetPosition(WINE_WAVEINST *wwo, LPMMTIME lpTime, DWORD uSize) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpTime == NULL) return MMSYSERR_INVALPARAM; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (wwo->timing_info->read_index_corrupt || wwo->timing_info->write_index_corrupt) ++ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ ++ PULSE_GetMMTime(wwo->timing_info, &wwo->sample_spec, wwo->last_reset, lpTime); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ return MMSYSERR_NOERROR; ++} ++/************************************************************************** ++ * wodBreakLoop [internal] ++ */ ++static DWORD wodBreakLoop(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_BREAKLOOP, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodGetDevCaps [internal] ++ */ ++static DWORD wodGetDevCaps(DWORD wDevID, LPWAVEOUTCAPSW lpCaps, DWORD dwSize) { ++ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); ++ ++ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; ++ ++ if (wDevID >= PULSE_WodNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ memcpy(lpCaps, &(WOutDev[wDevID].caps.out), min(dwSize, sizeof(*lpCaps))); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodGetNumDevs [internal] ++ * Context-sanity check here, as if we respond with 0, WINE will move on ++ * to the next waveout driver. ++ */ ++static DWORD wodGetNumDevs() { ++ if (!PULSE_ml || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) ++ return 0; ++ ++ PULSE_UpdateWavedevs(PULSE_OUT_DEVS); ++ return PULSE_WodNumDevs; ++} ++ ++/************************************************************************** ++ * wodGetVolume [internal] ++ */ ++static DWORD wodGetVolume(WINE_WAVEINST *wwo, LPDWORD lpdwVol) { ++ float value1, value2; ++ DWORD wleft, wright; ++ ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ TRACE("(%p, %p);\n", wwo, lpdwVol); ++ ++ if (lpdwVol == NULL) ++ return MMSYSERR_NOTENABLED; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (wwo->stream && PULSE_context && pa_context_get_state(PULSE_context) == PA_CONTEXT_READY && ++ pa_stream_get_state(wwo->stream) == PA_STREAM_READY) { ++ PULSE_WaitForOperation(pa_context_get_sink_input_info(PULSE_context, pa_stream_get_index(wwo->stream), WAVEOUT_SinkInputInfoCallback, wwo)); ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ ++ if (wwo->volume.channels == 2) { ++ value1 = pa_sw_volume_to_dB(wwo->volume.values[0]); ++ value2 = pa_sw_volume_to_dB(wwo->volume.values[1]); ++ } else { ++ value1 = pa_sw_volume_to_dB(pa_cvolume_avg(&wwo->volume)); ++ value2 = 0; ++ } ++ ++ if (value1 < -60) ++ wleft = 0; ++ else ++ ++ if (value2 < -60) ++ wright = 0; ++ else ++ wright = 0xFFFFl - ((value2 / -60)*(float)0xFFFFl); ++ ++ if (wleft > 0xFFFFl) ++ wleft = 0xFFFFl; ++ if (wright > 0xFFFFl) ++ wright = 0xFFFFl; ++ ++ *lpdwVol = (WORD)wleft + (WORD)(wright << 16); ++ ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodSetVolume [internal] ++ */ ++static DWORD wodSetVolume(WINE_WAVEINST *wwo, DWORD dwParam1) { ++ double value1, value2; ++ ++ TRACE("(%p, %08X);\n", wwo, dwParam1); ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ /* waveOut volumes are /supposed/ to be logarithmic */ ++ value1 = LOWORD(dwParam1) == 0 ? PA_DECIBEL_MININFTY : ((float)(0xFFFFl - LOWORD(dwParam1))/0xFFFFl) * -60.0; ++ value2 = HIWORD(dwParam1) == 0 ? PA_DECIBEL_MININFTY : ((float)(0xFFFFl - HIWORD(dwParam1))/0xFFFFl) * -60.0; ++ ++ if (wwo->sample_spec.channels == 2) { ++ wwo->volume.channels = 2; ++ wwo->volume.values[0] = pa_sw_volume_from_dB(value1); ++ wwo->volume.values[1] = pa_sw_volume_from_dB(value2); ++ } else { ++ if (value1 != value2) FIXME("Non-stereo streams can't pan!\n"); ++ wwo->volume.channels = wwo->sample_spec.channels; ++ pa_cvolume_set(&wwo->volume, wwo->volume.channels, pa_sw_volume_from_dB(MAX(value1, value2))); ++ } ++ ++ if (TRACE_ON(wave)) { ++ char s[PA_CVOLUME_SNPRINT_MAX]; ++ pa_cvolume_snprint(s, PA_CVOLUME_SNPRINT_MAX, &wwo->volume); ++ TRACE("%s\n", s); ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (!wwo->stream || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(wwo->stream) != PA_STREAM_READY || !pa_cvolume_valid(&wwo->volume)) { ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return MMSYSERR_NOERROR; ++ } ++ ++ PULSE_WaitForOperation(pa_context_set_sink_input_volume(PULSE_context, ++ pa_stream_get_index(wwo->stream), &wwo->volume, ++ PULSE_ContextSuccessCallback, wwo)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodRestart [internal] ++ */ ++static DWORD wodRestart(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (wwo->state == WINE_WS_PAUSED) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESTARTING, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodReset [internal] ++ */ ++static DWORD wodReset(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESETTING, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodDevInterfaceSize [internal] ++ */ ++static DWORD wodDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { ++ ++ *dwParam1 = MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, NULL, 0) * sizeof(WCHAR); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodDevInterface [internal] ++ */ ++static DWORD wodDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { ++ if (dwParam2 >= MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, ++ NULL, 0 ) * sizeof(WCHAR)) ++ { ++ MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, ++ dwParam1, dwParam2 / sizeof(WCHAR)); ++ return MMSYSERR_NOERROR; ++ } ++ return MMSYSERR_INVALPARAM; ++} ++ ++/************************************************************************** ++ * wodMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, ++ DWORD dwParam1, DWORD dwParam2) { ++/* ++ TRACE("(%u, %s, %08X, %08X, %08X);\n", ++ wDevID, PULSE_getMessage(wMsg), dwUser, dwParam1, dwParam2); ++*/ ++ switch (wMsg) { ++ case DRVM_INIT: ++ case DRVM_EXIT: ++ case DRVM_ENABLE: ++ case DRVM_DISABLE: ++ /* FIXME: Pretend this is supported */ ++ return 0; ++ case WODM_OPEN: return wodOpen (wDevID, (LPDWORD)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); ++ case WODM_CLOSE: return wodClose ((WINE_WAVEINST*)dwUser); ++ case WODM_WRITE: return wodWrite ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); ++ case WODM_PAUSE: return wodPause ((WINE_WAVEINST*)dwUser); ++ case WODM_GETPOS: return wodGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); ++ case WODM_BREAKLOOP: return wodBreakLoop ((WINE_WAVEINST*)dwUser); ++ case WODM_PREPARE: return MMSYSERR_NOTSUPPORTED; ++ case WODM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; ++ case WODM_GETDEVCAPS: return wodGetDevCaps (wDevID, (LPWAVEOUTCAPSW)dwParam1, dwParam2); ++ case WODM_GETNUMDEVS: return wodGetNumDevs (); ++ case WODM_GETPITCH: return MMSYSERR_NOTSUPPORTED; ++ case WODM_SETPITCH: return MMSYSERR_NOTSUPPORTED; ++ case WODM_GETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* support if theoretically possible */ ++ case WODM_SETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* since pulseaudio 0.9.8 */ ++ case WODM_GETVOLUME: return wodGetVolume ((WINE_WAVEINST*)dwUser, (LPDWORD)dwParam1); ++ case WODM_SETVOLUME: return wodSetVolume ((WINE_WAVEINST*)dwUser, dwParam1); ++ case WODM_RESTART: return wodRestart ((WINE_WAVEINST*)dwUser); ++ case WODM_RESET: return wodReset ((WINE_WAVEINST*)dwUser); ++ case DRV_QUERYDEVICEINTERFACESIZE: return wodDevInterfaceSize (wDevID, (LPDWORD)dwParam1); ++ case DRV_QUERYDEVICEINTERFACE: return wodDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); ++ case DRV_QUERYDSOUNDIFACE: return wodDsCreate (wDevID, (PIDSDRIVER*)dwParam1); ++ case DRV_QUERYDSOUNDDESC: return wodDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); ++ default: ++ FIXME("unknown message %d!\n", wMsg); ++ } ++ return MMSYSERR_NOTSUPPORTED; ++} ++ ++#else /* !HAVE_PULSEAUDIO */ ++ ++/************************************************************************** ++ * wodMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, ++ DWORD dwParam1, DWORD dwParam2) { ++ FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, ++ dwParam1, dwParam2); ++ return MMSYSERR_NOTENABLED; ++} ++ ++#endif /* HAVE_PULSEAUDIO */ +diff --git a/dlls/winepulse.drv/winepulse.drv.spec b/dlls/winepulse.drv/winepulse.drv.spec +new file mode 100644 +index 0000000..1b49460 +--- /dev/null ++++ b/dlls/winepulse.drv/winepulse.drv.spec +@@ -0,0 +1,3 @@ ++@ stdcall -private DriverProc(long long long long long long) PULSE_DriverProc ++@ stdcall -private wodMessage(long long long long long long) PULSE_wodMessage ++@ stdcall -private widMessage(long long long long long long) PULSE_widMessage +diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h +new file mode 100644 +index 0000000..27690d3 +--- /dev/null ++++ b/dlls/winepulse.drv/winepulse.h +@@ -0,0 +1,232 @@ ++/* Definitions for PulseAudio Wine Driver ++ * ++ * Copyright 2008 Arthur Taylor ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#ifndef __WINE_CONFIG_H ++# error You must include config.h to use this header ++#endif ++ ++#if defined(HAVE_PULSEAUDIO) && !defined(__WINEPULSE_H) ++#define __WINEPULSE_H ++ ++#include "mmreg.h" ++#include "dsound.h" ++#include "dsdriver.h" ++ ++#include "ks.h" ++#include "ksmedia.h" ++#include "ksguid.h" ++ ++#include ++ ++/* state diagram for waveOut writing: ++ * ++ * +---------+-------------+---------------+---------------------------------+ ++ * | state | function | event | new state | ++ * +---------+-------------+---------------+---------------------------------+ ++ * | | open() | | STOPPED | ++ * | PAUSED | write() | | PAUSED | ++ * | STOPPED | write() | | PLAYING | ++ * | PLAYING | write() | HEADER | PLAYING | ++ * | (other) | write() | | | ++ * | (any) | pause() | PAUSING | PAUSED | ++ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | ++ * | (any) | reset() | RESETTING | STOPPED | ++ * | (any) | close() | CLOSING | CLOSED | ++ * +---------+-------------+---------------+---------------------------------+ ++ */ ++ ++/* states of the playing device */ ++#define WINE_WS_PLAYING 1 ++#define WINE_WS_PAUSED 2 ++#define WINE_WS_STOPPED 3 ++#define WINE_WS_CLOSED 4 ++#define WINE_WS_FAILED 5 ++ ++#define PULSE_OUT_DEVS 0x1 ++#define PULSE_IN_DEVS 0x2 ++#define PULSE_ALL_DEVS PULSE_IN_DEVS | PULSE_OUT_DEVS ++ ++#define PULSE_ALL_FORMATS \ ++ WAVE_FORMAT_1M08 | /* Mono 11025Hz 8-bit */\ ++ WAVE_FORMAT_1M16 | /* Mono 11025Hz 16-bit */\ ++ WAVE_FORMAT_1S08 | /* Stereo 11025Hz 8-bit */\ ++ WAVE_FORMAT_1S16 | /* Stereo 11025Hz 16-bit */\ ++ WAVE_FORMAT_2M08 | /* Mono 22050Hz 8-bit */\ ++ WAVE_FORMAT_2M16 | /* Mono 22050Hz 16-bit */\ ++ WAVE_FORMAT_2S08 | /* Stereo 22050Hz 8-bit */\ ++ WAVE_FORMAT_2S16 | /* Stereo 22050Hz 16-bit */\ ++ WAVE_FORMAT_4M08 | /* Mono 44100Hz 8-bit */\ ++ WAVE_FORMAT_4M16 | /* Mono 44100Hz 16-bit */\ ++ WAVE_FORMAT_4S08 | /* Stereo 44100Hz 8-bit */\ ++ WAVE_FORMAT_4S16 | /* Stereo 44100Hz 16-bit */\ ++ WAVE_FORMAT_48M08 | /* Mono 48000Hz 8-bit */\ ++ WAVE_FORMAT_48S08 | /* Stereo 48000Hz 8-bit */\ ++ WAVE_FORMAT_48M16 | /* Mono 48000Hz 16-bit */\ ++ WAVE_FORMAT_48S16 | /* Stereo 48000Hz 16-bit */\ ++ WAVE_FORMAT_96M08 | /* Mono 96000Hz 8-bit */\ ++ WAVE_FORMAT_96S08 | /* Stereo 96000Hz 8-bit */\ ++ WAVE_FORMAT_96M16 | /* Mono 96000Hz 16-bit */\ ++ WAVE_FORMAT_96S16 /* Stereo 96000Hz 16-bit */ ++ ++/* events to be sent to device */ ++enum win_wm_message { ++ WINE_WM_PAUSING = WM_USER + 1, WINE_WM_RESTARTING, WINE_WM_RESETTING, WINE_WM_HEADER, ++ WINE_WM_BREAKLOOP, WINE_WM_CLOSING, WINE_WM_STARTING, WINE_WM_STOPPING, WINE_WM_XRUN, WINE_WM_FEED ++}; ++ ++typedef struct { ++ enum win_wm_message msg; /* message identifier */ ++ DWORD param; /* parameter for this message */ ++ HANDLE hEvent; /* if message is synchronous, handle of event for synchro */ ++} PULSE_MSG; ++ ++/* implement an in-process message ring for better performance ++ * (compared to passing thru the server) ++ * this ring will be used by the input (resp output) record (resp playback) routine ++ */ ++typedef struct { ++ PULSE_MSG * messages; ++ int ring_buffer_size; ++ int msg_tosave; ++ int msg_toget; ++/* Either pipe or event is used, but that is defined in pulse.c, ++ * since this is a global header we define both here */ ++ int msg_pipe[2]; ++ HANDLE msg_event; ++ CRITICAL_SECTION msg_crst; ++} PULSE_MSG_RING; ++ ++typedef struct WINE_WAVEDEV WINE_WAVEDEV; ++typedef struct WINE_WAVEINST WINE_WAVEINST; ++typedef struct IDsDriverImpl IDsDriverImpl; ++typedef struct IDsDriverBufferImpl IDsDriverBufferImpl; ++ ++struct IDsDriverImpl { ++ /* IUnknown fields */ ++ const IDsDriverVtbl *lpVtbl; ++ LONG ref; ++ ++ IDsDriverBufferImpl *primary; ++ UINT wDevID; ++}; ++ ++struct IDsDriverBufferImpl { ++ const IDsDriverBufferVtbl *lpVtbl; ++ IDsDriverImpl* drv; ++ LONG ref; ++ pa_stream *stream; ++ pa_sample_spec sample_spec; ++ pa_cvolume volume; ++ ++ PBYTE buffer; /* Pointer to the latest data fragment for recording streams */ ++ size_t buffer_length; /* How large the latest data fragment is */ ++ size_t buffer_read_offset; /* How far into latest data fragment we last read */ ++ size_t fraglen; ++}; ++ ++/* Per-playback/record device */ ++struct WINE_WAVEDEV { ++ char interface_name[MAXPNAMELEN * 2]; ++ char *device_name; ++ pa_cvolume volume; ++ ++ union { ++ WAVEOUTCAPSW out; ++ WAVEINCAPSW in; ++ } caps; ++ ++ /* DirectSound stuff */ ++ DSDRIVERDESC ds_desc; ++ DSDRIVERCAPS ds_caps; ++}; ++ ++/* Per-playback/record instance */ ++struct WINE_WAVEINST { ++ volatile INT state; /* one of the WINE_WS_ manifest constants */ ++ WAVEOPENDESC waveDesc; ++ WORD wFlags; ++ ++ pa_stream *stream; /* The PulseAudio stream */ ++ const pa_timing_info *timing_info; ++ pa_sample_spec sample_spec; /* Sample spec of this stream / device */ ++ pa_cvolume volume; ++ pa_buffer_attr buffer_attr; ++ ++ /* waveIn / waveOut wavaHdr information */ ++ LPWAVEHDR lpQueuePtr; /* start of queued WAVEHDRs (waiting to be notified) */ ++ LPWAVEHDR lpPlayPtr; /* start of not yet fully written buffers */ ++ DWORD dwPartialOffset; /* Offset of not yet written bytes in lpPlayPtr */ ++ LPWAVEHDR lpLoopPtr; /* pointer of first buffer in loop, if any */ ++ DWORD dwLoops; /* private copy of loop counter */ ++ ++ /* Virtual stream positioning information */ ++ DWORD last_reset; /* When the last reset occured, as pa stream time doesn't reset */ ++ struct timeval last_header; /* When the last wavehdr was received, only updated when audio is not playing yet */ ++ BOOL is_releasing; /* Whether we are releasing wavehdrs */ ++ struct timeval started_releasing; /* When wavehdr releasing started, for comparison to queued written wavehdrs */ ++ DWORD releasing_offset; /* How much audio has been released prior when releasing started in this instance */ ++ ++ /* waveIn */ ++ const void *buffer; /* Pointer to the latest data fragment for recording streams */ ++ size_t buffer_length; /* How large the latest data fragment is */ ++ size_t buffer_read_offset; /* How far into latest data fragment we last read */ ++ size_t fraglen; ++ ++ /* Thread communication and synchronization stuff */ ++ HANDLE hStartUpEvent; ++ HANDLE hThread; ++ DWORD dwThreadID; ++ PULSE_MSG_RING msgRing; ++}; ++ ++/* We establish one context per instance, so make it global to the lib */ ++pa_context *PULSE_context; /* Connection Context */ ++pa_threaded_mainloop *PULSE_ml; /* PA Runtime information */ ++ ++/* WaveIn / WaveOut devices */ ++WINE_WAVEDEV *WOutDev; ++WINE_WAVEDEV *WInDev; ++DWORD PULSE_WodNumDevs; ++DWORD PULSE_WidNumDevs; ++ ++/* pulse.c */ ++void PULSE_WaitForOperation(pa_operation *o); ++void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata); ++void PULSE_StreamStateCallback(pa_stream *s, void *userdata); ++void PULSE_StreamRequestCallback(pa_stream *s, size_t n, void *userdata); ++void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata); ++void PULSE_StreamOverflowCallback(pa_stream *s, void *userdata); ++void PULSE_StreamSuspendedCallback(pa_stream *s, void *userdata); ++void PULSE_StreamMovedCallback(pa_stream *s, void *userdata); ++void PULSE_ContextSuccessCallback(pa_context *c, int success, void *userdata); ++BOOL PULSE_SetupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss); ++void PULSE_GetMMTime(const pa_timing_info *t, pa_sample_spec *s, size_t last_reset, LPMMTIME lpTime); ++int PULSE_InitRingMessage(PULSE_MSG_RING* omr); ++int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr); ++void PULSE_ResetRingMessage(PULSE_MSG_RING* omr); ++void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep); ++int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait); ++int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, enum win_wm_message *msg, DWORD *param, HANDLE *hEvent); ++const char * PULSE_getCmdString(enum win_wm_message msg); ++BOOL PULSE_UpdateWavedevs(int devices); ++ ++/* dsoutput.c */ ++DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv); ++DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc); ++#endif From 530cf71d1cfa88612837b8621b1212dba2ca65ae Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 24 Feb 2009 21:09:01 +0000 Subject: [PATCH 108/161] - switch from i386 to ix86 --- wine.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/wine.spec b/wine.spec index e780def..7b2a09f 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 1.1.15 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -53,7 +53,7 @@ Patch1: wine-rpath.patch Patch2: wine-desktop-mime.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -ExclusiveArch: i386 +ExclusiveArch: %{ix86} # BR: All builds BuildRequires: bison @@ -869,6 +869,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepulse.drv.so %changelog +* Tue Feb 24 2009 Andreas Bierfert +- 1.1.15-2 +- switch from i386 to ix86 + * Sun Feb 15 2009 Andreas Bierfert - 1.1.15-1 - version upgrade From c9c3e701443dc60dec9ea627d057c4d473c7edc1 Mon Sep 17 00:00:00 2001 From: nim Date: Sun, 15 Mar 2009 19:43:11 +0000 Subject: [PATCH 109/161] Try to build with F11 fontforge --- import.log | 1 + wine-prefixfonts.patch | 12 ------------ wine-wineshelllink.patch | 9 --------- wine.spec | 5 ++++- wineshelllink-fedora | 6 ------ 5 files changed, 5 insertions(+), 28 deletions(-) create mode 100644 import.log delete mode 100644 wine-prefixfonts.patch delete mode 100644 wine-wineshelllink.patch delete mode 100644 wineshelllink-fedora diff --git a/import.log b/import.log new file mode 100644 index 0000000..bb8668c --- /dev/null +++ b/import.log @@ -0,0 +1 @@ +wine-1_1_15-3_fc11:HEAD:wine-1.1.15-3.fc11.src.rpm:1237145709 diff --git a/wine-prefixfonts.patch b/wine-prefixfonts.patch deleted file mode 100644 index 885c56a..0000000 --- a/wine-prefixfonts.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- tools/wineprefixcreate.in.orig 2006-04-03 10:04:18.000000000 +0200 -+++ tools/wineprefixcreate.in 2006-04-03 10:06:20.000000000 +0200 -@@ -170,6 +170,9 @@ - export WINEPREFIX - "${WINELOADER:-wine}" rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 128 wine.inf - -+# Copy the font files -+cp /usr/share/wine/fonts/* "$CROOT/windows/fonts/" -+ - # Wait for the wineserver to finish - - if [ $do_wait = 1 ] diff --git a/wine-wineshelllink.patch b/wine-wineshelllink.patch deleted file mode 100644 index 0dd020c..0000000 --- a/wine-wineshelllink.patch +++ /dev/null @@ -1,9 +0,0 @@ ---- tools/wineshelllink.orig 2007-06-03 12:56:07.000000000 +0200 -+++ tools/wineshelllink 2007-06-03 12:57:27.000000000 +0200 -@@ -231,4 +231,6 @@ - desktop_entry > "$desktop_target" - fi - -+exec /usr/bin/wineshelllink-fedora -+ - exit 0 diff --git a/wine.spec b/wine.spec index 7b2a09f..8e8df01 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 1.1.15 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -869,6 +869,9 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepulse.drv.so %changelog +* Sun Mar 15 2009 Nicolas Mailhot - 1.1.15-3 +— Make sure F11 font packages have been built with F11 fontforge + * Tue Feb 24 2009 Andreas Bierfert - 1.1.15-2 - switch from i386 to ix86 diff --git a/wineshelllink-fedora b/wineshelllink-fedora deleted file mode 100644 index 6473493..0000000 --- a/wineshelllink-fedora +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -for i in $HOME/.config/menus/applications-merged/*menu ; do - sed -i -e 's:wine-wine:Wine:g' \ - -e ':wine-wine:wine:g' "$i" -done From d1cc18160360c311ba7418874781a8d5b5d33141 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 7 Apr 2009 13:40:40 +0000 Subject: [PATCH 110/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 90 +-- winepulse-0.20.patch => winepulse-0.24.patch | 754 +++++++++---------- 4 files changed, 401 insertions(+), 447 deletions(-) rename winepulse-0.20.patch => winepulse-0.24.patch (87%) diff --git a/.cvsignore b/.cvsignore index c038f0e..8cff2a6 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.15-fe.tar.bz2 +wine-1.1.18-fe.tar.bz2 diff --git a/sources b/sources index 3554a20..4efaac4 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -cfeb6cfd7404c2fed2c9f2623976ea7e wine-1.1.15-fe.tar.bz2 +1933049a7cc725bcb488c6669fa5ca9e wine-1.1.18-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 8e8df01..41197b9 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 1.1.15 -Release: 3%{?dist} +Version: 1.1.18 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -43,7 +43,7 @@ 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.17-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse-0.20.patch +Patch401: http://art.ified.ca/downloads/winepulse-0.24.patch Patch402: http://art.ified.ca/downloads/adding-pulseaudio-to-winecfg.patch Source402: README-FEDORA-PULSEAUDIO @@ -402,15 +402,12 @@ update-desktop-database &>/dev/null || : %{_bindir}/regsvr32 %{_bindir}/wine %{_bindir}/wineboot -%{_bindir}/winebrowser %{_bindir}/wineconsole %{_bindir}/wineprefixcreate %{_mandir}/man1/wineprefixcreate.1* %{_bindir}/winecfg -%{_bindir}/uninstaller %{_libdir}/wine/cacls.exe.so %{_libdir}/wine/expand.exe.so -%{_libdir}/wine/winhelp.exe16 %{_libdir}/wine/winhlp32.exe.so %{_libdir}/wine/msiexec.exe.so %{_libdir}/wine/net.exe.so @@ -438,11 +435,7 @@ update-desktop-database &>/dev/null || : %lang(fr) %{_mandir}/fr.UTF-8/man1/* %{_datadir}/wine/generic.ppd %{_datadir}/wine/wine.inf -%{_bindir}/wine-kthread %{_bindir}/wine-preloader -%{_bindir}/wine-pthread -# < 0.9.60 -#%{_bindir}/winelauncher %{_bindir}/wineserver %{_libdir}/libwine.so.1* %dir %{_libdir}/wine @@ -458,7 +451,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/authz.dll.so %{_libdir}/wine/avicap32.dll.so %{_libdir}/wine/avifil32.dll.so -%{_libdir}/wine/avifile.dll16 %{_libdir}/wine/browseui.dll.so %{_libdir}/wine/cabinet.dll.so %{_libdir}/wine/cards.dll.so @@ -468,9 +460,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/comcat.dll.so %{_libdir}/wine/comctl32.dll.so %{_libdir}/wine/comdlg32.dll.so -%{_libdir}/wine/comm.drv16 %{_libdir}/wine/commdlg.dll16 -%{_libdir}/wine/compobj.dll16 %{_libdir}/wine/compstui.dll.so %{_libdir}/wine/credui.dll.so %{_libdir}/wine/crtdll.dll.so @@ -480,9 +470,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/cryptnet.dll.so %{_libdir}/wine/cryptui.dll.so %{_libdir}/wine/ctapi32.dll.so -%{_libdir}/wine/ctl3d.dll16 %{_libdir}/wine/ctl3d32.dll.so -%{_libdir}/wine/ctl3dv2.dll16 %{_libdir}/wine/d3d10.dll.so %{_libdir}/wine/d3d10core.dll.so %{_libdir}/wine/d3dim.dll.so @@ -497,8 +485,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/devenum.dll.so %{_libdir}/wine/dinput.dll.so %{_libdir}/wine/dinput8.dll.so -%{_libdir}/wine/dispdib.dll16 -%{_libdir}/wine/display.drv16 %{_libdir}/wine/dmband.dll.so %{_libdir}/wine/dmcompos.dll.so %{_libdir}/wine/dmime.dll.so @@ -543,7 +529,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/ifsmgr.vxd.so %{_libdir}/wine/imaadp32.acm.so %{_libdir}/wine/imagehlp.dll.so -%{_libdir}/wine/imm.dll16 %{_libdir}/wine/imm32.dll.so %{_libdir}/wine/inetcomm.dll.so %{_libdir}/wine/inetmib1.dll.so @@ -556,14 +541,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/itss.dll.so %{_libdir}/wine/jscript.dll.so %{_libdir}/wine/kernel32.dll.so -%{_libdir}/wine/keyboard.drv16 %{_libdir}/wine/krnl386.exe16 %{_libdir}/wine/loadperf.dll.so %{_libdir}/wine/localspl.dll.so %{_libdir}/wine/localui.dll.so %{_libdir}/wine/lodctr.exe.so %{_libdir}/wine/lz32.dll.so -%{_libdir}/wine/lzexpand.dll16 %{_libdir}/wine/mapi32.dll.so %{_libdir}/wine/mciavi32.dll.so %{_libdir}/wine/mcicda.dll.so @@ -575,10 +558,8 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/mmsystem.dll16 %{_libdir}/wine/monodebg.vxd.so %{_libdir}/wine/mountmgr.sys.so -%{_libdir}/wine/mouse.drv16 %{_libdir}/wine/mpr.dll.so %{_libdir}/wine/mprapi.dll.so -%{_libdir}/wine/msacm.dll16 %{_libdir}/wine/msacm32.dll.so %{_libdir}/wine/msacm32.drv.so %{_libdir}/wine/msadp32.acm.so @@ -620,20 +601,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/objsel.dll.so %{_libdir}/wine/odbc32.dll.so %{_libdir}/wine/odbccp32.dll.so -%{_libdir}/wine/ole2.dll16 -%{_libdir}/wine/ole2conv.dll16 -%{_libdir}/wine/ole2disp.dll16 -%{_libdir}/wine/ole2nls.dll16 -%{_libdir}/wine/ole2prox.dll16 -%{_libdir}/wine/ole2thk.dll16 %{_libdir}/wine/ole32.dll.so %{_libdir}/wine/oleacc.dll.so %{_libdir}/wine/oleaut32.dll.so -%{_libdir}/wine/olecli.dll16 %{_libdir}/wine/olecli32.dll.so %{_libdir}/wine/oledlg.dll.so %{_libdir}/wine/olepro32.dll.so -%{_libdir}/wine/olesvr.dll16 %{_libdir}/wine/olesvr32.dll.so %{_libdir}/wine/olethk32.dll.so %{_libdir}/wine/pdh.dll.so @@ -649,7 +622,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/qmgrprxy.dll.so %{_libdir}/wine/quartz.dll.so %{_libdir}/wine/query.dll.so -%{_libdir}/wine/rasapi16.dll16 %{_libdir}/wine/rasapi32.dll.so %{_libdir}/wine/rasdlg.dll.so %{_libdir}/wine/resutils.dll.so @@ -676,13 +648,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/slc.dll.so %{_libdir}/wine/snmpapi.dll.so %{_libdir}/wine/softpub.dll.so -%{_libdir}/wine/sound.drv16 %{_libdir}/wine/spoolsv.exe.so %{_libdir}/wine/stdole2.tlb.so %{_libdir}/wine/stdole32.tlb.so %{_libdir}/wine/sti.dll.so -%{_libdir}/wine/storage.dll16 -%{_libdir}/wine/stress.dll16 %{_libdir}/wine/svchost.exe.so %{_libdir}/wine/svrapi.dll.so %{_libdir}/wine/sxs.dll.so @@ -690,7 +659,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/tapi32.dll.so %{_libdir}/wine/toolhelp.dll16 %{_libdir}/wine/traffic.dll.so -%{_libdir}/wine/typelib.dll16 %{_libdir}/wine/unicows.dll.so %{_libdir}/wine/unlodctr.exe.so %{_libdir}/wine/updspapi.dll.so @@ -711,11 +679,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/vtdapi.vxd.so %{_libdir}/wine/vwin32.vxd.so %{_libdir}/wine/w32skrnl.dll.so -%{_libdir}/wine/w32sys.dll16 -%{_libdir}/wine/win32s16.dll16 -%{_libdir}/wine/win87em.dll16 -%{_libdir}/wine/winaspi.dll16 -%{_libdir}/wine/windebug.dll16 %{_libdir}/wine/wineaudioio.drv.so %{_libdir}/wine/winedos.dll.so %{_libdir}/wine/wineoss.drv.so @@ -727,15 +690,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winhttp.dll.so %{_libdir}/wine/wininet.dll.so %{_libdir}/wine/winmm.dll.so -%{_libdir}/wine/winnls.dll16 %{_libdir}/wine/winnls32.dll.so %{_libdir}/wine/winsock.dll16 %{_libdir}/wine/winspool.drv.so %{_libdir}/wine/wmi.dll.so %{_libdir}/wine/spoolss.dll.so -%{_libdir}/wine/winoldap.mod16 %{_libdir}/wine/winscard.dll.so -%{_libdir}/wine/wintab.dll16 %{_libdir}/wine/wintab32.dll.so %{_libdir}/wine/wintrust.dll.so %{_libdir}/wine/wnaspi32.dll.so @@ -764,11 +724,47 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/xinput1_3.dll.so %{_libdir}/wine/xinput9_1_0.dll.so %{_sysconfdir}/ld.so.conf.d/wine-32.conf +# 16bit +%{_libdir}/wine/avifile.dll16.so +%{_libdir}/wine/comm.drv16.so +%{_libdir}/wine/compobj.dll16.so +%{_libdir}/wine/ctl3d.dll16.so +%{_libdir}/wine/ctl3dv2.dll16.so +%{_libdir}/wine/dispdib.dll16.so +%{_libdir}/wine/display.drv16.so +%{_libdir}/wine/imm.dll16.so +%{_libdir}/wine/keyboard.drv16.so +%{_libdir}/wine/lzexpand.dll16.so +%{_libdir}/wine/mciqtz32.dll.so +%{_libdir}/wine/mouse.drv16.so +%{_libdir}/wine/msacm.dll16.so +%{_libdir}/wine/ole2.dll16.so +%{_libdir}/wine/ole2conv.dll16.so +%{_libdir}/wine/ole2disp.dll16.so +%{_libdir}/wine/ole2nls.dll16.so +%{_libdir}/wine/ole2prox.dll16.so +%{_libdir}/wine/ole2thk.dll16.so +%{_libdir}/wine/olecli.dll16.so +%{_libdir}/wine/olesvr.dll16.so +%{_libdir}/wine/rasapi16.dll16.so +%{_libdir}/wine/sound.drv16.so +%{_libdir}/wine/storage.dll16.so +%{_libdir}/wine/stress.dll16.so +%{_libdir}/wine/twain.dll16.so +%{_libdir}/wine/typelib.dll16.so +%{_libdir}/wine/w32sys.dll16.so +%{_libdir}/wine/win32s16.dll16.so +%{_libdir}/wine/win87em.dll16.so +%{_libdir}/wine/winaspi.dll16.so +%{_libdir}/wine/windebug.dll16.so +%{_libdir}/wine/winhelp.exe16.so +%{_libdir}/wine/winnls.dll16.so +%{_libdir}/wine/winoldap.mod16.so +%{_libdir}/wine/wintab.dll16.so %files tools %defattr(-,root,root,-) %{_bindir}/notepad -%{_bindir}/progman %{_bindir}/winedbg %{_bindir}/winedump %{_bindir}/winefile @@ -826,7 +822,6 @@ update-desktop-database &>/dev/null || : %files twain %defattr(-,root,root,-) -%{_libdir}/wine/twain.dll16 %{_libdir}/wine/twain_32.dll.so %{_libdir}/wine/sane.ds.so @@ -869,6 +864,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepulse.drv.so %changelog +* Mon Mar 30 2009 Andreas Bierfert +- 1.1.18-1 +- version upgrade (#490672, #491321) +- winepulse update + * Sun Mar 15 2009 Nicolas Mailhot - 1.1.15-3 — Make sure F11 font packages have been built with F11 fontforge diff --git a/winepulse-0.20.patch b/winepulse-0.24.patch similarity index 87% rename from winepulse-0.20.patch rename to winepulse-0.24.patch index 97de6d9..97466a4 100644 --- a/winepulse-0.20.patch +++ b/winepulse-0.24.patch @@ -22,10 +22,10 @@ index 0000000..327f225 +@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/dlls/winepulse.drv/dsoutput.c b/dlls/winepulse.drv/dsoutput.c new file mode 100644 -index 0000000..5086917 +index 0000000..b37313a --- /dev/null +++ b/dlls/winepulse.drv/dsoutput.c -@@ -0,0 +1,568 @@ +@@ -0,0 +1,576 @@ +/* + * Wine Driver for PulseAudio - DSound Output Functionality + * http://pulseaudio.org/ @@ -74,6 +74,22 @@ index 0000000..5086917 + * Low level DSOUND implementation * + *======================================================================*/ + ++/* A buffer is allocated with a pointer indicating the read position in the ++ * buffer. The pulse write callback reads data from the buffer, updating the ++ * read pointer to the location at the end of the read. Upon reaching the end ++ * or attempting to read past the end of buffer the read pointer wraps around ++ * to the beginning again. DirectSound applications can write anywhere in the ++ * buffer at anytime without locking and can know the location of the read ++ * pointer. The position of the read pointer cannot be changed by the ++ * application and access to it uses a locking scheme. A fake pointer ++ * indicating estimated playback position is also available to the application. ++ * Applications can potentially write to the same area of memory which is also ++ * being read by the pulse thread. However, this is uncommon as directsound ++ * applications know where pulse should be reading from via the pointer ++ * locations and MSDN says that such an operation should be avoided with the ++ * results being undefined. ++ */ ++ +/* Fragment lengths try to be a power of two close to 10ms worth of data. See + * dlls/dsound/mixer.c + */ @@ -100,24 +116,25 @@ index 0000000..5086917 + /* Fraglens are always powers of 2 */ + nbytes+= This->fraglen - 1; + nbytes&= ~(This->fraglen - 1); ++ + /* If we advance more than 10 fragments at a time it appears that the buffer + * pointer is never advancing because of wrap-around. Evil magic numbers. */ -+ if (nbytes > This->fraglen * 6) -+ nbytes = This->fraglen * 6; ++ if (nbytes > This->fraglen * 5) ++ nbytes = This->fraglen * 5; + + TRACE("Reading %u bytes.\n", nbytes); + -+ if (This->buffer_read_offset + nbytes > This->buffer_length) { -+ size_t write_length = This->buffer_length - This->buffer_read_offset; -+ if (nbytes > This->buffer_length) -+ nbytes = This->buffer_length; -+ nbytes -= write_length; -+ pa_stream_write(s, This->buffer + This->buffer_read_offset, write_length, NULL, 0, PA_SEEK_RELATIVE); -+ pa_stream_write(s, This->buffer, nbytes, NULL, 0, PA_SEEK_RELATIVE); -+ This->buffer_read_offset = nbytes; ++ if (This->buffer_read_offset + nbytes <= This->buffer_length) { ++ pa_stream_write(s, This->buffer + This->buffer_read_offset, nbytes, NULL, 0, PA_SEEK_RELATIVE); ++ This->buffer_play_offset = This->buffer_read_offset; ++ This->buffer_read_offset += nbytes; + } else { -+ pa_stream_write(s, This->buffer + This->buffer_read_offset, nbytes, NULL, 0, PA_SEEK_RELATIVE); -+ This->buffer_read_offset += nbytes; ++ size_t write_length = This->buffer_length - This->buffer_read_offset; ++ nbytes -= write_length; ++ pa_stream_write(s, This->buffer + This->buffer_read_offset, write_length, NULL, 0, PA_SEEK_RELATIVE); ++ pa_stream_write(s, This->buffer, nbytes, NULL, 0, PA_SEEK_RELATIVE); ++ This->buffer_play_offset = This->buffer_read_offset; ++ This->buffer_read_offset = nbytes; + } + + This->buffer_read_offset %= This->buffer_length; @@ -128,25 +145,31 @@ index 0000000..5086917 + WARN("(%p) underrun.\n", userdata); +} + -+/* Connects a stream to the server for use in setting the sample format or -+ * stream creation. Does not update IDsDriverBufferImpl->fraglen */ ++/* Connects a stream to the server. Does not update ++ * IDsDriverBufferImpl->fraglen. Does not lock the pulse mainloop or free ++ * objects in case of failure. This should be handled by the calling function. ++ */ +static HRESULT DSPULSE_ConnectStream(IDsDriverBufferImpl* This) { + pa_buffer_attr ba_request; + const pa_buffer_attr *ba_obtained; + char c[PA_SAMPLE_SPEC_SNPRINT_MAX]; -+ pa_stream_flags_t flags = PA_STREAM_START_CORKED; ++ pa_stream_flags_t stream_flags = PA_STREAM_START_CORKED; + -+#if PA_API_VERSION >= 12 -+ flags |= PA_STREAM_EARLY_REQUESTS; ++#if PA_PROTOCOL_VERSION >= 14 ++ /* We are a "fragment wait based" application, so this flag should be ++ * acceptable. */ ++ stream_flags |= PA_STREAM_EARLY_REQUESTS; ++#elif PA_PROTOCOL_VERSION >= 13 && PA_API_VERSION >= 12 ++ stream_flags |= PA_STREAM_ADJUST_LATENCY; +#endif + + pa_sample_spec_snprint(c, PA_SAMPLE_SPEC_SNPRINT_MAX, &This->sample_spec); + TRACE("Sample spec %s fragment size %u.\n", c, This->fraglen); + -+ ba_request.tlength = This->fraglen * 4; -+ ba_request.minreq = This->fraglen / 2; -+ ba_request.prebuf = (uint32_t) -1; /* same as tlength */ -+ ba_request.maxlength = This->buffer_length; ++ ba_request.tlength = This->fraglen * 4; // ~40ms ++ ba_request.minreq = This->fraglen; // ~10ms ++ ba_request.prebuf = (uint32_t)-1; // same as tlength ++ ba_request.maxlength = This->buffer_length; // 2^x = ~3s + + TRACE("Asking for buffer tlength:%u (%llums) minreq:%u (%llums)\n", + ba_request.tlength, pa_bytes_to_usec(ba_request.tlength, &This->sample_spec)/1000, @@ -160,21 +183,21 @@ index 0000000..5086917 + pa_stream_set_underflow_callback(This->stream, DSPULSE_BufferUnderflowCallback, This); + + TRACE("Attempting to connect (%p)->stream for playback on %s\n", This, WOutDev[This->drv->wDevID].device_name); -+ pa_stream_connect_playback(This->stream, WOutDev[This->drv->wDevID].device_name, &ba_request, flags, NULL, NULL); ++ pa_stream_connect_playback(This->stream, WOutDev[This->drv->wDevID].device_name, &ba_request, stream_flags, NULL, NULL); + for (;;) { + pa_context_state_t cstate = pa_context_get_state(PULSE_context); + pa_stream_state_t sstate = pa_stream_get_state(This->stream); + -+ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || -+ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { -+ ERR("Failed to connect stream context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); -+ return DSERR_BUFFERLOST; -+ } ++ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || ++ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { ++ ERR("Failed to connect stream context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); ++ return DSERR_BUFFERLOST; ++ } + -+ if (sstate == PA_STREAM_READY) -+ break; ++ if (sstate == PA_STREAM_READY) ++ break; + -+ pa_threaded_mainloop_wait(PULSE_ml); ++ pa_threaded_mainloop_wait(PULSE_ml); + } + TRACE("(%p)->stream connected for playback.\n", This); + ba_obtained = pa_stream_get_buffer_attr(This->stream); @@ -211,20 +234,15 @@ index 0000000..5086917 + return refCount; + + TRACE("mmap buffer %p destroyed\n", This->buffer); -+ + pa_threaded_mainloop_lock(PULSE_ml); + PULSE_WaitForOperation(pa_stream_cork(This->stream, 1, PULSE_StreamSuccessCallback, This)); + pa_stream_disconnect(This->stream); -+ + if (This == This->drv->primary) + This->drv->primary = NULL; -+ + HeapFree(GetProcessHeap(), 0, This->buffer); + This->buffer = NULL; -+ + pa_stream_unref(This->stream); + This->stream = NULL; -+ + HeapFree(GetProcessHeap(), 0, This); + pa_threaded_mainloop_unlock(PULSE_ml); + @@ -255,7 +273,6 @@ index 0000000..5086917 + * destroy and re-create the stream if the sample spec is different */ +static HRESULT WINAPI IDsDriverBufferImpl_SetFormat(PIDSDRIVERBUFFER iface, LPWAVEFORMATEX pwfx) { + IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; -+ HRESULT ret = DS_OK; + pa_sample_spec old_spec; + + TRACE("(%p, %p)\n", iface, pwfx); @@ -265,29 +282,18 @@ index 0000000..5086917 + old_spec.channels = This->sample_spec.channels; + + if (!PULSE_SetupFormat(pwfx, &This->sample_spec)) -+ return DSERR_BADFORMAT; ++ return DSERR_BADFORMAT; + -+ pa_threaded_mainloop_lock(PULSE_ml); + if (old_spec.rate == This->sample_spec.rate && -+ old_spec.format == This->sample_spec.format && -+ old_spec.channels == This->sample_spec.channels) { -+ TRACE("same as original sample spec, exiting.\n"); -+ ret = DS_OK; -+ goto leave; ++ old_spec.format == This->sample_spec.format && ++ old_spec.channels == This->sample_spec.channels) { ++ TRACE("same as original sample spec, exiting.\n"); ++ return DS_OK; + } + -+ This->fraglen = fragment_length(&This->sample_spec); -+ -+ TRACE("Disconnecting old stream.\n"); -+ pa_stream_disconnect(This->stream); -+ pa_stream_unref(This->stream); -+ ret = DSPULSE_ConnectStream(This); -+ -+leave: -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ TRACE("Exiting\n"); -+ return ret; ++ /* If the format doesn't match, return an error and the buffer will be remade */ ++ TRACE("Formats don't match, failing causing re-creation.\n"); ++ return DSERR_BUFFERLOST; +} + +static HRESULT WINAPI IDsDriverBufferImpl_SetFrequency(PIDSDRIVERBUFFER iface, DWORD dwFreq) @@ -301,19 +307,19 @@ index 0000000..5086917 + IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; + + if (This->sample_spec.channels == 2) { -+ This->volume.channels = 2; -+ if (pVolPan->lPan < 0) { -+ This->volume.values[0] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0 + pVolPan->lPan/10.0); -+ This->volume.values[1] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0); -+ } else { -+ This->volume.values[0] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0); -+ This->volume.values[1] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0 - pVolPan->lPan/10.0); -+ } ++ This->volume.channels = 2; ++ if (pVolPan->lPan < 0) { ++ This->volume.values[0] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0 + pVolPan->lPan/10.0); ++ This->volume.values[1] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0); ++ } else { ++ This->volume.values[0] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0); ++ This->volume.values[1] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0 - pVolPan->lPan/10.0); ++ } + } else { -+ WARN("Panning non-stereo streams not supported yet!\n"); -+ pa_cvolume_set(&This->volume, This->sample_spec.channels, pa_sw_volume_from_dB(pVolPan->lVolume/-10.0)); -+ /* Would be nice to return DSERR_CONTROLUNAVAIL, but that isn't up to us -+ * here */ ++ WARN("Panning non-stereo streams not supported yet!\n"); ++ pa_cvolume_set(&This->volume, This->sample_spec.channels, pa_sw_volume_from_dB(pVolPan->lVolume/-10.0)); ++ /* Would be nice to return DSERR_CONTROLUNAVAIL, but that isn't up to us ++ * here */ + } + + pa_threaded_mainloop_lock(PULSE_ml); @@ -342,17 +348,15 @@ index 0000000..5086917 + IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; + + pa_threaded_mainloop_lock(PULSE_ml); -+ + if (!This->buffer || pa_stream_get_state(This->stream) != PA_STREAM_READY) { -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return DSERR_UNINITIALIZED; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return DSERR_UNINITIALIZED; + } + -+ /* These values are fake, and must remain so */ + if (lpdwPlay) -+ *lpdwPlay = (This->buffer_read_offset + This->buffer_length - This->fraglen * 2) % This->buffer_length; ++ *lpdwPlay = This->buffer_play_offset; + if (lpdwWrite) -+ *lpdwWrite = This->buffer_read_offset; ++ *lpdwWrite = This->buffer_read_offset; + pa_threaded_mainloop_unlock(PULSE_ml); + + return DS_OK; @@ -409,6 +413,7 @@ index 0000000..5086917 + + TRACE("(%p,%p,%x,%x)\n",iface,pwfx,dwFlags,dwCardAddress); + /* we only support primary buffers */ ++ + if (!(dwFlags & DSBCAPS_PRIMARYBUFFER)) + return DSERR_UNSUPPORTED; + if (This->primary) @@ -418,18 +423,20 @@ index 0000000..5086917 + *ippdsdb = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDsDriverBufferImpl)); + + if (!*ippdsdb) { -+ ERR("Out of memory\n"); -+ return DSERR_OUTOFMEMORY; ++ ERR("Out of memory\n"); ++ return DSERR_OUTOFMEMORY; + } + + That = *ippdsdb; + That->lpVtbl = &dsdbvt; + That->ref = 1; ++ + That->drv = This; ++ TRACE("IdsDriverBufferImpl %p created.\n", That); + + if (!PULSE_SetupFormat(pwfx, &That->sample_spec)) { -+ WARN("Bad audio format.\n"); -+ ret = DSERR_BADFORMAT; ++ WARN("Bad audio format.\n"); ++ ret = DSERR_BADFORMAT; + goto err; + } + @@ -437,15 +444,20 @@ index 0000000..5086917 + * dlls/dsound/mixer.c fails to correctly understand buffer wrap around. */ + That->fraglen = fragment_length(&That->sample_spec); + That->buffer_length = That->fraglen * 32; -+ That->buffer = pa_xmalloc0(That->buffer_length); ++ That->buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, That->buffer_length); ++ if (!That->buffer) { ++ ret = DSERR_OUTOFMEMORY; ++ goto err; ++ } + That->buffer_read_offset = 0; ++ That->buffer_play_offset = 0; + + pa_threaded_mainloop_lock(PULSE_ml); + ret = DSPULSE_ConnectStream(That); + pa_threaded_mainloop_unlock(PULSE_ml); + + if (ret != DS_OK) -+ goto err; ++ goto err; + + *pdwcbBufferSize = That->buffer_length; + *ppbBuffer = That->buffer; @@ -456,19 +468,15 @@ index 0000000..5086917 +err: + pa_threaded_mainloop_lock(PULSE_ml); + if (That->stream) { -+ if (pa_stream_get_state(That->stream) == PA_STREAM_READY) -+ pa_stream_disconnect(That->stream); -+ pa_stream_unref(That->stream); -+ That->stream = NULL; ++ if (pa_stream_get_state(That->stream) == PA_STREAM_READY) ++ pa_stream_disconnect(That->stream); ++ pa_stream_unref(That->stream); ++ That->stream = NULL; + } + pa_threaded_mainloop_unlock(PULSE_ml); -+ if (That->buffer) -+ HeapFree(GetProcessHeap(), 0, That->buffer); -+ -+ if (*ippdsdb) -+ HeapFree(GetProcessHeap(), 0, That); -+ *ippdsdb = NULL; -+ TRACE("exiting with failure\n"); ++ HeapFree(GetProcessHeap(), 0, That->buffer); ++ HeapFree(GetProcessHeap(), 0, *ippdsdb); ++ WARN("exiting with failure.\n"); + return ret; +} + @@ -506,7 +514,7 @@ index 0000000..5086917 + *pDesc = WOutDev[This->wDevID].ds_desc; + pDesc->dwFlags = DSDDESC_DONTNEEDSECONDARYLOCK | DSDDESC_DONTNEEDPRIMARYLOCK; + pDesc->dnDevNode = 0; /*TODO: Bwah? */ -+ pDesc->wVxdId = 0; ++ pDesc->wVxdId = 0; + pDesc->wReserved = 0; + pDesc->ulDeviceNum = This->wDevID; + pDesc->dwHeapType = DSDHEAP_NOHEAP; @@ -535,8 +543,8 @@ index 0000000..5086917 + IDsDriverImpl *This = (IDsDriverImpl *)iface; + + if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) { -+ ERR("Context failure.\n"); -+ return DSERR_GENERIC; ++ ERR("Context failure.\n"); ++ return DSERR_GENERIC; + } + + TRACE("(%p,%p)\n",iface,pCaps); @@ -570,15 +578,15 @@ index 0000000..5086917 + IDsDriverImpl** idrv = (IDsDriverImpl**)drv; + + if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || pa_context_is_local(PULSE_context) != 1) { -+ WARN("Connection failure or server is not local, falling back to WaveOut HEL.\n"); -+ return MMSYSERR_NOTSUPPORTED; ++ WARN("Connection failure or server is not local, falling back to WaveOut HEL.\n"); ++ return MMSYSERR_NOTSUPPORTED; + } + + *idrv = HeapAlloc(GetProcessHeap(), 0, sizeof(IDsDriverImpl)); + if (!*idrv) -+ return MMSYSERR_NOMEM; ++ return MMSYSERR_NOMEM; + -+ TRACE("driver created\n"); ++ TRACE("IDsDriverImpl %p created.\n", *idrv); + + (*idrv)->lpVtbl = &dsdvt; + (*idrv)->ref = 1; @@ -596,15 +604,15 @@ index 0000000..5086917 +#endif /* HAVE_PULSEAUDIO */ diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c new file mode 100644 -index 0000000..337814d +index 0000000..aa84c9b --- /dev/null +++ b/dlls/winepulse.drv/pulse.c -@@ -0,0 +1,922 @@ +@@ -0,0 +1,861 @@ +/* + * Wine Driver for PulseAudio + * http://pulseaudio.org/ + * -+ * Copyright 2008 Arthur Taylor ++ * Copyright 2009 Arthur Taylor + * + * Contains code from other wine sound drivers. + * @@ -653,11 +661,6 @@ index 0000000..337814d +#include +WINE_DEFAULT_DEBUG_CHANNEL(wave); + -+/* -+ * - Need to subscribe to sink/source events and keep the WInDev and WOutDev -+ * structures updated -+ */ -+ +/* These strings used only for tracing */ +const char * PULSE_getCmdString(enum win_wm_message msg) { + static char unknown[32]; @@ -868,9 +871,16 @@ index 0000000..337814d + + switch (wf->wFormatTag) { + case WAVE_FORMAT_PCM: -+ if (ss->channels > 2 || ss->channels < 1) return FALSE; ++ /* MSDN says that for WAVE_FORMAT_PCM, nChannels must be 1 or 2 and ++ * wBitsPerSample must be 8 or 16, yet other values are used by some ++ * applications in the wild for surround. */ ++ if (ss->channels > 6 || ss->channels < 1) return FALSE; + ss->format = wf->wBitsPerSample == 8 ? PA_SAMPLE_U8 + : wf->wBitsPerSample == 16 ? PA_SAMPLE_S16NE ++#if PA_PROTOCOL_VERSION >= 15 ++ : wf->wBitsPerSample == 24 ? PA_SAMPLE_S24NE ++#endif ++ : wf->wBitsPerSample == 32 ? PA_SAMPLE_S32NE + : PA_SAMPLE_INVALID; + break; + @@ -1160,6 +1170,7 @@ index 0000000..337814d + + switch (pa_context_get_state(c)) { + case PA_CONTEXT_CONNECTING: ++ case PA_CONTEXT_UNCONNECTED: + case PA_CONTEXT_AUTHORIZING: + case PA_CONTEXT_SETTING_NAME: + break; @@ -1170,217 +1181,141 @@ index 0000000..337814d + break; + + case PA_CONTEXT_FAILED: -+ default: + ERR("Context failure: %s\n", pa_strerror(pa_context_errno(c))); + pa_threaded_mainloop_signal(PULSE_ml, 0); ++ break; + } +} + +/************************************************************************** -+ * PULSE_SourceInfoCallback [internal] ++ * PULSE_AllocateWaveinDevice [internal] + * + * Creates or adds a device to WInDev based on the pa_source_info. + */ -+ -+static void PULSE_SourceInfoCallback(pa_context *c, const pa_source_info *i, int eol, void *userdata) { -+ DWORD *allocated = (DWORD*)userdata; ++static void PULSE_AllocateWaveinDevice(const char *name, const char *device, const char *description, const pa_cvolume *v) { + WINE_WAVEDEV *wdi; + -+ if (eol || !i) { -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ return; -+ } -+ + if (WInDev) -+ wdi = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * (*allocated + 1)); ++ wdi = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * (PULSE_WidNumDevs + 1)); + else + wdi = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); + + if (!wdi) return; + + WInDev = wdi; -+ wdi = &WInDev[(*allocated)++]; ++ wdi = &WInDev[PULSE_WidNumDevs++]; + memset(wdi, 0, sizeof(WINE_WAVEDEV)); + memset(&(wdi->caps.in), 0, sizeof(wdi->caps.in)); -+ -+ wdi->device_name = pa_xstrdup(i->name); ++ snprintf(wdi->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); ++ wdi->device_name = pa_xstrdup(device); + strcpy(wdi->interface_name, "winepulse: "); -+ memcpy(wdi->interface_name + strlen(wdi->interface_name), -+ i->name, min(strlen(i->name), sizeof(wdi->interface_name) - strlen("winepulse: "))); -+ MultiByteToWideChar(CP_ACP, 0, i->description, -1, wdi->caps.in.szPname, sizeof(wdi->caps.in.szPname)/sizeof(WCHAR)); ++ MultiByteToWideChar(CP_ACP, 0, description, -1, wdi->caps.in.szPname, sizeof(wdi->caps.in.szPname)/sizeof(WCHAR)); + wdi->caps.in.szPname[sizeof(wdi->caps.in.szPname)/sizeof(WCHAR) - 1] = '\0'; + wdi->caps.in.wMid = MM_CREATIVE; + wdi->caps.in.wPid = MM_CREATIVE_SBP16_WAVEOUT; + wdi->caps.in.vDriverVersion = 0x0100; -+ wdi->caps.in.wChannels = i->sample_spec.channels == 1 ? 1 : 2; ++ wdi->caps.in.wChannels = v->channels == 1 ? 1 : 2; + wdi->caps.in.dwFormats = PULSE_ALL_FORMATS; -+ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ memset(&wdi->ds_desc, 0, sizeof(DSDRIVERDESC)); ++ memcpy(wdi->ds_desc.szDesc, description, min(sizeof(wdi->ds_desc.szDesc) - 1, strlen(description))); ++ memcpy(wdi->ds_desc.szDrvname, "winepulse.drv", 14); ++ wdi->ds_caps.dwMinSecondarySampleRate = DSBFREQUENCY_MIN; ++ wdi->ds_caps.dwMaxSecondarySampleRate = DSBFREQUENCY_MAX; ++ wdi->ds_caps.dwPrimaryBuffers = 1; ++ wdi->ds_caps.dwFlags = \ ++ DSCAPS_PRIMARYMONO | ++ DSCAPS_PRIMARYSTEREO | ++ DSCAPS_PRIMARY8BIT | ++ DSCAPS_PRIMARY16BIT | ++ DSCAPS_SECONDARYMONO | ++ DSCAPS_SECONDARYSTEREO | ++ DSCAPS_SECONDARY8BIT | ++ DSCAPS_SECONDARY16BIT | ++ DSCCAPS_MULTIPLECAPTURE | ++ DSCAPS_CERTIFIED | /* Useful? */ ++ DSCAPS_EMULDRIVER; /* Useful? */ ++ +} + +/************************************************************************** -+ * PULSE_SinkInfoCallback [internal] ++ * PULSE_AllocateWaveoutDevice [internal] + * + * Creates or adds a sink to the WOutDev array. + */ -+static void PULSE_SinkInfoCallback(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { -+ DWORD *allocated = (DWORD*)userdata; ++static void PULSE_AllocateWaveoutDevice(const char *name, const char *device, const char *description, const pa_cvolume *v) { + WINE_WAVEDEV *wdo; + int x; + -+ if (eol || !i) { -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ return; -+ } -+ + if (WOutDev) -+ wdo = HeapReAlloc(GetProcessHeap(), 0, WOutDev, sizeof(WINE_WAVEDEV) * (*allocated + 1)); ++ wdo = HeapReAlloc(GetProcessHeap(), 0, WOutDev, sizeof(WINE_WAVEDEV) * (PULSE_WodNumDevs + 1)); + else + wdo = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); + + if (!wdo) return; + + WOutDev = wdo; -+ wdo = &WOutDev[(*allocated)++]; ++ wdo = &WOutDev[PULSE_WodNumDevs++]; + memset(wdo, 0, sizeof(WINE_WAVEDEV)); + -+ wdo->device_name = pa_xstrdup(i->name); -+ wdo->volume.channels = i->volume.channels; -+ for (x = 0; x < i->volume.channels; x++) wdo->volume.values[x] = i->volume.values[x]; -+ strcpy(wdo->interface_name, "winepulse: "); -+ memcpy(wdo->interface_name + strlen(wdo->interface_name), -+ i->name, min(strlen(i->name), -+ sizeof(wdo->interface_name) - strlen("winepulse: "))); -+ MultiByteToWideChar(CP_ACP, 0, i->description, -1, wdo->caps.out.szPname, sizeof(wdo->caps.out.szPname)/sizeof(WCHAR)); ++ wdo->device_name = pa_xstrdup(device); ++ wdo->volume.channels = v->channels; ++ for (x = 0; x < v->channels; x++) wdo->volume.values[x] = v->values[x]; ++ snprintf(wdo->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); ++ MultiByteToWideChar(CP_ACP, 0, description, -1, wdo->caps.out.szPname, sizeof(wdo->caps.out.szPname)/sizeof(WCHAR)); + wdo->caps.out.szPname[sizeof(wdo->caps.out.szPname)/sizeof(WCHAR) - 1] = '\0'; + wdo->caps.out.wMid = MM_CREATIVE; + wdo->caps.out.wPid = MM_CREATIVE_SBP16_WAVEOUT; + wdo->caps.out.vDriverVersion = 0x0100; -+ wdo->caps.out.dwSupport = WAVECAPS_VOLUME | WAVECAPS_SAMPLEACCURATE; -+ if (i->sample_spec.channels == 2) { ++ wdo->caps.out.dwSupport = WAVECAPS_VOLUME | WAVECAPS_SAMPLEACCURATE | WAVECAPS_DIRECTSOUND; ++ if (v->channels >= 2) { + wdo->caps.out.wChannels = 2; + wdo->caps.out.dwSupport |= WAVECAPS_LRVOLUME; + } else -+ wdo->caps.out.wChannels = i->sample_spec.channels == 1 ? 1 : 2; ++ wdo->caps.out.wChannels = 1; + wdo->caps.out.dwFormats = PULSE_ALL_FORMATS; + memset(&wdo->ds_desc, 0, sizeof(DSDRIVERDESC)); -+ memcpy(wdo->ds_desc.szDesc, i->description, min(sizeof(wdo->ds_desc.szDesc) - 1, strlen(i->description))); -+ strcpy(wdo->ds_desc.szDrvname, "winepulse.drv"); ++ memcpy(wdo->ds_desc.szDesc, description, min(sizeof(wdo->ds_desc.szDesc) - 1, strlen(description))); ++ memcpy(wdo->ds_desc.szDrvname, "winepulse.drv", 14); + wdo->ds_caps.dwMinSecondarySampleRate = DSBFREQUENCY_MIN; + wdo->ds_caps.dwMaxSecondarySampleRate = DSBFREQUENCY_MAX; + wdo->ds_caps.dwPrimaryBuffers = 1; ++ wdo->ds_caps.dwFlags = \ ++ DSCAPS_PRIMARYMONO | ++ DSCAPS_PRIMARYSTEREO | ++ DSCAPS_PRIMARY8BIT | ++ DSCAPS_PRIMARY16BIT | ++ DSCAPS_SECONDARYMONO | ++ DSCAPS_SECONDARYSTEREO | ++ DSCAPS_SECONDARY8BIT | ++ DSCAPS_SECONDARY16BIT | ++ DSCAPS_CERTIFIED; ++} ++ ++/************************************************************************** ++ * PULSE_SourceInfoCallback [internal] ++ */ ++static void PULSE_SourceInfoCallback(pa_context *c, const pa_source_info *i, int eol, void *userdata) { ++ ++ if (!eol && i) ++ PULSE_AllocateWaveinDevice(i->name, i->name, i->description, &i->volume); + + pa_threaded_mainloop_signal(PULSE_ml, 0); +} + +/************************************************************************** -+ * PULSE_UpdateWavedevs [internal] -+ * -+ * Calls PULSE_add_output_device to add the sink to the list of devices ++ * PULSE_SinkInfoCallback [internal] + */ -+BOOL PULSE_UpdateWavedevs(int devices) { -+ WINE_WAVEDEV *old_devs; -+ DWORD old_numdevs; -+ DWORD rc; -+ HKEY key; -+ BOOL show_monitor_sources = TRUE; ++static void PULSE_SinkInfoCallback(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { + -+ rc = RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Wine\\Pulse Driver", 0, KEY_QUERY_VALUE, &key); -+ if (rc == ERROR_SUCCESS) { -+ DWORD type; -+ DWORD bufsize; -+ char *bufp; ++ if (!eol && i) ++ PULSE_AllocateWaveoutDevice(i->name, i->name, i->description, &i->volume); + -+ rc = RegQueryValueExA(key, "MonitorDevices", NULL, &type, NULL, &bufsize); -+ if (rc == ERROR_SUCCESS || type == REG_SZ) { -+ bufp = HeapAlloc(GetProcessHeap(), 0, bufsize); -+ if (bufp) { -+ rc = RegQueryValueExA(key, "MonitorDevices", NULL, NULL, (LPBYTE)bufp, &bufsize); -+ if (rc == ERROR_SUCCESS && ( -+ *bufp == 'n' || *bufp == 'N' || -+ *bufp == 'f' || *bufp == 'F' || -+ *bufp == 'd' || *bufp == 'D' || -+ *bufp == '0')) -+ show_monitor_sources = FALSE; -+ HeapFree(GetProcessHeap(), 0, bufp); -+ } -+ } -+ } -+ if (key) -+ RegCloseKey(key); -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (devices & PULSE_OUT_DEVS) { -+ old_devs = WOutDev; -+ old_numdevs = PULSE_WodNumDevs; -+ WOutDev = NULL; -+ PULSE_WodNumDevs = 0; -+ -+ /* Ask for all the sinks and create objects in the WOutDev array */ -+ PULSE_WaitForOperation(pa_context_get_sink_info_list(PULSE_context, PULSE_SinkInfoCallback, &PULSE_WodNumDevs)); -+ if (PULSE_WodNumDevs) { -+ if (old_devs) -+ HeapFree(GetProcessHeap(), 0, old_devs); -+ TRACE("Allocated %i output device%s.\n", PULSE_WodNumDevs, PULSE_WodNumDevs > 1 ? "s" : ""); -+ } else { -+ WARN("Didn't seem to find any waveout devices upon update, not updating!\n"); -+ if (WOutDev) -+ HeapFree(GetProcessHeap(), 0, WOutDev); -+ WOutDev = old_devs; -+ PULSE_WodNumDevs = old_numdevs; -+ } -+ } -+ -+ if (devices & PULSE_IN_DEVS) { -+ old_devs = WInDev; -+ old_numdevs = PULSE_WidNumDevs; -+ WInDev = NULL; -+ PULSE_WidNumDevs = 0; -+ -+ /* Ask for all the sources and create objects in the WOutDev array */ -+ PULSE_WaitForOperation(pa_context_get_source_info_list(PULSE_context, PULSE_SourceInfoCallback, &PULSE_WidNumDevs)); -+ if (PULSE_WidNumDevs) { -+ if (old_devs) -+ HeapFree(GetProcessHeap(), 0, old_devs); -+ TRACE("Allocated %i input device%s.\n", PULSE_WidNumDevs, PULSE_WidNumDevs > 1 ? "s" : ""); -+ } else { -+ WARN("Didn't seem to find any wavein devices upon update, not updating!\n"); -+ if (WInDev) -+ HeapFree(GetProcessHeap(), 0, WInDev); -+ WInDev = old_devs; -+ PULSE_WidNumDevs = old_numdevs; -+ } -+ -+ /* Swap around the devices so monitor streams come last. */ -+ { -+ int x; -+ int count = 0; -+ WINE_WAVEDEV tmp[PULSE_WidNumDevs]; -+ -+ memcpy(tmp, WInDev, sizeof(WINE_WAVEDEV) * PULSE_WidNumDevs); -+ for (x = 0; x < PULSE_WidNumDevs; x++) { -+ if (!strstr(tmp[x].device_name, ".monitor")) { -+ memcpy(&WInDev[count++], &tmp[x], sizeof(WINE_WAVEDEV)); -+ } -+ } -+ if (show_monitor_sources) { -+ for (x = 0; x < PULSE_WidNumDevs; x++) { -+ if (strstr(tmp[x].device_name, ".monitor")) { -+ memcpy(&WInDev[count++], &tmp[x], sizeof(WINE_WAVEDEV)); -+ } -+ } -+ } -+ if (PULSE_WidNumDevs != count) { -+ TRACE("Removed monitors sources, now have %u input devices.\n", count); -+ WInDev = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * count); -+ PULSE_WidNumDevs = count; -+ } -+ } -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ return TRUE; ++ pa_threaded_mainloop_signal(PULSE_ml, 0); +} + ++/************************************************************************** ++ * PULSE_ContextNotifyCallback [internal] ++ */ +static void PULSE_ContextNotifyCallback(pa_context *c, void *userdata) { + pa_threaded_mainloop_signal(PULSE_ml, 0); +} @@ -1393,10 +1328,14 @@ index 0000000..337814d + */ + +static LONG PULSE_WaveClose(void) { ++ int x; + TRACE("()\n"); -+ if (!PULSE_ml) return 1; ++ if (!PULSE_ml) return DRV_FAILURE; + + pa_threaded_mainloop_lock(PULSE_ml); ++ /* device_name is allocated with pa_xstrdup, free with pa_xfree */ ++ for (x = 0; x < PULSE_WodNumDevs; x++) pa_xfree(WOutDev[x].device_name); ++ for (x = 0; x < PULSE_WidNumDevs; x++) pa_xfree(WInDev[x].device_name); + HeapFree(GetProcessHeap(), 0, WOutDev); + HeapFree(GetProcessHeap(), 0, WInDev); + if (PULSE_context) { @@ -1425,7 +1364,8 @@ index 0000000..337814d + char path[PATH_MAX]; + char *offset = NULL; + int x = 0; -+ ++ pa_cvolume fake_cvolume; ++ + WOutDev = NULL; + WInDev = NULL; + PULSE_WodNumDevs = 0; @@ -1443,12 +1383,11 @@ index 0000000..337814d + + /* Get binary path, and remove path a-la strrchr */ + if (GetModuleFileNameA(NULL, path, PATH_MAX)) -+ for (offset = path; *offset; offset++) -+ if (*offset == '\\') x = offset - path + 1; ++ offset = strrchr(path, '\\'); + -+ if (offset || path[x]) { -+ app_name = pa_xmalloc(strlen(path + x) + 8); -+ snprintf(app_name, strlen(path + x) + 8, "WINE [%s]", path + x); ++ if (offset && ++offset && offset < path + PATH_MAX) { ++ app_name = pa_xmalloc(strlen(offset) + 8); ++ snprintf(app_name, strlen(offset) + 8, "WINE [%s]", offset); + } else + app_name = pa_xstrdup("WINE Application"); + @@ -1463,7 +1402,7 @@ index 0000000..337814d + + pa_threaded_mainloop_lock(PULSE_ml); + -+ TRACE("libpulse protocol version: %u.\n", pa_context_get_protocol_version(PULSE_context)); ++ TRACE("libpulse protocol version: %u. API Version %u\n", pa_context_get_protocol_version(PULSE_context), PA_API_VERSION); + TRACE("Attempting to connect to pulseaudio server.\n"); + if (pa_context_connect(PULSE_context, NULL, 0, NULL) < 0) + goto fail; @@ -1480,11 +1419,20 @@ index 0000000..337814d + + pa_threaded_mainloop_wait(PULSE_ml); + } -+ ++ + x = pa_context_get_server_protocol_version(PULSE_context); + TRACE("Connected to server %s with protocol version: %i.\n", pa_context_get_server(PULSE_context), x); + if (x < 14) -+ WARN("Server is old, expect poor latency or bugginess!\n"); ++ WARN("Server is old, expect poor latency or buggy-ness!\n"); ++ ++ fake_cvolume.channels = 2; ++ pa_cvolume_reset(&fake_cvolume, 2); ++ /* FIXME Translations? */ ++ PULSE_AllocateWaveoutDevice("default", NULL, "Default", &fake_cvolume); ++ PULSE_AllocateWaveinDevice("default", NULL, "Default", &fake_cvolume); ++ PULSE_WaitForOperation(pa_context_get_sink_info_list(PULSE_context, PULSE_SinkInfoCallback, &PULSE_WodNumDevs)); ++ PULSE_WaitForOperation(pa_context_get_source_info_list(PULSE_context, PULSE_SourceInfoCallback, &PULSE_WidNumDevs)); ++ TRACE("Found %u output and %u input device(s).\n", PULSE_WodNumDevs - 1, PULSE_WidNumDevs - 1); + + pa_threaded_mainloop_unlock(PULSE_ml); + @@ -1506,8 +1454,7 @@ index 0000000..337814d + + switch(wMsg) { +#ifdef HAVE_PULSEAUDIO -+ case DRV_LOAD: PULSE_WaveInit(); -+ return 1; ++ case DRV_LOAD: return PULSE_WaveInit(); + case DRV_FREE: return PULSE_WaveClose(); + case DRV_OPEN: return 1; + case DRV_CLOSE: return 1; @@ -1524,10 +1471,10 @@ index 0000000..337814d +} diff --git a/dlls/winepulse.drv/wavein.c b/dlls/winepulse.drv/wavein.c new file mode 100644 -index 0000000..7024ccd +index 0000000..1534d6e --- /dev/null +++ b/dlls/winepulse.drv/wavein.c -@@ -0,0 +1,555 @@ +@@ -0,0 +1,572 @@ +/* + * Wine Driver for PulseAudio - WaveIn Functionality + * http://pulseaudio.org/ @@ -1608,11 +1555,13 @@ index 0000000..7024ccd + size_t size; + while (lpWaveHdr && wwi->state == WINE_WS_PLAYING && wwi->buffer) { + size = min(wwi->buffer_length - wwi->buffer_read_offset, lpWaveHdr->dwBufferLength - lpWaveHdr->dwBytesRecorded); -+ if (size == 0) { ERR("Size is 0! buffer is full but not freed?\n"); continue; } ++ if (size == 0) ERR("Size is 0! buffer is full but not freed?\n"); + memcpy(lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded, (PBYTE)wwi->buffer + wwi->buffer_read_offset, size); + wwi->buffer_read_offset += size; + if (wwi->buffer_read_offset == wwi->buffer_length) { ++ pa_threaded_mainloop_lock(PULSE_ml); + pa_stream_drop(wwi->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); + wwi->buffer = NULL; + wwi->buffer_length = 0; + wwi->buffer_read_offset = 0; @@ -1634,19 +1583,20 @@ index 0000000..7024ccd +* Switches the current fragment to the next based upon a message from the +* server. +*/ -+static void widRecorder_NextFragment(WINE_WAVEINST *wwi, size_t size) { ++static void widRecorder_NextFragment(WINE_WAVEINST *wwi, size_t sizer) { ++ LPWAVEHDR lpWaveHdr = wwi->lpQueuePtr; ++ size_t request = 0; ++ ++ for (;lpWaveHdr; lpWaveHdr = lpWaveHdr->lpNext) ++ request += lpWaveHdr->dwBufferLength; ++ ++ lpWaveHdr = wwi->lpQueuePtr; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_peek(wwi->stream, &wwi->buffer, &request); ++ wwi->buffer_length = request; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ + widRecorder_CopyData(wwi); -+ if (wwi->buffer) { -+ if (wwi->buffer_read_offset != wwi->buffer_length) -+ ERR("We didn't read all of the data, there will be gaps. FO:%u, FS: %u\n", wwi->buffer_read_offset, wwi->buffer_length); -+ pa_stream_drop(wwi->stream); -+ wwi->buffer = NULL; -+ wwi->buffer_length = 0; -+ wwi->buffer_read_offset = 0; -+ } -+ pa_stream_peek(wwi->stream, &wwi->buffer, &size); -+ wwi->buffer_length = size; -+ wwi->buffer_read_offset = 0; +} + +/************************************************************************** @@ -1663,101 +1613,104 @@ index 0000000..7024ccd + SetEvent(wwi->hStartUpEvent); + + for (;;) { -+ PULSE_WaitRingMessage(&wwi->msgRing, INFINITE); -+ while (PULSE_RetrieveRingMessage(&wwi->msgRing, &msg, ¶m, &ev)) { -+ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); ++ PULSE_WaitRingMessage(&wwi->msgRing, INFINITE); ++ while (PULSE_RetrieveRingMessage(&wwi->msgRing, &msg, ¶m, &ev)) { ++ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); + -+ switch (msg) { -+ case WINE_WM_FEED: -+ SetEvent(ev); -+ if (wwi->state == WINE_WS_PLAYING) -+ widRecorder_NextFragment(wwi, param); -+ else -+ (pa_stream_drop(wwi->stream)); -+ break; -+ case WINE_WM_STARTING: -+ wwi->state = WINE_WS_PLAYING; -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 0, PULSE_StreamSuccessCallback, NULL)); -+ SetEvent(ev); -+ break; -+ case WINE_WM_HEADER: -+ lpWaveHdr = (LPWAVEHDR)param; -+ lpWaveHdr->lpNext = 0; ++ switch (msg) { ++ case WINE_WM_FEED: ++ SetEvent(ev); ++ if (wwi->state == WINE_WS_PLAYING) ++ widRecorder_NextFragment(wwi, param); ++ break; ++ case WINE_WM_STARTING: ++ wwi->state = WINE_WS_PLAYING; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 0, PULSE_StreamSuccessCallback, NULL)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ SetEvent(ev); ++ break; ++ case WINE_WM_HEADER: ++ lpWaveHdr = (LPWAVEHDR)param; ++ lpWaveHdr->lpNext = 0; + -+ /* insert buffer at the end of queue */ -+ { -+ LPWAVEHDR* wh; -+ for (wh = &(wwi->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); -+ *wh = lpWaveHdr; -+ } -+ break; -+ case WINE_WM_STOPPING: -+ if (wwi->state != WINE_WS_STOPPED) { -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); -+ pa_stream_drop(wwi->stream); ++ /* insert buffer at the end of queue */ ++ { ++ LPWAVEHDR* wh; ++ for (wh = &(wwi->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); ++ *wh = lpWaveHdr; ++ } ++ break; ++ case WINE_WM_STOPPING: ++ if (wwi->state != WINE_WS_STOPPED) { ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); ++ pa_stream_drop(wwi->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); + -+ /* return current buffer to app */ -+ lpWaveHdr = wwi->lpQueuePtr; -+ if (lpWaveHdr) { -+ LPWAVEHDR lpNext = lpWaveHdr->lpNext; -+ TRACE("stop %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); ++ /* return current buffer to app */ ++ lpWaveHdr = wwi->lpQueuePtr; ++ if (lpWaveHdr) { ++ LPWAVEHDR lpNext = lpWaveHdr->lpNext; ++ TRACE("stop %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ wwi->lpQueuePtr = lpNext; ++ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); ++ } ++ } ++ wwi->state = WINE_WS_STOPPED; ++ SetEvent(ev); ++ break; ++ case WINE_WM_RESETTING: ++ if (wwi->state != WINE_WS_STOPPED) { ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_drop(wwi->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ wwi->state = WINE_WS_STOPPED; ++ ++ /* return all buffers to the app */ ++ for (lpWaveHdr = wwi->lpQueuePtr; lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { ++ TRACE("reset %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); + lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; + lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpNext; ++ wwi->lpQueuePtr = lpWaveHdr->lpNext; + widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); + } -+ } -+ wwi->state = WINE_WS_STOPPED; -+ SetEvent(ev); -+ break; -+ case WINE_WM_RESETTING: -+ if (wwi->state != WINE_WS_STOPPED) -+ pa_stream_drop(wwi->stream); -+ wwi->state = WINE_WS_STOPPED; -+ -+ /* return all buffers to the app */ -+ for (lpWaveHdr = wwi->lpQueuePtr; lpWaveHdr; lpWaveHdr = lpWaveHdr->lpNext) { -+ TRACE("reset %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpWaveHdr->lpNext; -+ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ } -+ -+ wwi->lpQueuePtr = NULL; -+ SetEvent(ev); -+ break; -+ case WINE_WM_XRUN: -+ pa_stream_drop(wwi->stream); -+ wwi->buffer_read_offset = 0; -+ break; -+ case WINE_WM_CLOSING: -+ wwi->hThread = 0; -+ if ((DWORD)param == 1) { -+ wwi->state = WINE_WS_FAILED; ++ wwi->lpQueuePtr = NULL; + SetEvent(ev); -+ PULSE_DestroyRingMessage(&wwi->msgRing); -+ widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); -+ wwi->lpPlayPtr = wwi->lpQueuePtr = NULL; ++ break; ++ case WINE_WM_XRUN: + pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_disconnect(wwi->stream); ++ pa_stream_drop(wwi->stream); + pa_threaded_mainloop_unlock(PULSE_ml); -+ TRACE("Thread exiting because of failure.\n"); -+ ExitThread(1); ++ wwi->buffer_read_offset = 0; ++ break; ++ case WINE_WM_CLOSING: ++ wwi->hThread = 0; ++ if ((DWORD)param == 1) { ++ wwi->state = WINE_WS_FAILED; ++ SetEvent(ev); ++ PULSE_DestroyRingMessage(&wwi->msgRing); ++ widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); ++ wwi->lpPlayPtr = wwi->lpQueuePtr = NULL; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_disconnect(wwi->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ TRACE("Thread exiting because of failure.\n"); ++ ExitThread(1); ++ } ++ wwi->state = WINE_WS_CLOSED; ++ SetEvent(ev); ++ ExitThread(0); ++ /* shouldn't go here */ ++ default: ++ FIXME("unknown message %d\n", msg); ++ break; + } -+ wwi->state = WINE_WS_CLOSED; -+ SetEvent(ev); -+ ExitThread(0); -+ /* shouldn't go here */ -+ default: -+ FIXME("unknown message %d\n", msg); -+ break; + } -+ } -+ -+ widRecorder_CopyData(wwi); -+ -+} /* for (;;) */ ++ } /* for (;;) */ +} + +/************************************************************************** @@ -1822,7 +1775,11 @@ index 0000000..7024ccd + + pa_threaded_mainloop_lock(PULSE_ml); + TRACE("Asking to open %s for recording.\n", wdi->device_name); -+ pa_stream_connect_record(wwi->stream, wdi->device_name, NULL, PA_STREAM_START_CORKED | PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_INTERPOLATE_TIMING); ++ pa_stream_connect_record(wwi->stream, wdi->device_name, NULL, ++ PA_STREAM_START_CORKED | ++ PA_STREAM_AUTO_TIMING_UPDATE | ++ PA_STREAM_INTERPOLATE_TIMING); ++ + for (;;) { + pa_context_state_t cstate = pa_context_get_state(PULSE_context); + pa_stream_state_t sstate = pa_stream_get_state(wwi->stream); @@ -2006,8 +1963,6 @@ index 0000000..7024ccd +static DWORD widGetNumDevs() { + if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) + return 0; -+ -+ PULSE_UpdateWavedevs(PULSE_IN_DEVS); + + return PULSE_WidNumDevs; +} @@ -2038,6 +1993,15 @@ index 0000000..7024ccd +} + +/************************************************************************** ++ * widDsDesc [internal] ++ */ ++DWORD widDsDesc(UINT wDevID, PDSDRIVERDESC desc) ++{ ++ *desc = WInDev[wDevID].ds_desc; ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** + * widMessage (WINEPULSE.@) + */ +DWORD WINAPI PULSE_widMessage(UINT wDevID, UINT wMsg, DWORD dwUser, @@ -2063,8 +2027,8 @@ index 0000000..7024ccd + case WIDM_STOP: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_STOPPING); + case DRV_QUERYDEVICEINTERFACESIZE: return widDevInterfaceSize (wDevID, (LPDWORD)dwParam1); + case DRV_QUERYDEVICEINTERFACE: return widDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); -+ case DRV_QUERYDSOUNDIFACE: return 0; -+ case DRV_QUERYDSOUNDDESC: return 0; ++ case DRV_QUERYDSOUNDIFACE: return MMSYSERR_NOTSUPPORTED; /* Use emulation, as there is no advantage */ ++ case DRV_QUERYDSOUNDDESC: return widDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); + default: + FIXME("unknown message %d!\n", wMsg); + } @@ -2085,10 +2049,10 @@ index 0000000..7024ccd +#endif /* HAVE_PULSEAUDIO */ diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c new file mode 100644 -index 0000000..968d1bd +index 0000000..4539103 --- /dev/null +++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1098 @@ +@@ -0,0 +1,1092 @@ +/* + * Wine Driver for PulseAudio - WaveOut Functionality + * http://pulseaudio.org/ @@ -2327,7 +2291,7 @@ index 0000000..968d1bd + wwo->buffer_attr.prebuf = (uint32_t) -1; + wwo->buffer_attr.minreq = (uint32_t) -1; + wwo->buffer_attr.maxlength = (uint32_t) -1; -+ WARN("Asking for new buffer tlength of %u.\n", wwo->buffer_attr.tlength); ++ WARN("Asking for new buffer tlength of %ums (%u bytes)\n", (unsigned int)(pa_bytes_to_usec(wwo->buffer_attr.tlength, &wwo->sample_spec)/1000), wwo->buffer_attr.tlength); + pa_stream_set_buffer_attr(wwo->stream, &wwo->buffer_attr, PULSE_StreamSuccessCallback, wwo); + } else { + /* Fake playback start earlier, introducing latency */ @@ -2702,6 +2666,7 @@ index 0000000..968d1bd + WINE_WAVEDEV *wdo; + WINE_WAVEINST *wwo = NULL; + DWORD ret = MMSYSERR_NOERROR; ++ pa_stream_flags_t stream_flags; + + TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); + if (lpDesc == NULL) { @@ -2760,27 +2725,21 @@ index 0000000..968d1bd + pa_stream_set_moved_callback (wwo->stream, PULSE_StreamMovedCallback, wwo); + pa_stream_set_suspended_callback (wwo->stream, PULSE_StreamSuspendedCallback, wwo); + ++ stream_flags = PA_STREAM_AUTO_TIMING_UPDATE; ++ +#if PA_API_VERSION >= 12 + if (pa_context_get_server_protocol_version(PULSE_context) >= 15) { + pa_stream_set_started_callback(wwo->stream, WAVEOUT_StreamStartedCallback, wwo); ++ stream_flags |= PA_STREAM_ADJUST_LATENCY; + } else +#endif ++ { + pa_stream_set_latency_update_callback(wwo->stream, WAVEOUT_StreamTimingInfoUpdateCallback, wwo); -+ ++ } + + TRACE("Connecting stream for playback on %s.\n", wdo->device_name); + pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_connect_playback(wwo->stream, -+ /* Use WAVE_FORMAT_DIRECT to detect if we are being called by the -+ * wavemapper, in which case don't specify a device so that libpulse -+ * chooses based upon environment variables, x11 root window info, etc. If -+ * WAVE_FORMAT_DIRECT is inappropriate, maybe winmm could stop eating -+ * WAVE_MAPPER? */ -+ dwFlags & WAVE_FORMAT_DIRECT ? NULL : wdo->device_name, -+ NULL, -+ PA_STREAM_AUTO_TIMING_UPDATE, -+ NULL, -+ NULL); ++ pa_stream_connect_playback(wwo->stream, wdo->device_name, NULL, stream_flags, NULL, NULL); + + for (;;) { + pa_context_state_t cstate = pa_context_get_state(PULSE_context); @@ -2978,7 +2937,6 @@ index 0000000..968d1bd + if (!PULSE_ml || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) + return 0; + -+ PULSE_UpdateWavedevs(PULSE_OUT_DEVS); + return PULSE_WodNumDevs; +} + @@ -3057,7 +3015,7 @@ index 0000000..968d1bd + } else { + if (value1 != value2) FIXME("Non-stereo streams can't pan!\n"); + wwo->volume.channels = wwo->sample_spec.channels; -+ pa_cvolume_set(&wwo->volume, wwo->volume.channels, pa_sw_volume_from_dB(MAX(value1, value2))); ++ pa_cvolume_set(&wwo->volume, wwo->volume.channels, pa_sw_volume_from_dB(max(value1, value2))); + } + + if (TRACE_ON(wave)) { @@ -3198,13 +3156,13 @@ index 0000000..1b49460 +@ stdcall -private widMessage(long long long long long long) PULSE_widMessage diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h new file mode 100644 -index 0000000..27690d3 +index 0000000..59fbb38 --- /dev/null +++ b/dlls/winepulse.drv/winepulse.h -@@ -0,0 +1,232 @@ +@@ -0,0 +1,228 @@ +/* Definitions for PulseAudio Wine Driver + * -+ * Copyright 2008 Arthur Taylor ++ * Copyright 2009 Arthur Taylor + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public @@ -3262,10 +3220,6 @@ index 0000000..27690d3 +#define WINE_WS_CLOSED 4 +#define WINE_WS_FAILED 5 + -+#define PULSE_OUT_DEVS 0x1 -+#define PULSE_IN_DEVS 0x2 -+#define PULSE_ALL_DEVS PULSE_IN_DEVS | PULSE_OUT_DEVS -+ +#define PULSE_ALL_FORMATS \ + WAVE_FORMAT_1M08 | /* Mono 11025Hz 8-bit */\ + WAVE_FORMAT_1M16 | /* Mono 11025Hz 16-bit */\ @@ -3338,10 +3292,11 @@ index 0000000..27690d3 + pa_sample_spec sample_spec; + pa_cvolume volume; + -+ PBYTE buffer; /* Pointer to the latest data fragment for recording streams */ -+ size_t buffer_length; /* How large the latest data fragment is */ -+ size_t buffer_read_offset; /* How far into latest data fragment we last read */ -+ size_t fraglen; ++ PBYTE buffer; ++ DWORD buffer_length; ++ DWORD buffer_read_offset; ++ DWORD buffer_play_offset; ++ DWORD fraglen; +}; + +/* Per-playback/record device */ @@ -3388,9 +3343,9 @@ index 0000000..27690d3 + + /* waveIn */ + const void *buffer; /* Pointer to the latest data fragment for recording streams */ -+ size_t buffer_length; /* How large the latest data fragment is */ -+ size_t buffer_read_offset; /* How far into latest data fragment we last read */ -+ size_t fraglen; ++ DWORD buffer_length; /* How large the latest data fragment is */ ++ DWORD buffer_read_offset; /* How far into latest data fragment we last read */ ++ DWORD fraglen; + + /* Thread communication and synchronization stuff */ + HANDLE hStartUpEvent; @@ -3428,7 +3383,6 @@ index 0000000..27690d3 +int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait); +int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, enum win_wm_message *msg, DWORD *param, HANDLE *hEvent); +const char * PULSE_getCmdString(enum win_wm_message msg); -+BOOL PULSE_UpdateWavedevs(int devices); + +/* dsoutput.c */ +DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv); From d633b34ee332f1883d1e6d6976e8c33d4dee2932 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 12 May 2009 14:43:26 +0000 Subject: [PATCH 111/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-desktop-mime.patch | 10 - wine.spec | 22 +- winepulse-0.24.patch => winepulse-0.25.patch | 448 ++++++++++--------- 5 files changed, 258 insertions(+), 226 deletions(-) delete mode 100644 wine-desktop-mime.patch rename winepulse-0.24.patch => winepulse-0.25.patch (94%) diff --git a/.cvsignore b/.cvsignore index 8cff2a6..ba3a325 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.18-fe.tar.bz2 +wine-1.1.21-fe.tar.bz2 diff --git a/sources b/sources index 4efaac4..6e93402 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -1933049a7cc725bcb488c6669fa5ca9e wine-1.1.18-fe.tar.bz2 +5b062451ee5e21189eea49cffd9bc0d8 wine-1.1.21-fe.tar.bz2 diff --git a/wine-desktop-mime.patch b/wine-desktop-mime.patch deleted file mode 100644 index ed87de5..0000000 --- a/wine-desktop-mime.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- tools/wine.desktop.orig 2009-01-17 09:46:27.000000000 +0100 -+++ tools/wine.desktop 2009-01-17 09:46:59.000000000 +0100 -@@ -16,6 +16,6 @@ - Name[nb]=Wine Programlaster for Windowsapplikasjoner - Name[nn]=Wine Programlaster for Windowsapplikasjoner - Exec=wine start /unix %f --MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed;application/x-executable;application/x-msi; -+MimeType=application/x-ms-dos-executable;application/x-msdos-program;application/x-msdownload;application/exe;application/x-exe;application/dos-exe;vms/exe;application/x-winexe;application/msdos-windows;application/x-zip-compressed;application/x-msi; - NoDisplay=true - StartupNotify=true diff --git a/wine.spec b/wine.spec index 41197b9..ddfc967 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.18 +Version: 1.1.21 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -43,14 +43,12 @@ 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.17-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse-0.24.patch +Patch401: http://art.ified.ca/downloads/winepulse-0.25.patch Patch402: http://art.ified.ca/downloads/adding-pulseaudio-to-winecfg.patch Source402: README-FEDORA-PULSEAUDIO Patch1: wine-rpath.patch -# fix #448338 -Patch2: wine-desktop-mime.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) ExclusiveArch: %{ix86} @@ -239,7 +237,6 @@ wine audio driver. Please do not report bugs regarding this driver at winehq.org %prep %setup -q -n %{name}-%{version}-fe %patch1 -%patch2 %patch400 -p1 %patch401 -p1 %patch402 -p1 @@ -421,6 +418,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/secedit.exe.so %{_libdir}/wine/services.exe.so %{_libdir}/wine/start.exe.so +%{_libdir}/wine/termsv.exe.so %{_libdir}/wine/wineboot.exe.so %{_libdir}/wine/winebrowser.exe.so %{_libdir}/wine/wineconsole.exe.so @@ -451,6 +449,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/authz.dll.so %{_libdir}/wine/avicap32.dll.so %{_libdir}/wine/avifil32.dll.so +%{_libdir}/wine/bcrypt.dll.so %{_libdir}/wine/browseui.dll.so %{_libdir}/wine/cabinet.dll.so %{_libdir}/wine/cards.dll.so @@ -479,7 +478,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/d3dxof.dll.so %{_libdir}/wine/dbghelp.dll.so %{_libdir}/wine/dciman32.dll.so -%{_libdir}/wine/ddeml.dll16 %{_libdir}/wine/ddraw.dll.so %{_libdir}/wine/ddrawex.dll.so %{_libdir}/wine/devenum.dll.so @@ -640,7 +638,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/sfc_os.dll.so %{_libdir}/wine/shdoclc.dll.so %{_libdir}/wine/shdocvw.dll.so -%{_libdir}/wine/shell.dll16 %{_libdir}/wine/shell32.dll.so %{_libdir}/wine/shfolder.dll.so %{_libdir}/wine/shlwapi.dll.so @@ -723,6 +720,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/xinput1_2.dll.so %{_libdir}/wine/xinput1_3.dll.so %{_libdir}/wine/xinput9_1_0.dll.so +%{_libdir}/wine/xmllite.dll.so %{_sysconfdir}/ld.so.conf.d/wine-32.conf # 16bit %{_libdir}/wine/avifile.dll16.so @@ -730,6 +728,7 @@ update-desktop-database &>/dev/null || : %{_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/imm.dll16.so @@ -747,6 +746,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/olecli.dll16.so %{_libdir}/wine/olesvr.dll16.so %{_libdir}/wine/rasapi16.dll16.so +%{_libdir}/wine/shell.dll16.so %{_libdir}/wine/sound.drv16.so %{_libdir}/wine/storage.dll16.so %{_libdir}/wine/stress.dll16.so @@ -864,6 +864,14 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepulse.drv.so %changelog +* Tue May 12 2009 Andreas Bierfert +- 1.1.21-1 +- version upgrade + +* Mon Apr 27 2009 Andreas Bierfert +- 1.1.20-1 +- version upgrade + * Mon Mar 30 2009 Andreas Bierfert - 1.1.18-1 - version upgrade (#490672, #491321) diff --git a/winepulse-0.24.patch b/winepulse-0.25.patch similarity index 94% rename from winepulse-0.24.patch rename to winepulse-0.25.patch index 97466a4..3c73118 100644 --- a/winepulse-0.24.patch +++ b/winepulse-0.25.patch @@ -22,10 +22,10 @@ index 0000000..327f225 +@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/dlls/winepulse.drv/dsoutput.c b/dlls/winepulse.drv/dsoutput.c new file mode 100644 -index 0000000..b37313a +index 0000000..203fac0 --- /dev/null +++ b/dlls/winepulse.drv/dsoutput.c -@@ -0,0 +1,576 @@ +@@ -0,0 +1,578 @@ +/* + * Wine Driver for PulseAudio - DSound Output Functionality + * http://pulseaudio.org/ @@ -288,6 +288,7 @@ index 0000000..b37313a + old_spec.format == This->sample_spec.format && + old_spec.channels == This->sample_spec.channels) { + TRACE("same as original sample spec, exiting.\n"); ++ PULSE_WaitForOperation(pa_stream_flush(This->stream, PULSE_StreamSuccessCallback, This)); + return DS_OK; + } + @@ -369,6 +370,7 @@ index 0000000..b37313a + pa_threaded_mainloop_lock(PULSE_ml); + PULSE_WaitForOperation(pa_stream_cork(This->stream, 0, PULSE_StreamSuccessCallback, This)); + pa_threaded_mainloop_unlock(PULSE_ml); ++ + return DS_OK; +} + @@ -604,10 +606,10 @@ index 0000000..b37313a +#endif /* HAVE_PULSEAUDIO */ diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c new file mode 100644 -index 0000000..aa84c9b +index 0000000..b68fb05 --- /dev/null +++ b/dlls/winepulse.drv/pulse.c -@@ -0,0 +1,861 @@ +@@ -0,0 +1,770 @@ +/* + * Wine Driver for PulseAudio + * http://pulseaudio.org/ @@ -692,8 +694,8 @@ index 0000000..aa84c9b +#ifdef USE_PIPE_SYNC +#define INIT_OMR(omr) do { if (pipe(omr->msg_pipe) < 0) { omr->msg_pipe[0] = omr->msg_pipe[1] = -1; } } while (0) +#define CLOSE_OMR(omr) do { close(omr->msg_pipe[0]); close(omr->msg_pipe[1]); } while (0) -+#define SIGNAL_OMR(omr) do { int x = 0; int foo; foo = write((omr)->msg_pipe[1], &x, sizeof(x)); } while (0) -+#define CLEAR_OMR(omr) do { int x = 0; int foo; foo = read((omr)->msg_pipe[0], &x, sizeof(x)); } while (0) ++#define SIGNAL_OMR(omr) do { int x = 0; write((omr)->msg_pipe[1], &x, sizeof(x)); } while (0) ++#define CLEAR_OMR(omr) do { int x = 0; read((omr)->msg_pipe[0], &x, sizeof(x)); } while (0) +#define RESET_OMR(omr) do { } while (0) +#define WAIT_OMR(omr, sleep) \ + do { struct pollfd pfd; pfd.fd = (omr)->msg_pipe[0]; \ @@ -938,81 +940,6 @@ index 0000000..aa84c9b +} + +/************************************************************************** -+ * PULSE_GetMMTime [internal] -+ */ -+void PULSE_GetMMTime(const pa_timing_info *t, pa_sample_spec *s, size_t last_reset, LPMMTIME lpTime) { -+ pa_usec_t time, time_temp; -+ size_t bytes, bytes_temp; -+ -+ /* If this is a recording stream we want the write_index and not the read index */ -+ if (last_reset == (size_t) -1) { -+ bytes = t->write_index; -+ last_reset = 0; -+ } else { -+ bytes = t->read_index; -+ if (last_reset > bytes) -+ last_reset = 0; -+ } -+ time = pa_bytes_to_usec(bytes, s); -+ time += pa_timeval_age(&t->timestamp); -+ -+ if (t->playing) { -+ bytes += ((pa_timeval_age(&t->timestamp) / 1000) * pa_bytes_per_second(s)) / 1000; -+ bytes_temp = (time_temp = t->sink_usec + t->transport_usec)/1000 * pa_bytes_per_second(s)/1000; -+ } else { -+ time = 0; -+ time_temp = 0; -+ bytes_temp = 0; -+ } -+ -+ time -= pa_bytes_to_usec(last_reset, s); -+ bytes -= last_reset; -+ if (bytes > bytes_temp) -+ bytes -= bytes_temp; -+ else -+ bytes = 0; -+ -+ if (time > time_temp) -+ time -= time_temp; -+ else -+ time = 0; -+ -+ bytes -= bytes % pa_frame_size(s); -+ time /= 1000; /* In milliseconds now */ -+ -+ switch (lpTime->wType) { -+ case TIME_SAMPLES: -+ lpTime->u.sample = bytes / pa_frame_size(s); -+ TRACE("TIME_SAMPLES=%u\n", lpTime->u.sample); -+ break; -+ case TIME_MS: -+ lpTime->u.ms = time; -+ TRACE("TIME_MS=%u\n", lpTime->u.ms); -+ break; -+ case TIME_SMPTE: -+ lpTime->u.smpte.fps = 30; -+ lpTime->u.smpte.sec = time/1000; -+ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; -+ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; -+ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; -+ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; -+ lpTime->u.smpte.frame = time / lpTime->u.smpte.fps * 1000; -+ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", -+ lpTime->u.smpte.hour, lpTime->u.smpte.min, -+ lpTime->u.smpte.sec, lpTime->u.smpte.frame); -+ break; -+ default: -+ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); -+ lpTime->wType = TIME_BYTES; -+ /* fall through */ -+ case TIME_BYTES: -+ lpTime->u.cb = bytes; -+ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); -+ break; -+ } -+} -+ -+/************************************************************************** + * PULSE_WaitForOperation + * + * Waits for pa operations to complete, and dereferences the operation. @@ -1033,22 +960,6 @@ index 0000000..aa84c9b + */ + +/************************************************************************** -+ * PULSE_StreamRequestCallback -+ * -+ * Called by the pulse mainloop whenever it wants or has audio data. -+ */ -+void PULSE_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata) { -+ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; -+ assert(s && ww); -+ -+ TRACE("Asking to feed/be fed %u bytes\n", nbytes); -+ -+ /* Make sure that the player/recorder is running */ -+ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { -+ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); -+ } -+} -+/************************************************************************** + * PULSE_StreamSuspendedCallback [internal] + * + * Called by the pulse mainloop any time stream playback is intentionally @@ -1471,10 +1382,10 @@ index 0000000..aa84c9b +} diff --git a/dlls/winepulse.drv/wavein.c b/dlls/winepulse.drv/wavein.c new file mode 100644 -index 0000000..1534d6e +index 0000000..5495b2a --- /dev/null +++ b/dlls/winepulse.drv/wavein.c -@@ -0,0 +1,572 @@ +@@ -0,0 +1,614 @@ +/* + * Wine Driver for PulseAudio - WaveIn Functionality + * http://pulseaudio.org/ @@ -1546,31 +1457,58 @@ index 0000000..1534d6e +} + +/************************************************************************** ++ * widRecorder_NextFragment [internal] ++ * ++ * Gets the next fragment of data from the server. ++ */ ++static size_t widRecorder_NextFragment(WINE_WAVEINST *wwi) { ++ size_t nbytes; ++ ++ pa_stream_peek(wwi->stream, &wwi->buffer, &nbytes); ++ wwi->buffer_length = nbytes; ++ wwi->buffer_read_offset = 0; ++ ++ return nbytes; ++} ++ ++ ++/************************************************************************** + * widRecorder_CopyData [internal] + * + * Copys data from the fragments pulse returns to queued buffers. + */ +static void widRecorder_CopyData(WINE_WAVEINST *wwi) { + LPWAVEHDR lpWaveHdr = wwi->lpQueuePtr; -+ size_t size; -+ while (lpWaveHdr && wwi->state == WINE_WS_PLAYING && wwi->buffer) { -+ size = min(wwi->buffer_length - wwi->buffer_read_offset, lpWaveHdr->dwBufferLength - lpWaveHdr->dwBytesRecorded); -+ if (size == 0) ERR("Size is 0! buffer is full but not freed?\n"); -+ memcpy(lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded, (PBYTE)wwi->buffer + wwi->buffer_read_offset, size); -+ wwi->buffer_read_offset += size; ++ size_t nbytes; ++ ++ while (lpWaveHdr && wwi->state == WINE_WS_PLAYING) { ++ ++ nbytes = min(wwi->buffer_length - wwi->buffer_read_offset, lpWaveHdr->dwBufferLength - lpWaveHdr->dwBytesRecorded); ++ if (nbytes == 0) break; ++ ++ TRACE("%u bytes from %p to %p\n", nbytes, (PBYTE)wwi->buffer + wwi->buffer_read_offset, lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded); ++ memcpy(lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded, (PBYTE)wwi->buffer + wwi->buffer_read_offset, nbytes); ++ ++ lpWaveHdr->dwBytesRecorded += nbytes; ++ wwi->buffer_read_offset += nbytes; ++ + if (wwi->buffer_read_offset == wwi->buffer_length) { + pa_threaded_mainloop_lock(PULSE_ml); + pa_stream_drop(wwi->stream); ++ if (pa_stream_readable_size(wwi->stream)) ++ widRecorder_NextFragment(wwi); ++ else { ++ wwi->buffer = NULL; ++ wwi->buffer_length = 0; ++ wwi->buffer_read_offset = 0; ++ } + pa_threaded_mainloop_unlock(PULSE_ml); -+ wwi->buffer = NULL; -+ wwi->buffer_length = 0; -+ wwi->buffer_read_offset = 0; + } -+ lpWaveHdr->dwBytesRecorded += size; ++ + if (lpWaveHdr->dwBytesRecorded == lpWaveHdr->dwBufferLength) { -+ wwi->lpQueuePtr = lpWaveHdr->lpNext; + lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ wwi->lpQueuePtr = lpWaveHdr->lpNext; + widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); + lpWaveHdr = wwi->lpQueuePtr; + } @@ -1578,28 +1516,6 @@ index 0000000..1534d6e +} + +/************************************************************************** -+* widRecorder_NextFragment [internal] -+* -+* Switches the current fragment to the next based upon a message from the -+* server. -+*/ -+static void widRecorder_NextFragment(WINE_WAVEINST *wwi, size_t sizer) { -+ LPWAVEHDR lpWaveHdr = wwi->lpQueuePtr; -+ size_t request = 0; -+ -+ for (;lpWaveHdr; lpWaveHdr = lpWaveHdr->lpNext) -+ request += lpWaveHdr->dwBufferLength; -+ -+ lpWaveHdr = wwi->lpQueuePtr; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_peek(wwi->stream, &wwi->buffer, &request); -+ wwi->buffer_length = request; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ widRecorder_CopyData(wwi); -+} -+ -+/************************************************************************** + * widRecorder [internal] + */ +static DWORD CALLBACK widRecorder(LPVOID lpParam) { @@ -1608,23 +1524,38 @@ index 0000000..1534d6e + enum win_wm_message msg; + DWORD param; + HANDLE ev; ++ DWORD wait; + + wwi->state = WINE_WS_STOPPED; + SetEvent(wwi->hStartUpEvent); + + for (;;) { -+ PULSE_WaitRingMessage(&wwi->msgRing, INFINITE); ++ ++ if (wwi->state != WINE_WS_PLAYING) { ++ wait = INFINITE; ++ } else { ++ if (wwi->buffer == NULL && pa_stream_readable_size(wwi->stream)) { ++ pa_threaded_mainloop_lock(PULSE_ml); ++ wait = pa_bytes_to_usec(widRecorder_NextFragment(wwi), &wwi->sample_spec)/1000; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ } ++ ++ widRecorder_CopyData(wwi); ++ ++ PULSE_WaitRingMessage(&wwi->msgRing, wait); ++ + while (PULSE_RetrieveRingMessage(&wwi->msgRing, &msg, ¶m, &ev)) { + TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); + + switch (msg) { + case WINE_WM_FEED: + SetEvent(ev); -+ if (wwi->state == WINE_WS_PLAYING) -+ widRecorder_NextFragment(wwi, param); + break; + case WINE_WM_STARTING: + wwi->state = WINE_WS_PLAYING; ++ wait = pa_bytes_to_usec(wwi->lpQueuePtr->dwBufferLength, &wwi->sample_spec)/1000; ++ wwi->last_reset = wwi->timing_info->read_index; + pa_threaded_mainloop_lock(PULSE_ml); + PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 0, PULSE_StreamSuccessCallback, NULL)); + pa_threaded_mainloop_unlock(PULSE_ml); @@ -1643,9 +1574,9 @@ index 0000000..1534d6e + break; + case WINE_WM_STOPPING: + if (wwi->state != WINE_WS_STOPPED) { ++ wwi->state = WINE_WS_STOPPED; + pa_threaded_mainloop_lock(PULSE_ml); + PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); -+ pa_stream_drop(wwi->stream); + pa_threaded_mainloop_unlock(PULSE_ml); + + /* return current buffer to app */ @@ -1659,37 +1590,30 @@ index 0000000..1534d6e + widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); + } + } -+ wwi->state = WINE_WS_STOPPED; + SetEvent(ev); + break; + case WINE_WM_RESETTING: + if (wwi->state != WINE_WS_STOPPED) { ++ wwi->state = WINE_WS_STOPPED; + pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_drop(wwi->stream); ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); + pa_threaded_mainloop_unlock(PULSE_ml); + } -+ wwi->state = WINE_WS_STOPPED; + + /* return all buffers to the app */ -+ for (lpWaveHdr = wwi->lpQueuePtr; lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { -+ TRACE("reset %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); ++ for (lpWaveHdr = wwi->lpPlayPtr ? wwi->lpPlayPtr : wwi->lpQueuePtr; lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { + lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; + lpWaveHdr->dwFlags |= WHDR_DONE; + wwi->lpQueuePtr = lpWaveHdr->lpNext; + widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); + } -+ wwi->lpQueuePtr = NULL; ++ + SetEvent(ev); + break; -+ case WINE_WM_XRUN: -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_drop(wwi->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ wwi->buffer_read_offset = 0; -+ break; + case WINE_WM_CLOSING: + wwi->hThread = 0; + if ((DWORD)param == 1) { ++ /* If we are here, the stream failed */ + wwi->state = WINE_WS_FAILED; + SetEvent(ev); + PULSE_DestroyRingMessage(&wwi->msgRing); @@ -1708,8 +1632,8 @@ index 0000000..1534d6e + default: + FIXME("unknown message %d\n", msg); + break; -+ } -+ } ++ } /* switch(msg) */ ++ } /* while(PULSE_RetrieveRingMessage()) */ + } /* for (;;) */ +} + @@ -1771,7 +1695,6 @@ index 0000000..1534d6e + } + + pa_stream_set_state_callback(wwi->stream, PULSE_StreamStateCallback, wwi); -+ pa_stream_set_read_callback(wwi->stream, PULSE_StreamRequestCallback, wwi); + + pa_threaded_mainloop_lock(PULSE_ml); + TRACE("Asking to open %s for recording.\n", wdi->device_name); @@ -1924,6 +1847,7 @@ index 0000000..1534d6e + * widGetPosition [internal] + */ +static DWORD widGetPosition(WINE_WAVEINST *wwi, LPMMTIME lpTime, DWORD uSize) { ++ DWORD bytes, time; + if (!wwi || wwi->state == WINE_WS_FAILED) { + WARN("Stream instance invalid.\n"); + return MMSYSERR_INVALHANDLE; @@ -1931,10 +1855,39 @@ index 0000000..1534d6e + + if (lpTime == NULL) return MMSYSERR_INVALPARAM; + -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_GetMMTime(wwi->timing_info, &wwi->sample_spec, (size_t)-1, lpTime); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ ++ bytes = wwi->timing_info->read_index - wwi->last_reset; ++ time = pa_bytes_to_usec(bytes, &wwi->sample_spec) / 1000; ++ ++ switch (lpTime->wType) { ++ case TIME_SAMPLES: ++ lpTime->u.sample = bytes / pa_frame_size(&wwi->sample_spec); ++ TRACE("TIME_SAMPLES=%u\n", lpTime->u.sample); ++ break; ++ case TIME_MS: ++ lpTime->u.ms = time; ++ TRACE("TIME_MS=%u\n", lpTime->u.ms); ++ break; ++ case TIME_SMPTE: ++ lpTime->u.smpte.fps = 30; ++ lpTime->u.smpte.sec = time/1000; ++ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; ++ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; ++ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; ++ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; ++ lpTime->u.smpte.frame = time / lpTime->u.smpte.fps * 1000; ++ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", ++ lpTime->u.smpte.hour, lpTime->u.smpte.min, ++ lpTime->u.smpte.sec, lpTime->u.smpte.frame); ++ break; ++ default: ++ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); ++ lpTime->wType = TIME_BYTES; ++ /* fall through */ ++ case TIME_BYTES: ++ lpTime->u.cb = bytes; ++ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); ++ break; ++ } + return MMSYSERR_NOERROR; +} + @@ -2049,10 +2002,10 @@ index 0000000..1534d6e +#endif /* HAVE_PULSEAUDIO */ diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c new file mode 100644 -index 0000000..4539103 +index 0000000..b531ee2 --- /dev/null +++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1092 @@ +@@ -0,0 +1,1176 @@ +/* + * Wine Driver for PulseAudio - WaveOut Functionality + * http://pulseaudio.org/ @@ -2144,6 +2097,23 @@ index 0000000..4539103 + } +} +#endif ++ ++/************************************************************************** ++ * WAVEOUT_StreamRequestCallback ++ * ++ * Called by the pulse mainloop whenever it wants audio data. ++ */ ++static void WAVEOUT_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata) { ++ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; ++ ++ TRACE("Asking to be fed %u bytes\n", nbytes); ++ ++ /* Make sure that the player/recorder is running */ ++ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { ++ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); ++ } ++} ++ +/************************************************************************** + * WAVEOUT_StreamTimingInfoUpdateCallback [internal] + * @@ -2164,7 +2134,11 @@ index 0000000..4539103 + } +} + -+ ++/************************************************************************** ++ * WAVEOUT_SinkInputInfoCallback [internal] ++ * ++ * Called by the pulse thread. Used for wodGetVolume. ++ */ +static void WAVEOUT_SinkInputInfoCallback(pa_context *c, const pa_sink_input_info *i, int eol, void *userdata) { + WINE_WAVEINST* wwo = (WINE_WAVEINST*)userdata; + if (!eol && i) { @@ -2181,16 +2155,16 @@ index 0000000..4539103 +/************************************************************************** + * wodPlayer_NotifyClient [internal] + */ -+static DWORD wodPlayer_NotifyClient(WINE_WAVEINST* wwi, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { ++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); + + switch (wMsg) { + case WOM_OPEN: + case WOM_CLOSE: + case WOM_DONE: -+ if (wwi->wFlags != DCB_NULL && -+ !DriverCallback(wwi->waveDesc.dwCallback, wwi->wFlags, (HDRVR)wwi->waveDesc.hWave, -+ wMsg, wwi->waveDesc.dwInstance, dwParam1, dwParam2)) { ++ if (wwo->wFlags != DCB_NULL && ++ !DriverCallback(wwo->waveDesc.dwCallback, wwo->wFlags, (HDRVR)wwo->waveDesc.hWave, ++ wMsg, wwo->waveDesc.dwInstance, dwParam1, dwParam2)) { + WARN("can't notify client !\n"); + return MMSYSERR_ERROR; + } @@ -2271,17 +2245,10 @@ index 0000000..4539103 +static void wodPlayer_CheckReleasing(WINE_WAVEINST *wwo) { + LPWAVEHDR lpWaveHdr = wwo->lpQueuePtr; + -+ /* If we aren't playing, and we have queued data and we aren't relasing, -+ * start releasing if either: -+ * - We have stopped being given wavehdrs, or -+ * - We have 2s worth of audio built up.*/ -+ + pa_threaded_mainloop_lock(PULSE_ml); -+ if (!wwo->timing_info->playing && -+ (pa_bytes_to_usec(lpWaveHdr->dwBufferLength, &wwo->sample_spec)/2 < pa_timeval_age(&wwo->last_header)|| -+ wwo->timing_info->write_index - wwo->releasing_offset > pa_bytes_per_second(&wwo->sample_spec)*2)) { ++ if (!wwo->timing_info->playing && !wwo->is_releasing && lpWaveHdr && !wwo->lpPlayPtr && wwo->state == WINE_WS_PLAYING) { + -+ /* Try and adjust the buffer attributes so there is less latency. ++ /* Try and adjust the buffer attributes so there is less latency. + * Because of bugs this call does not work on older servers. Once + * new version of pulseaudio become ubiquitous we will drop support for + * versions before 0.9.15 because they have too many bugs.*/ @@ -2294,11 +2261,11 @@ index 0000000..4539103 + WARN("Asking for new buffer tlength of %ums (%u bytes)\n", (unsigned int)(pa_bytes_to_usec(wwo->buffer_attr.tlength, &wwo->sample_spec)/1000), wwo->buffer_attr.tlength); + pa_stream_set_buffer_attr(wwo->stream, &wwo->buffer_attr, PULSE_StreamSuccessCallback, wwo); + } else { -+ /* Fake playback start earlier, introducing latency */ ++ /* Fake playback start earlier, introducing unknown latency */ + pa_gettimeofday(&wwo->started_releasing); + wwo->is_releasing = TRUE; + wwo->releasing_offset = wwo->lpQueuePtr->reserved; -+ TRACE("Starting to release early: %u\n", wwo->releasing_offset); ++ WARN("Starting to release early.\n"); + } + } + pa_threaded_mainloop_unlock(PULSE_ml); @@ -2317,7 +2284,7 @@ index 0000000..4539103 + * behaviour. + */ +static DWORD wodPlayer_NotifyCompletions(WINE_WAVEINST* wwo, BOOL force) { -+ LPWAVEHDR lpWaveHdr; ++ LPWAVEHDR lpWaveHdr = wwo->lpQueuePtr; + pa_usec_t time; + pa_usec_t wait; + @@ -2325,7 +2292,7 @@ index 0000000..4539103 + if (wwo->is_releasing) + time += pa_timeval_age(&wwo->started_releasing); + -+ for (lpWaveHdr = wwo->lpQueuePtr; lpWaveHdr;) { ++ while (lpWaveHdr) { + if (!force) { + /* Start from lpQueuePtr and keep notifying until: + * - we hit an unwritten wavehdr @@ -2390,7 +2357,7 @@ index 0000000..4539103 + */ +static void wodPlayer_Feed(WINE_WAVEINST* wwo, size_t space) { + -+ /* no more room... no need to try to feed */ ++ /* No more room... no need to try to feed */ + if (space == 0) return; + + if (!wwo->stream || !PULSE_context || @@ -2508,14 +2475,15 @@ index 0000000..4539103 +/************************************************************************** + * wodPlayer_ProcessMessages [internal] + */ -+static void wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { ++static DWORD wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { + LPWAVEHDR lpWaveHdr; + enum win_wm_message msg; -+ DWORD param; ++ DWORD param, msgcount = 0; + 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: @@ -2559,8 +2527,6 @@ index 0000000..4539103 + wwo->state = WINE_WS_PLAYING; + + wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); -+ if (!wwo->timing_info->playing && !wwo->is_releasing) -+ pa_gettimeofday(&wwo->last_header); + SetEvent(ev); + break; + @@ -2632,10 +2598,15 @@ index 0000000..4539103 + break; + } + } ++ ++ return msgcount; +} + +/************************************************************************** + * wodPlayer [internal] ++ * ++ * The thread which is responsible for returning WaveHdrs via DriverCallback, ++ * the writing of queued WaveHdrs, and all pause / reset stream management. + */ +static DWORD CALLBACK wodPlayer(LPVOID lpParam) { + WINE_WAVEINST *wwo = (WINE_WAVEINST*)lpParam; @@ -2644,17 +2615,21 @@ index 0000000..4539103 + wwo->state = WINE_WS_STOPPED; + SetEvent(wwo->hStartUpEvent); + -+ /* Wait for the shortest time before an action is required. If there are -+ * no pending actions, wait forever for a command. */ ++/* Wait for the shortest time before an action is required. If there are no ++ * pending actions, wait forever for a command. */ + for (;;) { + TRACE("Waiting %u ms\n", dwSleepTime); + PULSE_WaitRingMessage(&wwo->msgRing, dwSleepTime); -+ wodPlayer_ProcessMessages(wwo); -+ if (wwo->state == WINE_WS_PLAYING) { -+ if (!wwo->is_releasing && wwo->lpQueuePtr) -+ wodPlayer_CheckReleasing(wwo); ++ ++/* If no messages were processed during the timeout it might be because audio ++ * is not flowing yet, so check. */ ++ if (wodPlayer_ProcessMessages(wwo) == 0) ++ wodPlayer_CheckReleasing(wwo); ++ ++/* If there is audio playing, return headers and get next timeout */ ++ if (wwo->state == WINE_WS_PLAYING) + dwSleepTime = wodPlayer_NotifyCompletions(wwo, FALSE); -+ } else ++ else + dwSleepTime = INFINITE; + } +} @@ -2718,8 +2693,8 @@ index 0000000..4539103 + goto exit; + } + ++ pa_stream_set_write_callback (wwo->stream, WAVEOUT_StreamRequestCallback, wwo); + pa_stream_set_state_callback (wwo->stream, PULSE_StreamStateCallback, wwo); -+ pa_stream_set_write_callback (wwo->stream, PULSE_StreamRequestCallback, wwo); + pa_stream_set_underflow_callback (wwo->stream, PULSE_StreamUnderflowCallback, wwo); + pa_stream_set_overflow_callback (wwo->stream, PULSE_StreamOverflowCallback, wwo); + pa_stream_set_moved_callback (wwo->stream, PULSE_StreamMovedCallback, wwo); @@ -2882,6 +2857,9 @@ index 0000000..4539103 + * wodGetPosition [internal] + */ +static DWORD wodGetPosition(WINE_WAVEINST *wwo, LPMMTIME lpTime, DWORD uSize) { ++ pa_usec_t time, time_temp; ++ size_t bytes, bytes_temp; ++ + if (!wwo || wwo->state == WINE_WS_FAILED) { + WARN("Stream instance invalid.\n"); + return MMSYSERR_INVALHANDLE; @@ -2893,9 +2871,68 @@ index 0000000..4539103 + if (wwo->timing_info->read_index_corrupt || wwo->timing_info->write_index_corrupt) + PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); + -+ PULSE_GetMMTime(wwo->timing_info, &wwo->sample_spec, wwo->last_reset, lpTime); ++ bytes = wwo->timing_info->read_index; ++ time = pa_bytes_to_usec(bytes, &wwo->sample_spec); ++ ++ if (wwo->timing_info->playing) { ++ bytes += ((pa_timeval_age(&wwo->timing_info->timestamp) / 1000) * pa_bytes_per_second(&wwo->sample_spec)) / 1000; ++ bytes_temp = (time_temp = wwo->timing_info->sink_usec + wwo->timing_info->transport_usec)/1000 * pa_bytes_per_second(&wwo->sample_spec)/1000; ++ time += pa_timeval_age(&wwo->timing_info->timestamp); ++ } else { ++ time = 0; ++ time_temp = 0; ++ bytes_temp = 0; ++ } ++ + pa_threaded_mainloop_unlock(PULSE_ml); + ++ if (wwo->last_reset < bytes) { ++ time -= pa_bytes_to_usec(wwo->last_reset, &wwo->sample_spec); ++ bytes -= wwo->last_reset; ++ } ++ if (bytes > bytes_temp) ++ bytes -= bytes_temp; ++ else ++ bytes = 0; ++ ++ if (time > time_temp) ++ time -= time_temp; ++ else ++ time = 0; ++ ++ bytes -= bytes % pa_frame_size(&wwo->sample_spec); ++ time /= 1000; /* In milliseconds now */ ++ ++ switch (lpTime->wType) { ++ case TIME_SAMPLES: ++ lpTime->u.sample = bytes / pa_frame_size(&wwo->sample_spec); ++ TRACE("TIME_SAMPLES=%u\n", lpTime->u.sample); ++ break; ++ case TIME_MS: ++ lpTime->u.ms = time; ++ TRACE("TIME_MS=%u\n", lpTime->u.ms); ++ break; ++ case TIME_SMPTE: ++ lpTime->u.smpte.fps = 30; ++ lpTime->u.smpte.sec = time/1000; ++ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; ++ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; ++ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; ++ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; ++ lpTime->u.smpte.frame = time / lpTime->u.smpte.fps * 1000; ++ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", ++ lpTime->u.smpte.hour, lpTime->u.smpte.min, ++ lpTime->u.smpte.sec, lpTime->u.smpte.frame); ++ break; ++ default: ++ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); ++ lpTime->wType = TIME_BYTES; ++ /* fall through */ ++ case TIME_BYTES: ++ lpTime->u.cb = bytes; ++ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); ++ break; ++ } + return MMSYSERR_NOERROR; +} +/************************************************************************** @@ -3156,10 +3193,10 @@ index 0000000..1b49460 +@ stdcall -private widMessage(long long long long long long) PULSE_widMessage diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h new file mode 100644 -index 0000000..59fbb38 +index 0000000..6270e04 --- /dev/null +++ b/dlls/winepulse.drv/winepulse.h -@@ -0,0 +1,228 @@ +@@ -0,0 +1,225 @@ +/* Definitions for PulseAudio Wine Driver + * + * Copyright 2009 Arthur Taylor @@ -3321,31 +3358,30 @@ index 0000000..59fbb38 + WAVEOPENDESC waveDesc; + WORD wFlags; + ++ /* PulseAudio specific data */ + pa_stream *stream; /* The PulseAudio stream */ -+ const pa_timing_info *timing_info; ++ const pa_timing_info *timing_info; /* The timing info structure for the stream */ + pa_sample_spec sample_spec; /* Sample spec of this stream / device */ -+ pa_cvolume volume; -+ pa_buffer_attr buffer_attr; ++ pa_cvolume volume; /* Software volume of the stream */ ++ pa_buffer_attr buffer_attr; /* Buffer attribute, may not be used */ + -+ /* waveIn / waveOut wavaHdr information */ -+ LPWAVEHDR lpQueuePtr; /* start of queued WAVEHDRs (waiting to be notified) */ -+ LPWAVEHDR lpPlayPtr; /* start of not yet fully written buffers */ ++ /* waveIn / waveOut wavaHdr */ ++ LPWAVEHDR lpQueuePtr; /* Start of queued WAVEHDRs (waiting to be notified) */ ++ LPWAVEHDR lpPlayPtr; /* Start of not yet fully written buffers */ + DWORD dwPartialOffset; /* Offset of not yet written bytes in lpPlayPtr */ -+ LPWAVEHDR lpLoopPtr; /* pointer of first buffer in loop, if any */ -+ DWORD dwLoops; /* private copy of loop counter */ ++ LPWAVEHDR lpLoopPtr; /* Pointer of first buffer in loop, if any */ ++ DWORD dwLoops; /* Private copy of loop counter */ + -+ /* Virtual stream positioning information */ -+ DWORD last_reset; /* When the last reset occured, as pa stream time doesn't reset */ -+ struct timeval last_header; /* When the last wavehdr was received, only updated when audio is not playing yet */ ++ /* Virtual stream positioning */ ++ DWORD last_reset; /* When the last reset occured, as pa stream time isn't reset */ + BOOL is_releasing; /* Whether we are releasing wavehdrs */ + struct timeval started_releasing; /* When wavehdr releasing started, for comparison to queued written wavehdrs */ + DWORD releasing_offset; /* How much audio has been released prior when releasing started in this instance */ + -+ /* waveIn */ ++ /* waveIn specific */ + const void *buffer; /* Pointer to the latest data fragment for recording streams */ + DWORD buffer_length; /* How large the latest data fragment is */ + DWORD buffer_read_offset; /* How far into latest data fragment we last read */ -+ DWORD fraglen; + + /* Thread communication and synchronization stuff */ + HANDLE hStartUpEvent; @@ -3368,14 +3404,12 @@ index 0000000..59fbb38 +void PULSE_WaitForOperation(pa_operation *o); +void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata); +void PULSE_StreamStateCallback(pa_stream *s, void *userdata); -+void PULSE_StreamRequestCallback(pa_stream *s, size_t n, void *userdata); +void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata); +void PULSE_StreamOverflowCallback(pa_stream *s, void *userdata); +void PULSE_StreamSuspendedCallback(pa_stream *s, void *userdata); +void PULSE_StreamMovedCallback(pa_stream *s, void *userdata); +void PULSE_ContextSuccessCallback(pa_context *c, int success, void *userdata); +BOOL PULSE_SetupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss); -+void PULSE_GetMMTime(const pa_timing_info *t, pa_sample_spec *s, size_t last_reset, LPMMTIME lpTime); +int PULSE_InitRingMessage(PULSE_MSG_RING* omr); +int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr); +void PULSE_ResetRingMessage(PULSE_MSG_RING* omr); From e6c8ad5df1b2db8f7de37ac2cb24ee7f2320df88 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 12 May 2009 15:13:26 +0000 Subject: [PATCH 112/161] - add missing dlls --- wine.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wine.spec b/wine.spec index ddfc967..ea81989 100644 --- a/wine.spec +++ b/wine.spec @@ -653,6 +653,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/svrapi.dll.so %{_libdir}/wine/sxs.dll.so %{_libdir}/wine/system.drv16 +%{_libdir}/wine/t2embed.dll.so %{_libdir}/wine/tapi32.dll.so %{_libdir}/wine/toolhelp.dll16 %{_libdir}/wine/traffic.dll.so @@ -676,6 +677,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/vtdapi.vxd.so %{_libdir}/wine/vwin32.vxd.so %{_libdir}/wine/w32skrnl.dll.so +%{_libdir}/wine/wbemprox.dll.so %{_libdir}/wine/wineaudioio.drv.so %{_libdir}/wine/winedos.dll.so %{_libdir}/wine/wineoss.drv.so From f97b602dee566695d6c88efdd987f2ff9df41191 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 14 May 2009 13:25:11 +0000 Subject: [PATCH 113/161] - version upgrade - fix uninstaller --- wine-uninstaller.desktop | 2 +- wine.spec | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/wine-uninstaller.desktop b/wine-uninstaller.desktop index b14fc70..8c16fdb 100644 --- a/wine-uninstaller.desktop +++ b/wine-uninstaller.desktop @@ -1,7 +1,7 @@ [Desktop Entry] Name=Wine Software Uninstaller Comment=Interface to uninstall software -Exec=uninstaller +Exec=wine uninstaller Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine.spec b/wine.spec index ea81989..847c127 100644 --- a/wine.spec +++ b/wine.spec @@ -866,6 +866,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepulse.drv.so %changelog +* Wed May 13 2009 Andreas Bierfert +- 1.1.21-2 +- fix uninstaller (#500479) + * Tue May 12 2009 Andreas Bierfert - 1.1.21-1 - version upgrade From 85660fa01852a779577396572f9495618c2a7c91 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 14 May 2009 13:31:04 +0000 Subject: [PATCH 114/161] - bump --- wine.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index 847c127..0a9d89e 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 1.1.21 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators From ebad1bf1de02881bcef71ba9182f6ac5cfaf0947 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 11 Jun 2009 21:17:26 +0000 Subject: [PATCH 115/161] - version upgrade --- .cvsignore | 2 +- adding-pulseaudio-to-winecfg.patch | 24 ++++++++++++------------ sources | 2 +- wine.spec | 11 ++++++++--- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/.cvsignore b/.cvsignore index ba3a325..80b2d9b 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.21-fe.tar.bz2 +wine-1.1.23-fe.tar.bz2 diff --git a/adding-pulseaudio-to-winecfg.patch b/adding-pulseaudio-to-winecfg.patch index f8770eb..eb1ffd6 100644 --- a/adding-pulseaudio-to-winecfg.patch +++ b/adding-pulseaudio-to-winecfg.patch @@ -178,18 +178,6 @@ index 830cabf..0ed1dbd 100644 IDS_DRIVER_ALSA "Controlador ALSA" IDS_DRIVER_ESOUND "Controlador EsounD" IDS_DRIVER_OSS "Controlador OSS" -diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc -index a4b0cad..c065d36 100644 ---- a/programs/winecfg/Ro.rc -+++ b/programs/winecfg/Ro.rc -@@ -270,6 +270,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "De basă" - IDS_ACCEL_EMULATION "Emulare" -+ IDS_DRIVER_PULSE "Driver PulseAudio" - IDS_DRIVER_ALSA "Driver ALSA" - IDS_DRIVER_ESOUND "Driver Esound" - IDS_DRIVER_OSS "Driver OSS" diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc index 782e1fd..f516399 100644 --- a/programs/winecfg/Ru.rc @@ -287,3 +275,15 @@ index a18fe76..1c4a1e7 100644 #define IDS_DRIVER_ESOUND 8306 #define IDS_DRIVER_OSS 8307 #define IDS_DRIVER_JACK 8308 +diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc +index a4b0cad..c065d36 100644 +--- a/programs/winecfg/Ro.rc ++++ b/programs/winecfg/Ro.rc +@@ -270,6 +270,7 @@ + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "De bază" + IDS_ACCEL_EMULATION "Emulare" ++ IDS_DRIVER_PULSE "Driver PulseAudio" + IDS_DRIVER_ALSA "Driver ALSA" + IDS_DRIVER_ESOUND "Driver Esound" + IDS_DRIVER_OSS "Driver OSS" diff --git a/sources b/sources index 6e93402..db75873 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -5b062451ee5e21189eea49cffd9bc0d8 wine-1.1.21-fe.tar.bz2 +eb26fea9e52e1cbbe48b107b23564988 wine-1.1.23-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 0a9d89e..600a8c5 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 1.1.21 -Release: 2%{?dist} +Version: 1.1.23 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -587,7 +587,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msvcrtd.dll.so %{_libdir}/wine/msvfw32.dll.so %{_libdir}/wine/msvidc32.dll.so -%{_libdir}/wine/msvideo.dll16 %{_libdir}/wine/mswsock.dll.so %{_libdir}/wine/msxml3.dll.so %{_libdir}/wine/nddeapi.dll.so @@ -739,6 +738,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/mciqtz32.dll.so %{_libdir}/wine/mouse.drv16.so %{_libdir}/wine/msacm.dll16.so +%{_libdir}/wine/msvideo.dll16.so %{_libdir}/wine/ole2.dll16.so %{_libdir}/wine/ole2conv.dll16.so %{_libdir}/wine/ole2disp.dll16.so @@ -866,6 +866,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepulse.drv.so %changelog +* Wed Jun 10 2009 Andreas Bierfert +- 1.1.23-1 +- version upgrade (#491321) +- rediff pulseaudio patch (Michael Cronenworth) + * Wed May 13 2009 Andreas Bierfert - 1.1.21-2 - fix uninstaller (#500479) From 1f74513dfe0cd10b9b5928db3287dba5b7292395 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 20 Jun 2009 08:02:47 +0000 Subject: [PATCH 116/161] - version upgrade - WinePulse update - drop requires for esd and jack in meta package --- .cvsignore | 2 +- sources | 2 +- wine.spec | 13 +- winepulse-0.25.patch | 3424 ------------------------------------------ winepulse-0.28.patch | 2725 +++++++++++++++++++++++++++++++++ 5 files changed, 2736 insertions(+), 3430 deletions(-) delete mode 100644 winepulse-0.25.patch create mode 100644 winepulse-0.28.patch diff --git a/.cvsignore b/.cvsignore index 80b2d9b..ab65448 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.23-fe.tar.bz2 +wine-1.1.24-fe.tar.bz2 diff --git a/sources b/sources index db75873..3ed9b0a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -eb26fea9e52e1cbbe48b107b23564988 wine-1.1.23-fe.tar.bz2 +6879c4fbd2e8cf3c4589465868b021a1 wine-1.1.24-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 600a8c5..aa0ec3c 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.23 +Version: 1.1.24 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -43,7 +43,7 @@ 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.17-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse-0.25.patch +Patch401: http://art.ified.ca/downloads/winepulse-0.28.patch Patch402: http://art.ified.ca/downloads/adding-pulseaudio-to-winecfg.patch Source402: README-FEDORA-PULSEAUDIO @@ -105,8 +105,6 @@ Requires: wine-core = %{version}-%{release} Requires: wine-capi = %{version}-%{release} Requires: wine-cms = %{version}-%{release} Requires: wine-desktop = %{version}-%{release} -Requires: wine-esd = %{version}-%{release} -Requires: wine-jack = %{version}-%{release} Requires: wine-ldap = %{version}-%{release} Requires: wine-nas = %{version}-%{release} Requires: wine-tools = %{version}-%{release} @@ -677,6 +675,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/vwin32.vxd.so %{_libdir}/wine/w32skrnl.dll.so %{_libdir}/wine/wbemprox.dll.so +%{_libdir}/wine/windowscodecs.dll.so %{_libdir}/wine/wineaudioio.drv.so %{_libdir}/wine/winedos.dll.so %{_libdir}/wine/wineoss.drv.so @@ -866,6 +865,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winepulse.drv.so %changelog +* Fri Jun 19 2009 Andreas Bierfert +- 1.1.24-1 +- version upgrade +- WinePulse 0.28 +- drop meta package requires for jack and esd + * Wed Jun 10 2009 Andreas Bierfert - 1.1.23-1 - version upgrade (#491321) diff --git a/winepulse-0.25.patch b/winepulse-0.25.patch deleted file mode 100644 index 3c73118..0000000 --- a/winepulse-0.25.patch +++ /dev/null @@ -1,3424 +0,0 @@ -diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in -new file mode 100644 -index 0000000..327f225 ---- /dev/null -+++ b/dlls/winepulse.drv/Makefile.in -@@ -0,0 +1,16 @@ -+TOPSRCDIR = @top_srcdir@ -+TOPOBJDIR = ../.. -+SRCDIR = @srcdir@ -+VPATH = @srcdir@ -+MODULE = winepulse.drv -+IMPORTS = dxguid uuid winmm user32 advapi32 kernel32 -+EXTRALIBS = @PULSELIBS@ -+ -+C_SRCS = dsoutput.c \ -+ waveout.c \ -+ wavein.c \ -+ pulse.c -+ -+@MAKE_DLL_RULES@ -+ -+@DEPENDENCIES@ # everything below this line is overwritten by make depend -diff --git a/dlls/winepulse.drv/dsoutput.c b/dlls/winepulse.drv/dsoutput.c -new file mode 100644 -index 0000000..203fac0 ---- /dev/null -+++ b/dlls/winepulse.drv/dsoutput.c -@@ -0,0 +1,578 @@ -+/* -+ * Wine Driver for PulseAudio - DSound Output Functionality -+ * http://pulseaudio.org/ -+ * -+ * Copyright 2009 Arthur Talyor -+ * -+ * Conatins code from other wine multimedia drivers. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wingdi.h" -+#include "winuser.h" -+#include "winerror.h" -+#include "mmddk.h" -+#include "dsound.h" -+#include "dsdriver.h" -+#include "winreg.h" -+ -+#include -+#include "wine/debug.h" -+ -+WINE_DEFAULT_DEBUG_CHANNEL(dspulse); -+ -+#if HAVE_PULSEAUDIO -+ -+/*======================================================================* -+ * Low level DSOUND implementation * -+ *======================================================================*/ -+ -+/* A buffer is allocated with a pointer indicating the read position in the -+ * buffer. The pulse write callback reads data from the buffer, updating the -+ * read pointer to the location at the end of the read. Upon reaching the end -+ * or attempting to read past the end of buffer the read pointer wraps around -+ * to the beginning again. DirectSound applications can write anywhere in the -+ * buffer at anytime without locking and can know the location of the read -+ * pointer. The position of the read pointer cannot be changed by the -+ * application and access to it uses a locking scheme. A fake pointer -+ * indicating estimated playback position is also available to the application. -+ * Applications can potentially write to the same area of memory which is also -+ * being read by the pulse thread. However, this is uncommon as directsound -+ * applications know where pulse should be reading from via the pointer -+ * locations and MSDN says that such an operation should be avoided with the -+ * results being undefined. -+ */ -+ -+/* Fragment lengths try to be a power of two close to 10ms worth of data. See -+ * dlls/dsound/mixer.c -+ */ -+static int fragment_length(pa_sample_spec *s) { -+ if (s->rate <= 12800) -+ return 128 * pa_frame_size(s); -+ -+ if (s->rate <= 25600) -+ return 256 * pa_frame_size(s); -+ -+ if (s->rate <= 51200) -+ return 512 * pa_frame_size(s); -+ -+ return 1024 * pa_frame_size(s); -+} -+ -+/* Callback from the pulse thread for stream data */ -+static void DSPULSE_BufferReadCallback(pa_stream *s, size_t nbytes, void *userdata) { -+ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)userdata; -+ -+ if (!This->buffer) -+ return; -+ -+ /* Fraglens are always powers of 2 */ -+ nbytes+= This->fraglen - 1; -+ nbytes&= ~(This->fraglen - 1); -+ -+ /* If we advance more than 10 fragments at a time it appears that the buffer -+ * pointer is never advancing because of wrap-around. Evil magic numbers. */ -+ if (nbytes > This->fraglen * 5) -+ nbytes = This->fraglen * 5; -+ -+ TRACE("Reading %u bytes.\n", nbytes); -+ -+ if (This->buffer_read_offset + nbytes <= This->buffer_length) { -+ pa_stream_write(s, This->buffer + This->buffer_read_offset, nbytes, NULL, 0, PA_SEEK_RELATIVE); -+ This->buffer_play_offset = This->buffer_read_offset; -+ This->buffer_read_offset += nbytes; -+ } else { -+ size_t write_length = This->buffer_length - This->buffer_read_offset; -+ nbytes -= write_length; -+ pa_stream_write(s, This->buffer + This->buffer_read_offset, write_length, NULL, 0, PA_SEEK_RELATIVE); -+ pa_stream_write(s, This->buffer, nbytes, NULL, 0, PA_SEEK_RELATIVE); -+ This->buffer_play_offset = This->buffer_read_offset; -+ This->buffer_read_offset = nbytes; -+ } -+ -+ This->buffer_read_offset %= This->buffer_length; -+} -+ -+/* Called when the stream underruns. Just for information */ -+static void DSPULSE_BufferUnderflowCallback(pa_stream *s, void *userdata) { -+ WARN("(%p) underrun.\n", userdata); -+} -+ -+/* Connects a stream to the server. Does not update -+ * IDsDriverBufferImpl->fraglen. Does not lock the pulse mainloop or free -+ * objects in case of failure. This should be handled by the calling function. -+ */ -+static HRESULT DSPULSE_ConnectStream(IDsDriverBufferImpl* This) { -+ pa_buffer_attr ba_request; -+ const pa_buffer_attr *ba_obtained; -+ char c[PA_SAMPLE_SPEC_SNPRINT_MAX]; -+ pa_stream_flags_t stream_flags = PA_STREAM_START_CORKED; -+ -+#if PA_PROTOCOL_VERSION >= 14 -+ /* We are a "fragment wait based" application, so this flag should be -+ * acceptable. */ -+ stream_flags |= PA_STREAM_EARLY_REQUESTS; -+#elif PA_PROTOCOL_VERSION >= 13 && PA_API_VERSION >= 12 -+ stream_flags |= PA_STREAM_ADJUST_LATENCY; -+#endif -+ -+ pa_sample_spec_snprint(c, PA_SAMPLE_SPEC_SNPRINT_MAX, &This->sample_spec); -+ TRACE("Sample spec %s fragment size %u.\n", c, This->fraglen); -+ -+ ba_request.tlength = This->fraglen * 4; // ~40ms -+ ba_request.minreq = This->fraglen; // ~10ms -+ ba_request.prebuf = (uint32_t)-1; // same as tlength -+ ba_request.maxlength = This->buffer_length; // 2^x = ~3s -+ -+ TRACE("Asking for buffer tlength:%u (%llums) minreq:%u (%llums)\n", -+ ba_request.tlength, pa_bytes_to_usec(ba_request.tlength, &This->sample_spec)/1000, -+ ba_request.minreq, pa_bytes_to_usec(ba_request.minreq, &This->sample_spec)/1000); -+ -+ This->stream = pa_stream_new(PULSE_context, "DirectSound Buffer", &This->sample_spec, NULL); -+ if (!This->stream) return DSERR_BADFORMAT; -+ -+ pa_stream_set_state_callback(This->stream, PULSE_StreamStateCallback, This); -+ pa_stream_set_write_callback(This->stream, DSPULSE_BufferReadCallback, This); -+ pa_stream_set_underflow_callback(This->stream, DSPULSE_BufferUnderflowCallback, This); -+ -+ TRACE("Attempting to connect (%p)->stream for playback on %s\n", This, WOutDev[This->drv->wDevID].device_name); -+ pa_stream_connect_playback(This->stream, WOutDev[This->drv->wDevID].device_name, &ba_request, stream_flags, NULL, NULL); -+ for (;;) { -+ pa_context_state_t cstate = pa_context_get_state(PULSE_context); -+ pa_stream_state_t sstate = pa_stream_get_state(This->stream); -+ -+ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || -+ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { -+ ERR("Failed to connect stream context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); -+ return DSERR_BUFFERLOST; -+ } -+ -+ if (sstate == PA_STREAM_READY) -+ break; -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ TRACE("(%p)->stream connected for playback.\n", This); -+ ba_obtained = pa_stream_get_buffer_attr(This->stream); -+ -+ TRACE("Obtained buffer tlength:%u (%llums) minreq:%u (%llums)\n", -+ ba_obtained->tlength, pa_bytes_to_usec(ba_obtained->tlength, &This->sample_spec)/1000, -+ ba_obtained->minreq, pa_bytes_to_usec(ba_obtained->minreq, &This->sample_spec)/1000); -+ -+ return DS_OK; -+} -+ -+static HRESULT WINAPI IDsDriverBufferImpl_QueryInterface(PIDSDRIVERBUFFER iface, REFIID riid, LPVOID *ppobj) { -+ /* IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; */ -+ FIXME("(): stub!\n"); -+ return DSERR_UNSUPPORTED; -+} -+ -+static ULONG WINAPI IDsDriverBufferImpl_AddRef(PIDSDRIVERBUFFER iface) { -+ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; -+ ULONG refCount = InterlockedIncrement(&This->ref); -+ -+ TRACE("(%p)->(ref before=%u)\n",This, refCount - 1); -+ -+ return refCount; -+} -+ -+static ULONG WINAPI IDsDriverBufferImpl_Release(PIDSDRIVERBUFFER iface) { -+ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; -+ ULONG refCount = InterlockedDecrement(&This->ref); -+ -+ TRACE("(%p)->(ref before=%u)\n",This, refCount + 1); -+ -+ if (refCount) -+ return refCount; -+ -+ TRACE("mmap buffer %p destroyed\n", This->buffer); -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(This->stream, 1, PULSE_StreamSuccessCallback, This)); -+ pa_stream_disconnect(This->stream); -+ if (This == This->drv->primary) -+ This->drv->primary = NULL; -+ HeapFree(GetProcessHeap(), 0, This->buffer); -+ This->buffer = NULL; -+ pa_stream_unref(This->stream); -+ This->stream = NULL; -+ HeapFree(GetProcessHeap(), 0, This); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ return 0; -+} -+ -+static HRESULT WINAPI IDsDriverBufferImpl_Lock(PIDSDRIVERBUFFER iface, -+ LPVOID*ppvAudio1,LPDWORD pdwLen1, -+ LPVOID*ppvAudio2,LPDWORD pdwLen2, -+ DWORD dwWritePosition,DWORD dwWriteLen, -+ DWORD dwFlags) -+{ -+ /* We set DSDDESC_DONTNEEDPRIMARYLOCK so this should never be called */ -+ TRACE("(%p): stub", iface); -+ return DSERR_UNSUPPORTED; -+} -+ -+static HRESULT WINAPI IDsDriverBufferImpl_Unlock(PIDSDRIVERBUFFER iface, -+ LPVOID pvAudio1,DWORD dwLen1, -+ LPVOID pvAudio2,DWORD dwLen2) -+{ -+ /* We set DSDDESC_DONTNEEDPRIMARYLOCK so this should never be called */ -+ TRACE("(%p): stub", iface); -+ return DSERR_UNSUPPORTED; -+} -+ -+/* You cannot change the sample format of a connected stream, so we need to -+ * destroy and re-create the stream if the sample spec is different */ -+static HRESULT WINAPI IDsDriverBufferImpl_SetFormat(PIDSDRIVERBUFFER iface, LPWAVEFORMATEX pwfx) { -+ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; -+ pa_sample_spec old_spec; -+ -+ TRACE("(%p, %p)\n", iface, pwfx); -+ -+ old_spec.rate = This->sample_spec.rate; -+ old_spec.format = This->sample_spec.format; -+ old_spec.channels = This->sample_spec.channels; -+ -+ if (!PULSE_SetupFormat(pwfx, &This->sample_spec)) -+ return DSERR_BADFORMAT; -+ -+ if (old_spec.rate == This->sample_spec.rate && -+ old_spec.format == This->sample_spec.format && -+ old_spec.channels == This->sample_spec.channels) { -+ TRACE("same as original sample spec, exiting.\n"); -+ PULSE_WaitForOperation(pa_stream_flush(This->stream, PULSE_StreamSuccessCallback, This)); -+ return DS_OK; -+ } -+ -+ /* If the format doesn't match, return an error and the buffer will be remade */ -+ TRACE("Formats don't match, failing causing re-creation.\n"); -+ return DSERR_BUFFERLOST; -+} -+ -+static HRESULT WINAPI IDsDriverBufferImpl_SetFrequency(PIDSDRIVERBUFFER iface, DWORD dwFreq) -+{ -+ /* IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; */ -+ /* You can't do for primary buffers anyways */ -+ return S_OK; -+} -+ -+static HRESULT WINAPI IDsDriverBufferImpl_SetVolumePan(PIDSDRIVERBUFFER iface, PDSVOLUMEPAN pVolPan) { -+ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; -+ -+ if (This->sample_spec.channels == 2) { -+ This->volume.channels = 2; -+ if (pVolPan->lPan < 0) { -+ This->volume.values[0] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0 + pVolPan->lPan/10.0); -+ This->volume.values[1] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0); -+ } else { -+ This->volume.values[0] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0); -+ This->volume.values[1] = pa_sw_volume_from_dB(pVolPan->lVolume/-10.0 - pVolPan->lPan/10.0); -+ } -+ } else { -+ WARN("Panning non-stereo streams not supported yet!\n"); -+ pa_cvolume_set(&This->volume, This->sample_spec.channels, pa_sw_volume_from_dB(pVolPan->lVolume/-10.0)); -+ /* Would be nice to return DSERR_CONTROLUNAVAIL, but that isn't up to us -+ * here */ -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (This->stream && PULSE_context && pa_context_get_state(PULSE_context) == PA_CONTEXT_READY && -+ pa_stream_get_state(This->stream) == PA_STREAM_READY && pa_cvolume_valid(&This->volume)) -+ PULSE_WaitForOperation( -+ pa_context_set_sink_input_volume( -+ PULSE_context, pa_stream_get_index(This->stream), -+ &This->volume, PULSE_ContextSuccessCallback, This)); -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ return DS_OK; -+} -+ -+static HRESULT WINAPI IDsDriverBufferImpl_SetPosition(PIDSDRIVERBUFFER iface, DWORD dwNewPos) -+{ -+ /* IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; */ -+ /* Not allowed on primary buffers */ -+ return DSERR_UNSUPPORTED; -+} -+ -+static HRESULT WINAPI IDsDriverBufferImpl_GetPosition(PIDSDRIVERBUFFER iface, -+ LPDWORD lpdwPlay, LPDWORD lpdwWrite) -+{ -+ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (!This->buffer || pa_stream_get_state(This->stream) != PA_STREAM_READY) { -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return DSERR_UNINITIALIZED; -+ } -+ -+ if (lpdwPlay) -+ *lpdwPlay = This->buffer_play_offset; -+ if (lpdwWrite) -+ *lpdwWrite = This->buffer_read_offset; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ return DS_OK; -+} -+ -+static HRESULT WINAPI IDsDriverBufferImpl_Play(PIDSDRIVERBUFFER iface, DWORD dwRes1, DWORD dwRes2, DWORD dwFlags) { -+ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; -+ TRACE("(%p,%x,%x,%x)\n",iface,dwRes1,dwRes2,dwFlags); -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(This->stream, 0, PULSE_StreamSuccessCallback, This)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ return DS_OK; -+} -+ -+static HRESULT WINAPI IDsDriverBufferImpl_Stop(PIDSDRIVERBUFFER iface) { -+ IDsDriverBufferImpl *This = (IDsDriverBufferImpl *)iface; -+ TRACE("(%p)\n",iface); -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(This->stream, 1, PULSE_StreamSuccessCallback, This)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return DS_OK; -+} -+ -+/*****************************************************************************/ -+ -+static const IDsDriverBufferVtbl dsdbvt = -+{ -+ IDsDriverBufferImpl_QueryInterface, -+ IDsDriverBufferImpl_AddRef, -+ IDsDriverBufferImpl_Release, -+ IDsDriverBufferImpl_Lock, -+ IDsDriverBufferImpl_Unlock, -+ IDsDriverBufferImpl_SetFormat, -+ IDsDriverBufferImpl_SetFrequency, -+ IDsDriverBufferImpl_SetVolumePan, -+ IDsDriverBufferImpl_SetPosition, -+ IDsDriverBufferImpl_GetPosition, -+ IDsDriverBufferImpl_Play, -+ IDsDriverBufferImpl_Stop -+}; -+ -+static HRESULT WINAPI IDsDriverImpl_CreateSoundBuffer(PIDSDRIVER iface, -+ LPWAVEFORMATEX pwfx, -+ DWORD dwFlags, DWORD dwCardAddress, -+ LPDWORD pdwcbBufferSize, -+ LPBYTE *ppbBuffer, -+ LPVOID *ppvObj) { -+ IDsDriverImpl *This = (IDsDriverImpl *)iface; -+ IDsDriverBufferImpl** ippdsdb = (IDsDriverBufferImpl**)ppvObj; -+ IDsDriverBufferImpl *That; -+ HRESULT ret; -+ -+ TRACE("(%p,%p,%x,%x)\n",iface,pwfx,dwFlags,dwCardAddress); -+ /* we only support primary buffers */ -+ -+ if (!(dwFlags & DSBCAPS_PRIMARYBUFFER)) -+ return DSERR_UNSUPPORTED; -+ if (This->primary) -+ return DSERR_ALLOCATED; -+ This->primary = *ippdsdb; -+ -+ *ippdsdb = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDsDriverBufferImpl)); -+ -+ if (!*ippdsdb) { -+ ERR("Out of memory\n"); -+ return DSERR_OUTOFMEMORY; -+ } -+ -+ That = *ippdsdb; -+ That->lpVtbl = &dsdbvt; -+ That->ref = 1; -+ -+ That->drv = This; -+ TRACE("IdsDriverBufferImpl %p created.\n", That); -+ -+ if (!PULSE_SetupFormat(pwfx, &That->sample_spec)) { -+ WARN("Bad audio format.\n"); -+ ret = DSERR_BADFORMAT; -+ goto err; -+ } -+ -+ /* The buffer length has to be greater than fraglen * 20 or else logic in -+ * dlls/dsound/mixer.c fails to correctly understand buffer wrap around. */ -+ That->fraglen = fragment_length(&That->sample_spec); -+ That->buffer_length = That->fraglen * 32; -+ That->buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, That->buffer_length); -+ if (!That->buffer) { -+ ret = DSERR_OUTOFMEMORY; -+ goto err; -+ } -+ That->buffer_read_offset = 0; -+ That->buffer_play_offset = 0; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ ret = DSPULSE_ConnectStream(That); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ if (ret != DS_OK) -+ goto err; -+ -+ *pdwcbBufferSize = That->buffer_length; -+ *ppbBuffer = That->buffer; -+ -+ TRACE("Exiting with success. Have buffer %p of length %u\n", That->buffer, That->buffer_length); -+ return DS_OK; -+ -+err: -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (That->stream) { -+ if (pa_stream_get_state(That->stream) == PA_STREAM_READY) -+ pa_stream_disconnect(That->stream); -+ pa_stream_unref(That->stream); -+ That->stream = NULL; -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ HeapFree(GetProcessHeap(), 0, That->buffer); -+ HeapFree(GetProcessHeap(), 0, *ippdsdb); -+ WARN("exiting with failure.\n"); -+ return ret; -+} -+ -+static HRESULT WINAPI IDsDriverImpl_QueryInterface(PIDSDRIVER iface, REFIID riid, LPVOID *ppobj) { -+ /* IDsDriverImpl *This = (IDsDriverImpl *)iface; */ -+ FIXME("(%p): stub!\n",iface); -+ return DSERR_UNSUPPORTED; -+} -+ -+static ULONG WINAPI IDsDriverImpl_AddRef(PIDSDRIVER iface) { -+ IDsDriverImpl *This = (IDsDriverImpl *)iface; -+ ULONG refCount = InterlockedIncrement(&This->ref); -+ -+ TRACE("(%p)->(ref before=%u)\n",This, refCount - 1); -+ -+ return refCount; -+} -+ -+static ULONG WINAPI IDsDriverImpl_Release(PIDSDRIVER iface) { -+ IDsDriverImpl *This = (IDsDriverImpl *)iface; -+ ULONG refCount = InterlockedDecrement(&This->ref); -+ -+ TRACE("(%p)->(ref before=%u)\n",This, refCount + 1); -+ -+ if (refCount) -+ return refCount; -+ -+ HeapFree(GetProcessHeap(), 0, This); -+ return 0; -+} -+ -+static HRESULT WINAPI IDsDriverImpl_GetDriverDesc(PIDSDRIVER iface, PDSDRIVERDESC pDesc) { -+ IDsDriverImpl *This = (IDsDriverImpl *)iface; -+ TRACE("(%p,%p)\n",iface,pDesc); -+ *pDesc = WOutDev[This->wDevID].ds_desc; -+ pDesc->dwFlags = DSDDESC_DONTNEEDSECONDARYLOCK | DSDDESC_DONTNEEDPRIMARYLOCK; -+ pDesc->dnDevNode = 0; /*TODO: Bwah? */ -+ pDesc->wVxdId = 0; -+ pDesc->wReserved = 0; -+ pDesc->ulDeviceNum = This->wDevID; -+ pDesc->dwHeapType = DSDHEAP_NOHEAP; -+ pDesc->pvDirectDrawHeap = NULL; -+ pDesc->dwMemStartAddress = 0xDEAD0000; -+ pDesc->dwMemEndAddress = 0xDEAF0000; -+ pDesc->dwMemAllocExtra = 0; -+ pDesc->pvReserved1 = NULL; -+ pDesc->pvReserved2 = NULL; -+ return DS_OK; -+} -+ -+static HRESULT WINAPI IDsDriverImpl_Close(PIDSDRIVER iface) { -+ IDsDriverImpl *This = (IDsDriverImpl *)iface; -+ TRACE("(%p) stub, harmless\n",This); -+ return DS_OK; -+} -+ -+static HRESULT WINAPI IDsDriverImpl_Open(PIDSDRIVER iface) { -+ IDsDriverImpl *This = (IDsDriverImpl *)iface; -+ TRACE("(%p) stub, harmless\n",This); -+ return S_OK; -+} -+ -+static HRESULT WINAPI IDsDriverImpl_GetCaps(PIDSDRIVER iface, PDSDRIVERCAPS pCaps) { -+ IDsDriverImpl *This = (IDsDriverImpl *)iface; -+ -+ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) { -+ ERR("Context failure.\n"); -+ return DSERR_GENERIC; -+ } -+ -+ TRACE("(%p,%p)\n",iface,pCaps); -+ *pCaps = WOutDev[This->wDevID].ds_caps; -+ return DS_OK; -+} -+ -+static HRESULT WINAPI IDsDriverImpl_DuplicateSoundBuffer(PIDSDRIVER iface, -+ PIDSDRIVERBUFFER pBuffer, -+ LPVOID *ppvObj) -+{ -+ IDsDriverImpl *This = (IDsDriverImpl *)iface; -+ FIXME("(%p,%p): stub\n",This,pBuffer); -+ return DSERR_INVALIDCALL; -+} -+ -+static const IDsDriverVtbl dsdvt = -+{ -+ IDsDriverImpl_QueryInterface, -+ IDsDriverImpl_AddRef, -+ IDsDriverImpl_Release, -+ IDsDriverImpl_GetDriverDesc, -+ IDsDriverImpl_Open, -+ IDsDriverImpl_Close, -+ IDsDriverImpl_GetCaps, -+ IDsDriverImpl_CreateSoundBuffer, -+ IDsDriverImpl_DuplicateSoundBuffer -+}; -+ -+DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv) { -+ IDsDriverImpl** idrv = (IDsDriverImpl**)drv; -+ -+ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || pa_context_is_local(PULSE_context) != 1) { -+ WARN("Connection failure or server is not local, falling back to WaveOut HEL.\n"); -+ return MMSYSERR_NOTSUPPORTED; -+ } -+ -+ *idrv = HeapAlloc(GetProcessHeap(), 0, sizeof(IDsDriverImpl)); -+ if (!*idrv) -+ return MMSYSERR_NOMEM; -+ -+ TRACE("IDsDriverImpl %p created.\n", *idrv); -+ -+ (*idrv)->lpVtbl = &dsdvt; -+ (*idrv)->ref = 1; -+ (*idrv)->wDevID = wDevID; -+ (*idrv)->primary = NULL; -+ -+ return MMSYSERR_NOERROR; -+} -+ -+DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc) { -+ TRACE("(%u, %p)\n", wDevID, desc); -+ *desc = WOutDev[wDevID].ds_desc; -+ return MMSYSERR_NOERROR; -+} -+#endif /* HAVE_PULSEAUDIO */ -diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c -new file mode 100644 -index 0000000..b68fb05 ---- /dev/null -+++ b/dlls/winepulse.drv/pulse.c -@@ -0,0 +1,770 @@ -+/* -+ * Wine Driver for PulseAudio -+ * http://pulseaudio.org/ -+ * -+ * Copyright 2009 Arthur Taylor -+ * -+ * Contains code from other wine sound drivers. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wingdi.h" -+#include "winuser.h" -+#include "winreg.h" -+#include "mmddk.h" -+#include "ks.h" -+#include "ksguid.h" -+#include "ksmedia.h" -+ -+#ifdef HAVE_UNISTD_H -+# include -+#endif -+#include -+ -+#ifdef HAVE_PULSEAUDIO -+ -+#include "wine/unicode.h" -+#include "wine/debug.h" -+#include "wine/library.h" -+ -+#include -+#include -+WINE_DEFAULT_DEBUG_CHANNEL(wave); -+ -+/* These strings used only for tracing */ -+const char * PULSE_getCmdString(enum win_wm_message msg) { -+ static char unknown[32]; -+#define MSG_TO_STR(x) case x: return #x -+ switch(msg) { -+ MSG_TO_STR(WINE_WM_PAUSING); -+ MSG_TO_STR(WINE_WM_RESTARTING); -+ MSG_TO_STR(WINE_WM_RESETTING); -+ MSG_TO_STR(WINE_WM_HEADER); -+ MSG_TO_STR(WINE_WM_BREAKLOOP); -+ MSG_TO_STR(WINE_WM_CLOSING); -+ MSG_TO_STR(WINE_WM_STARTING); -+ MSG_TO_STR(WINE_WM_STOPPING); -+ MSG_TO_STR(WINE_WM_XRUN); -+ MSG_TO_STR(WINE_WM_FEED); -+ } -+#undef MSG_TO_STR -+ sprintf(unknown, "UNKNOWN(0x%08x)", msg); -+ return unknown; -+} -+ -+/*======================================================================* -+ * Ring Buffer Functions - copied from winealsa.drv * -+ *======================================================================*/ -+ -+/* unless someone makes a wineserver kernel module, Unix pipes are faster than win32 events */ -+#define USE_PIPE_SYNC -+ -+#ifdef USE_PIPE_SYNC -+#define INIT_OMR(omr) do { if (pipe(omr->msg_pipe) < 0) { omr->msg_pipe[0] = omr->msg_pipe[1] = -1; } } while (0) -+#define CLOSE_OMR(omr) do { close(omr->msg_pipe[0]); close(omr->msg_pipe[1]); } while (0) -+#define SIGNAL_OMR(omr) do { int x = 0; write((omr)->msg_pipe[1], &x, sizeof(x)); } while (0) -+#define CLEAR_OMR(omr) do { int x = 0; read((omr)->msg_pipe[0], &x, sizeof(x)); } while (0) -+#define RESET_OMR(omr) do { } while (0) -+#define WAIT_OMR(omr, sleep) \ -+ do { struct pollfd pfd; pfd.fd = (omr)->msg_pipe[0]; \ -+ pfd.events = POLLIN; poll(&pfd, 1, sleep); } while (0) -+#else -+#define INIT_OMR(omr) do { omr->msg_event = CreateEventW(NULL, FALSE, FALSE, NULL); } while (0) -+#define CLOSE_OMR(omr) do { CloseHandle(omr->msg_event); } while (0) -+#define SIGNAL_OMR(omr) do { SetEvent((omr)->msg_event); } while (0) -+#define CLEAR_OMR(omr) do { } while (0) -+#define RESET_OMR(omr) do { ResetEvent((omr)->msg_event); } while (0) -+#define WAIT_OMR(omr, sleep) \ -+ do { WaitForSingleObject((omr)->msg_event, sleep); } while (0) -+#endif -+ -+#define PULSE_RING_BUFFER_INCREMENT 64 -+ -+/****************************************************************** -+ * PULSE_InitRingMessage -+ * -+ * Initialize the ring of messages for passing between driver's caller -+ * and playback/record thread -+ */ -+int PULSE_InitRingMessage(PULSE_MSG_RING* omr) -+{ -+ omr->msg_toget = 0; -+ omr->msg_tosave = 0; -+ INIT_OMR(omr); -+ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; -+ omr->messages = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,omr->ring_buffer_size * sizeof(PULSE_MSG)); -+ -+ InitializeCriticalSection(&omr->msg_crst); -+ omr->msg_crst.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": PULSE_MSG_RING.msg_crst"); -+ return 0; -+} -+ -+/****************************************************************** -+ * PULSE_DestroyRingMessage -+ * -+ */ -+int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr) -+{ -+ CLOSE_OMR(omr); -+ HeapFree(GetProcessHeap(),0,omr->messages); -+ omr->messages = NULL; -+ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; -+ omr->msg_crst.DebugInfo->Spare[0] = 0; -+ DeleteCriticalSection(&omr->msg_crst); -+ return 0; -+} -+/****************************************************************** -+ * PULSE_ResetRingMessage -+ * -+ */ -+void PULSE_ResetRingMessage(PULSE_MSG_RING* omr) -+{ -+ RESET_OMR(omr); -+} -+ -+/****************************************************************** -+ * PULSE_WaitRingMessage -+ * -+ */ -+void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep) -+{ -+ WAIT_OMR(omr, sleep); -+} -+ -+/****************************************************************** -+ * PULSE_AddRingMessage -+ * -+ * Inserts a new message into the ring (should be called from DriverProc derived routines) -+ */ -+int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait) -+{ -+ HANDLE hEvent = INVALID_HANDLE_VALUE; -+ -+ EnterCriticalSection(&omr->msg_crst); -+ if ((omr->msg_toget == ((omr->msg_tosave + 1) % omr->ring_buffer_size))) -+ { -+ int old_ring_buffer_size = omr->ring_buffer_size; -+ omr->ring_buffer_size += PULSE_RING_BUFFER_INCREMENT; -+ omr->messages = HeapReAlloc(GetProcessHeap(),0,omr->messages, omr->ring_buffer_size * sizeof(PULSE_MSG)); -+ /* Now we need to rearrange the ring buffer so that the new -+ buffers just allocated are in between omr->msg_tosave and -+ omr->msg_toget. -+ */ -+ if (omr->msg_tosave < omr->msg_toget) -+ { -+ memmove(&(omr->messages[omr->msg_toget + PULSE_RING_BUFFER_INCREMENT]), -+ &(omr->messages[omr->msg_toget]), -+ sizeof(PULSE_MSG)*(old_ring_buffer_size - omr->msg_toget) -+ ); -+ omr->msg_toget += PULSE_RING_BUFFER_INCREMENT; -+ } -+ } -+ if (wait) -+ { -+ hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); -+ if (hEvent == INVALID_HANDLE_VALUE) -+ { -+ ERR("can't create event !?\n"); -+ LeaveCriticalSection(&omr->msg_crst); -+ return 0; -+ } -+ /* fast messages have to be added at the start of the queue */ -+ omr->msg_toget = (omr->msg_toget + omr->ring_buffer_size - 1) % omr->ring_buffer_size; -+ -+ omr->messages[omr->msg_toget].msg = msg; -+ omr->messages[omr->msg_toget].param = param; -+ omr->messages[omr->msg_toget].hEvent = hEvent; -+ } -+ else -+ { -+ omr->messages[omr->msg_tosave].msg = msg; -+ omr->messages[omr->msg_tosave].param = param; -+ omr->messages[omr->msg_tosave].hEvent = INVALID_HANDLE_VALUE; -+ omr->msg_tosave = (omr->msg_tosave + 1) % omr->ring_buffer_size; -+ } -+ LeaveCriticalSection(&omr->msg_crst); -+ /* signal a new message */ -+ SIGNAL_OMR(omr); -+ if (wait) -+ { -+ /* wait for playback/record thread to have processed the message */ -+ WaitForSingleObject(hEvent, INFINITE); -+ CloseHandle(hEvent); -+ } -+ return 1; -+} -+ -+/****************************************************************** -+ * PULSE_RetrieveRingMessage -+ * -+ * Get a message from the ring. Should be called by the playback/record thread. -+ */ -+int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, -+ enum win_wm_message *msg, DWORD *param, HANDLE *hEvent) -+{ -+ EnterCriticalSection(&omr->msg_crst); -+ -+ if (omr->msg_toget == omr->msg_tosave) /* buffer empty ? */ -+ { -+ LeaveCriticalSection(&omr->msg_crst); -+ return 0; -+ } -+ -+ *msg = omr->messages[omr->msg_toget].msg; -+ omr->messages[omr->msg_toget].msg = 0; -+ *param = omr->messages[omr->msg_toget].param; -+ *hEvent = omr->messages[omr->msg_toget].hEvent; -+ omr->msg_toget = (omr->msg_toget + 1) % omr->ring_buffer_size; -+ CLEAR_OMR(omr); -+ LeaveCriticalSection(&omr->msg_crst); -+ return 1; -+} -+ -+/************************************************************************** -+ * Utility Functions -+ *************************************************************************/ -+ -+/****************************************************************** -+ * PULSE_SetupFormat -+ * -+ * Checks to see if the audio format in wf is supported, and if so set up the -+ * pa_sample_spec at ss to that format. -+ */ -+BOOL PULSE_SetupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss) { -+ WAVEFORMATEXTENSIBLE *wfex; -+ -+ ss->channels = wf->nChannels; -+ ss->rate = wf->nSamplesPerSec; -+ ss->format = PA_SAMPLE_INVALID; -+ -+ if (ss->rate < DSBFREQUENCY_MIN || ss->rate > DSBFREQUENCY_MAX) return FALSE; -+ -+ switch (wf->wFormatTag) { -+ case WAVE_FORMAT_PCM: -+ /* MSDN says that for WAVE_FORMAT_PCM, nChannels must be 1 or 2 and -+ * wBitsPerSample must be 8 or 16, yet other values are used by some -+ * applications in the wild for surround. */ -+ if (ss->channels > 6 || ss->channels < 1) return FALSE; -+ ss->format = wf->wBitsPerSample == 8 ? PA_SAMPLE_U8 -+ : wf->wBitsPerSample == 16 ? PA_SAMPLE_S16NE -+#if PA_PROTOCOL_VERSION >= 15 -+ : wf->wBitsPerSample == 24 ? PA_SAMPLE_S24NE -+#endif -+ : wf->wBitsPerSample == 32 ? PA_SAMPLE_S32NE -+ : PA_SAMPLE_INVALID; -+ break; -+ -+ case WAVE_FORMAT_MULAW: -+ if (wf->wBitsPerSample == 8) ss->format = PA_SAMPLE_ULAW; -+ break; -+ -+ case WAVE_FORMAT_ALAW: -+ if (wf->wBitsPerSample == 8) ss->format = PA_SAMPLE_ALAW; -+ break; -+ -+ case WAVE_FORMAT_EXTENSIBLE: -+ if (wf->cbSize > 22) return FALSE; -+ if (ss->channels < 1 || ss->channels > 6) return FALSE; -+ wfex = (WAVEFORMATEXTENSIBLE *)wf; -+ if (IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM)) { -+ if (wf->wBitsPerSample == wfex->Samples.wValidBitsPerSample) { -+ ss->format = wf->wBitsPerSample == 8 ? PA_SAMPLE_U8 -+ : wf->wBitsPerSample == 16 ? PA_SAMPLE_S16NE -+#if PA_PROTOCOL_VERSION >= 15 -+ : wf->wBitsPerSample == 24 ? PA_SAMPLE_S24NE -+#endif -+ : wf->wBitsPerSample == 32 ? PA_SAMPLE_S32NE -+ : PA_SAMPLE_INVALID; -+ } else { -+#if PA_PROTOCOL_VERSION >= 15 -+ if (wf->wBitsPerSample == 32 && wfex->Samples.wValidBitsPerSample == 24) -+ ss->format = PA_SAMPLE_S24_32NE; -+ else -+#endif -+ return FALSE; -+ } -+ } else if (wf->wBitsPerSample != wfex->Samples.wValidBitsPerSample) { -+ return FALSE; -+ } else if ((IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))) { -+ ss->format = PA_SAMPLE_FLOAT32NE; -+ } else { -+ WARN("only KSDATAFORMAT_SUBTYPE_PCM and KSDATAFORMAT_SUBTYPE_IEEE_FLOAT of WAVE_FORMAT_EXTENSIBLE supported\n"); -+ return FALSE; -+ } -+ break; -+ -+ default: -+ WARN("only WAVE_FORMAT_PCM, WAVE_FORMAT_MULAW, WAVE_FORMAT_ALAW and WAVE_FORMAT_EXTENSIBLE supported\n"); -+ return FALSE; -+ } -+ -+ if (!pa_sample_spec_valid(ss)) return FALSE; -+ if (wf->nBlockAlign != pa_frame_size(ss)) { -+ ERR("wf->nBlockAlign != the format frame size!\n"); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+/************************************************************************** -+ * PULSE_WaitForOperation -+ * -+ * Waits for pa operations to complete, and dereferences the operation. -+ */ -+void PULSE_WaitForOperation(pa_operation *o) { -+ if (!o) return; -+ -+ for (;;) { -+ if (pa_operation_get_state(o) != PA_OPERATION_RUNNING) -+ break; -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ pa_operation_unref(o); -+} -+ -+/************************************************************************** -+ * Common Callbacks -+ */ -+ -+/************************************************************************** -+ * PULSE_StreamSuspendedCallback [internal] -+ * -+ * Called by the pulse mainloop any time stream playback is intentionally -+ * suspended or resumed from being suspended. -+ */ -+void PULSE_StreamSuspendedCallback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ /* Currently we handle this kinda like an underrun. Perhaps we should -+ * tell the client somehow so it doesn't just hang? */ -+ -+ if (!pa_stream_is_suspended(s) && wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); -+} -+ -+/************************************************************************** -+ * PULSE_StreamUnderflowCallback [internal] -+ * -+ * Called by the pulse mainloop when the prebuf runs out of data. -+ */ -+void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ /* If we aren't playing, don't care ^_^ */ -+ if (wwo->state != WINE_WS_PLAYING) return; -+ -+ TRACE("Underrun occurred.\n"); -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0); -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); -+} -+ -+/************************************************************************** -+ * PULSE_StreamOverflowCallback [internal] -+ * -+ * Called by the pulse mainloop when the write buffer was overflowed and data -+ * was lost. -+ */ -+void PULSE_StreamOverflowCallback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ ERR("Overflow occurred!?!\n"); -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0); -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 1, FALSE); -+} -+ -+/************************************************************************** -+ * PULSE_StreamMovedCallback [internal] -+ * -+ * Called by the pulse mainloop when the stream gets moved, resulting in -+ * possibly different metrics. -+ */ -+void PULSE_StreamMovedCallback(pa_stream *s, void *userdata) { -+ FIXME("stub"); -+} -+ -+ -+/****************************************************************** -+ * PULSE_StreamStateCallback -+ * -+ * Called by pulse whenever the state of the stream changes. -+ * -+ * void *userdata is either the dsound or wave instance -+ */ -+void PULSE_StreamStateCallback(pa_stream *s, void *userdata) { -+ assert(s); -+ -+ switch (pa_stream_get_state(s)) { -+ case PA_STREAM_READY: -+ TRACE("Stream %p ready\n", userdata); -+ break; -+ -+ case PA_STREAM_TERMINATED: -+ TRACE("Stream %p terminated\n", userdata); -+ break; -+ -+ case PA_STREAM_FAILED: -+ ERR("Stream %p failed!\n", userdata); -+ break; -+ -+ case PA_STREAM_UNCONNECTED: -+ case PA_STREAM_CREATING: -+ return; -+ } -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_StreamSucessCallback -+ */ -+void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata) { -+ if (!success) -+ WARN("Stream %p operation failed: %s\n", userdata, pa_strerror(pa_context_errno(PULSE_context))); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_ContextSuccessCallback -+ */ -+void PULSE_ContextSuccessCallback(pa_context *c, int success, void *userdata) { -+ if (!success) ERR("Context operation failed: %s\n", pa_strerror(pa_context_errno(c))); -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * Connection management and sink / source management. -+ */ -+ -+/************************************************************************** -+ * PULSE_ContextStateCallback [internal] -+ */ -+static void PULSE_ContextStateCallback(pa_context *c, void *userdata) { -+ assert(c); -+ -+ switch (pa_context_get_state(c)) { -+ case PA_CONTEXT_CONNECTING: -+ case PA_CONTEXT_UNCONNECTED: -+ case PA_CONTEXT_AUTHORIZING: -+ case PA_CONTEXT_SETTING_NAME: -+ break; -+ -+ case PA_CONTEXT_READY: -+ case PA_CONTEXT_TERMINATED: -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ break; -+ -+ case PA_CONTEXT_FAILED: -+ ERR("Context failure: %s\n", pa_strerror(pa_context_errno(c))); -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ break; -+ } -+} -+ -+/************************************************************************** -+ * PULSE_AllocateWaveinDevice [internal] -+ * -+ * Creates or adds a device to WInDev based on the pa_source_info. -+ */ -+static void PULSE_AllocateWaveinDevice(const char *name, const char *device, const char *description, const pa_cvolume *v) { -+ WINE_WAVEDEV *wdi; -+ -+ if (WInDev) -+ wdi = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * (PULSE_WidNumDevs + 1)); -+ else -+ wdi = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); -+ -+ if (!wdi) return; -+ -+ WInDev = wdi; -+ wdi = &WInDev[PULSE_WidNumDevs++]; -+ memset(wdi, 0, sizeof(WINE_WAVEDEV)); -+ memset(&(wdi->caps.in), 0, sizeof(wdi->caps.in)); -+ snprintf(wdi->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); -+ wdi->device_name = pa_xstrdup(device); -+ strcpy(wdi->interface_name, "winepulse: "); -+ MultiByteToWideChar(CP_ACP, 0, description, -1, wdi->caps.in.szPname, sizeof(wdi->caps.in.szPname)/sizeof(WCHAR)); -+ wdi->caps.in.szPname[sizeof(wdi->caps.in.szPname)/sizeof(WCHAR) - 1] = '\0'; -+ wdi->caps.in.wMid = MM_CREATIVE; -+ wdi->caps.in.wPid = MM_CREATIVE_SBP16_WAVEOUT; -+ wdi->caps.in.vDriverVersion = 0x0100; -+ wdi->caps.in.wChannels = v->channels == 1 ? 1 : 2; -+ wdi->caps.in.dwFormats = PULSE_ALL_FORMATS; -+ memset(&wdi->ds_desc, 0, sizeof(DSDRIVERDESC)); -+ memcpy(wdi->ds_desc.szDesc, description, min(sizeof(wdi->ds_desc.szDesc) - 1, strlen(description))); -+ memcpy(wdi->ds_desc.szDrvname, "winepulse.drv", 14); -+ wdi->ds_caps.dwMinSecondarySampleRate = DSBFREQUENCY_MIN; -+ wdi->ds_caps.dwMaxSecondarySampleRate = DSBFREQUENCY_MAX; -+ wdi->ds_caps.dwPrimaryBuffers = 1; -+ wdi->ds_caps.dwFlags = \ -+ DSCAPS_PRIMARYMONO | -+ DSCAPS_PRIMARYSTEREO | -+ DSCAPS_PRIMARY8BIT | -+ DSCAPS_PRIMARY16BIT | -+ DSCAPS_SECONDARYMONO | -+ DSCAPS_SECONDARYSTEREO | -+ DSCAPS_SECONDARY8BIT | -+ DSCAPS_SECONDARY16BIT | -+ DSCCAPS_MULTIPLECAPTURE | -+ DSCAPS_CERTIFIED | /* Useful? */ -+ DSCAPS_EMULDRIVER; /* Useful? */ -+ -+} -+ -+/************************************************************************** -+ * PULSE_AllocateWaveoutDevice [internal] -+ * -+ * Creates or adds a sink to the WOutDev array. -+ */ -+static void PULSE_AllocateWaveoutDevice(const char *name, const char *device, const char *description, const pa_cvolume *v) { -+ WINE_WAVEDEV *wdo; -+ int x; -+ -+ if (WOutDev) -+ wdo = HeapReAlloc(GetProcessHeap(), 0, WOutDev, sizeof(WINE_WAVEDEV) * (PULSE_WodNumDevs + 1)); -+ else -+ wdo = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); -+ -+ if (!wdo) return; -+ -+ WOutDev = wdo; -+ wdo = &WOutDev[PULSE_WodNumDevs++]; -+ memset(wdo, 0, sizeof(WINE_WAVEDEV)); -+ -+ wdo->device_name = pa_xstrdup(device); -+ wdo->volume.channels = v->channels; -+ for (x = 0; x < v->channels; x++) wdo->volume.values[x] = v->values[x]; -+ snprintf(wdo->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); -+ MultiByteToWideChar(CP_ACP, 0, description, -1, wdo->caps.out.szPname, sizeof(wdo->caps.out.szPname)/sizeof(WCHAR)); -+ wdo->caps.out.szPname[sizeof(wdo->caps.out.szPname)/sizeof(WCHAR) - 1] = '\0'; -+ wdo->caps.out.wMid = MM_CREATIVE; -+ wdo->caps.out.wPid = MM_CREATIVE_SBP16_WAVEOUT; -+ wdo->caps.out.vDriverVersion = 0x0100; -+ wdo->caps.out.dwSupport = WAVECAPS_VOLUME | WAVECAPS_SAMPLEACCURATE | WAVECAPS_DIRECTSOUND; -+ if (v->channels >= 2) { -+ wdo->caps.out.wChannels = 2; -+ wdo->caps.out.dwSupport |= WAVECAPS_LRVOLUME; -+ } else -+ wdo->caps.out.wChannels = 1; -+ wdo->caps.out.dwFormats = PULSE_ALL_FORMATS; -+ memset(&wdo->ds_desc, 0, sizeof(DSDRIVERDESC)); -+ memcpy(wdo->ds_desc.szDesc, description, min(sizeof(wdo->ds_desc.szDesc) - 1, strlen(description))); -+ memcpy(wdo->ds_desc.szDrvname, "winepulse.drv", 14); -+ wdo->ds_caps.dwMinSecondarySampleRate = DSBFREQUENCY_MIN; -+ wdo->ds_caps.dwMaxSecondarySampleRate = DSBFREQUENCY_MAX; -+ wdo->ds_caps.dwPrimaryBuffers = 1; -+ wdo->ds_caps.dwFlags = \ -+ DSCAPS_PRIMARYMONO | -+ DSCAPS_PRIMARYSTEREO | -+ DSCAPS_PRIMARY8BIT | -+ DSCAPS_PRIMARY16BIT | -+ DSCAPS_SECONDARYMONO | -+ DSCAPS_SECONDARYSTEREO | -+ DSCAPS_SECONDARY8BIT | -+ DSCAPS_SECONDARY16BIT | -+ DSCAPS_CERTIFIED; -+} -+ -+/************************************************************************** -+ * PULSE_SourceInfoCallback [internal] -+ */ -+static void PULSE_SourceInfoCallback(pa_context *c, const pa_source_info *i, int eol, void *userdata) { -+ -+ if (!eol && i) -+ PULSE_AllocateWaveinDevice(i->name, i->name, i->description, &i->volume); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_SinkInfoCallback [internal] -+ */ -+static void PULSE_SinkInfoCallback(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { -+ -+ if (!eol && i) -+ PULSE_AllocateWaveoutDevice(i->name, i->name, i->description, &i->volume); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_ContextNotifyCallback [internal] -+ */ -+static void PULSE_ContextNotifyCallback(pa_context *c, void *userdata) { -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_WaveClose [internal] -+ * -+ * Disconnect from the server, deallocated the WaveIn/WaveOut devices, stop and -+ * free the mainloop. -+ */ -+ -+static LONG PULSE_WaveClose(void) { -+ int x; -+ TRACE("()\n"); -+ if (!PULSE_ml) return DRV_FAILURE; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ /* device_name is allocated with pa_xstrdup, free with pa_xfree */ -+ for (x = 0; x < PULSE_WodNumDevs; x++) pa_xfree(WOutDev[x].device_name); -+ for (x = 0; x < PULSE_WidNumDevs; x++) pa_xfree(WInDev[x].device_name); -+ HeapFree(GetProcessHeap(), 0, WOutDev); -+ HeapFree(GetProcessHeap(), 0, WInDev); -+ if (PULSE_context) { -+ PULSE_WaitForOperation(pa_context_drain(PULSE_context, PULSE_ContextNotifyCallback, NULL)); -+ pa_context_disconnect(PULSE_context); -+ pa_context_unref(PULSE_context); -+ PULSE_context = NULL; -+ } -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ pa_threaded_mainloop_stop(PULSE_ml); -+ pa_threaded_mainloop_free(PULSE_ml); -+ PULSE_ml = NULL; -+ -+ return DRV_SUCCESS; -+} -+ -+/************************************************************************** -+ * PULSE_WaveInit [internal] -+ * -+ * Connects to the pulseaudio server, tries to discover sinks and sources and -+ * allocates the WaveIn/WaveOut devices. -+ */ -+static LONG PULSE_WaveInit(void) { -+ char *app_name; -+ char path[PATH_MAX]; -+ char *offset = NULL; -+ int x = 0; -+ pa_cvolume fake_cvolume; -+ -+ WOutDev = NULL; -+ WInDev = NULL; -+ PULSE_WodNumDevs = 0; -+ PULSE_WidNumDevs = 0; -+ PULSE_context = NULL; -+ PULSE_ml = NULL; -+ -+ if (!(PULSE_ml = pa_threaded_mainloop_new())) { -+ WARN("Failed to create mainloop object."); -+ return -1; -+ } -+ -+ /* Application name giving to pulse should be unique to the binary so that -+ * pulse-*-restore can be useful */ -+ -+ /* Get binary path, and remove path a-la strrchr */ -+ if (GetModuleFileNameA(NULL, path, PATH_MAX)) -+ offset = strrchr(path, '\\'); -+ -+ if (offset && ++offset && offset < path + PATH_MAX) { -+ app_name = pa_xmalloc(strlen(offset) + 8); -+ snprintf(app_name, strlen(offset) + 8, "WINE [%s]", offset); -+ } else -+ app_name = pa_xstrdup("WINE Application"); -+ -+ TRACE("App name is \"%s\"\n", app_name); -+ -+ pa_threaded_mainloop_start(PULSE_ml); -+ PULSE_context = pa_context_new(pa_threaded_mainloop_get_api(PULSE_ml), app_name); -+ assert(PULSE_context); -+ pa_xfree(app_name); -+ -+ pa_context_set_state_callback(PULSE_context, PULSE_ContextStateCallback, NULL); -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ -+ TRACE("libpulse protocol version: %u. API Version %u\n", pa_context_get_protocol_version(PULSE_context), PA_API_VERSION); -+ TRACE("Attempting to connect to pulseaudio server.\n"); -+ if (pa_context_connect(PULSE_context, NULL, 0, NULL) < 0) -+ goto fail; -+ -+ /* Wait for connection */ -+ for (;;) { -+ pa_context_state_t state = pa_context_get_state(PULSE_context); -+ -+ if (state == PA_CONTEXT_FAILED || state == PA_CONTEXT_TERMINATED) -+ goto fail; -+ -+ if (state == PA_CONTEXT_READY) -+ break; -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ -+ x = pa_context_get_server_protocol_version(PULSE_context); -+ TRACE("Connected to server %s with protocol version: %i.\n", pa_context_get_server(PULSE_context), x); -+ if (x < 14) -+ WARN("Server is old, expect poor latency or buggy-ness!\n"); -+ -+ fake_cvolume.channels = 2; -+ pa_cvolume_reset(&fake_cvolume, 2); -+ /* FIXME Translations? */ -+ PULSE_AllocateWaveoutDevice("default", NULL, "Default", &fake_cvolume); -+ PULSE_AllocateWaveinDevice("default", NULL, "Default", &fake_cvolume); -+ PULSE_WaitForOperation(pa_context_get_sink_info_list(PULSE_context, PULSE_SinkInfoCallback, &PULSE_WodNumDevs)); -+ PULSE_WaitForOperation(pa_context_get_source_info_list(PULSE_context, PULSE_SourceInfoCallback, &PULSE_WidNumDevs)); -+ TRACE("Found %u output and %u input device(s).\n", PULSE_WodNumDevs - 1, PULSE_WidNumDevs - 1); -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ return DRV_SUCCESS; -+ -+fail: -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ ERR("Failed to connect to server\n"); -+ return DRV_FAILURE; -+} -+ -+#endif /* HAVE_PULSEAUDIO */ -+ -+/************************************************************************** -+ * DriverProc (WINEPULSE.@) -+ */ -+LRESULT CALLBACK PULSE_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, -+ LPARAM dwParam1, LPARAM dwParam2) { -+ -+ switch(wMsg) { -+#ifdef HAVE_PULSEAUDIO -+ case DRV_LOAD: return PULSE_WaveInit(); -+ case DRV_FREE: return PULSE_WaveClose(); -+ case DRV_OPEN: return 1; -+ case DRV_CLOSE: return 1; -+ case DRV_ENABLE: return 1; -+ case DRV_DISABLE: return 1; -+ case DRV_QUERYCONFIGURE: return 1; -+ case DRV_CONFIGURE: MessageBoxA(0, "PulseAudio MultiMedia Driver !", "PulseAudio Driver", MB_OK); return 1; -+ case DRV_INSTALL: return DRVCNF_RESTART; -+ case DRV_REMOVE: return DRVCNF_RESTART; -+#endif -+ default: -+ return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2); -+ } -+} -diff --git a/dlls/winepulse.drv/wavein.c b/dlls/winepulse.drv/wavein.c -new file mode 100644 -index 0000000..5495b2a ---- /dev/null -+++ b/dlls/winepulse.drv/wavein.c -@@ -0,0 +1,614 @@ -+/* -+ * Wine Driver for PulseAudio - WaveIn Functionality -+ * http://pulseaudio.org/ -+ * -+ * Copyright 2009 Arthur Taylor -+ * -+ * Contains code from other wine multimedia drivers. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wingdi.h" -+#include "winuser.h" -+#include "winnls.h" -+#include "mmddk.h" -+ -+#include -+ -+#include "wine/debug.h" -+ -+WINE_DEFAULT_DEBUG_CHANNEL(wave); -+ -+#if HAVE_PULSEAUDIO -+ -+/*======================================================================* -+ * WAVE IN specific PulseAudio Callbacks * -+ *======================================================================*/ -+ -+/************************************************************************** -+* widNotifyClient [internal] -+*/ -+static DWORD widNotifyClient(WINE_WAVEINST* wwi, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { -+ TRACE("wMsg = 0x%04x dwParm1 = %04X dwParam2 = %04X\n", wMsg, dwParam1, dwParam2); -+ -+ switch (wMsg) { -+ case WIM_OPEN: -+ case WIM_CLOSE: -+ case WIM_DATA: -+ if (wwi->wFlags != DCB_NULL && -+ !DriverCallback(wwi->waveDesc.dwCallback, wwi->wFlags, (HDRVR)wwi->waveDesc.hWave, -+ wMsg, wwi->waveDesc.dwInstance, dwParam1, dwParam2)) { -+ WARN("can't notify client !\n"); -+ return MMSYSERR_ERROR; -+ } -+ break; -+ default: -+ FIXME("Unknown callback message %u\n", wMsg); -+ return MMSYSERR_INVALPARAM; -+ } -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widRecorder_NextFragment [internal] -+ * -+ * Gets the next fragment of data from the server. -+ */ -+static size_t widRecorder_NextFragment(WINE_WAVEINST *wwi) { -+ size_t nbytes; -+ -+ pa_stream_peek(wwi->stream, &wwi->buffer, &nbytes); -+ wwi->buffer_length = nbytes; -+ wwi->buffer_read_offset = 0; -+ -+ return nbytes; -+} -+ -+ -+/************************************************************************** -+ * widRecorder_CopyData [internal] -+ * -+ * Copys data from the fragments pulse returns to queued buffers. -+ */ -+static void widRecorder_CopyData(WINE_WAVEINST *wwi) { -+ LPWAVEHDR lpWaveHdr = wwi->lpQueuePtr; -+ size_t nbytes; -+ -+ while (lpWaveHdr && wwi->state == WINE_WS_PLAYING) { -+ -+ nbytes = min(wwi->buffer_length - wwi->buffer_read_offset, lpWaveHdr->dwBufferLength - lpWaveHdr->dwBytesRecorded); -+ if (nbytes == 0) break; -+ -+ TRACE("%u bytes from %p to %p\n", nbytes, (PBYTE)wwi->buffer + wwi->buffer_read_offset, lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded); -+ memcpy(lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded, (PBYTE)wwi->buffer + wwi->buffer_read_offset, nbytes); -+ -+ lpWaveHdr->dwBytesRecorded += nbytes; -+ wwi->buffer_read_offset += nbytes; -+ -+ if (wwi->buffer_read_offset == wwi->buffer_length) { -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_drop(wwi->stream); -+ if (pa_stream_readable_size(wwi->stream)) -+ widRecorder_NextFragment(wwi); -+ else { -+ wwi->buffer = NULL; -+ wwi->buffer_length = 0; -+ wwi->buffer_read_offset = 0; -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ -+ if (lpWaveHdr->dwBytesRecorded == lpWaveHdr->dwBufferLength) { -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpWaveHdr->lpNext; -+ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ lpWaveHdr = wwi->lpQueuePtr; -+ } -+ } -+} -+ -+/************************************************************************** -+ * widRecorder [internal] -+ */ -+static DWORD CALLBACK widRecorder(LPVOID lpParam) { -+ WINE_WAVEINST *wwi = (WINE_WAVEINST*)lpParam; -+ LPWAVEHDR lpWaveHdr; -+ enum win_wm_message msg; -+ DWORD param; -+ HANDLE ev; -+ DWORD wait; -+ -+ wwi->state = WINE_WS_STOPPED; -+ SetEvent(wwi->hStartUpEvent); -+ -+ for (;;) { -+ -+ if (wwi->state != WINE_WS_PLAYING) { -+ wait = INFINITE; -+ } else { -+ if (wwi->buffer == NULL && pa_stream_readable_size(wwi->stream)) { -+ pa_threaded_mainloop_lock(PULSE_ml); -+ wait = pa_bytes_to_usec(widRecorder_NextFragment(wwi), &wwi->sample_spec)/1000; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ } -+ -+ widRecorder_CopyData(wwi); -+ -+ PULSE_WaitRingMessage(&wwi->msgRing, wait); -+ -+ while (PULSE_RetrieveRingMessage(&wwi->msgRing, &msg, ¶m, &ev)) { -+ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); -+ -+ switch (msg) { -+ case WINE_WM_FEED: -+ SetEvent(ev); -+ break; -+ case WINE_WM_STARTING: -+ wwi->state = WINE_WS_PLAYING; -+ wait = pa_bytes_to_usec(wwi->lpQueuePtr->dwBufferLength, &wwi->sample_spec)/1000; -+ wwi->last_reset = wwi->timing_info->read_index; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 0, PULSE_StreamSuccessCallback, NULL)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ SetEvent(ev); -+ break; -+ case WINE_WM_HEADER: -+ lpWaveHdr = (LPWAVEHDR)param; -+ lpWaveHdr->lpNext = 0; -+ -+ /* insert buffer at the end of queue */ -+ { -+ LPWAVEHDR* wh; -+ for (wh = &(wwi->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); -+ *wh = lpWaveHdr; -+ } -+ break; -+ case WINE_WM_STOPPING: -+ if (wwi->state != WINE_WS_STOPPED) { -+ wwi->state = WINE_WS_STOPPED; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ /* return current buffer to app */ -+ lpWaveHdr = wwi->lpQueuePtr; -+ if (lpWaveHdr) { -+ LPWAVEHDR lpNext = lpWaveHdr->lpNext; -+ TRACE("stop %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpNext; -+ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ } -+ } -+ SetEvent(ev); -+ break; -+ case WINE_WM_RESETTING: -+ if (wwi->state != WINE_WS_STOPPED) { -+ wwi->state = WINE_WS_STOPPED; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ -+ /* return all buffers to the app */ -+ for (lpWaveHdr = wwi->lpPlayPtr ? wwi->lpPlayPtr : wwi->lpQueuePtr; lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpWaveHdr->lpNext; -+ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ } -+ -+ SetEvent(ev); -+ break; -+ case WINE_WM_CLOSING: -+ wwi->hThread = 0; -+ if ((DWORD)param == 1) { -+ /* If we are here, the stream failed */ -+ wwi->state = WINE_WS_FAILED; -+ SetEvent(ev); -+ PULSE_DestroyRingMessage(&wwi->msgRing); -+ widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); -+ wwi->lpPlayPtr = wwi->lpQueuePtr = NULL; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_disconnect(wwi->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ TRACE("Thread exiting because of failure.\n"); -+ ExitThread(1); -+ } -+ wwi->state = WINE_WS_CLOSED; -+ SetEvent(ev); -+ ExitThread(0); -+ /* shouldn't go here */ -+ default: -+ FIXME("unknown message %d\n", msg); -+ break; -+ } /* switch(msg) */ -+ } /* while(PULSE_RetrieveRingMessage()) */ -+ } /* for (;;) */ -+} -+ -+/************************************************************************** -+ * widOpen [internal] -+ */ -+static DWORD widOpen(WORD wDevID, LPDWORD lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { -+ WINE_WAVEDEV *wdi; -+ WINE_WAVEINST *wwi = NULL; -+ DWORD ret = MMSYSERR_NOERROR; -+ -+ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); -+ if (lpDesc == NULL) { -+ WARN("Invalid Parameter !\n"); -+ return MMSYSERR_INVALPARAM; -+ } -+ -+ if (wDevID >= PULSE_WidNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WidNumDevs); -+ return MMSYSERR_BADDEVICEID; -+ } -+ wdi = &WInDev[wDevID]; -+ -+ wwi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_WAVEINST)); -+ if (!wwi) return MMSYSERR_NOMEM; -+ *lpdwUser = (DWORD)wwi; -+ -+ /* check to see if format is supported and make pa_sample_spec struct */ -+ if (!PULSE_SetupFormat(lpDesc->lpFormat, &wwi->sample_spec)) { -+ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ ret = WAVERR_BADFORMAT; -+ goto exit; -+ } -+ -+ if (TRACE_ON(wave)) { -+ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; -+ pa_sample_spec_snprint(t, sizeof(t), &wwi->sample_spec); -+ TRACE("Sample spec '%s'\n", t); -+ } -+ -+ if (dwFlags & WAVE_FORMAT_QUERY) { -+ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ ret = MMSYSERR_NOERROR; -+ goto exit; -+ } -+ -+ wwi->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); -+ wwi->waveDesc = *lpDesc; -+ PULSE_InitRingMessage(&wwi->msgRing); -+ -+ wwi->stream = pa_stream_new(PULSE_context, "WaveIn", &wwi->sample_spec, NULL); -+ if (!wwi->stream) { -+ ret = WAVERR_BADFORMAT; -+ goto exit; -+ } -+ -+ pa_stream_set_state_callback(wwi->stream, PULSE_StreamStateCallback, wwi); -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ TRACE("Asking to open %s for recording.\n", wdi->device_name); -+ pa_stream_connect_record(wwi->stream, wdi->device_name, NULL, -+ PA_STREAM_START_CORKED | -+ PA_STREAM_AUTO_TIMING_UPDATE | -+ PA_STREAM_INTERPOLATE_TIMING); -+ -+ for (;;) { -+ pa_context_state_t cstate = pa_context_get_state(PULSE_context); -+ pa_stream_state_t sstate = pa_stream_get_state(wwi->stream); -+ -+ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || -+ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { -+ ERR("Failed to connect context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); -+ ret = MMSYSERR_NODRIVER; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ goto exit; -+ } -+ -+ if (sstate == PA_STREAM_READY) -+ break; -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ TRACE("(%p)->stream connected for recording.\n", wwi); -+ -+ PULSE_WaitForOperation(pa_stream_update_timing_info(wwi->stream, PULSE_StreamSuccessCallback, wwi)); -+ -+ wwi->timing_info = pa_stream_get_timing_info(wwi->stream); -+ assert(wwi->timing_info); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ wwi->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); -+ wwi->hThread = CreateThread(NULL, 0, widRecorder, (LPVOID)wwi, 0, &(wwi->dwThreadID)); -+ if (wwi->hThread) -+ SetThreadPriority(wwi->hThread, THREAD_PRIORITY_TIME_CRITICAL); -+ else { -+ ERR("Thread creation for the widRecorder failed!\n"); -+ ret = MMSYSERR_NOMEM; -+ goto exit; -+ } -+ WaitForSingleObject(wwi->hStartUpEvent, INFINITE); -+ CloseHandle(wwi->hStartUpEvent); -+ wwi->hStartUpEvent = INVALID_HANDLE_VALUE; -+ -+ return widNotifyClient(wwi, WIM_OPEN, 0L, 0L); -+ -+exit: -+ if (!wwi) -+ return ret; -+ -+ if (wwi->hStartUpEvent != INVALID_HANDLE_VALUE) -+ CloseHandle(wwi->hStartUpEvent); -+ -+ if (wwi->msgRing.ring_buffer_size > 0) -+ PULSE_DestroyRingMessage(&wwi->msgRing); -+ -+ if (wwi->stream) { -+ if (pa_stream_get_state(wwi->stream) == PA_STREAM_READY) -+ pa_stream_disconnect(wwi->stream); -+ pa_stream_unref(wwi->stream); -+ } -+ HeapFree(GetProcessHeap(), 0, wwi); -+ -+ return ret; -+} -+/************************************************************************** -+ * widClose [internal] -+ */ -+static DWORD widClose(WORD wDevID, WINE_WAVEINST *wwi) { -+ DWORD ret; -+ -+ TRACE("(%u, %p);\n", wDevID, wwi); -+ if (wDevID >= PULSE_WidNumDevs) { -+ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } else if (!wwi) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (wwi->state != WINE_WS_FAILED) { -+ if (wwi->lpQueuePtr) { -+ WARN("buffers recording recording !\n"); -+ return WAVERR_STILLPLAYING; -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (pa_stream_get_state(wwi->stream) == PA_STREAM_READY) -+ pa_stream_drop(wwi->stream); -+ pa_stream_disconnect(wwi->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ if (wwi->hThread != INVALID_HANDLE_VALUE) -+ PULSE_AddRingMessage(&wwi->msgRing, WINE_WM_CLOSING, 0, TRUE); -+ -+ PULSE_DestroyRingMessage(&wwi->msgRing); -+ } -+ ret = widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); -+ -+ pa_stream_unref(wwi->stream); -+ TRACE("Deallocating record instance.\n"); -+ HeapFree(GetProcessHeap(), 0, wwi); -+ return ret; -+} -+ -+/************************************************************************** -+ * widAddBuffer [internal] -+ * -+ */ -+static DWORD widAddBuffer(WINE_WAVEINST* wwi, LPWAVEHDR lpWaveHdr, DWORD dwSize) { -+ TRACE("(%p, %p, %08X);\n", wwi, lpWaveHdr, dwSize); -+ -+ if (!wwi || wwi->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) -+ return WAVERR_UNPREPARED; -+ -+ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) -+ return WAVERR_STILLPLAYING; -+ -+ lpWaveHdr->dwFlags &= ~WHDR_DONE; -+ lpWaveHdr->dwFlags |= WHDR_INQUEUE; -+ lpWaveHdr->dwBytesRecorded = 0; -+ lpWaveHdr->lpNext = 0; -+ -+ PULSE_AddRingMessage(&wwi->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); -+ -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widRecorderMessage [internal] -+ */ -+static DWORD widRecorderMessage(WINE_WAVEINST *wwi, enum win_wm_message message) { -+ if (!wwi || wwi->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwi->msgRing, message, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widGetPosition [internal] -+ */ -+static DWORD widGetPosition(WINE_WAVEINST *wwi, LPMMTIME lpTime, DWORD uSize) { -+ DWORD bytes, time; -+ if (!wwi || wwi->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpTime == NULL) return MMSYSERR_INVALPARAM; -+ -+ bytes = wwi->timing_info->read_index - wwi->last_reset; -+ time = pa_bytes_to_usec(bytes, &wwi->sample_spec) / 1000; -+ -+ switch (lpTime->wType) { -+ case TIME_SAMPLES: -+ lpTime->u.sample = bytes / pa_frame_size(&wwi->sample_spec); -+ TRACE("TIME_SAMPLES=%u\n", lpTime->u.sample); -+ break; -+ case TIME_MS: -+ lpTime->u.ms = time; -+ TRACE("TIME_MS=%u\n", lpTime->u.ms); -+ break; -+ case TIME_SMPTE: -+ lpTime->u.smpte.fps = 30; -+ lpTime->u.smpte.sec = time/1000; -+ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; -+ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; -+ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; -+ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; -+ lpTime->u.smpte.frame = time / lpTime->u.smpte.fps * 1000; -+ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", -+ lpTime->u.smpte.hour, lpTime->u.smpte.min, -+ lpTime->u.smpte.sec, lpTime->u.smpte.frame); -+ break; -+ default: -+ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); -+ lpTime->wType = TIME_BYTES; -+ /* fall through */ -+ case TIME_BYTES: -+ lpTime->u.cb = bytes; -+ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); -+ break; -+ } -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widGetDevCaps [internal] -+ */ -+static DWORD widGetDevCaps(DWORD wDevID, LPWAVEINCAPSW lpCaps, DWORD dwSize) { -+ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); -+ -+ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; -+ -+ if (wDevID >= PULSE_WidNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WidNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ memcpy(lpCaps, &(WInDev[wDevID].caps.in), min(dwSize, sizeof(*lpCaps))); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widGetNumDevs [internal] -+ * Context-sanity check here, as if we respond with 0, WINE will move on -+ * to the next wavein driver. -+ */ -+static DWORD widGetNumDevs() { -+ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) -+ return 0; -+ -+ return PULSE_WidNumDevs; -+} -+ -+/************************************************************************** -+ * widDevInterfaceSize [internal] -+ */ -+static DWORD widDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { -+ TRACE("(%u, %p)\n", wDevID, dwParam1); -+ -+ *dwParam1 = MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, -+ NULL, 0 ) * sizeof(WCHAR); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widDevInterface [internal] -+ */ -+static DWORD widDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { -+ if (dwParam2 >= MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, -+ NULL, 0 ) * sizeof(WCHAR)) -+ { -+ MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, -+ dwParam1, dwParam2 / sizeof(WCHAR)); -+ return MMSYSERR_NOERROR; -+ } -+ return MMSYSERR_INVALPARAM; -+} -+ -+/************************************************************************** -+ * widDsDesc [internal] -+ */ -+DWORD widDsDesc(UINT wDevID, PDSDRIVERDESC desc) -+{ -+ *desc = WInDev[wDevID].ds_desc; -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_widMessage(UINT wDevID, UINT wMsg, DWORD dwUser, -+ DWORD dwParam1, DWORD dwParam2) { -+ -+ switch (wMsg) { -+ case DRVM_INIT: -+ case DRVM_EXIT: -+ case DRVM_ENABLE: -+ case DRVM_DISABLE: -+ /* FIXME: Pretend this is supported */ -+ return 0; -+ case WIDM_OPEN: return widOpen (wDevID, (LPDWORD)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); -+ case WIDM_CLOSE: return widClose (wDevID, (WINE_WAVEINST*)dwUser); -+ case WIDM_ADDBUFFER: return widAddBuffer ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); -+ case WIDM_PREPARE: return MMSYSERR_NOTSUPPORTED; -+ case WIDM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; -+ case WIDM_GETDEVCAPS: return widGetDevCaps (wDevID, (LPWAVEINCAPSW)dwParam1, dwParam2); -+ case WIDM_GETNUMDEVS: return widGetNumDevs (); -+ case WIDM_GETPOS: return widGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); -+ case WIDM_RESET: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_RESETTING); -+ case WIDM_START: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_STARTING); -+ case WIDM_STOP: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_STOPPING); -+ case DRV_QUERYDEVICEINTERFACESIZE: return widDevInterfaceSize (wDevID, (LPDWORD)dwParam1); -+ case DRV_QUERYDEVICEINTERFACE: return widDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); -+ case DRV_QUERYDSOUNDIFACE: return MMSYSERR_NOTSUPPORTED; /* Use emulation, as there is no advantage */ -+ case DRV_QUERYDSOUNDDESC: return widDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); -+ default: -+ FIXME("unknown message %d!\n", wMsg); -+ } -+ return MMSYSERR_NOTSUPPORTED; -+} -+ -+#else /* HAVE_PULSEAUDIO */ -+ -+/************************************************************************** -+ * widMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_widMessage(WORD wDevID, WORD wMsg, DWORD dwUser, -+ DWORD dwParam1, DWORD dwParam2) { -+// FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); -+ return MMSYSERR_NOTENABLED; -+} -+ -+#endif /* HAVE_PULSEAUDIO */ -diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c -new file mode 100644 -index 0000000..b531ee2 ---- /dev/null -+++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1176 @@ -+/* -+ * Wine Driver for PulseAudio - WaveOut Functionality -+ * http://pulseaudio.org/ -+ * -+ * Copyright 2009 Arthur Taylor -+ * -+ * Contains code from other wine multimedia drivers. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wingdi.h" -+#include "winuser.h" -+#include "winnls.h" -+#include "winerror.h" -+#include "mmddk.h" -+#include "mmreg.h" -+ -+#include -+ -+#include "wine/debug.h" -+ -+WINE_DEFAULT_DEBUG_CHANNEL(wave); -+ -+#if HAVE_PULSEAUDIO -+ -+/* state diagram for waveOut writing: -+ * -+ * +---------+-------------+---------------+---------------------------------+ -+ * | state | function | event | new state | -+ * +---------+-------------+---------------+---------------------------------+ -+ * | | open() | | STOPPED | -+ * | PAUSED | write() | | PAUSED | -+ * | STOPPED | write() | | PLAYING | -+ * | PLAYING | write() | HEADER | PLAYING | -+ * | (other) | write() | | | -+ * | (any) | pause() | PAUSING | PAUSED | -+ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | -+ * | PAUSED | reset() | RESETTING | PAUSED | -+ * | (other) | reset() | RESETTING | STOPPED | -+ * | (any) | close() | CLOSING | CLOSED | -+ * +---------+-------------+---------------+---------------------------------+ -+ */ -+ -+/* -+ * - It is currently unknown if pausing in a loop works the same as expected. -+ */ -+ -+/*======================================================================* -+ * WAVE OUT specific PulseAudio Callbacks * -+ *======================================================================*/ -+ -+/************************************************************************** -+ * WAVEOUT_StreamStartedCallback [internal] -+ * -+ * Called by the pulse mainloop whenever stream playback resumes after an -+ * underflow or an initial start. Requires libpulse >= 0.9.11 -+ */ -+#if PA_API_VERSION >= 12 -+static void WAVEOUT_StreamStartedCallback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ TRACE("Audio flowing.\n"); -+ -+ if (wwo->buffer_attr.tlength == 0) -+ wwo->buffer_attr.tlength = (uint32_t) -1; -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size) { -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_STARTING, 0, FALSE); -+ } -+} -+#endif -+ -+/************************************************************************** -+ * WAVEOUT_StreamRequestCallback -+ * -+ * Called by the pulse mainloop whenever it wants audio data. -+ */ -+static void WAVEOUT_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata) { -+ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; -+ -+ TRACE("Asking to be fed %u bytes\n", nbytes); -+ -+ /* Make sure that the player/recorder is running */ -+ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { -+ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); -+ } -+} -+ -+/************************************************************************** -+ * WAVEOUT_StreamTimingInfoUpdateCallback [internal] -+ * -+ * Called by the pulse mainloop whenever the timing info gets updated, we -+ * use this to send the started signal */ -+static void WAVEOUT_StreamTimingInfoUpdateCallback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ if (!wwo->is_releasing && wwo->timing_info && wwo->timing_info->playing) { -+ TRACE("Audio flowing.\n"); -+ -+ if (wwo->buffer_attr.tlength == 0) -+ wwo->buffer_attr.tlength = (uint32_t) -1; -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_STARTING, 0, FALSE); -+ } -+} -+ -+/************************************************************************** -+ * WAVEOUT_SinkInputInfoCallback [internal] -+ * -+ * Called by the pulse thread. Used for wodGetVolume. -+ */ -+static void WAVEOUT_SinkInputInfoCallback(pa_context *c, const pa_sink_input_info *i, int eol, void *userdata) { -+ WINE_WAVEINST* wwo = (WINE_WAVEINST*)userdata; -+ if (!eol && i) { -+ for (wwo->volume.channels = 0; wwo->volume.channels != i->volume.channels; wwo->volume.channels++) -+ wwo->volume.values[wwo->volume.channels] = i->volume.values[wwo->volume.channels]; -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ } -+} -+ -+/*======================================================================* -+ * "Low level" WAVE OUT implementation * -+ *======================================================================*/ -+ -+/************************************************************************** -+ * 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); -+ -+ switch (wMsg) { -+ case WOM_OPEN: -+ case WOM_CLOSE: -+ case WOM_DONE: -+ if (wwo->wFlags != DCB_NULL && -+ !DriverCallback(wwo->waveDesc.dwCallback, wwo->wFlags, (HDRVR)wwo->waveDesc.hWave, -+ wMsg, wwo->waveDesc.dwInstance, dwParam1, dwParam2)) { -+ WARN("can't notify client !\n"); -+ return MMSYSERR_ERROR; -+ } -+ break; -+ default: -+ FIXME("Unknown callback message %u\n", wMsg); -+ return MMSYSERR_INVALPARAM; -+ } -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodPlayer_BeginWaveHdr [internal] -+ * -+ * Makes the specified lpWaveHdr the currently playing wave header. -+ * If the specified wave header is a begin loop and we're not already in -+ * a loop, setup the loop. -+ */ -+static void wodPlayer_BeginWaveHdr(WINE_WAVEINST* wwo, LPWAVEHDR lpWaveHdr) { -+ wwo->lpPlayPtr = lpWaveHdr; -+ -+ if (!lpWaveHdr) return; -+ -+ if (lpWaveHdr->dwFlags & WHDR_BEGINLOOP) { -+ if (wwo->lpLoopPtr) { -+ WARN("Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr); -+ } else { -+ TRACE("Starting loop (%dx) with %p\n", lpWaveHdr->dwLoops, lpWaveHdr); -+ wwo->lpLoopPtr = lpWaveHdr; -+ /* Windows does not touch WAVEHDR.dwLoops, -+ * so we need to make an internal copy */ -+ wwo->dwLoops = lpWaveHdr->dwLoops; -+ } -+ } -+ wwo->dwPartialOffset = 0; -+} -+ -+/************************************************************************** -+ * wodPlayer_PlayPtrNext [internal] -+ * -+ * Advance the play pointer to the next waveheader, looping if required. -+ */ -+static LPWAVEHDR wodPlayer_PlayPtrNext(WINE_WAVEINST* wwo) { -+ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; -+ -+ wwo->dwPartialOffset = 0; -+ if ((lpWaveHdr->dwFlags & WHDR_ENDLOOP) && wwo->lpLoopPtr) { -+ /* We're at the end of a loop, loop if required */ -+ if (--wwo->dwLoops > 0) { -+ wwo->lpPlayPtr = wwo->lpLoopPtr; -+ } else { -+ /* Handle overlapping loops correctly */ -+ if (wwo->lpLoopPtr != lpWaveHdr && (lpWaveHdr->dwFlags & WHDR_BEGINLOOP)) { -+ FIXME("Correctly handled case ? (ending loop buffer also starts a new loop)\n"); -+ /* shall we consider the END flag for the closing loop or for -+ * the opening one or for both ??? -+ * code assumes for closing loop only -+ */ -+ } else { -+ lpWaveHdr = lpWaveHdr->lpNext; -+ } -+ wwo->lpLoopPtr = NULL; -+ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr); -+ } -+ } else { -+ /* We're not in a loop. Advance to the next wave header */ -+ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr = lpWaveHdr->lpNext); -+ } -+ -+ return lpWaveHdr; -+} -+ -+/************************************************************************** -+ * wodPlayer_CheckReleasing [internal] -+ * -+ * Check to make sure that playback has not stalled -+ */ -+static void wodPlayer_CheckReleasing(WINE_WAVEINST *wwo) { -+ LPWAVEHDR lpWaveHdr = wwo->lpQueuePtr; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (!wwo->timing_info->playing && !wwo->is_releasing && lpWaveHdr && !wwo->lpPlayPtr && wwo->state == WINE_WS_PLAYING) { -+ -+ /* Try and adjust the buffer attributes so there is less latency. -+ * Because of bugs this call does not work on older servers. Once -+ * new version of pulseaudio become ubiquitous we will drop support for -+ * versions before 0.9.15 because they have too many bugs.*/ -+ if (wwo->buffer_attr.tlength == 0 && -+ pa_context_get_server_protocol_version(PULSE_context) >= 15) { -+ wwo->buffer_attr.tlength = wwo->timing_info->write_index; -+ wwo->buffer_attr.prebuf = (uint32_t) -1; -+ wwo->buffer_attr.minreq = (uint32_t) -1; -+ wwo->buffer_attr.maxlength = (uint32_t) -1; -+ WARN("Asking for new buffer tlength of %ums (%u bytes)\n", (unsigned int)(pa_bytes_to_usec(wwo->buffer_attr.tlength, &wwo->sample_spec)/1000), wwo->buffer_attr.tlength); -+ pa_stream_set_buffer_attr(wwo->stream, &wwo->buffer_attr, PULSE_StreamSuccessCallback, wwo); -+ } else { -+ /* Fake playback start earlier, introducing unknown latency */ -+ pa_gettimeofday(&wwo->started_releasing); -+ wwo->is_releasing = TRUE; -+ wwo->releasing_offset = wwo->lpQueuePtr->reserved; -+ WARN("Starting to release early.\n"); -+ } -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+} -+ -+/************************************************************************** -+ * wodPlayer_NotifyCompletions [internal] -+ * -+ * Notifies and remove from queue all wavehdrs which have been played to -+ * the speaker based on a reference time of (theoretical) playback start. If -+ * force is true, we notify all wavehdrs and remove them all from the queue -+ * even if they are unplayed or part of a loop. We return the time to wait -+ * until the next wavehdr needs to be freed, or INFINITE if there are no more -+ * wavehdrs. We use timevals rather than the stream position data that pulse -+ * gives us as realeasing needs to be constant and smooth for good application -+ * behaviour. -+ */ -+static DWORD wodPlayer_NotifyCompletions(WINE_WAVEINST* wwo, BOOL force) { -+ LPWAVEHDR lpWaveHdr = wwo->lpQueuePtr; -+ pa_usec_t time; -+ pa_usec_t wait; -+ -+ time = pa_bytes_to_usec(wwo->releasing_offset, &wwo->sample_spec); -+ if (wwo->is_releasing) -+ time += pa_timeval_age(&wwo->started_releasing); -+ -+ while (lpWaveHdr) { -+ if (!force) { -+ /* Start from lpQueuePtr and keep notifying until: -+ * - we hit an unwritten wavehdr -+ * - we hit the beginning of a running loop -+ * - we hit a wavehdr which hasn't finished playing -+ */ -+ if (lpWaveHdr == wwo->lpPlayPtr) { TRACE("play %p\n", lpWaveHdr); return INFINITE; } -+ if (lpWaveHdr == wwo->lpLoopPtr) { TRACE("loop %p\n", lpWaveHdr); return INFINITE; } -+ -+ /* See if this data has been played, and if not, return when it will have been */ -+ wait = pa_bytes_to_usec(lpWaveHdr->reserved + lpWaveHdr->dwBufferLength, &wwo->sample_spec); -+ if (wait >= time) { -+ wait = ((wait - time) + 999) / 1000; -+ return wait ?: 1; -+ } -+ } -+ -+ /* return the wavehdr */ -+ wwo->lpQueuePtr = lpWaveHdr->lpNext; -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ -+ wodPlayer_NotifyClient(wwo, WOM_DONE, (DWORD)lpWaveHdr, 0); -+ lpWaveHdr = wwo->lpQueuePtr; -+ } -+ /* No more wavehdrs */ -+ TRACE("Empty queue\n"); -+ return INFINITE; -+} -+ -+/************************************************************************** -+ * wodPlayer_WriteMax [internal] -+ * -+ * 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) { -+ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; -+ size_t toWrite = min(lpWaveHdr->dwBufferLength - wwo->dwPartialOffset, *space); -+ -+ if (toWrite > 0 && pa_stream_write(wwo->stream, lpWaveHdr->lpData + wwo->dwPartialOffset, toWrite, NULL, 0, PA_SEEK_RELATIVE) >= 0) -+ TRACE("Writing wavehdr %p.%u[%u]\n", lpWaveHdr, wwo->dwPartialOffset, lpWaveHdr->dwBufferLength); -+ else -+ return 0; -+ -+ /* Check to see if we wrote all of the wavehdr */ -+ if ((wwo->dwPartialOffset += toWrite) >= lpWaveHdr->dwBufferLength) -+ wodPlayer_PlayPtrNext(wwo); -+ -+ *space -= toWrite; -+ -+ return toWrite; -+} -+ -+/************************************************************************** -+ * wodPlayer_Feed [internal] -+ * -+ * Feed as much sound data as we can into pulse using wodPlayer_WriteMax. -+ * size_t space _must_ have come from either pa_stream_writable_size() or -+ * the value from a stream write callback, as if it isn't you run the risk -+ * of a buffer overflow in which audio data will be lost. -+ */ -+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 || -+ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || -+ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) -+ return; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ /* Feed from a partial wavehdr */ -+ if (wwo->lpPlayPtr && wwo->dwPartialOffset != 0) -+ wodPlayer_WriteMax(wwo, &space); -+ -+ /* Feed wavehdrs until we run out of wavehdrs or buffer space */ -+ 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); -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+} -+ -+/************************************************************************** -+ * wodPlayer_Reset [internal] -+ * -+ * wodPlayer helper. Resets current output stream. -+ */ -+static void wodPlayer_Reset(WINE_WAVEINST* wwo) { -+ enum win_wm_message msg; -+ DWORD param; -+ HANDLE ev; -+ -+ TRACE("(%p)\n", wwo); -+ -+ /* remove any buffer */ -+ wodPlayer_NotifyCompletions(wwo, TRUE); -+ -+ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; -+ if (wwo->state != WINE_WS_PAUSED) -+ wwo->state = WINE_WS_STOPPED; -+ wwo->dwPartialOffset = 0; -+ -+ if (!wwo->stream || -+ !PULSE_context || -+ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || -+ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) { -+ return; -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ -+ /* flush the output buffer of written data*/ -+ PULSE_WaitForOperation(pa_stream_flush(wwo->stream, PULSE_StreamSuccessCallback, NULL)); -+ -+ /* Reset the written byte count as some data may have been flushed */ -+ if (wwo->timing_info->write_index_corrupt) -+ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ wwo->releasing_offset = wwo->last_reset = wwo->timing_info->write_index; -+ if (wwo->is_releasing) -+ pa_gettimeofday(&wwo->started_releasing); -+ -+ /* return all pending headers in queue */ -+ EnterCriticalSection(&wwo->msgRing.msg_crst); -+ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { -+ if (msg != WINE_WM_HEADER) { -+ SetEvent(ev); -+ continue; -+ } -+ ((LPWAVEHDR)param)->dwFlags &= ~WHDR_INQUEUE; -+ ((LPWAVEHDR)param)->dwFlags |= WHDR_DONE; -+ wodPlayer_NotifyClient(wwo, WOM_DONE, param, 0); -+ } -+ PULSE_ResetRingMessage(&wwo->msgRing); -+ LeaveCriticalSection(&wwo->msgRing.msg_crst); -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+} -+ -+/************************************************************************** -+ * wodPlayer_Underrun [internal] -+ * -+ * wodPlayer helper. Deal with a stream underrun. -+ */ -+static void wodPlayer_Underrun(WINE_WAVEINST* wwo) { -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ -+ /* Ask for a timing update */ -+ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ -+ /* See if we recovered while the message was waiting in the queue */ -+ if (wwo->timing_info->playing) { -+ TRACE("False alarm\n"); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return; -+ } -+ -+ if (wwo->lpPlayPtr) { -+ size_t space; -+ -+ TRACE("There is queued data. Trying to recover.\n"); -+ -+ /* Ask for a timing update */ -+ if (wwo->timing_info->write_index_corrupt) -+ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ space = pa_stream_writable_size(wwo->stream); -+ wodPlayer_Feed(wwo, space); -+ } -+ WARN("Stream underrun!\n"); -+ wwo->is_releasing = FALSE; -+ wwo->releasing_offset = wwo->timing_info->write_index; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+} -+ -+ -+/************************************************************************** -+ * wodPlayer_ProcessMessages [internal] -+ */ -+static DWORD wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { -+ LPWAVEHDR lpWaveHdr; -+ enum win_wm_message msg; -+ DWORD param, msgcount = 0; -+ 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: -+ wwo->state = WINE_WS_PAUSED; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwo->stream, 1, PULSE_StreamSuccessCallback, wwo)); -+ /* save how far we are, as releasing will restart from here */ -+ if (wwo->is_releasing) -+ wwo->releasing_offset = wwo->timing_info->write_index; -+ wwo->is_releasing = FALSE; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_RESTARTING: -+ if (wwo->state == WINE_WS_PAUSED) { -+ 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 */ -+ PULSE_WaitForOperation(pa_stream_trigger(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_HEADER: -+ lpWaveHdr = (LPWAVEHDR)param; -+ /* insert buffer at the end of queue */ -+ { -+ LPWAVEHDR* wh; -+ for (wh = &(wwo->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); -+ *wh = lpWaveHdr; -+ } -+ -+ if (!wwo->lpPlayPtr) -+ wodPlayer_BeginWaveHdr(wwo,lpWaveHdr); -+ if (wwo->state == WINE_WS_STOPPED) -+ wwo->state = WINE_WS_PLAYING; -+ -+ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_RESETTING: -+ wodPlayer_Reset(wwo); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_BREAKLOOP: -+ if (wwo->state == WINE_WS_PLAYING && wwo->lpLoopPtr != NULL) -+ /* ensure exit at end of current loop */ -+ wwo->dwLoops = 1; -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_FEED: /* Sent by the pulse thread */ -+ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_XRUN: /* Sent by the pulse thread */ -+ if ((DWORD)param == 1) { -+ ERR("Buffer overflow!\n"); -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_drain(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ wwo->is_releasing = FALSE; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } else -+ wodPlayer_Underrun(wwo); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_STARTING: /* Sent by the pulse thread */ -+ /* Start releasing wavehdrs if we haven't already */ -+ if (!wwo->is_releasing) { -+ wwo->is_releasing = TRUE; -+ pa_gettimeofday(&wwo->started_releasing); -+ } -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_CLOSING: /* If param = 1, close because of a failure */ -+ wwo->hThread = NULL; -+ if ((DWORD)param == 1) { -+ /* If we are here, the stream has failed */ -+ wwo->state = WINE_WS_FAILED; -+ SetEvent(ev); -+ PULSE_DestroyRingMessage(&wwo->msgRing); -+ wodPlayer_NotifyCompletions(wwo, TRUE); -+ wodPlayer_NotifyClient(wwo, WOM_CLOSE, 0L, 0L); -+ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_disconnect(wwo->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ TRACE("Thread exiting because of failure.\n"); -+ ExitThread(1); -+ /* Stream instance will get de-refferenced upon close */ -+ } -+ wwo->state = WINE_WS_CLOSED; -+ /* sanity check: this should not happen since the device must have been reset before */ -+ if (wwo->lpQueuePtr || wwo->lpPlayPtr) ERR("out of sync\n"); -+ SetEvent(ev); -+ TRACE("Thread exiting.\n"); -+ ExitThread(0); -+ /* shouldn't go here */ -+ -+ default: -+ FIXME("unknown message %d\n", msg); -+ break; -+ } -+ } -+ -+ return msgcount; -+} -+ -+/************************************************************************** -+ * wodPlayer [internal] -+ * -+ * The thread which is responsible for returning WaveHdrs via DriverCallback, -+ * the writing of queued WaveHdrs, and all pause / reset stream management. -+ */ -+static DWORD CALLBACK wodPlayer(LPVOID lpParam) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)lpParam; -+ DWORD dwSleepTime = INFINITE; -+ -+ wwo->state = WINE_WS_STOPPED; -+ SetEvent(wwo->hStartUpEvent); -+ -+/* Wait for the shortest time before an action is required. If there are no -+ * pending actions, wait forever for a command. */ -+ for (;;) { -+ 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) -+ wodPlayer_CheckReleasing(wwo); -+ -+/* If there is audio playing, return headers and get next timeout */ -+ if (wwo->state == WINE_WS_PLAYING) -+ dwSleepTime = wodPlayer_NotifyCompletions(wwo, FALSE); -+ else -+ dwSleepTime = INFINITE; -+ } -+} -+ -+/************************************************************************** -+ * wodOpen [internal] -+ */ -+static DWORD wodOpen(WORD wDevID, LPDWORD lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { -+ WINE_WAVEDEV *wdo; -+ WINE_WAVEINST *wwo = NULL; -+ DWORD ret = MMSYSERR_NOERROR; -+ pa_stream_flags_t stream_flags; -+ -+ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); -+ if (lpDesc == NULL) { -+ WARN("Invalid Parameter !\n"); -+ return MMSYSERR_INVALPARAM; -+ } -+ -+ if (wDevID >= PULSE_WodNumDevs) { -+ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_BADDEVICEID; -+ } -+ wdo = &WOutDev[wDevID]; -+ -+ wwo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_WAVEINST)); -+ if (!wwo) return MMSYSERR_NOMEM; -+ *lpdwUser = (DWORD)wwo; -+ -+ /* check to see if format is supported and make pa_sample_spec struct */ -+ if (!PULSE_SetupFormat(lpDesc->lpFormat, &wwo->sample_spec)) { -+ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ ret = WAVERR_BADFORMAT; -+ goto exit; -+ } -+ -+ if (TRACE_ON(wave)) { -+ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; -+ pa_sample_spec_snprint(t, sizeof(t), &wwo->sample_spec); -+ TRACE("Sample spec '%s'\n", t); -+ } -+ -+ if (dwFlags & WAVE_FORMAT_QUERY) { -+ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ ret = MMSYSERR_NOERROR; -+ goto exit; -+ } -+ -+ wwo->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); -+ wwo->waveDesc = *lpDesc; -+ PULSE_InitRingMessage(&wwo->msgRing); -+ -+ wwo->stream = pa_stream_new(PULSE_context, "WaveOut", &wwo->sample_spec, NULL); -+ /* If server doesn't support sample_spec, we will error out here */ -+ if (!wwo->stream) { -+ ret = WAVERR_BADFORMAT; -+ goto exit; -+ } -+ -+ pa_stream_set_write_callback (wwo->stream, WAVEOUT_StreamRequestCallback, wwo); -+ pa_stream_set_state_callback (wwo->stream, PULSE_StreamStateCallback, wwo); -+ pa_stream_set_underflow_callback (wwo->stream, PULSE_StreamUnderflowCallback, wwo); -+ pa_stream_set_overflow_callback (wwo->stream, PULSE_StreamOverflowCallback, wwo); -+ pa_stream_set_moved_callback (wwo->stream, PULSE_StreamMovedCallback, wwo); -+ pa_stream_set_suspended_callback (wwo->stream, PULSE_StreamSuspendedCallback, wwo); -+ -+ stream_flags = PA_STREAM_AUTO_TIMING_UPDATE; -+ -+#if PA_API_VERSION >= 12 -+ if (pa_context_get_server_protocol_version(PULSE_context) >= 15) { -+ pa_stream_set_started_callback(wwo->stream, WAVEOUT_StreamStartedCallback, wwo); -+ stream_flags |= PA_STREAM_ADJUST_LATENCY; -+ } else -+#endif -+ { -+ pa_stream_set_latency_update_callback(wwo->stream, WAVEOUT_StreamTimingInfoUpdateCallback, wwo); -+ } -+ -+ TRACE("Connecting stream for playback on %s.\n", wdo->device_name); -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_connect_playback(wwo->stream, wdo->device_name, NULL, stream_flags, NULL, NULL); -+ -+ for (;;) { -+ pa_context_state_t cstate = pa_context_get_state(PULSE_context); -+ pa_stream_state_t sstate = pa_stream_get_state(wwo->stream); -+ -+ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || -+ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { -+ ERR("Failed to connect stream context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ ret = MMSYSERR_NODRIVER; -+ goto exit; -+ } -+ -+ if (sstate == PA_STREAM_READY) -+ break; -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ TRACE("(%p)->stream connected for playback.\n", wwo); -+ -+ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ -+ wwo->timing_info = pa_stream_get_timing_info(wwo->stream); -+ assert(wwo->timing_info); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ wwo->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); -+ wwo->hThread = CreateThread(NULL, 0, wodPlayer, (LPVOID)wwo, 0, &(wwo->dwThreadID)); -+ if (wwo->hThread) -+ SetThreadPriority(wwo->hThread, THREAD_PRIORITY_TIME_CRITICAL); -+ else { -+ ERR("Thread creation for the wodPlayer failed!\n"); -+ ret = MMSYSERR_NOMEM; -+ goto exit; -+ } -+ WaitForSingleObject(wwo->hStartUpEvent, INFINITE); -+ CloseHandle(wwo->hStartUpEvent); -+ wwo->hStartUpEvent = INVALID_HANDLE_VALUE; -+ -+ -+ return wodPlayer_NotifyClient (wwo, WOM_OPEN, 0L, 0L); -+ -+exit: -+ if (!wwo) -+ return ret; -+ -+ if (wwo->hStartUpEvent != INVALID_HANDLE_VALUE) -+ CloseHandle(wwo->hStartUpEvent); -+ -+ if (wwo->msgRing.ring_buffer_size > 0) -+ PULSE_DestroyRingMessage(&wwo->msgRing); -+ -+ if (wwo->stream) { -+ if (pa_stream_get_state(wwo->stream) == PA_STREAM_READY) -+ pa_stream_disconnect(wwo->stream); -+ pa_stream_unref(wwo->stream); -+ wwo->stream = NULL; -+ } -+ HeapFree(GetProcessHeap(), 0, wwo); -+ -+ return ret; -+} -+ -+/************************************************************************** -+ * wodClose [internal] -+ */ -+static DWORD wodClose(WINE_WAVEINST *wwo) { -+ DWORD ret; -+ -+ TRACE("(%p);\n", wwo); -+ if (!wwo) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (wwo->state != WINE_WS_FAILED) { -+ if (wwo->lpQueuePtr && wwo->lpPlayPtr) { -+ WARN("buffers still playing !\n"); -+ return WAVERR_STILLPLAYING; -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_drain(wwo->stream, PULSE_StreamSuccessCallback, NULL)); -+ pa_stream_disconnect(wwo->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_CLOSING, 0, TRUE); -+ -+ PULSE_DestroyRingMessage(&wwo->msgRing); -+ } -+ -+ if (wwo->stream) -+ pa_stream_unref(wwo->stream); -+ ret = wodPlayer_NotifyClient(wwo, WOM_CLOSE, 0L, 0L); -+ -+ HeapFree(GetProcessHeap(), 0, wwo); -+ -+ return ret; -+} -+ -+/************************************************************************** -+ * wodWrite [internal] -+ */ -+static DWORD wodWrite(WINE_WAVEINST *wwo, LPWAVEHDR lpWaveHdr, DWORD dwSize) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) -+ return WAVERR_UNPREPARED; -+ -+ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) -+ return WAVERR_STILLPLAYING; -+ -+ lpWaveHdr->dwFlags &= ~WHDR_DONE; -+ lpWaveHdr->dwFlags |= WHDR_INQUEUE; -+ lpWaveHdr->lpNext = 0; -+ lpWaveHdr->reserved = 0; -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodPause [internal] -+ */ -+static DWORD wodPause(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_PAUSING, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodGetPosition [internal] -+ */ -+static DWORD wodGetPosition(WINE_WAVEINST *wwo, LPMMTIME lpTime, DWORD uSize) { -+ pa_usec_t time, time_temp; -+ size_t bytes, bytes_temp; -+ -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpTime == NULL) return MMSYSERR_INVALPARAM; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (wwo->timing_info->read_index_corrupt || wwo->timing_info->write_index_corrupt) -+ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ -+ bytes = wwo->timing_info->read_index; -+ time = pa_bytes_to_usec(bytes, &wwo->sample_spec); -+ -+ if (wwo->timing_info->playing) { -+ bytes += ((pa_timeval_age(&wwo->timing_info->timestamp) / 1000) * pa_bytes_per_second(&wwo->sample_spec)) / 1000; -+ bytes_temp = (time_temp = wwo->timing_info->sink_usec + wwo->timing_info->transport_usec)/1000 * pa_bytes_per_second(&wwo->sample_spec)/1000; -+ time += pa_timeval_age(&wwo->timing_info->timestamp); -+ } else { -+ time = 0; -+ time_temp = 0; -+ bytes_temp = 0; -+ } -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ if (wwo->last_reset < bytes) { -+ time -= pa_bytes_to_usec(wwo->last_reset, &wwo->sample_spec); -+ bytes -= wwo->last_reset; -+ } -+ if (bytes > bytes_temp) -+ bytes -= bytes_temp; -+ else -+ bytes = 0; -+ -+ if (time > time_temp) -+ time -= time_temp; -+ else -+ time = 0; -+ -+ bytes -= bytes % pa_frame_size(&wwo->sample_spec); -+ time /= 1000; /* In milliseconds now */ -+ -+ switch (lpTime->wType) { -+ case TIME_SAMPLES: -+ lpTime->u.sample = bytes / pa_frame_size(&wwo->sample_spec); -+ TRACE("TIME_SAMPLES=%u\n", lpTime->u.sample); -+ break; -+ case TIME_MS: -+ lpTime->u.ms = time; -+ TRACE("TIME_MS=%u\n", lpTime->u.ms); -+ break; -+ case TIME_SMPTE: -+ lpTime->u.smpte.fps = 30; -+ lpTime->u.smpte.sec = time/1000; -+ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; -+ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; -+ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; -+ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; -+ lpTime->u.smpte.frame = time / lpTime->u.smpte.fps * 1000; -+ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", -+ lpTime->u.smpte.hour, lpTime->u.smpte.min, -+ lpTime->u.smpte.sec, lpTime->u.smpte.frame); -+ break; -+ default: -+ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); -+ lpTime->wType = TIME_BYTES; -+ /* fall through */ -+ case TIME_BYTES: -+ lpTime->u.cb = bytes; -+ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); -+ break; -+ } -+ return MMSYSERR_NOERROR; -+} -+/************************************************************************** -+ * wodBreakLoop [internal] -+ */ -+static DWORD wodBreakLoop(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_BREAKLOOP, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodGetDevCaps [internal] -+ */ -+static DWORD wodGetDevCaps(DWORD wDevID, LPWAVEOUTCAPSW lpCaps, DWORD dwSize) { -+ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); -+ -+ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; -+ -+ if (wDevID >= PULSE_WodNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ memcpy(lpCaps, &(WOutDev[wDevID].caps.out), min(dwSize, sizeof(*lpCaps))); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodGetNumDevs [internal] -+ * Context-sanity check here, as if we respond with 0, WINE will move on -+ * to the next waveout driver. -+ */ -+static DWORD wodGetNumDevs() { -+ if (!PULSE_ml || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) -+ return 0; -+ -+ return PULSE_WodNumDevs; -+} -+ -+/************************************************************************** -+ * wodGetVolume [internal] -+ */ -+static DWORD wodGetVolume(WINE_WAVEINST *wwo, LPDWORD lpdwVol) { -+ float value1, value2; -+ DWORD wleft, wright; -+ -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ TRACE("(%p, %p);\n", wwo, lpdwVol); -+ -+ if (lpdwVol == NULL) -+ return MMSYSERR_NOTENABLED; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (wwo->stream && PULSE_context && pa_context_get_state(PULSE_context) == PA_CONTEXT_READY && -+ pa_stream_get_state(wwo->stream) == PA_STREAM_READY) { -+ PULSE_WaitForOperation(pa_context_get_sink_input_info(PULSE_context, pa_stream_get_index(wwo->stream), WAVEOUT_SinkInputInfoCallback, wwo)); -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ -+ if (wwo->volume.channels == 2) { -+ value1 = pa_sw_volume_to_dB(wwo->volume.values[0]); -+ value2 = pa_sw_volume_to_dB(wwo->volume.values[1]); -+ } else { -+ value1 = pa_sw_volume_to_dB(pa_cvolume_avg(&wwo->volume)); -+ value2 = 0; -+ } -+ -+ if (value1 < -60) -+ wleft = 0; -+ else -+ -+ if (value2 < -60) -+ wright = 0; -+ else -+ wright = 0xFFFFl - ((value2 / -60)*(float)0xFFFFl); -+ -+ if (wleft > 0xFFFFl) -+ wleft = 0xFFFFl; -+ if (wright > 0xFFFFl) -+ wright = 0xFFFFl; -+ -+ *lpdwVol = (WORD)wleft + (WORD)(wright << 16); -+ -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodSetVolume [internal] -+ */ -+static DWORD wodSetVolume(WINE_WAVEINST *wwo, DWORD dwParam1) { -+ double value1, value2; -+ -+ TRACE("(%p, %08X);\n", wwo, dwParam1); -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ /* waveOut volumes are /supposed/ to be logarithmic */ -+ value1 = LOWORD(dwParam1) == 0 ? PA_DECIBEL_MININFTY : ((float)(0xFFFFl - LOWORD(dwParam1))/0xFFFFl) * -60.0; -+ value2 = HIWORD(dwParam1) == 0 ? PA_DECIBEL_MININFTY : ((float)(0xFFFFl - HIWORD(dwParam1))/0xFFFFl) * -60.0; -+ -+ if (wwo->sample_spec.channels == 2) { -+ wwo->volume.channels = 2; -+ wwo->volume.values[0] = pa_sw_volume_from_dB(value1); -+ wwo->volume.values[1] = pa_sw_volume_from_dB(value2); -+ } else { -+ if (value1 != value2) FIXME("Non-stereo streams can't pan!\n"); -+ wwo->volume.channels = wwo->sample_spec.channels; -+ pa_cvolume_set(&wwo->volume, wwo->volume.channels, pa_sw_volume_from_dB(max(value1, value2))); -+ } -+ -+ if (TRACE_ON(wave)) { -+ char s[PA_CVOLUME_SNPRINT_MAX]; -+ pa_cvolume_snprint(s, PA_CVOLUME_SNPRINT_MAX, &wwo->volume); -+ TRACE("%s\n", s); -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (!wwo->stream || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || -+ pa_stream_get_state(wwo->stream) != PA_STREAM_READY || !pa_cvolume_valid(&wwo->volume)) { -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return MMSYSERR_NOERROR; -+ } -+ -+ PULSE_WaitForOperation(pa_context_set_sink_input_volume(PULSE_context, -+ pa_stream_get_index(wwo->stream), &wwo->volume, -+ PULSE_ContextSuccessCallback, wwo)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodRestart [internal] -+ */ -+static DWORD wodRestart(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (wwo->state == WINE_WS_PAUSED) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESTARTING, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodReset [internal] -+ */ -+static DWORD wodReset(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESETTING, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodDevInterfaceSize [internal] -+ */ -+static DWORD wodDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { -+ -+ *dwParam1 = MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, NULL, 0) * sizeof(WCHAR); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodDevInterface [internal] -+ */ -+static DWORD wodDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { -+ if (dwParam2 >= MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, -+ NULL, 0 ) * sizeof(WCHAR)) -+ { -+ MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, -+ dwParam1, dwParam2 / sizeof(WCHAR)); -+ return MMSYSERR_NOERROR; -+ } -+ return MMSYSERR_INVALPARAM; -+} -+ -+/************************************************************************** -+ * wodMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD dwUser, -+ DWORD dwParam1, DWORD dwParam2) { -+/* -+ TRACE("(%u, %s, %08X, %08X, %08X);\n", -+ wDevID, PULSE_getMessage(wMsg), dwUser, dwParam1, dwParam2); -+*/ -+ switch (wMsg) { -+ case DRVM_INIT: -+ case DRVM_EXIT: -+ case DRVM_ENABLE: -+ case DRVM_DISABLE: -+ /* FIXME: Pretend this is supported */ -+ return 0; -+ case WODM_OPEN: return wodOpen (wDevID, (LPDWORD)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); -+ case WODM_CLOSE: return wodClose ((WINE_WAVEINST*)dwUser); -+ case WODM_WRITE: return wodWrite ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); -+ case WODM_PAUSE: return wodPause ((WINE_WAVEINST*)dwUser); -+ case WODM_GETPOS: return wodGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); -+ case WODM_BREAKLOOP: return wodBreakLoop ((WINE_WAVEINST*)dwUser); -+ case WODM_PREPARE: return MMSYSERR_NOTSUPPORTED; -+ case WODM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; -+ case WODM_GETDEVCAPS: return wodGetDevCaps (wDevID, (LPWAVEOUTCAPSW)dwParam1, dwParam2); -+ case WODM_GETNUMDEVS: return wodGetNumDevs (); -+ case WODM_GETPITCH: return MMSYSERR_NOTSUPPORTED; -+ case WODM_SETPITCH: return MMSYSERR_NOTSUPPORTED; -+ case WODM_GETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* support if theoretically possible */ -+ case WODM_SETPLAYBACKRATE: return MMSYSERR_NOTSUPPORTED; /* since pulseaudio 0.9.8 */ -+ case WODM_GETVOLUME: return wodGetVolume ((WINE_WAVEINST*)dwUser, (LPDWORD)dwParam1); -+ case WODM_SETVOLUME: return wodSetVolume ((WINE_WAVEINST*)dwUser, dwParam1); -+ case WODM_RESTART: return wodRestart ((WINE_WAVEINST*)dwUser); -+ case WODM_RESET: return wodReset ((WINE_WAVEINST*)dwUser); -+ case DRV_QUERYDEVICEINTERFACESIZE: return wodDevInterfaceSize (wDevID, (LPDWORD)dwParam1); -+ case DRV_QUERYDEVICEINTERFACE: return wodDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); -+ case DRV_QUERYDSOUNDIFACE: return wodDsCreate (wDevID, (PIDSDRIVER*)dwParam1); -+ case DRV_QUERYDSOUNDDESC: return wodDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); -+ default: -+ FIXME("unknown message %d!\n", wMsg); -+ } -+ return MMSYSERR_NOTSUPPORTED; -+} -+ -+#else /* !HAVE_PULSEAUDIO */ -+ -+/************************************************************************** -+ * wodMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, -+ DWORD dwParam1, DWORD dwParam2) { -+ FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, -+ dwParam1, dwParam2); -+ return MMSYSERR_NOTENABLED; -+} -+ -+#endif /* HAVE_PULSEAUDIO */ -diff --git a/dlls/winepulse.drv/winepulse.drv.spec b/dlls/winepulse.drv/winepulse.drv.spec -new file mode 100644 -index 0000000..1b49460 ---- /dev/null -+++ b/dlls/winepulse.drv/winepulse.drv.spec -@@ -0,0 +1,3 @@ -+@ stdcall -private DriverProc(long long long long long long) PULSE_DriverProc -+@ stdcall -private wodMessage(long long long long long long) PULSE_wodMessage -+@ stdcall -private widMessage(long long long long long long) PULSE_widMessage -diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h -new file mode 100644 -index 0000000..6270e04 ---- /dev/null -+++ b/dlls/winepulse.drv/winepulse.h -@@ -0,0 +1,225 @@ -+/* Definitions for PulseAudio Wine Driver -+ * -+ * Copyright 2009 Arthur Taylor -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#ifndef __WINE_CONFIG_H -+# error You must include config.h to use this header -+#endif -+ -+#if defined(HAVE_PULSEAUDIO) && !defined(__WINEPULSE_H) -+#define __WINEPULSE_H -+ -+#include "mmreg.h" -+#include "dsound.h" -+#include "dsdriver.h" -+ -+#include "ks.h" -+#include "ksmedia.h" -+#include "ksguid.h" -+ -+#include -+ -+/* state diagram for waveOut writing: -+ * -+ * +---------+-------------+---------------+---------------------------------+ -+ * | state | function | event | new state | -+ * +---------+-------------+---------------+---------------------------------+ -+ * | | open() | | STOPPED | -+ * | PAUSED | write() | | PAUSED | -+ * | STOPPED | write() | | PLAYING | -+ * | PLAYING | write() | HEADER | PLAYING | -+ * | (other) | write() | | | -+ * | (any) | pause() | PAUSING | PAUSED | -+ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | -+ * | (any) | reset() | RESETTING | STOPPED | -+ * | (any) | close() | CLOSING | CLOSED | -+ * +---------+-------------+---------------+---------------------------------+ -+ */ -+ -+/* states of the playing device */ -+#define WINE_WS_PLAYING 1 -+#define WINE_WS_PAUSED 2 -+#define WINE_WS_STOPPED 3 -+#define WINE_WS_CLOSED 4 -+#define WINE_WS_FAILED 5 -+ -+#define PULSE_ALL_FORMATS \ -+ WAVE_FORMAT_1M08 | /* Mono 11025Hz 8-bit */\ -+ WAVE_FORMAT_1M16 | /* Mono 11025Hz 16-bit */\ -+ WAVE_FORMAT_1S08 | /* Stereo 11025Hz 8-bit */\ -+ WAVE_FORMAT_1S16 | /* Stereo 11025Hz 16-bit */\ -+ WAVE_FORMAT_2M08 | /* Mono 22050Hz 8-bit */\ -+ WAVE_FORMAT_2M16 | /* Mono 22050Hz 16-bit */\ -+ WAVE_FORMAT_2S08 | /* Stereo 22050Hz 8-bit */\ -+ WAVE_FORMAT_2S16 | /* Stereo 22050Hz 16-bit */\ -+ WAVE_FORMAT_4M08 | /* Mono 44100Hz 8-bit */\ -+ WAVE_FORMAT_4M16 | /* Mono 44100Hz 16-bit */\ -+ WAVE_FORMAT_4S08 | /* Stereo 44100Hz 8-bit */\ -+ WAVE_FORMAT_4S16 | /* Stereo 44100Hz 16-bit */\ -+ WAVE_FORMAT_48M08 | /* Mono 48000Hz 8-bit */\ -+ WAVE_FORMAT_48S08 | /* Stereo 48000Hz 8-bit */\ -+ WAVE_FORMAT_48M16 | /* Mono 48000Hz 16-bit */\ -+ WAVE_FORMAT_48S16 | /* Stereo 48000Hz 16-bit */\ -+ WAVE_FORMAT_96M08 | /* Mono 96000Hz 8-bit */\ -+ WAVE_FORMAT_96S08 | /* Stereo 96000Hz 8-bit */\ -+ WAVE_FORMAT_96M16 | /* Mono 96000Hz 16-bit */\ -+ WAVE_FORMAT_96S16 /* Stereo 96000Hz 16-bit */ -+ -+/* events to be sent to device */ -+enum win_wm_message { -+ WINE_WM_PAUSING = WM_USER + 1, WINE_WM_RESTARTING, WINE_WM_RESETTING, WINE_WM_HEADER, -+ WINE_WM_BREAKLOOP, WINE_WM_CLOSING, WINE_WM_STARTING, WINE_WM_STOPPING, WINE_WM_XRUN, WINE_WM_FEED -+}; -+ -+typedef struct { -+ enum win_wm_message msg; /* message identifier */ -+ DWORD param; /* parameter for this message */ -+ HANDLE hEvent; /* if message is synchronous, handle of event for synchro */ -+} PULSE_MSG; -+ -+/* implement an in-process message ring for better performance -+ * (compared to passing thru the server) -+ * this ring will be used by the input (resp output) record (resp playback) routine -+ */ -+typedef struct { -+ PULSE_MSG * messages; -+ int ring_buffer_size; -+ int msg_tosave; -+ int msg_toget; -+/* Either pipe or event is used, but that is defined in pulse.c, -+ * since this is a global header we define both here */ -+ int msg_pipe[2]; -+ HANDLE msg_event; -+ CRITICAL_SECTION msg_crst; -+} PULSE_MSG_RING; -+ -+typedef struct WINE_WAVEDEV WINE_WAVEDEV; -+typedef struct WINE_WAVEINST WINE_WAVEINST; -+typedef struct IDsDriverImpl IDsDriverImpl; -+typedef struct IDsDriverBufferImpl IDsDriverBufferImpl; -+ -+struct IDsDriverImpl { -+ /* IUnknown fields */ -+ const IDsDriverVtbl *lpVtbl; -+ LONG ref; -+ -+ IDsDriverBufferImpl *primary; -+ UINT wDevID; -+}; -+ -+struct IDsDriverBufferImpl { -+ const IDsDriverBufferVtbl *lpVtbl; -+ IDsDriverImpl* drv; -+ LONG ref; -+ pa_stream *stream; -+ pa_sample_spec sample_spec; -+ pa_cvolume volume; -+ -+ PBYTE buffer; -+ DWORD buffer_length; -+ DWORD buffer_read_offset; -+ DWORD buffer_play_offset; -+ DWORD fraglen; -+}; -+ -+/* Per-playback/record device */ -+struct WINE_WAVEDEV { -+ char interface_name[MAXPNAMELEN * 2]; -+ char *device_name; -+ pa_cvolume volume; -+ -+ union { -+ WAVEOUTCAPSW out; -+ WAVEINCAPSW in; -+ } caps; -+ -+ /* DirectSound stuff */ -+ DSDRIVERDESC ds_desc; -+ DSDRIVERCAPS ds_caps; -+}; -+ -+/* Per-playback/record instance */ -+struct WINE_WAVEINST { -+ volatile INT state; /* one of the WINE_WS_ manifest constants */ -+ WAVEOPENDESC waveDesc; -+ WORD wFlags; -+ -+ /* PulseAudio specific data */ -+ pa_stream *stream; /* The PulseAudio stream */ -+ const pa_timing_info *timing_info; /* The timing info structure for the stream */ -+ pa_sample_spec sample_spec; /* Sample spec of this stream / device */ -+ pa_cvolume volume; /* Software volume of the stream */ -+ pa_buffer_attr buffer_attr; /* Buffer attribute, may not be used */ -+ -+ /* waveIn / waveOut wavaHdr */ -+ LPWAVEHDR lpQueuePtr; /* Start of queued WAVEHDRs (waiting to be notified) */ -+ LPWAVEHDR lpPlayPtr; /* Start of not yet fully written buffers */ -+ DWORD dwPartialOffset; /* Offset of not yet written bytes in lpPlayPtr */ -+ LPWAVEHDR lpLoopPtr; /* Pointer of first buffer in loop, if any */ -+ DWORD dwLoops; /* Private copy of loop counter */ -+ -+ /* Virtual stream positioning */ -+ DWORD last_reset; /* When the last reset occured, as pa stream time isn't reset */ -+ BOOL is_releasing; /* Whether we are releasing wavehdrs */ -+ struct timeval started_releasing; /* When wavehdr releasing started, for comparison to queued written wavehdrs */ -+ DWORD releasing_offset; /* How much audio has been released prior when releasing started in this instance */ -+ -+ /* waveIn specific */ -+ const void *buffer; /* Pointer to the latest data fragment for recording streams */ -+ DWORD buffer_length; /* How large the latest data fragment is */ -+ DWORD buffer_read_offset; /* How far into latest data fragment we last read */ -+ -+ /* Thread communication and synchronization stuff */ -+ HANDLE hStartUpEvent; -+ HANDLE hThread; -+ DWORD dwThreadID; -+ PULSE_MSG_RING msgRing; -+}; -+ -+/* We establish one context per instance, so make it global to the lib */ -+pa_context *PULSE_context; /* Connection Context */ -+pa_threaded_mainloop *PULSE_ml; /* PA Runtime information */ -+ -+/* WaveIn / WaveOut devices */ -+WINE_WAVEDEV *WOutDev; -+WINE_WAVEDEV *WInDev; -+DWORD PULSE_WodNumDevs; -+DWORD PULSE_WidNumDevs; -+ -+/* pulse.c */ -+void PULSE_WaitForOperation(pa_operation *o); -+void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata); -+void PULSE_StreamStateCallback(pa_stream *s, void *userdata); -+void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata); -+void PULSE_StreamOverflowCallback(pa_stream *s, void *userdata); -+void PULSE_StreamSuspendedCallback(pa_stream *s, void *userdata); -+void PULSE_StreamMovedCallback(pa_stream *s, void *userdata); -+void PULSE_ContextSuccessCallback(pa_context *c, int success, void *userdata); -+BOOL PULSE_SetupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss); -+int PULSE_InitRingMessage(PULSE_MSG_RING* omr); -+int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr); -+void PULSE_ResetRingMessage(PULSE_MSG_RING* omr); -+void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep); -+int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait); -+int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, enum win_wm_message *msg, DWORD *param, HANDLE *hEvent); -+const char * PULSE_getCmdString(enum win_wm_message msg); -+ -+/* dsoutput.c */ -+DWORD wodDsCreate(UINT wDevID, PIDSDRIVER* drv); -+DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc); -+#endif diff --git a/winepulse-0.28.patch b/winepulse-0.28.patch new file mode 100644 index 0000000..b70484f --- /dev/null +++ b/winepulse-0.28.patch @@ -0,0 +1,2725 @@ +diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in +new file mode 100644 +index 0000000..c99c1da +--- /dev/null ++++ b/dlls/winepulse.drv/Makefile.in +@@ -0,0 +1,15 @@ ++TOPSRCDIR = @top_srcdir@ ++TOPOBJDIR = ../.. ++SRCDIR = @srcdir@ ++VPATH = @srcdir@ ++MODULE = winepulse.drv ++IMPORTS = winmm user32 kernel32 ++EXTRALIBS = @PULSELIBS@ ++ ++C_SRCS = waveout.c \ ++ wavein.c \ ++ pulse.c ++ ++@MAKE_DLL_RULES@ ++ ++@DEPENDENCIES@ # everything below this line is overwritten by make depend +diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c +new file mode 100644 +index 0000000..392ac0b +--- /dev/null ++++ b/dlls/winepulse.drv/pulse.c +@@ -0,0 +1,794 @@ ++/* ++ * Wine Driver for PulseAudio ++ * http://pulseaudio.org/ ++ * ++ * Copyright 2009 Arthur Taylor ++ * ++ * Contains code from other wine sound drivers. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++ ++#include ++#include ++ ++#include "windef.h" ++#include "winbase.h" ++#include "wingdi.h" ++#include "winuser.h" ++#include "winreg.h" ++#include "mmddk.h" ++#include "ks.h" ++#include "ksguid.h" ++#include "ksmedia.h" ++ ++#ifdef HAVE_UNISTD_H ++# include ++#endif ++#include ++ ++#ifdef HAVE_PULSEAUDIO ++ ++#include "wine/unicode.h" ++#include "wine/debug.h" ++#include "wine/library.h" ++ ++#include ++#include ++WINE_DEFAULT_DEBUG_CHANNEL(wave); ++ ++/* These strings used only for tracing */ ++const char * PULSE_getCmdString(enum win_wm_message msg) { ++ static char unknown[32]; ++#define MSG_TO_STR(x) case x: return #x ++ switch(msg) { ++ MSG_TO_STR(WINE_WM_PAUSING); ++ MSG_TO_STR(WINE_WM_RESTARTING); ++ MSG_TO_STR(WINE_WM_RESETTING); ++ MSG_TO_STR(WINE_WM_HEADER); ++ MSG_TO_STR(WINE_WM_BREAKLOOP); ++ MSG_TO_STR(WINE_WM_CLOSING); ++ MSG_TO_STR(WINE_WM_STARTING); ++ MSG_TO_STR(WINE_WM_STOPPING); ++ MSG_TO_STR(WINE_WM_XRUN); ++ MSG_TO_STR(WINE_WM_FEED); ++ } ++#undef MSG_TO_STR ++ sprintf(unknown, "UNKNOWN(0x%08x)", msg); ++ return unknown; ++} ++ ++/*======================================================================* ++ * Ring Buffer Functions - copied from winealsa.drv * ++ *======================================================================*/ ++ ++/* unless someone makes a wineserver kernel module, Unix pipes are faster than win32 events */ ++#define USE_PIPE_SYNC ++ ++#ifdef USE_PIPE_SYNC ++#define INIT_OMR(omr) do { if (pipe(omr->msg_pipe) < 0) { omr->msg_pipe[0] = omr->msg_pipe[1] = -1; } } while (0) ++#define CLOSE_OMR(omr) do { close(omr->msg_pipe[0]); close(omr->msg_pipe[1]); } while (0) ++#define SIGNAL_OMR(omr) do { int x = 0; write((omr)->msg_pipe[1], &x, sizeof(x)); } while (0) ++#define CLEAR_OMR(omr) do { int x = 0; read((omr)->msg_pipe[0], &x, sizeof(x)); } while (0) ++#define RESET_OMR(omr) do { } while (0) ++#define WAIT_OMR(omr, sleep) \ ++ do { struct pollfd pfd; pfd.fd = (omr)->msg_pipe[0]; \ ++ pfd.events = POLLIN; poll(&pfd, 1, sleep); } while (0) ++#else ++#define INIT_OMR(omr) do { omr->msg_event = CreateEventW(NULL, FALSE, FALSE, NULL); } while (0) ++#define CLOSE_OMR(omr) do { CloseHandle(omr->msg_event); } while (0) ++#define SIGNAL_OMR(omr) do { SetEvent((omr)->msg_event); } while (0) ++#define CLEAR_OMR(omr) do { } while (0) ++#define RESET_OMR(omr) do { ResetEvent((omr)->msg_event); } while (0) ++#define WAIT_OMR(omr, sleep) \ ++ do { WaitForSingleObject((omr)->msg_event, sleep); } while (0) ++#endif ++ ++#define PULSE_RING_BUFFER_INCREMENT 64 ++ ++/****************************************************************** ++ * PULSE_InitRingMessage ++ * ++ * Initialize the ring of messages for passing between driver's caller ++ * and playback/record thread ++ */ ++int PULSE_InitRingMessage(PULSE_MSG_RING* omr) ++{ ++ omr->msg_toget = 0; ++ omr->msg_tosave = 0; ++ INIT_OMR(omr); ++ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; ++ omr->messages = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,omr->ring_buffer_size * sizeof(PULSE_MSG)); ++ ++ InitializeCriticalSection(&omr->msg_crst); ++ omr->msg_crst.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": PULSE_MSG_RING.msg_crst"); ++ return 0; ++} ++ ++/****************************************************************** ++ * PULSE_DestroyRingMessage ++ * ++ */ ++int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr) ++{ ++ CLOSE_OMR(omr); ++ HeapFree(GetProcessHeap(),0,omr->messages); ++ omr->messages = NULL; ++ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; ++ omr->msg_crst.DebugInfo->Spare[0] = 0; ++ DeleteCriticalSection(&omr->msg_crst); ++ return 0; ++} ++/****************************************************************** ++ * PULSE_ResetRingMessage ++ * ++ */ ++void PULSE_ResetRingMessage(PULSE_MSG_RING* omr) ++{ ++ RESET_OMR(omr); ++} ++ ++/****************************************************************** ++ * PULSE_WaitRingMessage ++ * ++ */ ++void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep) ++{ ++ WAIT_OMR(omr, sleep); ++} ++ ++/****************************************************************** ++ * PULSE_AddRingMessage ++ * ++ * Inserts a new message into the ring (should be called from DriverProc derived routines) ++ */ ++int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait) ++{ ++ HANDLE hEvent = INVALID_HANDLE_VALUE; ++ ++ EnterCriticalSection(&omr->msg_crst); ++ if ((omr->msg_toget == ((omr->msg_tosave + 1) % omr->ring_buffer_size))) ++ { ++ int old_ring_buffer_size = omr->ring_buffer_size; ++ omr->ring_buffer_size += PULSE_RING_BUFFER_INCREMENT; ++ omr->messages = HeapReAlloc(GetProcessHeap(),0,omr->messages, omr->ring_buffer_size * sizeof(PULSE_MSG)); ++ /* Now we need to rearrange the ring buffer so that the new ++ buffers just allocated are in between omr->msg_tosave and ++ omr->msg_toget. ++ */ ++ if (omr->msg_tosave < omr->msg_toget) ++ { ++ memmove(&(omr->messages[omr->msg_toget + PULSE_RING_BUFFER_INCREMENT]), ++ &(omr->messages[omr->msg_toget]), ++ sizeof(PULSE_MSG)*(old_ring_buffer_size - omr->msg_toget) ++ ); ++ omr->msg_toget += PULSE_RING_BUFFER_INCREMENT; ++ } ++ } ++ if (wait) ++ { ++ hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); ++ if (hEvent == INVALID_HANDLE_VALUE) ++ { ++ ERR("can't create event !?\n"); ++ LeaveCriticalSection(&omr->msg_crst); ++ return 0; ++ } ++ /* fast messages have to be added at the start of the queue */ ++ omr->msg_toget = (omr->msg_toget + omr->ring_buffer_size - 1) % omr->ring_buffer_size; ++ ++ omr->messages[omr->msg_toget].msg = msg; ++ omr->messages[omr->msg_toget].param = param; ++ omr->messages[omr->msg_toget].hEvent = hEvent; ++ } ++ else ++ { ++ omr->messages[omr->msg_tosave].msg = msg; ++ omr->messages[omr->msg_tosave].param = param; ++ omr->messages[omr->msg_tosave].hEvent = INVALID_HANDLE_VALUE; ++ omr->msg_tosave = (omr->msg_tosave + 1) % omr->ring_buffer_size; ++ } ++ LeaveCriticalSection(&omr->msg_crst); ++ /* signal a new message */ ++ SIGNAL_OMR(omr); ++ if (wait) ++ { ++ /* wait for playback/record thread to have processed the message */ ++ WaitForSingleObject(hEvent, INFINITE); ++ CloseHandle(hEvent); ++ } ++ return 1; ++} ++ ++/****************************************************************** ++ * PULSE_RetrieveRingMessage ++ * ++ * Get a message from the ring. Should be called by the playback/record thread. ++ */ ++int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, ++ enum win_wm_message *msg, DWORD *param, HANDLE *hEvent) ++{ ++ EnterCriticalSection(&omr->msg_crst); ++ ++ if (omr->msg_toget == omr->msg_tosave) /* buffer empty ? */ ++ { ++ LeaveCriticalSection(&omr->msg_crst); ++ return 0; ++ } ++ ++ *msg = omr->messages[omr->msg_toget].msg; ++ omr->messages[omr->msg_toget].msg = 0; ++ *param = omr->messages[omr->msg_toget].param; ++ *hEvent = omr->messages[omr->msg_toget].hEvent; ++ omr->msg_toget = (omr->msg_toget + 1) % omr->ring_buffer_size; ++ CLEAR_OMR(omr); ++ LeaveCriticalSection(&omr->msg_crst); ++ return 1; ++} ++ ++/************************************************************************** ++ * Utility Functions ++ *************************************************************************/ ++ ++/****************************************************************** ++ * PULSE_SetupFormat ++ * ++ * Checks to see if the audio format in wf is supported, and if so set up the ++ * pa_sample_spec at ss to that format. ++ */ ++BOOL PULSE_SetupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss) { ++ WAVEFORMATEXTENSIBLE *wfex; ++ ++ ss->channels = wf->nChannels; ++ ss->rate = wf->nSamplesPerSec; ++ ss->format = PA_SAMPLE_INVALID; ++ ++ if (ss->rate < DSBFREQUENCY_MIN || ss->rate > DSBFREQUENCY_MAX) return FALSE; ++ ++ switch (wf->wFormatTag) { ++ case WAVE_FORMAT_PCM: ++ /* MSDN says that for WAVE_FORMAT_PCM, nChannels must be 1 or 2 and ++ * wBitsPerSample must be 8 or 16, yet other values are used by some ++ * applications in the wild for surround. */ ++ if (ss->channels > 6 || ss->channels < 1) return FALSE; ++ ss->format = wf->wBitsPerSample == 8 ? PA_SAMPLE_U8 ++ : wf->wBitsPerSample == 16 ? PA_SAMPLE_S16NE ++ : wf->wBitsPerSample == 32 ? PA_SAMPLE_S32NE ++ : PA_SAMPLE_INVALID; ++ break; ++ ++ case WAVE_FORMAT_MULAW: ++ if (wf->wBitsPerSample == 8) ss->format = PA_SAMPLE_ULAW; ++ break; ++ ++ case WAVE_FORMAT_ALAW: ++ if (wf->wBitsPerSample == 8) ss->format = PA_SAMPLE_ALAW; ++ break; ++ ++ case WAVE_FORMAT_EXTENSIBLE: ++ if (wf->cbSize > 22) return FALSE; ++ if (ss->channels < 1 || ss->channels > 6) return FALSE; ++ wfex = (WAVEFORMATEXTENSIBLE *)wf; ++ if (IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM)) { ++ if (wf->wBitsPerSample == wfex->Samples.wValidBitsPerSample) { ++ ss->format = wf->wBitsPerSample == 8 ? PA_SAMPLE_U8 ++ : wf->wBitsPerSample == 16 ? PA_SAMPLE_S16NE ++ : wf->wBitsPerSample == 32 ? PA_SAMPLE_S32NE ++ : PA_SAMPLE_INVALID; ++ } else { ++ return FALSE; ++ } ++ } else if (wf->wBitsPerSample != wfex->Samples.wValidBitsPerSample) { ++ return FALSE; ++ } else if ((IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))) { ++ ss->format = PA_SAMPLE_FLOAT32NE; ++ } else { ++ WARN("only KSDATAFORMAT_SUBTYPE_PCM and KSDATAFORMAT_SUBTYPE_IEEE_FLOAT of WAVE_FORMAT_EXTENSIBLE supported\n"); ++ return FALSE; ++ } ++ break; ++ ++ default: ++ WARN("only WAVE_FORMAT_PCM, WAVE_FORMAT_MULAW, WAVE_FORMAT_ALAW and WAVE_FORMAT_EXTENSIBLE supported\n"); ++ return FALSE; ++ } ++ ++ if (!pa_sample_spec_valid(ss)) return FALSE; ++ if (wf->nBlockAlign != pa_frame_size(ss)) { ++ ERR("wf->nBlockAlign != the format frame size!\n"); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++/****************************************************************** ++ * PULSE_SetupFormat ++ * ++ * Converts the current time to a MMTIME structure. lpTime shold be validated ++ * before calling. ++ */ ++HRESULT PULSE_UsecToMMTime(pa_usec_t time, LPMMTIME lpTime, const pa_sample_spec *ss) { ++ pa_usec_t temp; ++ size_t bytes; ++ ++ /* Convert to milliseconds */ ++ time /= 1000; ++ ++ bytes = time * pa_bytes_per_second(ss) / 1000; ++ /* Align to frame size */ ++ bytes -= bytes % pa_frame_size(ss); ++ ++ switch (lpTime->wType) { ++ case TIME_SAMPLES: ++ lpTime->u.sample = bytes / pa_frame_size(ss); ++ TRACE("TIME_SAMPLES=%u\n", lpTime->u.sample); ++ break; ++ case TIME_MS: ++ lpTime->u.ms = time; ++ TRACE("TIME_MS=%u\n", lpTime->u.ms); ++ break; ++ case TIME_SMPTE: ++ lpTime->u.smpte.fps = 30; ++ temp = bytes / pa_frame_size(ss); ++ temp += ss->rate / lpTime->u.smpte.fps - 1; ++ lpTime->u.smpte.sec = time/1000; ++ temp -= lpTime->u.smpte.sec * ss->rate; ++ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; ++ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; ++ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; ++ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; ++ lpTime->u.smpte.frame = temp * lpTime->u.smpte.fps / ss->rate; ++ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", ++ lpTime->u.smpte.hour, lpTime->u.smpte.min, ++ lpTime->u.smpte.sec, lpTime->u.smpte.frame); ++ break; ++ default: ++ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); ++ lpTime->wType = TIME_BYTES; ++ /* fall through */ ++ case TIME_BYTES: ++ lpTime->u.cb = bytes; ++ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); ++ break; ++ } ++ ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * PULSE_WaitForOperation ++ * ++ * Waits for pa operations to complete, and dereferences the operation. ++ */ ++void PULSE_WaitForOperation(pa_operation *o) { ++ if (!o) return; ++ ++ for (;;) { ++ if (pa_operation_get_state(o) != PA_OPERATION_RUNNING) ++ break; ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ pa_operation_unref(o); ++} ++ ++/************************************************************************** ++ * Common Callbacks ++ */ ++ ++/************************************************************************** ++ * PULSE_StreamSuspendedCallback [internal] ++ * ++ * Called by the pulse mainloop any time stream playback is intentionally ++ * suspended or resumed from being suspended. ++ */ ++void PULSE_StreamSuspendedCallback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ /* Currently we handle this kinda like an underrun. Perhaps we should ++ * tell the client somehow so it doesn't just hang? */ ++ ++ if (!pa_stream_is_suspended(s) && wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); ++} ++ ++/************************************************************************** ++ * PULSE_StreamUnderflowCallback [internal] ++ * ++ * Called by the pulse mainloop when the prebuf runs out of data. ++ */ ++void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; ++ assert(s && wwo); ++ ++ /* If we aren't playing, don't care ^_^ */ ++ if (wwo->state != WINE_WS_PLAYING) return; ++ ++ TRACE("Underrun occurred.\n"); ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0); ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); ++} ++ ++/************************************************************************** ++ * PULSE_StreamMovedCallback [internal] ++ * ++ * Called by the pulse mainloop when the stream gets moved, resulting in ++ * possibly different metrics. ++ */ ++void PULSE_StreamMovedCallback(pa_stream *s, void *userdata) { ++ FIXME("stub"); ++} ++ ++ ++/****************************************************************** ++ * PULSE_StreamStateCallback ++ * ++ * Called by pulse whenever the state of the stream changes. ++ */ ++void PULSE_StreamStateCallback(pa_stream *s, void *userdata) { ++ assert(s); ++ ++ switch (pa_stream_get_state(s)) { ++ case PA_STREAM_READY: ++ TRACE("Stream %p ready\n", userdata); ++ break; ++ ++ case PA_STREAM_TERMINATED: ++ TRACE("Stream %p terminated\n", userdata); ++ break; ++ ++ case PA_STREAM_FAILED: ++ ERR("Stream %p failed!\n", userdata); ++ break; ++ ++ case PA_STREAM_UNCONNECTED: ++ case PA_STREAM_CREATING: ++ return; ++ } ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_StreamSucessCallback ++ */ ++void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata) { ++ if (!success) ++ WARN("Stream %p operation failed: %s\n", userdata, pa_strerror(pa_context_errno(PULSE_context))); ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_ContextSuccessCallback ++ */ ++void PULSE_ContextSuccessCallback(pa_context *c, int success, void *userdata) { ++ if (!success) ERR("Context operation failed: %s\n", pa_strerror(pa_context_errno(c))); ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * Connection management and sink / source management. ++ */ ++ ++/************************************************************************** ++ * PULSE_ContextStateCallback [internal] ++ */ ++static void PULSE_ContextStateCallback(pa_context *c, void *userdata) { ++ assert(c); ++ ++ switch (pa_context_get_state(c)) { ++ case PA_CONTEXT_CONNECTING: ++ case PA_CONTEXT_UNCONNECTED: ++ case PA_CONTEXT_AUTHORIZING: ++ case PA_CONTEXT_SETTING_NAME: ++ break; ++ ++ case PA_CONTEXT_READY: ++ case PA_CONTEXT_TERMINATED: ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ break; ++ ++ case PA_CONTEXT_FAILED: ++ ERR("Context failure: %s\n", pa_strerror(pa_context_errno(c))); ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ break; ++ } ++} ++ ++/************************************************************************** ++ * PULSE_AllocateWaveinDevice [internal] ++ * ++ * Creates or adds a device to WInDev based on the pa_source_info. ++ */ ++static void PULSE_AllocateWaveinDevice(const char *name, const char *device, const char *description, const pa_cvolume *v) { ++ WINE_WAVEDEV *wdi; ++ ++ if (WInDev) ++ wdi = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * (PULSE_WidNumDevs + 1)); ++ else ++ wdi = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); ++ ++ if (!wdi) return; ++ ++ WInDev = wdi; ++ wdi = &WInDev[PULSE_WidNumDevs++]; ++ memset(wdi, 0, sizeof(WINE_WAVEDEV)); ++ memset(&(wdi->caps.in), 0, sizeof(wdi->caps.in)); ++ snprintf(wdi->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); ++ wdi->device_name = pa_xstrdup(device); ++ MultiByteToWideChar(CP_ACP, 0, description, -1, wdi->caps.in.szPname, sizeof(wdi->caps.in.szPname)/sizeof(WCHAR)); ++ wdi->caps.in.szPname[sizeof(wdi->caps.in.szPname)/sizeof(WCHAR) - 1] = '\0'; ++ wdi->caps.in.wMid = MM_CREATIVE; ++ wdi->caps.in.wPid = MM_CREATIVE_SBP16_WAVEOUT; ++ wdi->caps.in.vDriverVersion = 0x0100; ++ wdi->caps.in.wChannels = v->channels == 1 ? 1 : 2; ++ wdi->caps.in.dwFormats = PULSE_ALL_FORMATS; ++ memset(&wdi->ds_desc, 0, sizeof(DSDRIVERDESC)); ++ memcpy(wdi->ds_desc.szDesc, description, min(sizeof(wdi->ds_desc.szDesc) - 1, strlen(description))); ++ memcpy(wdi->ds_desc.szDrvname, "winepulse.drv", 14); ++ wdi->ds_caps.dwMinSecondarySampleRate = DSBFREQUENCY_MIN; ++ wdi->ds_caps.dwMaxSecondarySampleRate = DSBFREQUENCY_MAX; ++ wdi->ds_caps.dwPrimaryBuffers = 1; ++ wdi->ds_caps.dwFlags = \ ++ DSCAPS_PRIMARYMONO | ++ DSCAPS_PRIMARYSTEREO | ++ DSCAPS_PRIMARY8BIT | ++ DSCAPS_PRIMARY16BIT | ++ DSCAPS_SECONDARYMONO | ++ DSCAPS_SECONDARYSTEREO | ++ DSCAPS_SECONDARY8BIT | ++ DSCAPS_SECONDARY16BIT | ++ DSCCAPS_MULTIPLECAPTURE | ++ DSCAPS_CERTIFIED | /* Useful? */ ++ DSCAPS_EMULDRIVER; /* Useful? */ ++ ++} ++ ++/************************************************************************** ++ * PULSE_AllocateWaveoutDevice [internal] ++ * ++ * Creates or adds a sink to the WOutDev array. ++ */ ++static void PULSE_AllocateWaveoutDevice(const char *name, const char *device, const char *description, const pa_cvolume *v) { ++ WINE_WAVEDEV *wdo; ++ int x; ++ ++ if (WOutDev) ++ wdo = HeapReAlloc(GetProcessHeap(), 0, WOutDev, sizeof(WINE_WAVEDEV) * (PULSE_WodNumDevs + 1)); ++ else ++ wdo = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); ++ ++ if (!wdo) return; ++ ++ WOutDev = wdo; ++ wdo = &WOutDev[PULSE_WodNumDevs++]; ++ memset(wdo, 0, sizeof(WINE_WAVEDEV)); ++ ++ wdo->device_name = pa_xstrdup(device); ++ wdo->volume.channels = v->channels; ++ for (x = 0; x < v->channels; x++) wdo->volume.values[x] = v->values[x]; ++ snprintf(wdo->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); ++ MultiByteToWideChar(CP_ACP, 0, description, -1, wdo->caps.out.szPname, sizeof(wdo->caps.out.szPname)/sizeof(WCHAR)); ++ wdo->caps.out.szPname[sizeof(wdo->caps.out.szPname)/sizeof(WCHAR) - 1] = '\0'; ++ wdo->caps.out.wMid = MM_CREATIVE; ++ wdo->caps.out.wPid = MM_CREATIVE_SBP16_WAVEOUT; ++ wdo->caps.out.vDriverVersion = 0x0100; ++ wdo->caps.out.dwSupport = WAVECAPS_VOLUME | WAVECAPS_SAMPLEACCURATE | WAVECAPS_DIRECTSOUND; ++ if (v->channels >= 2) { ++ wdo->caps.out.wChannels = 2; ++ wdo->caps.out.dwSupport |= WAVECAPS_LRVOLUME; ++ } else ++ wdo->caps.out.wChannels = 1; ++ wdo->caps.out.dwFormats = PULSE_ALL_FORMATS; ++ memset(&wdo->ds_desc, 0, sizeof(DSDRIVERDESC)); ++ memcpy(wdo->ds_desc.szDesc, description, min(sizeof(wdo->ds_desc.szDesc) - 1, strlen(description))); ++ memcpy(wdo->ds_desc.szDrvname, "winepulse.drv", 14); ++ wdo->ds_caps.dwMinSecondarySampleRate = DSBFREQUENCY_MIN; ++ wdo->ds_caps.dwMaxSecondarySampleRate = DSBFREQUENCY_MAX; ++ wdo->ds_caps.dwPrimaryBuffers = 1; ++ wdo->ds_caps.dwFlags = \ ++ DSCAPS_PRIMARYMONO | ++ DSCAPS_PRIMARYSTEREO | ++ DSCAPS_PRIMARY8BIT | ++ DSCAPS_PRIMARY16BIT | ++ DSCAPS_SECONDARYMONO | ++ DSCAPS_SECONDARYSTEREO | ++ DSCAPS_SECONDARY8BIT | ++ DSCAPS_SECONDARY16BIT | ++ DSCAPS_CERTIFIED | ++ DSCAPS_EMULDRIVER; /* Useful? */ ++} ++ ++/************************************************************************** ++ * PULSE_SourceInfoCallback [internal] ++ */ ++static void PULSE_SourceInfoCallback(pa_context *c, const pa_source_info *i, int eol, void *userdata) { ++ ++ if (!eol && i) ++ PULSE_AllocateWaveinDevice(i->name, i->name, i->description, &i->volume); ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_SinkInfoCallback [internal] ++ */ ++static void PULSE_SinkInfoCallback(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { ++ ++ if (!eol && i) ++ PULSE_AllocateWaveoutDevice(i->name, i->name, i->description, &i->volume); ++ ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_ContextNotifyCallback [internal] ++ */ ++static void PULSE_ContextNotifyCallback(pa_context *c, void *userdata) { ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++} ++ ++/************************************************************************** ++ * PULSE_WaveClose [internal] ++ * ++ * Disconnect from the server, deallocated the WaveIn/WaveOut devices, stop and ++ * free the mainloop. ++ */ ++static LONG PULSE_WaveClose(void) { ++ int x; ++ TRACE("()\n"); ++ if (!PULSE_ml) return DRV_FAILURE; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ /* device_name is allocated with pa_xstrdup, free with pa_xfree */ ++ for (x = 0; x < PULSE_WodNumDevs; x++) pa_xfree(WOutDev[x].device_name); ++ for (x = 0; x < PULSE_WidNumDevs; x++) pa_xfree(WInDev[x].device_name); ++ HeapFree(GetProcessHeap(), 0, WOutDev); ++ HeapFree(GetProcessHeap(), 0, WInDev); ++ if (PULSE_context) { ++ PULSE_WaitForOperation(pa_context_drain(PULSE_context, PULSE_ContextNotifyCallback, NULL)); ++ pa_context_disconnect(PULSE_context); ++ pa_context_unref(PULSE_context); ++ PULSE_context = NULL; ++ } ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ pa_threaded_mainloop_stop(PULSE_ml); ++ pa_threaded_mainloop_free(PULSE_ml); ++ PULSE_ml = NULL; ++ ++ return DRV_SUCCESS; ++} ++ ++/************************************************************************** ++ * PULSE_WaveInit [internal] ++ * ++ * Connects to the pulseaudio server, tries to discover sinks and sources and ++ * allocates the WaveIn/WaveOut devices. ++ */ ++static LONG PULSE_WaveInit(void) { ++ char *app_name; ++ char path[PATH_MAX]; ++ char *offset = NULL; ++ int x = 0; ++ pa_cvolume fake_cvolume; ++ ++ WOutDev = NULL; ++ WInDev = NULL; ++ PULSE_WodNumDevs = 0; ++ PULSE_WidNumDevs = 0; ++ PULSE_context = NULL; ++ PULSE_ml = NULL; ++ ++ if (!(PULSE_ml = pa_threaded_mainloop_new())) { ++ WARN("Failed to create mainloop object."); ++ return DRV_FAILURE; ++ } ++ ++ /* Application name giving to pulse should be unique to the binary so that ++ * pulse-*-restore can be useful */ ++ ++ /* Get binary path, and remove path a-la strrchr */ ++ if (GetModuleFileNameA(NULL, path, PATH_MAX)) ++ offset = strrchr(path, '\\'); ++ ++ if (offset && ++offset && offset < path + PATH_MAX) { ++ app_name = pa_xmalloc(strlen(offset) + 8); ++ snprintf(app_name, strlen(offset) + 8, "WINE [%s]", offset); ++ } else ++ app_name = pa_xstrdup("WINE Application"); ++ ++ TRACE("App name is \"%s\"\n", app_name); ++ ++ pa_threaded_mainloop_start(PULSE_ml); ++ PULSE_context = pa_context_new(pa_threaded_mainloop_get_api(PULSE_ml), app_name); ++ assert(PULSE_context); ++ pa_xfree(app_name); ++ ++ pa_context_set_state_callback(PULSE_context, PULSE_ContextStateCallback, NULL); ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ TRACE("libpulse protocol version: %u. API Version %u\n", pa_context_get_protocol_version(PULSE_context), PA_API_VERSION); ++ TRACE("Attempting to connect to pulseaudio server.\n"); ++ if (pa_context_connect(PULSE_context, NULL, 0, NULL) < 0) ++ goto fail; ++ ++ /* Wait for connection */ ++ for (;;) { ++ pa_context_state_t state = pa_context_get_state(PULSE_context); ++ ++ if (state == PA_CONTEXT_FAILED || state == PA_CONTEXT_TERMINATED) ++ goto fail; ++ ++ if (state == PA_CONTEXT_READY) ++ break; ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ ++ x = pa_context_get_server_protocol_version(PULSE_context); ++ TRACE("Connected to server %s with protocol version: %i.\n", pa_context_get_server(PULSE_context), x); ++ if (x < 14) ++ WARN("Server is old, expect poor latency or buggy-ness!\n"); ++ ++ fake_cvolume.channels = 2; ++ pa_cvolume_reset(&fake_cvolume, 2); ++ /* FIXME Translations? */ ++ PULSE_AllocateWaveoutDevice("default", NULL, "Default", &fake_cvolume); ++ PULSE_AllocateWaveinDevice("default", NULL, "Default", &fake_cvolume); ++ PULSE_WaitForOperation(pa_context_get_sink_info_list(PULSE_context, PULSE_SinkInfoCallback, &PULSE_WodNumDevs)); ++ PULSE_WaitForOperation(pa_context_get_source_info_list(PULSE_context, PULSE_SourceInfoCallback, &PULSE_WidNumDevs)); ++ TRACE("Found %u output and %u input device(s).\n", PULSE_WodNumDevs - 1, PULSE_WidNumDevs - 1); ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ return DRV_SUCCESS; ++ ++fail: ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ERR("Failed to connect to server\n"); ++ return DRV_FAILURE; ++} ++ ++#endif /* HAVE_PULSEAUDIO */ ++ ++/************************************************************************** ++ * DriverProc (WINEPULSE.@) ++ */ ++LRESULT CALLBACK PULSE_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, ++ LPARAM dwParam1, LPARAM dwParam2) { ++ ++ switch(wMsg) { ++#ifdef HAVE_PULSEAUDIO ++ case DRV_LOAD: return PULSE_WaveInit(); ++ case DRV_FREE: return PULSE_WaveClose(); ++ case DRV_OPEN: return 1; ++ case DRV_CLOSE: return 1; ++ case DRV_ENABLE: return 1; ++ case DRV_DISABLE: return 1; ++ case DRV_QUERYCONFIGURE: return 1; ++ case DRV_CONFIGURE: MessageBoxA(0, "PulseAudio MultiMedia Driver !", "PulseAudio Driver", MB_OK); return 1; ++ case DRV_INSTALL: return DRVCNF_RESTART; ++ case DRV_REMOVE: return DRVCNF_RESTART; ++#endif ++ default: ++ return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2); ++ } ++} +diff --git a/dlls/winepulse.drv/wavein.c b/dlls/winepulse.drv/wavein.c +new file mode 100644 +index 0000000..7cbc781 +--- /dev/null ++++ b/dlls/winepulse.drv/wavein.c +@@ -0,0 +1,595 @@ ++/* ++ * Wine Driver for PulseAudio - WaveIn Functionality ++ * http://pulseaudio.org/ ++ * ++ * Copyright 2009 Arthur Taylor ++ * ++ * Contains code from other wine multimedia drivers. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++ ++#include ++ ++#include "windef.h" ++#include "winbase.h" ++#include "wingdi.h" ++#include "winuser.h" ++#include "winnls.h" ++#include "mmddk.h" ++ ++#include ++ ++#include "wine/debug.h" ++ ++WINE_DEFAULT_DEBUG_CHANNEL(wave); ++ ++#if HAVE_PULSEAUDIO ++ ++/*======================================================================* ++ * WAVE IN specific PulseAudio Callbacks * ++ *======================================================================*/ ++ ++/************************************************************************** ++ * widNotifyClient [internal] ++*/ ++static DWORD widNotifyClient(WINE_WAVEINST* wwi, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { ++ TRACE("wMsg = 0x%04x dwParm1 = %04X dwParam2 = %04X\n", wMsg, dwParam1, dwParam2); ++ ++ switch (wMsg) { ++ case WIM_OPEN: ++ case WIM_CLOSE: ++ case WIM_DATA: ++ if (wwi->wFlags != DCB_NULL && ++ !DriverCallback(wwi->waveDesc.dwCallback, wwi->wFlags, (HDRVR)wwi->waveDesc.hWave, ++ wMsg, wwi->waveDesc.dwInstance, dwParam1, dwParam2)) { ++ WARN("can't notify client !\n"); ++ return MMSYSERR_ERROR; ++ } ++ break; ++ default: ++ FIXME("Unknown callback message %u\n", wMsg); ++ return MMSYSERR_INVALPARAM; ++ } ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widRecorder_NextFragment [internal] ++ * ++ * Gets the next fragment of data from the server. ++ */ ++static size_t widRecorder_NextFragment(WINE_WAVEINST *wwi) { ++ size_t nbytes; ++ ++ TRACE("()\n"); ++ ++ if (wwi->buffer) ++ pa_stream_drop(wwi->stream); ++ ++ pa_stream_peek(wwi->stream, &wwi->buffer, &nbytes); ++ wwi->buffer_length = nbytes; ++ wwi->buffer_read_offset = 0; ++ ++ return nbytes; ++} ++ ++ ++/************************************************************************** ++ * widRecorder_CopyData [internal] ++ * ++ * Copys data from the fragments pulse returns to queued buffers. ++ */ ++static void widRecorder_CopyData(WINE_WAVEINST *wwi) { ++ LPWAVEHDR lpWaveHdr = wwi->lpQueuePtr; ++ size_t nbytes; ++ ++ while (lpWaveHdr && wwi->state == WINE_WS_PLAYING) { ++ ++ nbytes = min(wwi->buffer_length - wwi->buffer_read_offset, lpWaveHdr->dwBufferLength - lpWaveHdr->dwBytesRecorded); ++ if (nbytes == 0) break; ++ ++ TRACE("%u bytes from %p to %p\n", ++ nbytes, ++ (PBYTE)wwi->buffer + wwi->buffer_read_offset, ++ lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded); ++ ++ memcpy(lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded, (PBYTE)wwi->buffer + wwi->buffer_read_offset, nbytes); ++ ++ lpWaveHdr->dwBytesRecorded += nbytes; ++ wwi->buffer_read_offset += nbytes; ++ ++ if (wwi->buffer_read_offset == wwi->buffer_length) { ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_drop(wwi->stream); ++ if (pa_stream_readable_size(wwi->stream)) ++ widRecorder_NextFragment(wwi); ++ else { ++ wwi->buffer = NULL; ++ wwi->buffer_length = 0; ++ wwi->buffer_read_offset = 0; ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ ++ if (lpWaveHdr->dwBytesRecorded == lpWaveHdr->dwBufferLength) { ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ wwi->lpQueuePtr = lpWaveHdr->lpNext; ++ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); ++ lpWaveHdr = wwi->lpQueuePtr; ++ } ++ } ++} ++ ++/************************************************************************** ++ * widRecorder [internal] ++ */ ++static DWORD CALLBACK widRecorder(LPVOID lpParam) { ++ WINE_WAVEINST *wwi = (WINE_WAVEINST*)lpParam; ++ LPWAVEHDR lpWaveHdr; ++ enum win_wm_message msg; ++ DWORD param; ++ HANDLE ev; ++ DWORD wait = INFINITE; ++ ++ wwi->state = WINE_WS_STOPPED; ++ SetEvent(wwi->hStartUpEvent); ++ ++ for (;;) { ++ ++ if (wwi->state != WINE_WS_PLAYING) { ++ wait = INFINITE; ++ } else { ++ if (wwi->buffer == NULL && pa_stream_readable_size(wwi->stream)) { ++ pa_threaded_mainloop_lock(PULSE_ml); ++ wait = pa_bytes_to_usec(widRecorder_NextFragment(wwi), &wwi->sample_spec)/1000; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ } ++ ++ widRecorder_CopyData(wwi); ++ ++ PULSE_WaitRingMessage(&wwi->msgRing, wait); ++ ++ while (PULSE_RetrieveRingMessage(&wwi->msgRing, &msg, ¶m, &ev)) { ++ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); ++ ++ switch (msg) { ++ case WINE_WM_FEED: ++ SetEvent(ev); ++ break; ++ case WINE_WM_STARTING: ++ wwi->state = WINE_WS_PLAYING; ++ if (wwi->lpQueuePtr) ++ wait = pa_bytes_to_usec(wwi->lpQueuePtr->dwBufferLength, &wwi->sample_spec)/1000; ++ else ++ wait = INFINITE; ++ wwi->dwLastReset = wwi->timing_info->read_index; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 0, PULSE_StreamSuccessCallback, NULL)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ SetEvent(ev); ++ break; ++ case WINE_WM_HEADER: ++ lpWaveHdr = (LPWAVEHDR)param; ++ lpWaveHdr->lpNext = 0; ++ ++ /* insert buffer at the end of queue */ ++ { ++ LPWAVEHDR *wh; ++ for (wh = &(wwi->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); ++ *wh = lpWaveHdr; ++ } ++ break; ++ case WINE_WM_STOPPING: ++ if (wwi->state != WINE_WS_STOPPED) { ++ wwi->state = WINE_WS_STOPPED; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ /* return current buffer to app */ ++ lpWaveHdr = wwi->lpQueuePtr; ++ if (lpWaveHdr) { ++ LPWAVEHDR lpNext = lpWaveHdr->lpNext; ++ TRACE("stop %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ wwi->lpQueuePtr = lpNext; ++ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); ++ } ++ } ++ SetEvent(ev); ++ break; ++ case WINE_WM_RESETTING: ++ if (wwi->state != WINE_WS_STOPPED) { ++ wwi->state = WINE_WS_STOPPED; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ ++ /* return all buffers to the app */ ++ for (lpWaveHdr = wwi->lpPlayPtr ? wwi->lpPlayPtr : wwi->lpQueuePtr; lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ wwi->lpQueuePtr = lpWaveHdr->lpNext; ++ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); ++ } ++ ++ SetEvent(ev); ++ break; ++ case WINE_WM_CLOSING: ++ wwi->hThread = 0; ++ if ((DWORD)param == 1) { ++ /* If we are here, the stream failed */ ++ wwi->state = WINE_WS_FAILED; ++ SetEvent(ev); ++ PULSE_DestroyRingMessage(&wwi->msgRing); ++ widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); ++ wwi->lpPlayPtr = wwi->lpQueuePtr = NULL; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_disconnect(wwi->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ TRACE("Thread exiting because of failure.\n"); ++ ExitThread(1); ++ } ++ wwi->state = WINE_WS_CLOSED; ++ SetEvent(ev); ++ ExitThread(0); ++ /* shouldn't go here */ ++ default: ++ FIXME("unknown message %d\n", msg); ++ break; ++ } /* switch(msg) */ ++ } /* while(PULSE_RetrieveRingMessage()) */ ++ } /* for (;;) */ ++} ++ ++/************************************************************************** ++ * widOpen [internal] ++ */ ++static DWORD widOpen(WORD wDevID, DWORD_PTR *lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { ++ WINE_WAVEDEV *wdi; ++ WINE_WAVEINST *wwi = NULL; ++ DWORD ret = MMSYSERR_NOERROR; ++ ++ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); ++ if (lpDesc == NULL) { ++ WARN("Invalid Parameter !\n"); ++ return MMSYSERR_INVALPARAM; ++ } ++ ++ if (wDevID >= PULSE_WidNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WidNumDevs); ++ return MMSYSERR_BADDEVICEID; ++ } ++ wdi = &WInDev[wDevID]; ++ ++ wwi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_WAVEINST)); ++ if (!wwi) return MMSYSERR_NOMEM; ++ *lpdwUser = (DWORD_PTR)wwi; ++ ++ /* check to see if format is supported and make pa_sample_spec struct */ ++ if (!PULSE_SetupFormat(lpDesc->lpFormat, &wwi->sample_spec)) { ++ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ ret = WAVERR_BADFORMAT; ++ goto exit; ++ } ++ ++ if (TRACE_ON(wave)) { ++ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; ++ pa_sample_spec_snprint(t, sizeof(t), &wwi->sample_spec); ++ TRACE("Sample spec '%s'\n", t); ++ } ++ ++ if (dwFlags & WAVE_FORMAT_QUERY) { ++ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ ret = MMSYSERR_NOERROR; ++ goto exit; ++ } ++ ++ wwi->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); ++ wwi->waveDesc = *lpDesc; ++ PULSE_InitRingMessage(&wwi->msgRing); ++ ++ wwi->stream = pa_stream_new(PULSE_context, "WaveIn", &wwi->sample_spec, NULL); ++ if (!wwi->stream) { ++ ret = WAVERR_BADFORMAT; ++ goto exit; ++ } ++ ++ pa_stream_set_state_callback(wwi->stream, PULSE_StreamStateCallback, wwi); ++ ++ wwi->buffer_attr.maxlength = (uint32_t)-1; ++ wwi->buffer_attr.fragsize = pa_bytes_per_second(&wwi->sample_spec) / 100; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ TRACE("Asking to open %s for recording.\n", wdi->device_name); ++ pa_stream_connect_record(wwi->stream, wdi->device_name, &wwi->buffer_attr, ++ PA_STREAM_START_CORKED | ++ PA_STREAM_AUTO_TIMING_UPDATE); ++ ++ for (;;) { ++ pa_context_state_t cstate = pa_context_get_state(PULSE_context); ++ pa_stream_state_t sstate = pa_stream_get_state(wwi->stream); ++ ++ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || ++ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { ++ ERR("Failed to connect context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); ++ ret = MMSYSERR_NODRIVER; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ goto exit; ++ } ++ ++ if (sstate == PA_STREAM_READY) ++ break; ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ TRACE("(%p)->stream connected for recording.\n", wwi); ++ ++ PULSE_WaitForOperation(pa_stream_update_timing_info(wwi->stream, PULSE_StreamSuccessCallback, wwi)); ++ ++ wwi->timing_info = pa_stream_get_timing_info(wwi->stream); ++ assert(wwi->timing_info); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ wwi->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); ++ wwi->hThread = CreateThread(NULL, 0, widRecorder, (LPVOID)wwi, 0, &(wwi->dwThreadID)); ++ if (wwi->hThread) ++ SetThreadPriority(wwi->hThread, THREAD_PRIORITY_TIME_CRITICAL); ++ else { ++ ERR("Thread creation for the widRecorder failed!\n"); ++ ret = MMSYSERR_NOMEM; ++ goto exit; ++ } ++ WaitForSingleObject(wwi->hStartUpEvent, INFINITE); ++ CloseHandle(wwi->hStartUpEvent); ++ wwi->hStartUpEvent = INVALID_HANDLE_VALUE; ++ ++ return widNotifyClient(wwi, WIM_OPEN, 0L, 0L); ++ ++exit: ++ if (!wwi) ++ return ret; ++ ++ if (wwi->hStartUpEvent != INVALID_HANDLE_VALUE) ++ CloseHandle(wwi->hStartUpEvent); ++ ++ if (wwi->msgRing.ring_buffer_size > 0) ++ PULSE_DestroyRingMessage(&wwi->msgRing); ++ ++ if (wwi->stream) { ++ if (pa_stream_get_state(wwi->stream) == PA_STREAM_READY) ++ pa_stream_disconnect(wwi->stream); ++ pa_stream_unref(wwi->stream); ++ } ++ HeapFree(GetProcessHeap(), 0, wwi); ++ ++ return ret; ++} ++/************************************************************************** ++ * widClose [internal] ++ */ ++static DWORD widClose(WORD wDevID, WINE_WAVEINST *wwi) { ++ DWORD ret; ++ ++ TRACE("(%u, %p);\n", wDevID, wwi); ++ if (wDevID >= PULSE_WidNumDevs) { ++ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } else if (!wwi) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (wwi->state != WINE_WS_FAILED) { ++ if (wwi->lpQueuePtr) { ++ WARN("buffers recording recording !\n"); ++ return WAVERR_STILLPLAYING; ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (pa_stream_get_state(wwi->stream) == PA_STREAM_READY) ++ pa_stream_drop(wwi->stream); ++ pa_stream_disconnect(wwi->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ if (wwi->hThread != INVALID_HANDLE_VALUE) ++ PULSE_AddRingMessage(&wwi->msgRing, WINE_WM_CLOSING, 0, TRUE); ++ ++ PULSE_DestroyRingMessage(&wwi->msgRing); ++ } ++ ret = widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); ++ ++ pa_stream_unref(wwi->stream); ++ TRACE("Deallocating record instance.\n"); ++ HeapFree(GetProcessHeap(), 0, wwi); ++ return ret; ++} ++ ++/************************************************************************** ++ * widAddBuffer [internal] ++ * ++ */ ++static DWORD widAddBuffer(WINE_WAVEINST* wwi, LPWAVEHDR lpWaveHdr, DWORD dwSize) { ++ TRACE("(%p, %p, %08X);\n", wwi, lpWaveHdr, dwSize); ++ ++ if (!wwi || wwi->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) ++ return WAVERR_UNPREPARED; ++ ++ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) ++ return WAVERR_STILLPLAYING; ++ ++ lpWaveHdr->dwFlags &= ~WHDR_DONE; ++ lpWaveHdr->dwFlags |= WHDR_INQUEUE; ++ lpWaveHdr->dwBytesRecorded = 0; ++ lpWaveHdr->lpNext = 0; ++ ++ PULSE_AddRingMessage(&wwi->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); ++ ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widRecorderMessage [internal] ++ */ ++static DWORD widRecorderMessage(WINE_WAVEINST *wwi, enum win_wm_message message) { ++ if (!wwi || wwi->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwi->msgRing, message, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widGetPosition [internal] ++ */ ++static DWORD widGetPosition(WINE_WAVEINST *wwi, LPMMTIME lpTime, DWORD uSize) { ++ ++ if (!wwi || wwi->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpTime == NULL) return MMSYSERR_INVALPARAM; ++ ++ return PULSE_UsecToMMTime(pa_bytes_to_usec(wwi->timing_info->read_index - wwi->dwLastReset, &wwi->sample_spec), lpTime, &wwi->sample_spec); ++} ++ ++/************************************************************************** ++ * widGetDevCaps [internal] ++ */ ++static DWORD widGetDevCaps(DWORD wDevID, LPWAVEINCAPSW lpCaps, DWORD dwSize) { ++ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); ++ ++ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; ++ ++ if (wDevID >= PULSE_WidNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WidNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ memcpy(lpCaps, &(WInDev[wDevID].caps.in), min(dwSize, sizeof(*lpCaps))); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widGetNumDevs [internal] ++ * Context-sanity check here, as if we respond with 0, WINE will move on ++ * to the next wavein driver. ++ */ ++static DWORD widGetNumDevs() { ++ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) ++ return 0; ++ ++ return PULSE_WidNumDevs; ++} ++ ++/************************************************************************** ++ * widDevInterfaceSize [internal] ++ */ ++static DWORD widDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { ++ TRACE("(%u, %p)\n", wDevID, dwParam1); ++ ++ *dwParam1 = MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, ++ NULL, 0 ) * sizeof(WCHAR); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widDevInterface [internal] ++ */ ++static DWORD widDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { ++ if (dwParam2 >= MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, ++ NULL, 0 ) * sizeof(WCHAR)) ++ { ++ MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, ++ dwParam1, dwParam2 / sizeof(WCHAR)); ++ return MMSYSERR_NOERROR; ++ } ++ return MMSYSERR_INVALPARAM; ++} ++ ++/************************************************************************** ++ * widDsDesc [internal] ++ */ ++DWORD widDsDesc(UINT wDevID, PDSDRIVERDESC desc) ++{ ++ *desc = WInDev[wDevID].ds_desc; ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * widMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_widMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser, ++ DWORD_PTR dwParam1, DWORD_PTR dwParam2) { ++ ++ switch (wMsg) { ++ case DRVM_INIT: ++ case DRVM_EXIT: ++ case DRVM_ENABLE: ++ case DRVM_DISABLE: ++ /* FIXME: Pretend this is supported */ ++ return 0; ++ case WIDM_OPEN: return widOpen (wDevID, (DWORD_PTR*)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); ++ case WIDM_CLOSE: return widClose (wDevID, (WINE_WAVEINST*)dwUser); ++ case WIDM_ADDBUFFER: return widAddBuffer ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); ++ case WIDM_PREPARE: return MMSYSERR_NOTSUPPORTED; ++ case WIDM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; ++ case WIDM_GETDEVCAPS: return widGetDevCaps(wDevID, (LPWAVEINCAPSW)dwParam1, dwParam2); ++ case WIDM_GETNUMDEVS: return widGetNumDevs(); ++ case WIDM_GETPOS: return widGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); ++ case WIDM_RESET: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_RESETTING); ++ case WIDM_START: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_STARTING); ++ case WIDM_STOP: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_STOPPING); ++ case DRV_QUERYDEVICEINTERFACESIZE: return widDevInterfaceSize(wDevID, (LPDWORD)dwParam1); ++ case DRV_QUERYDEVICEINTERFACE: return widDevInterface(wDevID, (PWCHAR)dwParam1, dwParam2); ++ case DRV_QUERYDSOUNDIFACE: return MMSYSERR_NOTSUPPORTED; /* Use emulation, as there is no advantage */ ++ case DRV_QUERYDSOUNDDESC: return widDsDesc(wDevID, (PDSDRIVERDESC)dwParam1); ++ default: ++ FIXME("unknown message %d!\n", wMsg); ++ } ++ return MMSYSERR_NOTSUPPORTED; ++} ++ ++#else /* HAVE_PULSEAUDIO */ ++ ++/************************************************************************** ++ * widMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_widMessage(WORD wDevID, WORD wMsg, DWORD dwUser, ++ DWORD dwParam1, DWORD dwParam2) { ++ FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); ++ return MMSYSERR_NOTENABLED; ++} ++ ++#endif /* HAVE_PULSEAUDIO */ +diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c +new file mode 100644 +index 0000000..db2c892 +--- /dev/null ++++ b/dlls/winepulse.drv/waveout.c +@@ -0,0 +1,1086 @@ ++/* ++ * Wine Driver for PulseAudio - WaveOut Functionality ++ * http://pulseaudio.org/ ++ * ++ * Copyright 2009 Arthur Taylor ++ * ++ * Contains code from other wine multimedia drivers. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#include "config.h" ++ ++#include ++ ++#include "windef.h" ++#include "winbase.h" ++#include "wingdi.h" ++#include "winuser.h" ++#include "winnls.h" ++#include "winerror.h" ++#include "mmddk.h" ++ ++#include ++ ++#include "wine/debug.h" ++ ++WINE_DEFAULT_DEBUG_CHANNEL(wave); ++ ++#if HAVE_PULSEAUDIO ++ ++/* state diagram for waveOut writing: ++ * ++ * +---------+-------------+---------------+---------------------------------+ ++ * | state | function | event | new state | ++ * +---------+-------------+---------------+---------------------------------+ ++ * | | open() | | STOPPED | ++ * | PAUSED | write() | | PAUSED | ++ * | STOPPED | write() | | PLAYING | ++ * | PLAYING | write() | HEADER | PLAYING | ++ * | (other) | write() | | | ++ * | (any) | pause() | PAUSING | PAUSED | ++ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | ++ * | PAUSED | reset() | RESETTING | PAUSED | ++ * | (other) | reset() | RESETTING | STOPPED | ++ * | (any) | close() | CLOSING | CLOSED | ++ * +---------+-------------+---------------+---------------------------------+ ++ */ ++ ++/* ++ * - It is currently unknown if pausing in a loop works the same as expected. ++ */ ++ ++/*======================================================================* ++ * WAVE OUT specific PulseAudio Callbacks * ++ *======================================================================*/ ++ ++/************************************************************************** ++ * WAVEOUT_StreamRequestCallback ++ * ++ * Called by the pulse mainloop whenever it wants audio data. ++ */ ++static void WAVEOUT_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata) { ++ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; ++ ++ TRACE("Asking to be fed %u bytes\n", nbytes); ++ ++ /* Make sure that the player/recorder is running */ ++ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { ++ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); ++ } ++} ++ ++/************************************************************************** ++ * WAVEOUT_SinkInputInfoCallback [internal] ++ * ++ * Called by the pulse thread. Used for wodGetVolume. ++ */ ++static void WAVEOUT_SinkInputInfoCallback(pa_context *c, const pa_sink_input_info *i, int eol, void *userdata) { ++ WINE_WAVEINST* wwo = (WINE_WAVEINST*)userdata; ++ if (!eol && i) { ++ for (wwo->volume.channels = 0; wwo->volume.channels != i->volume.channels; wwo->volume.channels++) ++ wwo->volume.values[wwo->volume.channels] = i->volume.values[wwo->volume.channels]; ++ pa_threaded_mainloop_signal(PULSE_ml, 0); ++ } ++} ++ ++/*======================================================================* ++ * "Low level" WAVE OUT implementation * ++ *======================================================================*/ ++ ++/************************************************************************** ++ * 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); ++ ++ switch (wMsg) { ++ case WOM_OPEN: ++ case WOM_CLOSE: ++ case WOM_DONE: ++ if (wwo->wFlags != DCB_NULL && ++ !DriverCallback(wwo->waveDesc.dwCallback, wwo->wFlags, (HDRVR)wwo->waveDesc.hWave, ++ wMsg, wwo->waveDesc.dwInstance, dwParam1, dwParam2)) { ++ WARN("can't notify client !\n"); ++ return MMSYSERR_ERROR; ++ } ++ break; ++ default: ++ FIXME("Unknown callback message %u\n", wMsg); ++ return MMSYSERR_INVALPARAM; ++ } ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodPlayer_BeginWaveHdr [internal] ++ * ++ * Makes the specified lpWaveHdr the currently playing wave header. ++ * If the specified wave header is a begin loop and we're not already in ++ * a loop, setup the loop. ++ */ ++static void wodPlayer_BeginWaveHdr(WINE_WAVEINST* wwo, LPWAVEHDR lpWaveHdr) { ++ wwo->lpPlayPtr = lpWaveHdr; ++ ++ if (!lpWaveHdr) return; ++ ++ if (lpWaveHdr->dwFlags & WHDR_BEGINLOOP) { ++ if (wwo->lpLoopPtr) { ++ WARN("Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr); ++ } else { ++ TRACE("Starting loop (%dx) with %p\n", lpWaveHdr->dwLoops, lpWaveHdr); ++ wwo->lpLoopPtr = lpWaveHdr; ++ /* Windows does not touch WAVEHDR.dwLoops, ++ * so we need to make an internal copy */ ++ wwo->dwLoops = lpWaveHdr->dwLoops; ++ } ++ } ++ wwo->dwPartialOffset = 0; ++} ++ ++/************************************************************************** ++ * wodPlayer_PlayPtrNext [internal] ++ * ++ * Advance the play pointer to the next waveheader, looping if required. ++ */ ++static LPWAVEHDR wodPlayer_PlayPtrNext(WINE_WAVEINST* wwo) { ++ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; ++ ++ wwo->dwPartialOffset = 0; ++ if ((lpWaveHdr->dwFlags & WHDR_ENDLOOP) && wwo->lpLoopPtr) { ++ /* We're at the end of a loop, loop if required */ ++ if (--wwo->dwLoops > 0) { ++ wwo->lpPlayPtr = wwo->lpLoopPtr; ++ } else { ++ /* Handle overlapping loops correctly */ ++ if (wwo->lpLoopPtr != lpWaveHdr && (lpWaveHdr->dwFlags & WHDR_BEGINLOOP)) { ++ FIXME("Correctly handled case ? (ending loop buffer also starts a new loop)\n"); ++ /* shall we consider the END flag for the closing loop or for ++ * the opening one or for both ??? ++ * code assumes for closing loop only ++ */ ++ } else { ++ lpWaveHdr = lpWaveHdr->lpNext; ++ } ++ wwo->lpLoopPtr = NULL; ++ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr); ++ } ++ } else { ++ /* We're not in a loop. Advance to the next wave header */ ++ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr = lpWaveHdr->lpNext); ++ } ++ ++ return lpWaveHdr; ++} ++ ++/************************************************************************** ++ * wodPlayer_CheckReleasing [internal] ++ * ++ * Check to make sure that playback has not stalled. If stalled ask to reduce ++ * the size of the buffer on the pulse server side. ++ */ ++static void wodPlayer_CheckReleasing(WINE_WAVEINST *wwo) { ++ ++ if (wwo->buffer_attr.tlength == -1 && wwo->lpQueuePtr && !wwo->lpPlayPtr && wwo->state == WINE_WS_PLAYING) { ++ const pa_buffer_attr *returned; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ if (wwo->timing_info->playing) { ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return; ++ } ++ ++ /* Try and adjust the buffer attributes so that playback can start. ++ * Because of bugs this call does not work on servers 0.9.11 to 0.9.14. ++ * Once new version of pulseaudio become ubiquitous we will drop ++ * support for versions before 0.9.15 because they have too many bugs. ++ */ ++ ++ wwo->buffer_attr.tlength = wwo->timing_info->write_index; ++ WARN("Asking for new buffer tlength of %llums (%u bytes)\n", ++ pa_bytes_to_usec(wwo->buffer_attr.tlength, &wwo->sample_spec) / 1000, ++ wwo->buffer_attr.tlength); ++ ++ if (pa_context_get_server_protocol_version(PULSE_context) < 15) ++ ERR("Might get disconnected because of a bug in this pulseaudio server version.\n"); ++ ++ 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("Can't get the buffer size needed. Triggering and hoping for the best.\n"); ++ PULSE_WaitForOperation(pa_stream_trigger(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ } ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++} ++ ++/************************************************************************** ++ * wodPlayer_NotifyCompletions [internal] ++ * ++ * Notifies the client of wavehdr completion starting from lpQueuePtr and ++ * stopping when hitting an unwritten wavehdr, the beginning of a loop or a ++ * wavehdr that has not been played, when referenced to the time parameter. ++ */ ++static DWORD wodPlayer_NotifyCompletions(WINE_WAVEINST* wwo, BOOL force, pa_usec_t time) { ++ LPWAVEHDR lpWaveHdr = wwo->lpQueuePtr; ++ pa_usec_t wait; ++ ++ while (lpWaveHdr) { ++ if (!force) { ++ /* Start from lpQueuePtr and keep notifying until: ++ * - we hit an unwritten wavehdr ++ * - we hit the beginning of a running loop ++ * - we hit a wavehdr which hasn't finished playing ++ */ ++ if (lpWaveHdr == wwo->lpLoopPtr) { TRACE("loop %p\n", lpWaveHdr); return INFINITE; } ++ if (lpWaveHdr == wwo->lpPlayPtr) { TRACE("play %p\n", lpWaveHdr); return INFINITE; } ++ ++ /* See if this data has been played, and if not, return when it will have been */ ++ wait = pa_bytes_to_usec(lpWaveHdr->reserved + lpWaveHdr->dwBufferLength, &wwo->sample_spec); ++ if (wait >= time) { ++ wait = ((wait - time) + 999) / 1000; ++ return wait ?: 1; ++ } ++ } ++ ++ /* return the wavehdr */ ++ wwo->lpQueuePtr = lpWaveHdr->lpNext; ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ ++ wodPlayer_NotifyClient(wwo, WOM_DONE, (DWORD)lpWaveHdr, 0); ++ lpWaveHdr = wwo->lpQueuePtr; ++ } ++ /* No more wavehdrs */ ++ TRACE("Empty queue\n"); ++ return INFINITE; ++} ++ ++/************************************************************************** ++ * wodPlayer_WriteMax [internal] ++ * ++ * 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) { ++ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; ++ size_t nbytes; ++ ++ nbytes = min(lpWaveHdr->dwBufferLength - wwo->dwPartialOffset, *space); ++ ++ TRACE("Writing wavehdr %p.%u[%u]\n", lpWaveHdr, wwo->dwPartialOffset, lpWaveHdr->dwBufferLength); ++ pa_stream_write(wwo->stream, lpWaveHdr->lpData + wwo->dwPartialOffset, nbytes, NULL, 0, PA_SEEK_RELATIVE); ++ ++ /* Check to see if we wrote all of the wavehdr */ ++ if ((wwo->dwPartialOffset += nbytes) >= lpWaveHdr->dwBufferLength) ++ wodPlayer_PlayPtrNext(wwo); ++ ++ *space -= nbytes; ++ ++ return nbytes; ++} ++ ++/************************************************************************** ++ * wodPlayer_Feed [internal] ++ * ++ * Feed as much sound data as we can into pulse using wodPlayer_WriteMax. ++ * size_t space _must_ have come from either pa_stream_writable_size() or ++ * the value from a stream write callback, as if it isn't you run the risk ++ * of a buffer overflow in which audio data will be lost. ++ */ ++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 || ++ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) ++ return; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ /* Feed from a partial wavehdr */ ++ if (wwo->lpPlayPtr && wwo->dwPartialOffset != 0) ++ wodPlayer_WriteMax(wwo, &space); ++ ++ /* Feed wavehdrs until we run out of wavehdrs or buffer space */ ++ 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); ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++} ++ ++/************************************************************************** ++ * wodPlayer_Reset [internal] ++ * ++ * wodPlayer helper. Resets current output stream. ++ */ ++static void wodPlayer_Reset(WINE_WAVEINST* wwo) { ++ enum win_wm_message msg; ++ DWORD param; ++ HANDLE ev; ++ ++ TRACE("(%p)\n", wwo); ++ ++ /* Remove any buffer */ ++ wodPlayer_NotifyCompletions(wwo, TRUE, 0); ++ ++ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; ++ if (wwo->state != WINE_WS_PAUSED) ++ wwo->state = WINE_WS_STOPPED; ++ ++ wwo->dwPartialOffset = 0; ++ ++ if (!wwo->stream || ++ !PULSE_context || ++ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) { ++ return; ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ /* Flush the output buffer of written data*/ ++ PULSE_WaitForOperation(pa_stream_flush(wwo->stream, PULSE_StreamSuccessCallback, NULL)); ++ ++ /* Reset the written byte count as some data may have been flushed */ ++ if (wwo->timing_info->write_index_corrupt) ++ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ ++ wwo->dwLastReset = wwo->timing_info->write_index; ++ ++ /* Return all pending headers in queue */ ++ EnterCriticalSection(&wwo->msgRing.msg_crst); ++ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { ++ if (msg != WINE_WM_HEADER) { ++ SetEvent(ev); ++ continue; ++ } ++ ((LPWAVEHDR)param)->dwFlags &= ~WHDR_INQUEUE; ++ ((LPWAVEHDR)param)->dwFlags |= WHDR_DONE; ++ wodPlayer_NotifyClient(wwo, WOM_DONE, param, 0); ++ } ++ PULSE_ResetRingMessage(&wwo->msgRing); ++ LeaveCriticalSection(&wwo->msgRing.msg_crst); ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++} ++ ++/************************************************************************** ++ * wodPlayer_GetStreamTime [internal] ++ * ++ * Returns how many microseconds into the playback the audio stream is. Does ++ * not reset to 0 on Reset() calls. Better than pa_stream_get_time() as it is ++ * more constant. ++ */ ++static pa_usec_t WAVEOUT_GetStreamTime(WINE_WAVEINST *wwo) { ++ pa_usec_t time, temp; ++ const pa_timing_info *t; ++ ++ t = wwo->timing_info; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ ++ time = pa_bytes_to_usec(t->read_index, &wwo->sample_spec); ++ if (t->read_index_corrupt) { ++ WARN("Read index corrupt?!\n"); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return time; ++ } ++ ++ if (t->playing) { ++ time += pa_timeval_age(&t->timestamp); ++ ++ temp = t->transport_usec + t->configured_sink_usec; ++ if (temp > wwo->buffer_attr.tlength) temp = wwo->buffer_attr.tlength; ++ if (temp < time) time -= temp; else time = 0; ++ } ++ ++ /* Make sure we haven't claimed to have played more than we have written */ ++ temp = pa_bytes_to_usec(t->write_index, &wwo->sample_spec); ++ if (time > temp) time = temp; ++ ++ /* No queued buffer shows an underrun, so we lie */ ++ if (!wwo->lpQueuePtr) time = temp; ++ ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ return time; ++} ++ ++/************************************************************************** ++ * wodPlayer_ProcessMessages [internal] ++ */ ++static DWORD wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { ++ LPWAVEHDR lpWaveHdr; ++ enum win_wm_message msg; ++ DWORD param, msgcount = 0; ++ 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: ++ wwo->state = WINE_WS_PAUSED; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwo->stream, 1, PULSE_StreamSuccessCallback, wwo)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_RESTARTING: ++ if (wwo->state == WINE_WS_PAUSED) { ++ 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 */ ++ PULSE_WaitForOperation(pa_stream_trigger(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_HEADER: ++ lpWaveHdr = (LPWAVEHDR)param; ++ /* insert buffer at the end of queue */ ++ { ++ LPWAVEHDR *wh; ++ for (wh = &(wwo->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); ++ *wh = lpWaveHdr; ++ } ++ ++ if (!wwo->lpPlayPtr) ++ wodPlayer_BeginWaveHdr(wwo,lpWaveHdr); ++ if (wwo->state == WINE_WS_STOPPED) ++ wwo->state = WINE_WS_PLAYING; ++ ++ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_RESETTING: ++ wodPlayer_Reset(wwo); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_BREAKLOOP: ++ if (wwo->state == WINE_WS_PLAYING && wwo->lpLoopPtr != NULL) ++ /* ensure exit at end of current loop */ ++ wwo->dwLoops = 1; ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_FEED: /* Sent by the pulse thread */ ++ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_XRUN: /* Sent by the pulse thread */ ++ 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); ++ ++ /* Underrun means playback started, so don't allow future setting of the buffer attributes */ ++ if (wwo->buffer_attr.tlength == (uint32_t)-1) wwo->buffer_attr.tlength = 0; ++ ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_CLOSING: /* If param = 1, close because of a failure */ ++ wwo->hThread = NULL; ++ if ((DWORD)param == 1) { ++ /* If we are here, the stream has failed */ ++ wwo->state = WINE_WS_FAILED; ++ SetEvent(ev); ++ PULSE_DestroyRingMessage(&wwo->msgRing); ++ wodPlayer_NotifyCompletions(wwo, TRUE, 0); ++ wodPlayer_NotifyClient(wwo, WOM_CLOSE, 0L, 0L); ++ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_disconnect(wwo->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ TRACE("Thread exiting because of failure.\n"); ++ ExitThread(1); ++ /* Stream instance will get dereferenced in wod_Close */ ++ } ++ wwo->state = WINE_WS_CLOSED; ++ /* sanity check: this should not happen since the device must have been reset before */ ++ if (wwo->lpQueuePtr || wwo->lpPlayPtr) ERR("out of sync\n"); ++ SetEvent(ev); ++ TRACE("Thread exiting.\n"); ++ ExitThread(0); ++ /* shouldn't go here */ ++ ++ default: ++ FIXME("unknown message %d\n", msg); ++ break; ++ } ++ } ++ ++ return msgcount; ++} ++ ++/************************************************************************** ++ * wodPlayer [internal] ++ * ++ * The thread which is responsible for returning WaveHdrs via DriverCallback, ++ * the writing of queued WaveHdrs, and all pause / reset stream management. ++ */ ++static DWORD CALLBACK wodPlayer(LPVOID lpParam) { ++ WINE_WAVEINST *wwo = (WINE_WAVEINST*)lpParam; ++ DWORD dwSleepTime = INFINITE; ++ ++ wwo->state = WINE_WS_STOPPED; ++ SetEvent(wwo->hStartUpEvent); ++ ++ /* Wait for the shortest time before an action is required. If there are ++ * no pending actions, wait forever for a command. */ ++ for (;;) { ++ 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) ++ wodPlayer_CheckReleasing(wwo); ++ ++ /* If there is audio playing, return headers and get next timeout */ ++ if (wwo->state == WINE_WS_PLAYING) { ++ dwSleepTime = wodPlayer_NotifyCompletions(wwo, FALSE, WAVEOUT_GetStreamTime(wwo)); ++ } else ++ dwSleepTime = INFINITE; ++ } ++} ++ ++/************************************************************************** ++ * wodOpen [internal] ++ * ++ * Create a new pa_stream and connect it to a sink while creating a new ++ * WINE_WAVEINST to represent the device to the windows application. ++ */ ++static DWORD wodOpen(WORD wDevID, DWORD_PTR *lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { ++ WINE_WAVEDEV *wdo; ++ WINE_WAVEINST *wwo = NULL; ++ DWORD ret = MMSYSERR_NOERROR; ++ pa_stream_flags_t stream_flags; ++ ++ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); ++ if (lpDesc == NULL) { ++ WARN("Invalid Parameter!\n"); ++ return MMSYSERR_INVALPARAM; ++ } ++ ++ if (wDevID >= PULSE_WodNumDevs) { ++ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_BADDEVICEID; ++ } ++ wdo = &WOutDev[wDevID]; ++ ++ wwo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_WAVEINST)); ++ if (!wwo) { ++ WARN("Out of memory?!\n"); ++ return MMSYSERR_NOMEM; ++ } ++ *lpdwUser = (DWORD_PTR)wwo; ++ ++ /* check to see if format is supported and make pa_sample_spec struct */ ++ if (!PULSE_SetupFormat(lpDesc->lpFormat, &wwo->sample_spec)) { ++ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ ret = WAVERR_BADFORMAT; ++ goto exit; ++ } ++ ++ /* Check to see if this was just a query */ ++ if (dwFlags & WAVE_FORMAT_QUERY) { ++ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", ++ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, ++ lpDesc->lpFormat->nSamplesPerSec); ++ ret = MMSYSERR_NOERROR; ++ goto exit; ++ } ++ ++ if (TRACE_ON(wave)) { ++ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; ++ pa_sample_spec_snprint(t, sizeof(t), &wwo->sample_spec); ++ TRACE("Sample spec '%s'\n", t); ++ } ++ ++ wwo->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); ++ wwo->waveDesc = *lpDesc; ++ PULSE_InitRingMessage(&wwo->msgRing); ++ ++ wwo->stream = pa_stream_new(PULSE_context, "WaveOut", &wwo->sample_spec, NULL); ++ /* If server doesn't support sample_spec, it will error out here (re: 24bit) */ ++ if (!wwo->stream) { ++ ret = WAVERR_BADFORMAT; ++ goto exit; ++ } ++ ++ /* Setup callbacks */ ++ pa_stream_set_write_callback (wwo->stream, WAVEOUT_StreamRequestCallback, wwo); ++ pa_stream_set_state_callback (wwo->stream, PULSE_StreamStateCallback, wwo); ++ pa_stream_set_underflow_callback (wwo->stream, PULSE_StreamUnderflowCallback, wwo); ++ pa_stream_set_moved_callback (wwo->stream, PULSE_StreamMovedCallback, wwo); ++ pa_stream_set_suspended_callback (wwo->stream, PULSE_StreamSuspendedCallback, wwo); ++ ++ /* Setup Stream Flags */ ++ stream_flags = PA_STREAM_AUTO_TIMING_UPDATE; ++#if PA_API_VERSION >= 12 ++ stream_flags |= PA_STREAM_ADJUST_LATENCY; ++#endif ++ ++ /* Blank (but don't send) Buffer Attributes ++ * Note the maxlength bug on old servers */ ++ wwo->buffer_attr.prebuf = (uint32_t)-1; ++ wwo->buffer_attr.tlength = (uint32_t)-1; ++ wwo->buffer_attr.minreq = (uint32_t)-1; ++ wwo->buffer_attr.maxlength = ++ pa_context_get_server_protocol_version(PULSE_context) > 12 ? ++ (uint32_t)-1 : 1048576; /* 2^20 */ ++ ++ /* Try and connect */ ++ TRACE("Connecting stream for playback on %s.\n", wdo->device_name); ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_connect_playback(wwo->stream, wdo->device_name, NULL, stream_flags, NULL, NULL); ++ ++ /* Wait for connection */ ++ for (;;) { ++ pa_context_state_t cstate = pa_context_get_state(PULSE_context); ++ pa_stream_state_t sstate = pa_stream_get_state(wwo->stream); ++ ++ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || ++ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { ++ ERR("Failed to connect stream context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ret = MMSYSERR_NODRIVER; ++ goto exit; ++ } ++ ++ if (sstate == PA_STREAM_READY) ++ break; ++ ++ pa_threaded_mainloop_wait(PULSE_ml); ++ } ++ TRACE("(%p)->stream connected for playback.\n", wwo); ++ ++ /* Get the pa_timing_info structure */ ++ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); ++ wwo->timing_info = pa_stream_get_timing_info(wwo->stream); ++ assert(wwo->timing_info); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ /* Create and start the wodPlayer() thread to manage playback */ ++ wwo->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); ++ wwo->hThread = CreateThread(NULL, 0, wodPlayer, (LPVOID)wwo, 0, &(wwo->dwThreadID)); ++ if (wwo->hThread) ++ SetThreadPriority(wwo->hThread, THREAD_PRIORITY_TIME_CRITICAL); ++ else { ++ ERR("Thread creation for the wodPlayer failed!\n"); ++ ret = MMSYSERR_NOMEM; ++ goto exit; ++ } ++ WaitForSingleObject(wwo->hStartUpEvent, INFINITE); ++ CloseHandle(wwo->hStartUpEvent); ++ wwo->hStartUpEvent = INVALID_HANDLE_VALUE; ++ ++ return wodPlayer_NotifyClient (wwo, WOM_OPEN, 0L, 0L); ++ ++exit: ++ if (!wwo) ++ return ret; ++ ++ if (wwo->hStartUpEvent != INVALID_HANDLE_VALUE) ++ CloseHandle(wwo->hStartUpEvent); ++ ++ if (wwo->msgRing.ring_buffer_size > 0) ++ PULSE_DestroyRingMessage(&wwo->msgRing); ++ ++ if (wwo->stream) { ++ if (pa_stream_get_state(wwo->stream) == PA_STREAM_READY) ++ pa_stream_disconnect(wwo->stream); ++ pa_stream_unref(wwo->stream); ++ wwo->stream = NULL; ++ } ++ HeapFree(GetProcessHeap(), 0, wwo); ++ ++ return ret; ++} ++ ++/************************************************************************** ++ * wodClose [internal] ++ */ ++static DWORD wodClose(WINE_WAVEINST *wwo) { ++ DWORD ret; ++ ++ TRACE("(%p);\n", wwo); ++ if (!wwo) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (wwo->state != WINE_WS_FAILED) { ++ if (wwo->lpQueuePtr && wwo->lpPlayPtr) { ++ WARN("buffers still playing !\n"); ++ return WAVERR_STILLPLAYING; ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_drain(wwo->stream, PULSE_StreamSuccessCallback, NULL)); ++ pa_stream_disconnect(wwo->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ if (wwo->hThread != INVALID_HANDLE_VALUE) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_CLOSING, 0, TRUE); ++ ++ PULSE_DestroyRingMessage(&wwo->msgRing); ++ } ++ ++ if (wwo->stream) ++ pa_stream_unref(wwo->stream); ++ ret = wodPlayer_NotifyClient(wwo, WOM_CLOSE, 0L, 0L); ++ ++ HeapFree(GetProcessHeap(), 0, wwo); ++ ++ return ret; ++} ++ ++/************************************************************************** ++ * wodWrite [internal] ++ */ ++static DWORD wodWrite(WINE_WAVEINST *wwo, LPWAVEHDR lpWaveHdr, DWORD dwSize) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) ++ return WAVERR_UNPREPARED; ++ ++ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) ++ return WAVERR_STILLPLAYING; ++ ++ lpWaveHdr->dwFlags &= ~WHDR_DONE; ++ lpWaveHdr->dwFlags |= WHDR_INQUEUE; ++ lpWaveHdr->lpNext = 0; ++ lpWaveHdr->reserved = 0; ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodPause [internal] ++ */ ++static DWORD wodPause(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_PAUSING, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodGetPosition [internal] ++ */ ++static DWORD wodGetPosition(WINE_WAVEINST *wwo, LPMMTIME lpTime, DWORD uSize) { ++ pa_usec_t time, temp; ++ ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (lpTime == NULL) return MMSYSERR_INVALPARAM; ++ ++ time = WAVEOUT_GetStreamTime(wwo); ++ ++ temp = pa_bytes_to_usec(wwo->dwLastReset, &wwo->sample_spec); ++ if (time > temp) time -= temp; else time = 0; ++ ++ return PULSE_UsecToMMTime(time, lpTime, &wwo->sample_spec); ++} ++/************************************************************************** ++ * wodBreakLoop [internal] ++ */ ++static DWORD wodBreakLoop(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_BREAKLOOP, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodGetDevCaps [internal] ++ */ ++static DWORD wodGetDevCaps(DWORD wDevID, LPWAVEOUTCAPSW lpCaps, DWORD dwSize) { ++ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); ++ ++ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; ++ ++ if (wDevID >= PULSE_WodNumDevs) { ++ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ memcpy(lpCaps, &(WOutDev[wDevID].caps.out), min(dwSize, sizeof(*lpCaps))); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodGetNumDevs [internal] ++ * Context-sanity check here, as if we respond with 0, WINE will move on ++ * to the next waveout driver. ++ */ ++static DWORD wodGetNumDevs() { ++ if (!PULSE_ml || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) ++ return 0; ++ ++ return PULSE_WodNumDevs; ++} ++ ++/************************************************************************** ++ * wodGetVolume [internal] ++ */ ++static DWORD wodGetVolume(WINE_WAVEINST *wwo, LPDWORD lpdwVol) { ++ float value1, value2; ++ DWORD wleft, wright; ++ ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ TRACE("(%p, %p);\n", wwo, lpdwVol); ++ ++ if (lpdwVol == NULL) ++ return MMSYSERR_NOTENABLED; ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (wwo->stream && PULSE_context && pa_context_get_state(PULSE_context) == PA_CONTEXT_READY && ++ pa_stream_get_state(wwo->stream) == PA_STREAM_READY) { ++ PULSE_WaitForOperation(pa_context_get_sink_input_info(PULSE_context, pa_stream_get_index(wwo->stream), WAVEOUT_SinkInputInfoCallback, wwo)); ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ ++ if (wwo->volume.channels == 2) { ++ value1 = pa_sw_volume_to_dB(wwo->volume.values[0]); ++ value2 = pa_sw_volume_to_dB(wwo->volume.values[1]); ++ } else { ++ value1 = pa_sw_volume_to_dB(pa_cvolume_avg(&wwo->volume)); ++ value2 = value1; ++ } ++ ++ if (value1 < -60) ++ wleft = 0; ++ else ++ ++ if (value2 < -60) ++ wright = 0; ++ else ++ wright = 0xFFFFl - ((value2 / -60)*(float)0xFFFFl); ++ ++ if (wleft > 0xFFFFl) ++ wleft = 0xFFFFl; ++ if (wright > 0xFFFFl) ++ wright = 0xFFFFl; ++ ++ *lpdwVol = (WORD)wleft + (WORD)(wright << 16); ++ ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodSetVolume [internal] ++ */ ++static DWORD wodSetVolume(WINE_WAVEINST *wwo, DWORD dwParam1) { ++ double value1, value2; ++ ++ TRACE("(%p, %08X);\n", wwo, dwParam1); ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ /* waveOut volumes are /supposed/ to be logarithmic */ ++ value1 = LOWORD(dwParam1) == 0 ? PA_DECIBEL_MININFTY : ((float)(0xFFFFl - LOWORD(dwParam1))/0xFFFFl) * -60.0; ++ value2 = HIWORD(dwParam1) == 0 ? PA_DECIBEL_MININFTY : ((float)(0xFFFFl - HIWORD(dwParam1))/0xFFFFl) * -60.0; ++ ++ if (wwo->sample_spec.channels == 2) { ++ wwo->volume.channels = 2; ++ wwo->volume.values[0] = pa_sw_volume_from_dB(value1); ++ wwo->volume.values[1] = pa_sw_volume_from_dB(value2); ++ } else { ++ if (value1 != value2) FIXME("Non-stereo streams can't pan!\n"); ++ wwo->volume.channels = wwo->sample_spec.channels; ++ pa_cvolume_set(&wwo->volume, wwo->volume.channels, pa_sw_volume_from_dB(max(value1, value2))); ++ } ++ ++ if (TRACE_ON(wave)) { ++ char s[PA_CVOLUME_SNPRINT_MAX]; ++ pa_cvolume_snprint(s, PA_CVOLUME_SNPRINT_MAX, &wwo->volume); ++ TRACE("%s\n", s); ++ } ++ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ if (!wwo->stream || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || ++ pa_stream_get_state(wwo->stream) != PA_STREAM_READY || !pa_cvolume_valid(&wwo->volume)) { ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return MMSYSERR_NOERROR; ++ } ++ ++ PULSE_WaitForOperation(pa_context_set_sink_input_volume(PULSE_context, ++ pa_stream_get_index(wwo->stream), &wwo->volume, ++ PULSE_ContextSuccessCallback, wwo)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodRestart [internal] ++ */ ++static DWORD wodRestart(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ if (wwo->state == WINE_WS_PAUSED) ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESTARTING, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodReset [internal] ++ */ ++static DWORD wodReset(WINE_WAVEINST *wwo) { ++ if (!wwo || wwo->state == WINE_WS_FAILED) { ++ WARN("Stream instance invalid.\n"); ++ return MMSYSERR_INVALHANDLE; ++ } ++ ++ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESETTING, 0, TRUE); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodDevInterfaceSize [internal] ++ */ ++static DWORD wodDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { ++ ++ *dwParam1 = MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, NULL, 0) * sizeof(WCHAR); ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodDevInterface [internal] ++ */ ++static DWORD wodDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { ++ if (dwParam2 >= MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, ++ NULL, 0 ) * sizeof(WCHAR)) ++ { ++ MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, ++ dwParam1, dwParam2 / sizeof(WCHAR)); ++ return MMSYSERR_NOERROR; ++ } ++ return MMSYSERR_INVALPARAM; ++} ++ ++DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc) { ++ TRACE("(%u, %p)\n", wDevID, desc); ++ *desc = WOutDev[wDevID].ds_desc; ++ return MMSYSERR_NOERROR; ++} ++ ++/************************************************************************** ++ * wodMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { ++ ++ switch (wMsg) { ++ ++ case DRVM_INIT: ++ case DRVM_EXIT: ++ case DRVM_ENABLE: ++ case DRVM_DISABLE: ++ return 0; ++ ++ /* WaveOut Playback related functions */ ++ case WODM_OPEN: return wodOpen (wDevID, (DWORD_PTR*)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); ++ case WODM_CLOSE: return wodClose ((WINE_WAVEINST*)dwUser); ++ case WODM_WRITE: return wodWrite ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); ++ case WODM_PAUSE: return wodPause ((WINE_WAVEINST*)dwUser); ++ case WODM_GETPOS: return wodGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); ++ case WODM_BREAKLOOP: return wodBreakLoop ((WINE_WAVEINST*)dwUser); ++ case WODM_RESTART: return wodRestart ((WINE_WAVEINST*)dwUser); ++ case WODM_RESET: return wodReset ((WINE_WAVEINST*)dwUser); ++ ++ case WODM_GETVOLUME: return wodGetVolume ((WINE_WAVEINST*)dwUser, (LPDWORD)dwParam1); ++ case WODM_SETVOLUME: return wodSetVolume ((WINE_WAVEINST*)dwUser, dwParam1); ++ ++ case WODM_PREPARE: ++ case WODM_UNPREPARE: ++ ++ case WODM_GETPITCH: ++ case WODM_SETPITCH: ++ ++ case WODM_GETPLAYBACKRATE: ++ case WODM_SETPLAYBACKRATE: ++ return MMSYSERR_NOTSUPPORTED; ++ ++ /* Device enumeration, directsound and capabilities */ ++ case WODM_GETDEVCAPS: return wodGetDevCaps (wDevID, (LPWAVEOUTCAPSW)dwParam1, dwParam2); ++ case WODM_GETNUMDEVS: return wodGetNumDevs (); ++ case DRV_QUERYDEVICEINTERFACESIZE: return wodDevInterfaceSize (wDevID, (LPDWORD)dwParam1); ++ case DRV_QUERYDEVICEINTERFACE: return wodDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); ++ case DRV_QUERYDSOUNDIFACE: return MMSYSERR_NOTSUPPORTED; ++ case DRV_QUERYDSOUNDDESC: return wodDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); ++ ++ default: ++ FIXME("unknown message %d!\n", wMsg); ++ } ++ return MMSYSERR_NOTSUPPORTED; ++} ++ ++#else /* !HAVE_PULSEAUDIO */ ++ ++/************************************************************************** ++ * wodMessage (WINEPULSE.@) ++ */ ++DWORD WINAPI PULSE_wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, ++ DWORD dwParam1, DWORD dwParam2) { ++ FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, ++ dwParam1, dwParam2); ++ return MMSYSERR_NOTENABLED; ++} ++ ++#endif /* HAVE_PULSEAUDIO */ +diff --git a/dlls/winepulse.drv/winepulse.drv.spec b/dlls/winepulse.drv/winepulse.drv.spec +new file mode 100644 +index 0000000..1b49460 +--- /dev/null ++++ b/dlls/winepulse.drv/winepulse.drv.spec +@@ -0,0 +1,3 @@ ++@ stdcall -private DriverProc(long long long long long long) PULSE_DriverProc ++@ stdcall -private wodMessage(long long long long long long) PULSE_wodMessage ++@ stdcall -private widMessage(long long long long long long) PULSE_widMessage +diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h +new file mode 100644 +index 0000000..4a834cd +--- /dev/null ++++ b/dlls/winepulse.drv/winepulse.h +@@ -0,0 +1,196 @@ ++/* Definitions for PulseAudio Wine Driver ++ * ++ * Copyright 2009 Arthur Taylor ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Lesser General Public ++ * License as published by the Free Software Foundation; either ++ * version 2.1 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Lesser General Public License for more details. ++ * ++ * You should have received a copy of the GNU Lesser General Public ++ * License along with this library; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ */ ++ ++#ifndef __WINE_CONFIG_H ++# error You must include config.h to use this header ++#endif ++ ++#if defined(HAVE_PULSEAUDIO) && !defined(__WINEPULSE_H) ++#define __WINEPULSE_H ++ ++#include "mmreg.h" ++#include "dsound.h" ++#include "dsdriver.h" ++ ++#include "ks.h" ++#include "ksmedia.h" ++#include "ksguid.h" ++ ++#include ++ ++/* state diagram for waveOut writing: ++ * ++ * +---------+-------------+---------------+---------------------------------+ ++ * | state | function | event | new state | ++ * +---------+-------------+---------------+---------------------------------+ ++ * | | open() | | STOPPED | ++ * | PAUSED | write() | | PAUSED | ++ * | STOPPED | write() | | PLAYING | ++ * | PLAYING | write() | HEADER | PLAYING | ++ * | (other) | write() | | | ++ * | (any) | pause() | PAUSING | PAUSED | ++ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | ++ * | (any) | reset() | RESETTING | STOPPED | ++ * | (any) | close() | CLOSING | CLOSED | ++ * +---------+-------------+---------------+---------------------------------+ ++ */ ++ ++/* states of the playing device */ ++#define WINE_WS_PLAYING 1 ++#define WINE_WS_PAUSED 2 ++#define WINE_WS_STOPPED 3 ++#define WINE_WS_CLOSED 4 ++#define WINE_WS_FAILED 5 ++ ++#define PULSE_ALL_FORMATS \ ++ WAVE_FORMAT_1M08 | /* Mono 11025Hz 8-bit */\ ++ WAVE_FORMAT_1M16 | /* Mono 11025Hz 16-bit */\ ++ WAVE_FORMAT_1S08 | /* Stereo 11025Hz 8-bit */\ ++ WAVE_FORMAT_1S16 | /* Stereo 11025Hz 16-bit */\ ++ WAVE_FORMAT_2M08 | /* Mono 22050Hz 8-bit */\ ++ WAVE_FORMAT_2M16 | /* Mono 22050Hz 16-bit */\ ++ WAVE_FORMAT_2S08 | /* Stereo 22050Hz 8-bit */\ ++ WAVE_FORMAT_2S16 | /* Stereo 22050Hz 16-bit */\ ++ WAVE_FORMAT_4M08 | /* Mono 44100Hz 8-bit */\ ++ WAVE_FORMAT_4M16 | /* Mono 44100Hz 16-bit */\ ++ WAVE_FORMAT_4S08 | /* Stereo 44100Hz 8-bit */\ ++ WAVE_FORMAT_4S16 | /* Stereo 44100Hz 16-bit */\ ++ WAVE_FORMAT_48M08 | /* Mono 48000Hz 8-bit */\ ++ WAVE_FORMAT_48S08 | /* Stereo 48000Hz 8-bit */\ ++ WAVE_FORMAT_48M16 | /* Mono 48000Hz 16-bit */\ ++ WAVE_FORMAT_48S16 | /* Stereo 48000Hz 16-bit */\ ++ WAVE_FORMAT_96M08 | /* Mono 96000Hz 8-bit */\ ++ WAVE_FORMAT_96S08 | /* Stereo 96000Hz 8-bit */\ ++ WAVE_FORMAT_96M16 | /* Mono 96000Hz 16-bit */\ ++ WAVE_FORMAT_96S16 /* Stereo 96000Hz 16-bit */ ++ ++/* events to be sent to device */ ++enum win_wm_message { ++ WINE_WM_PAUSING = WM_USER + 1, WINE_WM_RESTARTING, WINE_WM_RESETTING, WINE_WM_HEADER, ++ WINE_WM_BREAKLOOP, WINE_WM_CLOSING, WINE_WM_STARTING, WINE_WM_STOPPING, WINE_WM_XRUN, WINE_WM_FEED ++}; ++ ++typedef struct { ++ enum win_wm_message msg; /* message identifier */ ++ DWORD param; /* parameter for this message */ ++ HANDLE hEvent; /* if message is synchronous, handle of event for synchro */ ++} PULSE_MSG; ++ ++/* implement an in-process message ring for better performance ++ * (compared to passing thru the server) ++ * this ring will be used by the input (resp output) record (resp playback) routine ++ */ ++typedef struct { ++ PULSE_MSG * messages; ++ int ring_buffer_size; ++ int msg_tosave; ++ int msg_toget; ++/* Either pipe or event is used, but that is defined in pulse.c, ++ * since this is a global header we define both here */ ++ int msg_pipe[2]; ++ HANDLE msg_event; ++ CRITICAL_SECTION msg_crst; ++} PULSE_MSG_RING; ++ ++typedef struct WINE_WAVEDEV WINE_WAVEDEV; ++typedef struct WINE_WAVEINST WINE_WAVEINST; ++ ++/* Per-playback/record device */ ++struct WINE_WAVEDEV { ++ char interface_name[MAXPNAMELEN * 2]; ++ char *device_name; ++ pa_cvolume volume; ++ ++ union { ++ WAVEOUTCAPSW out; ++ WAVEINCAPSW in; ++ } caps; ++ ++ /* DirectSound stuff */ ++ DSDRIVERDESC ds_desc; ++ DSDRIVERCAPS ds_caps; ++}; ++ ++/* Per-playback/record instance */ ++struct WINE_WAVEINST { ++ volatile INT state; /* one of the WINE_WS_ manifest constants */ ++ WAVEOPENDESC waveDesc; ++ WORD wFlags; ++ ++ /* PulseAudio specific data */ ++ pa_stream *stream; /* The PulseAudio stream */ ++ const pa_timing_info *timing_info; /* The timing info structure for the stream */ ++ pa_sample_spec sample_spec; /* Sample spec of this stream / device */ ++ pa_cvolume volume; /* Software volume of the stream */ ++ pa_buffer_attr buffer_attr; /* Buffer attribute, may not be used */ ++ ++ /* waveIn / waveOut wavaHdr */ ++ LPWAVEHDR lpQueuePtr; /* Start of queued WAVEHDRs (waiting to be notified) */ ++ LPWAVEHDR lpPlayPtr; /* Start of not yet fully written buffers */ ++ DWORD dwPartialOffset; /* Offset of not yet written bytes in lpPlayPtr */ ++ LPWAVEHDR lpLoopPtr; /* Pointer of first buffer in loop, if any */ ++ DWORD dwLoops; /* Private copy of loop counter */ ++ DWORD dwLastReset; /* When the last reset occured, as pa stream time doesn't reset */ ++ ++ /* waveIn specific */ ++ const void *buffer; /* Pointer to the latest data fragment for recording streams */ ++ DWORD buffer_length; /* How large the latest data fragment is */ ++ DWORD buffer_read_offset; /* How far into latest data fragment we last read */ ++ ++ /* Thread communication and synchronization stuff */ ++ HANDLE hStartUpEvent; ++ HANDLE hThread; ++ DWORD dwThreadID; ++ PULSE_MSG_RING msgRing; ++}; ++ ++/* We establish one context per instance, so make it global to the lib */ ++pa_context *PULSE_context; /* Connection Context */ ++pa_threaded_mainloop *PULSE_ml; /* PA Runtime information */ ++ ++/* WaveIn / WaveOut devices */ ++WINE_WAVEDEV *WOutDev; ++WINE_WAVEDEV *WInDev; ++DWORD PULSE_WodNumDevs; ++DWORD PULSE_WidNumDevs; ++ ++/* pulse.c: PulseAudio Async Callbacks */ ++void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata); ++void PULSE_StreamStateCallback(pa_stream *s, void *userdata); ++void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata); ++void PULSE_StreamSuspendedCallback(pa_stream *s, void *userdata); ++void PULSE_StreamMovedCallback(pa_stream *s, void *userdata); ++void PULSE_ContextSuccessCallback(pa_context *c, int success, void *userdata); ++ ++/* pulse.c: General Functions */ ++void PULSE_WaitForOperation(pa_operation *o); ++BOOL PULSE_SetupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss); ++HRESULT PULSE_UsecToMMTime(pa_usec_t time, LPMMTIME lpTime, const pa_sample_spec *ss); ++ ++/* pulse.c: Message Ring */ ++int PULSE_InitRingMessage(PULSE_MSG_RING* omr); ++int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr); ++void PULSE_ResetRingMessage(PULSE_MSG_RING* omr); ++void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep); ++int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait); ++int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, enum win_wm_message *msg, DWORD *param, HANDLE *hEvent); ++ ++/* pulse.c: Tracing */ ++const char * PULSE_getCmdString(enum win_wm_message msg); ++#endif From 5ed02a6e03fb34816f212be7217434526dc76946 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 24 Jun 2009 10:53:30 +0000 Subject: [PATCH 117/161] - various fixes --- wine-notepad.desktop | 2 +- wine-oleview.desktop | 8 +++++ wine-regedit.desktop | 2 +- wine-wineboot.desktop | 2 +- wine-winhelp.desktop | 4 +-- wine-wordpad.desktop | 8 +++++ wine.menu | 2 +- wine.spec | 71 +++++++++++++++++++++++++++++++++++++++---- 8 files changed, 87 insertions(+), 12 deletions(-) create mode 100644 wine-oleview.desktop create mode 100644 wine-wordpad.desktop diff --git a/wine-notepad.desktop b/wine-notepad.desktop index f341041..fa5a1b1 100644 --- a/wine-notepad.desktop +++ b/wine-notepad.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Name=notepad +Name=Notepad Comment=Text Editor Exec=notepad Terminal=false diff --git a/wine-oleview.desktop b/wine-oleview.desktop new file mode 100644 index 0000000..906f084 --- /dev/null +++ b/wine-oleview.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Wine OLE View +Comment=Windows OLE View +Exec=wine oleview +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=X-Wine; diff --git a/wine-regedit.desktop b/wine-regedit.desktop index 4b81843..7fb1c96 100644 --- a/wine-regedit.desktop +++ b/wine-regedit.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Name=regedit +Name=Regedit Comment=Wine registry editor Exec=regedit Terminal=false diff --git a/wine-wineboot.desktop b/wine-wineboot.desktop index 3b29f99..a29a3f6 100644 --- a/wine-wineboot.desktop +++ b/wine-wineboot.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Name=wineboot +Name=Wine Boot Comment=Simulate restart Exec=wineboot Terminal=false diff --git a/wine-winhelp.desktop b/wine-winhelp.desktop index c439c8a..b9f5285 100644 --- a/wine-winhelp.desktop +++ b/wine-winhelp.desktop @@ -1,7 +1,7 @@ [Desktop Entry] -Name=winhelp +Name=Wine Help Comment=Windows Help Browser -Exec=winhelp +Exec=wine winhlp32 Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-wordpad.desktop b/wine-wordpad.desktop new file mode 100644 index 0000000..d535956 --- /dev/null +++ b/wine-wordpad.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Wine Wordpad +Comment=Text Editor +Exec=wine wordpad +Terminal=false +Type=Application +Encoding=UTF-8 +Categories=X-Wine; diff --git a/wine.menu b/wine.menu index 8cfd94c..5fdb60f 100644 --- a/wine.menu +++ b/wine.menu @@ -4,7 +4,7 @@ Applications - Wine + wine-wine Wine.directory X-Wine diff --git a/wine.spec b/wine.spec index aa0ec3c..5113816 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine Version: 1.1.24 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -31,6 +31,8 @@ Source104: wine-winefile.desktop Source105: wine-winemine.desktop Source106: wine-winhelp.desktop Source107: wine-wineboot.desktop +Source108: wine-wordpad.desktop +Source109: wine-oleview.desktop # desktop dir Source200: wine.menu @@ -106,7 +108,6 @@ Requires: wine-capi = %{version}-%{release} Requires: wine-cms = %{version}-%{release} Requires: wine-desktop = %{version}-%{release} Requires: wine-ldap = %{version}-%{release} -Requires: wine-nas = %{version}-%{release} Requires: wine-tools = %{version}-%{release} Requires: wine-twain = %{version}-%{release} Requires: wine-pulseaudio = %{version}-%{release} @@ -132,6 +133,8 @@ Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig Obsoletes: wine <= 0.9.15-1%{?dist} Obsoletes: wine-arts < 0.9.34 +# fix dns resolution (#492700) +Requires: nss-mdns%{_isa} %description core Wine core package includes the basic wine stuff needed by all other packages. @@ -232,6 +235,22 @@ Requires: wine-core = %{version}-%{release} This package adds a native pulseaudio driver for wine. This is not an official wine audio driver. Please do not report bugs regarding this driver at winehq.org. +%package alsa +Summary: Alsa support for wine +Group: System Environment/Libraries +Requires: wine-core = %{version}-%{release} + +%description alsa +This package adds an alsa driver for wine. + +%package oss +Summary: OSS support for wine +Group: System Environment/Libraries +Requires: wine-core = %{version}-%{release} + +%description oss +This package adds an oss driver for wine. + %prep %setup -q -n %{name}-%{version}-fe %patch1 @@ -318,6 +337,16 @@ desktop-file-install \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ %{SOURCE107} +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + %{SOURCE108} + +desktop-file-install \ + --vendor=fedora \ + --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + %{SOURCE109} + desktop-file-install \ --vendor=fedora \ --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ @@ -383,8 +412,18 @@ update-desktop-database &>/dev/null || : %post capi -p /sbin/ldconfig %postun capi -p /sbin/ldconfig +%post pulseaudio -p /sbin/ldconfig +%postun pulseaudio -p /sbin/ldconfig + +%post alsa -p /sbin/ldconfig +%postun alsa -p /sbin/ldconfig + +%post oss -p /sbin/ldconfig +%postun oss -p /sbin/ldconfig + %files %defattr(-,root,root,-) +# meta package %files core %defattr(-,root,root,-) @@ -678,7 +717,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/windowscodecs.dll.so %{_libdir}/wine/wineaudioio.drv.so %{_libdir}/wine/winedos.dll.so -%{_libdir}/wine/wineoss.drv.so %{_libdir}/wine/winecoreaudio.drv.so %{_libdir}/wine/winejoystick.drv.so %{_libdir}/wine/winex11.drv.so @@ -705,7 +743,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/security.dll.so %{_libdir}/wine/sfc.dll.so %{_datadir}/wine/fonts/ -%{_libdir}/wine/winealsa.drv.so %{_libdir}/wine/wineps.drv.so %{_libdir}/wine/wineps16.drv16 %{_libdir}/wine/d3d8.dll.so @@ -787,16 +824,19 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/write.exe.so %files desktop +%defattr(-,root,root,-) %{_datadir}/applications/fedora-wine-notepad.desktop %{_datadir}/applications/fedora-wine-winefile.desktop %{_datadir}/applications/fedora-wine-winemine.desktop -%{_datadir}/applications/fedora-wine-winhelp.desktop %{_datadir}/applications/fedora-wine-mime-msi.desktop %{_datadir}/applications/fedora-wine.desktop %{_datadir}/applications/fedora-wine-regedit.desktop %{_datadir}/applications/fedora-wine-uninstaller.desktop %{_datadir}/applications/fedora-wine-winecfg.desktop %{_datadir}/applications/fedora-wine-wineboot.desktop +%{_datadir}/applications/fedora-wine-winhelp.desktop +%{_datadir}/applications/fedora-wine-wordpad.desktop +%{_datadir}/applications/fedora-wine-oleview.desktop %{_datadir}/desktop-directories/Wine.directory %{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_initrddir}/wine @@ -860,16 +900,35 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %files pulseaudio +%defattr(-,root,root,-) # winepulse documentation %doc README-FEDORA-PULSEAUDIO %{_libdir}/wine/winepulse.drv.so +%files alsa +%defattr(-,root,root,-) +%{_libdir}/wine/winealsa.drv.so + +%files oss +%defattr(-,root,root,-) +%{_libdir}/wine/wineoss.drv.so + %changelog +* Sun Jun 21 2009 Andreas Bierfert +- 1.1.24-2 +- adjust wine-menu to follow wine behavior (wine-wine instead of Wine) + (fixes #479649, #495953) +- fix wine help desktop entry (#495953, #507154) +- add some more wine application desktop entries (#495953) +- split alsa/oss support into wine-alsa/wine-oss +- drop nas require from wine meta package +- fix dns resolution (#492700) + * Fri Jun 19 2009 Andreas Bierfert - 1.1.24-1 - version upgrade - WinePulse 0.28 -- drop meta package requires for jack and esd +- drop meta package requires for jack and esd (#492983) * Wed Jun 10 2009 Andreas Bierfert - 1.1.23-1 From eb8f3729d66b0d04e0f2ac5de9c5e69a1a0a76b5 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 10 Jul 2009 04:43:04 +0000 Subject: [PATCH 118/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine.spec | 17 ++++++++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.cvsignore b/.cvsignore index ab65448..4f7d0c4 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.24-fe.tar.bz2 +wine-1.1.25-fe.tar.bz2 diff --git a/sources b/sources index 3ed9b0a..e968abe 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -6879c4fbd2e8cf3c4589465868b021a1 wine-1.1.24-fe.tar.bz2 +e45a112c996c62d76aea3bf7de653089 wine-1.1.25-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 5113816..aa96737 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ Name: wine -Version: 1.1.24 -Release: 2%{?dist} +Version: 1.1.25 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -134,7 +134,8 @@ Requires(postun): /sbin/ldconfig Obsoletes: wine <= 0.9.15-1%{?dist} Obsoletes: wine-arts < 0.9.34 # fix dns resolution (#492700) -Requires: nss-mdns%{_isa} +# require both to be sure 64bit is present as well... +Requires: nss-mdns nss-mdns%{_isa} %description core Wine core package includes the basic wine stuff needed by all other packages. @@ -536,6 +537,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dpnhpast.dll.so %{_libdir}/wine/dpnlobby.dll.so %{_libdir}/wine/dpwsockx.dll.so +%{_libdir}/wine/drmclien.dll.so %{_libdir}/wine/dsound.dll.so %{_libdir}/wine/dssenh.dll.so %{_libdir}/wine/dswave.dll.so @@ -664,6 +666,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/rpcrt4.dll.so %{_libdir}/wine/rsabase.dll.so %{_libdir}/wine/rsaenh.dll.so +%{_libdir}/wine/rtutils.dll.so %{_libdir}/wine/sccbase.dll.so %{_libdir}/wine/schannel.dll.so %{_libdir}/wine/secur32.dll.so @@ -914,6 +917,14 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wineoss.drv.so %changelog +* Thu Jul 09 2009 Andreas Bierfert +- 1.1.25-1 +- version upgrade (#509648) + +* Mon Jun 29 2009 Andreas Bierfert +- 1.1.24-3 +- pull in nss correctly on x86_64 + * Sun Jun 21 2009 Andreas Bierfert - 1.1.24-2 - adjust wine-menu to follow wine behavior (wine-wine instead of Wine) From 25ed09a3e3898bb44036dae35d5801cc7247af62 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 19 Jul 2009 10:47:49 +0000 Subject: [PATCH 119/161] - 1.1.26-1 - version upgrade - WinePulse 0.29 - require Xrender isa for x86_64 (#510947) --- .cvsignore | 2 +- ... => adding-pulseaudio-to-winecfg-0.3.patch | 138 +++++++++--------- sources | 2 +- wine.spec | 18 ++- ...patch => winepulse-0.29-configure.ac.patch | 12 +- winepulse-0.28.patch => winepulse-0.29.patch | 73 ++++----- 6 files changed, 118 insertions(+), 127 deletions(-) rename adding-pulseaudio-to-winecfg.patch => adding-pulseaudio-to-winecfg-0.3.patch (86%) rename winepulse-0.17-configure.ac.patch => winepulse-0.29-configure.ac.patch (90%) rename winepulse-0.28.patch => winepulse-0.29.patch (98%) diff --git a/.cvsignore b/.cvsignore index 4f7d0c4..36f3eca 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.25-fe.tar.bz2 +wine-1.1.26-fe.tar.bz2 diff --git a/adding-pulseaudio-to-winecfg.patch b/adding-pulseaudio-to-winecfg-0.3.patch similarity index 86% rename from adding-pulseaudio-to-winecfg.patch rename to adding-pulseaudio-to-winecfg-0.3.patch index eb1ffd6..7ee1060 100644 --- a/adding-pulseaudio-to-winecfg.patch +++ b/adding-pulseaudio-to-winecfg-0.3.patch @@ -1,8 +1,8 @@ diff --git a/programs/winecfg/Bg.rc b/programs/winecfg/Bg.rc -index 8861657..cf91012 100644 +index 00cfbe8..ce2c8c7 100644 --- a/programs/winecfg/Bg.rc +++ b/programs/winecfg/Bg.rc -@@ -274,6 +274,7 @@ BEGIN +@@ -277,6 +277,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -11,10 +11,10 @@ index 8861657..cf91012 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Cs.rc b/programs/winecfg/Cs.rc -index 07f035f..8897237 100644 +index b34dd06..348153c 100644 --- a/programs/winecfg/Cs.rc +++ b/programs/winecfg/Cs.rc -@@ -273,6 +273,7 @@ BEGIN +@@ -277,6 +277,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardn" IDS_ACCEL_BASIC "Zkladn" IDS_ACCEL_EMULATION "Emulace" @@ -23,10 +23,10 @@ index 07f035f..8897237 100644 IDS_DRIVER_ESOUND "Ovlada EsounD" IDS_DRIVER_OSS "Ovlada OSS" diff --git a/programs/winecfg/Da.rc b/programs/winecfg/Da.rc -index 1d655ad..a1c9653 100644 +index 62b781b..a604ea3 100644 --- a/programs/winecfg/Da.rc +++ b/programs/winecfg/Da.rc -@@ -268,6 +268,7 @@ BEGIN +@@ -271,6 +271,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grundlggende" IDS_ACCEL_EMULATION "Emulring" @@ -35,10 +35,10 @@ index 1d655ad..a1c9653 100644 IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/De.rc b/programs/winecfg/De.rc -index 9ed3d63..614247b 100644 +index 53c412c..8f70399 100644 --- a/programs/winecfg/De.rc +++ b/programs/winecfg/De.rc -@@ -268,6 +268,7 @@ BEGIN +@@ -273,6 +273,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Einfach" IDS_ACCEL_EMULATION "Emulation" @@ -47,10 +47,10 @@ index 9ed3d63..614247b 100644 IDS_DRIVER_ESOUND "EsounD-Treiber" IDS_DRIVER_OSS "OSS-Treiber" diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc -index 5743ba3..b165a81 100644 +index a69b4d9..2d3dc5c 100644 --- a/programs/winecfg/En.rc +++ b/programs/winecfg/En.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -273,6 +273,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -59,10 +59,10 @@ index 5743ba3..b165a81 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc -index 440ea71..dd1b764 100644 +index 2ddce6c..ececfe2 100644 --- a/programs/winecfg/Es.rc +++ b/programs/winecfg/Es.rc -@@ -268,6 +268,7 @@ BEGIN +@@ -271,6 +271,7 @@ BEGIN IDS_ACCEL_STANDARD "Estndar" IDS_ACCEL_BASIC "Bsica" IDS_ACCEL_EMULATION "Emulacin" @@ -71,10 +71,10 @@ index 440ea71..dd1b764 100644 IDS_DRIVER_ESOUND "Manejador EsounD" IDS_DRIVER_OSS "Manejador OSS" diff --git a/programs/winecfg/Fi.rc b/programs/winecfg/Fi.rc -index 1d761f8..e1b1583 100644 +index f6fb85c..ed24bf6 100644 --- a/programs/winecfg/Fi.rc +++ b/programs/winecfg/Fi.rc -@@ -268,6 +268,7 @@ BEGIN +@@ -271,6 +271,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -83,22 +83,22 @@ index 1d761f8..e1b1583 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Fr.rc b/programs/winecfg/Fr.rc -index 818c50f..97a1f44 100644 +index b63adb1..414f440 100644 --- a/programs/winecfg/Fr.rc +++ b/programs/winecfg/Fr.rc -@@ -268,6 +268,7 @@ BEGIN +@@ -275,6 +275,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basique" - IDS_ACCEL_EMULATION "mulation" -+ IDS_DRIVER_PULSE "Pilote PulseAudio" + IDS_ACCEL_EMULATION "Émulation" ++ IDS_DRIVER_PULSE "Pilote PulseAudio" IDS_DRIVER_ALSA "Pilote ALSA" IDS_DRIVER_ESOUND "Pilote EsounD" IDS_DRIVER_OSS "Pilote OSS" diff --git a/programs/winecfg/Hu.rc b/programs/winecfg/Hu.rc -index 5afbf91..4131f5f 100644 +index 0445c77..7756d2b 100644 --- a/programs/winecfg/Hu.rc +++ b/programs/winecfg/Hu.rc -@@ -268,6 +268,7 @@ BEGIN +@@ -271,6 +271,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -107,10 +107,10 @@ index 5afbf91..4131f5f 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Ja.rc b/programs/winecfg/Ja.rc -index 8eaa603..543ed2c 100644 +index a25a953..d690f7f 100644 --- a/programs/winecfg/Ja.rc +++ b/programs/winecfg/Ja.rc -@@ -273,6 +273,7 @@ BEGIN +@@ -276,6 +276,7 @@ BEGIN IDS_ACCEL_STANDARD "標準" IDS_ACCEL_BASIC "基本" IDS_ACCEL_EMULATION "エミュレーション" @@ -119,10 +119,10 @@ index 8eaa603..543ed2c 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc -index ca94b5b..a79cc03 100644 +index c01b841..5c500d5 100644 --- a/programs/winecfg/Ko.rc +++ b/programs/winecfg/Ko.rc -@@ -272,6 +272,7 @@ BEGIN +@@ -275,6 +275,7 @@ BEGIN IDS_ACCEL_STANDARD "ǥ" IDS_ACCEL_BASIC "⺻" IDS_ACCEL_EMULATION "ֹķ̼" @@ -131,10 +131,10 @@ index ca94b5b..a79cc03 100644 IDS_DRIVER_ESOUND "EsounD ̹" IDS_DRIVER_OSS "OSS ̹" diff --git a/programs/winecfg/Nl.rc b/programs/winecfg/Nl.rc -index fb91290..b23e919 100644 +index 99062cf..2683a82 100644 --- a/programs/winecfg/Nl.rc +++ b/programs/winecfg/Nl.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -273,6 +273,7 @@ BEGIN IDS_ACCEL_STANDARD "Standaard" IDS_ACCEL_BASIC "Eenvoudig" IDS_ACCEL_EMULATION "Emulatie" @@ -143,10 +143,10 @@ index fb91290..b23e919 100644 IDS_DRIVER_ESOUND "EsounD Stuurprogramma" IDS_DRIVER_OSS "OSS Stuurprogramma" diff --git a/programs/winecfg/No.rc b/programs/winecfg/No.rc -index aaa64c3..9dd3572 100644 +index 357539e..b2a5eae 100644 --- a/programs/winecfg/No.rc +++ b/programs/winecfg/No.rc -@@ -268,6 +268,7 @@ BEGIN +@@ -271,6 +271,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grunnleggende" IDS_ACCEL_EMULATION "Emulering" @@ -155,10 +155,10 @@ index aaa64c3..9dd3572 100644 IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/Pl.rc b/programs/winecfg/Pl.rc -index c426443..e3bf093 100644 +index 8e1d9a2..bd968de 100644 --- a/programs/winecfg/Pl.rc +++ b/programs/winecfg/Pl.rc -@@ -271,6 +271,7 @@ BEGIN +@@ -274,6 +274,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardowe" IDS_ACCEL_BASIC "Podstawowe" IDS_ACCEL_EMULATION "Emulacja" @@ -167,22 +167,34 @@ index c426443..e3bf093 100644 IDS_DRIVER_ESOUND "Sterownik EsounD" IDS_DRIVER_OSS "Sterownik OSS" diff --git a/programs/winecfg/Pt.rc b/programs/winecfg/Pt.rc -index 830cabf..0ed1dbd 100644 +index e3b02a1..be5acb0 100644 --- a/programs/winecfg/Pt.rc +++ b/programs/winecfg/Pt.rc -@@ -465,6 +465,7 @@ BEGIN - IDS_ACCEL_STANDARD "Padro" - IDS_ACCEL_BASIC "Bsico" - IDS_ACCEL_EMULATION "Emulao" -+ IDS_DRIVER_PULSE "Controlador PulseAudio" +@@ -471,6 +471,7 @@ BEGIN + IDS_ACCEL_STANDARD "Padrão" + IDS_ACCEL_BASIC "Básico" + IDS_ACCEL_EMULATION "Emulação" ++ IDS_DRIVER_PULSE "Controlador PulseAudio" IDS_DRIVER_ALSA "Controlador ALSA" IDS_DRIVER_ESOUND "Controlador EsounD" IDS_DRIVER_OSS "Controlador OSS" +diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc +index c836d60..50317bf 100644 +--- a/programs/winecfg/Ro.rc ++++ b/programs/winecfg/Ro.rc +@@ -273,6 +273,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "De bază" + IDS_ACCEL_EMULATION "Emulare" ++ IDS_DRIVER_PULSE "Driver PulseAudio" + IDS_DRIVER_ALSA "Driver ALSA" + IDS_DRIVER_ESOUND "Driver Esound" + IDS_DRIVER_OSS "Driver OSS" diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc -index 782e1fd..f516399 100644 +index 8d61413..7962c98 100644 --- a/programs/winecfg/Ru.rc +++ b/programs/winecfg/Ru.rc -@@ -272,6 +272,7 @@ BEGIN +@@ -275,6 +275,7 @@ BEGIN IDS_ACCEL_STANDARD "" IDS_ACCEL_BASIC "" IDS_ACCEL_EMULATION "" @@ -191,10 +203,10 @@ index 782e1fd..f516399 100644 IDS_DRIVER_ESOUND "EsounD " IDS_DRIVER_OSS "OSS " diff --git a/programs/winecfg/Si.rc b/programs/winecfg/Si.rc -index 0bd04ef..c8bd35e 100644 +index 87cd239..73544bb 100644 --- a/programs/winecfg/Si.rc +++ b/programs/winecfg/Si.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -273,6 +273,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardno" IDS_ACCEL_BASIC "Osnovno" IDS_ACCEL_EMULATION "Emulacija" @@ -203,10 +215,10 @@ index 0bd04ef..c8bd35e 100644 IDS_DRIVER_ESOUND "EsounD gonilnik" IDS_DRIVER_OSS "OSS gonilnik" diff --git a/programs/winecfg/Sv.rc b/programs/winecfg/Sv.rc -index 49bb236..7efe2c0 100644 +index 113603c..dde6ed5 100644 --- a/programs/winecfg/Sv.rc +++ b/programs/winecfg/Sv.rc -@@ -268,6 +268,7 @@ BEGIN +@@ -271,6 +271,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grundlggande" IDS_ACCEL_EMULATION "Emulering" @@ -215,10 +227,10 @@ index 49bb236..7efe2c0 100644 IDS_DRIVER_ESOUND "EsounD-drivrutin" IDS_DRIVER_OSS "OSS-drivrutin" diff --git a/programs/winecfg/Tr.rc b/programs/winecfg/Tr.rc -index 4157f86..1be23c5 100644 +index 883c0f3..4f6ecb3 100644 --- a/programs/winecfg/Tr.rc +++ b/programs/winecfg/Tr.rc -@@ -268,6 +268,7 @@ BEGIN +@@ -271,6 +271,7 @@ BEGIN IDS_ACCEL_STANDARD "Standart" IDS_ACCEL_BASIC "Temel" IDS_ACCEL_EMULATION "Taklit" @@ -227,10 +239,10 @@ index 4157f86..1be23c5 100644 IDS_DRIVER_ESOUND "EsounD Srcs" IDS_DRIVER_OSS "OSS Srcs" diff --git a/programs/winecfg/Zh.rc b/programs/winecfg/Zh.rc -index 4c18e99..029a26d 100644 +index b483cfe..8617049 100644 --- a/programs/winecfg/Zh.rc +++ b/programs/winecfg/Zh.rc -@@ -271,6 +271,7 @@ BEGIN +@@ -274,6 +274,7 @@ BEGIN IDS_ACCEL_STANDARD "标准" IDS_ACCEL_BASIC "基本" IDS_ACCEL_EMULATION "软件模拟" @@ -239,7 +251,7 @@ index 4c18e99..029a26d 100644 IDS_DRIVER_ESOUND "EsounD 驱动" IDS_DRIVER_OSS "OSS 驱动" diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c -index 8e966a5..9c2cde3 100644 +index 79e62f0..b9a310c 100644 --- a/programs/winecfg/audio.c +++ b/programs/winecfg/audio.c @@ -88,6 +88,7 @@ typedef struct @@ -251,22 +263,22 @@ index 8e966a5..9c2cde3 100644 {IDS_DRIVER_OSS, "oss"}, {IDS_DRIVER_COREAUDIO, "coreaudio"}, diff --git a/programs/winecfg/libraries.c b/programs/winecfg/libraries.c -index 6abe04d..2fa6a95 100644 +index 37cc12b..7c13fad 100644 --- a/programs/winecfg/libraries.c +++ b/programs/winecfg/libraries.c -@@ -67,6 +67,7 @@ static const char * const builtin_only[] = - "user32", - "vdmdbg", - "w32skrnl", +@@ -81,6 +81,7 @@ static const char * const builtin_only[] = + "wineoss.drv", + "wineps", + "wineps.drv", + "winepulse.drv", - "winealsa.drv", - "wineaudioio.drv", - "wined3d", + "winex11.drv", + "winmm", + "wintab32", diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h -index a18fe76..1c4a1e7 100644 +index 88c9e64..05a13de 100644 --- a/programs/winecfg/resource.h +++ b/programs/winecfg/resource.h -@@ -182,7 +182,7 @@ +@@ -186,7 +186,7 @@ #define IDS_ACCEL_BASIC 8302 #define IDS_ACCEL_EMULATION 8303 #define IDS_DRIVER_ALSA 8304 @@ -275,15 +287,3 @@ index a18fe76..1c4a1e7 100644 #define IDS_DRIVER_ESOUND 8306 #define IDS_DRIVER_OSS 8307 #define IDS_DRIVER_JACK 8308 -diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc -index a4b0cad..c065d36 100644 ---- a/programs/winecfg/Ro.rc -+++ b/programs/winecfg/Ro.rc -@@ -270,6 +270,7 @@ - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "De bază" - IDS_ACCEL_EMULATION "Emulare" -+ IDS_DRIVER_PULSE "Driver PulseAudio" - IDS_DRIVER_ALSA "Driver ALSA" - IDS_DRIVER_ESOUND "Driver Esound" - IDS_DRIVER_OSS "Driver OSS" diff --git a/sources b/sources index e968abe..7efb812 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -e45a112c996c62d76aea3bf7de653089 wine-1.1.25-fe.tar.bz2 +7b2affded452ced2b1f45a9b7e6f24da wine-1.1.26-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index aa96737..1e6dc2d 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,5 @@ Name: wine -Version: 1.1.25 +Version: 1.1.26 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -44,9 +44,9 @@ Source300: wine-mime-msi.desktop # explain how to use wine with pulseaudio # 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.17-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse-0.28.patch -Patch402: http://art.ified.ca/downloads/adding-pulseaudio-to-winecfg.patch +Patch400: http://art.ified.ca/downloads/winepulse-0.29-configure.ac.patch +Patch401: http://art.ified.ca/downloads/winepulse-0.29.patch +Patch402: http://art.ified.ca/downloads/adding-pulseaudio-to-winecfg-0.3.patch Source402: README-FEDORA-PULSEAUDIO @@ -136,6 +136,8 @@ Obsoletes: wine-arts < 0.9.34 # fix dns resolution (#492700) # require both to be sure 64bit is present as well... Requires: nss-mdns nss-mdns%{_isa} +# require Xrender isa on x86_64 (#510947) +Requires: libXrender%{_isa} %description core Wine core package includes the basic wine stuff needed by all other packages. @@ -732,6 +734,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winsock.dll16 %{_libdir}/wine/winspool.drv.so %{_libdir}/wine/wmi.dll.so +%{_libdir}/wine/wmiutils.dll.so %{_libdir}/wine/spoolss.dll.so %{_libdir}/wine/winscard.dll.so %{_libdir}/wine/wintab32.dll.so @@ -750,7 +753,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wineps16.drv16 %{_libdir}/wine/d3d8.dll.so %{_libdir}/wine/d3d9.dll.so -%{_libdir}/wine/d3dx8.dll.so %{_libdir}/wine/opengl32.dll.so %{_libdir}/wine/wined3d.dll.so %{_libdir}/wine/dnsapi.dll.so @@ -917,6 +919,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wineoss.drv.so %changelog +* Sat Jul 18 2009 Andreas Bierfert +- 1.1.26-1 +- version upgrade +- WinePulse 0.29 +- require Xrender isa for x86_64 (#510947) + * Thu Jul 09 2009 Andreas Bierfert - 1.1.25-1 - version upgrade (#509648) diff --git a/winepulse-0.17-configure.ac.patch b/winepulse-0.29-configure.ac.patch similarity index 90% rename from winepulse-0.17-configure.ac.patch rename to winepulse-0.29-configure.ac.patch index 776d724..d6c4897 100644 --- a/winepulse-0.17-configure.ac.patch +++ b/winepulse-0.29-configure.ac.patch @@ -1,5 +1,5 @@ diff --git a/configure.ac b/configure.ac -index 57ec39d..2ca94ca 100644 +index 3b805fe..4c2b822 100644 --- a/configure.ac +++ b/configure.ac @@ -58,6 +58,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), @@ -10,15 +10,15 @@ index 57ec39d..2ca94ca 100644 AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) -@@ -1186,6 +1187,24 @@ then +@@ -1253,6 +1254,24 @@ then CFLAGS="$save_CFLAGS" fi +dnl **** Check for PulseAudio **** +if test "x$with_pulse" != "xno"; then + if test "$PKG_CONFIG" != "false"; then -+ AC_MSG_CHECKING([for pulseaudio >= 0.9.8]) -+ if "$PKG_CONFIG" --atleast-version=0.9.8 libpulse; then ++ AC_MSG_CHECKING([for pulseaudio >= 0.9.15]) ++ if "$PKG_CONFIG" --atleast-version=0.9.15 libpulse; then + have_pulseaudio="yes" + else + have_pulseaudio="no" @@ -35,7 +35,7 @@ index 57ec39d..2ca94ca 100644 dnl **** Check for ALSA 1.x **** AC_SUBST(ALSALIBS,"") if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" -@@ -1291,7 +1310,7 @@ dnl **** Check for libodbc **** +@@ -1379,7 +1398,7 @@ dnl **** Check for libodbc **** WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) dnl **** Check for any sound system **** @@ -44,7 +44,7 @@ index 57ec39d..2ca94ca 100644 "$ac_cv_header_sys_soundcard_h" != "yes" -a \ "$ac_cv_header_machine_soundcard_h" != "yes" -a \ "$ac_cv_header_soundcard_h" != "yes" -a \ -@@ -2223,6 +2242,7 @@ WINE_CONFIG_MAKEFILE([dlls/winemp3.acm/Makefile],[dlls/Makedll.rules],[dlls],[AL +@@ -2415,6 +2434,7 @@ WINE_CONFIG_MAKEFILE([dlls/winemp3.acm/Makefile],[dlls/Makedll.rules],[dlls],[AL WINE_CONFIG_MAKEFILE([dlls/winenas.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/wineoss.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/wineps.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) diff --git a/winepulse-0.28.patch b/winepulse-0.29.patch similarity index 98% rename from winepulse-0.28.patch rename to winepulse-0.29.patch index b70484f..b42e21e 100644 --- a/winepulse-0.28.patch +++ b/winepulse-0.29.patch @@ -21,10 +21,10 @@ index 0000000..c99c1da +@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c new file mode 100644 -index 0000000..392ac0b +index 0000000..3dcb086 --- /dev/null +++ b/dlls/winepulse.drv/pulse.c -@@ -0,0 +1,794 @@ +@@ -0,0 +1,788 @@ +/* + * Wine Driver for PulseAudio + * http://pulseaudio.org/ @@ -581,10 +581,7 @@ index 0000000..392ac0b + DSCAPS_SECONDARYSTEREO | + DSCAPS_SECONDARY8BIT | + DSCAPS_SECONDARY16BIT | -+ DSCCAPS_MULTIPLECAPTURE | -+ DSCAPS_CERTIFIED | /* Useful? */ -+ DSCAPS_EMULDRIVER; /* Useful? */ -+ ++ DSCCAPS_MULTIPLECAPTURE; +} + +/************************************************************************** @@ -616,7 +613,7 @@ index 0000000..392ac0b + wdo->caps.out.wMid = MM_CREATIVE; + wdo->caps.out.wPid = MM_CREATIVE_SBP16_WAVEOUT; + wdo->caps.out.vDriverVersion = 0x0100; -+ wdo->caps.out.dwSupport = WAVECAPS_VOLUME | WAVECAPS_SAMPLEACCURATE | WAVECAPS_DIRECTSOUND; ++ wdo->caps.out.dwSupport = WAVECAPS_VOLUME | WAVECAPS_SAMPLEACCURATE;// | WAVECAPS_DIRECTSOUND; + if (v->channels >= 2) { + wdo->caps.out.wChannels = 2; + wdo->caps.out.dwSupport |= WAVECAPS_LRVOLUME; @@ -638,8 +635,7 @@ index 0000000..392ac0b + DSCAPS_SECONDARYSTEREO | + DSCAPS_SECONDARY8BIT | + DSCAPS_SECONDARY16BIT | -+ DSCAPS_CERTIFIED | -+ DSCAPS_EMULDRIVER; /* Useful? */ ++ DSCAPS_CONTINUOUSRATE; +} + +/************************************************************************** @@ -713,7 +709,6 @@ index 0000000..392ac0b + char *app_name; + char path[PATH_MAX]; + char *offset = NULL; -+ int x = 0; + pa_cvolume fake_cvolume; + + WOutDev = NULL; @@ -770,10 +765,9 @@ index 0000000..392ac0b + pa_threaded_mainloop_wait(PULSE_ml); + } + -+ x = pa_context_get_server_protocol_version(PULSE_context); -+ TRACE("Connected to server %s with protocol version: %i.\n", pa_context_get_server(PULSE_context), x); -+ if (x < 14) -+ WARN("Server is old, expect poor latency or buggy-ness!\n"); ++ TRACE("Connected to server %s with protocol version: %i.\n", ++ pa_context_get_server(PULSE_context), ++ pa_context_get_server_protocol_version(PULSE_context)); + + fake_cvolume.channels = 2; + pa_cvolume_reset(&fake_cvolume, 2); @@ -1422,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..db2c892 +index 0000000..ee92535 --- /dev/null +++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1086 @@ +@@ -0,0 +1,1075 @@ +/* + * Wine Driver for PulseAudio - WaveOut Functionality + * http://pulseaudio.org/ @@ -1625,6 +1619,10 @@ index 0000000..db2c892 + if (wwo->buffer_attr.tlength == -1 && wwo->lpQueuePtr && !wwo->lpPlayPtr && wwo->state == WINE_WS_PLAYING) { + 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 */ ++ + pa_threaded_mainloop_lock(PULSE_ml); + + if (wwo->timing_info->playing) { @@ -1632,26 +1630,22 @@ index 0000000..db2c892 + return; + } + -+ /* Try and adjust the buffer attributes so that playback can start. -+ * Because of bugs this call does not work on servers 0.9.11 to 0.9.14. -+ * Once new version of pulseaudio become ubiquitous we will drop -+ * support for versions before 0.9.15 because they have too many bugs. -+ */ -+ ++ /* Calculate desired buffer length. write_index is the amount of data ++ * written. If there is more than one buffer queued, subtract the ++ * length of one to allow there to be a free buffer for the app. */ + wwo->buffer_attr.tlength = wwo->timing_info->write_index; -+ WARN("Asking for new buffer tlength of %llums (%u bytes)\n", ++ if (wwo->lpQueuePtr->lpNext) wwo->buffer_attr.tlength -= wwo->lpQueuePtr->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); + -+ if (pa_context_get_server_protocol_version(PULSE_context) < 15) -+ ERR("Might get disconnected because of a bug in this pulseaudio server version.\n"); -+ + 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("Can't get the buffer size needed. Triggering and hoping for the best.\n"); ++ 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)); + } + @@ -1837,10 +1831,9 @@ index 0000000..db2c892 + + if (t->playing) { + time += pa_timeval_age(&t->timestamp); -+ + temp = t->transport_usec + t->configured_sink_usec; + if (temp > wwo->buffer_attr.tlength) temp = wwo->buffer_attr.tlength; -+ if (temp < time) time -= temp; else time = 0; ++ if (time > temp) time -= temp; else time = 0; + } + + /* Make sure we haven't claimed to have played more than we have written */ @@ -2008,11 +2001,10 @@ index 0000000..db2c892 + * Create a new pa_stream and connect it to a sink while creating a new + * WINE_WAVEINST to represent the device to the windows application. + */ -+static DWORD wodOpen(WORD wDevID, DWORD_PTR *lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { ++static DWORD wodOpen(WORD wDevID, DWORD_PTR lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { + WINE_WAVEDEV *wdo; + WINE_WAVEINST *wwo = NULL; + DWORD ret = MMSYSERR_NOERROR; -+ pa_stream_flags_t stream_flags; + + TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); + if (lpDesc == NULL) { @@ -2031,7 +2023,7 @@ index 0000000..db2c892 + WARN("Out of memory?!\n"); + return MMSYSERR_NOMEM; + } -+ *lpdwUser = (DWORD_PTR)wwo; ++ *(WINE_WAVEINST**)lpdwUser = wwo; + + /* check to see if format is supported and make pa_sample_spec struct */ + if (!PULSE_SetupFormat(lpDesc->lpFormat, &wwo->sample_spec)) { @@ -2075,25 +2067,16 @@ index 0000000..db2c892 + pa_stream_set_moved_callback (wwo->stream, PULSE_StreamMovedCallback, wwo); + pa_stream_set_suspended_callback (wwo->stream, PULSE_StreamSuspendedCallback, wwo); + -+ /* Setup Stream Flags */ -+ stream_flags = PA_STREAM_AUTO_TIMING_UPDATE; -+#if PA_API_VERSION >= 12 -+ stream_flags |= PA_STREAM_ADJUST_LATENCY; -+#endif -+ -+ /* Blank (but don't send) Buffer Attributes -+ * Note the maxlength bug on old servers */ ++ /* Blank (but don't send) Buffer Attributes */ + wwo->buffer_attr.prebuf = (uint32_t)-1; + wwo->buffer_attr.tlength = (uint32_t)-1; + wwo->buffer_attr.minreq = (uint32_t)-1; -+ wwo->buffer_attr.maxlength = -+ pa_context_get_server_protocol_version(PULSE_context) > 12 ? -+ (uint32_t)-1 : 1048576; /* 2^20 */ ++ wwo->buffer_attr.maxlength = (uint32_t)-1; + + /* Try and connect */ + TRACE("Connecting stream for playback on %s.\n", wdo->device_name); + pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_connect_playback(wwo->stream, wdo->device_name, NULL, stream_flags, NULL, NULL); ++ pa_stream_connect_playback(wwo->stream, wdo->device_name, NULL, PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_ADJUST_LATENCY, NULL, NULL); + + /* Wait for connection */ + for (;;) { @@ -2463,7 +2446,7 @@ index 0000000..db2c892 + return 0; + + /* WaveOut Playback related functions */ -+ case WODM_OPEN: return wodOpen (wDevID, (DWORD_PTR*)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); ++ case WODM_OPEN: return wodOpen (wDevID, dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); + case WODM_CLOSE: return wodClose ((WINE_WAVEINST*)dwUser); + case WODM_WRITE: return wodWrite ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); + case WODM_PAUSE: return wodPause ((WINE_WAVEINST*)dwUser); From 1df45f8c99869a3920c027fef758c715624f4730 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 20 Jul 2009 20:43:09 +0000 Subject: [PATCH 120/161] - evade autobuild --- noautobuild | 1 + 1 file changed, 1 insertion(+) create mode 100644 noautobuild diff --git a/noautobuild b/noautobuild new file mode 100644 index 0000000..e0e4c9c --- /dev/null +++ b/noautobuild @@ -0,0 +1 @@ +transition from ix86 only build to ix86/x86_64 32bit build From 0ccc0076236e087caeb30d1763935e3818475836 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 30 Aug 2009 21:27:14 +0000 Subject: [PATCH 121/161] - lots of fixes - version upgrade - 64bit build --- .cvsignore | 2 +- ... => adding-pulseaudio-to-winecfg-0.4.patch | 112 +++---- noautobuild | 1 - pulseaudio-winecfg-update.patch | 10 + sources | 2 +- wine-rpath.patch | 34 +- wine.spec | 310 ++++++++++++------ ...patch => winepulse-0.30-configure.ac.patch | 32 +- winepulse-0.29.patch => winepulse-0.30.patch | 13 +- 9 files changed, 314 insertions(+), 202 deletions(-) rename adding-pulseaudio-to-winecfg-0.3.patch => adding-pulseaudio-to-winecfg-0.4.patch (84%) delete mode 100644 noautobuild create mode 100644 pulseaudio-winecfg-update.patch rename winepulse-0.29-configure.ac.patch => winepulse-0.30-configure.ac.patch (75%) rename winepulse-0.29.patch => winepulse-0.30.patch (99%) diff --git a/.cvsignore b/.cvsignore index 36f3eca..3de7483 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.26-fe.tar.bz2 +wine-1.1.28-fe.tar.bz2 diff --git a/adding-pulseaudio-to-winecfg-0.3.patch b/adding-pulseaudio-to-winecfg-0.4.patch similarity index 84% rename from adding-pulseaudio-to-winecfg-0.3.patch rename to adding-pulseaudio-to-winecfg-0.4.patch index 7ee1060..3600a57 100644 --- a/adding-pulseaudio-to-winecfg-0.3.patch +++ b/adding-pulseaudio-to-winecfg-0.4.patch @@ -1,8 +1,8 @@ diff --git a/programs/winecfg/Bg.rc b/programs/winecfg/Bg.rc -index 00cfbe8..ce2c8c7 100644 +index fcdf895..e17690e 100644 --- a/programs/winecfg/Bg.rc +++ b/programs/winecfg/Bg.rc -@@ -277,6 +277,7 @@ BEGIN +@@ -276,6 +276,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -11,10 +11,10 @@ index 00cfbe8..ce2c8c7 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Cs.rc b/programs/winecfg/Cs.rc -index b34dd06..348153c 100644 +index d9c0b28..9bcc033 100644 --- a/programs/winecfg/Cs.rc +++ b/programs/winecfg/Cs.rc -@@ -277,6 +277,7 @@ BEGIN +@@ -276,6 +276,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardn" IDS_ACCEL_BASIC "Zkladn" IDS_ACCEL_EMULATION "Emulace" @@ -23,10 +23,10 @@ index b34dd06..348153c 100644 IDS_DRIVER_ESOUND "Ovlada EsounD" IDS_DRIVER_OSS "Ovlada OSS" diff --git a/programs/winecfg/Da.rc b/programs/winecfg/Da.rc -index 62b781b..a604ea3 100644 +index f53aead..690c7f5 100644 --- a/programs/winecfg/Da.rc +++ b/programs/winecfg/Da.rc -@@ -271,6 +271,7 @@ BEGIN +@@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grundlggende" IDS_ACCEL_EMULATION "Emulring" @@ -35,10 +35,10 @@ index 62b781b..a604ea3 100644 IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/De.rc b/programs/winecfg/De.rc -index 53c412c..8f70399 100644 +index e6bed15..d3027bc 100644 --- a/programs/winecfg/De.rc +++ b/programs/winecfg/De.rc -@@ -273,6 +273,7 @@ BEGIN +@@ -272,6 +272,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Einfach" IDS_ACCEL_EMULATION "Emulation" @@ -47,10 +47,10 @@ index 53c412c..8f70399 100644 IDS_DRIVER_ESOUND "EsounD-Treiber" IDS_DRIVER_OSS "OSS-Treiber" diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc -index a69b4d9..2d3dc5c 100644 +index 049aaa7..cef7c4a 100644 --- a/programs/winecfg/En.rc +++ b/programs/winecfg/En.rc -@@ -273,6 +273,7 @@ BEGIN +@@ -272,6 +272,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -59,10 +59,10 @@ index a69b4d9..2d3dc5c 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc -index 2ddce6c..ececfe2 100644 +index 1771b4e..c49f9a3 100644 --- a/programs/winecfg/Es.rc +++ b/programs/winecfg/Es.rc -@@ -271,6 +271,7 @@ BEGIN +@@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Estndar" IDS_ACCEL_BASIC "Bsica" IDS_ACCEL_EMULATION "Emulacin" @@ -71,10 +71,10 @@ index 2ddce6c..ececfe2 100644 IDS_DRIVER_ESOUND "Manejador EsounD" IDS_DRIVER_OSS "Manejador OSS" diff --git a/programs/winecfg/Fi.rc b/programs/winecfg/Fi.rc -index f6fb85c..ed24bf6 100644 +index 0dedf3a..097a4d2 100644 --- a/programs/winecfg/Fi.rc +++ b/programs/winecfg/Fi.rc -@@ -271,6 +271,7 @@ BEGIN +@@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -83,10 +83,10 @@ index f6fb85c..ed24bf6 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Fr.rc b/programs/winecfg/Fr.rc -index b63adb1..414f440 100644 +index 52c9888..1bd92b1 100644 --- a/programs/winecfg/Fr.rc +++ b/programs/winecfg/Fr.rc -@@ -275,6 +275,7 @@ BEGIN +@@ -274,6 +274,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basique" IDS_ACCEL_EMULATION "Émulation" @@ -95,10 +95,10 @@ index b63adb1..414f440 100644 IDS_DRIVER_ESOUND "Pilote EsounD" IDS_DRIVER_OSS "Pilote OSS" diff --git a/programs/winecfg/Hu.rc b/programs/winecfg/Hu.rc -index 0445c77..7756d2b 100644 +index dc887fe..3ba696f 100644 --- a/programs/winecfg/Hu.rc +++ b/programs/winecfg/Hu.rc -@@ -271,6 +271,7 @@ BEGIN +@@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -106,23 +106,11 @@ index 0445c77..7756d2b 100644 IDS_DRIVER_ALSA "ALSA Driver" IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" -diff --git a/programs/winecfg/Ja.rc b/programs/winecfg/Ja.rc -index a25a953..d690f7f 100644 ---- a/programs/winecfg/Ja.rc -+++ b/programs/winecfg/Ja.rc -@@ -276,6 +276,7 @@ BEGIN - IDS_ACCEL_STANDARD "標準" - IDS_ACCEL_BASIC "基本" - IDS_ACCEL_EMULATION "エミュレーション" -+ IDS_DRIVER_PULSE "PulseAudio Driver" - IDS_DRIVER_ALSA "ALSA Driver" - IDS_DRIVER_ESOUND "EsounD Driver" - IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc -index c01b841..5c500d5 100644 +index 6f13e0c..d5403da 100644 --- a/programs/winecfg/Ko.rc +++ b/programs/winecfg/Ko.rc -@@ -275,6 +275,7 @@ BEGIN +@@ -274,6 +274,7 @@ BEGIN IDS_ACCEL_STANDARD "ǥ" IDS_ACCEL_BASIC "⺻" IDS_ACCEL_EMULATION "ֹķ̼" @@ -131,7 +119,7 @@ index c01b841..5c500d5 100644 IDS_DRIVER_ESOUND "EsounD ̹" IDS_DRIVER_OSS "OSS ̹" diff --git a/programs/winecfg/Nl.rc b/programs/winecfg/Nl.rc -index 99062cf..2683a82 100644 +index 4cd45f0..d23f359 100644 --- a/programs/winecfg/Nl.rc +++ b/programs/winecfg/Nl.rc @@ -273,6 +273,7 @@ BEGIN @@ -143,10 +131,10 @@ index 99062cf..2683a82 100644 IDS_DRIVER_ESOUND "EsounD Stuurprogramma" IDS_DRIVER_OSS "OSS Stuurprogramma" diff --git a/programs/winecfg/No.rc b/programs/winecfg/No.rc -index 357539e..b2a5eae 100644 +index cc34fad..71876ba 100644 --- a/programs/winecfg/No.rc +++ b/programs/winecfg/No.rc -@@ -271,6 +271,7 @@ BEGIN +@@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grunnleggende" IDS_ACCEL_EMULATION "Emulering" @@ -155,10 +143,10 @@ index 357539e..b2a5eae 100644 IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/Pl.rc b/programs/winecfg/Pl.rc -index 8e1d9a2..bd968de 100644 +index d884881..d6405b1 100644 --- a/programs/winecfg/Pl.rc +++ b/programs/winecfg/Pl.rc -@@ -274,6 +274,7 @@ BEGIN +@@ -273,6 +273,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardowe" IDS_ACCEL_BASIC "Podstawowe" IDS_ACCEL_EMULATION "Emulacja" @@ -167,10 +155,10 @@ index 8e1d9a2..bd968de 100644 IDS_DRIVER_ESOUND "Sterownik EsounD" IDS_DRIVER_OSS "Sterownik OSS" diff --git a/programs/winecfg/Pt.rc b/programs/winecfg/Pt.rc -index e3b02a1..be5acb0 100644 +index 683dc68..be92466 100644 --- a/programs/winecfg/Pt.rc +++ b/programs/winecfg/Pt.rc -@@ -471,6 +471,7 @@ BEGIN +@@ -470,6 +470,7 @@ BEGIN IDS_ACCEL_STANDARD "Padrão" IDS_ACCEL_BASIC "Básico" IDS_ACCEL_EMULATION "Emulação" @@ -179,10 +167,10 @@ index e3b02a1..be5acb0 100644 IDS_DRIVER_ESOUND "Controlador EsounD" IDS_DRIVER_OSS "Controlador OSS" diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc -index c836d60..50317bf 100644 +index f12949f..2101ea1 100644 --- a/programs/winecfg/Ro.rc +++ b/programs/winecfg/Ro.rc -@@ -273,6 +273,7 @@ BEGIN +@@ -272,6 +272,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "De bază" IDS_ACCEL_EMULATION "Emulare" @@ -191,22 +179,22 @@ index c836d60..50317bf 100644 IDS_DRIVER_ESOUND "Driver Esound" IDS_DRIVER_OSS "Driver OSS" diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc -index 8d61413..7962c98 100644 +index 7293cbc..fb57527 100644 --- a/programs/winecfg/Ru.rc +++ b/programs/winecfg/Ru.rc -@@ -275,6 +275,7 @@ BEGIN - IDS_ACCEL_STANDARD "" - IDS_ACCEL_BASIC "" - IDS_ACCEL_EMULATION "" -+ IDS_DRIVER_PULSE "PulseAudio " - IDS_DRIVER_ALSA "ALSA " - IDS_DRIVER_ESOUND "EsounD " - IDS_DRIVER_OSS "OSS " +@@ -277,6 +277,7 @@ BEGIN + IDS_ACCEL_STANDARD "Стандартное" + IDS_ACCEL_BASIC "Минимальное" + IDS_ACCEL_EMULATION "Эмуляция" ++ IDS_DRIVER_PULSE "PulseAudio драйвер" + IDS_DRIVER_ALSA "ALSA драйвер" + IDS_DRIVER_ESOUND "EsounD драйвер" + IDS_DRIVER_OSS "OSS драйвер" diff --git a/programs/winecfg/Si.rc b/programs/winecfg/Si.rc -index 87cd239..73544bb 100644 +index feaef36..c26e5cb 100644 --- a/programs/winecfg/Si.rc +++ b/programs/winecfg/Si.rc -@@ -273,6 +273,7 @@ BEGIN +@@ -272,6 +272,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardno" IDS_ACCEL_BASIC "Osnovno" IDS_ACCEL_EMULATION "Emulacija" @@ -215,10 +203,10 @@ index 87cd239..73544bb 100644 IDS_DRIVER_ESOUND "EsounD gonilnik" IDS_DRIVER_OSS "OSS gonilnik" diff --git a/programs/winecfg/Sv.rc b/programs/winecfg/Sv.rc -index 113603c..dde6ed5 100644 +index 7fea5aa..35eb871 100644 --- a/programs/winecfg/Sv.rc +++ b/programs/winecfg/Sv.rc -@@ -271,6 +271,7 @@ BEGIN +@@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grundlggande" IDS_ACCEL_EMULATION "Emulering" @@ -227,10 +215,10 @@ index 113603c..dde6ed5 100644 IDS_DRIVER_ESOUND "EsounD-drivrutin" IDS_DRIVER_OSS "OSS-drivrutin" diff --git a/programs/winecfg/Tr.rc b/programs/winecfg/Tr.rc -index 883c0f3..4f6ecb3 100644 +index 0fa9778..2a23112 100644 --- a/programs/winecfg/Tr.rc +++ b/programs/winecfg/Tr.rc -@@ -271,6 +271,7 @@ BEGIN +@@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standart" IDS_ACCEL_BASIC "Temel" IDS_ACCEL_EMULATION "Taklit" @@ -239,10 +227,10 @@ index 883c0f3..4f6ecb3 100644 IDS_DRIVER_ESOUND "EsounD Srcs" IDS_DRIVER_OSS "OSS Srcs" diff --git a/programs/winecfg/Zh.rc b/programs/winecfg/Zh.rc -index b483cfe..8617049 100644 +index fea66b7..bc0aaaf 100644 --- a/programs/winecfg/Zh.rc +++ b/programs/winecfg/Zh.rc -@@ -274,6 +274,7 @@ BEGIN +@@ -273,6 +273,7 @@ BEGIN IDS_ACCEL_STANDARD "标准" IDS_ACCEL_BASIC "基本" IDS_ACCEL_EMULATION "软件模拟" @@ -251,10 +239,10 @@ index b483cfe..8617049 100644 IDS_DRIVER_ESOUND "EsounD 驱动" IDS_DRIVER_OSS "OSS 驱动" diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c -index 79e62f0..b9a310c 100644 +index 9f8a0a2..0ecb6c3 100644 --- a/programs/winecfg/audio.c +++ b/programs/winecfg/audio.c -@@ -88,6 +88,7 @@ typedef struct +@@ -89,6 +89,7 @@ typedef struct } AUDIO_DRIVER; static const AUDIO_DRIVER sAudioDrivers[] = { @@ -275,10 +263,10 @@ index 37cc12b..7c13fad 100644 "winmm", "wintab32", diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h -index 88c9e64..05a13de 100644 +index 27736b7..f8ba2ee 100644 --- a/programs/winecfg/resource.h +++ b/programs/winecfg/resource.h -@@ -186,7 +186,7 @@ +@@ -185,7 +185,7 @@ #define IDS_ACCEL_BASIC 8302 #define IDS_ACCEL_EMULATION 8303 #define IDS_DRIVER_ALSA 8304 diff --git a/noautobuild b/noautobuild deleted file mode 100644 index e0e4c9c..0000000 --- a/noautobuild +++ /dev/null @@ -1 +0,0 @@ -transition from ix86 only build to ix86/x86_64 32bit build diff --git a/pulseaudio-winecfg-update.patch b/pulseaudio-winecfg-update.patch new file mode 100644 index 0000000..365f99d --- /dev/null +++ b/pulseaudio-winecfg-update.patch @@ -0,0 +1,10 @@ +--- programs/winecfg/Ja.rc.orig 2009-08-26 11:55:56.000000000 +0200 ++++ programs/winecfg/Ja.rc 2009-08-26 11:56:52.000000000 +0200 +@@ -275,6 +275,7 @@ + IDS_ACCEL_STANDARD "標準" + IDS_ACCEL_BASIC "基本" + IDS_ACCEL_EMULATION "エミュレーション" ++ IDS_DRIVER_PULSE "PulseAudio ドライバ" + IDS_DRIVER_ALSA "ALSA ドライバ" + IDS_DRIVER_ESOUND "EsounD ドライバ" + IDS_DRIVER_OSS "OSS ドライバ" diff --git a/sources b/sources index 7efb812..c9b13b0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -7b2affded452ced2b1f45a9b7e6f24da wine-1.1.26-fe.tar.bz2 +6342c41f46d0571efae685c17aa5550f wine-1.1.28-fe.tar.bz2 diff --git a/wine-rpath.patch b/wine-rpath.patch index 0836ea1..06e1045 100644 --- a/wine-rpath.patch +++ b/wine-rpath.patch @@ -1,32 +1,32 @@ ---- configure.orig 2008-11-05 12:25:10.000000000 +0300 -+++ configure 2008-11-06 22:22:27.000000000 +0300 -@@ -9306,14 +9306,14 @@ +--- configure.orig 2009-08-26 11:47:17.000000000 +0200 ++++ configure 2009-08-26 11:50:07.000000000 +0200 +@@ -6565,14 +6565,14 @@ + fi - -- as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,--rpath,\$ORIGIN/../lib" | $as_tr_sh` --{ $as_echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib" >&5 +- as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,--rpath,\\$ORIGIN/../lib" | $as_tr_sh` +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib" >&5 -$as_echo_n "checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib... " >&6; } + as_ac_var=`$as_echo "ac_cv_cflags_-fPIC" | $as_tr_sh` -+{ $as_echo "$as_me:$LINENO: checking whether the compiler supports -fPIC" >&5 -+$as_echo_n "checking whether the compiler supports -fPIC" >&6; } - if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC" >&5 ++$as_echo_n "checking whether the compiler supports -fPIC " >&6; } + if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else ac_wine_try_cflags_saved=$CFLAGS -CFLAGS="$CFLAGS -fPIC -Wl,--rpath,\$ORIGIN/../lib" +CFLAGS="$CFLAGS -fPIC" - cat >conftest.$ac_ext <<_ACEOF - /* confdefs.h. */ - _ACEOF -@@ -9369,8 +9369,8 @@ + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +@@ -6597,8 +6597,8 @@ + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } - if test `eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` = yes; then + if test `eval 'as_val=${'$as_ac_var'};$as_echo "$as_val"'` = yes; then : - LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" - LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" + LDRPATH_INSTALL="" + LDRPATH_LOCAL="" else - as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,-R,\$ORIGIN/../lib" | $as_tr_sh` - { $as_echo "$as_me:$LINENO: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 + as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,-R,\\$ORIGIN/../lib" | $as_tr_sh` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 diff --git a/wine.spec b/wine.spec index 1e6dc2d..0f96350 100644 --- a/wine.spec +++ b/wine.spec @@ -1,5 +1,6 @@ +%define no64bit 0 Name: wine -Version: 1.1.26 +Version: 1.1.28 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -22,6 +23,8 @@ Source0: %{name}-%{version}-fe.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf +Source5: wine-64.conf +Source6: wine-chooser.sh # desktop stuff Source100: wine-notepad.desktop Source101: wine-regedit.desktop @@ -44,24 +47,25 @@ Source300: wine-mime-msi.desktop # explain how to use wine with pulseaudio # 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.29-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse-0.29.patch -Patch402: http://art.ified.ca/downloads/adding-pulseaudio-to-winecfg-0.3.patch +Patch400: http://art.ified.ca/downloads/winepulse-0.30-configure.ac.patch +Patch401: http://art.ified.ca/downloads/winepulse-0.30.patch +Patch402: http://art.ified.ca/downloads/adding-pulseaudio-to-winecfg-0.4.patch Source402: README-FEDORA-PULSEAUDIO - +Patch403: pulseaudio-winecfg-update.patch Patch1: wine-rpath.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +%if !%{?no64bit} +ExclusiveArch: %{ix86} x86_64 +%else ExclusiveArch: %{ix86} +%endif -# BR: All builds -BuildRequires: bison -BuildRequires: flex +BuildRequires: bison +BuildRequires: flex BuildRequires: autoconf BuildRequires: desktop-file-utils - -# x86-32 BR BuildRequires: alsa-lib-devel BuildRequires: audiofile-devel BuildRequires: esound-devel @@ -80,7 +84,7 @@ BuildRequires: unixODBC-devel BuildRequires: openssl-devel BuildRequires: sane-backends-devel BuildRequires: zlib-devel -BuildRequires: fontforge +BuildRequires: fontforge freetype-devel BuildRequires: libgphoto2-devel BuildRequires: jack-audio-connection-kit-devel # #217338 @@ -102,15 +106,27 @@ BuildRequires: libXcursor-devel BuildRequires: dbus-devel hal-devel BuildRequires: gnutls-devel BuildRequires: pulseaudio-libs-devel +BuildRequires: gsm-devel -Requires: wine-core = %{version}-%{release} -Requires: wine-capi = %{version}-%{release} -Requires: wine-cms = %{version}-%{release} +# noarch +Requires: wine-common = %{version}-%{release} Requires: wine-desktop = %{version}-%{release} -Requires: wine-ldap = %{version}-%{release} -Requires: wine-tools = %{version}-%{release} -Requires: wine-twain = %{version}-%{release} -Requires: wine-pulseaudio = %{version}-%{release} +# 32bit +Requires: wine-core(x86-32) = %{version}-%{release} +Requires: wine-capi(x86-32) = %{version}-%{release} +Requires: wine-cms(x86-32) = %{version}-%{release} +Requires: wine-ldap(x86-32) = %{version}-%{release} +Requires: wine-twain(x86-32) = %{version}-%{release} +Requires: wine-pulseaudio(x86-32) = %{version}-%{release} +# 64bit +%ifarch x86_64 +Requires: wine-core(x86-64) = %{version}-%{release} +Requires: wine-capi(x86-64) = %{version}-%{release} +Requires: wine-cms(x86-64) = %{version}-%{release} +Requires: wine-ldap(x86-64) = %{version}-%{release} +Requires: wine-twain(x86-64) = %{version}-%{release} +Requires: wine-pulseaudio(x86-64) = %{version}-%{release} +%endif %description While Wine is usually thought of as a Windows(TM) emulator, the Wine @@ -127,17 +143,26 @@ wine-* sub packages. %package core Summary: Wine core package Group: Applications/Emulators +Requires: wine-fonts = %{version}-%{release} Requires: %{_bindir}/xmessage -Requires: freetype%{_isa} Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig Obsoletes: wine <= 0.9.15-1%{?dist} Obsoletes: wine-arts < 0.9.34 +Obsoletes: wine-tools <= 1.1.27 +Provides: wine-tools = %{version}-%{release} # fix dns resolution (#492700) # require both to be sure 64bit is present as well... -Requires: nss-mdns nss-mdns%{_isa} +%ifarch %{ix86} +Requires: freetype(x86-32) +Requires: nss-mdns(x86-32) # require Xrender isa on x86_64 (#510947) -Requires: libXrender%{_isa} +Requires: libXrender(x86-32) +%endif +%ifarch x86_64 +Requires: nss-mdns(x86-64) +Requires: freetype(x86-64) +%endif %description core Wine core package includes the basic wine stuff needed by all other packages. @@ -150,18 +175,28 @@ Requires(post): desktop-file-utils >= 0.8 Requires(preun): /sbin/chkconfig, /sbin/service Requires(postun): desktop-file-utils >= 0.8 Requires: wine-core = %{version}-%{release} +BuildArch: noarch %description desktop Desktop integration features for wine, including mime-types and a binary format handler service. -%package tools -Summary: Additional wine tools +%package fonts +Summary: Wine font files +Group: Applications/Emulators +BuildArch: noarch + +%description fonts +%{summary} + +%package common +Summary: Common files Group: Applications/Emulators Requires: wine-core = %{version}-%{release} +BuildArch: noarch -%description tools -Additional wine tools +%description common +Common wine files and scripts. %package esd Summary: ESD sound support for wine @@ -175,7 +210,12 @@ ESD sound support for wine Summary: JACK sound support for wine Group: System Environment/Libraries Requires: wine-core = %{version}-%{release} -Requires: jack-audio-connection-kit%{_isa} +%ifarch %{ix86} +Requires: jack-audio-connection-kit(x86-32) +%endif +%ifarch x86_64 +Requires: jack-audio-connection-kit(x86-64) +%endif %description jack JACK sound support for wine @@ -256,19 +296,27 @@ This package adds an oss driver for wine. %prep %setup -q -n %{name}-%{version}-fe + %patch1 %patch400 -p1 %patch401 -p1 %patch402 -p1 +%patch403 + autoreconf %build export CFLAGS="$RPM_OPT_FLAGS" - %configure \ --sysconfdir=%{_sysconfdir}/wine \ --x-includes=%{_includedir} --x-libraries=%{_libdir} \ - --with-pulse + --with-pulse \ + --with-x \ +%ifarch x86_64 + --enable-win64 \ +%endif + --enable-maintainer-mode \ + --disable-tests %{__make} depend @@ -284,6 +332,17 @@ rm -rf %{buildroot} LDCONFIG=/bin/true \ UPDATE_DESKTOP_DATABASE=/bin/true +%ifarch %{ix86} +# rename wine to wine32 +mv %{buildroot}%{_bindir}/wine{,32} +%endif + +# if x86_64 rename to wine64 +%ifarch x86_64 +mv %{buildroot}%{_bindir}/wine{,64} +%endif + + mkdir -p %{buildroot}%{_sysconfdir}/wine # Allow users to launch Windows programs by just clicking on the .exe file... @@ -366,7 +425,16 @@ desktop-file-install \ cp %{SOURCE3} README-Fedora mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ + +%ifarch %{ix86} install -p -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ +%endif + +%ifarch x86_64 +install -p -m644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ +%endif + +install -p -m755 %{SOURCE6} $RPM_BUILD_ROOT%{_bindir}/wine # deploy pulseaudio readme cp %{SOURCE402} . @@ -430,19 +498,49 @@ update-desktop-database &>/dev/null || : %files core %defattr(-,root,root,-) -%doc ANNOUNCE COPYING.LIB LICENSE LICENSE.OLD -%doc AUTHORS README-Fedora README VERSION +%doc ANNOUNCE +%doc COPYING.LIB +%doc LICENSE +%doc LICENSE.OLD +%doc AUTHORS +%doc README-Fedora +%doc README +%doc VERSION # do not include huge changelogs .OLD .ALPHA .BETA (#204302) %doc documentation/README.* -%{_bindir}/msiexec -%{_bindir}/regedit -%{_bindir}/regsvr32 -%{_bindir}/wine -%{_bindir}/wineboot -%{_bindir}/wineconsole -%{_bindir}/wineprefixcreate -%{_mandir}/man1/wineprefixcreate.1* -%{_bindir}/winecfg + +%{_bindir}/winedump +%{_libdir}/wine/explorer.exe.so +%{_libdir}/wine/control.exe.so +%{_libdir}/wine/cmd.exe.so +%{_libdir}/wine/notepad.exe.so +%{_libdir}/wine/progman.exe.so +%{_libdir}/wine/taskmgr.exe.so +%{_libdir}/wine/winedbg.exe.so +%{_libdir}/wine/winefile.exe.so +%{_libdir}/wine/winemine.exe.so +%{_libdir}/wine/winepath.exe.so +%{_libdir}/wine/winver.exe.so +%{_libdir}/wine/wordpad.exe.so +%{_libdir}/wine/write.exe.so + +%ifarch %{ix86} +%{_bindir}/wine-preloader +%endif +%{_bindir}/wineserver + +%ifarch %{ix86} +%{_sysconfdir}/ld.so.conf.d/wine-32.conf +%{_bindir}/wine32 +%endif +%ifarch x86_64 +%{_bindir}/wine64 +%{_sysconfdir}/ld.so.conf.d/wine-64.conf +%endif + +%dir %{_libdir}/wine +%dir %{_libdir}/wine/fakedlls +%{_libdir}/wine/fakedlls/* %{_libdir}/wine/cacls.exe.so %{_libdir}/wine/expand.exe.so %{_libdir}/wine/winhlp32.exe.so @@ -463,20 +561,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winebrowser.exe.so %{_libdir}/wine/wineconsole.exe.so %{_libdir}/wine/winemenubuilder.exe.so -%{_libdir}/wine/winevdm.exe.so %{_libdir}/wine/winecfg.exe.so %{_libdir}/wine/winedevice.exe.so %{_libdir}/wine/uninstaller.exe.so -%dir %{_datadir}/wine -%{_mandir}/man1/wine.1.gz -%{_mandir}/man1/wineserver.1* -%lang(fr) %{_mandir}/fr.UTF-8/man1/* -%{_datadir}/wine/generic.ppd -%{_datadir}/wine/wine.inf -%{_bindir}/wine-preloader -%{_bindir}/wineserver %{_libdir}/libwine.so.1* -%dir %{_libdir}/wine %{_libdir}/wine/acledit.dll.so %{_libdir}/wine/aclui.dll.so %{_libdir}/wine/activeds.dll.so @@ -499,7 +587,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/comcat.dll.so %{_libdir}/wine/comctl32.dll.so %{_libdir}/wine/comdlg32.dll.so -%{_libdir}/wine/commdlg.dll16 %{_libdir}/wine/compstui.dll.so %{_libdir}/wine/credui.dll.so %{_libdir}/wine/crtdll.dll.so @@ -549,7 +636,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/eject.exe.so %{_libdir}/wine/faultrep.dll.so %{_libdir}/wine/fusion.dll.so -%{_libdir}/wine/gdi.exe16 %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gdiplus.dll.so %{_libdir}/wine/glu32.dll.so @@ -565,7 +651,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/iccvid.dll.so %{_libdir}/wine/icinfo.exe.so %{_libdir}/wine/icmp.dll.so -%{_libdir}/wine/ifsmgr.vxd.so %{_libdir}/wine/imaadp32.acm.so %{_libdir}/wine/imagehlp.dll.so %{_libdir}/wine/imm32.dll.so @@ -580,7 +665,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/itss.dll.so %{_libdir}/wine/jscript.dll.so %{_libdir}/wine/kernel32.dll.so -%{_libdir}/wine/krnl386.exe16 %{_libdir}/wine/loadperf.dll.so %{_libdir}/wine/localspl.dll.so %{_libdir}/wine/localui.dll.so @@ -593,21 +677,21 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/mciwave.dll.so %{_libdir}/wine/midimap.dll.so %{_libdir}/wine/mlang.dll.so -%{_libdir}/wine/mmdevldr.vxd.so -%{_libdir}/wine/mmsystem.dll16 -%{_libdir}/wine/monodebg.vxd.so %{_libdir}/wine/mountmgr.sys.so %{_libdir}/wine/mpr.dll.so %{_libdir}/wine/mprapi.dll.so +%{_libdir}/wine/mciqtz32.dll.so %{_libdir}/wine/msacm32.dll.so %{_libdir}/wine/msacm32.drv.so %{_libdir}/wine/msadp32.acm.so %{_libdir}/wine/mscat32.dll.so %{_libdir}/wine/mscoree.dll.so %{_libdir}/wine/msctf.dll.so +%{_libdir}/wine/msdaps.dll.so %{_libdir}/wine/msdmo.dll.so %{_libdir}/wine/msftedit.dll.so %{_libdir}/wine/msg711.acm.so +%{_libdir}/wine/msgsm32.acm.so %{_libdir}/wine/mshtml.dll.so %{_libdir}/wine/mshtml.tlb.so %{_libdir}/wine/msi.dll.so @@ -675,7 +759,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/sensapi.dll.so %{_libdir}/wine/serialui.dll.so %{_libdir}/wine/setupapi.dll.so -%{_libdir}/wine/setupx.dll16 %{_libdir}/wine/sfc_os.dll.so %{_libdir}/wine/shdoclc.dll.so %{_libdir}/wine/shdocvw.dll.so @@ -693,45 +776,31 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/svchost.exe.so %{_libdir}/wine/svrapi.dll.so %{_libdir}/wine/sxs.dll.so -%{_libdir}/wine/system.drv16 %{_libdir}/wine/t2embed.dll.so %{_libdir}/wine/tapi32.dll.so -%{_libdir}/wine/toolhelp.dll16 %{_libdir}/wine/traffic.dll.so %{_libdir}/wine/unicows.dll.so %{_libdir}/wine/unlodctr.exe.so %{_libdir}/wine/updspapi.dll.so %{_libdir}/wine/url.dll.so %{_libdir}/wine/urlmon.dll.so -%{_libdir}/wine/user.exe16 %{_libdir}/wine/user32.dll.so %{_libdir}/wine/usp10.dll.so %{_libdir}/wine/uxtheme.dll.so %{_libdir}/wine/userenv.dll.so -%{_libdir}/wine/vdhcp.vxd.so %{_libdir}/wine/vdmdbg.dll.so -%{_libdir}/wine/ver.dll16 %{_libdir}/wine/version.dll.so -%{_libdir}/wine/vmm.vxd.so -%{_libdir}/wine/vnbt.vxd.so -%{_libdir}/wine/vnetbios.vxd.so -%{_libdir}/wine/vtdapi.vxd.so -%{_libdir}/wine/vwin32.vxd.so -%{_libdir}/wine/w32skrnl.dll.so %{_libdir}/wine/wbemprox.dll.so %{_libdir}/wine/windowscodecs.dll.so %{_libdir}/wine/wineaudioio.drv.so -%{_libdir}/wine/winedos.dll.so %{_libdir}/wine/winecoreaudio.drv.so %{_libdir}/wine/winejoystick.drv.so %{_libdir}/wine/winex11.drv.so -%{_libdir}/wine/wing.dll16 %{_libdir}/wine/wing32.dll.so %{_libdir}/wine/winhttp.dll.so %{_libdir}/wine/wininet.dll.so %{_libdir}/wine/winmm.dll.so %{_libdir}/wine/winnls32.dll.so -%{_libdir}/wine/winsock.dll16 %{_libdir}/wine/winspool.drv.so %{_libdir}/wine/wmi.dll.so %{_libdir}/wine/wmiutils.dll.so @@ -741,16 +810,13 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wintrust.dll.so %{_libdir}/wine/wnaspi32.dll.so %{_libdir}/wine/wow32.dll.so -%{_libdir}/wine/wprocs.dll16 %{_libdir}/wine/ws2_32.dll.so %{_libdir}/wine/wsock32.dll.so %{_libdir}/wine/wtsapi32.dll.so %{_libdir}/wine/wuapi.dll.so %{_libdir}/wine/security.dll.so %{_libdir}/wine/sfc.dll.so -%{_datadir}/wine/fonts/ %{_libdir}/wine/wineps.drv.so -%{_libdir}/wine/wineps16.drv16 %{_libdir}/wine/d3d8.dll.so %{_libdir}/wine/d3d9.dll.so %{_libdir}/wine/opengl32.dll.so @@ -763,8 +829,33 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/xinput1_3.dll.so %{_libdir}/wine/xinput9_1_0.dll.so %{_libdir}/wine/xmllite.dll.so -%{_sysconfdir}/ld.so.conf.d/wine-32.conf -# 16bit +%ifnarch x86_64 +# 16 bit and other non 64bit stuff +%{_libdir}/wine/winedos.dll.so +%{_libdir}/wine/winevdm.exe.so +%{_libdir}/wine/ifsmgr.vxd.so +%{_libdir}/wine/mmdevldr.vxd.so +%{_libdir}/wine/mmsystem.dll16 +%{_libdir}/wine/monodebg.vxd.so +%{_libdir}/wine/vdhcp.vxd.so +%{_libdir}/wine/ver.dll16 +%{_libdir}/wine/user.exe16 +%{_libdir}/wine/vmm.vxd.so +%{_libdir}/wine/wing.dll16 +%{_libdir}/wine/vnbt.vxd.so +%{_libdir}/wine/vnetbios.vxd.so +%{_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/setupx.dll16 +%{_libdir}/wine/system.drv16 +%{_libdir}/wine/toolhelp.dll16 +%{_libdir}/wine/winsock.dll16 +%{_libdir}/wine/wprocs.dll16 +%{_libdir}/wine/wineps16.drv16 + %{_libdir}/wine/avifile.dll16.so %{_libdir}/wine/comm.drv16.so %{_libdir}/wine/compobj.dll16.so @@ -774,9 +865,9 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dispdib.dll16.so %{_libdir}/wine/display.drv16.so %{_libdir}/wine/imm.dll16.so +%{_libdir}/wine/krnl386.exe16 %{_libdir}/wine/keyboard.drv16.so %{_libdir}/wine/lzexpand.dll16.so -%{_libdir}/wine/mciqtz32.dll.so %{_libdir}/wine/mouse.drv16.so %{_libdir}/wine/msacm.dll16.so %{_libdir}/wine/msvideo.dll16.so @@ -804,29 +895,36 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winnls.dll16.so %{_libdir}/wine/winoldap.mod16.so %{_libdir}/wine/wintab.dll16.so +%endif -%files tools +%files common %defattr(-,root,root,-) +%{_bindir}/wineprefixcreate %{_bindir}/notepad %{_bindir}/winedbg -%{_bindir}/winedump %{_bindir}/winefile -%{_bindir}/winemaker %{_bindir}/winemine +%{_bindir}/winemaker %{_bindir}/winepath -%{_libdir}/wine/explorer.exe.so -%{_libdir}/wine/control.exe.so -%{_libdir}/wine/cmd.exe.so -%{_libdir}/wine/notepad.exe.so -%{_libdir}/wine/progman.exe.so -%{_libdir}/wine/taskmgr.exe.so -%{_libdir}/wine/winedbg.exe.so -%{_libdir}/wine/winefile.exe.so -%{_libdir}/wine/winemine.exe.so -%{_libdir}/wine/winepath.exe.so -%{_libdir}/wine/winver.exe.so -%{_libdir}/wine/wordpad.exe.so -%{_libdir}/wine/write.exe.so +%{_bindir}/msiexec +%{_bindir}/regedit +%{_bindir}/regsvr32 +%{_bindir}/wine +%{_bindir}/wineboot +%{_bindir}/wineconsole +%{_bindir}/winecfg +%dir %{_datadir}/wine +%{_mandir}/man1/wine.1.gz +%{_mandir}/man1/wineserver.1* +%{_mandir}/man1/wineprefixcreate.1* +%lang(fr) %{_mandir}/fr.UTF-8/man1/* +%{_datadir}/wine/generic.ppd +%{_datadir}/wine/wine.inf + +%files fonts +%defattr(-,root,root,-) +%{_datadir}/wine/fonts + %files desktop %defattr(-,root,root,-) @@ -846,31 +944,38 @@ update-desktop-database &>/dev/null || : %{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_initrddir}/wine +# esd subpackage %files esd %defattr(-,root,root,-) %{_libdir}/wine/wineesd.drv.so +# jack subpackage %files jack %defattr(-,root,root,-) %{_libdir}/wine/winejack.drv.so +# nas subpackage %files nas %defattr(-,root,root,-) %{_libdir}/wine/winenas.drv.so +# ldap subpackage %files ldap %defattr(-,root,root,-) %{_libdir}/wine/wldap32.dll.so +# cms subpackage %files cms %defattr(-,root,root,-) %{_libdir}/wine/mscms.dll.so +# twain subpackage %files twain %defattr(-,root,root,-) %{_libdir}/wine/twain_32.dll.so %{_libdir}/wine/sane.ds.so +# capi subpackage %files capi %defattr(-,root,root,-) %{_libdir}/wine/capi2032.dll.so @@ -887,7 +992,6 @@ update-desktop-database &>/dev/null || : %{_bindir}/winemaker %{_bindir}/wmc %{_bindir}/wrc -%{_libdir}/*.so %{_mandir}/man1/widl.1* %{_mandir}/man1/winebuild.1* %{_mandir}/man1/winedump.1* @@ -898,9 +1002,9 @@ update-desktop-database &>/dev/null || : %{_mandir}/man1/winedbg.1* %{_mandir}/man1/wineg++.1* %lang(de) %{_mandir}/de.UTF-8/man1/wine.1* -%{_datadir}/aclocal/wine.m4 %attr(0755, root, root) %dir %{_includedir}/wine %{_includedir}/wine/* +%{_libdir}/*.so %{_libdir}/wine/*.a %{_libdir}/wine/*.def @@ -919,6 +1023,22 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wineoss.drv.so %changelog +* Mon Aug 24 2009 Andreas Bierfert +- 1.1.28-1 +- version upgrade +- make 32bit and 64bit version parallel installable + +* Sun Aug 09 2009 Andreas Bierfert +- 1.1.27-1 +- version upgrade +- WinePulse 0.30 + +* Thu Aug 06 2009 Andreas Bierfert +- 1.1.26-2 +- build 32bit wine on x86_64 and prepare for 64bit parallel build (#487651) +- fix subpackage problems (#485410,#508766,#508944,#514967) +- fix nss dependencies on x86_64 (#508412) + * Sat Jul 18 2009 Andreas Bierfert - 1.1.26-1 - version upgrade diff --git a/winepulse-0.29-configure.ac.patch b/winepulse-0.30-configure.ac.patch similarity index 75% rename from winepulse-0.29-configure.ac.patch rename to winepulse-0.30-configure.ac.patch index d6c4897..e4d800c 100644 --- a/winepulse-0.29-configure.ac.patch +++ b/winepulse-0.30-configure.ac.patch @@ -1,8 +1,8 @@ diff --git a/configure.ac b/configure.ac -index 3b805fe..4c2b822 100644 +index 59b771c..385a7e4 100644 --- a/configure.ac +++ b/configure.ac -@@ -58,6 +58,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), +@@ -60,6 +60,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]), [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi]) @@ -10,32 +10,32 @@ index 3b805fe..4c2b822 100644 AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) -@@ -1253,6 +1254,24 @@ then +@@ -1257,6 +1258,24 @@ then CFLAGS="$save_CFLAGS" fi +dnl **** Check for PulseAudio **** +if test "x$with_pulse" != "xno"; then + if test "$PKG_CONFIG" != "false"; then -+ AC_MSG_CHECKING([for pulseaudio >= 0.9.15]) -+ if "$PKG_CONFIG" --atleast-version=0.9.15 libpulse; then -+ have_pulseaudio="yes" ++ AC_MSG_CHECKING([for pulseaudio >= 0.9.14]) ++ if "$PKG_CONFIG" --atleast-version=0.9.14 libpulse; then ++ have_pulseaudio="yes" + else -+ have_pulseaudio="no" -+ fi -+ AC_MSG_RESULT([$have_pulseaudio]) -+ if test x"$have_pulseaudio" = xyes; then -+ ac_pulse_libs=`$PKG_CONFIG --libs libpulse` -+ AC_DEFINE([HAVE_PULSEAUDIO], 1, [define this if you have pulseaudio]) -+ AC_SUBST(PULSELIBS, "$ac_pulse_libs") -+ fi ++ have_pulseaudio="no" ++ fi ++ AC_MSG_RESULT([$have_pulseaudio]) ++ if test x"$have_pulseaudio" = xyes; then ++ ac_pulse_libs=`$PKG_CONFIG --libs libpulse` ++ AC_DEFINE([HAVE_PULSEAUDIO], 1, [define this if you have pulseaudio]) ++ AC_SUBST(PULSELIBS, "$ac_pulse_libs") ++ fi + fi +fi + dnl **** Check for ALSA 1.x **** AC_SUBST(ALSALIBS,"") if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" -@@ -1379,7 +1398,7 @@ dnl **** Check for libodbc **** +@@ -1391,7 +1410,7 @@ dnl **** Check for libodbc **** WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) dnl **** Check for any sound system **** @@ -44,7 +44,7 @@ index 3b805fe..4c2b822 100644 "$ac_cv_header_sys_soundcard_h" != "yes" -a \ "$ac_cv_header_machine_soundcard_h" != "yes" -a \ "$ac_cv_header_soundcard_h" != "yes" -a \ -@@ -2415,6 +2434,7 @@ WINE_CONFIG_MAKEFILE([dlls/winemp3.acm/Makefile],[dlls/Makedll.rules],[dlls],[AL +@@ -2429,6 +2448,7 @@ WINE_CONFIG_MAKEFILE([dlls/winemp3.acm/Makefile],[dlls/Makedll.rules],[dlls],[AL WINE_CONFIG_MAKEFILE([dlls/winenas.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/wineoss.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/wineps.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) diff --git a/winepulse-0.29.patch b/winepulse-0.30.patch similarity index 99% rename from winepulse-0.29.patch rename to winepulse-0.30.patch index b42e21e..0d8970b 100644 --- a/winepulse-0.29.patch +++ b/winepulse-0.30.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..ee92535 +index 0000000..458a33d --- /dev/null +++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1075 @@ +@@ -0,0 +1,1070 @@ +/* + * Wine Driver for PulseAudio - WaveOut Functionality + * http://pulseaudio.org/ @@ -1616,7 +1616,7 @@ index 0000000..ee92535 + */ +static void wodPlayer_CheckReleasing(WINE_WAVEINST *wwo) { + -+ if (wwo->buffer_attr.tlength == -1 && wwo->lpQueuePtr && !wwo->lpPlayPtr && wwo->state == WINE_WS_PLAYING) { ++ 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. @@ -1625,12 +1625,7 @@ index 0000000..ee92535 + + pa_threaded_mainloop_lock(PULSE_ml); + -+ if (wwo->timing_info->playing) { -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return; -+ } -+ -+ /* Calculate desired buffer length. write_index is the amount of data ++ /* Calculate desired buffer length. write_index is the amount of data + * written. If there is more than one buffer queued, subtract the + * length of one to allow there to be a free buffer for the app. */ + wwo->buffer_attr.tlength = wwo->timing_info->write_index; From e76b1b8a05ed83a0502e7c4be3e8e2abafcdff51 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 30 Aug 2009 21:35:07 +0000 Subject: [PATCH 122/161] - add chooser and 64bit lib file --- wine-64.conf | 1 + wine-chooser.sh | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 wine-64.conf create mode 100644 wine-chooser.sh diff --git a/wine-64.conf b/wine-64.conf new file mode 100644 index 0000000..268f698 --- /dev/null +++ b/wine-64.conf @@ -0,0 +1 @@ +/usr/lib64/wine/ diff --git a/wine-chooser.sh b/wine-chooser.sh new file mode 100644 index 0000000..d14f58a --- /dev/null +++ b/wine-chooser.sh @@ -0,0 +1,39 @@ +#!/bin/sh +HAVE_32=false +HAVE_64=false + +if [ -x "/usr/bin/wine32" ]; then +HAVE_32=true +fi + +if [ -x "/usr/bin/wine64" ]; then +HAVE_64=true +fi + +if [ -f "${1}" ]; then + archtype=`file "${1}" | cut -d':' -f2 | cut -d' ' -f2` + + if [ ${archtype} = 'PE32+' ]; then # 64bit + if $HAVE_64; then + exec "/usr/bin/wine64" "${@}"; + elif [ `uname -m` = 'x86_64' ]; then + echo "Your are trying to run a 64bit application. Please install the 64bit version of wine." + echo "You can achieve this by running 'su -c \"yum install \\\"wine(x86-64)\\\"\"'" + else + echo "Your are trying to run a 64bit application on a 32bit installation of Fedora. You need a 64bit version of Fedora to run this application." + fi + else + if $HAVE_32; then + exec "/usr/bin/wine32" "${@}" + else + echo "Your are trying to run a 32bit application. Please install the 32bit version of wine." + echo "You can achieve this by running 'su -c \"yum install \\\"wine(x86-32)\\\"\"'" + fi + fi +else + if $HAVE_64; then + exec "/usr/bin/wine64" "${@}"; + else + exec "/usr/bin/wine32" "${@}"; + fi +fi From 4f8b4a0f4cc066cc4d84ba5fc235ef9e2fbcfb57 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 2 Sep 2009 20:36:03 +0000 Subject: [PATCH 123/161] - version upgrade - disable f10 x86_64 build (gcc is to old) --- .cvsignore | 2 +- sources | 2 +- wine.spec | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.cvsignore b/.cvsignore index 3de7483..e176e7c 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.28-fe.tar.bz2 +wine-1.1.29-fe.tar.bz2 diff --git a/sources b/sources index c9b13b0..41c29d8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -6342c41f46d0571efae685c17aa5550f wine-1.1.28-fe.tar.bz2 +3782b65da7db94460b93961356715403 wine-1.1.29-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 0f96350..6fb7807 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ %define no64bit 0 Name: wine -Version: 1.1.28 +Version: 1.1.29 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -523,6 +523,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winver.exe.so %{_libdir}/wine/wordpad.exe.so %{_libdir}/wine/write.exe.so +%{_libdir}/wine/dxdiag.exe.so %ifarch %{ix86} %{_bindir}/wine-preloader @@ -727,6 +728,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/oleacc.dll.so %{_libdir}/wine/oleaut32.dll.so %{_libdir}/wine/olecli32.dll.so +%{_libdir}/wine/oledb32.dll.so %{_libdir}/wine/oledlg.dll.so %{_libdir}/wine/olepro32.dll.so %{_libdir}/wine/olesvr32.dll.so @@ -1023,6 +1025,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wineoss.drv.so %changelog +* Wed Sep 02 2009 Andreas Bierfert +- 1.1.29-1 +- version upgrade + * Mon Aug 24 2009 Andreas Bierfert - 1.1.28-1 - version upgrade From 7303b3cc06b44cc6b08d00d85b37ccbcb650c6a8 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Thu, 10 Sep 2009 14:46:01 +0000 Subject: [PATCH 124/161] - fix #505862 --- wine.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index 6fb7807..8e642fa 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define no64bit 0 Name: wine Version: 1.1.29 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -1025,6 +1025,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wineoss.drv.so %changelog +* Thu Sep 10 2009 Andreas Bierfert +- 1.1.29-2 +- rebuild for new gcc (#505862) + * Wed Sep 02 2009 Andreas Bierfert - 1.1.29-1 - version upgrade From 90e0ba75f59d6e4deb1c3331701a164836566761 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 13 Sep 2009 10:56:19 +0000 Subject: [PATCH 125/161] - fix steam regression - winepulse winecfg update --- pulseaudio-winecfg-update.patch | 10 -- steam-regression.patch | 25 ++++ wine.spec | 19 ++- ...g-0.4.patch => winepulse-winecfg-0.6.patch | 136 +++++++++++------- 4 files changed, 126 insertions(+), 64 deletions(-) delete mode 100644 pulseaudio-winecfg-update.patch create mode 100644 steam-regression.patch rename adding-pulseaudio-to-winecfg-0.4.patch => winepulse-winecfg-0.6.patch (73%) diff --git a/pulseaudio-winecfg-update.patch b/pulseaudio-winecfg-update.patch deleted file mode 100644 index 365f99d..0000000 --- a/pulseaudio-winecfg-update.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- programs/winecfg/Ja.rc.orig 2009-08-26 11:55:56.000000000 +0200 -+++ programs/winecfg/Ja.rc 2009-08-26 11:56:52.000000000 +0200 -@@ -275,6 +275,7 @@ - IDS_ACCEL_STANDARD "標準" - IDS_ACCEL_BASIC "基本" - IDS_ACCEL_EMULATION "エミュレーション" -+ IDS_DRIVER_PULSE "PulseAudio ドライバ" - IDS_DRIVER_ALSA "ALSA ドライバ" - IDS_DRIVER_ESOUND "EsounD ドライバ" - IDS_DRIVER_OSS "OSS ドライバ" diff --git a/steam-regression.patch b/steam-regression.patch new file mode 100644 index 0000000..2b53d7e --- /dev/null +++ b/steam-regression.patch @@ -0,0 +1,25 @@ +--- a/dlls/winex11.drv/bitmap.c ++++ b/dlls/winex11.drv/bitmap.c +@@ -110,10 +110,6 @@ HBITMAP CDECL X11DRV_SelectBitmap( X11DRV_PDEVICE *physDev, HBITMAP hbitmap ) + if (physDev->depth != physBitmap->pixmap_depth) + { + physDev->depth = physBitmap->pixmap_depth; +- if(physDev->depth == 1) +- physDev->color_shifts = NULL; +- else +- physDev->color_shifts = &physBitmap->pixmap_color_shifts; + wine_tsx11_lock(); + XFreeGC( gdi_display, physDev->gc ); + physDev->gc = XCreateGC( gdi_display, physDev->drawable, 0, NULL ); +@@ -122,6 +118,12 @@ HBITMAP CDECL X11DRV_SelectBitmap( X11DRV_PDEVICE *physDev, HBITMAP hbitmap ) + XFlush( gdi_display ); + wine_tsx11_unlock(); + } ++ ++ if(physDev->depth == 1) ++ physDev->color_shifts = NULL; ++ else ++ physDev->color_shifts = &physBitmap->pixmap_color_shifts; ++ + return hbitmap; + } diff --git a/wine.spec b/wine.spec index 8e642fa..b3a54f2 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define no64bit 0 Name: wine Version: 1.1.29 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -49,11 +49,16 @@ Source300: wine-mime-msi.desktop # and http://art.ified.ca/?page_id=40 Patch400: http://art.ified.ca/downloads/winepulse-0.30-configure.ac.patch Patch401: http://art.ified.ca/downloads/winepulse-0.30.patch -Patch402: http://art.ified.ca/downloads/adding-pulseaudio-to-winecfg-0.4.patch +Patch402: http://art.ified.ca/downloads/winepulse/winepulse-winecfg-0.6.patch Source402: README-FEDORA-PULSEAUDIO -Patch403: pulseaudio-winecfg-update.patch Patch1: wine-rpath.patch + +# bugfix patches +# fix steam regression http://bugs.winehq.org/show_bug.cgi?id=19916 +# upstream commit 70241904b9efacab9fb6c7d8701b1cfdb86f49f7 +Patch1000: steam-regression.patch + Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %if !%{?no64bit} @@ -301,7 +306,8 @@ This package adds an oss driver for wine. %patch400 -p1 %patch401 -p1 %patch402 -p1 -%patch403 + +%patch1000 -p1 autoreconf @@ -1025,6 +1031,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wineoss.drv.so %changelog +* Sun Sep 13 2009 Andreas Bierfert +- 1.1.29-3 +- patch for steam regression (upstream #19916) +- update winepulse winecfg patch + * Thu Sep 10 2009 Andreas Bierfert - 1.1.29-2 - rebuild for new gcc (#505862) diff --git a/adding-pulseaudio-to-winecfg-0.4.patch b/winepulse-winecfg-0.6.patch similarity index 73% rename from adding-pulseaudio-to-winecfg-0.4.patch rename to winepulse-winecfg-0.6.patch index 3600a57..9cbbf58 100644 --- a/adding-pulseaudio-to-winecfg-0.4.patch +++ b/winepulse-winecfg-0.6.patch @@ -1,92 +1,92 @@ diff --git a/programs/winecfg/Bg.rc b/programs/winecfg/Bg.rc -index fcdf895..e17690e 100644 +index fcdf895..ec24068 100644 --- a/programs/winecfg/Bg.rc +++ b/programs/winecfg/Bg.rc @@ -276,6 +276,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio Driver" ++ IDS_DRIVER_PULSE "PulseAudio Driver" IDS_DRIVER_ALSA "ALSA Driver" IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Cs.rc b/programs/winecfg/Cs.rc -index d9c0b28..9bcc033 100644 +index d9c0b28..6171f1f 100644 --- a/programs/winecfg/Cs.rc +++ b/programs/winecfg/Cs.rc @@ -276,6 +276,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardn" IDS_ACCEL_BASIC "Zkladn" IDS_ACCEL_EMULATION "Emulace" -+ IDS_DRIVER_PULSE "Ovlada PulseAudio" ++ IDS_DRIVER_PULSE "Ovlada PulseAudio" IDS_DRIVER_ALSA "Ovlada ALSA" IDS_DRIVER_ESOUND "Ovlada EsounD" IDS_DRIVER_OSS "Ovlada OSS" diff --git a/programs/winecfg/Da.rc b/programs/winecfg/Da.rc -index f53aead..690c7f5 100644 +index f53aead..e33bd78 100644 --- a/programs/winecfg/Da.rc +++ b/programs/winecfg/Da.rc @@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grundlggende" IDS_ACCEL_EMULATION "Emulring" -+ IDS_DRIVER_PULSE "PulseAudio-driver" ++ IDS_DRIVER_PULSE "PulseAudio-driver" IDS_DRIVER_ALSA "ALSA-driver" IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/De.rc b/programs/winecfg/De.rc -index e6bed15..d3027bc 100644 +index aadd21e..f3016ab 100644 --- a/programs/winecfg/De.rc +++ b/programs/winecfg/De.rc -@@ -272,6 +272,7 @@ BEGIN +@@ -282,6 +282,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Einfach" IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio-Treiber" ++ IDS_DRIVER_PULSE "PulseAudio-Treiber" IDS_DRIVER_ALSA "ALSA-Treiber" IDS_DRIVER_ESOUND "EsounD-Treiber" IDS_DRIVER_OSS "OSS-Treiber" diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc -index 049aaa7..cef7c4a 100644 +index 6aa5120..6f30805 100644 --- a/programs/winecfg/En.rc +++ b/programs/winecfg/En.rc -@@ -272,6 +272,7 @@ BEGIN +@@ -282,6 +282,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio Driver" ++ IDS_DRIVER_PULSE "PulseAudio Driver" IDS_DRIVER_ALSA "ALSA Driver" IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc -index 1771b4e..c49f9a3 100644 +index 1771b4e..aaacaa9 100644 --- a/programs/winecfg/Es.rc +++ b/programs/winecfg/Es.rc @@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Estndar" IDS_ACCEL_BASIC "Bsica" IDS_ACCEL_EMULATION "Emulacin" -+ IDS_DRIVER_PULSE "Manejador PulseAudio" ++ IDS_DRIVER_PULSE "Manejador PulseAudio" IDS_DRIVER_ALSA "Manejador ALSA" IDS_DRIVER_ESOUND "Manejador EsounD" IDS_DRIVER_OSS "Manejador OSS" diff --git a/programs/winecfg/Fi.rc b/programs/winecfg/Fi.rc -index 0dedf3a..097a4d2 100644 +index 0dedf3a..5217482 100644 --- a/programs/winecfg/Fi.rc +++ b/programs/winecfg/Fi.rc @@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio Driver" ++ IDS_DRIVER_PULSE "PulseAudio Driver" IDS_DRIVER_ALSA "ALSA Driver" IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Fr.rc b/programs/winecfg/Fr.rc -index 52c9888..1bd92b1 100644 +index a9184f9..004ebb0 100644 --- a/programs/winecfg/Fr.rc +++ b/programs/winecfg/Fr.rc -@@ -274,6 +274,7 @@ BEGIN +@@ -284,6 +284,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basique" IDS_ACCEL_EMULATION "Émulation" @@ -95,62 +95,98 @@ index 52c9888..1bd92b1 100644 IDS_DRIVER_ESOUND "Pilote EsounD" IDS_DRIVER_OSS "Pilote OSS" diff --git a/programs/winecfg/Hu.rc b/programs/winecfg/Hu.rc -index dc887fe..3ba696f 100644 +index dc887fe..9bd192e 100644 --- a/programs/winecfg/Hu.rc +++ b/programs/winecfg/Hu.rc @@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio Driver" ++ IDS_DRIVER_PULSE "PulseAudio Driver" IDS_DRIVER_ALSA "ALSA Driver" IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" +diff --git a/programs/winecfg/It.rc b/programs/winecfg/It.rc +index ddeda8c..1530b5f 100644 +--- a/programs/winecfg/It.rc ++++ b/programs/winecfg/It.rc +@@ -284,6 +284,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standard" + IDS_ACCEL_BASIC "Base" + IDS_ACCEL_EMULATION "Emulazione" ++ IDS_DRIVER_PULSE "Driver PulseAudio" + IDS_DRIVER_ALSA "Driver ALSA" + IDS_DRIVER_ESOUND "Driver Esound" + IDS_DRIVER_OSS "Driver OSS" +diff --git a/programs/winecfg/Ja.rc b/programs/winecfg/Ja.rc +index 5b77da7..316d2e5 100644 +--- a/programs/winecfg/Ja.rc ++++ b/programs/winecfg/Ja.rc +@@ -285,6 +285,7 @@ BEGIN + IDS_ACCEL_STANDARD "標準" + IDS_ACCEL_BASIC "基本" + IDS_ACCEL_EMULATION "エミュレーション" ++ IDS_DRIVER_PULSE "PulseAudio ドライバ" + IDS_DRIVER_ALSA "ALSA ドライバ" + IDS_DRIVER_ESOUND "EsounD ドライバ" + IDS_DRIVER_OSS "OSS ドライバ" diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc -index 6f13e0c..d5403da 100644 +index bf06647..66f9803 100644 --- a/programs/winecfg/Ko.rc +++ b/programs/winecfg/Ko.rc -@@ -274,6 +274,7 @@ BEGIN +@@ -285,6 +285,7 @@ BEGIN IDS_ACCEL_STANDARD "ǥ" IDS_ACCEL_BASIC "⺻" IDS_ACCEL_EMULATION "ֹķ̼" -+ IDS_DRIVER_PULSE "PulseAudio ̹" ++ IDS_DRIVER_PULSE "PulseAudio ̹" IDS_DRIVER_ALSA "ALSA ̹" IDS_DRIVER_ESOUND "EsounD ̹" IDS_DRIVER_OSS "OSS ̹" +diff --git a/programs/winecfg/Lt.rc b/programs/winecfg/Lt.rc +index 7208cc6..5aa8fdb 100644 +--- a/programs/winecfg/Lt.rc ++++ b/programs/winecfg/Lt.rc +@@ -283,6 +283,7 @@ BEGIN + IDS_ACCEL_STANDARD "Standartinis" + IDS_ACCEL_BASIC "Bazinis" + IDS_ACCEL_EMULATION "Emuliacija" ++ IDS_DRIVER_PULSE "PulseAudio tvarkyklė" + IDS_DRIVER_ALSA "ALSA tvarkyklė" + IDS_DRIVER_ESOUND "EsounD tvarkyklė" + IDS_DRIVER_OSS "OSS tvarkyklė" diff --git a/programs/winecfg/Nl.rc b/programs/winecfg/Nl.rc -index 4cd45f0..d23f359 100644 +index 2fbba6a..802abab 100644 --- a/programs/winecfg/Nl.rc +++ b/programs/winecfg/Nl.rc -@@ -273,6 +273,7 @@ BEGIN +@@ -283,6 +283,7 @@ BEGIN IDS_ACCEL_STANDARD "Standaard" IDS_ACCEL_BASIC "Eenvoudig" IDS_ACCEL_EMULATION "Emulatie" -+ IDS_DRIVER_PULSE "PulseAudio Stuurprogramma" ++ IDS_DRIVER_PULSE "PulseAudio Stuurprogramma" IDS_DRIVER_ALSA "ALSA Stuurprogramma" IDS_DRIVER_ESOUND "EsounD Stuurprogramma" IDS_DRIVER_OSS "OSS Stuurprogramma" diff --git a/programs/winecfg/No.rc b/programs/winecfg/No.rc -index cc34fad..71876ba 100644 +index cc34fad..0f0aea8 100644 --- a/programs/winecfg/No.rc +++ b/programs/winecfg/No.rc @@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grunnleggende" IDS_ACCEL_EMULATION "Emulering" -+ IDS_DRIVER_PULSE "PulseAudio-driver" ++ IDS_DRIVER_PULSE "PulseAudio-driver" IDS_DRIVER_ALSA "ALSA-driver" IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/Pl.rc b/programs/winecfg/Pl.rc -index d884881..d6405b1 100644 +index d884881..bb97de5 100644 --- a/programs/winecfg/Pl.rc +++ b/programs/winecfg/Pl.rc @@ -273,6 +273,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardowe" IDS_ACCEL_BASIC "Podstawowe" IDS_ACCEL_EMULATION "Emulacja" -+ IDS_DRIVER_PULSE "Sterownik PulseAudio" ++ IDS_DRIVER_PULSE "Sterownik PulseAudio" IDS_DRIVER_ALSA "Sterownik ALSA" IDS_DRIVER_ESOUND "Sterownik EsounD" IDS_DRIVER_OSS "Sterownik OSS" @@ -167,86 +203,86 @@ index 683dc68..be92466 100644 IDS_DRIVER_ESOUND "Controlador EsounD" IDS_DRIVER_OSS "Controlador OSS" diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc -index f12949f..2101ea1 100644 +index 5626018..6c84511 100644 --- a/programs/winecfg/Ro.rc +++ b/programs/winecfg/Ro.rc -@@ -272,6 +272,7 @@ BEGIN +@@ -282,6 +282,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "De bază" IDS_ACCEL_EMULATION "Emulare" -+ IDS_DRIVER_PULSE "Driver PulseAudio" ++ IDS_DRIVER_PULSE "Driver PulseAudio" IDS_DRIVER_ALSA "Driver ALSA" IDS_DRIVER_ESOUND "Driver Esound" IDS_DRIVER_OSS "Driver OSS" diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc -index 7293cbc..fb57527 100644 +index 38b4546..73c0250 100644 --- a/programs/winecfg/Ru.rc +++ b/programs/winecfg/Ru.rc -@@ -277,6 +277,7 @@ BEGIN +@@ -287,6 +287,7 @@ BEGIN IDS_ACCEL_STANDARD "Стандартное" IDS_ACCEL_BASIC "Минимальное" IDS_ACCEL_EMULATION "Эмуляция" -+ IDS_DRIVER_PULSE "PulseAudio драйвер" ++ IDS_DRIVER_PULSE "PulseAudio драйвер" IDS_DRIVER_ALSA "ALSA драйвер" IDS_DRIVER_ESOUND "EsounD драйвер" IDS_DRIVER_OSS "OSS драйвер" diff --git a/programs/winecfg/Si.rc b/programs/winecfg/Si.rc -index feaef36..c26e5cb 100644 +index feaef36..1d10bae 100644 --- a/programs/winecfg/Si.rc +++ b/programs/winecfg/Si.rc @@ -272,6 +272,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardno" IDS_ACCEL_BASIC "Osnovno" IDS_ACCEL_EMULATION "Emulacija" -+ IDS_DRIVER_PULSE "PulseAudio gonilnik" ++ IDS_DRIVER_PULSE "PulseAudio gonilnik" IDS_DRIVER_ALSA "ALSA gonilnik" IDS_DRIVER_ESOUND "EsounD gonilnik" IDS_DRIVER_OSS "OSS gonilnik" diff --git a/programs/winecfg/Sv.rc b/programs/winecfg/Sv.rc -index 7fea5aa..35eb871 100644 +index 7fea5aa..1979b5a 100644 --- a/programs/winecfg/Sv.rc +++ b/programs/winecfg/Sv.rc @@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grundlggande" IDS_ACCEL_EMULATION "Emulering" -+ IDS_DRIVER_PULSE "PulseAudio-drivrutin" ++ IDS_DRIVER_PULSE "PulseAudio-drivrutin" IDS_DRIVER_ALSA "ALSA-drivrutin" IDS_DRIVER_ESOUND "EsounD-drivrutin" IDS_DRIVER_OSS "OSS-drivrutin" diff --git a/programs/winecfg/Tr.rc b/programs/winecfg/Tr.rc -index 0fa9778..2a23112 100644 +index 0fa9778..5ea7da1 100644 --- a/programs/winecfg/Tr.rc +++ b/programs/winecfg/Tr.rc @@ -270,6 +270,7 @@ BEGIN IDS_ACCEL_STANDARD "Standart" IDS_ACCEL_BASIC "Temel" IDS_ACCEL_EMULATION "Taklit" -+ IDS_DRIVER_PULSE "PulseAudio Srcs" ++ IDS_DRIVER_PULSE "PulseAudio Srcs" IDS_DRIVER_ALSA "ALSA Srcs" IDS_DRIVER_ESOUND "EsounD Srcs" IDS_DRIVER_OSS "OSS Srcs" diff --git a/programs/winecfg/Zh.rc b/programs/winecfg/Zh.rc -index fea66b7..bc0aaaf 100644 +index 8c84061..3de1da8 100644 --- a/programs/winecfg/Zh.rc +++ b/programs/winecfg/Zh.rc -@@ -273,6 +273,7 @@ BEGIN +@@ -275,6 +275,7 @@ BEGIN IDS_ACCEL_STANDARD "标准" IDS_ACCEL_BASIC "基本" IDS_ACCEL_EMULATION "软件模拟" -+ IDS_DRIVER_PULSE "PulseAudio 驱动" ++ IDS_DRIVER_PULSE "PulseAudio 驱动" IDS_DRIVER_ALSA "ALSA 驱动" IDS_DRIVER_ESOUND "EsounD 驱动" IDS_DRIVER_OSS "OSS 驱动" diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c -index 9f8a0a2..0ecb6c3 100644 +index 9f8a0a2..59837ef 100644 --- a/programs/winecfg/audio.c +++ b/programs/winecfg/audio.c @@ -89,6 +89,7 @@ typedef struct } AUDIO_DRIVER; static const AUDIO_DRIVER sAudioDrivers[] = { -+ {IDS_DRIVER_PULSE, "pulse"}, ++ {IDS_DRIVER_PULSE, "pulse"}, {IDS_DRIVER_ALSA, "alsa"}, {IDS_DRIVER_OSS, "oss"}, {IDS_DRIVER_COREAUDIO, "coreaudio"}, @@ -263,15 +299,15 @@ index 37cc12b..7c13fad 100644 "winmm", "wintab32", diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h -index 27736b7..f8ba2ee 100644 +index f006861..57b2a15 100644 --- a/programs/winecfg/resource.h +++ b/programs/winecfg/resource.h -@@ -185,7 +185,7 @@ +@@ -187,7 +187,7 @@ #define IDS_ACCEL_BASIC 8302 #define IDS_ACCEL_EMULATION 8303 #define IDS_DRIVER_ALSA 8304 - -+#define IDS_DRIVER_PULSE 8305 ++#define IDS_DRIVER_PULSE 8305 #define IDS_DRIVER_ESOUND 8306 #define IDS_DRIVER_OSS 8307 #define IDS_DRIVER_JACK 8308 From aa88bf711f6baba51d2f18ea09b4788a7fb3e819 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 30 Oct 2009 14:57:28 +0000 Subject: [PATCH 126/161] - version upgrade --- .cvsignore | 1 - sources | 1 - steam-regression.patch | 25 ------ wine-rpath.patch | 29 +++++-- wine.spec | 64 +++++++++----- ...patch => winepulse-0.32-configure.ac.patch | 18 ++-- winepulse-0.30.patch => winepulse-0.32.patch | 83 +++++++------------ 7 files changed, 108 insertions(+), 113 deletions(-) delete mode 100644 steam-regression.patch rename winepulse-0.30-configure.ac.patch => winepulse-0.32-configure.ac.patch (78%) rename winepulse-0.30.patch => winepulse-0.32.patch (97%) diff --git a/.cvsignore b/.cvsignore index e176e7c..e69de29 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +0,0 @@ -wine-1.1.29-fe.tar.bz2 diff --git a/sources b/sources index 41c29d8..e69de29 100644 --- a/sources +++ b/sources @@ -1 +0,0 @@ -3782b65da7db94460b93961356715403 wine-1.1.29-fe.tar.bz2 diff --git a/steam-regression.patch b/steam-regression.patch deleted file mode 100644 index 2b53d7e..0000000 --- a/steam-regression.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- a/dlls/winex11.drv/bitmap.c -+++ b/dlls/winex11.drv/bitmap.c -@@ -110,10 +110,6 @@ HBITMAP CDECL X11DRV_SelectBitmap( X11DRV_PDEVICE *physDev, HBITMAP hbitmap ) - if (physDev->depth != physBitmap->pixmap_depth) - { - physDev->depth = physBitmap->pixmap_depth; -- if(physDev->depth == 1) -- physDev->color_shifts = NULL; -- else -- physDev->color_shifts = &physBitmap->pixmap_color_shifts; - wine_tsx11_lock(); - XFreeGC( gdi_display, physDev->gc ); - physDev->gc = XCreateGC( gdi_display, physDev->drawable, 0, NULL ); -@@ -122,6 +118,12 @@ HBITMAP CDECL X11DRV_SelectBitmap( X11DRV_PDEVICE *physDev, HBITMAP hbitmap ) - XFlush( gdi_display ); - wine_tsx11_unlock(); - } -+ -+ if(physDev->depth == 1) -+ physDev->color_shifts = NULL; -+ else -+ physDev->color_shifts = &physBitmap->pixmap_color_shifts; -+ - return hbitmap; - } diff --git a/wine-rpath.patch b/wine-rpath.patch index 06e1045..f8f6585 100644 --- a/wine-rpath.patch +++ b/wine-rpath.patch @@ -1,6 +1,6 @@ ---- configure.orig 2009-08-26 11:47:17.000000000 +0200 -+++ configure 2009-08-26 11:50:07.000000000 +0200 -@@ -6565,14 +6565,14 @@ +--- configure.orig 2009-10-29 18:57:06.000000000 +0100 ++++ configure 2009-10-29 18:58:49.000000000 +0100 +@@ -6758,14 +6758,14 @@ fi @@ -18,15 +18,28 @@ +CFLAGS="$CFLAGS -fPIC" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - -@@ -6597,8 +6597,8 @@ + int main(int argc, char *argv) { return 0; } +@@ -6783,17 +6783,17 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if test `eval 'as_val=${'$as_ac_var'};$as_echo "$as_val"'` = yes; then : - LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" - LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" + LDRPATH_INSTALL="" -+ LDRPATH_LOCAL="" ++ LDRPATH_LOCAL="" else - as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,-R,\\$ORIGIN/../lib" | $as_tr_sh` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 +- as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,-R,\\$ORIGIN/../lib" | $as_tr_sh` +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 +-$as_echo_n "checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib... " >&6; } ++ as_ac_var=`$as_echo "ac_cv_cflags_-fPIC" | $as_tr_sh` ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC" >&5 ++$as_echo_n "checking whether the compiler supports -fPIC " >&6; } + if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 + else + ac_wine_try_cflags_saved=$CFLAGS +-CFLAGS="$CFLAGS -fPIC -Wl,-R,\$ORIGIN/../lib" ++CFLAGS="$CFLAGS -fPIC" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + int main(int argc, char *argv) { return 0; } diff --git a/wine.spec b/wine.spec index b3a54f2..8b61415 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define no64bit 0 Name: wine -Version: 1.1.29 -Release: 3%{?dist} +Version: 1.1.32 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -47,17 +47,15 @@ Source300: wine-mime-msi.desktop # explain how to use wine with pulseaudio # 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.30-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse-0.30.patch -Patch402: http://art.ified.ca/downloads/winepulse/winepulse-winecfg-0.6.patch +Patch400: http://art.ified.ca/downloads/winepulse-0.32-configure.ac.patch +Patch401: http://art.ified.ca/downloads/winepulse-0.32.patch +Patch402: http://art.ified.ca/downloads/winepulse/winepulse-winecfg-0.6.patch Source402: README-FEDORA-PULSEAUDIO Patch1: wine-rpath.patch # bugfix patches -# fix steam regression http://bugs.winehq.org/show_bug.cgi?id=19916 -# upstream commit 70241904b9efacab9fb6c7d8701b1cfdb86f49f7 -Patch1000: steam-regression.patch +# none Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -112,6 +110,7 @@ BuildRequires: dbus-devel hal-devel BuildRequires: gnutls-devel BuildRequires: pulseaudio-libs-devel BuildRequires: gsm-devel +BuildRequires: openal-soft-devel # noarch Requires: wine-common = %{version}-%{release} @@ -299,6 +298,15 @@ Requires: wine-core = %{version}-%{release} %description oss This package adds an oss driver for wine. +%package openal +Summary: Openal support for wine +Group: System Environment/Libraries +Requires: wine-core = %{version}-%{release} + +%description openal +This package adds an openal driver for wine. + + %prep %setup -q -n %{name}-%{version}-fe @@ -307,8 +315,6 @@ This package adds an oss driver for wine. %patch401 -p1 %patch402 -p1 -%patch1000 -p1 - autoreconf %build @@ -498,6 +504,9 @@ update-desktop-database &>/dev/null || : %post oss -p /sbin/ldconfig %postun oss -p /sbin/ldconfig +%post openal -p /sbin/ldconfig +%postun openal -p /sbin/ldconfig + %files %defattr(-,root,root,-) # meta package @@ -550,6 +559,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/fakedlls/* %{_libdir}/wine/cacls.exe.so %{_libdir}/wine/expand.exe.so +%{_libdir}/wine/extrac32.exe.so %{_libdir}/wine/winhlp32.exe.so %{_libdir}/wine/msiexec.exe.so %{_libdir}/wine/net.exe.so @@ -642,6 +652,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dxgi.dll.so %{_libdir}/wine/eject.exe.so %{_libdir}/wine/faultrep.dll.so +%{_libdir}/wine/fltlib.dll.so %{_libdir}/wine/fusion.dll.so %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gdiplus.dll.so @@ -817,7 +828,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wintab32.dll.so %{_libdir}/wine/wintrust.dll.so %{_libdir}/wine/wnaspi32.dll.so -%{_libdir}/wine/wow32.dll.so %{_libdir}/wine/ws2_32.dll.so %{_libdir}/wine/wsock32.dll.so %{_libdir}/wine/wtsapi32.dll.so @@ -843,13 +853,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winevdm.exe.so %{_libdir}/wine/ifsmgr.vxd.so %{_libdir}/wine/mmdevldr.vxd.so -%{_libdir}/wine/mmsystem.dll16 %{_libdir}/wine/monodebg.vxd.so %{_libdir}/wine/vdhcp.vxd.so -%{_libdir}/wine/ver.dll16 %{_libdir}/wine/user.exe16 %{_libdir}/wine/vmm.vxd.so -%{_libdir}/wine/wing.dll16 %{_libdir}/wine/vnbt.vxd.so %{_libdir}/wine/vnetbios.vxd.so %{_libdir}/wine/vtdapi.vxd.so @@ -857,12 +864,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/w32skrnl.dll.so %{_libdir}/wine/commdlg.dll16 %{_libdir}/wine/gdi.exe16 -%{_libdir}/wine/setupx.dll16 -%{_libdir}/wine/system.drv16 -%{_libdir}/wine/toolhelp.dll16 -%{_libdir}/wine/winsock.dll16 %{_libdir}/wine/wprocs.dll16 -%{_libdir}/wine/wineps16.drv16 %{_libdir}/wine/avifile.dll16.so %{_libdir}/wine/comm.drv16.so @@ -876,6 +878,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/krnl386.exe16 %{_libdir}/wine/keyboard.drv16.so %{_libdir}/wine/lzexpand.dll16.so +%{_libdir}/wine/mmsystem.dll16.so %{_libdir}/wine/mouse.drv16.so %{_libdir}/wine/msacm.dll16.so %{_libdir}/wine/msvideo.dll16.so @@ -888,21 +891,29 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/olecli.dll16.so %{_libdir}/wine/olesvr.dll16.so %{_libdir}/wine/rasapi16.dll16.so +%{_libdir}/wine/setupx.dll16.so %{_libdir}/wine/shell.dll16.so %{_libdir}/wine/sound.drv16.so %{_libdir}/wine/storage.dll16.so %{_libdir}/wine/stress.dll16.so +%{_libdir}/wine/system.drv16.so +%{_libdir}/wine/toolhelp.dll16.so %{_libdir}/wine/twain.dll16.so %{_libdir}/wine/typelib.dll16.so +%{_libdir}/wine/ver.dll16.so %{_libdir}/wine/w32sys.dll16.so %{_libdir}/wine/win32s16.dll16.so %{_libdir}/wine/win87em.dll16.so %{_libdir}/wine/winaspi.dll16.so %{_libdir}/wine/windebug.dll16.so +%{_libdir}/wine/wineps16.drv16.so +%{_libdir}/wine/wing.dll16.so %{_libdir}/wine/winhelp.exe16.so %{_libdir}/wine/winnls.dll16.so %{_libdir}/wine/winoldap.mod16.so +%{_libdir}/wine/winsock.dll16.so %{_libdir}/wine/wintab.dll16.so +%{_libdir}/wine/wow32.dll.so %endif %files common @@ -1030,7 +1041,22 @@ update-desktop-database &>/dev/null || : %defattr(-,root,root,-) %{_libdir}/wine/wineoss.drv.so +%files openal +%defattr(-,root,root,-) +%{_libdir}/wine/openal32.dll.so + %changelog +* Tue Oct 27 2009 Andreas Bierfert +- 1.1.32-1 +- version upgrade (#531358) +- update winepulse + +* Mon Sep 28 2009 Andreas Bierfert +- 1.1.30-1 +- version upgrade +- openal support +- drop steam regression patch + * Sun Sep 13 2009 Andreas Bierfert - 1.1.29-3 - patch for steam regression (upstream #19916) diff --git a/winepulse-0.30-configure.ac.patch b/winepulse-0.32-configure.ac.patch similarity index 78% rename from winepulse-0.30-configure.ac.patch rename to winepulse-0.32-configure.ac.patch index e4d800c..1db339e 100644 --- a/winepulse-0.30-configure.ac.patch +++ b/winepulse-0.32-configure.ac.patch @@ -1,8 +1,8 @@ diff --git a/configure.ac b/configure.ac -index 59b771c..385a7e4 100644 +index 0cc339b..3f34f12 100644 --- a/configure.ac +++ b/configure.ac -@@ -60,6 +60,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), +@@ -64,6 +64,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]), [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi]) @@ -10,7 +10,7 @@ index 59b771c..385a7e4 100644 AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) -@@ -1257,6 +1258,24 @@ then +@@ -1297,6 +1298,28 @@ then CFLAGS="$save_CFLAGS" fi @@ -28,6 +28,10 @@ index 59b771c..385a7e4 100644 + ac_pulse_libs=`$PKG_CONFIG --libs libpulse` + AC_DEFINE([HAVE_PULSEAUDIO], 1, [define this if you have pulseaudio]) + AC_SUBST(PULSELIBS, "$ac_pulse_libs") ++ else ++ dnl This warning should be removed if ever commited. ++ dnl Only useful to show that the problem wasn't the patch. ++ WINE_WARNING([libpulse not found or too old. Pulseaudio support will NOT be built.]) + fi + fi +fi @@ -35,7 +39,7 @@ index 59b771c..385a7e4 100644 dnl **** Check for ALSA 1.x **** AC_SUBST(ALSALIBS,"") if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" -@@ -1391,7 +1410,7 @@ dnl **** Check for libodbc **** +@@ -1449,7 +1472,7 @@ dnl **** Check for libodbc **** WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) dnl **** Check for any sound system **** @@ -44,11 +48,11 @@ index 59b771c..385a7e4 100644 "$ac_cv_header_sys_soundcard_h" != "yes" -a \ "$ac_cv_header_machine_soundcard_h" != "yes" -a \ "$ac_cv_header_soundcard_h" != "yes" -a \ -@@ -2429,6 +2448,7 @@ WINE_CONFIG_MAKEFILE([dlls/winemp3.acm/Makefile],[dlls/Makedll.rules],[dlls],[AL - WINE_CONFIG_MAKEFILE([dlls/winenas.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) +@@ -2509,6 +2532,7 @@ WINE_CONFIG_MAKEFILE([dlls/winenas.drv/Makefile],[dlls/Makedll.rules],[dlls],[AL WINE_CONFIG_MAKEFILE([dlls/wineoss.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/wineps.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/wineps16.drv16/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS],[enable_win16]) +WINE_CONFIG_MAKEFILE([dlls/winepulse.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/winequartz.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) WINE_CONFIG_MAKEFILE([dlls/winex11.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/wing32/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) + WINE_CONFIG_MAKEFILE([dlls/wing.dll16/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS],[enable_win16]) diff --git a/winepulse-0.30.patch b/winepulse-0.32.patch similarity index 97% rename from winepulse-0.30.patch rename to winepulse-0.32.patch index 0d8970b..b3d4172 100644 --- a/winepulse-0.30.patch +++ b/winepulse-0.32.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..458a33d +index 0000000..334cc72 --- /dev/null +++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1070 @@ +@@ -0,0 +1,1049 @@ +/* + * Wine Driver for PulseAudio - WaveOut Functionality + * http://pulseaudio.org/ @@ -1615,6 +1615,7 @@ index 0000000..458a33d + * the size of the buffer on the pulse server side. + */ +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; @@ -1624,12 +1625,11 @@ index 0000000..458a33d + * streams for server version 0.9.11 to 0.9.14 */ + + pa_threaded_mainloop_lock(PULSE_ml); -+ -+ /* Calculate desired buffer length. write_index is the amount of data -+ * written. If there is more than one buffer queued, subtract the -+ * length of one to allow there to be a free buffer for the app. */ -+ wwo->buffer_attr.tlength = wwo->timing_info->write_index; -+ if (wwo->lpQueuePtr->lpNext) wwo->buffer_attr.tlength -= wwo->lpQueuePtr->dwBufferLength; ++ ++ /* 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, @@ -1672,7 +1672,7 @@ index 0000000..458a33d + /* See if this data has been played, and if not, return when it will have been */ + wait = pa_bytes_to_usec(lpWaveHdr->reserved + lpWaveHdr->dwBufferLength, &wwo->sample_spec); + if (wait >= time) { -+ wait = ((wait - time) + 999) / 1000; ++ wait = ((wait - time) + (pa_usec_t)999) / (pa_usec_t)1000; + return wait ?: 1; + } + } @@ -1809,7 +1809,7 @@ index 0000000..458a33d + * not reset to 0 on Reset() calls. Better than pa_stream_get_time() as it is + * more constant. + */ -+static pa_usec_t WAVEOUT_GetStreamTime(WINE_WAVEINST *wwo) { ++static pa_usec_t wodPlayer_GetStreamTime(WINE_WAVEINST *wwo) { + pa_usec_t time, temp; + const pa_timing_info *t; + @@ -1909,38 +1909,22 @@ index 0000000..458a33d + 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); + -+ /* Underrun means playback started, so don't allow future setting of the buffer attributes */ -+ if (wwo->buffer_attr.tlength == (uint32_t)-1) wwo->buffer_attr.tlength = 0; -+ + SetEvent(ev); + break; + -+ case WINE_WM_CLOSING: /* If param = 1, close because of a failure */ ++ case WINE_WM_CLOSING: + wwo->hThread = NULL; -+ if ((DWORD)param == 1) { -+ /* If we are here, the stream has failed */ -+ wwo->state = WINE_WS_FAILED; -+ SetEvent(ev); -+ PULSE_DestroyRingMessage(&wwo->msgRing); -+ wodPlayer_NotifyCompletions(wwo, TRUE, 0); -+ wodPlayer_NotifyClient(wwo, WOM_CLOSE, 0L, 0L); -+ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_disconnect(wwo->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ TRACE("Thread exiting because of failure.\n"); -+ ExitThread(1); -+ /* Stream instance will get dereferenced in wod_Close */ -+ } + wwo->state = WINE_WS_CLOSED; + /* sanity check: this should not happen since the device must have been reset before */ + if (wwo->lpQueuePtr || wwo->lpPlayPtr) ERR("out of sync\n"); @@ -1984,10 +1968,12 @@ index 0000000..458a33d + + /* If there is audio playing, return headers and get next timeout */ + if (wwo->state == WINE_WS_PLAYING) { -+ dwSleepTime = wodPlayer_NotifyCompletions(wwo, FALSE, WAVEOUT_GetStreamTime(wwo)); ++ dwSleepTime = wodPlayer_NotifyCompletions(wwo, FALSE, wodPlayer_GetStreamTime(wwo)); + } else + dwSleepTime = INFINITE; + } ++ ++ return 0; +} + +/************************************************************************** @@ -2062,7 +2048,7 @@ index 0000000..458a33d + pa_stream_set_moved_callback (wwo->stream, PULSE_StreamMovedCallback, wwo); + pa_stream_set_suspended_callback (wwo->stream, PULSE_StreamSuspendedCallback, wwo); + -+ /* Blank (but don't send) Buffer Attributes */ ++ /* Blank Buffer Attributes */ + wwo->buffer_attr.prebuf = (uint32_t)-1; + wwo->buffer_attr.tlength = (uint32_t)-1; + wwo->buffer_attr.minreq = (uint32_t)-1; @@ -2224,7 +2210,7 @@ index 0000000..458a33d + + if (lpTime == NULL) return MMSYSERR_INVALPARAM; + -+ time = WAVEOUT_GetStreamTime(wwo); ++ time = wodPlayer_GetStreamTime(wwo); + + temp = pa_bytes_to_usec(wwo->dwLastReset, &wwo->sample_spec); + if (time > temp) time -= temp; else time = 0; @@ -2277,7 +2263,7 @@ index 0000000..458a33d + * wodGetVolume [internal] + */ +static DWORD wodGetVolume(WINE_WAVEINST *wwo, LPDWORD lpdwVol) { -+ float value1, value2; ++ double value1, value2; + DWORD wleft, wright; + + if (!wwo || wwo->state == WINE_WS_FAILED) { @@ -2299,21 +2285,15 @@ index 0000000..458a33d + + + if (wwo->volume.channels == 2) { -+ value1 = pa_sw_volume_to_dB(wwo->volume.values[0]); -+ value2 = pa_sw_volume_to_dB(wwo->volume.values[1]); ++ value1 = pa_sw_volume_to_linear(wwo->volume.values[0]); ++ value2 = pa_sw_volume_to_linear(wwo->volume.values[1]); + } else { -+ value1 = pa_sw_volume_to_dB(pa_cvolume_avg(&wwo->volume)); ++ value1 = pa_sw_volume_to_linear(pa_cvolume_avg(&wwo->volume)); + value2 = value1; + } + -+ if (value1 < -60) -+ wleft = 0; -+ else -+ -+ if (value2 < -60) -+ wright = 0; -+ else -+ wright = 0xFFFFl - ((value2 / -60)*(float)0xFFFFl); ++ wleft = 0xFFFFl * value1; ++ wright = 0xFFFFl * value2; + + if (wleft > 0xFFFFl) + wleft = 0xFFFFl; @@ -2337,18 +2317,17 @@ index 0000000..458a33d + return MMSYSERR_INVALHANDLE; + } + -+ /* waveOut volumes are /supposed/ to be logarithmic */ -+ value1 = LOWORD(dwParam1) == 0 ? PA_DECIBEL_MININFTY : ((float)(0xFFFFl - LOWORD(dwParam1))/0xFFFFl) * -60.0; -+ value2 = HIWORD(dwParam1) == 0 ? PA_DECIBEL_MININFTY : ((float)(0xFFFFl - HIWORD(dwParam1))/0xFFFFl) * -60.0; ++ value1 = (double)LOWORD(dwParam1)/(double)0xFFFFl; ++ value2 = (double)HIWORD(dwParam1)/(double)0xFFFFl; + + if (wwo->sample_spec.channels == 2) { + wwo->volume.channels = 2; -+ wwo->volume.values[0] = pa_sw_volume_from_dB(value1); -+ wwo->volume.values[1] = pa_sw_volume_from_dB(value2); ++ wwo->volume.values[0] = pa_sw_volume_from_linear(value1); ++ wwo->volume.values[1] = pa_sw_volume_from_linear(value2); + } else { + if (value1 != value2) FIXME("Non-stereo streams can't pan!\n"); + wwo->volume.channels = wwo->sample_spec.channels; -+ pa_cvolume_set(&wwo->volume, wwo->volume.channels, pa_sw_volume_from_dB(max(value1, value2))); ++ pa_cvolume_set(&wwo->volume, wwo->volume.channels, pa_sw_volume_from_linear(value1 > value2 ? value1 : value2)); + } + + if (TRACE_ON(wave)) { @@ -2501,7 +2480,7 @@ index 0000000..1b49460 +@ stdcall -private widMessage(long long long long long long) PULSE_widMessage diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h new file mode 100644 -index 0000000..4a834cd +index 0000000..0aa7e86 --- /dev/null +++ b/dlls/winepulse.drv/winepulse.h @@ -0,0 +1,196 @@ @@ -2636,7 +2615,7 @@ index 0000000..4a834cd + +/* Per-playback/record instance */ +struct WINE_WAVEINST { -+ volatile INT state; /* one of the WINE_WS_ manifest constants */ ++ INT state; /* one of the WINE_WS_ manifest constants */ + WAVEOPENDESC waveDesc; + WORD wFlags; + From b4644157b1fdb4b9a1b41a619a682397cee71731 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 30 Oct 2009 15:20:18 +0000 Subject: [PATCH 127/161] - add correct sources --- .cvsignore | 1 + sources | 1 + 2 files changed, 2 insertions(+) diff --git a/.cvsignore b/.cvsignore index e69de29..f76d511 100644 --- a/.cvsignore +++ b/.cvsignore @@ -0,0 +1 @@ +wine-1.1.32-fe.tar.bz2 diff --git a/sources b/sources index e69de29..3390ab2 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +b598afe820bde7c33f5bd0ab62fb7dce wine-1.1.32-fe.tar.bz2 From 0ff1ffc73534d9c01bdcee18ed5ff14df708a179 Mon Sep 17 00:00:00 2001 From: Bill Nottingham Date: Wed, 25 Nov 2009 22:43:14 +0000 Subject: [PATCH 128/161] Fix typo that causes a failure to update the common directory. (releng #2781) --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 3261c9e..15e51e7 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ # Makefile for source rpm: wine -# $Id: Makefile,v 1.2 2004/11/24 05:00:10 gafton Exp $ +# $Id: Makefile,v 1.4 2006/01/02 08:55:16 awjb Exp $ NAME := wine SPECFILE = $(firstword $(wildcard *.spec)) define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done +for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done endef MAKEFILE_COMMON := $(shell $(find-makefile-common)) From 96689bab9412cc79a1d7c8e54c220734bef98e00 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 19 Dec 2009 14:39:53 +0000 Subject: [PATCH 129/161] - 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 | 79 +++++++++----------- 5 files changed, 90 insertions(+), 53 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; ++ if (!wwo->timing_info->playing) { + -+ 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); ++ /* 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; + -+ PULSE_WaitForOperation(pa_stream_set_buffer_attr(wwo->stream, &wwo->buffer_attr, PULSE_StreamSuccessCallback, wwo)); ++ 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); + -+ 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)); ++ /* 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; + From be24d45758eee5e44fef06a593ec183263d08493 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 20 Jan 2010 05:39:55 +0000 Subject: [PATCH 130/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-x86_64-prefix.patch | 11 +++++++++++ wine.spec | 27 ++++++++++++++++----------- 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/.cvsignore b/.cvsignore index 8763626..89e7c16 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.35-fe.tar.bz2 +wine-1.1.36-fe.tar.bz2 diff --git a/sources b/sources index 76b6bb2..9b6d9db 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -1ade8d4ccd3130692c2c68871683fa9b wine-1.1.35-fe.tar.bz2 +826ca1bc9cfe2b63eee268baeaf36816 wine-1.1.36-fe.tar.bz2 diff --git a/wine-x86_64-prefix.patch b/wine-x86_64-prefix.patch index 0d8bbfc..7f3e3ff 100644 --- a/wine-x86_64-prefix.patch +++ b/wine-x86_64-prefix.patch @@ -13,3 +13,14 @@ static char *bindir; static char *dlldir; +--- dlls/ntdll/server.c.orig 2010-01-18 23:06:56.000000000 +0100 ++++ dlls/ntdll/server.c 2010-01-18 23:07:27.000000000 +0100 +@@ -698,7 +698,7 @@ + { + static int started; /* we only try once */ + char *argv[3]; +- static char wineserver[] = "server/wineserver"; ++ static char wineserver[] = "server/wineserver64"; + static char debug[] = "-d"; + + if (!started) diff --git a/wine.spec b/wine.spec index c921570..8c9272e 100644 --- a/wine.spec +++ b/wine.spec @@ -1,6 +1,6 @@ %define no64bit 0 Name: wine -Version: 1.1.35 +Version: 1.1.36 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator @@ -184,6 +184,7 @@ Requires(post): desktop-file-utils >= 0.8 Requires(preun): /sbin/chkconfig, /sbin/service Requires(postun): desktop-file-utils >= 0.8 Requires: wine-core = %{version}-%{release} +Requires: wine-common = %{version}-%{release} BuildArch: noarch %description desktop @@ -361,6 +362,7 @@ mv %{buildroot}%{_bindir}/wine{,32} # if x86_64 rename to wine64 %ifarch x86_64 mv %{buildroot}%{_bindir}/wine{,64} +mv %{buildroot}%{_bindir}/wineserver{,64} %endif mkdir -p %{buildroot}%{_sysconfdir}/wine @@ -549,16 +551,14 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dxdiag.exe.so %ifarch %{ix86} -%{_bindir}/wine-preloader -%endif -%{_bindir}/wineserver - -%ifarch %{ix86} -%{_sysconfdir}/ld.so.conf.d/wine-32.conf %{_bindir}/wine32 +%{_bindir}/wine-preloader +%{_bindir}/wineserver +%{_sysconfdir}/ld.so.conf.d/wine-32.conf %endif %ifarch x86_64 %{_bindir}/wine64 +%{_bindir}/wineserver64 %{_sysconfdir}/ld.so.conf.d/wine-64.conf %endif @@ -700,6 +700,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/lodctr.exe.so %{_libdir}/wine/lz32.dll.so %{_libdir}/wine/mapi32.dll.so +%{_libdir}/wine/mapistub.dll.so %{_libdir}/wine/mciavi32.dll.so %{_libdir}/wine/mcicda.dll.so %{_libdir}/wine/mciseq.dll.so @@ -864,20 +865,18 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/xmllite.dll.so %ifnarch x86_64 # 16 bit and other non 64bit stuff -%{_libdir}/wine/winedos.dll.so %{_libdir}/wine/winevdm.exe.so %{_libdir}/wine/ifsmgr.vxd.so %{_libdir}/wine/mmdevldr.vxd.so %{_libdir}/wine/monodebg.vxd.so %{_libdir}/wine/vdhcp.vxd.so -%{_libdir}/wine/user.exe16 +%{_libdir}/wine/user.exe16.so %{_libdir}/wine/vmm.vxd.so %{_libdir}/wine/vnbt.vxd.so %{_libdir}/wine/vnetbios.vxd.so %{_libdir}/wine/vtdapi.vxd.so %{_libdir}/wine/vwin32.vxd.so %{_libdir}/wine/w32skrnl.dll.so -%{_libdir}/wine/wprocs.dll16 %{_libdir}/wine/avifile.dll16.so %{_libdir}/wine/comm.drv16.so @@ -890,7 +889,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/display.drv16.so %{_libdir}/wine/gdi.exe16.so %{_libdir}/wine/imm.dll16.so -%{_libdir}/wine/krnl386.exe16 +%{_libdir}/wine/krnl386.exe16.so %{_libdir}/wine/keyboard.drv16.so %{_libdir}/wine/lzexpand.dll16.so %{_libdir}/wine/mmsystem.dll16.so @@ -929,6 +928,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winsock.dll16.so %{_libdir}/wine/wintab.dll16.so %{_libdir}/wine/wow32.dll.so +#%{_libdir}/wine/wprocs.dll16.so %endif %files common @@ -1061,6 +1061,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Mon Jan 18 2010 Andreas Bierfert +- 1.1.36-1 +- version upgrade (#554102) +- require -common in -desktop (#549190) + * Sat Dec 19 2009 Andreas Bierfert - 1.1.35-1 - version upgrade From aa3ccd7bba97b3e0cce394164cf9d8933e80ae79 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 9 Feb 2010 09:18:19 +0000 Subject: [PATCH 131/161] - version upgrade - winepulse update (0.35) --- .cvsignore | 2 +- sources | 2 +- wine.spec | 29 +- winepulse-0.32-configure.ac.patch | 58 --- ...-0.6.patch => winepulse-0.34-winecfg.patch | 48 +-- winepulse-0.35-configure.ac.patch | 60 +++ winepulse-0.33.patch => winepulse-0.35.patch | 394 +++++++++--------- 7 files changed, 295 insertions(+), 298 deletions(-) delete mode 100644 winepulse-0.32-configure.ac.patch rename winepulse-winecfg-0.6.patch => winepulse-0.34-winecfg.patch (94%) create mode 100644 winepulse-0.35-configure.ac.patch rename winepulse-0.33.patch => winepulse-0.35.patch (92%) diff --git a/.cvsignore b/.cvsignore index 89e7c16..1f0c866 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.36-fe.tar.bz2 +wine-1.1.38-fe.tar.bz2 diff --git a/sources b/sources index 9b6d9db..2286e73 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -826ca1bc9cfe2b63eee268baeaf36816 wine-1.1.36-fe.tar.bz2 +fdf4b8573b77da73b683e97128ee4150 wine-1.1.38-fe.tar.bz2 diff --git a/wine.spec b/wine.spec index 8c9272e..7bc9204 100644 --- a/wine.spec +++ b/wine.spec @@ -1,23 +1,16 @@ %define no64bit 0 Name: wine -Version: 1.1.36 +Version: 1.1.38 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -# special fedora tarball without winemp3 stuff build doing -# rm -fr dlls/winemp3.acm -# and removing the following from the source tree (as of 0.9.35): -# -# configure:ac_config_files="$ac_config_files dlls/winemp3.acm/Makefile" -# configure: "dlls/winemp3.acm/Makefile") CONFIG_FILES="$CONFIG_FILES dlls/winemp3.acm/Makefile" ;; -# configure.ac:AC_CONFIG_FILES([dlls/winemp3.acm/Makefile]) -# dlls/Makefile.in: winemp3.acm \ -# Makefile.in: dlls/winemp3.acm/Makefile \ -# Makefile.in:dlls/winemp3.acm/Makefile: dlls/winemp3.acm/Makefile.in dlls/Makedll.rules -# programs/winecfg/libraries.c: "winemp3.acm", +# special fedora tarball without winemp3 +# It can be obtained by running rm -fr dlls/winemp3.acm in the winetree +# and removing the references from configure, configure.ac, Makefile.in, +# and programs/winecfg/libraries.c wrt. winemp3. Source0: %{name}-%{version}-fe.tar.bz2 Source1: wine.init @@ -47,9 +40,9 @@ Source300: wine-mime-msi.desktop # explain how to use wine with pulseaudio # 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.33.patch -Patch402: http://art.ified.ca/downloads/winepulse/winepulse-winecfg-0.6.patch +Patch400: http://art.ified.ca/downloads/winepulse-0.35-configure.ac.patch +Patch401: http://art.ified.ca/downloads/winepulse-0.35.patch +Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.34-winecfg.patch Source402: README-FEDORA-PULSEAUDIO Patch1: wine-rpath.patch @@ -745,6 +738,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msvidc32.dll.so %{_libdir}/wine/mswsock.dll.so %{_libdir}/wine/msxml3.dll.so +%{_libdir}/wine/msxml4.dll.so %{_libdir}/wine/nddeapi.dll.so %{_libdir}/wine/netapi32.dll.so %{_libdir}/wine/newdev.dll.so @@ -1061,6 +1055,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Tue Feb 09 2010 Andreas Bierfert +- 1.1.38-1 +- version upgrade +- winepulse upgrade (0.35) + * Mon Jan 18 2010 Andreas Bierfert - 1.1.36-1 - version upgrade (#554102) diff --git a/winepulse-0.32-configure.ac.patch b/winepulse-0.32-configure.ac.patch deleted file mode 100644 index 1db339e..0000000 --- a/winepulse-0.32-configure.ac.patch +++ /dev/null @@ -1,58 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index 0cc339b..3f34f12 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -64,6 +64,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), - [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) - AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]), - [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi]) -+AC_ARG_WITH(pulse, AC_HELP_STRING([--without-pulse],[do not use PulseAudio sound support])) - AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) - AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), - [if test "x$withval" = "xno"; then ac_cv_header_X11_extensions_Xcomposite_h=no; fi]) -@@ -1297,6 +1298,28 @@ then - CFLAGS="$save_CFLAGS" - fi - -+dnl **** Check for PulseAudio **** -+if test "x$with_pulse" != "xno"; then -+ if test "$PKG_CONFIG" != "false"; then -+ AC_MSG_CHECKING([for pulseaudio >= 0.9.14]) -+ if "$PKG_CONFIG" --atleast-version=0.9.14 libpulse; then -+ have_pulseaudio="yes" -+ else -+ have_pulseaudio="no" -+ fi -+ AC_MSG_RESULT([$have_pulseaudio]) -+ if test x"$have_pulseaudio" = xyes; then -+ ac_pulse_libs=`$PKG_CONFIG --libs libpulse` -+ AC_DEFINE([HAVE_PULSEAUDIO], 1, [define this if you have pulseaudio]) -+ AC_SUBST(PULSELIBS, "$ac_pulse_libs") -+ else -+ dnl This warning should be removed if ever commited. -+ dnl Only useful to show that the problem wasn't the patch. -+ WINE_WARNING([libpulse not found or too old. Pulseaudio support will NOT be built.]) -+ fi -+ fi -+fi -+ - dnl **** Check for ALSA 1.x **** - AC_SUBST(ALSALIBS,"") - if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" -@@ -1449,7 +1472,7 @@ dnl **** Check for libodbc **** - WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) - - dnl **** Check for any sound system **** --if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$ac_cv_lib_soname_jack" = "x" -a \ -+if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$PULSELIBS$ac_cv_lib_soname_jack" = "x" -a \ - "$ac_cv_header_sys_soundcard_h" != "yes" -a \ - "$ac_cv_header_machine_soundcard_h" != "yes" -a \ - "$ac_cv_header_soundcard_h" != "yes" -a \ -@@ -2509,6 +2532,7 @@ WINE_CONFIG_MAKEFILE([dlls/winenas.drv/Makefile],[dlls/Makedll.rules],[dlls],[AL - WINE_CONFIG_MAKEFILE([dlls/wineoss.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/wineps.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/wineps16.drv16/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS],[enable_win16]) -+WINE_CONFIG_MAKEFILE([dlls/winepulse.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/winequartz.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/winex11.drv/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS]) - WINE_CONFIG_MAKEFILE([dlls/wing.dll16/Makefile],[dlls/Makedll.rules],[dlls],[ALL_DLL_DIRS],[enable_win16]) diff --git a/winepulse-winecfg-0.6.patch b/winepulse-0.34-winecfg.patch similarity index 94% rename from winepulse-winecfg-0.6.patch rename to winepulse-0.34-winecfg.patch index 9cbbf58..5635a97 100644 --- a/winepulse-winecfg-0.6.patch +++ b/winepulse-0.34-winecfg.patch @@ -1,5 +1,5 @@ diff --git a/programs/winecfg/Bg.rc b/programs/winecfg/Bg.rc -index fcdf895..ec24068 100644 +index 5555ad2..29ff717 100644 --- a/programs/winecfg/Bg.rc +++ b/programs/winecfg/Bg.rc @@ -276,6 +276,7 @@ BEGIN @@ -11,7 +11,7 @@ index fcdf895..ec24068 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Cs.rc b/programs/winecfg/Cs.rc -index d9c0b28..6171f1f 100644 +index f3116d7..2a06d88 100644 --- a/programs/winecfg/Cs.rc +++ b/programs/winecfg/Cs.rc @@ -276,6 +276,7 @@ BEGIN @@ -23,7 +23,7 @@ index d9c0b28..6171f1f 100644 IDS_DRIVER_ESOUND "Ovlada EsounD" IDS_DRIVER_OSS "Ovlada OSS" diff --git a/programs/winecfg/Da.rc b/programs/winecfg/Da.rc -index f53aead..e33bd78 100644 +index 64e022b..e6caea3 100644 --- a/programs/winecfg/Da.rc +++ b/programs/winecfg/Da.rc @@ -270,6 +270,7 @@ BEGIN @@ -35,7 +35,7 @@ index f53aead..e33bd78 100644 IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/De.rc b/programs/winecfg/De.rc -index aadd21e..f3016ab 100644 +index fa5bbe5..eda4e2b 100644 --- a/programs/winecfg/De.rc +++ b/programs/winecfg/De.rc @@ -282,6 +282,7 @@ BEGIN @@ -47,7 +47,7 @@ index aadd21e..f3016ab 100644 IDS_DRIVER_ESOUND "EsounD-Treiber" IDS_DRIVER_OSS "OSS-Treiber" diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc -index 6aa5120..6f30805 100644 +index 490314a..3e669cd 100644 --- a/programs/winecfg/En.rc +++ b/programs/winecfg/En.rc @@ -282,6 +282,7 @@ BEGIN @@ -59,7 +59,7 @@ index 6aa5120..6f30805 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc -index 1771b4e..aaacaa9 100644 +index 423c783..8534cfa 100644 --- a/programs/winecfg/Es.rc +++ b/programs/winecfg/Es.rc @@ -270,6 +270,7 @@ BEGIN @@ -71,7 +71,7 @@ index 1771b4e..aaacaa9 100644 IDS_DRIVER_ESOUND "Manejador EsounD" IDS_DRIVER_OSS "Manejador OSS" diff --git a/programs/winecfg/Fi.rc b/programs/winecfg/Fi.rc -index 0dedf3a..5217482 100644 +index 957b87d..1eb62d1 100644 --- a/programs/winecfg/Fi.rc +++ b/programs/winecfg/Fi.rc @@ -270,6 +270,7 @@ BEGIN @@ -83,7 +83,7 @@ index 0dedf3a..5217482 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Fr.rc b/programs/winecfg/Fr.rc -index a9184f9..004ebb0 100644 +index f84cff6..045d93f 100644 --- a/programs/winecfg/Fr.rc +++ b/programs/winecfg/Fr.rc @@ -284,6 +284,7 @@ BEGIN @@ -95,7 +95,7 @@ index a9184f9..004ebb0 100644 IDS_DRIVER_ESOUND "Pilote EsounD" IDS_DRIVER_OSS "Pilote OSS" diff --git a/programs/winecfg/Hu.rc b/programs/winecfg/Hu.rc -index dc887fe..9bd192e 100644 +index 7c4e4fc..654b524 100644 --- a/programs/winecfg/Hu.rc +++ b/programs/winecfg/Hu.rc @@ -270,6 +270,7 @@ BEGIN @@ -107,7 +107,7 @@ index dc887fe..9bd192e 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/It.rc b/programs/winecfg/It.rc -index ddeda8c..1530b5f 100644 +index 29deea2..e328a19 100644 --- a/programs/winecfg/It.rc +++ b/programs/winecfg/It.rc @@ -284,6 +284,7 @@ BEGIN @@ -119,7 +119,7 @@ index ddeda8c..1530b5f 100644 IDS_DRIVER_ESOUND "Driver Esound" IDS_DRIVER_OSS "Driver OSS" diff --git a/programs/winecfg/Ja.rc b/programs/winecfg/Ja.rc -index 5b77da7..316d2e5 100644 +index ff03564..94d7c62 100644 --- a/programs/winecfg/Ja.rc +++ b/programs/winecfg/Ja.rc @@ -285,6 +285,7 @@ BEGIN @@ -131,7 +131,7 @@ index 5b77da7..316d2e5 100644 IDS_DRIVER_ESOUND "EsounD ドライバ" IDS_DRIVER_OSS "OSS ドライバ" diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc -index bf06647..66f9803 100644 +index b30ce87..36dabd2 100644 --- a/programs/winecfg/Ko.rc +++ b/programs/winecfg/Ko.rc @@ -285,6 +285,7 @@ BEGIN @@ -143,7 +143,7 @@ index bf06647..66f9803 100644 IDS_DRIVER_ESOUND "EsounD ̹" IDS_DRIVER_OSS "OSS ̹" diff --git a/programs/winecfg/Lt.rc b/programs/winecfg/Lt.rc -index 7208cc6..5aa8fdb 100644 +index 1a9d0fa..ff7a586 100644 --- a/programs/winecfg/Lt.rc +++ b/programs/winecfg/Lt.rc @@ -283,6 +283,7 @@ BEGIN @@ -155,7 +155,7 @@ index 7208cc6..5aa8fdb 100644 IDS_DRIVER_ESOUND "EsounD tvarkyklė" IDS_DRIVER_OSS "OSS tvarkyklė" diff --git a/programs/winecfg/Nl.rc b/programs/winecfg/Nl.rc -index 2fbba6a..802abab 100644 +index 5783033..431872f 100644 --- a/programs/winecfg/Nl.rc +++ b/programs/winecfg/Nl.rc @@ -283,6 +283,7 @@ BEGIN @@ -167,10 +167,10 @@ index 2fbba6a..802abab 100644 IDS_DRIVER_ESOUND "EsounD Stuurprogramma" IDS_DRIVER_OSS "OSS Stuurprogramma" diff --git a/programs/winecfg/No.rc b/programs/winecfg/No.rc -index cc34fad..0f0aea8 100644 +index 13a62f4..7e66a3a 100644 --- a/programs/winecfg/No.rc +++ b/programs/winecfg/No.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -283,6 +283,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grunnleggende" IDS_ACCEL_EMULATION "Emulering" @@ -179,7 +179,7 @@ index cc34fad..0f0aea8 100644 IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/Pl.rc b/programs/winecfg/Pl.rc -index d884881..bb97de5 100644 +index 9422f34..eeca25c 100644 --- a/programs/winecfg/Pl.rc +++ b/programs/winecfg/Pl.rc @@ -273,6 +273,7 @@ BEGIN @@ -191,7 +191,7 @@ index d884881..bb97de5 100644 IDS_DRIVER_ESOUND "Sterownik EsounD" IDS_DRIVER_OSS "Sterownik OSS" diff --git a/programs/winecfg/Pt.rc b/programs/winecfg/Pt.rc -index 683dc68..be92466 100644 +index aeab826..c2e0200 100644 --- a/programs/winecfg/Pt.rc +++ b/programs/winecfg/Pt.rc @@ -470,6 +470,7 @@ BEGIN @@ -203,7 +203,7 @@ index 683dc68..be92466 100644 IDS_DRIVER_ESOUND "Controlador EsounD" IDS_DRIVER_OSS "Controlador OSS" diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc -index 5626018..6c84511 100644 +index c031ea8..430d6d8 100644 --- a/programs/winecfg/Ro.rc +++ b/programs/winecfg/Ro.rc @@ -282,6 +282,7 @@ BEGIN @@ -215,7 +215,7 @@ index 5626018..6c84511 100644 IDS_DRIVER_ESOUND "Driver Esound" IDS_DRIVER_OSS "Driver OSS" diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc -index 38b4546..73c0250 100644 +index 58252ba..39fb6d5 100644 --- a/programs/winecfg/Ru.rc +++ b/programs/winecfg/Ru.rc @@ -287,6 +287,7 @@ BEGIN @@ -227,7 +227,7 @@ index 38b4546..73c0250 100644 IDS_DRIVER_ESOUND "EsounD драйвер" IDS_DRIVER_OSS "OSS драйвер" diff --git a/programs/winecfg/Si.rc b/programs/winecfg/Si.rc -index feaef36..1d10bae 100644 +index eec1658..35b5462 100644 --- a/programs/winecfg/Si.rc +++ b/programs/winecfg/Si.rc @@ -272,6 +272,7 @@ BEGIN @@ -239,7 +239,7 @@ index feaef36..1d10bae 100644 IDS_DRIVER_ESOUND "EsounD gonilnik" IDS_DRIVER_OSS "OSS gonilnik" diff --git a/programs/winecfg/Sv.rc b/programs/winecfg/Sv.rc -index 7fea5aa..1979b5a 100644 +index d724afa..ba34d44 100644 --- a/programs/winecfg/Sv.rc +++ b/programs/winecfg/Sv.rc @@ -270,6 +270,7 @@ BEGIN @@ -251,7 +251,7 @@ index 7fea5aa..1979b5a 100644 IDS_DRIVER_ESOUND "EsounD-drivrutin" IDS_DRIVER_OSS "OSS-drivrutin" diff --git a/programs/winecfg/Tr.rc b/programs/winecfg/Tr.rc -index 0fa9778..5ea7da1 100644 +index 89ddb23..196debe 100644 --- a/programs/winecfg/Tr.rc +++ b/programs/winecfg/Tr.rc @@ -270,6 +270,7 @@ BEGIN @@ -263,7 +263,7 @@ index 0fa9778..5ea7da1 100644 IDS_DRIVER_ESOUND "EsounD Srcs" IDS_DRIVER_OSS "OSS Srcs" diff --git a/programs/winecfg/Zh.rc b/programs/winecfg/Zh.rc -index 8c84061..3de1da8 100644 +index 14ac5c3..cd380a3 100644 --- a/programs/winecfg/Zh.rc +++ b/programs/winecfg/Zh.rc @@ -275,6 +275,7 @@ BEGIN diff --git a/winepulse-0.35-configure.ac.patch b/winepulse-0.35-configure.ac.patch new file mode 100644 index 0000000..0d4235b --- /dev/null +++ b/winepulse-0.35-configure.ac.patch @@ -0,0 +1,60 @@ +diff --git a/configure.ac b/configure.ac +index f823045..583f9c1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -64,6 +64,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), + [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) + AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]), + [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi]) ++AC_ARG_WITH(pulse, AC_HELP_STRING([--without-pulse],[do not use PulseAudio sound support])) + AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) + AC_ARG_WITH(v4l, AS_HELP_STRING([--without-v4l],[do not use v4l1 (v4l support)])) + AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), +@@ -1308,6 +1309,30 @@ then + CFLAGS="$save_CFLAGS" + fi + ++dnl **** Check for PulseAudio **** ++AC_SUBST(PULSELIBS,"") ++AC_SUBST(PULSECFLAGS,"") ++if test "x$with_pulse" != "xno"; ++then ++ ac_save_CPPFLAGS="$CPPFLAGS" ++ if test "$PKG_CONFIG" != "false"; ++ then ++ ac_pulse_libs="`$PKG_CONFIG --libs libpulse 2>/dev/null`" ++ ac_pulse_cflags="`$PKG_CONFIG --cflags libpulse 2>/dev/null`" ++ ++ CPPFLAGS="$CPPFLAGS $ac_pulse_cflags" ++ AC_CHECK_HEADERS(pulse/pulseaudio.h, ++ [AC_CHECK_LIB(pulse, pa_stream_is_corked, ++ [AC_DEFINE(HAVE_PULSEAUDIO, 1, [Define if you have pulseaudio]) ++ PULSELIBS="$ac_pulse_libs" ++ PULSECFLAGS="$ac_pulse_cflags"],,$ac_pulse_libs) ++ ]) ++ fi ++ CPPFLAGS="$ac_save_CPPFLAGS" ++fi ++WINE_WARNING_WITH(pulse, [test "$ac_cv_lib_pulse_pa_stream_is_corked" != "yes"], ++ [libpulse ${notice_platform}development files not found or too old, Pulse won't be supported.]) ++ + dnl **** Check for ALSA 1.x **** + AC_SUBST(ALSALIBS,"") + if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" +@@ -1460,7 +1485,7 @@ dnl **** Check for libodbc **** + WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) + + dnl **** Check for any sound system **** +-if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$ac_cv_lib_soname_jack" = "x" -a \ ++if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$PULSELIBS$ac_cv_lib_soname_jack" = "x" -a \ + "$ac_cv_header_sys_soundcard_h" != "yes" -a \ + "$ac_cv_header_machine_soundcard_h" != "yes" -a \ + "$ac_cv_header_soundcard_h" != "yes" -a \ +@@ -2555,6 +2580,7 @@ WINE_CONFIG_DLL(winenas.drv) + WINE_CONFIG_DLL(wineoss.drv) + WINE_CONFIG_DLL(wineps.drv) + WINE_CONFIG_DLL(wineps16.drv16,enable_win16) ++WINE_CONFIG_DLL(winepulse.drv) + WINE_CONFIG_DLL(winequartz.drv) + WINE_CONFIG_DLL(winex11.drv) + WINE_CONFIG_DLL(wing.dll16,enable_win16) diff --git a/winepulse-0.33.patch b/winepulse-0.35.patch similarity index 92% rename from winepulse-0.33.patch rename to winepulse-0.35.patch index beee106..9b809f2 100644 --- a/winepulse-0.33.patch +++ b/winepulse-0.35.patch @@ -1,9 +1,9 @@ diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in new file mode 100644 -index 0000000..c99c1da +index 0000000..80a751d --- /dev/null +++ b/dlls/winepulse.drv/Makefile.in -@@ -0,0 +1,15 @@ +@@ -0,0 +1,16 @@ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../.. +SRCDIR = @srcdir@ @@ -11,6 +11,7 @@ index 0000000..c99c1da +MODULE = winepulse.drv +IMPORTS = winmm user32 kernel32 +EXTRALIBS = @PULSELIBS@ ++EXTRACFLAGS = @PULSEINCL@ + +C_SRCS = waveout.c \ + wavein.c \ @@ -21,10 +22,10 @@ index 0000000..c99c1da +@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c new file mode 100644 -index 0000000..3dcb086 +index 0000000..9dd1f80 --- /dev/null +++ b/dlls/winepulse.drv/pulse.c -@@ -0,0 +1,788 @@ +@@ -0,0 +1,805 @@ +/* + * Wine Driver for PulseAudio + * http://pulseaudio.org/ @@ -418,6 +419,23 @@ index 0000000..3dcb086 + */ + +/************************************************************************** ++ * PULSE_StreamRequestCallback ++ * ++ * Called by the pulse mainloop whenever it wants/has audio data. ++ */ ++void PULSE_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata) { ++ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; ++ ++ TRACE("Server has %u bytes\n", nbytes); ++ ++ /* Make sure that the player/recorder is running */ ++ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { ++ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); ++ } ++} ++ ++ ++/************************************************************************** + * PULSE_StreamSuspendedCallback [internal] + * + * Called by the pulse mainloop any time stream playback is intentionally @@ -476,11 +494,11 @@ index 0000000..3dcb086 + TRACE("Stream %p ready\n", userdata); + break; + -+ case PA_STREAM_TERMINATED: ++ case PA_STREAM_TERMINATED: /* Stream closed normally */ + TRACE("Stream %p terminated\n", userdata); + break; + -+ case PA_STREAM_FAILED: ++ case PA_STREAM_FAILED: /* Stream closed not-normally */ + ERR("Stream %p failed!\n", userdata); + break; + @@ -532,7 +550,7 @@ index 0000000..3dcb086 + break; + + case PA_CONTEXT_FAILED: -+ ERR("Context failure: %s\n", pa_strerror(pa_context_errno(c))); ++ ERR("Context failed: %s\n", pa_strerror(pa_context_errno(c))); + pa_threaded_mainloop_signal(PULSE_ml, 0); + break; + } @@ -559,7 +577,7 @@ index 0000000..3dcb086 + memset(&(wdi->caps.in), 0, sizeof(wdi->caps.in)); + snprintf(wdi->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); + wdi->device_name = pa_xstrdup(device); -+ MultiByteToWideChar(CP_ACP, 0, description, -1, wdi->caps.in.szPname, sizeof(wdi->caps.in.szPname)/sizeof(WCHAR)); ++ MultiByteToWideChar(CP_UTF8, 0, description, -1, wdi->caps.in.szPname, sizeof(wdi->caps.in.szPname)/sizeof(WCHAR)); + wdi->caps.in.szPname[sizeof(wdi->caps.in.szPname)/sizeof(WCHAR) - 1] = '\0'; + wdi->caps.in.wMid = MM_CREATIVE; + wdi->caps.in.wPid = MM_CREATIVE_SBP16_WAVEOUT; @@ -608,7 +626,7 @@ index 0000000..3dcb086 + wdo->volume.channels = v->channels; + for (x = 0; x < v->channels; x++) wdo->volume.values[x] = v->values[x]; + snprintf(wdo->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); -+ MultiByteToWideChar(CP_ACP, 0, description, -1, wdo->caps.out.szPname, sizeof(wdo->caps.out.szPname)/sizeof(WCHAR)); ++ MultiByteToWideChar(CP_UTF8, 0, description, -1, wdo->caps.out.szPname, sizeof(wdo->caps.out.szPname)/sizeof(WCHAR)); + wdo->caps.out.szPname[sizeof(wdo->caps.out.szPname)/sizeof(WCHAR) - 1] = '\0'; + wdo->caps.out.wMid = MM_CREATIVE; + wdo->caps.out.wPid = MM_CREATIVE_SBP16_WAVEOUT; @@ -719,7 +737,7 @@ index 0000000..3dcb086 + PULSE_ml = NULL; + + if (!(PULSE_ml = pa_threaded_mainloop_new())) { -+ WARN("Failed to create mainloop object."); ++ ERR("Failed to create mainloop object."); + return DRV_FAILURE; + } + @@ -748,7 +766,6 @@ index 0000000..3dcb086 + pa_threaded_mainloop_lock(PULSE_ml); + + TRACE("libpulse protocol version: %u. API Version %u\n", pa_context_get_protocol_version(PULSE_context), PA_API_VERSION); -+ TRACE("Attempting to connect to pulseaudio server.\n"); + if (pa_context_connect(PULSE_context, NULL, 0, NULL) < 0) + goto fail; + @@ -784,7 +801,8 @@ index 0000000..3dcb086 + +fail: + pa_threaded_mainloop_unlock(PULSE_ml); -+ ERR("Failed to connect to server\n"); ++ /* Only warn, because if we failed wine may still choose the next driver */ ++ WARN("Failed to connect to server\n"); + return DRV_FAILURE; +} + @@ -815,10 +833,10 @@ index 0000000..3dcb086 +} diff --git a/dlls/winepulse.drv/wavein.c b/dlls/winepulse.drv/wavein.c new file mode 100644 -index 0000000..7cbc781 +index 0000000..8aea538 --- /dev/null +++ b/dlls/winepulse.drv/wavein.c -@@ -0,0 +1,595 @@ +@@ -0,0 +1,588 @@ +/* + * Wine Driver for PulseAudio - WaveIn Functionality + * http://pulseaudio.org/ @@ -890,69 +908,167 @@ index 0000000..7cbc781 +} + +/************************************************************************** -+ * widRecorder_NextFragment [internal] -+ * -+ * Gets the next fragment of data from the server. -+ */ -+static size_t widRecorder_NextFragment(WINE_WAVEINST *wwi) { -+ size_t nbytes; -+ -+ TRACE("()\n"); -+ -+ if (wwi->buffer) -+ pa_stream_drop(wwi->stream); -+ -+ pa_stream_peek(wwi->stream, &wwi->buffer, &nbytes); -+ wwi->buffer_length = nbytes; -+ wwi->buffer_read_offset = 0; -+ -+ return nbytes; -+} -+ -+ -+/************************************************************************** + * widRecorder_CopyData [internal] + * + * Copys data from the fragments pulse returns to queued buffers. + */ +static void widRecorder_CopyData(WINE_WAVEINST *wwi) { + LPWAVEHDR lpWaveHdr = wwi->lpQueuePtr; -+ size_t nbytes; ++ size_t bytes_avail; + -+ while (lpWaveHdr && wwi->state == WINE_WS_PLAYING) { ++ /* Get this value once and trust it. Note that the total available is made ++ * of one _or more_ fragments. These fragments will probably not align with ++ * the wavehdr buffer sizes. */ ++ pa_threaded_mainloop_lock(PULSE_ml); ++ bytes_avail = pa_stream_readable_size(wwi->stream); ++ pa_threaded_mainloop_unlock(PULSE_ml); + -+ nbytes = min(wwi->buffer_length - wwi->buffer_read_offset, lpWaveHdr->dwBufferLength - lpWaveHdr->dwBytesRecorded); -+ if (nbytes == 0) break; ++ if (bytes_avail == -1) { ++ ERR("pa_stream_readable_size() returned -1, record stream has failed.\n"); ++ return; ++ } + -+ TRACE("%u bytes from %p to %p\n", -+ nbytes, -+ (PBYTE)wwi->buffer + wwi->buffer_read_offset, -+ lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded); ++ /* If there is an already peeked buffer, add it to the total */ ++ if (wwi->buffer) ++ bytes_avail += wwi->buffer_length - wwi->buffer_read_offset; + -+ memcpy(lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded, (PBYTE)wwi->buffer + wwi->buffer_read_offset, nbytes); ++ for (;bytes_avail && lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { ++ size_t peek_avail; + -+ lpWaveHdr->dwBytesRecorded += nbytes; -+ wwi->buffer_read_offset += nbytes; -+ -+ if (wwi->buffer_read_offset == wwi->buffer_length) { ++ if (!wwi->buffer) { + pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_drop(wwi->stream); -+ if (pa_stream_readable_size(wwi->stream)) -+ widRecorder_NextFragment(wwi); -+ else { -+ wwi->buffer = NULL; -+ wwi->buffer_length = 0; -+ wwi->buffer_read_offset = 0; -+ } ++ pa_stream_peek(wwi->stream, &wwi->buffer, &wwi->buffer_length); + pa_threaded_mainloop_unlock(PULSE_ml); ++ wwi->buffer_read_offset = 0; ++ ++ if (!wwi->buffer || !wwi->buffer_length) { ++ WARN("pa_stream_peek failed\n"); ++ break; ++ } + } ++ ++ peek_avail = min(wwi->buffer_length - wwi->buffer_read_offset, ++ lpWaveHdr->dwBufferLength - lpWaveHdr->dwBytesRecorded); ++ ++ memcpy(lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded, ++ (PBYTE)wwi->buffer + wwi->buffer_read_offset, ++ peek_avail); ++ ++ wwi->buffer_read_offset += peek_avail; ++ lpWaveHdr->dwBytesRecorded += peek_avail; ++ bytes_avail -= peek_avail; + + if (lpWaveHdr->dwBytesRecorded == lpWaveHdr->dwBufferLength) { + lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; + lpWaveHdr->dwFlags |= WHDR_DONE; + wwi->lpQueuePtr = lpWaveHdr->lpNext; + widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ lpWaveHdr = wwi->lpQueuePtr; ++ } ++ ++ if (wwi->buffer_read_offset == wwi->buffer_length) { ++ pa_threaded_mainloop_lock(PULSE_ml); ++ pa_stream_drop(wwi->stream); ++ wwi->buffer = NULL; ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ } /* for(bytes_avail && lpWaveHdr) */ ++ ++ return; ++} ++ ++static void widRecorder_ProcessMessages(WINE_WAVEINST* wwi) { ++ LPWAVEHDR lpWaveHdr; ++ enum win_wm_message msg; ++ DWORD param; ++ HANDLE ev; ++ ++ ++ while (PULSE_RetrieveRingMessage(&wwi->msgRing, &msg, ¶m, &ev)) { ++ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); ++ ++ switch (msg) { ++ case WINE_WM_FEED: ++ /* Spin the loop in widRecorder */ ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_STARTING: ++ wwi->dwLastReset = wwi->timing_info->read_index; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 0, PULSE_StreamSuccessCallback, NULL)); ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ wwi->state = WINE_WS_PLAYING; ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_HEADER: ++ lpWaveHdr = (LPWAVEHDR)param; ++ lpWaveHdr->lpNext = 0; ++ /* insert buffer at the end of queue */ ++ { ++ LPWAVEHDR *wh; ++ for (wh = &(wwi->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); ++ *wh = lpWaveHdr; ++ } ++ break; ++ ++ case WINE_WM_STOPPING: ++ if (wwi->state != WINE_WS_STOPPED) { ++ wwi->state = WINE_WS_STOPPED; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); ++ if (wwi->buffer) { ++ pa_stream_drop(wwi->stream); ++ wwi->buffer = NULL; ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ ++ /* return only the current buffer to app */ ++ if ((lpWaveHdr = wwi->lpQueuePtr)) { ++ LPWAVEHDR lpNext = lpWaveHdr->lpNext; ++ TRACE("stop %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ wwi->lpQueuePtr = lpNext; ++ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); ++ } ++ } ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_RESETTING: ++ if (wwi->state != WINE_WS_STOPPED) { ++ wwi->state = WINE_WS_STOPPED; ++ pa_threaded_mainloop_lock(PULSE_ml); ++ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); ++ if (wwi->buffer) { ++ pa_stream_drop(wwi->stream); ++ wwi->buffer = NULL; ++ } ++ pa_threaded_mainloop_unlock(PULSE_ml); ++ } ++ ++ /* return all the buffers to the app */ ++ lpWaveHdr = wwi->lpPlayPtr ? wwi->lpPlayPtr : wwi->lpQueuePtr; ++ for (; lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { ++ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; ++ lpWaveHdr->dwFlags |= WHDR_DONE; ++ wwi->lpQueuePtr = lpWaveHdr->lpNext; ++ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); ++ } ++ SetEvent(ev); ++ break; ++ ++ case WINE_WM_CLOSING: ++ wwi->hThread = 0; ++ wwi->state = WINE_WS_CLOSED; ++ SetEvent(ev); ++ ExitThread(0); ++ /* shouldn't go here */ ++ ++ default: ++ FIXME("unknown message %d\n", msg); ++ break; + } + } +} @@ -961,125 +1077,19 @@ index 0000000..7cbc781 + * widRecorder [internal] + */ +static DWORD CALLBACK widRecorder(LPVOID lpParam) { -+ WINE_WAVEINST *wwi = (WINE_WAVEINST*)lpParam; -+ LPWAVEHDR lpWaveHdr; -+ enum win_wm_message msg; -+ DWORD param; -+ HANDLE ev; -+ DWORD wait = INFINITE; ++ WINE_WAVEINST *wwi = (WINE_WAVEINST*)lpParam; + + wwi->state = WINE_WS_STOPPED; + SetEvent(wwi->hStartUpEvent); + + for (;;) { ++ PULSE_WaitRingMessage(&wwi->msgRing, INFINITE); ++ widRecorder_ProcessMessages(wwi); ++ if (wwi->state == WINE_WS_PLAYING && wwi->lpQueuePtr) ++ widRecorder_CopyData(wwi); ++ } + -+ if (wwi->state != WINE_WS_PLAYING) { -+ wait = INFINITE; -+ } else { -+ if (wwi->buffer == NULL && pa_stream_readable_size(wwi->stream)) { -+ pa_threaded_mainloop_lock(PULSE_ml); -+ wait = pa_bytes_to_usec(widRecorder_NextFragment(wwi), &wwi->sample_spec)/1000; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ } -+ -+ widRecorder_CopyData(wwi); -+ -+ PULSE_WaitRingMessage(&wwi->msgRing, wait); -+ -+ while (PULSE_RetrieveRingMessage(&wwi->msgRing, &msg, ¶m, &ev)) { -+ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); -+ -+ switch (msg) { -+ case WINE_WM_FEED: -+ SetEvent(ev); -+ break; -+ case WINE_WM_STARTING: -+ wwi->state = WINE_WS_PLAYING; -+ if (wwi->lpQueuePtr) -+ wait = pa_bytes_to_usec(wwi->lpQueuePtr->dwBufferLength, &wwi->sample_spec)/1000; -+ else -+ wait = INFINITE; -+ wwi->dwLastReset = wwi->timing_info->read_index; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 0, PULSE_StreamSuccessCallback, NULL)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ SetEvent(ev); -+ break; -+ case WINE_WM_HEADER: -+ lpWaveHdr = (LPWAVEHDR)param; -+ lpWaveHdr->lpNext = 0; -+ -+ /* insert buffer at the end of queue */ -+ { -+ LPWAVEHDR *wh; -+ for (wh = &(wwi->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); -+ *wh = lpWaveHdr; -+ } -+ break; -+ case WINE_WM_STOPPING: -+ if (wwi->state != WINE_WS_STOPPED) { -+ wwi->state = WINE_WS_STOPPED; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ /* return current buffer to app */ -+ lpWaveHdr = wwi->lpQueuePtr; -+ if (lpWaveHdr) { -+ LPWAVEHDR lpNext = lpWaveHdr->lpNext; -+ TRACE("stop %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpNext; -+ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ } -+ } -+ SetEvent(ev); -+ break; -+ case WINE_WM_RESETTING: -+ if (wwi->state != WINE_WS_STOPPED) { -+ wwi->state = WINE_WS_STOPPED; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ -+ /* return all buffers to the app */ -+ for (lpWaveHdr = wwi->lpPlayPtr ? wwi->lpPlayPtr : wwi->lpQueuePtr; lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpWaveHdr->lpNext; -+ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ } -+ -+ SetEvent(ev); -+ break; -+ case WINE_WM_CLOSING: -+ wwi->hThread = 0; -+ if ((DWORD)param == 1) { -+ /* If we are here, the stream failed */ -+ wwi->state = WINE_WS_FAILED; -+ SetEvent(ev); -+ PULSE_DestroyRingMessage(&wwi->msgRing); -+ widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); -+ wwi->lpPlayPtr = wwi->lpQueuePtr = NULL; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_disconnect(wwi->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ TRACE("Thread exiting because of failure.\n"); -+ ExitThread(1); -+ } -+ wwi->state = WINE_WS_CLOSED; -+ SetEvent(ev); -+ ExitThread(0); -+ /* shouldn't go here */ -+ default: -+ FIXME("unknown message %d\n", msg); -+ break; -+ } /* switch(msg) */ -+ } /* while(PULSE_RetrieveRingMessage()) */ -+ } /* for (;;) */ ++ return 0; +} + +/************************************************************************** @@ -1139,7 +1149,8 @@ index 0000000..7cbc781 + goto exit; + } + -+ pa_stream_set_state_callback(wwi->stream, PULSE_StreamStateCallback, wwi); ++ pa_stream_set_state_callback(wwi->stream, PULSE_StreamStateCallback, wwi); ++ pa_stream_set_read_callback (wwi->stream, PULSE_StreamRequestCallback, wwi); + + wwi->buffer_attr.maxlength = (uint32_t)-1; + wwi->buffer_attr.fragsize = pa_bytes_per_second(&wwi->sample_spec) / 100; @@ -1327,7 +1338,7 @@ index 0000000..7cbc781 + * Context-sanity check here, as if we respond with 0, WINE will move on + * to the next wavein driver. + */ -+static DWORD widGetNumDevs() { ++static DWORD widGetNumDevs(void) { + if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) + return 0; + @@ -1340,7 +1351,7 @@ index 0000000..7cbc781 +static DWORD widDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { + TRACE("(%u, %p)\n", wDevID, dwParam1); + -+ *dwParam1 = MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, ++ *dwParam1 = MultiByteToWideChar(CP_UTF8, 0, WInDev[wDevID].interface_name, -1, + NULL, 0 ) * sizeof(WCHAR); + return MMSYSERR_NOERROR; +} @@ -1349,10 +1360,10 @@ index 0000000..7cbc781 + * widDevInterface [internal] + */ +static DWORD widDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { -+ if (dwParam2 >= MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, ++ if (dwParam2 >= MultiByteToWideChar(CP_UTF8, 0, WInDev[wDevID].interface_name, -1, + NULL, 0 ) * sizeof(WCHAR)) + { -+ MultiByteToWideChar(CP_UNIXCP, 0, WInDev[wDevID].interface_name, -1, ++ MultiByteToWideChar(CP_UTF8, 0, WInDev[wDevID].interface_name, -1, + dwParam1, dwParam2 / sizeof(WCHAR)); + return MMSYSERR_NOERROR; + } @@ -1416,10 +1427,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..e7454fd +index 0000000..989dff5 --- /dev/null +++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1040 @@ +@@ -0,0 +1,1024 @@ +/* + * Wine Driver for PulseAudio - WaveOut Functionality + * http://pulseaudio.org/ @@ -1490,22 +1501,6 @@ index 0000000..e7454fd + *======================================================================*/ + +/************************************************************************** -+ * WAVEOUT_StreamRequestCallback -+ * -+ * Called by the pulse mainloop whenever it wants audio data. -+ */ -+static void WAVEOUT_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata) { -+ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; -+ -+ TRACE("Asking to be fed %u bytes\n", nbytes); -+ -+ /* Make sure that the player/recorder is running */ -+ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { -+ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); -+ } -+} -+ -+/************************************************************************** + * WAVEOUT_SinkInputInfoCallback [internal] + * + * Called by the pulse thread. Used for wodGetVolume. @@ -2033,7 +2028,7 @@ index 0000000..e7454fd + } + + /* Setup callbacks */ -+ pa_stream_set_write_callback (wwo->stream, WAVEOUT_StreamRequestCallback, wwo); ++ pa_stream_set_write_callback (wwo->stream, PULSE_StreamRequestCallback, wwo); + pa_stream_set_state_callback (wwo->stream, PULSE_StreamStateCallback, wwo); + pa_stream_set_underflow_callback (wwo->stream, PULSE_StreamUnderflowCallback, wwo); + pa_stream_set_moved_callback (wwo->stream, PULSE_StreamMovedCallback, wwo); @@ -2373,7 +2368,7 @@ index 0000000..e7454fd + */ +static DWORD wodDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { + -+ *dwParam1 = MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, NULL, 0) * sizeof(WCHAR); ++ *dwParam1 = MultiByteToWideChar(CP_UTF8, 0, WOutDev[wDevID].interface_name, -1, NULL, 0) * sizeof(WCHAR); + return MMSYSERR_NOERROR; +} + @@ -2381,10 +2376,10 @@ index 0000000..e7454fd + * wodDevInterface [internal] + */ +static DWORD wodDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { -+ if (dwParam2 >= MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, ++ if (dwParam2 >= MultiByteToWideChar(CP_UTF8, 0, WOutDev[wDevID].interface_name, -1, + NULL, 0 ) * sizeof(WCHAR)) + { -+ MultiByteToWideChar(CP_ACP, 0, WOutDev[wDevID].interface_name, -1, ++ MultiByteToWideChar(CP_UTF8, 0, WOutDev[wDevID].interface_name, -1, + dwParam1, dwParam2 / sizeof(WCHAR)); + return MMSYSERR_NOERROR; + } @@ -2471,10 +2466,10 @@ index 0000000..1b49460 +@ stdcall -private widMessage(long long long long long long) PULSE_widMessage diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h new file mode 100644 -index 0000000..0aa7e86 +index 0000000..b83de5d --- /dev/null +++ b/dlls/winepulse.drv/winepulse.h -@@ -0,0 +1,196 @@ +@@ -0,0 +1,197 @@ +/* Definitions for PulseAudio Wine Driver + * + * Copyright 2009 Arthur Taylor @@ -2648,6 +2643,7 @@ index 0000000..0aa7e86 +DWORD PULSE_WidNumDevs; + +/* pulse.c: PulseAudio Async Callbacks */ ++void PULSE_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata); +void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata); +void PULSE_StreamStateCallback(pa_stream *s, void *userdata); +void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata); From 0fd9fa05eeb343c0c1954f1c63d1790b277262a5 Mon Sep 17 00:00:00 2001 From: Jesse Keating Date: Wed, 17 Feb 2010 03:27:08 +0000 Subject: [PATCH 132/161] Initialize branch F-13 for wine --- branch | 1 + 1 file changed, 1 insertion(+) create mode 100644 branch diff --git a/branch b/branch new file mode 100644 index 0000000..baa94ef --- /dev/null +++ b/branch @@ -0,0 +1 @@ +F-13 From 41119cfd77439a493c6cba24fdfa22bef466ef3c Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 10 May 2010 17:04:21 +0000 Subject: [PATCH 133/161] - upgrade --- .cvsignore | 2 +- sources | 2 +- wine-rpath.patch | 18 +- wine-x86_64-prefix.patch | 26 -- wine.spec | 259 +++++++++++++++--- winepulse-0.35-configure.ac.patch | 19 +- ...ecfg.patch => winepulse-0.36-winecfg.patch | 14 +- winepulse-0.35.patch => winepulse-0.36.patch | 6 +- 8 files changed, 248 insertions(+), 98 deletions(-) delete mode 100644 wine-x86_64-prefix.patch rename winepulse-0.34-winecfg.patch => winepulse-0.36-winecfg.patch (98%) rename winepulse-0.35.patch => winepulse-0.36.patch (99%) diff --git a/.cvsignore b/.cvsignore index 1f0c866..fdee59a 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.38-fe.tar.bz2 +wine-1.1.44.tar.bz2 diff --git a/sources b/sources index 2286e73..230abeb 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -fdf4b8573b77da73b683e97128ee4150 wine-1.1.38-fe.tar.bz2 +f18649bd71b9099fecad22436d239cba wine-1.1.44.tar.bz2 diff --git a/wine-rpath.patch b/wine-rpath.patch index f8f6585..3a66716 100644 --- a/wine-rpath.patch +++ b/wine-rpath.patch @@ -1,6 +1,6 @@ ---- configure.orig 2009-10-29 18:57:06.000000000 +0100 -+++ configure 2009-10-29 18:58:49.000000000 +0100 -@@ -6758,14 +6758,14 @@ +--- configure.old 2010-04-02 20:43:45.000000000 +0300 ++++ configure 2010-04-03 23:26:57.365947610 +0300 +@@ -6727,14 +6727,14 @@ fi @@ -9,7 +9,7 @@ -$as_echo_n "checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib... " >&6; } + as_ac_var=`$as_echo "ac_cv_cflags_-fPIC" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC" >&5 -+$as_echo_n "checking whether the compiler supports -fPIC " >&6; } ++$as_echo_n "checking whether the compiler supports -fPIC" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else @@ -18,22 +18,22 @@ +CFLAGS="$CFLAGS -fPIC" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - int main(int argc, char *argv) { return 0; } -@@ -6783,17 +6783,17 @@ + int main(int argc, char **argv) { return 0; } +@@ -6752,17 +6752,17 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if test `eval 'as_val=${'$as_ac_var'};$as_echo "$as_val"'` = yes; then : - LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" - LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" + LDRPATH_INSTALL="" -+ LDRPATH_LOCAL="" ++ LDRPATH_LOCAL="" else - as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,-R,\\$ORIGIN/../lib" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 -$as_echo_n "checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib... " >&6; } + as_ac_var=`$as_echo "ac_cv_cflags_-fPIC" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC" >&5 -+$as_echo_n "checking whether the compiler supports -fPIC " >&6; } ++$as_echo_n "checking whether the compiler supports -fPIC" >&6; } if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else @@ -42,4 +42,4 @@ +CFLAGS="$CFLAGS -fPIC" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ - int main(int argc, char *argv) { return 0; } + int main(int argc, char **argv) { return 0; } diff --git a/wine-x86_64-prefix.patch b/wine-x86_64-prefix.patch deleted file mode 100644 index 7f3e3ff..0000000 --- a/wine-x86_64-prefix.patch +++ /dev/null @@ -1,26 +0,0 @@ ---- 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; ---- dlls/ntdll/server.c.orig 2010-01-18 23:06:56.000000000 +0100 -+++ dlls/ntdll/server.c 2010-01-18 23:07:27.000000000 +0100 -@@ -698,7 +698,7 @@ - { - static int started; /* we only try once */ - char *argv[3]; -- static char wineserver[] = "server/wineserver"; -+ static char wineserver[] = "server/wineserver64"; - static char debug[] = "-d"; - - if (!started) diff --git a/wine.spec b/wine.spec index 7bc9204..b26d60a 100644 --- a/wine.spec +++ b/wine.spec @@ -1,18 +1,13 @@ %define no64bit 0 Name: wine -Version: 1.1.38 +Version: 1.1.44 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -# special fedora tarball without winemp3 -# It can be obtained by running rm -fr dlls/winemp3.acm in the winetree -# and removing the references from configure, configure.ac, Makefile.in, -# and programs/winecfg/libraries.c wrt. winemp3. - -Source0: %{name}-%{version}-fe.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/%{name}-%{version}.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -37,22 +32,22 @@ Source201: wine.directory # mime types Source300: wine-mime-msi.desktop +Patch1: wine-rpath.patch + # explain how to use wine with pulseaudio # 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.35-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse-0.35.patch -Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.34-winecfg.patch +# rebased for .42 see #580073 +Patch400: winepulse-0.35-configure.ac.patch +Patch401: http://art.ified.ca/downloads/winepulse/winepulse-0.36.patch +Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.36-winecfg.patch Source402: README-FEDORA-PULSEAUDIO -Patch1: wine-rpath.patch -# upstream bugs -# currently non -# bugfix patches -# #533806 -Patch600: wine-x86_64-prefix.patch +# enhancements +# add wine-gecko support +Patch1000: wine-gecko.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -108,11 +103,15 @@ BuildRequires: gnutls-devel BuildRequires: pulseaudio-libs-devel BuildRequires: gsm-devel BuildRequires: openal-soft-devel +BuildRequires: libv4l-devel +BuildRequires: fontpackages-devel # noarch Requires: wine-common = %{version}-%{release} Requires: wine-desktop = %{version}-%{release} -# 32bit +Requires: wine-fonts = %{version}-%{release} + +# 32bit parts Requires: wine-core(x86-32) = %{version}-%{release} Requires: wine-capi(x86-32) = %{version}-%{release} Requires: wine-cms(x86-32) = %{version}-%{release} @@ -127,6 +126,13 @@ Requires: wine-cms(x86-64) = %{version}-%{release} Requires: wine-ldap(x86-64) = %{version}-%{release} Requires: wine-twain(x86-64) = %{version}-%{release} Requires: wine-pulseaudio(x86-64) = %{version}-%{release} +Requires: wine-wow(x86-64) = %{version}-%{release} +Conflicts: wine-wow(x86-32) = %{version}-%{release} +%endif + +# 32bit only parts +%ifarch %{ix86} +Requires: wine-wow = %{version}-%{release} %endif %description @@ -144,7 +150,6 @@ wine-* sub packages. %package core Summary: Wine core package Group: Applications/Emulators -Requires: wine-fonts = %{version}-%{release} Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig Obsoletes: wine <= 0.9.15-1%{?dist} @@ -166,9 +171,18 @@ Requires: freetype(x86-64) Requires: gnutls(x86-64) %endif + %description core Wine core package includes the basic wine stuff needed by all other packages. +%package wow +Summary: Files for wine wow seperation +Group: Applications/Emulators +Requires: wine-core = %{version}-%{release} + +%description wow +%{summary} + %package desktop Summary: Desktop integration features for wine Group: Applications/Emulators @@ -188,10 +202,84 @@ handler service. Summary: Wine font files Group: Applications/Emulators BuildArch: noarch +Requires: wine-courier-fonts = %{version}-%{release} +Requires: wine-small-fonts = %{version}-%{release} +Requires: wine-system-fonts = %{version}-%{release} +Requires: wine-marlett-fonts = %{version}-%{release} +#Requires: wine-ms-sans-serif-fonts = %{version}-%{release} +#Requires: wine-tahoma-fonts = %{version}-%{release} +Requires: wine-symbol-fonts = %{version}-%{release} %description fonts %{summary} +%package courier-fonts +Summary: Wine Courier font family +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem + +%description courier-fonts +%{summary} + +%package small-fonts +Summary: Wine Small font family +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem + +%description small-fonts +%{summary} + +%package system-fonts +Summary: Wine System font family +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem + +%description system-fonts +%{summary} + + +%package marlett-fonts +Summary: Wine Marlett font family +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem + +%description marlett-fonts +%{summary} + + +#%package ms-sans-serif-fonts +#Summary: Wine MS Sans Serif font family +#Group: User Interface/X +#BuildArch: noarch +#Requires: fontpackages-filesystem + +#%description ms-sans-serif-fonts +#%{summary} + + +#%package tahoma-fonts +#Summary: Wine Tahoma font family +#Group: User Interface/X +#BuildArch: noarch +#Requires: fontpackages-filesystem + +#%description tahoma-fonts +#%{summary} + + +%package symbol-fonts +Summary: Wine Symbol font family +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem + +%description symbol-fonts +%{summary} + %package common Summary: Common files Group: Applications/Emulators @@ -307,21 +395,19 @@ This package adds an openal driver for wine. %prep -%setup -q -n %{name}-%{version}-fe +%setup -q %patch1 -%patch400 -p1 +%patch400 %patch401 -p1 %patch402 -p1 -%ifarch x86_64 -%patch600 -%endif +%patch1000 autoreconf %build -export CFLAGS="$RPM_OPT_FLAGS" +export CFLAGS="$RPM_OPT_FLAGS -Wno-error" %configure \ --sysconfdir=%{_sysconfdir}/wine \ --x-includes=%{_includedir} --x-libraries=%{_libdir} \ @@ -350,12 +436,8 @@ rm -rf %{buildroot} %ifarch %{ix86} # rename wine to wine32 mv %{buildroot}%{_bindir}/wine{,32} -%endif - -# if x86_64 rename to wine64 -%ifarch x86_64 -mv %{buildroot}%{_bindir}/wine{,64} -mv %{buildroot}%{_bindir}/wineserver{,64} +# create link to wine32 if ix86 +ln -s %{_bindir}/wine32 %{buildroot}%{_bindir}/wine %endif mkdir -p %{buildroot}%{_sysconfdir}/wine @@ -449,11 +531,34 @@ install -p -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ install -p -m644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ %endif -install -p -m755 %{SOURCE6} $RPM_BUILD_ROOT%{_bindir}/wine - # deploy pulseaudio readme cp %{SOURCE402} . +# install fonts +install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-courier-fonts +mv %{buildroot}/%{_datadir}/wine/fonts/cou* %{buildroot}/%{_datadir}/fonts/wine-courier-fonts/ + +install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-system-fonts +mv %{buildroot}/%{_datadir}/wine/fonts/*sys.* %{buildroot}/%{_datadir}/fonts/wine-system-fonts/ + +install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-small-fonts +mv %{buildroot}/%{_datadir}/wine/fonts/sma* %{buildroot}/%{_datadir}/fonts/wine-small-fonts/ + +install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-marlett-fonts +mv %{buildroot}/%{_datadir}/wine/fonts/marlett.ttf %{buildroot}/%{_datadir}/fonts/wine-marlett-fonts/ + +#install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-ms-sans-serif-fonts +#mv %{buildroot}/%{_datadir}/wine/fonts/sse* %{buildroot}/%{_datadir}/fonts/wine-ms-sans-serif-fonts/ +rm -f %{buildroot}/%{_datadir}/wine/fonts/sse* + +#install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-tahoma-fonts +#mv %{buildroot}/%{_datadir}/wine/fonts/tahoma* %{buildroot}/%{_datadir}/fonts/wine-tahoma-fonts/ +rm -f %{buildroot}/%{_datadir}/wine/fonts/tahoma* + +install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-symbol-fonts +mv %{buildroot}/%{_datadir}/wine/fonts/symbol.ttf %{buildroot}/%{_datadir}/fonts/wine-symbol-fonts/ + + %clean rm -rf %{buildroot} @@ -543,21 +648,22 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/write.exe.so %{_libdir}/wine/dxdiag.exe.so +%{_bindir}/wine + %ifarch %{ix86} %{_bindir}/wine32 %{_bindir}/wine-preloader -%{_bindir}/wineserver %{_sysconfdir}/ld.so.conf.d/wine-32.conf %endif + %ifarch x86_64 -%{_bindir}/wine64 -%{_bindir}/wineserver64 %{_sysconfdir}/ld.so.conf.d/wine-64.conf %endif %dir %{_libdir}/wine %dir %{_libdir}/wine/fakedlls %{_libdir}/wine/fakedlls/* +%{_libdir}/wine/attrib.exe.so %{_libdir}/wine/cacls.exe.so %{_libdir}/wine/expand.exe.so %{_libdir}/wine/extrac32.exe.so @@ -565,8 +671,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/mshta.exe.so %{_libdir}/wine/msiexec.exe.so %{_libdir}/wine/net.exe.so +%{_libdir}/wine/ngen.exe.so %{_libdir}/wine/ntoskrnl.exe.so %{_libdir}/wine/oleview.exe.so +%{_libdir}/wine/ping.exe.so %{_libdir}/wine/reg.exe.so %{_libdir}/wine/regedit.exe.so %{_libdir}/wine/regsvr32.exe.so @@ -576,7 +684,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/services.exe.so %{_libdir}/wine/start.exe.so %{_libdir}/wine/termsv.exe.so -%{_libdir}/wine/wineboot.exe.so %{_libdir}/wine/winebrowser.exe.so %{_libdir}/wine/wineconsole.exe.so %{_libdir}/wine/winemenubuilder.exe.so @@ -630,6 +737,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/devenum.dll.so %{_libdir}/wine/dinput.dll.so %{_libdir}/wine/dinput8.dll.so +%{_libdir}/wine/dispex.dll.so %{_libdir}/wine/dmband.dll.so %{_libdir}/wine/dmcompos.dll.so %{_libdir}/wine/dmime.dll.so @@ -729,7 +837,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msrle32.dll.so %{_libdir}/wine/mstask.dll.so %{_libdir}/wine/msvcirt.dll.so +%{_libdir}/wine/msvcr70.dll.so %{_libdir}/wine/msvcr71.dll.so +%{_libdir}/wine/msvcr80.dll.so +%{_libdir}/wine/msvcr90.dll.so +%{_libdir}/wine/msvcr100.dll.so %{_libdir}/wine/msvcrt.dll.so %{_libdir}/wine/msvcrt20.dll.so %{_libdir}/wine/msvcrt40.dll.so @@ -779,6 +891,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/rsabase.dll.so %{_libdir}/wine/rsaenh.dll.so %{_libdir}/wine/rtutils.dll.so +%{_libdir}/wine/sc.exe.so %{_libdir}/wine/sccbase.dll.so %{_libdir}/wine/schannel.dll.so %{_libdir}/wine/secur32.dll.so @@ -810,6 +923,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/updspapi.dll.so %{_libdir}/wine/url.dll.so %{_libdir}/wine/urlmon.dll.so +%{_libdir}/wine/usbd.sys.so %{_libdir}/wine/user32.dll.so %{_libdir}/wine/usp10.dll.so %{_libdir}/wine/uxtheme.dll.so @@ -922,12 +1036,15 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winsock.dll16.so %{_libdir}/wine/wintab.dll16.so %{_libdir}/wine/wow32.dll.so -#%{_libdir}/wine/wprocs.dll16.so %endif +%files wow +%defattr(-,root,root,-) +%{_bindir}/wineserver +%{_libdir}/wine/wineboot.exe.so + %files common %defattr(-,root,root,-) -%{_bindir}/wineprefixcreate %{_bindir}/notepad %{_bindir}/winedbg %{_bindir}/winefile @@ -937,22 +1054,49 @@ update-desktop-database &>/dev/null || : %{_bindir}/msiexec %{_bindir}/regedit %{_bindir}/regsvr32 -%{_bindir}/wine %{_bindir}/wineboot %{_bindir}/wineconsole %{_bindir}/winecfg %dir %{_datadir}/wine %{_mandir}/man1/wine.1.gz %{_mandir}/man1/wineserver.1* -%{_mandir}/man1/wineprefixcreate.1* %lang(fr) %{_mandir}/fr.UTF-8/man1/* +%lang(de) %{_mandir}/de.UTF-8/man1/* %{_datadir}/wine/generic.ppd %{_datadir}/wine/wine.inf +%{_datadir}/wine/l_intl.nls %files fonts %defattr(-,root,root,-) %{_datadir}/wine/fonts +%files courier-fonts +%defattr(-,root,root,-) +%{_datadir}/fonts/wine-courier-fonts + +%files system-fonts +%defattr(-,root,root,-) +%{_datadir}/fonts/wine-system-fonts + +%files small-fonts +%defattr(-,root,root,-) +%{_datadir}/fonts/wine-small-fonts + +%files marlett-fonts +%defattr(-,root,root,-) +%{_datadir}/fonts/wine-marlett-fonts + +#%files ms-sans-serif-fonts +#%defattr(-,root,root,-) +#%{_datadir}/fonts/wine-ms-sans-serif-fonts + +#%files tahoma-fonts +#%defattr(-,root,root,-) +#%{_datadir}/fonts/wine-tahoma-fonts + +%files symbol-fonts +%defattr(-,root,root,-) +%{_datadir}/fonts/wine-symbol-fonts %files desktop %defattr(-,root,root,-) @@ -1055,6 +1199,41 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Sun May 09 2010 Andreas Bierfert +- 1.1.44-1 +- version upgrade (#580024) + +* Sun Apr 18 2010 Andreas Bierfert +- 1.1.43-1 +- version upgrade + +* Sun Apr 11 2010 Andreas Bierfert +- 1.1.42-1 +- version upgrade +- rework for wow64 + +* Mon Mar 29 2010 Andreas Bierfert +- 1.1.41-3 +- add support for mingw32-wine-gecko + +* Sun Mar 28 2010 Andreas Bierfert +- 1.1.41-2 +- convert to font package guidelines +- add libv4l-devel BR + +* Sun Mar 28 2010 Andreas Bierfert +- 1.1.41-1 +- version upgrade (#577587, #576607) +- winepulse upgrade (0.36) + +* Sat Mar 06 2010 Andreas Bierfert +- 1.1.40-1 +- version upgrade + +* Sun Feb 21 2010 Andreas Bierfert +- 1.1.39-1 +- version upgrade + * Tue Feb 09 2010 Andreas Bierfert - 1.1.38-1 - version upgrade diff --git a/winepulse-0.35-configure.ac.patch b/winepulse-0.35-configure.ac.patch index 0d4235b..9d5132d 100644 --- a/winepulse-0.35-configure.ac.patch +++ b/winepulse-0.35-configure.ac.patch @@ -1,16 +1,14 @@ -diff --git a/configure.ac b/configure.ac -index f823045..583f9c1 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -64,6 +64,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), +--- configure.ac.orig 2010-05-10 16:39:57.000000000 +0200 ++++ configure.ac 2010-05-10 16:42:54.000000000 +0200 +@@ -68,6 +68,7 @@ [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]), [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi]) +AC_ARG_WITH(pulse, AC_HELP_STRING([--without-pulse],[do not use PulseAudio sound support])) AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) - AC_ARG_WITH(v4l, AS_HELP_STRING([--without-v4l],[do not use v4l1 (v4l support)])) - AC_ARG_WITH(xcomposite,AS_HELP_STRING([--without-xcomposite],[do not use the Xcomposite extension]), -@@ -1308,6 +1309,30 @@ then + AC_ARG_WITH(tiff, AS_HELP_STRING([--without-tiff],[do not use TIFF]), + [if test "x$withval" = "xno"; then ac_cv_header_tiffio_h=no; fi]) +@@ -1361,6 +1362,31 @@ CFLAGS="$save_CFLAGS" fi @@ -37,11 +35,12 @@ index f823045..583f9c1 100644 +fi +WINE_WARNING_WITH(pulse, [test "$ac_cv_lib_pulse_pa_stream_is_corked" != "yes"], + [libpulse ${notice_platform}development files not found or too old, Pulse won't be supported.]) ++ + dnl **** Check for ALSA 1.x **** AC_SUBST(ALSALIBS,"") if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" -@@ -1460,7 +1485,7 @@ dnl **** Check for libodbc **** +@@ -1528,7 +1554,7 @@ WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) dnl **** Check for any sound system **** @@ -50,7 +49,7 @@ index f823045..583f9c1 100644 "$ac_cv_header_sys_soundcard_h" != "yes" -a \ "$ac_cv_header_machine_soundcard_h" != "yes" -a \ "$ac_cv_header_soundcard_h" != "yes" -a \ -@@ -2555,6 +2580,7 @@ WINE_CONFIG_DLL(winenas.drv) +@@ -2621,6 +2647,7 @@ WINE_CONFIG_DLL(wineoss.drv) WINE_CONFIG_DLL(wineps.drv) WINE_CONFIG_DLL(wineps16.drv16,enable_win16) diff --git a/winepulse-0.34-winecfg.patch b/winepulse-0.36-winecfg.patch similarity index 98% rename from winepulse-0.34-winecfg.patch rename to winepulse-0.36-winecfg.patch index 5635a97..f73525a 100644 --- a/winepulse-0.34-winecfg.patch +++ b/winepulse-0.36-winecfg.patch @@ -287,22 +287,22 @@ index 9f8a0a2..59837ef 100644 {IDS_DRIVER_OSS, "oss"}, {IDS_DRIVER_COREAUDIO, "coreaudio"}, diff --git a/programs/winecfg/libraries.c b/programs/winecfg/libraries.c -index 37cc12b..7c13fad 100644 +index 19504d6..b5c84eb 100644 --- a/programs/winecfg/libraries.c +++ b/programs/winecfg/libraries.c -@@ -81,6 +81,7 @@ static const char * const builtin_only[] = - "wineoss.drv", +@@ -73,6 +73,7 @@ static const char * const builtin_only[] = + "winedos", + "winemp3.acm", "wineps", - "wineps.drv", + "winepulse.drv", - "winex11.drv", "winmm", "wintab32", + "wnaspi32", diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h -index f006861..57b2a15 100644 +index 15c905b..67616fb 100644 --- a/programs/winecfg/resource.h +++ b/programs/winecfg/resource.h -@@ -187,7 +187,7 @@ +@@ -188,7 +188,7 @@ #define IDS_ACCEL_BASIC 8302 #define IDS_ACCEL_EMULATION 8303 #define IDS_DRIVER_ALSA 8304 diff --git a/winepulse-0.35.patch b/winepulse-0.36.patch similarity index 99% rename from winepulse-0.35.patch rename to winepulse-0.36.patch index 9b809f2..7ea2ef1 100644 --- a/winepulse-0.35.patch +++ b/winepulse-0.36.patch @@ -1,9 +1,9 @@ diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in new file mode 100644 -index 0000000..80a751d +index 0000000..ed48381 --- /dev/null +++ b/dlls/winepulse.drv/Makefile.in -@@ -0,0 +1,16 @@ +@@ -0,0 +1,14 @@ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../.. +SRCDIR = @srcdir@ @@ -18,8 +18,6 @@ index 0000000..80a751d + pulse.c + +@MAKE_DLL_RULES@ -+ -+@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c new file mode 100644 index 0000000..9dd1f80 From 866ed7620176e0637a53134390eab666536d89f4 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 10 May 2010 20:32:43 +0000 Subject: [PATCH 134/161] - add missing patches --- wine-const.patch | 20 ++++++++ wine-gecko.patch | 127 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 wine-const.patch create mode 100644 wine-gecko.patch diff --git a/wine-const.patch b/wine-const.patch new file mode 100644 index 0000000..fe8ab34 --- /dev/null +++ b/wine-const.patch @@ -0,0 +1,20 @@ +--- dlls/winhttp/net.c.old 2010-04-04 18:11:01.266148279 +0300 ++++ dlls/winhttp/net.c 2010-04-04 18:12:52.235163141 +0300 +@@ -91,7 +91,7 @@ + static void *libssl_handle; + static void *libcrypto_handle; + +-static SSL_METHOD *method; ++static const SSL_METHOD *method; + static SSL_CTX *ctx; + static int hostname_idx; + static int error_idx; +@@ -113,7 +113,7 @@ + static void *OpenSSL_ssl_handle; + static void *OpenSSL_crypto_handle; + +-static SSL_METHOD *meth; ++const static SSL_METHOD *meth; + static SSL_CTX *ctx; + static int hostname_idx; + static int error_idx; diff --git a/wine-gecko.patch b/wine-gecko.patch new file mode 100644 index 0000000..93ea904 --- /dev/null +++ b/wine-gecko.patch @@ -0,0 +1,127 @@ +--- dlls/mshtml/install.c.orig 2010-03-28 23:48:50.000000000 +0200 ++++ dlls/mshtml/install.c 2010-03-29 20:43:54.000000000 +0200 +@@ -284,6 +284,103 @@ + return ret; + } + ++static BOOL install_from_fedora_mingw32_wine_gecko(void) { ++ const char *data_dir, *subdir; ++ BOOL res; ++ ++ LPWSTR dos_dir_name; ++ LPSTR dos_dir_name_a; ++ static WCHAR *(*wine_get_dos_file_name)(const char*); ++ static const WCHAR kernel32W[] = {'k','e','r','n','e','l','3','2','.','d','l','l',0}; ++ ++ char install_dir[MAX_PATH]; ++ char gecko_dir[MAX_PATH]; ++ ++ SHFILEOPSTRUCTA sf; ++ ++ TRACE("()\n"); ++ ++ if((data_dir = wine_get_data_dir())) ++ subdir = "/gecko/"; ++ else if((data_dir = wine_get_build_dir())) ++ subdir = "/../gecko/"; ++ else ++ return FALSE; ++ ++ TRACE("data_dir=%s\n",data_dir); ++ TRACE("subdir=%s\n",subdir); ++ ++ memcpy(gecko_dir, data_dir, MAX_PATH); ++ strncat(gecko_dir, subdir, MAX_PATH-strlen(gecko_dir)); ++ strncat(gecko_dir, GECKO_VERSION, MAX_PATH-strlen(gecko_dir)); ++ strncat(gecko_dir, "/", MAX_PATH-strlen(gecko_dir)); ++ ++ if(!wine_get_dos_file_name) ++ wine_get_dos_file_name = (void*)GetProcAddress(GetModuleHandleW(kernel32W), "wine_get_dos_file_name"); ++ ++ if(wine_get_dos_file_name) { /* Wine UNIX mode */ ++ dos_dir_name = wine_get_dos_file_name(gecko_dir); ++ if(!dos_dir_name) { ++ ERR("Could not get dos file name of %s\n", debugstr_a(gecko_dir)); ++ return FALSE; ++ } ++ } else { ++ return FALSE; ++ } ++ ++ TRACE("gecko_dir=%s\n", debugstr_a(gecko_dir)); ++ TRACE("dos_dir_name=%s\n", debugstr_w(dos_dir_name)); ++ ++ ++ if(GetFileAttributesW(dos_dir_name) == INVALID_FILE_ATTRIBUTES) { ++ TRACE("mingw32-wine-gecko package not installed\n"); ++ return FALSE; ++ } ++ ++ GetSystemDirectoryA(install_dir, sizeof(install_dir)); ++ strncat(install_dir, "\\gecko\\",MAX_PATH-strlen(install_dir)); ++ res = CreateDirectoryA(install_dir, NULL); ++ if(!res && GetLastError() != ERROR_ALREADY_EXISTS) { ++ ERR("Could not create directory: %08u\n", GetLastError()); ++ return FALSE; ++ } ++ ++ strncat(install_dir, GECKO_VERSION, MAX_PATH-strlen(install_dir)); ++ res = CreateDirectoryA(install_dir, NULL); ++ if(!res && GetLastError() != ERROR_ALREADY_EXISTS) { ++ ERR("Could not create directory: %08u\n", GetLastError()); ++ return FALSE; ++ } ++ ++ TRACE("install_dir=%s\n",debugstr_a(install_dir)); ++ ++ dos_dir_name_a = heap_strdupWtoA(dos_dir_name); ++ ++ lstrcatA(dos_dir_name_a,"*.*"); ++ TRACE("dos_dir_name_a=%s\n",debugstr_a(dos_dir_name_a)); ++ ++ memset(&sf,0,sizeof(sf)); ++ sf.hwnd = 0; ++ sf.wFunc = FO_COPY; ++ sf.pFrom = dos_dir_name_a; ++ sf.pTo = install_dir; ++ sf.fFlags = FOF_NOCONFIRMATION, FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_SILENT; ++ res = SHFileOperationA(&sf); ++ ++ heap_free(dos_dir_name_a); ++ ++ if(res != 0) { ++ ERR("Could not copy files: %08u\n", GetLastError()); ++ return FALSE; ++ } ++ ++ set_registry(install_dir); ++ ++ clean_up(); ++ ++ return TRUE; ++} ++ + static HRESULT WINAPI InstallCallback_QueryInterface(IBindStatusCallback *iface, + REFIID riid, void **ppv) + { +@@ -541,7 +638,8 @@ + * - $datadir/gecko + * - download from URL stored in GeckoUrl value of HKCU/Software/MSHTML key + */ +- if(!install_from_registered_dir() ++ if ( !install_from_fedora_mingw32_wine_gecko() ++ && !install_from_registered_dir() + && !install_from_default_dir() + && !silent && (url = get_url())) + DialogBoxW(hInst, MAKEINTRESOURCEW(ID_DWL_DIALOG), 0, installer_proc); +--- dlls/mshtml/Makefile.in.orig 2010-03-29 15:13:47.000000000 +0200 ++++ dlls/mshtml/Makefile.in 2010-03-29 15:49:55.000000000 +0200 +@@ -4,7 +4,7 @@ + VPATH = @srcdir@ + MODULE = mshtml.dll + IMPORTLIB = mshtml +-IMPORTS = strmiids uuid urlmon shlwapi ole32 oleaut32 user32 gdi32 advapi32 kernel32 ++IMPORTS = strmiids uuid urlmon shlwapi ole32 oleaut32 user32 gdi32 advapi32 kernel32 shell32 + EXTRADEFS = -DCOM_NO_WINDOWS_H + DELAYIMPORTS = wininet + From 78f26f975e0403cde51b083f1f2097a002079d66 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 11 May 2010 15:30:11 +0000 Subject: [PATCH 135/161] - fix man page problem --- wine.spec | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/wine.spec b/wine.spec index b26d60a..9614a8b 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define no64bit 0 Name: wine Version: 1.1.44 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -1060,8 +1060,10 @@ update-desktop-database &>/dev/null || : %dir %{_datadir}/wine %{_mandir}/man1/wine.1.gz %{_mandir}/man1/wineserver.1* -%lang(fr) %{_mandir}/fr.UTF-8/man1/* -%lang(de) %{_mandir}/de.UTF-8/man1/* +%lang(fr) %{_mandir}/fr.UTF-8/man1/wine.1* +%lang(fr) %{_mandir}/fr.UTF-8/man1/wineserver.1* +%lang(de) %{_mandir}/de.UTF-8/man1/wine.1* +%lang(de) %{_mandir}/de.UTF-8/man1/wineserver.1* %{_datadir}/wine/generic.ppd %{_datadir}/wine/wine.inf %{_datadir}/wine/l_intl.nls @@ -1173,7 +1175,7 @@ update-desktop-database &>/dev/null || : %{_mandir}/man1/wrc.1* %{_mandir}/man1/winedbg.1* %{_mandir}/man1/wineg++.1* -%lang(de) %{_mandir}/de.UTF-8/man1/wine.1* +%lang(de) %{_mandir}/de.UTF-8/man1/winemaker.1* %attr(0755, root, root) %dir %{_includedir}/wine %{_includedir}/wine/* %{_libdir}/*.so @@ -1199,6 +1201,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Tue May 11 2010 Andreas Bierfert +- 1.1.44-2 +- fix manpage conflict between -common and -devel + * Sun May 09 2010 Andreas Bierfert - 1.1.44-1 - version upgrade (#580024) From ca9d2130057ad0d7b1d61d3e7918720ff6770e32 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 12 May 2010 20:47:22 +0000 Subject: [PATCH 136/161] - fix 591690 --- wine.spec | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/wine.spec b/wine.spec index 9614a8b..880743c 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define no64bit 0 Name: wine Version: 1.1.44 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -648,7 +648,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/write.exe.so %{_libdir}/wine/dxdiag.exe.so -%{_bindir}/wine %ifarch %{ix86} %{_bindir}/wine32 @@ -657,6 +656,7 @@ update-desktop-database &>/dev/null || : %endif %ifarch x86_64 +%{_bindir}/wine %{_sysconfdir}/ld.so.conf.d/wine-64.conf %endif @@ -1040,6 +1040,9 @@ update-desktop-database &>/dev/null || : %files wow %defattr(-,root,root,-) +%ifarch %{ix86} +%{_bindir}/wine +%endif %{_bindir}/wineserver %{_libdir}/wine/wineboot.exe.so @@ -1201,6 +1204,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Wed May 12 2010 Andreas Bierfert +- 1.1.44-3 +- move wine symlink to -wow for 32bit (#591690) + * Tue May 11 2010 Andreas Bierfert - 1.1.44-2 - fix manpage conflict between -common and -devel From 9f59bfa451f390194496fbd98b80f28fbee596ec Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 14 May 2010 08:29:04 +0000 Subject: [PATCH 137/161] - fix install of 32bit only wine on x86_64 via install wine.i686 --- wine.spec | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/wine.spec b/wine.spec index 880743c..617b79f 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define no64bit 0 Name: wine Version: 1.1.44 -Release: 3%{?dist} +Release: 4%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -132,7 +132,7 @@ Conflicts: wine-wow(x86-32) = %{version}-%{release} # 32bit only parts %ifarch %{ix86} -Requires: wine-wow = %{version}-%{release} +Requires: wine-wow(x86-32) = %{version}-%{release} %endif %description @@ -178,7 +178,12 @@ Wine core package includes the basic wine stuff needed by all other packages. %package wow Summary: Files for wine wow seperation Group: Applications/Emulators -Requires: wine-core = %{version}-%{release} +%ifarch x86_64 +Requires: wine-core(x86-64) = %{version}-%{release} +%else +Requires: wine-core(x86-32) = %{version}-%{release} +%endif + %description wow %{summary} @@ -1204,6 +1209,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Thu May 13 2010 Andreas Bierfert +- 1.1.44-4 +- fix install of 32bit only wine on x86_64 via install wine.i686 + * Wed May 12 2010 Andreas Bierfert - 1.1.44-3 - move wine symlink to -wow for 32bit (#591690) From 9b3139aa191f93ae80866d0b626a8af91140d766 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 31 May 2010 13:17:48 +0000 Subject: [PATCH 138/161] - version upgrade - add BR for ImageMagick and icoutils - spec cleanup - install available icon files (#594950) - desktop package requires wine x86-32 because of wine/wine64 rename - put system/small fonts in right place --- .cvsignore | 2 +- sources | 2 +- wine-fonts.patch | 183 +++++++++++++++++++++++++++++++++++++ wine-imagemagick-6.5.patch | 30 ++++++ wine-notepad.desktop | 1 + wine-oleview.desktop | 1 + wine-regedit.desktop | 1 + wine-uninstaller.desktop | 1 + wine-wineboot.desktop | 1 + wine-winecfg.desktop | 1 + wine-winefile.desktop | 1 + wine-winemine.desktop | 1 + wine-winhelp.desktop | 1 + wine-wordpad.desktop | 1 + wine.spec | 127 ++++++++++++++++++------- 15 files changed, 317 insertions(+), 37 deletions(-) create mode 100644 wine-fonts.patch create mode 100644 wine-imagemagick-6.5.patch diff --git a/.cvsignore b/.cvsignore index fdee59a..6c439f0 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.1.44.tar.bz2 +wine-1.2-rc2.tar.bz2 diff --git a/sources b/sources index 230abeb..09fd0b6 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -f18649bd71b9099fecad22436d239cba wine-1.1.44.tar.bz2 +99b4511a5a005a1ef363700d482f80f1 wine-1.2-rc2.tar.bz2 diff --git a/wine-fonts.patch b/wine-fonts.patch new file mode 100644 index 0000000..bdc7504 --- /dev/null +++ b/wine-fonts.patch @@ -0,0 +1,183 @@ +--- dlls/gdi32/freetype.c.orig 2010-05-19 22:02:43.000000000 +0200 ++++ dlls/gdi32/freetype.c 2010-05-19 23:57:27.000000000 +0200 +@@ -400,7 +400,7 @@ + /* Interesting and well-known (frequently-assumed!) font names */ + static const WCHAR Lucida_Sans_Unicode[] = {'L','u','c','i','d','a',' ','S','a','n','s',' ','U','n','i','c','o','d','e',0}; + static const WCHAR Microsoft_Sans_Serif[] = {'M','i','c','r','o','s','o','f','t',' ','S','a','n','s',' ','S','e','r','i','f',0 }; +-static const WCHAR Tahoma[] = {'T','a','h','o','m','a',0}; ++static const WCHAR Liberation[] = {'L','i','b','e','r','a','t','i','o','n',' ','S','a','n','s',0}; + static const WCHAR MS_UI_Gothic[] = {'M','S',' ','U','I',' ','G','o','t','h','i','c',0}; + static const WCHAR SimSun[] = {'S','i','m','S','u','n',0}; + static const WCHAR Gulim[] = {'G','u','l','i','m',0}; +@@ -1641,7 +1641,7 @@ + WCHAR *entry, *next; + SYSTEM_LINKS *font_link, *system_font_link; + CHILD_FONT *child_font; +- static const WCHAR tahoma_ttf[] = {'t','a','h','o','m','a','.','t','t','f',0}; ++ static const WCHAR liberation_ttf[] = {'L','i','b','e','r','a','t','i','o','n','S','a','n','s','-','R','e','g','u','l','a','r','.','t','t','f',0}; + static const WCHAR System[] = {'S','y','s','t','e','m',0}; + FONTSIGNATURE fs; + Family *family; +@@ -1723,25 +1723,25 @@ + RegCloseKey(hkey); + } + +- /* Explicitly add an entry for the system font, this links to Tahoma and any links +- that Tahoma has */ ++ /* Explicitly add an entry for the system font, this links to Liberation Sans and any links ++ that Liberation Sans has */ + + system_font_link = HeapAlloc(GetProcessHeap(), 0, sizeof(*system_font_link)); + system_font_link->font_name = strdupW(System); + list_init(&system_font_link->links); + +- face = find_face_from_filename(tahoma_ttf, Tahoma); ++ face = find_face_from_filename(liberation_ttf, Liberation); + if(face) + { + child_font = HeapAlloc(GetProcessHeap(), 0, sizeof(*child_font)); + child_font->face = face; + child_font->font = NULL; +- TRACE("Found Tahoma in %s index %ld\n", child_font->face->file, child_font->face->face_index); ++ TRACE("Found Liberation Sans in %s index %ld\n", child_font->face->file, child_font->face->face_index); + list_add_tail(&system_font_link->links, &child_font->entry); + } + LIST_FOR_EACH_ENTRY(font_link, &system_links, SYSTEM_LINKS, entry) + { +- if(!strcmpiW(font_link->font_name, Tahoma)) ++ if(!strcmpiW(font_link->font_name, Liberation)) + { + CHILD_FONT *font_link_entry; + LIST_FOR_EACH_ENTRY(font_link_entry, &font_link->links, CHILD_FONT, entry) +@@ -2193,21 +2193,21 @@ + /* Latin 1 (United States) */ + { 1252, 437, "vgaoem.fon", "vgafix.fon", "vgasys.fon", + "coure.fon", "serife.fon", "smalle.fon", "sserife.fon", +- "Tahoma","Times New Roman", ++ "Liberation Sans","Times New Roman", + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + { 0 }, { 0 }, { 0 } + }, + /* Latin 1 (Multilingual) */ + { 1252, 850, "vga850.fon", "vgafix.fon", "vgasys.fon", + "coure.fon", "serife.fon", "smalle.fon", "sserife.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + { 0 }, { 0 }, { 0 } + }, + /* Eastern Europe */ + { 1250, 852, "vga852.fon", "vgafixe.fon", "vgasyse.fon", + "couree.fon", "serifee.fon", "smallee.fon", "sserifee.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + "Fixedsys,238", "System,238", + "Courier New,238", "MS Serif,238", "Small Fonts,238", + "MS Sans Serif,238", "MS Sans Serif,238", "MS Serif,238", +@@ -2218,7 +2218,7 @@ + /* Cyrillic */ + { 1251, 866, "vga866.fon", "vgafixr.fon", "vgasysr.fon", + "courer.fon", "serifer.fon", "smaller.fon", "sserifer.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + "Fixedsys,204", "System,204", + "Courier New,204", "MS Serif,204", "Small Fonts,204", + "MS Sans Serif,204", "MS Sans Serif,204", "MS Serif,204", +@@ -2229,7 +2229,7 @@ + /* Greek */ + { 1253, 737, "vga869.fon", "vgafixg.fon", "vgasysg.fon", + "coureg.fon", "serifeg.fon", "smalleg.fon", "sserifeg.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + "Fixedsys,161", "System,161", + "Courier New,161", "MS Serif,161", "Small Fonts,161", + "MS Sans Serif,161", "MS Sans Serif,161", "MS Serif,161", +@@ -2240,7 +2240,7 @@ + /* Turkish */ + { 1254, 857, "vga857.fon", "vgafixt.fon", "vgasyst.fon", + "couret.fon", "serifet.fon", "smallet.fon", "sserifet.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + "Fixedsys,162", "System,162", + "Courier New,162", "MS Serif,162", "Small Fonts,162", + "MS Sans Serif,162", "MS Sans Serif,162", "MS Serif,162", +@@ -2251,7 +2251,7 @@ + /* Hebrew */ + { 1255, 862, "vgaoem.fon", "vgaf1255.fon", "vgas1255.fon", + "coue1255.fon", "sere1255.fon", "smae1255.fon", "ssee1255.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + "Fixedsys,177", "System,177", + "Courier New,177", "MS Serif,177", "Small Fonts,177", + "MS Sans Serif,177", "MS Sans Serif,177", "MS Serif,177", +@@ -2260,7 +2260,7 @@ + /* Arabic */ + { 1256, 720, "vgaoem.fon", "vgaf1256.fon", "vgas1256.fon", + "coue1256.fon", "sere1256.fon", "smae1256.fon", "ssee1256.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + "Fixedsys,178", "System,178", + "Courier New,178", "MS Serif,178", "Small Fonts,178", + "MS Sans Serif,178", "MS Sans Serif,178", "MS Serif,178", +@@ -2269,7 +2269,7 @@ + /* Baltic */ + { 1257, 775, "vga775.fon", "vgaf1257.fon", "vgas1257.fon", + "coue1257.fon", "sere1257.fon", "smae1257.fon", "ssee1257.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + "Fixedsys,186", "System,186", + "Courier New,186", "MS Serif,186", "Small Fonts,186", + "MS Sans Serif,186", "MS Sans Serif,186", "MS Serif,186", +@@ -2280,14 +2280,14 @@ + /* Vietnamese */ + { 1258, 1258, "vga850.fon", "vgafix.fon", "vgasys.fon", + "coure.fon", "serife.fon", "smalle.fon", "sserife.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + { 0 }, { 0 }, { 0 } + }, + /* Thai */ + { 874, 874, "vga850.fon", "vgaf874.fon", "vgas874.fon", + "coure.fon", "serife.fon", "smalle.fon", "ssee874.fon", +- "Tahoma","Times New Roman", /* FIXME unverified */ ++ "Liberation Sans","Times New Roman", /* FIXME unverified */ + NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, + { 0 }, { 0 }, { 0 } + }, +@@ -2325,7 +2325,7 @@ + { + Lucida_Sans_Unicode, + Microsoft_Sans_Serif, +- Tahoma ++ Liberation + }; + + static const struct font_links_defaults_list +@@ -2337,7 +2337,7 @@ + } font_links_defaults_list[] = + { + /* Non East-Asian */ +- { Tahoma, /* FIXME unverified ordering */ ++ { Liberation, /* FIXME unverified ordering */ + { MS_UI_Gothic, SimSun, Gulim, PMingLiU, NULL } + }, + /* Below lists are courtesy of +--- tools/wine.inf.in.orig 2010-05-26 07:41:44.000000000 +0200 ++++ tools/wine.inf.in 2010-05-26 07:46:15.000000000 +0200 +@@ -576,13 +576,14 @@ + HKLM,%FontSubStr%,"Courier New TUR,162",,"Courier New,162" + HKLM,%FontSubStr%,"Helv",,"MS Sans Serif" + HKLM,%FontSubStr%,"Helvetica",,"Arial" +-HKLM,%FontSubStr%,"MS Shell Dlg 2",,"Tahoma" ++HKLM,%FontSubStr%,"MS Shell Dlg 2",,"Liberation Sans" + HKLM,%FontSubStr%,"Times",,"Times New Roman" + HKLM,%FontSubStr%,"Times New Roman Baltic,186",,"Times New Roman,186" + HKLM,%FontSubStr%,"Times New Roman CE,238",,"Times New Roman,238" + HKLM,%FontSubStr%,"Times New Roman CYR,204",,"Times New Roman,204" + HKLM,%FontSubStr%,"Times New Roman Greek,161",,"Times New Roman,161" + HKLM,%FontSubStr%,"Times New Roman TUR,162",,"Times New Roman,162" ++HKLM,%FontSubStr%,"MS Sans Serif",,"Liberation Serif" + HKLM,System\CurrentControlSet\Hardware Profiles\Current\Software\Fonts,"LogPixels",0x10003,0x00000060 + + [MCI] diff --git a/wine-imagemagick-6.5.patch b/wine-imagemagick-6.5.patch new file mode 100644 index 0000000..a591f83 --- /dev/null +++ b/wine-imagemagick-6.5.patch @@ -0,0 +1,30 @@ +--- configure.orig 2010-05-25 19:44:56.000000000 +0200 ++++ configure 2010-05-25 19:46:11.000000000 +0200 +@@ -5132,10 +5132,10 @@ + then + convert_version_major=`expr "$convert_version" : '.* \([0-9]*\)\.[0-9]*'` + convert_version_minor=`expr "$convert_version" : '.* [0-9]*\.\([0-9]*\)'` +- if test "$convert_version_major" -eq 6 -a "$convert_version_minor" -lt 6 ++ if test "$convert_version_major" -eq 6 -a "$convert_version_minor" -lt 5 + then + CONVERT=false +- as_fn_append wine_warnings "|imagemagick version 6.6 or newer is needed to rebuild icons." ++ as_fn_append wine_warnings "|imagemagick version 6.5 or newer is needed to rebuild icons." + fi + fi + if test "$CONVERT" = false +--- configure.ac.orig 2010-05-25 19:45:16.000000000 +0200 ++++ configure.ac 2010-05-25 19:46:44.000000000 +0200 +@@ -303,10 +303,10 @@ + then + convert_version_major=`expr "$convert_version" : '.* \([[0-9]]*\)\.[[0-9]]*'` + convert_version_minor=`expr "$convert_version" : '.* [[0-9]]*\.\([[0-9]]*\)'` +- if test "$convert_version_major" -eq 6 -a "$convert_version_minor" -lt 6 ++ if test "$convert_version_major" -eq 6 -a "$convert_version_minor" -lt 5 + then + CONVERT=false +- WINE_WARNING([imagemagick version 6.6 or newer is needed to rebuild icons.]) ++ WINE_WARNING([imagemagick version 6.5 or newer is needed to rebuild icons.]) + fi + fi + if test "$CONVERT" = false diff --git a/wine-notepad.desktop b/wine-notepad.desktop index fa5a1b1..e603069 100644 --- a/wine-notepad.desktop +++ b/wine-notepad.desktop @@ -2,6 +2,7 @@ Name=Notepad Comment=Text Editor Exec=notepad +Icon=notepad Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-oleview.desktop b/wine-oleview.desktop index 906f084..a458708 100644 --- a/wine-oleview.desktop +++ b/wine-oleview.desktop @@ -2,6 +2,7 @@ Name=Wine OLE View Comment=Windows OLE View Exec=wine oleview +Icon=wine Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-regedit.desktop b/wine-regedit.desktop index 7fb1c96..b032220 100644 --- a/wine-regedit.desktop +++ b/wine-regedit.desktop @@ -2,6 +2,7 @@ Name=Regedit Comment=Wine registry editor Exec=regedit +Icon=regedit Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-uninstaller.desktop b/wine-uninstaller.desktop index 8c16fdb..268c011 100644 --- a/wine-uninstaller.desktop +++ b/wine-uninstaller.desktop @@ -2,6 +2,7 @@ Name=Wine Software Uninstaller Comment=Interface to uninstall software Exec=wine uninstaller +Icon=wine Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-wineboot.desktop b/wine-wineboot.desktop index a29a3f6..6584aea 100644 --- a/wine-wineboot.desktop +++ b/wine-wineboot.desktop @@ -2,6 +2,7 @@ Name=Wine Boot Comment=Simulate restart Exec=wineboot +Icon=wine Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-winecfg.desktop b/wine-winecfg.desktop index 81c3b8d..2d28279 100644 --- a/wine-winecfg.desktop +++ b/wine-winecfg.desktop @@ -2,6 +2,7 @@ Name=Wine Configuration Comment=Interface to set wine parameters Exec=winecfg +Icon=winecfg Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-winefile.desktop b/wine-winefile.desktop index 43856d6..e35fb3d 100644 --- a/wine-winefile.desktop +++ b/wine-winefile.desktop @@ -2,6 +2,7 @@ Name=Wine File Comment=Wine File Browser Exec=winefile +Icon=winefile Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-winemine.desktop b/wine-winemine.desktop index f92401c..15b70d8 100644 --- a/wine-winemine.desktop +++ b/wine-winemine.desktop @@ -2,6 +2,7 @@ Name=WineMine Comment=Wine Minesweeper Exec=winemine +Icon=winemine Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-winhelp.desktop b/wine-winhelp.desktop index b9f5285..2d0ac67 100644 --- a/wine-winhelp.desktop +++ b/wine-winhelp.desktop @@ -2,6 +2,7 @@ Name=Wine Help Comment=Windows Help Browser Exec=wine winhlp32 +Icon=winhelp Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine-wordpad.desktop b/wine-wordpad.desktop index d535956..1838b04 100644 --- a/wine-wordpad.desktop +++ b/wine-wordpad.desktop @@ -2,6 +2,7 @@ Name=Wine Wordpad Comment=Text Editor Exec=wine wordpad +Icon=wordpad Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine.spec b/wine.spec index 617b79f..819e895 100644 --- a/wine.spec +++ b/wine.spec @@ -1,13 +1,13 @@ %define no64bit 0 Name: wine -Version: 1.1.44 -Release: 4%{?dist} +Version: 1.2.0 +Release: 0.2.rc2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/%{name}-%{version}.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc2.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -34,6 +34,13 @@ Source300: wine-mime-msi.desktop Patch1: wine-rpath.patch +# bugfixes +# fix for #593140 +Patch100: wine-fonts.patch + +# +Patch200: wine-imagemagick-6.5.patch + # explain how to use wine with pulseaudio # see http://bugs.winehq.org/show_bug.cgi?id=10495 # and http://art.ified.ca/?page_id=40 @@ -105,8 +112,8 @@ BuildRequires: gsm-devel BuildRequires: openal-soft-devel BuildRequires: libv4l-devel BuildRequires: fontpackages-devel - -# noarch +BuildRequires: icoutils +BuildRequires: ImageMagick-devel Requires: wine-common = %{version}-%{release} Requires: wine-desktop = %{version}-%{release} Requires: wine-fonts = %{version}-%{release} @@ -195,7 +202,7 @@ Requires(post): /sbin/chkconfig, /sbin/service, Requires(post): desktop-file-utils >= 0.8 Requires(preun): /sbin/chkconfig, /sbin/service Requires(postun): desktop-file-utils >= 0.8 -Requires: wine-core = %{version}-%{release} +Requires: wine-core(x86-32) = %{version}-%{release} Requires: wine-common = %{version}-%{release} BuildArch: noarch @@ -214,6 +221,8 @@ Requires: wine-marlett-fonts = %{version}-%{release} #Requires: wine-ms-sans-serif-fonts = %{version}-%{release} #Requires: wine-tahoma-fonts = %{version}-%{release} Requires: wine-symbol-fonts = %{version}-%{release} +# intermediate fix for #593140 +Requires: liberation-sans-fonts liberation-serif-fonts %description fonts %{summary} @@ -400,9 +409,11 @@ This package adds an openal driver for wine. %prep -%setup -q +%setup -q -n %{name}-1.2-rc2 %patch1 +%patch100 +%patch200 %patch400 %patch401 -p1 %patch402 -p1 @@ -424,8 +435,6 @@ export CFLAGS="$RPM_OPT_FLAGS -Wno-error" --enable-maintainer-mode \ --disable-tests -%{__make} depend - %{__make} TARGETFLAGS="" %{?_smp_mflags} %install @@ -438,13 +447,6 @@ rm -rf %{buildroot} LDCONFIG=/bin/true \ UPDATE_DESKTOP_DATABASE=/bin/true -%ifarch %{ix86} -# rename wine to wine32 -mv %{buildroot}%{_bindir}/wine{,32} -# create link to wine32 if ix86 -ln -s %{_bindir}/wine32 %{buildroot}%{_bindir}/wine -%endif - mkdir -p %{buildroot}%{_sysconfdir}/wine # Allow users to launch Windows programs by just clicking on the .exe file... @@ -461,79 +463,111 @@ install -p -m 644 %{SOURCE201} \ # install desktop files +mkdir -p %{buildroot}%{_datadir}/pixmaps +install -p -m 644 programs/winemenubuilder/wine.xpm \ + %{buildroot}%{_datadir}/pixmaps/wine.xpm + +icotool -x --width=32 --height=32 --bit-depth=32 -o programs/notepad/ \ + programs/notepad/notepad.ico +install -p -m 644 programs/notepad/notepad*png \ + %{buildroot}%{_datadir}/pixmaps/notepad.png desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE100} +icotool -x --width=32 --height=32 --bit-depth=32 -o programs/regedit/ \ + programs/regedit/regedit.ico +install -p -m 644 programs/regedit/regedit*png \ + %{buildroot}%{_datadir}/pixmaps/regedit.png desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE101} desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE102} +icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winecfg/ \ + programs/winecfg/winecfg.ico +install -p -m 644 programs/winecfg/winecfg*png \ + %{buildroot}%{_datadir}/pixmaps/winecfg.png desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE103} +icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winefile/ \ + programs/winefile/winefile.ico +install -p -m 644 programs/winefile/winefile*png \ + %{buildroot}%{_datadir}/pixmaps/winefile.png desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE104} +icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winemine/ \ + programs/winemine/winemine.ico +install -p -m 644 programs/winemine/winemine*png \ + %{buildroot}%{_datadir}/pixmaps/winemine.png desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE105} +icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winhlp32/ \ + programs/winhlp32/winhelp.ico +install -p -m 644 programs/winhlp32/winhelp*png \ + %{buildroot}%{_datadir}/pixmaps/winhelp.png desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE106} desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE107} +icotool -x --width=32 --height=32 --bit-depth=32 -o programs/wordpad/ \ + programs/wordpad/wordpad.ico +install -p -m 644 programs/wordpad/wordpad*png \ + %{buildroot}%{_datadir}/pixmaps/wordpad.png desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE108} desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE109} desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ --delete-original \ - $RPM_BUILD_ROOT%{_datadir}/applications/wine.desktop + %{buildroot}%{_datadir}/applications/wine.desktop #mime-types desktop-file-install \ --vendor=fedora \ - --dir=$RPM_BUILD_ROOT%{_datadir}/applications \ + --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE300} cp %{SOURCE3} README-Fedora -mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ +mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d/ %ifarch %{ix86} -install -p -m644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ +install -p -m644 %{SOURCE4} %{buildroot}%{_sysconfdir}/ld.so.conf.d/ %endif %ifarch x86_64 -install -p -m644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/ +install -p -m644 %{SOURCE5} %{buildroot}%{_sysconfdir}/ld.so.conf.d/ %endif # deploy pulseaudio readme @@ -545,9 +579,11 @@ mv %{buildroot}/%{_datadir}/wine/fonts/cou* %{buildroot}/%{_datadir}/fonts/wine- install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-system-fonts mv %{buildroot}/%{_datadir}/wine/fonts/*sys.* %{buildroot}/%{_datadir}/fonts/wine-system-fonts/ +mv %{buildroot}/%{_datadir}/wine/fonts/vgas*.* %{buildroot}/%{_datadir}/fonts/wine-system-fonts/ install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-small-fonts mv %{buildroot}/%{_datadir}/wine/fonts/sma* %{buildroot}/%{_datadir}/fonts/wine-small-fonts/ +mv %{buildroot}/%{_datadir}/wine/fonts/jsma* %{buildroot}/%{_datadir}/fonts/wine-small-fonts/ install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-marlett-fonts mv %{buildroot}/%{_datadir}/wine/fonts/marlett.ttf %{buildroot}/%{_datadir}/fonts/wine-marlett-fonts/ @@ -655,13 +691,13 @@ update-desktop-database &>/dev/null || : %ifarch %{ix86} -%{_bindir}/wine32 +%{_bindir}/wine %{_bindir}/wine-preloader %{_sysconfdir}/ld.so.conf.d/wine-32.conf %endif %ifarch x86_64 -%{_bindir}/wine +%{_bindir}/wine64 %{_sysconfdir}/ld.so.conf.d/wine-64.conf %endif @@ -896,6 +932,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/rsabase.dll.so %{_libdir}/wine/rsaenh.dll.so %{_libdir}/wine/rtutils.dll.so +%{_libdir}/wine/samlib.dll.so %{_libdir}/wine/sc.exe.so %{_libdir}/wine/sccbase.dll.so %{_libdir}/wine/schannel.dll.so @@ -1075,10 +1112,11 @@ update-desktop-database &>/dev/null || : %{_datadir}/wine/generic.ppd %{_datadir}/wine/wine.inf %{_datadir}/wine/l_intl.nls +%{_datadir}/pixmaps/*xpm %files fonts %defattr(-,root,root,-) -%{_datadir}/wine/fonts +%dir %{_datadir}/wine/fonts %files courier-fonts %defattr(-,root,root,-) @@ -1125,6 +1163,7 @@ update-desktop-database &>/dev/null || : %{_datadir}/desktop-directories/Wine.directory %{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_initrddir}/wine +%{_datadir}/pixmaps/*png # esd subpackage %files esd @@ -1184,6 +1223,7 @@ update-desktop-database &>/dev/null || : %{_mandir}/man1/winedbg.1* %{_mandir}/man1/wineg++.1* %lang(de) %{_mandir}/de.UTF-8/man1/winemaker.1* +%lang(fr) %{_mandir}/fr.UTF-8/man1/winemaker.1* %attr(0755, root, root) %dir %{_includedir}/wine %{_includedir}/wine/* %{_libdir}/*.so @@ -1209,6 +1249,23 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Mon May 31 2010 Andreas Bierfert +- 1.2-0.2.rc2 +- version upgrade + +* Mon May 24 2010 Andreas Bierfert +- 1.2-0.1.rc1 +- upgrade to rc1 +- add BR for ImageMagick and icoutils +- spec cleanup +- install available icon files (#594950) +- desktop package requires wine x86-32 because of wine/wine64 rename +- put system/small fonts in right place + +* Wed May 19 2010 Andreas Bierfert +- 1.1.44-5 +- fix font issues + * Thu May 13 2010 Andreas Bierfert - 1.1.44-4 - fix install of 32bit only wine on x86_64 via install wine.i686 From 4f111f10b898623b3dcef2f5df71f7d791533192 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 14 Jun 2010 04:53:57 +0000 Subject: [PATCH 139/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-uninstaller.desktop | 2 +- wine.spec | 16 ++- ...ecfg.patch => winepulse-0.37-winecfg.patch | 112 +++++++++--------- 5 files changed, 71 insertions(+), 63 deletions(-) rename winepulse-0.36-winecfg.patch => winepulse-0.37-winecfg.patch (87%) diff --git a/.cvsignore b/.cvsignore index 6c439f0..f2707d7 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.2-rc2.tar.bz2 +wine-1.2-rc3.tar.bz2 diff --git a/sources b/sources index 09fd0b6..d627474 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -99b4511a5a005a1ef363700d482f80f1 wine-1.2-rc2.tar.bz2 +d70dd15b72809d69330a9ede3ac02e4b wine-1.2-rc3.tar.bz2 diff --git a/wine-uninstaller.desktop b/wine-uninstaller.desktop index 268c011..ef788ee 100644 --- a/wine-uninstaller.desktop +++ b/wine-uninstaller.desktop @@ -2,7 +2,7 @@ Name=Wine Software Uninstaller Comment=Interface to uninstall software Exec=wine uninstaller -Icon=wine +Icon=msiexec Terminal=false Type=Application Encoding=UTF-8 diff --git a/wine.spec b/wine.spec index 819e895..4cc4831 100644 --- a/wine.spec +++ b/wine.spec @@ -1,13 +1,13 @@ %define no64bit 0 Name: wine Version: 1.2.0 -Release: 0.2.rc2%{?dist} +Release: 0.3.rc3%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc2.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc3.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -47,7 +47,7 @@ Patch200: wine-imagemagick-6.5.patch # rebased for .42 see #580073 Patch400: winepulse-0.35-configure.ac.patch Patch401: http://art.ified.ca/downloads/winepulse/winepulse-0.36.patch -Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.36-winecfg.patch +Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.37-winecfg.patch Source402: README-FEDORA-PULSEAUDIO @@ -409,7 +409,7 @@ This package adds an openal driver for wine. %prep -%setup -q -n %{name}-1.2-rc2 +%setup -q -n %{name}-1.2-rc3 %patch1 %patch100 @@ -485,6 +485,10 @@ desktop-file-install \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE101} +icotool -x --width=32 --height=32 --bit-depth=32 -o programs/msiexec/ \ + programs/msiexec/msiexec.ico +install -p -m 644 programs/msiexec/msiexec*png \ + %{buildroot}%{_datadir}/pixmaps/msiexec.png desktop-file-install \ --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ @@ -1249,6 +1253,10 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Sun Jun 13 2010 Andreas Bierfert +- 1.2-0.2.rc3 +- version upgrade + * Mon May 31 2010 Andreas Bierfert - 1.2-0.2.rc2 - version upgrade diff --git a/winepulse-0.36-winecfg.patch b/winepulse-0.37-winecfg.patch similarity index 87% rename from winepulse-0.36-winecfg.patch rename to winepulse-0.37-winecfg.patch index f73525a..837d40e 100644 --- a/winepulse-0.36-winecfg.patch +++ b/winepulse-0.37-winecfg.patch @@ -1,8 +1,8 @@ diff --git a/programs/winecfg/Bg.rc b/programs/winecfg/Bg.rc -index 5555ad2..29ff717 100644 +index d1ad34d..a95503c 100644 --- a/programs/winecfg/Bg.rc +++ b/programs/winecfg/Bg.rc -@@ -276,6 +276,7 @@ BEGIN +@@ -272,6 +272,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -11,10 +11,10 @@ index 5555ad2..29ff717 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Cs.rc b/programs/winecfg/Cs.rc -index f3116d7..2a06d88 100644 +index a3f42d8..4758313 100644 --- a/programs/winecfg/Cs.rc +++ b/programs/winecfg/Cs.rc -@@ -276,6 +276,7 @@ BEGIN +@@ -272,6 +272,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardn" IDS_ACCEL_BASIC "Zkladn" IDS_ACCEL_EMULATION "Emulace" @@ -23,22 +23,22 @@ index f3116d7..2a06d88 100644 IDS_DRIVER_ESOUND "Ovlada EsounD" IDS_DRIVER_OSS "Ovlada OSS" diff --git a/programs/winecfg/Da.rc b/programs/winecfg/Da.rc -index 64e022b..e6caea3 100644 +index 6e594cc..4d1778c 100644 --- a/programs/winecfg/Da.rc +++ b/programs/winecfg/Da.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -279,6 +279,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Grundlggende" - IDS_ACCEL_EMULATION "Emulring" + IDS_ACCEL_BASIC "Grundlæggende" + IDS_ACCEL_EMULATION "Emuléring" + IDS_DRIVER_PULSE "PulseAudio-driver" IDS_DRIVER_ALSA "ALSA-driver" IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/De.rc b/programs/winecfg/De.rc -index fa5bbe5..eda4e2b 100644 +index 885f986..265f006 100644 --- a/programs/winecfg/De.rc +++ b/programs/winecfg/De.rc -@@ -282,6 +282,7 @@ BEGIN +@@ -278,6 +278,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Einfach" IDS_ACCEL_EMULATION "Emulation" @@ -47,10 +47,10 @@ index fa5bbe5..eda4e2b 100644 IDS_DRIVER_ESOUND "EsounD-Treiber" IDS_DRIVER_OSS "OSS-Treiber" diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc -index 490314a..3e669cd 100644 +index 9fc42ea..5bd66f9 100644 --- a/programs/winecfg/En.rc +++ b/programs/winecfg/En.rc -@@ -282,6 +282,7 @@ BEGIN +@@ -278,6 +278,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -59,22 +59,22 @@ index 490314a..3e669cd 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc -index 423c783..8534cfa 100644 +index 0b9a8fa..a7496a8 100644 --- a/programs/winecfg/Es.rc +++ b/programs/winecfg/Es.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -277,6 +277,7 @@ BEGIN IDS_ACCEL_STANDARD "Estndar" IDS_ACCEL_BASIC "Bsica" IDS_ACCEL_EMULATION "Emulacin" -+ IDS_DRIVER_PULSE "Manejador PulseAudio" - IDS_DRIVER_ALSA "Manejador ALSA" - IDS_DRIVER_ESOUND "Manejador EsounD" - IDS_DRIVER_OSS "Manejador OSS" ++ IDS_DRIVER_PULSE "Controlador PulseAudio" + IDS_DRIVER_ALSA "Controlador ALSA" + IDS_DRIVER_ESOUND "Controlador EsounD" + IDS_DRIVER_OSS "Controlador OSS" diff --git a/programs/winecfg/Fi.rc b/programs/winecfg/Fi.rc -index 957b87d..1eb62d1 100644 +index 93c1e24..6beb0cb 100644 --- a/programs/winecfg/Fi.rc +++ b/programs/winecfg/Fi.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -266,6 +266,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -83,10 +83,10 @@ index 957b87d..1eb62d1 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Fr.rc b/programs/winecfg/Fr.rc -index f84cff6..045d93f 100644 +index ebbcfdd..638025f 100644 --- a/programs/winecfg/Fr.rc +++ b/programs/winecfg/Fr.rc -@@ -284,6 +284,7 @@ BEGIN +@@ -280,6 +280,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basique" IDS_ACCEL_EMULATION "Émulation" @@ -95,10 +95,10 @@ index f84cff6..045d93f 100644 IDS_DRIVER_ESOUND "Pilote EsounD" IDS_DRIVER_OSS "Pilote OSS" diff --git a/programs/winecfg/Hu.rc b/programs/winecfg/Hu.rc -index 7c4e4fc..654b524 100644 +index 0fb4982..d7df634 100644 --- a/programs/winecfg/Hu.rc +++ b/programs/winecfg/Hu.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -266,6 +266,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Basic" IDS_ACCEL_EMULATION "Emulation" @@ -107,10 +107,10 @@ index 7c4e4fc..654b524 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/It.rc b/programs/winecfg/It.rc -index 29deea2..e328a19 100644 +index e738d22..cd64710 100644 --- a/programs/winecfg/It.rc +++ b/programs/winecfg/It.rc -@@ -284,6 +284,7 @@ BEGIN +@@ -280,6 +280,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Base" IDS_ACCEL_EMULATION "Emulazione" @@ -119,10 +119,10 @@ index 29deea2..e328a19 100644 IDS_DRIVER_ESOUND "Driver Esound" IDS_DRIVER_OSS "Driver OSS" diff --git a/programs/winecfg/Ja.rc b/programs/winecfg/Ja.rc -index ff03564..94d7c62 100644 +index a082856..e5a889b 100644 --- a/programs/winecfg/Ja.rc +++ b/programs/winecfg/Ja.rc -@@ -285,6 +285,7 @@ BEGIN +@@ -281,6 +281,7 @@ BEGIN IDS_ACCEL_STANDARD "標準" IDS_ACCEL_BASIC "基本" IDS_ACCEL_EMULATION "エミュレーション" @@ -131,10 +131,10 @@ index ff03564..94d7c62 100644 IDS_DRIVER_ESOUND "EsounD ドライバ" IDS_DRIVER_OSS "OSS ドライバ" diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc -index b30ce87..36dabd2 100644 +index 673a70e..b92b146 100644 --- a/programs/winecfg/Ko.rc +++ b/programs/winecfg/Ko.rc -@@ -285,6 +285,7 @@ BEGIN +@@ -281,6 +281,7 @@ BEGIN IDS_ACCEL_STANDARD "ǥ" IDS_ACCEL_BASIC "⺻" IDS_ACCEL_EMULATION "ֹķ̼" @@ -143,10 +143,10 @@ index b30ce87..36dabd2 100644 IDS_DRIVER_ESOUND "EsounD ̹" IDS_DRIVER_OSS "OSS ̹" diff --git a/programs/winecfg/Lt.rc b/programs/winecfg/Lt.rc -index 1a9d0fa..ff7a586 100644 +index 7a979f0..e4f7ff4 100644 --- a/programs/winecfg/Lt.rc +++ b/programs/winecfg/Lt.rc -@@ -283,6 +283,7 @@ BEGIN +@@ -279,6 +279,7 @@ BEGIN IDS_ACCEL_STANDARD "Standartinis" IDS_ACCEL_BASIC "Bazinis" IDS_ACCEL_EMULATION "Emuliacija" @@ -155,10 +155,10 @@ index 1a9d0fa..ff7a586 100644 IDS_DRIVER_ESOUND "EsounD tvarkyklė" IDS_DRIVER_OSS "OSS tvarkyklė" diff --git a/programs/winecfg/Nl.rc b/programs/winecfg/Nl.rc -index 5783033..431872f 100644 +index 62ab796..8bb207e 100644 --- a/programs/winecfg/Nl.rc +++ b/programs/winecfg/Nl.rc -@@ -283,6 +283,7 @@ BEGIN +@@ -279,6 +279,7 @@ BEGIN IDS_ACCEL_STANDARD "Standaard" IDS_ACCEL_BASIC "Eenvoudig" IDS_ACCEL_EMULATION "Emulatie" @@ -167,10 +167,10 @@ index 5783033..431872f 100644 IDS_DRIVER_ESOUND "EsounD Stuurprogramma" IDS_DRIVER_OSS "OSS Stuurprogramma" diff --git a/programs/winecfg/No.rc b/programs/winecfg/No.rc -index 13a62f4..7e66a3a 100644 +index 338a291..b54bd8e 100644 --- a/programs/winecfg/No.rc +++ b/programs/winecfg/No.rc -@@ -283,6 +283,7 @@ BEGIN +@@ -279,6 +279,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grunnleggende" IDS_ACCEL_EMULATION "Emulering" @@ -179,10 +179,10 @@ index 13a62f4..7e66a3a 100644 IDS_DRIVER_ESOUND "EsounD-driver" IDS_DRIVER_OSS "OSS-driver" diff --git a/programs/winecfg/Pl.rc b/programs/winecfg/Pl.rc -index 9422f34..eeca25c 100644 +index 4cc4e85..9440ebc 100644 --- a/programs/winecfg/Pl.rc +++ b/programs/winecfg/Pl.rc -@@ -273,6 +273,7 @@ BEGIN +@@ -280,6 +280,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardowe" IDS_ACCEL_BASIC "Podstawowe" IDS_ACCEL_EMULATION "Emulacja" @@ -191,10 +191,10 @@ index 9422f34..eeca25c 100644 IDS_DRIVER_ESOUND "Sterownik EsounD" IDS_DRIVER_OSS "Sterownik OSS" diff --git a/programs/winecfg/Pt.rc b/programs/winecfg/Pt.rc -index aeab826..c2e0200 100644 +index a4929d6..43ae7a7 100644 --- a/programs/winecfg/Pt.rc +++ b/programs/winecfg/Pt.rc -@@ -470,6 +470,7 @@ BEGIN +@@ -460,6 +460,7 @@ BEGIN IDS_ACCEL_STANDARD "Padrão" IDS_ACCEL_BASIC "Básico" IDS_ACCEL_EMULATION "Emulação" @@ -203,10 +203,10 @@ index aeab826..c2e0200 100644 IDS_DRIVER_ESOUND "Controlador EsounD" IDS_DRIVER_OSS "Controlador OSS" diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc -index c031ea8..430d6d8 100644 +index f6fe5a0..cf96300 100644 --- a/programs/winecfg/Ro.rc +++ b/programs/winecfg/Ro.rc -@@ -282,6 +282,7 @@ BEGIN +@@ -278,6 +278,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "De bază" IDS_ACCEL_EMULATION "Emulare" @@ -215,10 +215,10 @@ index c031ea8..430d6d8 100644 IDS_DRIVER_ESOUND "Driver Esound" IDS_DRIVER_OSS "Driver OSS" diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc -index 58252ba..39fb6d5 100644 +index 1673c43..8a98fcd 100644 --- a/programs/winecfg/Ru.rc +++ b/programs/winecfg/Ru.rc -@@ -287,6 +287,7 @@ BEGIN +@@ -283,6 +283,7 @@ BEGIN IDS_ACCEL_STANDARD "Стандартное" IDS_ACCEL_BASIC "Минимальное" IDS_ACCEL_EMULATION "Эмуляция" @@ -227,10 +227,10 @@ index 58252ba..39fb6d5 100644 IDS_DRIVER_ESOUND "EsounD драйвер" IDS_DRIVER_OSS "OSS драйвер" diff --git a/programs/winecfg/Si.rc b/programs/winecfg/Si.rc -index eec1658..35b5462 100644 +index 50322b6..bf85f4d 100644 --- a/programs/winecfg/Si.rc +++ b/programs/winecfg/Si.rc -@@ -272,6 +272,7 @@ BEGIN +@@ -278,6 +278,7 @@ BEGIN IDS_ACCEL_STANDARD "Standardno" IDS_ACCEL_BASIC "Osnovno" IDS_ACCEL_EMULATION "Emulacija" @@ -239,10 +239,10 @@ index eec1658..35b5462 100644 IDS_DRIVER_ESOUND "EsounD gonilnik" IDS_DRIVER_OSS "OSS gonilnik" diff --git a/programs/winecfg/Sv.rc b/programs/winecfg/Sv.rc -index d724afa..ba34d44 100644 +index 7e7f981..4d11a8c 100644 --- a/programs/winecfg/Sv.rc +++ b/programs/winecfg/Sv.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -266,6 +266,7 @@ BEGIN IDS_ACCEL_STANDARD "Standard" IDS_ACCEL_BASIC "Grundlggande" IDS_ACCEL_EMULATION "Emulering" @@ -251,10 +251,10 @@ index d724afa..ba34d44 100644 IDS_DRIVER_ESOUND "EsounD-drivrutin" IDS_DRIVER_OSS "OSS-drivrutin" diff --git a/programs/winecfg/Tr.rc b/programs/winecfg/Tr.rc -index 89ddb23..196debe 100644 +index c124900..09a0b27 100644 --- a/programs/winecfg/Tr.rc +++ b/programs/winecfg/Tr.rc -@@ -270,6 +270,7 @@ BEGIN +@@ -266,6 +266,7 @@ BEGIN IDS_ACCEL_STANDARD "Standart" IDS_ACCEL_BASIC "Temel" IDS_ACCEL_EMULATION "Taklit" @@ -263,10 +263,10 @@ index 89ddb23..196debe 100644 IDS_DRIVER_ESOUND "EsounD Srcs" IDS_DRIVER_OSS "OSS Srcs" diff --git a/programs/winecfg/Zh.rc b/programs/winecfg/Zh.rc -index 14ac5c3..cd380a3 100644 +index 51b9d94..49df9be 100644 --- a/programs/winecfg/Zh.rc +++ b/programs/winecfg/Zh.rc -@@ -275,6 +275,7 @@ BEGIN +@@ -271,6 +271,7 @@ BEGIN IDS_ACCEL_STANDARD "标准" IDS_ACCEL_BASIC "基本" IDS_ACCEL_EMULATION "软件模拟" @@ -275,7 +275,7 @@ index 14ac5c3..cd380a3 100644 IDS_DRIVER_ESOUND "EsounD 驱动" IDS_DRIVER_OSS "OSS 驱动" diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c -index 9f8a0a2..59837ef 100644 +index 5cf2b34..35da236 100644 --- a/programs/winecfg/audio.c +++ b/programs/winecfg/audio.c @@ -89,6 +89,7 @@ typedef struct @@ -287,7 +287,7 @@ index 9f8a0a2..59837ef 100644 {IDS_DRIVER_OSS, "oss"}, {IDS_DRIVER_COREAUDIO, "coreaudio"}, diff --git a/programs/winecfg/libraries.c b/programs/winecfg/libraries.c -index 19504d6..b5c84eb 100644 +index e402b4e..f0264ca 100644 --- a/programs/winecfg/libraries.c +++ b/programs/winecfg/libraries.c @@ -73,6 +73,7 @@ static const char * const builtin_only[] = @@ -299,10 +299,10 @@ index 19504d6..b5c84eb 100644 "wintab32", "wnaspi32", diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h -index 15c905b..67616fb 100644 +index 43651d8..160e01e 100644 --- a/programs/winecfg/resource.h +++ b/programs/winecfg/resource.h -@@ -188,7 +188,7 @@ +@@ -186,7 +186,7 @@ #define IDS_ACCEL_BASIC 8302 #define IDS_ACCEL_EMULATION 8303 #define IDS_DRIVER_ALSA 8304 From 80355a5d927c214835868c374148f4a762ff61ad Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 19 Jun 2010 08:23:30 +0000 Subject: [PATCH 140/161] - 1.2 rc4 - fix requires for -common --- .cvsignore | 2 +- sources | 2 +- wine.spec | 18 +++++++++++++----- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.cvsignore b/.cvsignore index f2707d7..d3e1bcb 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.2-rc3.tar.bz2 +wine-1.2-rc4.tar.bz2 diff --git a/sources b/sources index d627474..5a633e5 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -d70dd15b72809d69330a9ede3ac02e4b wine-1.2-rc3.tar.bz2 +761eaf2174aa1fff0b75059abf482e2f wine-1.2-rc4.tar.bz2 diff --git a/wine.spec b/wine.spec index 4cc4831..9a14c7c 100644 --- a/wine.spec +++ b/wine.spec @@ -1,13 +1,13 @@ %define no64bit 0 Name: wine Version: 1.2.0 -Release: 0.3.rc3%{?dist} +Release: 0.4.rc4%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc3.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc4.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -114,7 +114,6 @@ BuildRequires: libv4l-devel BuildRequires: fontpackages-devel BuildRequires: icoutils BuildRequires: ImageMagick-devel -Requires: wine-common = %{version}-%{release} Requires: wine-desktop = %{version}-%{release} Requires: wine-fonts = %{version}-%{release} @@ -163,6 +162,8 @@ Obsoletes: wine <= 0.9.15-1%{?dist} Obsoletes: wine-arts < 0.9.34 Obsoletes: wine-tools <= 1.1.27 Provides: wine-tools = %{version}-%{release} +# require -common so we get wine.inf (#528335) +Requires: wine-common = %{version}-%{release} # fix dns resolution (#492700) # require both to be sure 64bit is present as well... %ifarch %{ix86} @@ -409,7 +410,7 @@ This package adds an openal driver for wine. %prep -%setup -q -n %{name}-1.2-rc3 +%setup -q -n %{name}-1.2-rc4 %patch1 %patch100 @@ -1253,8 +1254,15 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Fri Jun 18 2010 Andreas Bierfert +- 1.2-0.4.rc4 +- version upgrade +- fixes winecfg on 64bit (#541986) +- require wine-common from -core to ensure man pages and wine.inf are present + (#528335) + * Sun Jun 13 2010 Andreas Bierfert -- 1.2-0.2.rc3 +- 1.2-0.3.rc3 - version upgrade * Mon May 31 2010 Andreas Bierfert From ab8b6754e524acb44dc73f3e25446f1343df8591 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 30 Jun 2010 20:03:03 +0000 Subject: [PATCH 141/161] - rc5 --- .cvsignore | 2 +- sources | 2 +- wine.spec | 16 +++++---- ...ecfg.patch => winepulse-0.38-winecfg.patch | 34 +++++++++---------- 4 files changed, 29 insertions(+), 25 deletions(-) rename winepulse-0.37-winecfg.patch => winepulse-0.38-winecfg.patch (95%) diff --git a/.cvsignore b/.cvsignore index d3e1bcb..3bcadfd 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.2-rc4.tar.bz2 +wine-1.2-rc5.tar.bz2 diff --git a/sources b/sources index 5a633e5..376d4a1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -761eaf2174aa1fff0b75059abf482e2f wine-1.2-rc4.tar.bz2 +7a7911aec84ca059e623978db17fba19 wine-1.2-rc5.tar.bz2 diff --git a/wine.spec b/wine.spec index 9a14c7c..a404712 100644 --- a/wine.spec +++ b/wine.spec @@ -1,13 +1,13 @@ %define no64bit 0 Name: wine Version: 1.2.0 -Release: 0.4.rc4%{?dist} +Release: 0.5.rc5%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc4.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc5.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -47,7 +47,7 @@ Patch200: wine-imagemagick-6.5.patch # rebased for .42 see #580073 Patch400: winepulse-0.35-configure.ac.patch Patch401: http://art.ified.ca/downloads/winepulse/winepulse-0.36.patch -Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.37-winecfg.patch +Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.38-winecfg.patch Source402: README-FEDORA-PULSEAUDIO @@ -223,7 +223,7 @@ Requires: wine-marlett-fonts = %{version}-%{release} #Requires: wine-tahoma-fonts = %{version}-%{release} Requires: wine-symbol-fonts = %{version}-%{release} # intermediate fix for #593140 -Requires: liberation-sans-fonts liberation-serif-fonts +Requires: liberation-sans-fonts liberation-serif-fonts liberation-narrow-fonts %description fonts %{summary} @@ -410,7 +410,7 @@ This package adds an openal driver for wine. %prep -%setup -q -n %{name}-1.2-rc4 +%setup -q -n %{name}-1.2-rc5 %patch1 %patch100 @@ -418,7 +418,6 @@ This package adds an openal driver for wine. %patch400 %patch401 -p1 %patch402 -p1 - %patch1000 autoreconf @@ -1254,6 +1253,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Sun Jun 27 2010 Andreas Bierfert +- 1.2-0.5.rc5 +- version upgrade +- require liberation-narrow-fonts + * Fri Jun 18 2010 Andreas Bierfert - 1.2-0.4.rc4 - version upgrade diff --git a/winepulse-0.37-winecfg.patch b/winepulse-0.38-winecfg.patch similarity index 95% rename from winepulse-0.37-winecfg.patch rename to winepulse-0.38-winecfg.patch index 837d40e..30d17ed 100644 --- a/winepulse-0.37-winecfg.patch +++ b/winepulse-0.38-winecfg.patch @@ -59,7 +59,7 @@ index 9fc42ea..5bd66f9 100644 IDS_DRIVER_ESOUND "EsounD Driver" IDS_DRIVER_OSS "OSS Driver" diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc -index 0b9a8fa..a7496a8 100644 +index dcf8e37..d46f32e 100644 --- a/programs/winecfg/Es.rc +++ b/programs/winecfg/Es.rc @@ -277,6 +277,7 @@ BEGIN @@ -131,17 +131,17 @@ index a082856..e5a889b 100644 IDS_DRIVER_ESOUND "EsounD ドライバ" IDS_DRIVER_OSS "OSS ドライバ" diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc -index 673a70e..b92b146 100644 +index 6321fe8..279a99d 100644 --- a/programs/winecfg/Ko.rc +++ b/programs/winecfg/Ko.rc -@@ -281,6 +281,7 @@ BEGIN - IDS_ACCEL_STANDARD "ǥ" - IDS_ACCEL_BASIC "⺻" - IDS_ACCEL_EMULATION "ֹķ̼" -+ IDS_DRIVER_PULSE "PulseAudio ̹" - IDS_DRIVER_ALSA "ALSA ̹" - IDS_DRIVER_ESOUND "EsounD ̹" - IDS_DRIVER_OSS "OSS ̹" +@@ -282,6 +282,7 @@ BEGIN + IDS_ACCEL_STANDARD "표준" + IDS_ACCEL_BASIC "기본" + IDS_ACCEL_EMULATION "애뮬레이션" ++ IDS_DRIVER_PULSE "PulseAudio 드라이버" + IDS_DRIVER_ALSA "ALSA 드라이버" + IDS_DRIVER_ESOUND "EsounD 드라이버" + IDS_DRIVER_OSS "OSS 드라이버" diff --git a/programs/winecfg/Lt.rc b/programs/winecfg/Lt.rc index 7a979f0..e4f7ff4 100644 --- a/programs/winecfg/Lt.rc @@ -191,10 +191,10 @@ index 4cc4e85..9440ebc 100644 IDS_DRIVER_ESOUND "Sterownik EsounD" IDS_DRIVER_OSS "Sterownik OSS" diff --git a/programs/winecfg/Pt.rc b/programs/winecfg/Pt.rc -index a4929d6..43ae7a7 100644 +index f96b9ad..4d8a05b 100644 --- a/programs/winecfg/Pt.rc +++ b/programs/winecfg/Pt.rc -@@ -460,6 +460,7 @@ BEGIN +@@ -611,6 +611,7 @@ BEGIN IDS_ACCEL_STANDARD "Padrão" IDS_ACCEL_BASIC "Básico" IDS_ACCEL_EMULATION "Emulação" @@ -215,7 +215,7 @@ index f6fe5a0..cf96300 100644 IDS_DRIVER_ESOUND "Driver Esound" IDS_DRIVER_OSS "Driver OSS" diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc -index 1673c43..8a98fcd 100644 +index b391edc..70d79f7 100644 --- a/programs/winecfg/Ru.rc +++ b/programs/winecfg/Ru.rc @@ -283,6 +283,7 @@ BEGIN @@ -263,7 +263,7 @@ index c124900..09a0b27 100644 IDS_DRIVER_ESOUND "EsounD Srcs" IDS_DRIVER_OSS "OSS Srcs" diff --git a/programs/winecfg/Zh.rc b/programs/winecfg/Zh.rc -index 51b9d94..49df9be 100644 +index 93f6416..84bc6a0 100644 --- a/programs/winecfg/Zh.rc +++ b/programs/winecfg/Zh.rc @@ -271,6 +271,7 @@ BEGIN @@ -275,13 +275,13 @@ index 51b9d94..49df9be 100644 IDS_DRIVER_ESOUND "EsounD 驱动" IDS_DRIVER_OSS "OSS 驱动" diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c -index 5cf2b34..35da236 100644 +index 134296d..1d70c03 100644 --- a/programs/winecfg/audio.c +++ b/programs/winecfg/audio.c -@@ -89,6 +89,7 @@ typedef struct +@@ -90,6 +90,7 @@ typedef struct } AUDIO_DRIVER; - static const AUDIO_DRIVER sAudioDrivers[] = { + static AUDIO_DRIVER sAudioDrivers[] = { + {IDS_DRIVER_PULSE, "pulse"}, {IDS_DRIVER_ALSA, "alsa"}, {IDS_DRIVER_OSS, "oss"}, From 322d88a3fef206d39a2736725493bbb22c87d861 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 4 Jul 2010 14:42:22 +0000 Subject: [PATCH 142/161] - rc6 - winepulse .38 - new wine icon --- .cvsignore | 2 +- sources | 2 +- wine.spec | 22 ++++++++++++------ winepulse-0.36.patch => winepulse-0.38.patch | 24 ++++++++++++-------- 4 files changed, 32 insertions(+), 18 deletions(-) rename winepulse-0.36.patch => winepulse-0.38.patch (99%) diff --git a/.cvsignore b/.cvsignore index 3bcadfd..5bf1046 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.2-rc5.tar.bz2 +wine-1.2-rc6.tar.bz2 diff --git a/sources b/sources index 376d4a1..f1519b0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -7a7911aec84ca059e623978db17fba19 wine-1.2-rc5.tar.bz2 +689c6ae6baaa33ca6532af2cec05d26b wine-1.2-rc6.tar.bz2 diff --git a/wine.spec b/wine.spec index a404712..523a0a4 100644 --- a/wine.spec +++ b/wine.spec @@ -1,13 +1,13 @@ %define no64bit 0 Name: wine Version: 1.2.0 -Release: 0.5.rc5%{?dist} +Release: 0.6.rc6%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc5.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc6.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -46,7 +46,7 @@ Patch200: wine-imagemagick-6.5.patch # and http://art.ified.ca/?page_id=40 # rebased for .42 see #580073 Patch400: winepulse-0.35-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse/winepulse-0.36.patch +Patch401: http://art.ified.ca/downloads/winepulse/winepulse-0.38.patch Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.38-winecfg.patch Source402: README-FEDORA-PULSEAUDIO @@ -410,7 +410,7 @@ This package adds an openal driver for wine. %prep -%setup -q -n %{name}-1.2-rc5 +%setup -q -n %{name}-1.2-rc6 %patch1 %patch100 @@ -464,8 +464,10 @@ install -p -m 644 %{SOURCE201} \ # install desktop files mkdir -p %{buildroot}%{_datadir}/pixmaps -install -p -m 644 programs/winemenubuilder/wine.xpm \ - %{buildroot}%{_datadir}/pixmaps/wine.xpm +icotool -x --width=32 --height=32 --bit-depth=32 -o dlls/user32/resources/ \ + dlls/user32/resources/oic_winlogo.ico +install -p -m 644 dlls/user32/resources/*png \ + %{buildroot}%{_datadir}/pixmaps/wine.png icotool -x --width=32 --height=32 --bit-depth=32 -o programs/notepad/ \ programs/notepad/notepad.ico @@ -1116,7 +1118,7 @@ update-desktop-database &>/dev/null || : %{_datadir}/wine/generic.ppd %{_datadir}/wine/wine.inf %{_datadir}/wine/l_intl.nls -%{_datadir}/pixmaps/*xpm +%{_datadir}/pixmaps/*png %files fonts %defattr(-,root,root,-) @@ -1253,6 +1255,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Sun Jul 04 2010 Andreas Bierfert +- 1.2-0.6.rc6 +- version upgrade +- use new winelogo from user32 +- winepulse upgrade + * Sun Jun 27 2010 Andreas Bierfert - 1.2-0.5.rc5 - version upgrade diff --git a/winepulse-0.36.patch b/winepulse-0.38.patch similarity index 99% rename from winepulse-0.36.patch rename to winepulse-0.38.patch index 7ea2ef1..6c4c271 100644 --- a/winepulse-0.36.patch +++ b/winepulse-0.38.patch @@ -831,10 +831,10 @@ index 0000000..9dd1f80 +} diff --git a/dlls/winepulse.drv/wavein.c b/dlls/winepulse.drv/wavein.c new file mode 100644 -index 0000000..8aea538 +index 0000000..af721b9 --- /dev/null +++ b/dlls/winepulse.drv/wavein.c -@@ -0,0 +1,588 @@ +@@ -0,0 +1,589 @@ +/* + * Wine Driver for PulseAudio - WaveIn Functionality + * http://pulseaudio.org/ @@ -1157,7 +1157,8 @@ index 0000000..8aea538 + TRACE("Asking to open %s for recording.\n", wdi->device_name); + pa_stream_connect_record(wwi->stream, wdi->device_name, &wwi->buffer_attr, + PA_STREAM_START_CORKED | -+ PA_STREAM_AUTO_TIMING_UPDATE); ++ PA_STREAM_AUTO_TIMING_UPDATE | ++ PA_STREAM_ADJUST_LATENCY); + + for (;;) { + pa_context_state_t cstate = pa_context_get_state(PULSE_context); @@ -1425,10 +1426,10 @@ index 0000000..8aea538 +#endif /* HAVE_PULSEAUDIO */ diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c new file mode 100644 -index 0000000..989dff5 +index 0000000..99b7c18 --- /dev/null +++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1024 @@ +@@ -0,0 +1,1029 @@ +/* + * Wine Driver for PulseAudio - WaveOut Functionality + * http://pulseaudio.org/ @@ -1472,6 +1473,9 @@ index 0000000..989dff5 + +#if HAVE_PULSEAUDIO + ++/* Use this to make the infinite wait not so infinite */ ++#define PULSE_INFINITE 10000 ++ +/* state diagram for waveOut writing: + * + * +---------+-------------+---------------+---------------------------------+ @@ -1628,6 +1632,8 @@ index 0000000..989dff5 + * 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)); ++ TRACE("Triggering stream and hoping for the best\n"); ++ PULSE_WaitForOperation(pa_stream_trigger(wwo->stream, PULSE_StreamSuccessCallback, wwo)); + } + pa_threaded_mainloop_unlock(PULSE_ml); + } @@ -1651,8 +1657,8 @@ index 0000000..989dff5 + * - we hit the beginning of a running loop + * - we hit a wavehdr which hasn't finished playing + */ -+ if (lpWaveHdr == wwo->lpLoopPtr) { TRACE("loop %p\n", lpWaveHdr); return INFINITE; } -+ if (lpWaveHdr == wwo->lpPlayPtr) { TRACE("play %p\n", lpWaveHdr); return INFINITE; } ++ if (lpWaveHdr == wwo->lpLoopPtr) { TRACE("loop %p\n", lpWaveHdr); return PULSE_INFINITE; } ++ if (lpWaveHdr == wwo->lpPlayPtr) { TRACE("play %p\n", lpWaveHdr); return PULSE_INFINITE; } + + /* See if this data has been played, and if not, return when it will have been */ + wait = pa_bytes_to_usec(lpWaveHdr->reserved + lpWaveHdr->dwBufferLength, &wwo->sample_spec); @@ -1673,7 +1679,7 @@ index 0000000..989dff5 + } + /* No more wavehdrs */ + TRACE("Empty queue\n"); -+ return INFINITE; ++ return PULSE_INFINITE; +} + +/************************************************************************** @@ -2041,7 +2047,7 @@ index 0000000..989dff5 + /* Try and connect */ + TRACE("Connecting stream for playback on %s.\n", wdo->device_name); + pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_connect_playback(wwo->stream, wdo->device_name, NULL, PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_ADJUST_LATENCY, NULL, NULL); ++ pa_stream_connect_playback(wwo->stream, wdo->device_name, &wwo->buffer_attr, PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_ADJUST_LATENCY, NULL, NULL); + + /* Wait for connection */ + for (;;) { From fa4e009a4bb4be00c85322b94166edf7e227d30b Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Mon, 12 Jul 2010 15:41:43 +0000 Subject: [PATCH 143/161] - version upgrade --- .cvsignore | 2 +- sources | 2 +- wine-const.patch | 20 ------------- wine.spec | 29 ++++++++++++++----- ...patch => winepulse-0.38-configure.ac.patch | 14 +++++---- 5 files changed, 32 insertions(+), 35 deletions(-) delete mode 100644 wine-const.patch rename winepulse-0.35-configure.ac.patch => winepulse-0.38-configure.ac.patch (88%) diff --git a/.cvsignore b/.cvsignore index 5bf1046..9fc1ac0 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.2-rc6.tar.bz2 +wine-1.2-rc7.tar.bz2 diff --git a/sources b/sources index f1519b0..c6f48ee 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -689c6ae6baaa33ca6532af2cec05d26b wine-1.2-rc6.tar.bz2 +05cc63418e603f3d689bcaa7c7768d01 wine-1.2-rc7.tar.bz2 diff --git a/wine-const.patch b/wine-const.patch deleted file mode 100644 index fe8ab34..0000000 --- a/wine-const.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- dlls/winhttp/net.c.old 2010-04-04 18:11:01.266148279 +0300 -+++ dlls/winhttp/net.c 2010-04-04 18:12:52.235163141 +0300 -@@ -91,7 +91,7 @@ - static void *libssl_handle; - static void *libcrypto_handle; - --static SSL_METHOD *method; -+static const SSL_METHOD *method; - static SSL_CTX *ctx; - static int hostname_idx; - static int error_idx; -@@ -113,7 +113,7 @@ - static void *OpenSSL_ssl_handle; - static void *OpenSSL_crypto_handle; - --static SSL_METHOD *meth; -+const static SSL_METHOD *meth; - static SSL_CTX *ctx; - static int hostname_idx; - static int error_idx; diff --git a/wine.spec b/wine.spec index 523a0a4..5f30c0d 100644 --- a/wine.spec +++ b/wine.spec @@ -1,13 +1,13 @@ %define no64bit 0 Name: wine Version: 1.2.0 -Release: 0.6.rc6%{?dist} +Release: 0.7.rc7%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc6.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc7.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -44,8 +44,7 @@ Patch200: wine-imagemagick-6.5.patch # explain how to use wine with pulseaudio # see http://bugs.winehq.org/show_bug.cgi?id=10495 # and http://art.ified.ca/?page_id=40 -# rebased for .42 see #580073 -Patch400: winepulse-0.35-configure.ac.patch +Patch400: http://art.ified.ca/downloads/winepulse/winepulse-0.38-configure.ac.patch Patch401: http://art.ified.ca/downloads/winepulse/winepulse-0.38.patch Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.38-winecfg.patch Source402: README-FEDORA-PULSEAUDIO @@ -223,7 +222,10 @@ Requires: wine-marlett-fonts = %{version}-%{release} #Requires: wine-tahoma-fonts = %{version}-%{release} Requires: wine-symbol-fonts = %{version}-%{release} # intermediate fix for #593140 -Requires: liberation-sans-fonts liberation-serif-fonts liberation-narrow-fonts +Requires: liberation-sans-fonts liberation-serif-fonts liberation-mono-fonts +%if 0%{?fedora} > 12 || 0%{?rhel} > 6 +Requires: liberation-narrow-fonts +%endif %description fonts %{summary} @@ -410,12 +412,12 @@ This package adds an openal driver for wine. %prep -%setup -q -n %{name}-1.2-rc6 +%setup -q -n %{name}-1.2-rc7 %patch1 %patch100 %patch200 -%patch400 +%patch400 -p1 %patch401 -p1 %patch402 -p1 %patch1000 @@ -1126,30 +1128,37 @@ update-desktop-database &>/dev/null || : %files courier-fonts %defattr(-,root,root,-) +%doc COPYING.LIB %{_datadir}/fonts/wine-courier-fonts %files system-fonts %defattr(-,root,root,-) +%doc COPYING.LIB %{_datadir}/fonts/wine-system-fonts %files small-fonts %defattr(-,root,root,-) +%doc COPYING.LIB %{_datadir}/fonts/wine-small-fonts %files marlett-fonts +%doc COPYING.LIB %defattr(-,root,root,-) %{_datadir}/fonts/wine-marlett-fonts #%files ms-sans-serif-fonts #%defattr(-,root,root,-) +#%doc COPYING.LIB #%{_datadir}/fonts/wine-ms-sans-serif-fonts #%files tahoma-fonts #%defattr(-,root,root,-) +#%doc COPYING.LIB #%{_datadir}/fonts/wine-tahoma-fonts %files symbol-fonts %defattr(-,root,root,-) +%doc COPYING.LIB %{_datadir}/fonts/wine-symbol-fonts %files desktop @@ -1255,6 +1264,12 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/openal32.dll.so %changelog +* Sun Jul 11 2010 Andreas Bierfert +- 1.2-0.7.rc7 +- version upgrade +- make sure font packages include the license file in case they are installed + standalone + * Sun Jul 04 2010 Andreas Bierfert - 1.2-0.6.rc6 - version upgrade diff --git a/winepulse-0.35-configure.ac.patch b/winepulse-0.38-configure.ac.patch similarity index 88% rename from winepulse-0.35-configure.ac.patch rename to winepulse-0.38-configure.ac.patch index 9d5132d..d44a4e6 100644 --- a/winepulse-0.35-configure.ac.patch +++ b/winepulse-0.38-configure.ac.patch @@ -1,6 +1,8 @@ ---- configure.ac.orig 2010-05-10 16:39:57.000000000 +0200 -+++ configure.ac 2010-05-10 16:42:54.000000000 +0200 -@@ -68,6 +68,7 @@ +diff --git a/configure.ac b/configure.ac +index 61f376e..6fe1261 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -76,6 +76,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]), [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi]) @@ -8,7 +10,7 @@ AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) AC_ARG_WITH(tiff, AS_HELP_STRING([--without-tiff],[do not use TIFF]), [if test "x$withval" = "xno"; then ac_cv_header_tiffio_h=no; fi]) -@@ -1361,6 +1362,31 @@ +@@ -1386,6 +1387,31 @@ then CFLAGS="$save_CFLAGS" fi @@ -40,7 +42,7 @@ dnl **** Check for ALSA 1.x **** AC_SUBST(ALSALIBS,"") if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" -@@ -1528,7 +1554,7 @@ +@@ -1553,7 +1579,7 @@ dnl **** Check for libodbc **** WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) dnl **** Check for any sound system **** @@ -49,7 +51,7 @@ "$ac_cv_header_sys_soundcard_h" != "yes" -a \ "$ac_cv_header_machine_soundcard_h" != "yes" -a \ "$ac_cv_header_soundcard_h" != "yes" -a \ -@@ -2621,6 +2647,7 @@ +@@ -2648,6 +2674,7 @@ WINE_CONFIG_DLL(winenas.drv) WINE_CONFIG_DLL(wineoss.drv) WINE_CONFIG_DLL(wineps.drv) WINE_CONFIG_DLL(wineps16.drv16,enable_win16) From d9a668b240f9b27fe56b134ee0b72632c015abad Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 16 Jul 2010 19:58:03 +0000 Subject: [PATCH 144/161] - 1.2 final - improve fonts patch --- .cvsignore | 2 +- sources | 2 +- wine-fonts.patch | 81 +++++++++++++++++++++++-------------- wine.spec | 103 ++++++++++++++++++++++++++++++----------------- 4 files changed, 120 insertions(+), 68 deletions(-) diff --git a/.cvsignore b/.cvsignore index 9fc1ac0..7ffd599 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1 +1 @@ -wine-1.2-rc7.tar.bz2 +wine-1.2.tar.bz2 diff --git a/sources b/sources index c6f48ee..acdae65 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -05cc63418e603f3d689bcaa7c7768d01 wine-1.2-rc7.tar.bz2 +eb4e5423b277fc1e77807b04f366f7b7 wine-1.2.tar.bz2 diff --git a/wine-fonts.patch b/wine-fonts.patch index bdc7504..72385ae 100644 --- a/wine-fonts.patch +++ b/wine-fonts.patch @@ -1,5 +1,23 @@ +--- tools/wine.inf.in.orig 2010-05-26 07:41:44.000000000 +0200 ++++ tools/wine.inf.in 2010-05-26 07:46:15.000000000 +0200 +@@ -576,13 +576,14 @@ + HKLM,%FontSubStr%,"Courier New TUR,162",,"Courier New,162" + HKLM,%FontSubStr%,"Helv",,"MS Sans Serif" + HKLM,%FontSubStr%,"Helvetica",,"Arial" +-HKLM,%FontSubStr%,"MS Shell Dlg 2",,"Tahoma" ++HKLM,%FontSubStr%,"MS Shell Dlg 2",,"Liberation Sans" + HKLM,%FontSubStr%,"Times",,"Times New Roman" + HKLM,%FontSubStr%,"Times New Roman Baltic,186",,"Times New Roman,186" + HKLM,%FontSubStr%,"Times New Roman CE,238",,"Times New Roman,238" + HKLM,%FontSubStr%,"Times New Roman CYR,204",,"Times New Roman,204" + HKLM,%FontSubStr%,"Times New Roman Greek,161",,"Times New Roman,161" + HKLM,%FontSubStr%,"Times New Roman TUR,162",,"Times New Roman,162" ++HKLM,%FontSubStr%,"MS Sans Serif",,"Liberation Serif" + HKLM,System\CurrentControlSet\Hardware Profiles\Current\Software\Fonts,"LogPixels",0x10003,0x00000060 + + [MCI] --- dlls/gdi32/freetype.c.orig 2010-05-19 22:02:43.000000000 +0200 -+++ dlls/gdi32/freetype.c 2010-05-19 23:57:27.000000000 +0200 ++++ dlls/gdi32/freetype.c 2010-07-16 11:43:15.000000000 +0200 @@ -400,7 +400,7 @@ /* Interesting and well-known (frequently-assumed!) font names */ static const WCHAR Lucida_Sans_Unicode[] = {'L','u','c','i','d','a',' ','S','a','n','s',' ','U','n','i','c','o','d','e',0}; @@ -9,7 +27,17 @@ static const WCHAR MS_UI_Gothic[] = {'M','S',' ','U','I',' ','G','o','t','h','i','c',0}; static const WCHAR SimSun[] = {'S','i','m','S','u','n',0}; static const WCHAR Gulim[] = {'G','u','l','i','m',0}; -@@ -1641,7 +1641,7 @@ +@@ -494,6 +494,9 @@ + 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','F','o','n','t','L','i','n','k','\\', + 'S','y','s','t','e','m','L','i','n','k',0}; + ++static const char liberationsans[] = {'Z',':','\\','u','s','r','\\','s','h','a','r','e','\\','f','o','n','t','s','\\','l','i','b','e','r','a','t','i','o','n','\\','L','i','b','e','r','a','t','i','o','n','S','a','n','s','-','R','e','g','u','l','a','r','.','t','t','f',0}; ++static const char liberationserif[] = {'Z',':','\\','u','s','r','\\','s','h','a','r','e','\\','f','o','n','t','s','\\','l','i','b','e','r','a','t','i','o','n','\\','L','i','b','e','r','a','t','i','o','n','S','e','r','i','f','-','R','e','g','u','l','a','r','.','t','t','f',0}; ++ + /**************************************** + * Notes on .fon files + * +@@ -1641,7 +1644,7 @@ WCHAR *entry, *next; SYSTEM_LINKS *font_link, *system_font_link; CHILD_FONT *child_font; @@ -18,7 +46,7 @@ static const WCHAR System[] = {'S','y','s','t','e','m',0}; FONTSIGNATURE fs; Family *family; -@@ -1723,25 +1723,25 @@ +@@ -1723,25 +1726,25 @@ RegCloseKey(hkey); } @@ -49,7 +77,7 @@ { CHILD_FONT *font_link_entry; LIST_FOR_EACH_ENTRY(font_link_entry, &font_link->links, CHILD_FONT, entry) -@@ -2193,21 +2193,21 @@ +@@ -2193,21 +2196,21 @@ /* Latin 1 (United States) */ { 1252, 437, "vgaoem.fon", "vgafix.fon", "vgasys.fon", "coure.fon", "serife.fon", "smalle.fon", "sserife.fon", @@ -74,7 +102,7 @@ "Fixedsys,238", "System,238", "Courier New,238", "MS Serif,238", "Small Fonts,238", "MS Sans Serif,238", "MS Sans Serif,238", "MS Serif,238", -@@ -2218,7 +2218,7 @@ +@@ -2218,7 +2221,7 @@ /* Cyrillic */ { 1251, 866, "vga866.fon", "vgafixr.fon", "vgasysr.fon", "courer.fon", "serifer.fon", "smaller.fon", "sserifer.fon", @@ -83,7 +111,7 @@ "Fixedsys,204", "System,204", "Courier New,204", "MS Serif,204", "Small Fonts,204", "MS Sans Serif,204", "MS Sans Serif,204", "MS Serif,204", -@@ -2229,7 +2229,7 @@ +@@ -2229,7 +2232,7 @@ /* Greek */ { 1253, 737, "vga869.fon", "vgafixg.fon", "vgasysg.fon", "coureg.fon", "serifeg.fon", "smalleg.fon", "sserifeg.fon", @@ -92,7 +120,7 @@ "Fixedsys,161", "System,161", "Courier New,161", "MS Serif,161", "Small Fonts,161", "MS Sans Serif,161", "MS Sans Serif,161", "MS Serif,161", -@@ -2240,7 +2240,7 @@ +@@ -2240,7 +2243,7 @@ /* Turkish */ { 1254, 857, "vga857.fon", "vgafixt.fon", "vgasyst.fon", "couret.fon", "serifet.fon", "smallet.fon", "sserifet.fon", @@ -101,7 +129,7 @@ "Fixedsys,162", "System,162", "Courier New,162", "MS Serif,162", "Small Fonts,162", "MS Sans Serif,162", "MS Sans Serif,162", "MS Serif,162", -@@ -2251,7 +2251,7 @@ +@@ -2251,7 +2254,7 @@ /* Hebrew */ { 1255, 862, "vgaoem.fon", "vgaf1255.fon", "vgas1255.fon", "coue1255.fon", "sere1255.fon", "smae1255.fon", "ssee1255.fon", @@ -110,7 +138,7 @@ "Fixedsys,177", "System,177", "Courier New,177", "MS Serif,177", "Small Fonts,177", "MS Sans Serif,177", "MS Sans Serif,177", "MS Serif,177", -@@ -2260,7 +2260,7 @@ +@@ -2260,7 +2263,7 @@ /* Arabic */ { 1256, 720, "vgaoem.fon", "vgaf1256.fon", "vgas1256.fon", "coue1256.fon", "sere1256.fon", "smae1256.fon", "ssee1256.fon", @@ -119,7 +147,7 @@ "Fixedsys,178", "System,178", "Courier New,178", "MS Serif,178", "Small Fonts,178", "MS Sans Serif,178", "MS Sans Serif,178", "MS Serif,178", -@@ -2269,7 +2269,7 @@ +@@ -2269,7 +2272,7 @@ /* Baltic */ { 1257, 775, "vga775.fon", "vgaf1257.fon", "vgas1257.fon", "coue1257.fon", "sere1257.fon", "smae1257.fon", "ssee1257.fon", @@ -128,7 +156,7 @@ "Fixedsys,186", "System,186", "Courier New,186", "MS Serif,186", "Small Fonts,186", "MS Sans Serif,186", "MS Sans Serif,186", "MS Serif,186", -@@ -2280,14 +2280,14 @@ +@@ -2280,14 +2283,14 @@ /* Vietnamese */ { 1258, 1258, "vga850.fon", "vgafix.fon", "vgasys.fon", "coure.fon", "serife.fon", "smalle.fon", "sserife.fon", @@ -145,7 +173,7 @@ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, { 0 }, { 0 }, { 0 } }, -@@ -2325,7 +2325,7 @@ +@@ -2325,7 +2328,7 @@ { Lucida_Sans_Unicode, Microsoft_Sans_Serif, @@ -154,7 +182,7 @@ }; static const struct font_links_defaults_list -@@ -2337,7 +2337,7 @@ +@@ -2337,7 +2340,7 @@ } font_links_defaults_list[] = { /* Non East-Asian */ @@ -163,21 +191,14 @@ { MS_UI_Gothic, SimSun, Gulim, PMingLiU, NULL } }, /* Below lists are courtesy of ---- tools/wine.inf.in.orig 2010-05-26 07:41:44.000000000 +0200 -+++ tools/wine.inf.in 2010-05-26 07:46:15.000000000 +0200 -@@ -576,13 +576,14 @@ - HKLM,%FontSubStr%,"Courier New TUR,162",,"Courier New,162" - HKLM,%FontSubStr%,"Helv",,"MS Sans Serif" - HKLM,%FontSubStr%,"Helvetica",,"Arial" --HKLM,%FontSubStr%,"MS Shell Dlg 2",,"Tahoma" -+HKLM,%FontSubStr%,"MS Shell Dlg 2",,"Liberation Sans" - HKLM,%FontSubStr%,"Times",,"Times New Roman" - HKLM,%FontSubStr%,"Times New Roman Baltic,186",,"Times New Roman,186" - HKLM,%FontSubStr%,"Times New Roman CE,238",,"Times New Roman,238" - HKLM,%FontSubStr%,"Times New Roman CYR,204",,"Times New Roman,204" - HKLM,%FontSubStr%,"Times New Roman Greek,161",,"Times New Roman,161" - HKLM,%FontSubStr%,"Times New Roman TUR,162",,"Times New Roman,162" -+HKLM,%FontSubStr%,"MS Sans Serif",,"Liberation Serif" - HKLM,System\CurrentControlSet\Hardware Profiles\Current\Software\Fonts,"LogPixels",0x10003,0x00000060 +@@ -2399,8 +2402,8 @@ + static void add_font_list(HKEY hkey, const struct nls_update_font_list *fl) + { + RegSetValueExA(hkey, "Courier", 0, REG_SZ, (const BYTE *)fl->courier, strlen(fl->courier)+1); +- RegSetValueExA(hkey, "MS Serif", 0, REG_SZ, (const BYTE *)fl->serif, strlen(fl->serif)+1); +- RegSetValueExA(hkey, "MS Sans Serif", 0, REG_SZ, (const BYTE *)fl->sserif, strlen(fl->sserif)+1); ++ RegSetValueExA(hkey, "MS Serif", 0, REG_SZ, (const BYTE *)liberationserif, strlen(liberationserif)+1); ++ RegSetValueExA(hkey, "MS Sans Serif", 0, REG_SZ, (const BYTE *)liberationsans, strlen(liberationsans)+1); + RegSetValueExA(hkey, "Small Fonts", 0, REG_SZ, (const BYTE *)fl->small, strlen(fl->small)+1); + } - [MCI] diff --git a/wine.spec b/wine.spec index 5f30c0d..848417b 100644 --- a/wine.spec +++ b/wine.spec @@ -1,13 +1,13 @@ %define no64bit 0 Name: wine Version: 1.2.0 -Release: 0.7.rc7%{?dist} +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2-rc7.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -108,11 +108,16 @@ BuildRequires: dbus-devel hal-devel BuildRequires: gnutls-devel BuildRequires: pulseaudio-libs-devel BuildRequires: gsm-devel -BuildRequires: openal-soft-devel BuildRequires: libv4l-devel BuildRequires: fontpackages-devel -BuildRequires: icoutils BuildRequires: ImageMagick-devel + +%if 0%{?fedora} > 9 +BuildRequires: icoutils +BuildRequires: openal-soft-devel +%endif + + Requires: wine-desktop = %{version}-%{release} Requires: wine-fonts = %{version}-%{release} @@ -402,6 +407,7 @@ Requires: wine-core = %{version}-%{release} %description oss This package adds an oss driver for wine. +%if 0%{?fedora} > 9 %package openal Summary: Openal support for wine Group: System Environment/Libraries @@ -409,10 +415,10 @@ Requires: wine-core = %{version}-%{release} %description openal This package adds an openal driver for wine. - +%endif %prep -%setup -q -n %{name}-1.2-rc7 +%setup -q -n %{name}-1.2 %patch1 %patch100 @@ -464,7 +470,8 @@ install -p -m 644 %{SOURCE201} \ %{buildroot}%{_datadir}/desktop-directories/Wine.directory -# install desktop files +# extract and install icons +%if 0%{?fedora} > 9 mkdir -p %{buildroot}%{_datadir}/pixmaps icotool -x --width=32 --height=32 --bit-depth=32 -o dlls/user32/resources/ \ dlls/user32/resources/oic_winlogo.ico @@ -475,60 +482,74 @@ icotool -x --width=32 --height=32 --bit-depth=32 -o programs/notepad/ \ programs/notepad/notepad.ico install -p -m 644 programs/notepad/notepad*png \ %{buildroot}%{_datadir}/pixmaps/notepad.png -desktop-file-install \ - --vendor=fedora \ - --dir=%{buildroot}%{_datadir}/applications \ - %{SOURCE100} icotool -x --width=32 --height=32 --bit-depth=32 -o programs/regedit/ \ programs/regedit/regedit.ico install -p -m 644 programs/regedit/regedit*png \ %{buildroot}%{_datadir}/pixmaps/regedit.png -desktop-file-install \ - --vendor=fedora \ - --dir=%{buildroot}%{_datadir}/applications \ - %{SOURCE101} icotool -x --width=32 --height=32 --bit-depth=32 -o programs/msiexec/ \ programs/msiexec/msiexec.ico install -p -m 644 programs/msiexec/msiexec*png \ %{buildroot}%{_datadir}/pixmaps/msiexec.png -desktop-file-install \ - --vendor=fedora \ - --dir=%{buildroot}%{_datadir}/applications \ - %{SOURCE102} icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winecfg/ \ programs/winecfg/winecfg.ico install -p -m 644 programs/winecfg/winecfg*png \ %{buildroot}%{_datadir}/pixmaps/winecfg.png -desktop-file-install \ - --vendor=fedora \ - --dir=%{buildroot}%{_datadir}/applications \ - %{SOURCE103} icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winefile/ \ programs/winefile/winefile.ico install -p -m 644 programs/winefile/winefile*png \ %{buildroot}%{_datadir}/pixmaps/winefile.png -desktop-file-install \ - --vendor=fedora \ - --dir=%{buildroot}%{_datadir}/applications \ - %{SOURCE104} icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winemine/ \ programs/winemine/winemine.ico install -p -m 644 programs/winemine/winemine*png \ %{buildroot}%{_datadir}/pixmaps/winemine.png -desktop-file-install \ - --vendor=fedora \ - --dir=%{buildroot}%{_datadir}/applications \ - %{SOURCE105} icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winhlp32/ \ programs/winhlp32/winhelp.ico install -p -m 644 programs/winhlp32/winhelp*png \ %{buildroot}%{_datadir}/pixmaps/winhelp.png + +icotool -x --width=32 --height=32 --bit-depth=32 -o programs/wordpad/ \ + programs/wordpad/wordpad.ico +install -p -m 644 programs/wordpad/wordpad*png \ + %{buildroot}%{_datadir}/pixmaps/wordpad.png +%endif + +# install desktop files +desktop-file-install \ + --vendor=fedora \ + --dir=%{buildroot}%{_datadir}/applications \ + %{SOURCE100} + +desktop-file-install \ + --vendor=fedora \ + --dir=%{buildroot}%{_datadir}/applications \ + %{SOURCE101} + +desktop-file-install \ + --vendor=fedora \ + --dir=%{buildroot}%{_datadir}/applications \ + %{SOURCE102} + +desktop-file-install \ + --vendor=fedora \ + --dir=%{buildroot}%{_datadir}/applications \ + %{SOURCE103} + +desktop-file-install \ + --vendor=fedora \ + --dir=%{buildroot}%{_datadir}/applications \ + %{SOURCE104} + +desktop-file-install \ + --vendor=fedora \ + --dir=%{buildroot}%{_datadir}/applications \ + %{SOURCE105} + desktop-file-install \ --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ @@ -539,10 +560,6 @@ desktop-file-install \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE107} -icotool -x --width=32 --height=32 --bit-depth=32 -o programs/wordpad/ \ - programs/wordpad/wordpad.ico -install -p -m 644 programs/wordpad/wordpad*png \ - %{buildroot}%{_datadir}/pixmaps/wordpad.png desktop-file-install \ --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ @@ -661,8 +678,10 @@ update-desktop-database &>/dev/null || : %post oss -p /sbin/ldconfig %postun oss -p /sbin/ldconfig +%if 0%{?fedora} > 9 %post openal -p /sbin/ldconfig %postun openal -p /sbin/ldconfig +%endif %files %defattr(-,root,root,-) @@ -1120,7 +1139,6 @@ update-desktop-database &>/dev/null || : %{_datadir}/wine/generic.ppd %{_datadir}/wine/wine.inf %{_datadir}/wine/l_intl.nls -%{_datadir}/pixmaps/*png %files fonts %defattr(-,root,root,-) @@ -1178,7 +1196,10 @@ update-desktop-database &>/dev/null || : %{_datadir}/desktop-directories/Wine.directory %{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_initrddir}/wine + +%if 0%{?fedora} > 9 %{_datadir}/pixmaps/*png +%endif # esd subpackage %files esd @@ -1259,11 +1280,21 @@ update-desktop-database &>/dev/null || : %defattr(-,root,root,-) %{_libdir}/wine/wineoss.drv.so +%if 0%{?fedora} > 9 %files openal %defattr(-,root,root,-) %{_libdir}/wine/openal32.dll.so +%endif %changelog +* Fri Jul 16 2010 Andreas Bierfert +- 1.2-1 +- final release + +* Fri Jul 16 2010 Andreas Bierfert +- 1.2-0.8.rc7 +- improve font patch + * Sun Jul 11 2010 Andreas Bierfert - 1.2-0.7.rc7 - version upgrade From 8f0659f4fe4f918c27a6a7a5a91994c5b385aae9 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 29 Jul 2010 15:19:15 +0000 Subject: [PATCH 145/161] dist-git conversion --- .cvsignore => .gitignore | 0 Makefile | 21 --------------------- branch | 1 - import.log | 1 - 4 files changed, 23 deletions(-) rename .cvsignore => .gitignore (100%) delete mode 100644 Makefile delete mode 100644 branch delete mode 100644 import.log diff --git a/.cvsignore b/.gitignore similarity index 100% rename from .cvsignore rename to .gitignore diff --git a/Makefile b/Makefile deleted file mode 100644 index 15e51e7..0000000 --- a/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -# Makefile for source rpm: wine -# $Id: Makefile,v 1.4 2006/01/02 08:55:16 awjb Exp $ -NAME := wine -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attept a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/branch b/branch deleted file mode 100644 index baa94ef..0000000 --- a/branch +++ /dev/null @@ -1 +0,0 @@ -F-13 diff --git a/import.log b/import.log deleted file mode 100644 index bb8668c..0000000 --- a/import.log +++ /dev/null @@ -1 +0,0 @@ -wine-1_1_15-3_fc11:HEAD:wine-1.1.15-3.fc11.src.rpm:1237145709 From d002ff5fc188808f0a313263a300cb67a64728f0 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 30 Jul 2010 10:33:21 +0200 Subject: [PATCH 146/161] * Wed Jul 28 2010 Andreas Bierfert - 1.2.0-2 - fix segfault (#617968) - enable openal-soft on el6 --- wine-preloader-segfault.patch | 11 +++++++++++ wine.spec | 30 ++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 wine-preloader-segfault.patch diff --git a/wine-preloader-segfault.patch b/wine-preloader-segfault.patch new file mode 100644 index 0000000..8988d24 --- /dev/null +++ b/wine-preloader-segfault.patch @@ -0,0 +1,11 @@ +--- wine-1.2/loader/preloader.c.atrandom 2010-07-16 17:05:45.000000000 +0200 ++++ wine-1.2/loader/preloader.c 2010-07-28 18:12:27.000000000 +0200 +@@ -519,7 +520,7 @@ static void set_auxiliary_values( ElfW(a + } + else if (new_count < delete_count) /* get rid of unused values */ + { +- int len = (char *)(av + av_count + 1) - dst; ++ int len = (char *)(av + av_count + 1) - src; + for (i = len - 1; i >= 0; i--) dst[i] = src[i]; + } + *stack = dst; diff --git a/wine.spec b/wine.spec index 848417b..5f8f818 100644 --- a/wine.spec +++ b/wine.spec @@ -1,7 +1,7 @@ %define no64bit 0 Name: wine Version: 1.2.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators @@ -37,7 +37,8 @@ Patch1: wine-rpath.patch # bugfixes # fix for #593140 Patch100: wine-fonts.patch - +# fix for #617968 +Patch101: wine-preloader-segfault.patch # Patch200: wine-imagemagick-6.5.patch @@ -112,11 +113,14 @@ BuildRequires: libv4l-devel BuildRequires: fontpackages-devel BuildRequires: ImageMagick-devel -%if 0%{?fedora} > 9 -BuildRequires: icoutils +%if 0%{?fedora} >= 10 || 0%{?rhel} >= 6 BuildRequires: openal-soft-devel %endif +%if 0%{?fedora} >= 10 +BuildRequires: icoutils +%endif + Requires: wine-desktop = %{version}-%{release} Requires: wine-fonts = %{version}-%{release} @@ -228,7 +232,7 @@ Requires: wine-marlett-fonts = %{version}-%{release} Requires: wine-symbol-fonts = %{version}-%{release} # intermediate fix for #593140 Requires: liberation-sans-fonts liberation-serif-fonts liberation-mono-fonts -%if 0%{?fedora} > 12 || 0%{?rhel} > 6 +%if 0%{?fedora} > 12 Requires: liberation-narrow-fonts %endif @@ -407,7 +411,7 @@ Requires: wine-core = %{version}-%{release} %description oss This package adds an oss driver for wine. -%if 0%{?fedora} > 9 +%if 0%{?fedora} >= 10 || 0%{?rhel} >= 6 %package openal Summary: Openal support for wine Group: System Environment/Libraries @@ -422,6 +426,7 @@ This package adds an openal driver for wine. %patch1 %patch100 +%patch101 -p1 %patch200 %patch400 -p1 %patch401 -p1 @@ -471,7 +476,7 @@ install -p -m 644 %{SOURCE201} \ # extract and install icons -%if 0%{?fedora} > 9 +%if 0%{?fedora} > 10 mkdir -p %{buildroot}%{_datadir}/pixmaps icotool -x --width=32 --height=32 --bit-depth=32 -o dlls/user32/resources/ \ dlls/user32/resources/oic_winlogo.ico @@ -678,7 +683,7 @@ update-desktop-database &>/dev/null || : %post oss -p /sbin/ldconfig %postun oss -p /sbin/ldconfig -%if 0%{?fedora} > 9 +%if 0%{?fedora} >= 10 || 0%{?rhel} >= 6 %post openal -p /sbin/ldconfig %postun openal -p /sbin/ldconfig %endif @@ -1197,7 +1202,7 @@ update-desktop-database &>/dev/null || : %{_sysconfdir}/xdg/menus/applications-merged/wine.menu %{_initrddir}/wine -%if 0%{?fedora} > 9 +%if 0%{?fedora} >= 10 %{_datadir}/pixmaps/*png %endif @@ -1280,13 +1285,18 @@ update-desktop-database &>/dev/null || : %defattr(-,root,root,-) %{_libdir}/wine/wineoss.drv.so -%if 0%{?fedora} > 9 +%if 0%{?fedora} >= 10 || 0%{?rhel} >= 6 %files openal %defattr(-,root,root,-) %{_libdir}/wine/openal32.dll.so %endif %changelog +* Wed Jul 28 2010 Andreas Bierfert +- 1.2.0-2 +- fix segfault (#617968) +- enable openal-soft on el6 + * Fri Jul 16 2010 Andreas Bierfert - 1.2-1 - final release From 47919a1c90f992aafb0fcb2c7984cdb4d424bf9b Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 17 Aug 2010 13:57:57 +0200 Subject: [PATCH 147/161] - 1.3.0-1 - version upgrade --- .gitignore | 1 + sources | 2 +- wine-gecko.patch | 6 +++--- wine-preloader-segfault.patch | 11 ----------- wine.spec | 19 +++++++++++-------- 5 files changed, 16 insertions(+), 23 deletions(-) delete mode 100644 wine-preloader-segfault.patch diff --git a/.gitignore b/.gitignore index 7ffd599..e24d48c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ wine-1.2.tar.bz2 +wine-1.3.0.tar.bz2 diff --git a/sources b/sources index acdae65..70e2e97 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -eb4e5423b277fc1e77807b04f366f7b7 wine-1.2.tar.bz2 +f266536a8096f6b705f2f802549dc0e5 wine-1.3.0.tar.bz2 diff --git a/wine-gecko.patch b/wine-gecko.patch index 93ea904..03d574d 100644 --- a/wine-gecko.patch +++ b/wine-gecko.patch @@ -114,13 +114,13 @@ && !install_from_default_dir() && !silent && (url = get_url())) DialogBoxW(hInst, MAKEINTRESOURCEW(ID_DWL_DIALOG), 0, installer_proc); ---- dlls/mshtml/Makefile.in.orig 2010-03-29 15:13:47.000000000 +0200 -+++ dlls/mshtml/Makefile.in 2010-03-29 15:49:55.000000000 +0200 +--- dlls/mshtml/Makefile.in.orig 2010-08-04 22:56:36.000000000 +0200 ++++ dlls/mshtml/Makefile.in 2010-08-04 22:56:52.000000000 +0200 @@ -4,7 +4,7 @@ VPATH = @srcdir@ MODULE = mshtml.dll IMPORTLIB = mshtml --IMPORTS = strmiids uuid urlmon shlwapi ole32 oleaut32 user32 gdi32 advapi32 kernel32 +-IMPORTS = strmiids uuid urlmon shlwapi ole32 oleaut32 user32 gdi32 advapi32 +IMPORTS = strmiids uuid urlmon shlwapi ole32 oleaut32 user32 gdi32 advapi32 kernel32 shell32 EXTRADEFS = -DCOM_NO_WINDOWS_H DELAYIMPORTS = wininet diff --git a/wine-preloader-segfault.patch b/wine-preloader-segfault.patch deleted file mode 100644 index 8988d24..0000000 --- a/wine-preloader-segfault.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- wine-1.2/loader/preloader.c.atrandom 2010-07-16 17:05:45.000000000 +0200 -+++ wine-1.2/loader/preloader.c 2010-07-28 18:12:27.000000000 +0200 -@@ -519,7 +520,7 @@ static void set_auxiliary_values( ElfW(a - } - else if (new_count < delete_count) /* get rid of unused values */ - { -- int len = (char *)(av + av_count + 1) - dst; -+ int len = (char *)(av + av_count + 1) - src; - for (i = len - 1; i >= 0; i--) dst[i] = src[i]; - } - *stack = dst; diff --git a/wine.spec b/wine.spec index 5f8f818..e885790 100644 --- a/wine.spec +++ b/wine.spec @@ -1,13 +1,13 @@ %define no64bit 0 Name: wine -Version: 1.2.0 -Release: 2%{?dist} +Version: 1.3.0 +Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.3.0.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -37,8 +37,6 @@ Patch1: wine-rpath.patch # bugfixes # fix for #593140 Patch100: wine-fonts.patch -# fix for #617968 -Patch101: wine-preloader-segfault.patch # Patch200: wine-imagemagick-6.5.patch @@ -422,11 +420,10 @@ This package adds an openal driver for wine. %endif %prep -%setup -q -n %{name}-1.2 +%setup -q %patch1 %patch100 -%patch101 -p1 %patch200 %patch400 -p1 %patch401 -p1 @@ -721,7 +718,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/write.exe.so %{_libdir}/wine/dxdiag.exe.so - %ifarch %{ix86} %{_bindir}/wine %{_bindir}/wine-preloader @@ -762,6 +758,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winemenubuilder.exe.so %{_libdir}/wine/winecfg.exe.so %{_libdir}/wine/winedevice.exe.so +%{_libdir}/wine/wscript.exe.so %{_libdir}/wine/uninstaller.exe.so %{_libdir}/libwine.so.1* %{_libdir}/wine/acledit.dll.so @@ -839,6 +836,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/fltlib.dll.so %{_libdir}/wine/fusion.dll.so %{_libdir}/wine/fwpuclnt.dll.so +%{_libdir}/wine/gameux.dll.so %{_libdir}/wine/gdi32.dll.so %{_libdir}/wine/gdiplus.dll.so %{_libdir}/wine/glu32.dll.so @@ -910,6 +908,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msrle32.dll.so %{_libdir}/wine/mstask.dll.so %{_libdir}/wine/msvcirt.dll.so +%{_libdir}/wine/msvcp90.dll.so %{_libdir}/wine/msvcr70.dll.so %{_libdir}/wine/msvcr71.dll.so %{_libdir}/wine/msvcr80.dll.so @@ -1292,6 +1291,10 @@ update-desktop-database &>/dev/null || : %endif %changelog +* Sat Jul 31 2010 Andreas Bierfert +- 1.3.0-1 +- version upgrade + * Wed Jul 28 2010 Andreas Bierfert - 1.2.0-2 - fix segfault (#617968) From 8f92d2148f1092eb20de3a08152f40d16e2d6811 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Tue, 17 Aug 2010 14:24:30 +0200 Subject: [PATCH 148/161] - add rundll.exe16.so to 32bit file section --- wine.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/wine.spec b/wine.spec index e885790..0a17ff4 100644 --- a/wine.spec +++ b/wine.spec @@ -1050,6 +1050,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/ifsmgr.vxd.so %{_libdir}/wine/mmdevldr.vxd.so %{_libdir}/wine/monodebg.vxd.so +%{_libdir}/wine/rundll.exe16.so %{_libdir}/wine/vdhcp.vxd.so %{_libdir}/wine/user.exe16.so %{_libdir}/wine/vmm.vxd.so From 6a016ac86c004dee1e88cc873beb8a05046fbba8 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sat, 21 Aug 2010 14:10:09 +0200 Subject: [PATCH 149/161] - 1.3.1-1 - version ugprade --- .gitignore | 1 + sources | 2 +- wine.spec | 12 ++++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index e24d48c..42391c9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ wine-1.2.tar.bz2 wine-1.3.0.tar.bz2 +/wine-1.3.1.tar.bz2 diff --git a/sources b/sources index 70e2e97..057d814 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -f266536a8096f6b705f2f802549dc0e5 wine-1.3.0.tar.bz2 +5be30df05787f5db5bd5d2aa154aee87 wine-1.3.1.tar.bz2 diff --git a/wine.spec b/wine.spec index 0a17ff4..ae2dc1c 100644 --- a/wine.spec +++ b/wine.spec @@ -1,13 +1,13 @@ %define no64bit 0 Name: wine -Version: 1.3.0 +Version: 1.3.1 Release: 1%{?dist} Summary: A Windows 16/32/64 bit emulator Group: Applications/Emulators License: LGPLv2+ URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.3.0.tar.bz2 +Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.3.1.tar.bz2 Source1: wine.init Source3: wine-README-Fedora Source4: wine-32.conf @@ -736,6 +736,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/cacls.exe.so %{_libdir}/wine/expand.exe.so %{_libdir}/wine/extrac32.exe.so +%{_libdir}/wine/ipconfig.exe.so %{_libdir}/wine/winhlp32.exe.so %{_libdir}/wine/mshta.exe.so %{_libdir}/wine/msiexec.exe.so @@ -796,9 +797,11 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/ctl3d32.dll.so %{_libdir}/wine/d3d10.dll.so %{_libdir}/wine/d3d10core.dll.so +%{_libdir}/wine/d3dcompiler_*.dll.so %{_libdir}/wine/d3dim.dll.so %{_libdir}/wine/d3drm.dll.so %{_libdir}/wine/d3dx9_*.dll.so +%{_libdir}/wine/d3dx10_*.dll.so %{_libdir}/wine/d3dxof.dll.so %{_libdir}/wine/dbghelp.dll.so %{_libdir}/wine/dciman32.dll.so @@ -832,6 +835,7 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dxdiagn.dll.so %{_libdir}/wine/dxgi.dll.so %{_libdir}/wine/eject.exe.so +%{_libdir}/wine/explorerframe.dll.so %{_libdir}/wine/faultrep.dll.so %{_libdir}/wine/fltlib.dll.so %{_libdir}/wine/fusion.dll.so @@ -1292,6 +1296,10 @@ update-desktop-database &>/dev/null || : %endif %changelog +* Sat Aug 21 2010 Andreas Bierfert +- 1.3.1-1 +- version ugprade + * Sat Jul 31 2010 Andreas Bierfert - 1.3.0-1 - version upgrade From 30dcf01ff44c7b99949782cb279a6d1a8ecac7b5 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Wed, 29 Sep 2010 21:18:27 +0200 Subject: [PATCH 150/161] winepulse upgrade to 0.39 --- ...c.patch => winepulse-0.39-configure.ac.patch | 17 ++++++++--------- winepulse-0.38.patch => winepulse-0.39.patch | 10 +++------- 2 files changed, 11 insertions(+), 16 deletions(-) rename winepulse-0.38-configure.ac.patch => winepulse-0.39-configure.ac.patch (85%) rename winepulse-0.38.patch => winepulse-0.39.patch (99%) diff --git a/winepulse-0.38-configure.ac.patch b/winepulse-0.39-configure.ac.patch similarity index 85% rename from winepulse-0.38-configure.ac.patch rename to winepulse-0.39-configure.ac.patch index d44a4e6..5055b6d 100644 --- a/winepulse-0.38-configure.ac.patch +++ b/winepulse-0.39-configure.ac.patch @@ -1,8 +1,8 @@ diff --git a/configure.ac b/configure.ac -index 61f376e..6fe1261 100644 +index 341ba181..998e063 100644 --- a/configure.ac +++ b/configure.ac -@@ -76,6 +76,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), +@@ -78,6 +78,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]), [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi]) @@ -10,39 +10,38 @@ index 61f376e..6fe1261 100644 AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) AC_ARG_WITH(tiff, AS_HELP_STRING([--without-tiff],[do not use TIFF]), [if test "x$withval" = "xno"; then ac_cv_header_tiffio_h=no; fi]) -@@ -1386,6 +1387,31 @@ then +@@ -1402,6 +1403,30 @@ then CFLAGS="$save_CFLAGS" fi +dnl **** Check for PulseAudio **** +AC_SUBST(PULSELIBS,"") -+AC_SUBST(PULSECFLAGS,"") ++AC_SUBST(PULSEINCL,"") +if test "x$with_pulse" != "xno"; +then + ac_save_CPPFLAGS="$CPPFLAGS" + if test "$PKG_CONFIG" != "false"; + then + ac_pulse_libs="`$PKG_CONFIG --libs libpulse 2>/dev/null`" -+ ac_pulse_cflags="`$PKG_CONFIG --cflags libpulse 2>/dev/null`" ++ ac_pulse_cflags="`$PKG_CONFIG --cflags-only-I libpulse 2>/dev/null`" + + CPPFLAGS="$CPPFLAGS $ac_pulse_cflags" + AC_CHECK_HEADERS(pulse/pulseaudio.h, + [AC_CHECK_LIB(pulse, pa_stream_is_corked, + [AC_DEFINE(HAVE_PULSEAUDIO, 1, [Define if you have pulseaudio]) + PULSELIBS="$ac_pulse_libs" -+ PULSECFLAGS="$ac_pulse_cflags"],,$ac_pulse_libs) ++ PULSEINCL="$ac_pulse_cflags"],,$ac_pulse_libs) + ]) + fi + CPPFLAGS="$ac_save_CPPFLAGS" +fi +WINE_WARNING_WITH(pulse, [test "$ac_cv_lib_pulse_pa_stream_is_corked" != "yes"], + [libpulse ${notice_platform}development files not found or too old, Pulse won't be supported.]) -+ + dnl **** Check for ALSA 1.x **** AC_SUBST(ALSALIBS,"") if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" -@@ -1553,7 +1579,7 @@ dnl **** Check for libodbc **** +@@ -1580,7 +1605,7 @@ dnl **** Check for libodbc **** WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) dnl **** Check for any sound system **** @@ -51,7 +50,7 @@ index 61f376e..6fe1261 100644 "$ac_cv_header_sys_soundcard_h" != "yes" -a \ "$ac_cv_header_machine_soundcard_h" != "yes" -a \ "$ac_cv_header_soundcard_h" != "yes" -a \ -@@ -2648,6 +2674,7 @@ WINE_CONFIG_DLL(winenas.drv) +@@ -2724,6 +2749,7 @@ WINE_CONFIG_DLL(winenas.drv) WINE_CONFIG_DLL(wineoss.drv) WINE_CONFIG_DLL(wineps.drv) WINE_CONFIG_DLL(wineps16.drv16,enable_win16) diff --git a/winepulse-0.38.patch b/winepulse-0.39.patch similarity index 99% rename from winepulse-0.38.patch rename to winepulse-0.39.patch index 6c4c271..9a4b773 100644 --- a/winepulse-0.38.patch +++ b/winepulse-0.39.patch @@ -1,17 +1,13 @@ diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in new file mode 100644 -index 0000000..ed48381 +index 0000000..a6fdbf8 --- /dev/null +++ b/dlls/winepulse.drv/Makefile.in -@@ -0,0 +1,14 @@ -+TOPSRCDIR = @top_srcdir@ -+TOPOBJDIR = ../.. -+SRCDIR = @srcdir@ -+VPATH = @srcdir@ +@@ -0,0 +1,10 @@ +MODULE = winepulse.drv +IMPORTS = winmm user32 kernel32 +EXTRALIBS = @PULSELIBS@ -+EXTRACFLAGS = @PULSEINCL@ ++EXTRAINCL = @PULSEINCL@ + +C_SRCS = waveout.c \ + wavein.c \ From e8841dfe8144ac6f65b64819fe64879a53f77eba Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Sun, 30 Jan 2011 18:45:51 +0100 Subject: [PATCH 151/161] - fixup desktop files --- wine-mime-msi.desktop | 3 +-- wine-notepad.desktop | 1 - wine-oleview.desktop | 1 - wine-regedit.desktop | 1 - wine-uninstaller.desktop | 1 - wine-wineboot.desktop | 1 - wine-winecfg.desktop | 1 - wine-winefile.desktop | 1 - wine-winemine.desktop | 3 +-- wine-winhelp.desktop | 1 - wine-wordpad.desktop | 1 - 11 files changed, 2 insertions(+), 13 deletions(-) diff --git a/wine-mime-msi.desktop b/wine-mime-msi.desktop index 5a74ccf..5dcaa46 100644 --- a/wine-mime-msi.desktop +++ b/wine-mime-msi.desktop @@ -1,7 +1,6 @@ [Desktop Entry] Type=Application Name=Windows Installer File -Encoding=UTF-8 Exec=wine %f -MimeType=application/x-ole-storage;text/mspg-legacyinfo +MimeType=application/x-ole-storage;text/mspg-legacyinfo; Hidden=true diff --git a/wine-notepad.desktop b/wine-notepad.desktop index e603069..cfaf6b4 100644 --- a/wine-notepad.desktop +++ b/wine-notepad.desktop @@ -5,5 +5,4 @@ Exec=notepad Icon=notepad Terminal=false Type=Application -Encoding=UTF-8 Categories=X-Wine; diff --git a/wine-oleview.desktop b/wine-oleview.desktop index a458708..8f94f38 100644 --- a/wine-oleview.desktop +++ b/wine-oleview.desktop @@ -5,5 +5,4 @@ Exec=wine oleview Icon=wine Terminal=false Type=Application -Encoding=UTF-8 Categories=X-Wine; diff --git a/wine-regedit.desktop b/wine-regedit.desktop index b032220..5fddbf4 100644 --- a/wine-regedit.desktop +++ b/wine-regedit.desktop @@ -5,5 +5,4 @@ Exec=regedit Icon=regedit Terminal=false Type=Application -Encoding=UTF-8 Categories=X-Wine; diff --git a/wine-uninstaller.desktop b/wine-uninstaller.desktop index ef788ee..2a9cf52 100644 --- a/wine-uninstaller.desktop +++ b/wine-uninstaller.desktop @@ -5,5 +5,4 @@ Exec=wine uninstaller Icon=msiexec Terminal=false Type=Application -Encoding=UTF-8 Categories=X-Wine; diff --git a/wine-wineboot.desktop b/wine-wineboot.desktop index 6584aea..1ecba53 100644 --- a/wine-wineboot.desktop +++ b/wine-wineboot.desktop @@ -5,5 +5,4 @@ Exec=wineboot Icon=wine Terminal=false Type=Application -Encoding=UTF-8 Categories=X-Wine; diff --git a/wine-winecfg.desktop b/wine-winecfg.desktop index 2d28279..44b13c2 100644 --- a/wine-winecfg.desktop +++ b/wine-winecfg.desktop @@ -5,5 +5,4 @@ Exec=winecfg Icon=winecfg Terminal=false Type=Application -Encoding=UTF-8 Categories=X-Wine; diff --git a/wine-winefile.desktop b/wine-winefile.desktop index e35fb3d..855dcbf 100644 --- a/wine-winefile.desktop +++ b/wine-winefile.desktop @@ -5,5 +5,4 @@ Exec=winefile Icon=winefile Terminal=false Type=Application -Encoding=UTF-8 Categories=X-Wine; diff --git a/wine-winemine.desktop b/wine-winemine.desktop index 15b70d8..34712f9 100644 --- a/wine-winemine.desktop +++ b/wine-winemine.desktop @@ -5,5 +5,4 @@ Exec=winemine Icon=winemine Terminal=false Type=Application -Encoding=UTF-8 -Categories=Application;Game;LogicGame; +Categories=Game;LogicGame; diff --git a/wine-winhelp.desktop b/wine-winhelp.desktop index 2d0ac67..2752518 100644 --- a/wine-winhelp.desktop +++ b/wine-winhelp.desktop @@ -5,5 +5,4 @@ Exec=wine winhlp32 Icon=winhelp Terminal=false Type=Application -Encoding=UTF-8 Categories=X-Wine; diff --git a/wine-wordpad.desktop b/wine-wordpad.desktop index 1838b04..1fe4ecd 100644 --- a/wine-wordpad.desktop +++ b/wine-wordpad.desktop @@ -5,5 +5,4 @@ Exec=wine wordpad Icon=wordpad Terminal=false Type=Application -Encoding=UTF-8 Categories=X-Wine; From 6272f7c8589f4b7a4b2ba5b88c92ccfa5fbebf89 Mon Sep 17 00:00:00 2001 From: Andreas Bierfert Date: Fri, 17 Feb 2012 15:38:06 +0100 Subject: [PATCH 152/161] - add BR parts from a8273748622c4669e573473ea1715e7ddbe4fa7b --- wine.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wine.spec b/wine.spec index ae2dc1c..3c12559 100644 --- a/wine.spec +++ b/wine.spec @@ -74,6 +74,8 @@ BuildRequires: lcms-devel BuildRequires: libieee1284-devel BuildRequires: libjpeg-devel BuildRequires: libpng-devel +BuildRequires: librsvg2 +BuildRequires: librsvg2-devel BuildRequires: libstdc++-devel BuildRequires: libusb-devel BuildRequires: libxml2-devel From a762c9d6b0b9bae3e83962b4fe0476376602fbc0 Mon Sep 17 00:00:00 2001 From: Michael Cronenworth Date: Wed, 25 Sep 2019 08:29:34 -0500 Subject: [PATCH 153/161] Update to 4.0.2, support for RHEL 8 --- wine.spec | 874 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 859 insertions(+), 15 deletions(-) diff --git a/wine.spec b/wine.spec index 3c12559..0f1c95e 100644 --- a/wine.spec +++ b/wine.spec @@ -1,14 +1,37 @@ -%define no64bit 0 -Name: wine -Version: 1.3.1 -Release: 1%{?dist} -Summary: A Windows 16/32/64 bit emulator +# Compiling the preloader fails with hardening enabled +%undefine _hardened_build -Group: Applications/Emulators -License: LGPLv2+ -URL: http://www.winehq.org/ -Source0: http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.3.1.tar.bz2 -Source1: wine.init +%global no64bit 0 +%global winegecko 2.47 +%global winemono 4.7.5 +#global _default_patch_fuzz 2 + +# build with wine-staging patches, see: https://github.com/wine-staging/wine-staging +%if 0%{?fedora} +%global wine_staging 0 +%endif # 0%{?fedora} + +# binfmt macros for RHEL +%if 0%{?rhel} == 7 +%global _binfmtdir /usr/lib/binfmt.d +%global binfmt_apply() \ +/usr/lib/systemd/systemd-binfmt %{?*} >/dev/null 2>&1 || : \ +%{nil} +%endif + +Name: wine +Version: 4.0.2 +Release: 1%{?dist} +Summary: A compatibility layer for windows applications + +Group: Applications/Emulators +License: LGPLv2+ +URL: https://www.winehq.org/ +Source0: https://dl.winehq.org/wine/source/4.0/wine-%{version}.tar.xz +Source10: https://dl.winehq.org/wine/source/4.0/wine-%{version}.tar.xz.sign + +Source1: wine.init +Source2: wine.systemd Source3: wine-README-Fedora Source4: wine-32.conf Source5: wine-64.conf @@ -57,7 +80,11 @@ Patch1000: wine-gecko.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %if !%{?no64bit} -ExclusiveArch: %{ix86} x86_64 +# aarch64 now requires clang >= 5 +# https://bugzilla.redhat.com/show_bug.cgi?id=1629910 +# Vulkan support is missing in RHEL7+ for aarch64 +%if 0%{?rhel} >= 7 +ExclusiveArch: %{ix86} x86_64 %{arm} %else ExclusiveArch: %{ix86} %endif @@ -67,8 +94,6 @@ BuildRequires: flex BuildRequires: autoconf BuildRequires: desktop-file-utils BuildRequires: alsa-lib-devel -BuildRequires: audiofile-devel -BuildRequires: esound-devel BuildRequires: freeglut-devel BuildRequires: lcms-devel BuildRequires: libieee1284-devel @@ -88,9 +113,10 @@ BuildRequires: sane-backends-devel BuildRequires: zlib-devel BuildRequires: fontforge freetype-devel BuildRequires: libgphoto2-devel -BuildRequires: jack-audio-connection-kit-devel -# #217338 +%if 0%{?rhel} < 7 BuildRequires: isdn4k-utils-devel +%endif +BuildRequires: libpcap-devel # modular x BuildRequires: libX11-devel BuildRequires: mesa-libGL-devel mesa-libGLU-devel @@ -1298,6 +1324,824 @@ update-desktop-database &>/dev/null || : %endif %changelog +* Wed Sep 25 2019 Michael Cronenworth 4.0.2-1 +- version update + +* Fri Feb 22 2019 Michael Cronenworth 4.0-2 +- fix vulkan requirement + +* Tue Feb 19 2019 Michael Cronenworth 4.0-1 +- version update + +* Thu Sep 13 2018 Michael Cronenworth 3.0.3-1 +- version update +- drop aarch64 for epel + +* Tue Jun 26 2018 Michael Cronenworth 3.0.2-1 +- version update + +* Mon May 14 2018 Michael Cronenworth 3.0.1-1 +- version update + +* Thu May 10 2018 Michael Cronenworth 3.0-2 +- Rebuild for libgphoto2 (rhbz#1568368) + +* Sat Mar 03 2018 Michael Cronenworth 3.0-1 +- version update + +* Wed Dec 20 2017 Michael Cronenworth 2.0.3-2 +- Install desktop icons (rhbz#1527942) + +* Mon Dec 18 2017 Michael Cronenworth 2.0.3-1 +- version update + +* Mon Dec 19 2016 Michael Cronenworth 1.8.6-1 +- version upgrade + +* Mon Nov 07 2016 Michael Cronenworth 1.8.5-2 +- remove old cruft and fix scriptlets (rhbz#1314762) +- add hard dependency on cups-libs (rhbz#1367537) + +* Fri Oct 07 2016 Michael Cronenworth 1.8.5-1 +- version upgrade + +* Fri Sep 09 2016 Michael Cronenworth 1.8.4-1 +- version upgrade + +* Fri Jun 17 2016 Michael Cronenworth 1.8.3-1 +- version upgrade + +* Tue Apr 19 2016 Michael Cronenworth 1.8.2-1 +- version upgrade + +* Wed Feb 03 2016 Michael Cronenworth 1.8.1-1 +- version upgrade + +* Wed Dec 23 2015 Michael Cronenworth 1.8-1 +- version upgrade + +* Tue Dec 15 2015 Michael Cronenworth 1.8-0.2 +- version upgrade, 1.8-rc4 +- enabling compiler optimizations again (-O2), thanks to gcc 5.3 + +* Sun Dec 06 2015 Michael Cronenworth 1.8-0.1 +- version upgrade, 1.8-rc3 + +* Sun Nov 15 2015 Michael Cronenworth 1.7.55-1 +- version upgrade + +* Wed Nov 04 2015 Michael Cronenworth 1.7.54-1 +- version upgrade + +* Wed Oct 21 2015 Michael Cronenworth 1.7.53-1 +- version upgrade + +* Sat Oct 03 2015 Michael Cronenworth 1.7.52-1 +- version upgrade + +* Tue Sep 08 2015 Michael Cronenworth 1.7.51-1 +- version upgrade + +* Mon Aug 24 2015 Michael Cronenworth 1.7.50-1 +- version upgrade + +* Fri Aug 14 2015 Michael Cronenworth 1.7.49-2 +- backport gecko 2.40 patch + +* Fri Aug 14 2015 Michael Cronenworth 1.7.49-1 +- version upgrade + +* Mon Aug 10 2015 Björn Esser - 1.7.48-2 +- rebuilt for mingw-wine-gecko-2.40 + +* Fri Jul 31 2015 Michael Cronenworth 1.7.48-1 +- version upgrade + +* Sun Jul 12 2015 Michael Cronenworth 1.7.47-1 +- version upgrade + +* Mon Jun 29 2015 Michael Cronenworth 1.7.46-1 +- version upgrade + +* Fri Jun 19 2015 Fedora Release Engineering - 1.7.45-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sun Jun 14 2015 Michael Cronenworth 1.7.45-1 +- version upgrade + +* Sun May 31 2015 Michael Cronenworth 1.7.44-1 +- version upgrade + +* Mon May 18 2015 Michael Cronenworth 1.7.43-1 +- version upgrade + +* Mon May 04 2015 Michael Cronenworth 1.7.42-1 +- version upgrade + +* Sat Apr 18 2015 Michael Cronenworth 1.7.41-1 +- version upgrade +- Disable gstreamer support (rhbz#1204185) + +* Mon Apr 06 2015 Michael Cronenworth 1.7.40-1 +- version upgrade + +* Sun Mar 22 2015 Michael Cronenworth 1.7.39-1 +- version upgrade +- Enable some optimizations and workarounds for GCC5 regressions + +* Tue Mar 10 2015 Adam Jackson 1.7.38-3 +- Drop sysvinit subpackage on F23+ + +* Sat Mar 07 2015 Michael Cronenworth - 1.7.38-2 +- Fix wine-gecko and wine-mono versions + +* Sat Mar 07 2015 Michael Cronenworth - 1.7.38-1 +- version upgrade + +* Sun Feb 22 2015 Andreas Bierfert +- 1.7.37-1 +- version upgrade + +* Mon Feb 16 2015 Michael Cronenworth - 1.7.36-2 +- Patch for RtlUnwindEx fix (staging bz #68) +- Use new systemd macros for binfmt handling + +* Sun Feb 08 2015 Michael Cronenworth - 1.7.36-1 +- version upgrade + +* Wed Feb 04 2015 Orion Poplawski - 1.7.35-3 +- Add patch to fix stack smashing (bug #1110419) + +* Mon Jan 26 2015 Michael Cronenworth - 1.7.35-2 +- Rebuild (libgphoto2) + +* Sun Jan 25 2015 Michael Cronenworth - 1.7.35-1 +- version upgrade +- use alternatives system, remove wow sub-package + +* Tue Jan 20 2015 Peter Robinson 1.7.34-2 +- Rebuild (libgphoto2) + +* Sat Jan 10 2015 Michael Cronenworth +- 1.7.34-1 +- version upgrade +- enable OpenCL support (rhbz#1176605) + +* Sun Dec 14 2014 Michael Cronenworth +- 1.7.33-1 +- version upgrade + +* Sun Nov 30 2014 Michael Cronenworth +- 1.7.32-1 +- version upgrade +- wine-mono upgrade + +* Fri Nov 14 2014 Andreas Bierfert +- 1.7.31-1 +- version upgrade +- wine-gecko upgrade +- add some missing arch requires + +* Sun Nov 02 2014 Andreas Bierfert +- 1.7.30-1 +- version upgrade (rhbz#1159548) +- use winepulse patch from compholio patchset when build w/o + compholio (rhbz#1151862) + +* Fri Oct 24 2014 Michael Cronenworth +- 1.7.29-1 +- version upgrade + +* Sun Oct 05 2014 Michael Cronenworth +- 1.7.28-1 +- version upgrade +- New sub-package for wingdings font system integration + +* Wed Sep 24 2014 Michael Cronenworth +- 1.7.27-1 +- version upgrade + +* Mon Sep 08 2014 Michael Cronenworth +- 1.7.26-1 +- version upgrade + +* Sun Aug 24 2014 Michael Cronenworth +- 1.7.25-1 +- version upgrade + +* Mon Aug 18 2014 Fedora Release Engineering - 1.7.24-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Fri Aug 15 2014 Michael Cronenworth +- 1.7.24-1 +- version upgrade +- No longer install Wine fonts into system directory (rhbz#1039763) + +* Thu Jul 17 2014 Björn Esser - 1.7.22-4 +- prevent accidential build with compholio-patchset on EPEL +- rebuild for pulseaudio (bug #1117683) + +* Mon Jul 14 2014 Björn Esser - 1.7.22-3 +- dropped virtual Provides: %%{name}(compholio) + +* Sat Jul 12 2014 Björn Esser - 1.7.22-2 +- added conditionalized option to build with compholio-patchset for pipelight + Source900 -- compholio-patchset, wine-arial-fonts sub-package, + BR: libattr-devel and configure --with-xattr for Silverlight DRM-stuff + +* Fri Jul 11 2014 Michael Cronenworth +- 1.7.22-1 +- version upgrade + +* Wed Jul 09 2014 Michael Cronenworth +- 1.7.21-2 +- Fixes for EPEL7 (rhbz#1117422) + +* Tue Jul 01 2014 Andreas Bierfert +- 1.7.21-1 +- version upgrade + +* Thu Jun 19 2014 Andreas Bierfert +- 1.7.20-1 +- version upgrade + +* Sun Jun 08 2014 Fedora Release Engineering - 1.7.19-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sun May 18 2014 Andreas Bierfert +- 1.7.19-1 +- version upgrade + +* Sat May 10 2014 Michael Cronenworth +- 1.7.18-1 +- version upgrade + +* Fri Apr 25 2014 Andreas Bierfert +- 1.7.17-2 +- fix systemd binfmt location (rhbz#1090170) + +* Tue Apr 22 2014 Andreas Bierfert +- 1.7.17-1 +- version upgrade + +* Mon Apr 07 2014 Andreas Bierfert +- 1.7.16-2 +- explicitly require libpng (fixes rhbz#1085075) + +* Mon Apr 07 2014 Andreas Bierfert +- 1.7.16-1 +- version upgrade + +* Mon Mar 24 2014 Andreas Bierfert +- 1.7.15-1 +- version upgrade + +* Sat Mar 08 2014 Andreas Bierfert +- 1.7.14-1 +- version upgrade + +* Sun Feb 23 2014 Andreas Bierfert +- 1.7.13-1 +- version upgrade +- upgraded winepulse + +* Sat Feb 08 2014 Andreas Bierfert +- 1.7.12-1 +- version upgrade + +* Sun Jan 26 2014 Andreas Bierfert +- 1.7.11-1 +- version upgrade + +* Thu Jan 09 2014 Andreas Bierfert +- 1.7.10-1 +- version upgrade +- upgraded winepulse + +* Sun Dec 08 2013 Andreas Bierfert +- 1.7.8-1 +- version upgrade +- wine mono 4.5.2 +- upgraded winepulse + +* Sat Nov 23 2013 Andreas Bierfert +- 1.7.7-1 +- version upgrade + +* Mon Oct 28 2013 Andreas Bierfert +- 1.7.5-1 +- version upgrade (rhbz#1023716) +- upgraded winepulse + +* Sat Oct 12 2013 Andreas Bierfert +- 1.7.4-1 +- version upgrade (rhbz#1018601) + +* Sat Sep 28 2013 Andreas Bierfert +- 1.7.3-1 +- version upgrade (rhbz#1008441) +- upgraded winepulse +- wine gecko 2.24 +- fix systemd subpackage scriplet (rhbz#1010742) + +* Sun Sep 15 2013 Andreas Bierfert +- 1.7.2-1 +- version upgrade +- workaround for rhbz#968860 +- upgraded winepulse + +* Sat Aug 31 2013 Andreas Bierfert +- 1.7.1-2 +- fix icons with patch provided by Frank Dana (rhbz#997543) +- pull in mesa-dri-drivers in meta package to make direct rendering work out + of the box (rhbz#827776) +- restart systemd binfmt handler on post/postun (rhbz#912354) +- add arabic translation to fedora desktop files provided by Mosaab Alzoubi + (rhbz#979770) + +* Sat Aug 31 2013 Andreas Bierfert +- 1.7.1-1 +- version upgrade +- build with lcms2 + +* Sat Aug 17 2013 Andreas Bierfert +- 1.7.0-1 +- version upgrade +- wine pulse update + +* Sun Aug 04 2013 Fedora Release Engineering - 1.6-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue Jul 23 2013 Dennis Gilmore - 1.6-2 +- wine-desktop has architecture specific Requires so can not be noarch + +* Sat Jul 20 2013 Andreas Bierfert +- 1.6-1 +- 1.6 release + +* Thu Jul 18 2013 Petr Pisar - 1.6-0.5.rc5 +- Perl 5.18 rebuild + +* Fri Jul 12 2013 Andreas Bierfert +- 1.6-0.4.rc5 +- 1.6 rc5 + +* Sat Jun 29 2013 Andreas Bierfert +- 1.6-0.3.rc4 +- 1.6 rc4 + +* Thu Jun 27 2013 Andreas Bierfert +- 1.6-0.2.rc3 +- 1.6 rc3 + +* Sun Jun 16 2013 Andreas Bierfert +- 1.6-0.1.rc2 +- 1.6 rc2 + +* Thu May 30 2013 Andreas Bierfert +- 1.5.31-1 +- version upgrade +- upgraded winepulse +- wine gecko 2.21 +- wine meta: require samba-winbind-clients for ntlm + +* Tue May 14 2013 Andreas Bierfert +- 1.5.30-1 +- version upgrade + +* Thu May 09 2013 Andreas Bierfert +- 1.5.29-1 +- version upgrade + +* Sat Mar 30 2013 Andreas Bierfert +- 1.5.27-1 +- version upgrade + +* Sun Mar 17 2013 Andreas Bierfert +- 1.5.26-1 +- version upgrade + +* Tue Mar 05 2013 Andreas Bierfert +- 1.5.25-1 +- version upgrade +- now font package for wingdings family + +* Mon Feb 18 2013 Andreas Bierfert +- 1.5.24-1 +- version upgrade + +* Sun Feb 10 2013 Andreas Bierfert +- 1.5.23-1 +- version upgrade + +* Sun Feb 10 2013 Parag Nemade - 1.5.22-2 +- Remove vendor tag from desktop file as per https://fedorahosted.org/fesco/ticket/1077 +- Cleanup spec as per recently changed packaging guidelines +- fix bogus date changelog + +* Sat Jan 19 2013 Andreas Bierfert +- 1.5.22-1 +- version upgrade +- upgraded winepulse +- wine gecko 1.9 + +* Sun Jan 06 2013 Andreas Bierfert +- 1.5.21-1 +- version upgrade + +* Fri Dec 28 2012 Andreas Bierfert +- 1.5.20-1 +- version upgrade +- upgraded winepulse + +* Sun Dec 09 2012 Andreas Bierfert +- 1.5.19-1 +- version upgrade +- upgraded winepulse + +* Fri Nov 23 2012 Andreas Bierfert +- 1.5.18-1 +- version upgrade + +* Mon Nov 12 2012 Andreas Bierfert +- 1.5.17-1 +- version upgrade +- upgraded winepulse + +* Sun Oct 28 2012 Andreas Bierfert +- 1.5.16-1 +- version upgrade (rhbz#870611) +- wine mono 0.8 +- update pulse patch +- fix midi in winepulse (rhbz#863129) +- fix dependencies for openssl (rhbz#868576) +- move wineboot.exe.so to -core instead of -wow (rhbz#842820) + +* Mon Oct 15 2012 Andreas Bierfert +- 1.5.15-1 +- version upgrade +- wine gecko 1.8 + +* Sat Sep 29 2012 Andreas Bierfert +- 1.5.14-1 +- version upgrade + +* Sat Sep 15 2012 Andreas Bierfert +- 1.5.13-1 +- version upgrade + +* Fri Aug 31 2012 Andreas Bierfert +- 1.5.12-1 +- version upgrade + +* Thu Aug 30 2012 Andreas Bierfert +- 1.5.11-2 +- rebuild on rawhide for fixed libOSMesa + +* Sat Aug 18 2012 Andreas Bierfert +- 1.5.11-1 +- version upgrade +- use changed libOSMesa check from gentoo (>f18 still fails see rhbz#849405) + +* Tue Jul 31 2012 Andreas Bierfert +- 1.5.10-1 +- version upgrade +- wine gecko 1.7 + +* Sat Jul 21 2012 Peter Robinson - 1.5.9-2 +- isdn4linux now builds on ARM + +* Wed Jul 18 2012 Andreas Bierfert +- 1.5.9-1 +- version upgrade +- clean up cjk patch to comply with default fonts where possible +- update fedora readme to point out required font packages per cjk locale + +* Thu Jul 12 2012 Andreas Bierfert +- 1.5.8-2 +- bump for libgphoto2 2.5.0 + +* Wed Jul 04 2012 Andreas Bierfert +- 1.5.8-1 +- version upgrade (rhbz#834762) +- change {mingw-,}wine-mono require + +* Sun Jun 24 2012 Andreas Bierfert +- 1.5.7-1 +- version upgrade (rhbz#834762) +- require new wine-gecko version + +* Sat Jun 09 2012 Andreas Bierfert +- 1.5.6-1 +- version upgrade (rhbz#830424) +- split tahoma font package and add -system subpackage (rhbz#693180) + +* Thu May 31 2012 Andreas Bierfert +- 1.5.5-2 +- fix description + +* Mon May 28 2012 Andreas Bierfert +- 1.5.5-1 +- version upgrade (rhbz#817257) +- split out -filesystem and clean up -common/-core requires +- re-add winepulse driver (rhbz#821207, rhbz#783699) +- add font replacements for CJK to wine.inf and add information for cjk users + to fedora readme (rhbz#815125, rhbz#820096) +- add support for and require wine-mono + +* Mon May 14 2012 Andreas Bierfert +- 1.5.4-1 +- version upgrade + +* Mon Apr 30 2012 Andreas Bierfert +- 1.5.3-1 +- version upgrade + +* Sat Apr 21 2012 Andreas Bierfert +- 1.5.2-2 +- reenable xinput2 (rhbz#801436) + +* Sat Apr 14 2012 Andreas Bierfert +- 1.5.2-1 +- version upgrade + +* Sat Mar 31 2012 Andreas Bierfert +- 1.5.1-1 +- version upgrade + +* Tue Mar 20 2012 Andreas Bierfert +- 1.5.0-2 +- require wine gecko from fedora mingw + +* Mon Mar 19 2012 Andreas Bierfert +- 1.5.0-1 +- version upgrade + +* Wed Mar 07 2012 Andreas Bierfert +- 1.4-1 +- version upgrade + +* Tue Mar 06 2012 Andreas Bierfert +- 1.4-0.8.rc6 +- version upgrade + +* Sat Feb 25 2012 Andreas Bierfert +- 1.4-0.7.rc5 +- version upgrade + +* Tue Feb 21 2012 Andreas Bierfert +- 1.4-0.6.rc4 +- fix dependency issue (#795295) + +* Sun Feb 19 2012 Andreas Bierfert +- 1.4-0.5.rc4 +- version upgrade + +* Fri Feb 17 2012 Andreas Bierfert +- 1.4-0.4.rc3 +- version upgrade +- cleanup arm dependency fixes + +* Fri Feb 17 2012 Peter Robinson - 1.4-0.3.rc2 +- Fix architecture dependencies on ARM so it installs + +* Thu Feb 02 2012 Andreas Bierfert +- 1.4-0.2.rc2 +- version upgrade + +* Sat Jan 28 2012 Andreas Bierfert +- 1.4-0.1.rc1 +- version upgrade + +* Wed Jan 25 2012 Peter Robinson - 1.3.37-2 +- Add initial support for wine on ARM + +* Fri Jan 13 2012 Andreas Bierfert +- 1.3.37-1 +- version upgrade +- drop obsoleted patches + +* Sat Dec 31 2011 Andreas Bierfert +- 1.3.36-1 +- version upgrade + +* Mon Dec 19 2011 Andreas Bierfert +- 1.3.35-1 +- version upgrade + +* Thu Dec 08 2011 Andreas Bierfert +- 1.3.34-1 +- version upgrade + +* Sun Nov 20 2011 Andreas Bierfert +- 1.3.33-1 +- version upgrade(rhbz#755192) + +* Sat Nov 05 2011 Andreas Bierfert +- 1.3.32-1 +- version upgrade (rhbz#745434) + +* Fri Nov 04 2011 Andreas Bierfert +- 1.3.31-2 +- pull in correct wine-alsa arch in the pa meta package (rhbz#737431) + +* Sun Oct 23 2011 Andreas Bierfert +- 1.3.31-1 +- version upgrade + +* Mon Oct 10 2011 Andreas Bierfert +- 1.3.30-1 +- version upgrade + +* Sat Sep 24 2011 Andreas Bierfert +- 1.3.29-1 +- version upgrade + +* Sun Sep 11 2011 Andreas Bierfert +- 1.3.28-1 +- version upgrade +- require -alsa from -pulseaudio package for new sound api + +* Mon Aug 29 2011 Andreas Bierfert +- 1.3.27-1 +- version upgrade +- fix epel build (rhbz#733802) + +* Tue Aug 23 2011 Andreas Bierfert +- 1.3.26-3 +- drop pulse configure option +- fix f16 build (dbus/hal configure options) + +* Mon Aug 22 2011 Andreas Bierfert +- 1.3.26-2 +- drop pulse patches +- make pulseaudio package meta and require alsa pa plugin +- update udisks patch + +* Sun Aug 07 2011 Andreas Bierfert +- 1.3.26-1 +- version upgrade + +* Fri Jul 22 2011 Andreas Bierfert +- 1.3.25-1 +- version upgrade +- remove -jack and -esd (retired upstream) +- rebase to Maarten Lankhorst's winepulse +- drop obsolete winepulse readme +- add udisks support from pending patches (winehq#21713, rhbz#712755) +- disable xinput2 (broken) + +* Sun Jul 10 2011 Andreas Bierfert +- 1.3.24-1 +- version upgrade +- add sign as source10 +- drop mshtml patch (upstream) + +* Sun Jun 26 2011 Andreas Bierfert +- 1.3.23-1 +- version upgrade +- winepulse upgrade (0.40) +- fix gcc optimization problem (rhbz#710352, winehq#27375) + +* Tue Jun 21 2011 Andreas Bierfert +- 1.3.22-2 +- workaround gcc optimization problem (rhbz#710352) + +* Sun Jun 12 2011 Andreas Bierfert +- 1.3.22-1 +- version upgrade + +* Sat May 28 2011 Andreas Bierfert +- 1.3.21-1 +- version upgrade + +* Sun May 15 2011 Andreas Bierfert +- 1.3.20-1 +- version upgrade + +* Sat Apr 30 2011 Andreas Bierfert +- 1.3.19-1 +- version upgrade (#701003) +- remove wine-oss +- disable hal (>=f16) + +* Sat Apr 16 2011 Andreas Bierfert +- 1.3.18-1 +- version upgrade + +* Thu Apr 07 2011 Andreas Bierfert +- 1.3.17-3 +- add fix for office installation (upstream #26650) + +* Tue Apr 05 2011 Andreas Bierfert +- 1.3.17-2 +- cleanup spec file +- remove rpath via chrpath +- convert README files to utf8 +- move SysV init script so sysvinit subpackage (>=f15) +- add some missing lsb keywords to init file +- create systemd subpackage and require it in the wine-desktop package (>=f15) +- disable embedded bitmaps in tahoma (#693180) +- provide readme how to disable wine-tahoma in fontconfig (#693180) + +* Sat Apr 02 2011 Andreas Bierfert +- 1.3.17-1 +- version upgrade + +* Fri Mar 18 2011 Andreas Bierfert +- 1.3.16-1 +- version upgrade +- cleanup unneeded patches +- drop some patches +- reenable smp build + +* Thu Mar 17 2011 Andreas Bierfert +- 1.3.15-3 +- reenable fonts + +* Sun Mar 13 2011 Andreas Bierfert +- 1.3.15-2 +- use svg files for icons (#684277) + +* Tue Mar 08 2011 Andreas Bierfert +- 1.3.15-1 +- version upgrade + +* Tue Mar 01 2011 Andreas Bierfert +- 1.3.14-2 +- prepare for wine-gecko + +* Sat Feb 19 2011 Andreas Bierfert +- 1.3.14-1 +- version upgrade + +* Mon Feb 07 2011 Fedora Release Engineering - 1.3.13-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Sun Feb 06 2011 Andreas Bierfert +- 1.3.13-1 +- version upgrade +- update desktop files + +* Mon Jan 24 2011 Andreas Bierfert +- 1.3.12-1 +- version upgrade + +* Sun Jan 09 2011 Andreas Bierfert +- 1.3.11-1 +- version upgrade + +* Tue Dec 28 2010 Andreas Bierfert +- 1.3.10-1 +- version upgrade + +* Sat Dec 11 2010 Andreas Bierfert +- 1.3.9-1 +- version upgrade + +* Sat Nov 27 2010 Andreas Bierfert +- 1.3.8-1 +- version upgrade +- require libXcursor (#655255) +- require wine-openal in wine meta package (#657144) + +* Tue Nov 16 2010 Andreas Bierfert +- 1.3.7-2 +- cleanup cflags a bit + +* Sat Nov 13 2010 Andreas Bierfert +- 1.3.7-1 +- version upgrade +- fix package description (#652718) +- compile with D_FORTIFY_SOURCE=0 for now to avoid breaking wine (#650875) + +* Fri Oct 29 2010 Andreas Bierfert +- 1.3.6-1 +- version upgrade +- rebase winepulse configure patch +- add gstreamer BR for new gstreamer support +- add libtiff BR for new tiff support + +* Mon Oct 18 2010 Andreas Bierfert +- 1.3.5-1 +- version upgrade + +* Sun Oct 03 2010 Andreas Bierfert +- 1.3.4-1 +- version upgrade + +* Wed Sep 29 2010 Andreas Bierfert +- 1.3.3-2 +- winepulse upgrade (0.39) + +* Mon Sep 20 2010 Andreas Bierfert +- 1.3.3-1 +- version upgrade + +* Wed Sep 08 2010 Andreas Bierfert +- 1.3.2-1 +- version upgrade + * Sat Aug 21 2010 Andreas Bierfert - 1.3.1-1 - version ugprade From 33c8d360ed89d5fbd2aa1772c3535bbac70315b4 Mon Sep 17 00:00:00 2001 From: Michael Cronenworth Date: Wed, 25 Sep 2019 08:47:29 -0500 Subject: [PATCH 154/161] Fix git rebase mess, I never asked for this --- README-FEDORA-PULSEAUDIO | 61 - wine-README-tahoma | 19 + wine-chooser.sh | 39 - wine-cjk.patch | 22 + wine-fonts.patch | 204 --- wine-gecko.patch | 127 -- wine-imagemagick-6.5.patch | 30 - wine-mime-msi.desktop | 1 + wine-notepad.desktop | 2 + wine-oleview.desktop | 2 + wine-regedit.desktop | 2 + wine-rpath.patch | 45 - wine-tahoma.conf | 11 + wine-uninstaller.desktop | 2 + wine-wineboot.desktop | 2 + wine-winecfg.desktop | 2 + wine-winefile.desktop | 2 + wine-winemine.desktop | 4 +- wine-winhelp.desktop | 2 + wine-wordpad.desktop | 2 + wine.init | 11 +- wine.spec | 1638 ++++++++++++++---- wine.systemd | 5 + winepulse-0.38-winecfg.patch | 313 ---- winepulse-0.39-configure.ac.patch | 60 - winepulse-0.39.patch | 2669 ----------------------------- 26 files changed, 1351 insertions(+), 3926 deletions(-) delete mode 100644 README-FEDORA-PULSEAUDIO create mode 100644 wine-README-tahoma delete mode 100644 wine-chooser.sh create mode 100644 wine-cjk.patch delete mode 100644 wine-fonts.patch delete mode 100644 wine-gecko.patch delete mode 100644 wine-imagemagick-6.5.patch delete mode 100644 wine-rpath.patch create mode 100644 wine-tahoma.conf create mode 100644 wine.systemd delete mode 100644 winepulse-0.38-winecfg.patch delete mode 100644 winepulse-0.39-configure.ac.patch delete mode 100644 winepulse-0.39.patch diff --git a/README-FEDORA-PULSEAUDIO b/README-FEDORA-PULSEAUDIO deleted file mode 100644 index 41645fb..0000000 --- a/README-FEDORA-PULSEAUDIO +++ /dev/null @@ -1,61 +0,0 @@ -Wine and Pulseaudio Support ---------------------------- -Currently wine does not have native support for pulseaudio. However, some -patches exist to make wine use a native pulseaudio backend (see [1]) -These have been included into the fedora wine package. If you have problems -please do _not_ report them to the wine project. - -Here are some useful configuration options taken from [1]: - -HKCU\Software\Wine\Drivers:Audio -A string which contains a comma seperated list of audio backends for wine to -try, in order of preference. For example “pulse,alsa,esd”. Settable through -winecfg. - -HKCU\Software\Wine\Pulse Driver:MonitorDevices -A string which contains Y or N. If Y, sink monitors will show up as input -devices. If N, only capture sources will be show up as input devices. -Default is Y. - -HKCU\Software\Wine\DirectSound:HardwareAcceleration -A string. Also settable in winecfg. When set to “Emulation” WaveOut will be -used for directsound, which is more likely to work, but will have more latency. -When set to “Full” the directsound driver is tried for directsound support, -resulting in less latency, but possibley failure or bad sound. - -[1] - http://art.ified.ca/?page_id=40 - -Other ways to get wine working with pulseaudio are described below: - -ALSA ----- -To achieve sound output via the wine alsa driver you need to add -a pulseaudio alsa device to the alsa configuration and activate it in wine. See -http://www.pulseaudio.org/wiki/PerfectSetup#ALSAApplications on how to do this. -For this alsa-plugins-pulseaudio.i386 should be installed. - - -Esound ------- -If the pulseaudio-esound-compat package is installed selecting the EsounD driver -in wine should enable sound via pulseaudio. - -OSS ---- -To use the oss driver of wine copy the following script to ~/bin/wine and make -sure that ~/bin is in your path with a higher priority then /usr/bin. The script -will call the pulseaudio dsp wrapper padsp. - -#!/bin/sh -if [ -x /usr/lib*/alsa-lib/libasound_module_pcm_pulse.so ] && [ -x "/usr/bin/padsp" ] ; then - echo "Running padsp as pulseaudio wrapper for wine" - exec padsp -n Wine -- /usr/bin/wine "$@" -else - exec /usr/bin/wine "$@" -fi - -For more information on a good pulseaudio setup see: -http://www.pulseaudio.org/wiki/PerfectSetup - -If you think you have found a bug related to this take a look at the bug -reporting procedure at http://fedoraproject.org/wiki/AndreasBierfert/Wine. diff --git a/wine-README-tahoma b/wine-README-tahoma new file mode 100644 index 0000000..777f302 --- /dev/null +++ b/wine-README-tahoma @@ -0,0 +1,19 @@ += wine-tahoma-fonts = +Wine provides the wine tahoma font family. In fedora embedded bitmaps are +turned of per default (/etc/fonts/conf.d/20-wine-tahoma-nobitmaps.conf) as +this will provide smother letters for most users. + +If you do not like the wine tahoma font experience but want to keep it +installed you can turn it of by adding the following to ~/.fonts.conf or by +adding a file containing the following to ~/.fonts.conf.d/: + + + + + + + +*/wine-tahoma-fonts/* + + + diff --git a/wine-chooser.sh b/wine-chooser.sh deleted file mode 100644 index d14f58a..0000000 --- a/wine-chooser.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -HAVE_32=false -HAVE_64=false - -if [ -x "/usr/bin/wine32" ]; then -HAVE_32=true -fi - -if [ -x "/usr/bin/wine64" ]; then -HAVE_64=true -fi - -if [ -f "${1}" ]; then - archtype=`file "${1}" | cut -d':' -f2 | cut -d' ' -f2` - - if [ ${archtype} = 'PE32+' ]; then # 64bit - if $HAVE_64; then - exec "/usr/bin/wine64" "${@}"; - elif [ `uname -m` = 'x86_64' ]; then - echo "Your are trying to run a 64bit application. Please install the 64bit version of wine." - echo "You can achieve this by running 'su -c \"yum install \\\"wine(x86-64)\\\"\"'" - else - echo "Your are trying to run a 64bit application on a 32bit installation of Fedora. You need a 64bit version of Fedora to run this application." - fi - else - if $HAVE_32; then - exec "/usr/bin/wine32" "${@}" - else - echo "Your are trying to run a 32bit application. Please install the 32bit version of wine." - echo "You can achieve this by running 'su -c \"yum install \\\"wine(x86-32)\\\"\"'" - fi - fi -else - if $HAVE_64; then - exec "/usr/bin/wine64" "${@}"; - else - exec "/usr/bin/wine32" "${@}"; - fi -fi diff --git a/wine-cjk.patch b/wine-cjk.patch new file mode 100644 index 0000000..ed7af8f --- /dev/null +++ b/wine-cjk.patch @@ -0,0 +1,22 @@ +Index: wine-1.7.22/loader/wine.inf.in +=================================================================== +--- wine-1.7.22.orig/loader/wine.inf.in ++++ wine-1.7.22/loader/wine.inf.in +@@ -568,6 +568,17 @@ HKLM,%FontSubStr%,"Times New Roman CE,23 + HKLM,%FontSubStr%,"Times New Roman CYR,204",,"Times New Roman,204" + HKLM,%FontSubStr%,"Times New Roman Greek,161",,"Times New Roman,161" + HKLM,%FontSubStr%,"Times New Roman TUR,162",,"Times New Roman,162" ++HKCU,Software\Wine\Fonts\Replacements,"SimSun",,"WenQuanYi Zen Hei Sharp" ++HKCU,Software\Wine\Fonts\Replacements,"PMingLiU",,"WenQuanYi Zen Hei Sharp" ++HKCU,Software\Wine\Fonts\Replacements,"MS Gothic",,"VL Gothic" ++HKCU,Software\Wine\Fonts\Replacements,"MS PGothic",,"VL PGothic" ++HKCU,Software\Wine\Fonts\Replacements,"MS UI Gothic",,"VL Gothic" ++HKCU,Software\Wine\Fonts\Replacements,"MS Mincho",,"IPAMincho" ++HKCU,Software\Wine\Fonts\Replacements,"MS PMincho",,"IPAPMincho" ++HKCU,Software\Wine\Fonts\Replacements,"Batang",,"NanumMyeongjo" ++HKCU,Software\Wine\Fonts\Replacements,"Dotum",,"NanumGothic" ++HKCU,Software\Wine\Fonts\Replacements,"Gulim",,"NanumGothic" ++HKCU,Software\Wine\Fonts\Replacements,"Arial Unicode MS",,"Droid Sans Fallback" + HKLM,System\CurrentControlSet\Hardware Profiles\Current\Software\Fonts,"LogPixels",0x10003,0x00000060 + + [MCI] diff --git a/wine-fonts.patch b/wine-fonts.patch deleted file mode 100644 index 72385ae..0000000 --- a/wine-fonts.patch +++ /dev/null @@ -1,204 +0,0 @@ ---- tools/wine.inf.in.orig 2010-05-26 07:41:44.000000000 +0200 -+++ tools/wine.inf.in 2010-05-26 07:46:15.000000000 +0200 -@@ -576,13 +576,14 @@ - HKLM,%FontSubStr%,"Courier New TUR,162",,"Courier New,162" - HKLM,%FontSubStr%,"Helv",,"MS Sans Serif" - HKLM,%FontSubStr%,"Helvetica",,"Arial" --HKLM,%FontSubStr%,"MS Shell Dlg 2",,"Tahoma" -+HKLM,%FontSubStr%,"MS Shell Dlg 2",,"Liberation Sans" - HKLM,%FontSubStr%,"Times",,"Times New Roman" - HKLM,%FontSubStr%,"Times New Roman Baltic,186",,"Times New Roman,186" - HKLM,%FontSubStr%,"Times New Roman CE,238",,"Times New Roman,238" - HKLM,%FontSubStr%,"Times New Roman CYR,204",,"Times New Roman,204" - HKLM,%FontSubStr%,"Times New Roman Greek,161",,"Times New Roman,161" - HKLM,%FontSubStr%,"Times New Roman TUR,162",,"Times New Roman,162" -+HKLM,%FontSubStr%,"MS Sans Serif",,"Liberation Serif" - HKLM,System\CurrentControlSet\Hardware Profiles\Current\Software\Fonts,"LogPixels",0x10003,0x00000060 - - [MCI] ---- dlls/gdi32/freetype.c.orig 2010-05-19 22:02:43.000000000 +0200 -+++ dlls/gdi32/freetype.c 2010-07-16 11:43:15.000000000 +0200 -@@ -400,7 +400,7 @@ - /* Interesting and well-known (frequently-assumed!) font names */ - static const WCHAR Lucida_Sans_Unicode[] = {'L','u','c','i','d','a',' ','S','a','n','s',' ','U','n','i','c','o','d','e',0}; - static const WCHAR Microsoft_Sans_Serif[] = {'M','i','c','r','o','s','o','f','t',' ','S','a','n','s',' ','S','e','r','i','f',0 }; --static const WCHAR Tahoma[] = {'T','a','h','o','m','a',0}; -+static const WCHAR Liberation[] = {'L','i','b','e','r','a','t','i','o','n',' ','S','a','n','s',0}; - static const WCHAR MS_UI_Gothic[] = {'M','S',' ','U','I',' ','G','o','t','h','i','c',0}; - static const WCHAR SimSun[] = {'S','i','m','S','u','n',0}; - static const WCHAR Gulim[] = {'G','u','l','i','m',0}; -@@ -494,6 +494,9 @@ - 'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','F','o','n','t','L','i','n','k','\\', - 'S','y','s','t','e','m','L','i','n','k',0}; - -+static const char liberationsans[] = {'Z',':','\\','u','s','r','\\','s','h','a','r','e','\\','f','o','n','t','s','\\','l','i','b','e','r','a','t','i','o','n','\\','L','i','b','e','r','a','t','i','o','n','S','a','n','s','-','R','e','g','u','l','a','r','.','t','t','f',0}; -+static const char liberationserif[] = {'Z',':','\\','u','s','r','\\','s','h','a','r','e','\\','f','o','n','t','s','\\','l','i','b','e','r','a','t','i','o','n','\\','L','i','b','e','r','a','t','i','o','n','S','e','r','i','f','-','R','e','g','u','l','a','r','.','t','t','f',0}; -+ - /**************************************** - * Notes on .fon files - * -@@ -1641,7 +1644,7 @@ - WCHAR *entry, *next; - SYSTEM_LINKS *font_link, *system_font_link; - CHILD_FONT *child_font; -- static const WCHAR tahoma_ttf[] = {'t','a','h','o','m','a','.','t','t','f',0}; -+ static const WCHAR liberation_ttf[] = {'L','i','b','e','r','a','t','i','o','n','S','a','n','s','-','R','e','g','u','l','a','r','.','t','t','f',0}; - static const WCHAR System[] = {'S','y','s','t','e','m',0}; - FONTSIGNATURE fs; - Family *family; -@@ -1723,25 +1726,25 @@ - RegCloseKey(hkey); - } - -- /* Explicitly add an entry for the system font, this links to Tahoma and any links -- that Tahoma has */ -+ /* Explicitly add an entry for the system font, this links to Liberation Sans and any links -+ that Liberation Sans has */ - - system_font_link = HeapAlloc(GetProcessHeap(), 0, sizeof(*system_font_link)); - system_font_link->font_name = strdupW(System); - list_init(&system_font_link->links); - -- face = find_face_from_filename(tahoma_ttf, Tahoma); -+ face = find_face_from_filename(liberation_ttf, Liberation); - if(face) - { - child_font = HeapAlloc(GetProcessHeap(), 0, sizeof(*child_font)); - child_font->face = face; - child_font->font = NULL; -- TRACE("Found Tahoma in %s index %ld\n", child_font->face->file, child_font->face->face_index); -+ TRACE("Found Liberation Sans in %s index %ld\n", child_font->face->file, child_font->face->face_index); - list_add_tail(&system_font_link->links, &child_font->entry); - } - LIST_FOR_EACH_ENTRY(font_link, &system_links, SYSTEM_LINKS, entry) - { -- if(!strcmpiW(font_link->font_name, Tahoma)) -+ if(!strcmpiW(font_link->font_name, Liberation)) - { - CHILD_FONT *font_link_entry; - LIST_FOR_EACH_ENTRY(font_link_entry, &font_link->links, CHILD_FONT, entry) -@@ -2193,21 +2196,21 @@ - /* Latin 1 (United States) */ - { 1252, 437, "vgaoem.fon", "vgafix.fon", "vgasys.fon", - "coure.fon", "serife.fon", "smalle.fon", "sserife.fon", -- "Tahoma","Times New Roman", -+ "Liberation Sans","Times New Roman", - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - { 0 }, { 0 }, { 0 } - }, - /* Latin 1 (Multilingual) */ - { 1252, 850, "vga850.fon", "vgafix.fon", "vgasys.fon", - "coure.fon", "serife.fon", "smalle.fon", "sserife.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - { 0 }, { 0 }, { 0 } - }, - /* Eastern Europe */ - { 1250, 852, "vga852.fon", "vgafixe.fon", "vgasyse.fon", - "couree.fon", "serifee.fon", "smallee.fon", "sserifee.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - "Fixedsys,238", "System,238", - "Courier New,238", "MS Serif,238", "Small Fonts,238", - "MS Sans Serif,238", "MS Sans Serif,238", "MS Serif,238", -@@ -2218,7 +2221,7 @@ - /* Cyrillic */ - { 1251, 866, "vga866.fon", "vgafixr.fon", "vgasysr.fon", - "courer.fon", "serifer.fon", "smaller.fon", "sserifer.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - "Fixedsys,204", "System,204", - "Courier New,204", "MS Serif,204", "Small Fonts,204", - "MS Sans Serif,204", "MS Sans Serif,204", "MS Serif,204", -@@ -2229,7 +2232,7 @@ - /* Greek */ - { 1253, 737, "vga869.fon", "vgafixg.fon", "vgasysg.fon", - "coureg.fon", "serifeg.fon", "smalleg.fon", "sserifeg.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - "Fixedsys,161", "System,161", - "Courier New,161", "MS Serif,161", "Small Fonts,161", - "MS Sans Serif,161", "MS Sans Serif,161", "MS Serif,161", -@@ -2240,7 +2243,7 @@ - /* Turkish */ - { 1254, 857, "vga857.fon", "vgafixt.fon", "vgasyst.fon", - "couret.fon", "serifet.fon", "smallet.fon", "sserifet.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - "Fixedsys,162", "System,162", - "Courier New,162", "MS Serif,162", "Small Fonts,162", - "MS Sans Serif,162", "MS Sans Serif,162", "MS Serif,162", -@@ -2251,7 +2254,7 @@ - /* Hebrew */ - { 1255, 862, "vgaoem.fon", "vgaf1255.fon", "vgas1255.fon", - "coue1255.fon", "sere1255.fon", "smae1255.fon", "ssee1255.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - "Fixedsys,177", "System,177", - "Courier New,177", "MS Serif,177", "Small Fonts,177", - "MS Sans Serif,177", "MS Sans Serif,177", "MS Serif,177", -@@ -2260,7 +2263,7 @@ - /* Arabic */ - { 1256, 720, "vgaoem.fon", "vgaf1256.fon", "vgas1256.fon", - "coue1256.fon", "sere1256.fon", "smae1256.fon", "ssee1256.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - "Fixedsys,178", "System,178", - "Courier New,178", "MS Serif,178", "Small Fonts,178", - "MS Sans Serif,178", "MS Sans Serif,178", "MS Serif,178", -@@ -2269,7 +2272,7 @@ - /* Baltic */ - { 1257, 775, "vga775.fon", "vgaf1257.fon", "vgas1257.fon", - "coue1257.fon", "sere1257.fon", "smae1257.fon", "ssee1257.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - "Fixedsys,186", "System,186", - "Courier New,186", "MS Serif,186", "Small Fonts,186", - "MS Sans Serif,186", "MS Sans Serif,186", "MS Serif,186", -@@ -2280,14 +2283,14 @@ - /* Vietnamese */ - { 1258, 1258, "vga850.fon", "vgafix.fon", "vgasys.fon", - "coure.fon", "serife.fon", "smalle.fon", "sserife.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - { 0 }, { 0 }, { 0 } - }, - /* Thai */ - { 874, 874, "vga850.fon", "vgaf874.fon", "vgas874.fon", - "coure.fon", "serife.fon", "smalle.fon", "ssee874.fon", -- "Tahoma","Times New Roman", /* FIXME unverified */ -+ "Liberation Sans","Times New Roman", /* FIXME unverified */ - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - { 0 }, { 0 }, { 0 } - }, -@@ -2325,7 +2328,7 @@ - { - Lucida_Sans_Unicode, - Microsoft_Sans_Serif, -- Tahoma -+ Liberation - }; - - static const struct font_links_defaults_list -@@ -2337,7 +2340,7 @@ - } font_links_defaults_list[] = - { - /* Non East-Asian */ -- { Tahoma, /* FIXME unverified ordering */ -+ { Liberation, /* FIXME unverified ordering */ - { MS_UI_Gothic, SimSun, Gulim, PMingLiU, NULL } - }, - /* Below lists are courtesy of -@@ -2399,8 +2402,8 @@ - static void add_font_list(HKEY hkey, const struct nls_update_font_list *fl) - { - RegSetValueExA(hkey, "Courier", 0, REG_SZ, (const BYTE *)fl->courier, strlen(fl->courier)+1); -- RegSetValueExA(hkey, "MS Serif", 0, REG_SZ, (const BYTE *)fl->serif, strlen(fl->serif)+1); -- RegSetValueExA(hkey, "MS Sans Serif", 0, REG_SZ, (const BYTE *)fl->sserif, strlen(fl->sserif)+1); -+ RegSetValueExA(hkey, "MS Serif", 0, REG_SZ, (const BYTE *)liberationserif, strlen(liberationserif)+1); -+ RegSetValueExA(hkey, "MS Sans Serif", 0, REG_SZ, (const BYTE *)liberationsans, strlen(liberationsans)+1); - RegSetValueExA(hkey, "Small Fonts", 0, REG_SZ, (const BYTE *)fl->small, strlen(fl->small)+1); - } - diff --git a/wine-gecko.patch b/wine-gecko.patch deleted file mode 100644 index 03d574d..0000000 --- a/wine-gecko.patch +++ /dev/null @@ -1,127 +0,0 @@ ---- dlls/mshtml/install.c.orig 2010-03-28 23:48:50.000000000 +0200 -+++ dlls/mshtml/install.c 2010-03-29 20:43:54.000000000 +0200 -@@ -284,6 +284,103 @@ - return ret; - } - -+static BOOL install_from_fedora_mingw32_wine_gecko(void) { -+ const char *data_dir, *subdir; -+ BOOL res; -+ -+ LPWSTR dos_dir_name; -+ LPSTR dos_dir_name_a; -+ static WCHAR *(*wine_get_dos_file_name)(const char*); -+ static const WCHAR kernel32W[] = {'k','e','r','n','e','l','3','2','.','d','l','l',0}; -+ -+ char install_dir[MAX_PATH]; -+ char gecko_dir[MAX_PATH]; -+ -+ SHFILEOPSTRUCTA sf; -+ -+ TRACE("()\n"); -+ -+ if((data_dir = wine_get_data_dir())) -+ subdir = "/gecko/"; -+ else if((data_dir = wine_get_build_dir())) -+ subdir = "/../gecko/"; -+ else -+ return FALSE; -+ -+ TRACE("data_dir=%s\n",data_dir); -+ TRACE("subdir=%s\n",subdir); -+ -+ memcpy(gecko_dir, data_dir, MAX_PATH); -+ strncat(gecko_dir, subdir, MAX_PATH-strlen(gecko_dir)); -+ strncat(gecko_dir, GECKO_VERSION, MAX_PATH-strlen(gecko_dir)); -+ strncat(gecko_dir, "/", MAX_PATH-strlen(gecko_dir)); -+ -+ if(!wine_get_dos_file_name) -+ wine_get_dos_file_name = (void*)GetProcAddress(GetModuleHandleW(kernel32W), "wine_get_dos_file_name"); -+ -+ if(wine_get_dos_file_name) { /* Wine UNIX mode */ -+ dos_dir_name = wine_get_dos_file_name(gecko_dir); -+ if(!dos_dir_name) { -+ ERR("Could not get dos file name of %s\n", debugstr_a(gecko_dir)); -+ return FALSE; -+ } -+ } else { -+ return FALSE; -+ } -+ -+ TRACE("gecko_dir=%s\n", debugstr_a(gecko_dir)); -+ TRACE("dos_dir_name=%s\n", debugstr_w(dos_dir_name)); -+ -+ -+ if(GetFileAttributesW(dos_dir_name) == INVALID_FILE_ATTRIBUTES) { -+ TRACE("mingw32-wine-gecko package not installed\n"); -+ return FALSE; -+ } -+ -+ GetSystemDirectoryA(install_dir, sizeof(install_dir)); -+ strncat(install_dir, "\\gecko\\",MAX_PATH-strlen(install_dir)); -+ res = CreateDirectoryA(install_dir, NULL); -+ if(!res && GetLastError() != ERROR_ALREADY_EXISTS) { -+ ERR("Could not create directory: %08u\n", GetLastError()); -+ return FALSE; -+ } -+ -+ strncat(install_dir, GECKO_VERSION, MAX_PATH-strlen(install_dir)); -+ res = CreateDirectoryA(install_dir, NULL); -+ if(!res && GetLastError() != ERROR_ALREADY_EXISTS) { -+ ERR("Could not create directory: %08u\n", GetLastError()); -+ return FALSE; -+ } -+ -+ TRACE("install_dir=%s\n",debugstr_a(install_dir)); -+ -+ dos_dir_name_a = heap_strdupWtoA(dos_dir_name); -+ -+ lstrcatA(dos_dir_name_a,"*.*"); -+ TRACE("dos_dir_name_a=%s\n",debugstr_a(dos_dir_name_a)); -+ -+ memset(&sf,0,sizeof(sf)); -+ sf.hwnd = 0; -+ sf.wFunc = FO_COPY; -+ sf.pFrom = dos_dir_name_a; -+ sf.pTo = install_dir; -+ sf.fFlags = FOF_NOCONFIRMATION, FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_SILENT; -+ res = SHFileOperationA(&sf); -+ -+ heap_free(dos_dir_name_a); -+ -+ if(res != 0) { -+ ERR("Could not copy files: %08u\n", GetLastError()); -+ return FALSE; -+ } -+ -+ set_registry(install_dir); -+ -+ clean_up(); -+ -+ return TRUE; -+} -+ - static HRESULT WINAPI InstallCallback_QueryInterface(IBindStatusCallback *iface, - REFIID riid, void **ppv) - { -@@ -541,7 +638,8 @@ - * - $datadir/gecko - * - download from URL stored in GeckoUrl value of HKCU/Software/MSHTML key - */ -- if(!install_from_registered_dir() -+ if ( !install_from_fedora_mingw32_wine_gecko() -+ && !install_from_registered_dir() - && !install_from_default_dir() - && !silent && (url = get_url())) - DialogBoxW(hInst, MAKEINTRESOURCEW(ID_DWL_DIALOG), 0, installer_proc); ---- dlls/mshtml/Makefile.in.orig 2010-08-04 22:56:36.000000000 +0200 -+++ dlls/mshtml/Makefile.in 2010-08-04 22:56:52.000000000 +0200 -@@ -4,7 +4,7 @@ - VPATH = @srcdir@ - MODULE = mshtml.dll - IMPORTLIB = mshtml --IMPORTS = strmiids uuid urlmon shlwapi ole32 oleaut32 user32 gdi32 advapi32 -+IMPORTS = strmiids uuid urlmon shlwapi ole32 oleaut32 user32 gdi32 advapi32 kernel32 shell32 - EXTRADEFS = -DCOM_NO_WINDOWS_H - DELAYIMPORTS = wininet - diff --git a/wine-imagemagick-6.5.patch b/wine-imagemagick-6.5.patch deleted file mode 100644 index a591f83..0000000 --- a/wine-imagemagick-6.5.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- configure.orig 2010-05-25 19:44:56.000000000 +0200 -+++ configure 2010-05-25 19:46:11.000000000 +0200 -@@ -5132,10 +5132,10 @@ - then - convert_version_major=`expr "$convert_version" : '.* \([0-9]*\)\.[0-9]*'` - convert_version_minor=`expr "$convert_version" : '.* [0-9]*\.\([0-9]*\)'` -- if test "$convert_version_major" -eq 6 -a "$convert_version_minor" -lt 6 -+ if test "$convert_version_major" -eq 6 -a "$convert_version_minor" -lt 5 - then - CONVERT=false -- as_fn_append wine_warnings "|imagemagick version 6.6 or newer is needed to rebuild icons." -+ as_fn_append wine_warnings "|imagemagick version 6.5 or newer is needed to rebuild icons." - fi - fi - if test "$CONVERT" = false ---- configure.ac.orig 2010-05-25 19:45:16.000000000 +0200 -+++ configure.ac 2010-05-25 19:46:44.000000000 +0200 -@@ -303,10 +303,10 @@ - then - convert_version_major=`expr "$convert_version" : '.* \([[0-9]]*\)\.[[0-9]]*'` - convert_version_minor=`expr "$convert_version" : '.* [[0-9]]*\.\([[0-9]]*\)'` -- if test "$convert_version_major" -eq 6 -a "$convert_version_minor" -lt 6 -+ if test "$convert_version_major" -eq 6 -a "$convert_version_minor" -lt 5 - then - CONVERT=false -- WINE_WARNING([imagemagick version 6.6 or newer is needed to rebuild icons.]) -+ WINE_WARNING([imagemagick version 6.5 or newer is needed to rebuild icons.]) - fi - fi - if test "$CONVERT" = false diff --git a/wine-mime-msi.desktop b/wine-mime-msi.desktop index 5dcaa46..60e7bef 100644 --- a/wine-mime-msi.desktop +++ b/wine-mime-msi.desktop @@ -1,6 +1,7 @@ [Desktop Entry] Type=Application Name=Windows Installer File +Name[ar]=مثبت حزم واين Exec=wine %f MimeType=application/x-ole-storage;text/mspg-legacyinfo; Hidden=true diff --git a/wine-notepad.desktop b/wine-notepad.desktop index cfaf6b4..b8af5b9 100644 --- a/wine-notepad.desktop +++ b/wine-notepad.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=Notepad Comment=Text Editor +Name[ar]=مفكرة +Comment[ar]=محرر النّصوص مفكرة واين Exec=notepad Icon=notepad Terminal=false diff --git a/wine-oleview.desktop b/wine-oleview.desktop index 8f94f38..d30f78f 100644 --- a/wine-oleview.desktop +++ b/wine-oleview.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=Wine OLE View Comment=Windows OLE View +Name[ar]=عارض العناصر +Comment[ar]=لعرض العناصر البيئية في واين Exec=wine oleview Icon=wine Terminal=false diff --git a/wine-regedit.desktop b/wine-regedit.desktop index 5fddbf4..c39cfa0 100644 --- a/wine-regedit.desktop +++ b/wine-regedit.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=Regedit Comment=Wine registry editor +Name[ar]=محرر السّجل +Comment[ar]=محرر لسجلات واين Exec=regedit Icon=regedit Terminal=false diff --git a/wine-rpath.patch b/wine-rpath.patch deleted file mode 100644 index 3a66716..0000000 --- a/wine-rpath.patch +++ /dev/null @@ -1,45 +0,0 @@ ---- configure.old 2010-04-02 20:43:45.000000000 +0300 -+++ configure 2010-04-03 23:26:57.365947610 +0300 -@@ -6727,14 +6727,14 @@ - - fi - -- as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,--rpath,\\$ORIGIN/../lib" | $as_tr_sh` --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib" >&5 --$as_echo_n "checking whether the compiler supports -fPIC -Wl,--rpath,\$ORIGIN/../lib... " >&6; } -+ as_ac_var=`$as_echo "ac_cv_cflags_-fPIC" | $as_tr_sh` -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC" >&5 -+$as_echo_n "checking whether the compiler supports -fPIC" >&6; } - if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 - else - ac_wine_try_cflags_saved=$CFLAGS --CFLAGS="$CFLAGS -fPIC -Wl,--rpath,\$ORIGIN/../lib" -+CFLAGS="$CFLAGS -fPIC" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - int main(int argc, char **argv) { return 0; } -@@ -6752,17 +6752,17 @@ - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 - $as_echo "$ac_res" >&6; } - if test `eval 'as_val=${'$as_ac_var'};$as_echo "$as_val"'` = yes; then : -- LDRPATH_INSTALL="-Wl,--rpath,\\\$\$ORIGIN/\`\$(RELPATH) \$(bindir) \$(libdir)\`" -- LDRPATH_LOCAL="-Wl,--rpath,\\\$\$ORIGIN/\$(TOPOBJDIR)/libs/wine" -+ LDRPATH_INSTALL="" -+ LDRPATH_LOCAL="" - else -- as_ac_var=`$as_echo "ac_cv_cflags_-fPIC -Wl,-R,\\$ORIGIN/../lib" | $as_tr_sh` --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib" >&5 --$as_echo_n "checking whether the compiler supports -fPIC -Wl,-R,\$ORIGIN/../lib... " >&6; } -+ as_ac_var=`$as_echo "ac_cv_cflags_-fPIC" | $as_tr_sh` -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports -fPIC" >&5 -+$as_echo_n "checking whether the compiler supports -fPIC" >&6; } - if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then : - $as_echo_n "(cached) " >&6 - else - ac_wine_try_cflags_saved=$CFLAGS --CFLAGS="$CFLAGS -fPIC -Wl,-R,\$ORIGIN/../lib" -+CFLAGS="$CFLAGS -fPIC" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext - /* end confdefs.h. */ - int main(int argc, char **argv) { return 0; } diff --git a/wine-tahoma.conf b/wine-tahoma.conf new file mode 100644 index 0000000..d8af439 --- /dev/null +++ b/wine-tahoma.conf @@ -0,0 +1,11 @@ + + + + + + + + Tahoma + false + + diff --git a/wine-uninstaller.desktop b/wine-uninstaller.desktop index 2a9cf52..6087726 100644 --- a/wine-uninstaller.desktop +++ b/wine-uninstaller.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=Wine Software Uninstaller Comment=Interface to uninstall software +Name[ar]=مزيل التطبيقات من واين +Comment[ar]=واجهة إزالة التّطبيقات من واين Exec=wine uninstaller Icon=msiexec Terminal=false diff --git a/wine-wineboot.desktop b/wine-wineboot.desktop index 1ecba53..9796c13 100644 --- a/wine-wineboot.desktop +++ b/wine-wineboot.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=Wine Boot Comment=Simulate restart +Name[ar]=إقلاع واين +Comment[ar]=محاكاة إعادة التشغيل لواين Exec=wineboot Icon=wine Terminal=false diff --git a/wine-winecfg.desktop b/wine-winecfg.desktop index 44b13c2..6204af2 100644 --- a/wine-winecfg.desktop +++ b/wine-winecfg.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=Wine Configuration Comment=Interface to set wine parameters +Name[ar]=إعدادات واين +Comment[ar]=لوحة تحكم بمنظومة واين Exec=winecfg Icon=winecfg Terminal=false diff --git a/wine-winefile.desktop b/wine-winefile.desktop index 855dcbf..d87955b 100644 --- a/wine-winefile.desktop +++ b/wine-winefile.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=Wine File Comment=Wine File Browser +Name[ar]=مدير ملفات واين +Comment[ar]=إدارة الملفات بطريقة واين Exec=winefile Icon=winefile Terminal=false diff --git a/wine-winemine.desktop b/wine-winemine.desktop index 34712f9..a7816de 100644 --- a/wine-winemine.desktop +++ b/wine-winemine.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=WineMine -Comment=Wine Minesweeper +Comment=Wine Minesweeper +Name[ar]=كانسة ألغام واين +Comment[ar]=لعبة كانسة ألغام واين Exec=winemine Icon=winemine Terminal=false diff --git a/wine-winhelp.desktop b/wine-winhelp.desktop index 2752518..db97819 100644 --- a/wine-winhelp.desktop +++ b/wine-winhelp.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=Wine Help Comment=Windows Help Browser +Name[ar]=أداة المساعدة في واين +Comment[ar]=استعراض ملفات المساعدة بتنسيقات وندوز Exec=wine winhlp32 Icon=winhelp Terminal=false diff --git a/wine-wordpad.desktop b/wine-wordpad.desktop index 1fe4ecd..032fdbc 100644 --- a/wine-wordpad.desktop +++ b/wine-wordpad.desktop @@ -1,6 +1,8 @@ [Desktop Entry] Name=Wine Wordpad Comment=Text Editor +Name[ar]=دفتر واين +Comment[ar]=محرر النّصوص دفتر واين Exec=wine wordpad Icon=wordpad Terminal=false diff --git a/wine.init b/wine.init index 8162bb8..990bb83 100644 --- a/wine.init +++ b/wine.init @@ -7,9 +7,12 @@ # description: Allow users to run Windows(tm) applications by just clicking \ # on them (or typing ./file.exe) ### BEGIN INIT INFO +# Provides: wine-binfmt +# Required-Start: +# Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 -# Short-Description: start and stop wine binary handler +# Short-Description: Add and remove wine binary handler # Description: Allow users to run Windows(tm) applications by just clicking # on them (or typing ./file.exe) ### END INIT INFO @@ -67,6 +70,10 @@ case "$1" in stop start ;; + reload) + stop + start + ;; condrestart|try-restart) if [ -e /proc/sys/fs/binfmt_misc/windows ]; then @@ -75,7 +82,7 @@ case "$1" in fi ;; *) - echo $"Usage: $prog {start|stop|status|restart|try-restart}" + echo $"Usage: $prog {start|stop|status|restart|reload|try-restart}" exit 1 esac exit $RETVAL diff --git a/wine.spec b/wine.spec index 0f1c95e..5f0926d 100644 --- a/wine.spec +++ b/wine.spec @@ -35,8 +35,8 @@ Source2: wine.systemd Source3: wine-README-Fedora Source4: wine-32.conf Source5: wine-64.conf -Source6: wine-chooser.sh -# desktop stuff + +# desktop files Source100: wine-notepad.desktop Source101: wine-regedit.desktop Source102: wine-uninstaller.desktop @@ -48,6 +48,10 @@ Source107: wine-wineboot.desktop Source108: wine-wordpad.desktop Source109: wine-oleview.desktop +# build fixes + +# wine bugs + # desktop dir Source200: wine.menu Source201: wine.directory @@ -55,29 +59,20 @@ Source201: wine.directory # mime types Source300: wine-mime-msi.desktop -Patch1: wine-rpath.patch -# bugfixes -# fix for #593140 -Patch100: wine-fonts.patch -# -Patch200: wine-imagemagick-6.5.patch +# smooth tahoma (#693180) +# disable embedded bitmaps +Source501: wine-tahoma.conf +# and provide a readme +Source502: wine-README-tahoma -# explain how to use wine with pulseaudio -# 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/winepulse-0.38-configure.ac.patch -Patch401: http://art.ified.ca/downloads/winepulse/winepulse-0.38.patch -Patch402: http://art.ified.ca/downloads/winepulse/winepulse-0.38-winecfg.patch -Source402: README-FEDORA-PULSEAUDIO +Patch511: wine-cjk.patch - - -# enhancements -# add wine-gecko support -Patch1000: wine-gecko.patch - -Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +%if 0%{?wine_staging} +# wine-staging patches +# pulseaudio-patch is covered by that patch-set, too. +Source900: https://github.com/wine-staging/wine-staging/archive/v%{version}.tar.gz#/wine-staging-%{version}.tar.gz +%endif %if !%{?no64bit} # aarch64 now requires clang >= 5 @@ -86,16 +81,20 @@ Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %if 0%{?rhel} >= 7 ExclusiveArch: %{ix86} x86_64 %{arm} %else -ExclusiveArch: %{ix86} +ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 +%endif +%else +ExclusiveArch: %{ix86} %{arm} %endif BuildRequires: bison BuildRequires: flex +BuildRequires: gcc BuildRequires: autoconf BuildRequires: desktop-file-utils BuildRequires: alsa-lib-devel BuildRequires: freeglut-devel -BuildRequires: lcms-devel +BuildRequires: lcms2-devel BuildRequires: libieee1284-devel BuildRequires: libjpeg-devel BuildRequires: libpng-devel @@ -106,10 +105,15 @@ BuildRequires: libusb-devel BuildRequires: libxml2-devel BuildRequires: libxslt-devel BuildRequires: ncurses-devel +%if 0%{?fedora} +BuildRequires: ocl-icd-devel +BuildRequires: opencl-headers +%endif BuildRequires: openldap-devel +BuildRequires: perl-generators BuildRequires: unixODBC-devel -BuildRequires: openssl-devel BuildRequires: sane-backends-devel +BuildRequires: systemd-devel BuildRequires: zlib-devel BuildRequires: fontforge freetype-devel BuildRequires: libgphoto2-devel @@ -119,7 +123,7 @@ BuildRequires: isdn4k-utils-devel BuildRequires: libpcap-devel # modular x BuildRequires: libX11-devel -BuildRequires: mesa-libGL-devel mesa-libGLU-devel +BuildRequires: mesa-libGL-devel mesa-libGLU-devel mesa-libOSMesa-devel BuildRequires: libXxf86dga-devel libXxf86vm-devel BuildRequires: libXrandr-devel libXrender-devel BuildRequires: libXext-devel @@ -131,34 +135,64 @@ BuildRequires: cups-devel BuildRequires: libXmu-devel BuildRequires: libXi-devel BuildRequires: libXcursor-devel -BuildRequires: dbus-devel hal-devel +BuildRequires: dbus-devel BuildRequires: gnutls-devel BuildRequires: pulseaudio-libs-devel BuildRequires: gsm-devel BuildRequires: libv4l-devel BuildRequires: fontpackages-devel -BuildRequires: ImageMagick-devel +BuildRequires: libtiff-devel +BuildRequires: gettext-devel +BuildRequires: chrpath +BuildRequires: gstreamer1-devel +BuildRequires: gstreamer1-plugins-base-devel +BuildRequires: mpg123-devel +BuildRequires: SDL2-devel +BuildRequires: libvkd3d-devel +BuildRequires: vulkan-devel + +# Silverlight DRM-stuff needs XATTR enabled. +%if 0%{?wine_staging} +BuildRequires: gtk3-devel +BuildRequires: libattr-devel +BuildRequires: libva-devel +%endif # 0%{?wine_staging} %if 0%{?fedora} >= 10 || 0%{?rhel} >= 6 BuildRequires: openal-soft-devel -%endif - -%if 0%{?fedora} >= 10 BuildRequires: icoutils %endif - +Requires: wine-common = %{version}-%{release} Requires: wine-desktop = %{version}-%{release} Requires: wine-fonts = %{version}-%{release} -# 32bit parts +# x86-32 parts +%ifarch %{ix86} x86_64 +%if 0%{?fedora} || 0%{?rhel} <= 6 Requires: wine-core(x86-32) = %{version}-%{release} Requires: wine-capi(x86-32) = %{version}-%{release} Requires: wine-cms(x86-32) = %{version}-%{release} Requires: wine-ldap(x86-32) = %{version}-%{release} Requires: wine-twain(x86-32) = %{version}-%{release} Requires: wine-pulseaudio(x86-32) = %{version}-%{release} -# 64bit +%if 0%{?fedora} >= 10 || 0%{?rhel} == 6 +Requires: wine-openal(x86-32) = %{version}-%{release} +%endif +%if 0%{?fedora} +Requires: wine-opencl(x86-32) = %{version}-%{release} +%endif +%if 0%{?fedora} >= 17 +Requires: mingw32-wine-gecko = %winegecko +Requires: wine-mono = %winemono +%endif +# wait for rhbz#968860 to require arch-specific samba-winbind-clients +Requires: /usr/bin/ntlm_auth +Requires: mesa-dri-drivers(x86-32) +%endif +%endif + +# x86-64 parts %ifarch x86_64 Requires: wine-core(x86-64) = %{version}-%{release} Requires: wine-capi(x86-64) = %{version}-%{release} @@ -166,79 +200,204 @@ Requires: wine-cms(x86-64) = %{version}-%{release} Requires: wine-ldap(x86-64) = %{version}-%{release} Requires: wine-twain(x86-64) = %{version}-%{release} Requires: wine-pulseaudio(x86-64) = %{version}-%{release} -Requires: wine-wow(x86-64) = %{version}-%{release} -Conflicts: wine-wow(x86-32) = %{version}-%{release} +%if 0%{?fedora} >= 10 || 0%{?rhel} >= 6 +Requires: wine-openal(x86-64) = %{version}-%{release} +%endif +%if 0%{?fedora} +Requires: wine-opencl(x86-64) = %{version}-%{release} +%endif +%if 0%{?fedora} >= 17 +Requires: mingw64-wine-gecko = %winegecko +Requires: wine-mono = %winemono +%endif +Requires: mesa-dri-drivers(x86-64) %endif -# 32bit only parts -%ifarch %{ix86} -Requires: wine-wow(x86-32) = %{version}-%{release} +# ARM parts +%ifarch %{arm} aarch64 +Requires: wine-core = %{version}-%{release} +Requires: wine-capi = %{version}-%{release} +Requires: wine-cms = %{version}-%{release} +Requires: wine-ldap = %{version}-%{release} +Requires: wine-twain = %{version}-%{release} +Requires: wine-pulseaudio = %{version}-%{release} +Requires: wine-openal = %{version}-%{release} +%if 0%{?fedora} +Requires: wine-opencl = %{version}-%{release} +%endif +Requires: mesa-dri-drivers +Requires: samba-winbind-clients +%endif + +# aarch64 parts +%ifarch aarch64 +Requires: wine-core(aarch-64) = %{version}-%{release} +Requires: wine-capi(aarch-64) = %{version}-%{release} +Requires: wine-cms(aarch-64) = %{version}-%{release} +Requires: wine-ldap(aarch-64) = %{version}-%{release} +Requires: wine-twain(aarch-64) = %{version}-%{release} +Requires: wine-pulseaudio(aarch-64) = %{version}-%{release} +Requires: wine-openal(aarch-64) = %{version}-%{release} +Requires: wine-opencl(aarch-64) = %{version}-%{release} +Requires: mingw64-wine-gecko = %winegecko +Requires: mesa-dri-drivers(aarch-64) %endif %description -While Wine is usually thought of as a Windows(TM) emulator, the Wine -developers would prefer that users thought of Wine as a Windows -compatibility layer for UNIX. This package includes a program loader, -which allows unmodified Windows 3.x/9x/NT binaries to run on x86 and x86_64 -Unixes. Wine does not require MS Windows, but it can use native system +Wine as a compatibility layer for UNIX to run Windows applications. This +package includes a program loader, which allows unmodified Windows +3.x/9x/NT binaries to run on x86 and x86_64 Unixes. Wine can use native system .dll files if they are available. In Fedora wine is a meta-package which will install everything needed for wine -to work smoothly. Smaller setups can be achieved by installing some of the +to work smoothly. Smaller setups can be achieved by installing some of the wine-* sub packages. %package core Summary: Wine core package -Group: Applications/Emulators +Group: Applications/Emulators Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig -Obsoletes: wine <= 0.9.15-1%{?dist} -Obsoletes: wine-arts < 0.9.34 -Obsoletes: wine-tools <= 1.1.27 -Provides: wine-tools = %{version}-%{release} -# require -common so we get wine.inf (#528335) -Requires: wine-common = %{version}-%{release} -# fix dns resolution (#492700) -# require both to be sure 64bit is present as well... +Requires(posttrans): %{_sbindir}/alternatives +Requires(preun): %{_sbindir}/alternatives + +# require -filesystem +Requires: wine-filesystem = %{version}-%{release} + %ifarch %{ix86} +# CUPS support uses dlopen - rhbz#1367537 +Requires: cups-libs(x86-32) Requires: freetype(x86-32) Requires: nss-mdns(x86-32) -# require Xrender isa on x86_64 (#510947) -Requires: libXrender(x86-32) Requires: gnutls(x86-32) +Requires: libXcomposite(x86-32) +Requires: libXcursor(x86-32) +Requires: libXinerama(x86-32) +Requires: libXrandr(x86-32) +Requires: libXrender(x86-32) +#dlopen in windowscodesc (fixes rhbz#1085075) +Requires: libpng(x86-32) +Requires: libpcap(x86-32) +Requires: mesa-libOSMesa(x86-32) +Requires: libv4l(x86-32) +Requires: unixODBC(x86-32) +Requires: SDL2(x86-32) +Requires: vulkan(x86-32) +%if 0%{?wine_staging} +Requires: libva(x86-32) %endif -%ifarch x86_64 -Requires: nss-mdns(x86-64) -Requires: freetype(x86-64) -Requires: gnutls(x86-64) %endif +%ifarch x86_64 +# CUPS support uses dlopen - rhbz#1367537 +Requires: cups-libs(x86-64) +Requires: freetype(x86-64) +Requires: nss-mdns(x86-64) +Requires: gnutls(x86-64) +Requires: libXcomposite(x86-64) +Requires: libXcursor(x86-64) +Requires: libXinerama(x86-64) +Requires: libXrandr(x86-64) +Requires: libXrender(x86-64) +#dlopen in windowscodesc (fixes rhbz#1085075) +Requires: libpng(x86-64) +Requires: libpcap(x86-64) +Requires: mesa-libOSMesa(x86-64) +Requires: libv4l(x86-64) +Requires: unixODBC(x86-64) +Requires: SDL2(x86-64) +Requires: vulkan(x86-64) +%if 0%{?wine_staging} +Requires: libva(x86-64) +%endif +%endif + +%ifarch %{arm} aarch64 +# CUPS support uses dlopen - rhbz#1367537 +Requires: cups-libs +Requires: freetype +Requires: nss-mdns +Requires: gnutls +Requires: libXrender +Requires: libXcursor +#dlopen in windowscodesc (fixes rhbz#1085075) +Requires: libpng +Requires: libpcap +Requires: mesa-libOSMesa +Requires: libv4l +Requires: unixODBC +Requires: SDL2 +Requires: vulkan +%if 0%{?wine_staging} +Requires: libva +%endif +%endif + +# removed as of 1.7.35 +Obsoletes: wine-wow < 1.7.35 +Provides: wine-wow = %{version}-%{release} %description core Wine core package includes the basic wine stuff needed by all other packages. -%package wow -Summary: Files for wine wow seperation +%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7 +%package systemd +Summary: Systemd config for the wine binfmt handler Group: Applications/Emulators -%ifarch x86_64 -Requires: wine-core(x86-64) = %{version}-%{release} -%else -Requires: wine-core(x86-32) = %{version}-%{release} +Requires: systemd >= 23 +BuildArch: noarch +Requires(post): systemd +Requires(postun): systemd +Obsoletes: wine-sysvinit < %{version}-%{release} + +%description systemd +Register the wine binary handler for windows executables via systemd binfmt +handling. See man binfmt.d for further information. %endif +%if 0%{?rhel} == 6 +%package sysvinit +Summary: SysV initscript for the wine binfmt handler +Group: Applications/Emulators +BuildArch: noarch +Requires(post): /sbin/chkconfig, /sbin/service +Requires(preun): /sbin/chkconfig, /sbin/service -%description wow -%{summary} +%description sysvinit +Register the wine binary handler for windows executables via SysV init files. +%endif + +%package filesystem +Summary: Filesystem directories for wine +Group: Applications/Emulators +BuildArch: noarch + +%description filesystem +Filesystem directories and basic configuration for wine. + +%package common +Summary: Common files +Group: Applications/Emulators +Requires: wine-core = %{version}-%{release} +BuildArch: noarch + +%description common +Common wine files and scripts. %package desktop Summary: Desktop integration features for wine Group: Applications/Emulators -Requires(post): /sbin/chkconfig, /sbin/service, Requires(post): desktop-file-utils >= 0.8 -Requires(preun): /sbin/chkconfig, /sbin/service Requires(postun): desktop-file-utils >= 0.8 -Requires: wine-core(x86-32) = %{version}-%{release} +Requires: wine-core = %{version}-%{release} Requires: wine-common = %{version}-%{release} +%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7 +Requires: wine-systemd = %{version}-%{release} +%endif +%if 0%{?rhel} == 6 +Requires: wine-sysvinit = %{version}-%{release} +%endif +Requires: hicolor-icon-theme BuildArch: noarch %description desktop @@ -249,13 +408,28 @@ handler service. Summary: Wine font files Group: Applications/Emulators BuildArch: noarch +# arial-fonts are available with wine-staging patchset, only. +%if 0%{?wine_staging} +Requires: wine-arial-fonts = %{version}-%{release} +%else # 0%{?wine_staging} +Obsoletes: wine-arial-fonts <= %{version}-%{release} +%endif # 0%{?wine_staging} Requires: wine-courier-fonts = %{version}-%{release} +Requires: wine-fixedsys-fonts = %{version}-%{release} Requires: wine-small-fonts = %{version}-%{release} Requires: wine-system-fonts = %{version}-%{release} Requires: wine-marlett-fonts = %{version}-%{release} -#Requires: wine-ms-sans-serif-fonts = %{version}-%{release} -#Requires: wine-tahoma-fonts = %{version}-%{release} +Requires: wine-ms-sans-serif-fonts = %{version}-%{release} +Requires: wine-tahoma-fonts = %{version}-%{release} +# times-new-roman-fonts are available with wine_staging-patchset, only. +%if 0%{?wine_staging} +Requires: wine-times-new-roman-fonts = %{version}-%{release} +%else # 0%{?wine_staging} +Obsoletes: wine-times-new-roman-fonts <= %{version}-%{release} +Obsoletes: wine-times-new-roman-fonts-system <= %{version}-%{release} +%endif # 0%{?wine_staging} Requires: wine-symbol-fonts = %{version}-%{release} +Requires: wine-wingdings-fonts = %{version}-%{release} # intermediate fix for #593140 Requires: liberation-sans-fonts liberation-serif-fonts liberation-mono-fonts %if 0%{?fedora} > 12 @@ -265,6 +439,17 @@ Requires: liberation-narrow-fonts %description fonts %{summary} +%if 0%{?wine_staging} +%package arial-fonts +Summary: Wine Arial font family +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem + +%description arial-fonts +%{summary} +%endif # 0%{?wine_staging} + %package courier-fonts Summary: Wine Courier font family Group: User Interface/X @@ -274,6 +459,15 @@ Requires: fontpackages-filesystem %description courier-fonts %{summary} +%package fixedsys-fonts +Summary: Wine Fixedsys font family +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem + +%description fixedsys-fonts +%{summary} + %package small-fonts Summary: Wine Small font family Group: User Interface/X @@ -303,25 +497,60 @@ Requires: fontpackages-filesystem %{summary} -#%package ms-sans-serif-fonts -#Summary: Wine MS Sans Serif font family -#Group: User Interface/X -#BuildArch: noarch -#Requires: fontpackages-filesystem +%package ms-sans-serif-fonts +Summary: Wine MS Sans Serif font family +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem -#%description ms-sans-serif-fonts -#%{summary} +%description ms-sans-serif-fonts +%{summary} +# rhbz#693180 +# http://lists.fedoraproject.org/pipermail/devel/2012-June/168153.html +%package tahoma-fonts +Summary: Wine Tahoma font family +Group: User Interface/X +BuildArch: noarch +Requires: wine-filesystem = %{version}-%{release} -#%package tahoma-fonts -#Summary: Wine Tahoma font family -#Group: User Interface/X -#BuildArch: noarch -#Requires: fontpackages-filesystem +%description tahoma-fonts +%{summary} +Please note: If you want system integration for wine tahoma fonts install the +wine-tahoma-fonts-system package. -#%description tahoma-fonts -#%{summary} +%package tahoma-fonts-system +Summary: Wine Tahoma font family system integration +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem +Requires: wine-tahoma-fonts = %{version}-%{release} +%description tahoma-fonts-system +%{summary} + +%if 0%{?wine_staging} +%package times-new-roman-fonts +Summary: Wine Times New Roman font family +Group: User Interface/X +BuildArch: noarch +Requires: wine-filesystem = %{version}-%{release} + +%description times-new-roman-fonts +%{summary} +Please note: If you want system integration for wine times new roman fonts install the +wine-times-new-roman-fonts-system package. + +%package times-new-roman-fonts-system +Summary: Wine Times New Roman font family system integration +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem +Requires: wine-times-new-roman-fonts = %{version}-%{release} + +%description times-new-roman-fonts-system +%{summary} +%endif %package symbol-fonts Summary: Wine Symbol font family @@ -332,44 +561,27 @@ Requires: fontpackages-filesystem %description symbol-fonts %{summary} -%package common -Summary: Common files -Group: Applications/Emulators -Requires: wine-core = %{version}-%{release} -BuildArch: noarch +%package wingdings-fonts +Summary: Wine Wingdings font family +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem -%description common -Common wine files and scripts. +%description wingdings-fonts +%{summary} +Please note: If you want system integration for wine wingdings fonts install the +wine-wingdings-fonts-system package. -%package esd -Summary: ESD sound support for wine -Group: System Environment/Libraries -Requires: wine-core = %{version}-%{release} +%package wingdings-fonts-system +Summary: Wine Wingdings font family system integration +Group: User Interface/X +BuildArch: noarch +Requires: fontpackages-filesystem +Requires: wine-wingdings-fonts = %{version}-%{release} -%description esd -ESD sound support for wine +%description wingdings-fonts-system +%{summary} -%package jack -Summary: JACK sound support for wine -Group: System Environment/Libraries -Requires: wine-core = %{version}-%{release} -%ifarch %{ix86} -Requires: jack-audio-connection-kit(x86-32) -%endif -%ifarch x86_64 -Requires: jack-audio-connection-kit(x86-64) -%endif - -%description jack -JACK sound support for wine - -%package nas -Summary: NAS sound support for wine -Group: System Environment/Libraries -Requires: wine-core = %{version}-%{release} - -%description nas -NAS sound support for wine %package ldap Summary: LDAP support for wine @@ -391,6 +603,15 @@ Color Management for wine Summary: Twain support for wine Group: System Environment/Libraries Requires: wine-core = %{version}-%{release} +%ifarch %{ix86} +Requires: sane-backends-libs(x86-32) +%endif +%ifarch x86_64 +Requires: sane-backends-libs(x86-64) +%endif +%ifarch %{arm} aarch64 +Requires: sane-backends-libs +%endif %description twain Twain support for wine @@ -399,6 +620,15 @@ Twain support for wine Summary: ISDN support for wine Group: System Environment/Libraries Requires: wine-core = %{version}-%{release} +%ifarch x86_64 +Requires: isdn4k-utils(x86-64) +%endif +%ifarch %{ix86} +Requires: isdn4k-utils(x86-32) +%endif +%ifarch %{arm} aarch64 +Requires: isdn4k-utils +%endif %description capi ISDN support for wine @@ -416,10 +646,11 @@ with the Wine Windows(TM) emulation libraries. Summary: Pulseaudio support for wine Group: System Environment/Libraries Requires: wine-core = %{version}-%{release} +# midi output +Requires: wine-alsa%{?_isa} = %{version}-%{release} %description pulseaudio -This package adds a native pulseaudio driver for wine. This is not an official -wine audio driver. Please do not report bugs regarding this driver at winehq.org. +This package adds a pulseaudio driver for wine. %package alsa Summary: Alsa support for wine @@ -429,14 +660,6 @@ Requires: wine-core = %{version}-%{release} %description alsa This package adds an alsa driver for wine. -%package oss -Summary: OSS support for wine -Group: System Environment/Libraries -Requires: wine-core = %{version}-%{release} - -%description oss -This package adds an oss driver for wine. - %if 0%{?fedora} >= 10 || 0%{?rhel} >= 6 %package openal Summary: Openal support for wine @@ -447,49 +670,101 @@ Requires: wine-core = %{version}-%{release} This package adds an openal driver for wine. %endif +%if 0%{?fedora} +%package opencl +Summary: OpenCL support for wine +Requires: wine-core = %{version}-%{release} + +%Description opencl +This package adds the opencl driver for wine. +%endif + %prep -%setup -q +%setup -q -n wine-%{version} +%patch511 -p1 -b.cjk -%patch1 -%patch100 -%patch200 -%patch400 -p1 -%patch401 -p1 -%patch402 -p1 -%patch1000 +%if 0%{?wine_staging} +# setup and apply wine-staging patches +gzip -dc %{SOURCE900} | tar -xf - --strip-components=1 -autoreconf +patches/patchinstall.sh DESTDIR="`pwd`" --all + +# fix parallelized build +sed -i -e 's!^loader server: libs/port libs/wine tools.*!& include!' Makefile.in + +%endif # 0%{?wine_staging} %build -export CFLAGS="$RPM_OPT_FLAGS -Wno-error" -%configure \ - --sysconfdir=%{_sysconfdir}/wine \ - --x-includes=%{_includedir} --x-libraries=%{_libdir} \ - --with-pulse \ - --with-x \ -%ifarch x86_64 - --enable-win64 \ -%endif - --enable-maintainer-mode \ - --disable-tests -%{__make} TARGETFLAGS="" %{?_smp_mflags} +# disable fortify as it breaks wine +# http://bugs.winehq.org/show_bug.cgi?id=24606 +# http://bugs.winehq.org/show_bug.cgi?id=25073 +export CFLAGS="`echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//'` -Wno-error" + +%configure \ + --sysconfdir=%{_sysconfdir}/wine \ + --x-includes=%{_includedir} --x-libraries=%{_libdir} \ + --without-hal --with-dbus \ + --with-x \ +%ifarch %{arm} + --with-float-abi=hard \ +%endif +%ifarch x86_64 aarch64 + --enable-win64 \ +%endif +%{?wine_staging: --with-xattr} \ + --disable-tests + +make %{?_smp_mflags} TARGETFLAGS="" %install -rm -rf %{buildroot} %makeinstall \ - includedir=%{buildroot}%{_includedir}/wine \ - sysconfdir=%{buildroot}%{_sysconfdir}/wine \ - dlldir=%{buildroot}%{_libdir}/wine \ - LDCONFIG=/bin/true \ - UPDATE_DESKTOP_DATABASE=/bin/true + includedir=%{buildroot}%{_includedir} \ + sysconfdir=%{buildroot}%{_sysconfdir}/wine \ + dlldir=%{buildroot}%{_libdir}/wine \ + LDCONFIG=/bin/true \ + UPDATE_DESKTOP_DATABASE=/bin/true + +# setup for alternatives usage +%ifarch x86_64 aarch64 +mv %{buildroot}%{_bindir}/wineserver %{buildroot}%{_bindir}/wineserver64 +%endif +%ifarch %{ix86} %{arm} +mv %{buildroot}%{_bindir}/wine %{buildroot}%{_bindir}/wine32 +mv %{buildroot}%{_bindir}/wineserver %{buildroot}%{_bindir}/wineserver32 +%endif +%ifnarch %{arm} aarch64 x86_64 +mv %{buildroot}%{_bindir}/wine-preloader %{buildroot}%{_bindir}/wine32-preloader +%endif +touch %{buildroot}%{_bindir}/wine +%ifnarch %{arm} +touch %{buildroot}%{_bindir}/wine-preloader +%endif +touch %{buildroot}%{_bindir}/wineserver + +# remove rpath +chrpath --delete %{buildroot}%{_bindir}/wmc +chrpath --delete %{buildroot}%{_bindir}/wrc +%ifarch x86_64 aarch64 +chrpath --delete %{buildroot}%{_bindir}/wine64 +chrpath --delete %{buildroot}%{_bindir}/wineserver64 +%else +chrpath --delete %{buildroot}%{_bindir}/wine32 +chrpath --delete %{buildroot}%{_bindir}/wineserver32 +%endif mkdir -p %{buildroot}%{_sysconfdir}/wine # Allow users to launch Windows programs by just clicking on the .exe file... +%if 0%{?rhel} < 7 mkdir -p %{buildroot}%{_initrddir} install -p -c -m 755 %{SOURCE1} %{buildroot}%{_initrddir}/wine +%endif +%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7 +mkdir -p %{buildroot}%{_binfmtdir} +install -p -c -m 644 %{SOURCE2} %{buildroot}%{_binfmtdir}/wine.conf +%endif # add wine dir to desktop mkdir -p %{buildroot}%{_sysconfdir}/xdg/menus/applications-merged @@ -499,193 +774,252 @@ mkdir -p %{buildroot}%{_datadir}/desktop-directories install -p -m 644 %{SOURCE201} \ %{buildroot}%{_datadir}/desktop-directories/Wine.directory +# add gecko dir +mkdir -p %{buildroot}%{_datadir}/wine/gecko + +# add mono dir +mkdir -p %{buildroot}%{_datadir}/wine/mono # extract and install icons -%if 0%{?fedora} > 10 -mkdir -p %{buildroot}%{_datadir}/pixmaps -icotool -x --width=32 --height=32 --bit-depth=32 -o dlls/user32/resources/ \ - dlls/user32/resources/oic_winlogo.ico -install -p -m 644 dlls/user32/resources/*png \ - %{buildroot}%{_datadir}/pixmaps/wine.png +mkdir -p %{buildroot}%{_datadir}/icons/hicolor/scalable/apps -icotool -x --width=32 --height=32 --bit-depth=32 -o programs/notepad/ \ - programs/notepad/notepad.ico -install -p -m 644 programs/notepad/notepad*png \ - %{buildroot}%{_datadir}/pixmaps/notepad.png +# This replacement masks a composite program icon .SVG down +# so that only its full-size scalable icon is visible +PROGRAM_ICONFIX='s/height="272"/height="256"/;'\ +'s/width="632"/width="256"\n'\ +' x="368"\n'\ +' y="8"\n'\ +' viewBox="368, 8, 256, 256"/;' -icotool -x --width=32 --height=32 --bit-depth=32 -o programs/regedit/ \ - programs/regedit/regedit.ico -install -p -m 644 programs/regedit/regedit*png \ - %{buildroot}%{_datadir}/pixmaps/regedit.png +# This icon file is still in the legacy format +install -p -m 644 dlls/user32/resources/oic_winlogo.svg \ + %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/wine.svg +sed -i -e '3s/368/64/' %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/wine.svg -icotool -x --width=32 --height=32 --bit-depth=32 -o programs/msiexec/ \ - programs/msiexec/msiexec.ico -install -p -m 644 programs/msiexec/msiexec*png \ - %{buildroot}%{_datadir}/pixmaps/msiexec.png +# The rest come from programs/, and contain larger scalable icons +# with a new layout that requires the PROGRAM_ICONFIX sed adjustment +install -p -m 644 programs/notepad/notepad.svg \ + %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/notepad.svg +sed -i -e "$PROGRAM_ICONFIX" %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/notepad.svg -icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winecfg/ \ - programs/winecfg/winecfg.ico -install -p -m 644 programs/winecfg/winecfg*png \ - %{buildroot}%{_datadir}/pixmaps/winecfg.png +install -p -m 644 programs/regedit/regedit.svg \ + %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/regedit.svg +sed -i -e "$PROGRAM_ICONFIX" %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/regedit.svg -icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winefile/ \ - programs/winefile/winefile.ico -install -p -m 644 programs/winefile/winefile*png \ - %{buildroot}%{_datadir}/pixmaps/winefile.png +install -p -m 644 programs/msiexec/msiexec.svg \ + %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/msiexec.svg +sed -i -e "$PROGRAM_ICONFIX" %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/msiexec.svg -icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winemine/ \ - programs/winemine/winemine.ico -install -p -m 644 programs/winemine/winemine*png \ - %{buildroot}%{_datadir}/pixmaps/winemine.png +install -p -m 644 programs/winecfg/winecfg.svg \ + %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/winecfg.svg +sed -i -e "$PROGRAM_ICONFIX" %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/winecfg.svg -icotool -x --width=32 --height=32 --bit-depth=32 -o programs/winhlp32/ \ - programs/winhlp32/winhelp.ico -install -p -m 644 programs/winhlp32/winhelp*png \ - %{buildroot}%{_datadir}/pixmaps/winhelp.png +install -p -m 644 programs/winefile/winefile.svg \ + %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/winefile.svg +sed -i -e "$PROGRAM_ICONFIX" %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/winefile.svg + +install -p -m 644 programs/winemine/winemine.svg \ + %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/winemine.svg +sed -i -e "$PROGRAM_ICONFIX" %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/winemine.svg + +install -p -m 644 programs/winhlp32/winhelp.svg \ + %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/winhelp.svg +sed -i -e "$PROGRAM_ICONFIX" %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/winhelp.svg + +install -p -m 644 programs/wordpad/wordpad.svg \ + %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/wordpad.svg +sed -i -e "$PROGRAM_ICONFIX" %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/wordpad.svg -icotool -x --width=32 --height=32 --bit-depth=32 -o programs/wordpad/ \ - programs/wordpad/wordpad.ico -install -p -m 644 programs/wordpad/wordpad*png \ - %{buildroot}%{_datadir}/pixmaps/wordpad.png -%endif # install desktop files desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE100} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE101} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE102} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE103} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE104} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE105} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE106} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE107} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE108} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE109} desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ --delete-original \ %{buildroot}%{_datadir}/applications/wine.desktop #mime-types desktop-file-install \ - --vendor=fedora \ --dir=%{buildroot}%{_datadir}/applications \ %{SOURCE300} +cp -p %{SOURCE3} README-FEDORA -cp %{SOURCE3} README-Fedora +cp -p %{SOURCE502} README-tahoma mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d/ -%ifarch %{ix86} +%ifarch %{ix86} %{arm} install -p -m644 %{SOURCE4} %{buildroot}%{_sysconfdir}/ld.so.conf.d/ %endif -%ifarch x86_64 +%ifarch x86_64 aarch64 install -p -m644 %{SOURCE5} %{buildroot}%{_sysconfdir}/ld.so.conf.d/ %endif -# deploy pulseaudio readme -cp %{SOURCE402} . -# install fonts -install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-courier-fonts -mv %{buildroot}/%{_datadir}/wine/fonts/cou* %{buildroot}/%{_datadir}/fonts/wine-courier-fonts/ +# install Tahoma font for system package +install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-tahoma-fonts +pushd %{buildroot}/%{_datadir}/fonts/wine-tahoma-fonts +ln -s ../../wine/fonts/tahoma.ttf tahoma.ttf +ln -s ../../wine/fonts/tahomabd.ttf tahomabd.ttf +popd -install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-system-fonts -mv %{buildroot}/%{_datadir}/wine/fonts/*sys.* %{buildroot}/%{_datadir}/fonts/wine-system-fonts/ -mv %{buildroot}/%{_datadir}/wine/fonts/vgas*.* %{buildroot}/%{_datadir}/fonts/wine-system-fonts/ +# add config and readme for tahoma +install -m 0755 -d %{buildroot}%{_fontconfig_templatedir} \ + %{buildroot}%{_fontconfig_confdir} +install -p -m 0644 %{SOURCE501} %{buildroot}%{_fontconfig_templatedir}/20-wine-tahoma-nobitmaps.conf -install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-small-fonts -mv %{buildroot}/%{_datadir}/wine/fonts/sma* %{buildroot}/%{_datadir}/fonts/wine-small-fonts/ -mv %{buildroot}/%{_datadir}/wine/fonts/jsma* %{buildroot}/%{_datadir}/fonts/wine-small-fonts/ +ln -s %{_fontconfig_templatedir}/20-wine-tahoma-nobitmaps.conf \ + %{buildroot}%{_fontconfig_confdir}/20-wine-tahoma-nobitmaps.conf -install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-marlett-fonts -mv %{buildroot}/%{_datadir}/wine/fonts/marlett.ttf %{buildroot}/%{_datadir}/fonts/wine-marlett-fonts/ +%if 0%{?wine_staging} +# install Times New Roman font for system package +install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-times-new-roman-fonts +pushd %{buildroot}/%{_datadir}/fonts/wine-times-new-roman-fonts +ln -s ../../wine/fonts/times.ttf times.ttf +popd +%endif -#install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-ms-sans-serif-fonts -#mv %{buildroot}/%{_datadir}/wine/fonts/sse* %{buildroot}/%{_datadir}/fonts/wine-ms-sans-serif-fonts/ -rm -f %{buildroot}/%{_datadir}/wine/fonts/sse* +# install Wingdings font for system package +install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-wingdings-fonts +pushd %{buildroot}/%{_datadir}/fonts/wine-wingdings-fonts +ln -s ../../wine/fonts/wingding.ttf wingding.ttf +popd -#install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-tahoma-fonts -#mv %{buildroot}/%{_datadir}/wine/fonts/tahoma* %{buildroot}/%{_datadir}/fonts/wine-tahoma-fonts/ -rm -f %{buildroot}/%{_datadir}/wine/fonts/tahoma* +# clean readme files +pushd documentation +for lang in it hu sv es pt pt_br; +do iconv -f iso8859-1 -t utf-8 README.$lang > \ + README.$lang.conv && mv -f README.$lang.conv README.$lang +done; +popd -install -p -m 0755 -d %{buildroot}/%{_datadir}/fonts/wine-symbol-fonts -mv %{buildroot}/%{_datadir}/wine/fonts/symbol.ttf %{buildroot}/%{_datadir}/fonts/wine-symbol-fonts/ +%if 0%{?fedora} || 0%{?rhel} > 6 +rm -f %{buildroot}%{_initrddir}/wine +%endif + +# wine makefiles are currently broken and don't install the wine man page +install -p -m 0644 loader/wine.man %{buildroot}%{_mandir}/man1/wine.1 +install -p -m 0644 loader/wine.de.UTF-8.man %{buildroot}%{_mandir}/de.UTF-8/man1/wine.1 +install -p -m 0644 loader/wine.fr.UTF-8.man %{buildroot}%{_mandir}/fr.UTF-8/man1/wine.1 +mkdir -p %{buildroot}%{_mandir}/pl.UTF-8/man1 +install -p -m 0644 loader/wine.pl.UTF-8.man %{buildroot}%{_mandir}/pl.UTF-8/man1/wine.1 -%clean -rm -rf %{buildroot} - -%post core -p /sbin/ldconfig -%postun core -p /sbin/ldconfig - -%post desktop -update-desktop-database &>/dev/null || : -if [ $1 = 1 ]; then +%if 0%{?rhel} == 6 +%post sysvinit +if [ $1 -eq 1 ]; then /sbin/chkconfig --add wine /sbin/chkconfig --level 2345 wine on /sbin/service wine start &>/dev/null || : fi -%preun desktop -if [ $1 = 0 ]; then - /sbin/service wine stop >/dev/null 2>&1 - /sbin/chkconfig --del wine +%preun sysvinit +if [ $1 -eq 0 ]; then +/sbin/service wine stop >/dev/null 2>&1 +/sbin/chkconfig --del wine fi +%endif + +%if 0%{?fedora} >= 15 || 0%{?rhel} > 6 +%post systemd +%binfmt_apply wine.conf + +%postun systemd +if [ $1 -eq 0 ]; then +/bin/systemctl try-restart systemd-binfmt.service +fi +%endif + +%post desktop +update-desktop-database &>/dev/null || : +touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : %postun desktop update-desktop-database &>/dev/null || : +if [ $1 -eq 0 ] ; then + touch --no-create %{_datadir}/icons/hicolor &>/dev/null + gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +fi -%post esd -p /sbin/ldconfig -%postun esd -p /sbin/ldconfig +%posttrans desktop +gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : -%post jack -p /sbin/ldconfig -%postun jack -p /sbin/ldconfig +%post core -p /sbin/ldconfig -%post nas -p /sbin/ldconfig -%postun nas -p /sbin/ldconfig +%posttrans core +%ifarch x86_64 aarch64 +%{_sbindir}/alternatives --install %{_bindir}/wine \ + wine %{_bindir}/wine64 10 \ + --slave %{_bindir}/wine-preloader wine-preloader %{_bindir}/wine64-preloader +%{_sbindir}/alternatives --install %{_bindir}/wineserver \ + wineserver %{_bindir}/wineserver64 20 +%else +%ifnarch %{arm} +%{_sbindir}/alternatives --install %{_bindir}/wine \ + wine %{_bindir}/wine32 20 \ + --slave %{_bindir}/wine-preloader wine-preloader %{_bindir}/wine32-preloader +%{_sbindir}/alternatives --install %{_bindir}/wineserver \ + wineserver %{_bindir}/wineserver32 10 +%else +%{_sbindir}/alternatives --install %{_bindir}/wine \ + wine %{_bindir}/wine32 20 +%{_sbindir}/alternatives --install %{_bindir}/wineserver \ + wineserver %{_bindir}/wineserver32 10 +%endif +%endif + +%postun core +/sbin/ldconfig +if [ $1 -eq 0 ] ; then +%ifarch x86_64 aarch64 aarch64 + %{_sbindir}/alternatives --remove wine %{_bindir}/wine64 + %{_sbindir}/alternatives --remove wineserver %{_bindir}/wineserver64 +%else + %{_sbindir}/alternatives --remove wine %{_bindir}/wine32 + %{_sbindir}/alternatives --remove wineserver %{_bindir}/wineserver32 +%endif +fi %post ldap -p /sbin/ldconfig %postun ldap -p /sbin/ldconfig @@ -699,143 +1033,428 @@ update-desktop-database &>/dev/null || : %post capi -p /sbin/ldconfig %postun capi -p /sbin/ldconfig -%post pulseaudio -p /sbin/ldconfig -%postun pulseaudio -p /sbin/ldconfig - %post alsa -p /sbin/ldconfig %postun alsa -p /sbin/ldconfig -%post oss -p /sbin/ldconfig -%postun oss -p /sbin/ldconfig - %if 0%{?fedora} >= 10 || 0%{?rhel} >= 6 %post openal -p /sbin/ldconfig %postun openal -p /sbin/ldconfig %endif %files -%defattr(-,root,root,-) # meta package %files core -%defattr(-,root,root,-) %doc ANNOUNCE %doc COPYING.LIB %doc LICENSE %doc LICENSE.OLD %doc AUTHORS -%doc README-Fedora +%doc README-FEDORA %doc README %doc VERSION # do not include huge changelogs .OLD .ALPHA .BETA (#204302) %doc documentation/README.* - +%if 0%{?wine_staging} +%{_bindir}/msidb +%{_libdir}/wine/runas.exe.so +%endif %{_bindir}/winedump %{_libdir}/wine/explorer.exe.so +%{_libdir}/wine/cabarc.exe.so %{_libdir}/wine/control.exe.so %{_libdir}/wine/cmd.exe.so +%{_libdir}/wine/dxdiag.exe.so %{_libdir}/wine/notepad.exe.so +%{_libdir}/wine/plugplay.exe.so %{_libdir}/wine/progman.exe.so %{_libdir}/wine/taskmgr.exe.so %{_libdir}/wine/winedbg.exe.so %{_libdir}/wine/winefile.exe.so %{_libdir}/wine/winemine.exe.so +%{_libdir}/wine/winemsibuilder.exe.so %{_libdir}/wine/winepath.exe.so +%{_libdir}/wine/winmgmt.exe.so %{_libdir}/wine/winver.exe.so %{_libdir}/wine/wordpad.exe.so %{_libdir}/wine/write.exe.so -%{_libdir}/wine/dxdiag.exe.so +%{_libdir}/wine/wusa.exe.so -%ifarch %{ix86} -%{_bindir}/wine -%{_bindir}/wine-preloader -%{_sysconfdir}/ld.so.conf.d/wine-32.conf +%ifarch %{ix86} %{arm} +%{_bindir}/wine32 +%ifnarch %{arm} +%{_bindir}/wine32-preloader +%endif +%{_bindir}/wineserver32 +%config %{_sysconfdir}/ld.so.conf.d/wine-32.conf %endif -%ifarch x86_64 +%ifarch x86_64 aarch64 %{_bindir}/wine64 -%{_sysconfdir}/ld.so.conf.d/wine-64.conf +%{_bindir}/wineserver64 +%config %{_sysconfdir}/ld.so.conf.d/wine-64.conf %endif +%ifarch x86_64 aarch64 +%{_bindir}/wine64-preloader +%endif + +%ghost %{_bindir}/wine +%ifnarch %{arm} +%ghost %{_bindir}/wine-preloader +%endif +%ghost %{_bindir}/wineserver %dir %{_libdir}/wine %dir %{_libdir}/wine/fakedlls %{_libdir}/wine/fakedlls/* + %{_libdir}/wine/attrib.exe.so +%{_libdir}/wine/arp.exe.so +%{_libdir}/wine/aspnet_regiis.exe.so %{_libdir}/wine/cacls.exe.so +%{_libdir}/wine/conhost.exe.so +%{_libdir}/wine/cscript.exe.so +%{_libdir}/wine/dism.exe.so +%{_libdir}/wine/dpnsvr.exe.so +%{_libdir}/wine/eject.exe.so %{_libdir}/wine/expand.exe.so %{_libdir}/wine/extrac32.exe.so +%{_libdir}/wine/fc.exe.so +%{_libdir}/wine/find.exe.so +%{_libdir}/wine/findstr.exe.so +%{_libdir}/wine/fsutil.exe.so +%{_libdir}/wine/hostname.exe.so %{_libdir}/wine/ipconfig.exe.so %{_libdir}/wine/winhlp32.exe.so %{_libdir}/wine/mshta.exe.so +%if 0%{?wine_staging} +%{_libdir}/wine/msidb.exe.so +%endif %{_libdir}/wine/msiexec.exe.so %{_libdir}/wine/net.exe.so +%{_libdir}/wine/netstat.exe.so %{_libdir}/wine/ngen.exe.so %{_libdir}/wine/ntoskrnl.exe.so %{_libdir}/wine/oleview.exe.so %{_libdir}/wine/ping.exe.so +%{_libdir}/wine/powershell.exe.so %{_libdir}/wine/reg.exe.so +%{_libdir}/wine/regasm.exe.so %{_libdir}/wine/regedit.exe.so +%{_libdir}/wine/regsvcs.exe.so %{_libdir}/wine/regsvr32.exe.so %{_libdir}/wine/rpcss.exe.so %{_libdir}/wine/rundll32.exe.so +%{_libdir}/wine/schtasks.exe.so +%{_libdir}/wine/sdbinst.exe.so %{_libdir}/wine/secedit.exe.so +%{_libdir}/wine/servicemodelreg.exe.so %{_libdir}/wine/services.exe.so %{_libdir}/wine/start.exe.so +%{_libdir}/wine/tasklist.exe.so %{_libdir}/wine/termsv.exe.so +%{_libdir}/wine/view.exe.so +%{_libdir}/wine/wevtutil.exe.so +%{_libdir}/wine/wineboot.exe.so %{_libdir}/wine/winebrowser.exe.so %{_libdir}/wine/wineconsole.exe.so %{_libdir}/wine/winemenubuilder.exe.so %{_libdir}/wine/winecfg.exe.so %{_libdir}/wine/winedevice.exe.so +%{_libdir}/wine/wmplayer.exe.so %{_libdir}/wine/wscript.exe.so %{_libdir}/wine/uninstaller.exe.so + %{_libdir}/libwine.so.1* + %{_libdir}/wine/acledit.dll.so %{_libdir}/wine/aclui.dll.so %{_libdir}/wine/activeds.dll.so %{_libdir}/wine/actxprxy.dll.so +%{_libdir}/wine/adsldp.dll.so +%{_libdir}/wine/adsldpc.dll.so %{_libdir}/wine/advapi32.dll.so %{_libdir}/wine/advpack.dll.so %{_libdir}/wine/amstream.dll.so +%{_libdir}/wine/api-ms-win-appmodel-identity-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-2.dll.so +%{_libdir}/wine/api-ms-win-core-apiquery-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-appcompat-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-appinit-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-atoms-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-bem-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-com-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-com-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-com-private-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-comm-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-console-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-console-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-crt-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-crt-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-datetime-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-datetime-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-debug-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-debug-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-delayload-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-delayload-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-2.dll.so +%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-3.dll.so +%{_libdir}/wine/api-ms-win-core-fibers-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-fibers-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-file-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-file-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-file-l1-2-1.dll.so +%{_libdir}/wine/api-ms-win-core-file-l1-2-2.dll.so +%{_libdir}/wine/api-ms-win-core-file-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-file-l2-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-file-l2-1-2.dll.so +%{_libdir}/wine/api-ms-win-core-handle-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-heap-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-heap-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-heap-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-heap-obsolete-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-interlocked-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-interlocked-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-io-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-io-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-job-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-job-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-largeinteger-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-kernel32-private-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-1.dll.so +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-2.dll.so +%{_libdir}/wine/api-ms-win-core-localization-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-localization-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-localization-l1-2-1.dll.so +%{_libdir}/wine/api-ms-win-core-localization-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-localization-obsolete-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-localization-obsolete-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-localization-obsolete-l1-3-0.dll.so +%{_libdir}/wine/api-ms-win-core-localization-private-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-localregistry-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-memory-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-memory-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-memory-l1-1-2.dll.so +%{_libdir}/wine/api-ms-win-core-misc-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-namedpipe-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-namedpipe-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-namespace-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-normalization-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-path-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-privateprofile-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-processenvironment-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-processenvironment-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-2.dll.so +%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-3.dll.so +%{_libdir}/wine/api-ms-win-core-processtopology-obsolete-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-profile-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-psapi-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-psapi-ansi-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-psapi-obsolete-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-quirks-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-realtime-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-registry-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-registry-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-registryuserspecific-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-rtlsupport-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-rtlsupport-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-shlwapi-legacy-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-shutdown-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-sidebyside-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-string-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-string-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-string-obsolete-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-stringansi-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-stringloader-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-synch-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-synch-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-synch-l1-2-1.dll.so +%{_libdir}/wine/api-ms-win-core-synch-ansi-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-sysinfo-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-1.dll.so +%{_libdir}/wine/api-ms-win-core-threadpool-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-threadpool-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-core-threadpool-legacy-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-threadpool-private-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-timezone-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-toolhelp-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-url-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-util-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-version-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-version-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-version-private-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-versionansi-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-windowserrorreporting-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-winrt-error-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-winrt-error-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-winrt-errorprivate-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-winrt-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-winrt-registration-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-winrt-string-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-winrt-string-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-wow64-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-wow64-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-core-xstate-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-core-xstate-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-conio-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-convert-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-environment-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-filesystem-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-heap-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-locale-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-math-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-multibyte-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-private-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-process-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-runtime-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-stdio-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-string-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-time-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-crt-utility-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-devices-config-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-devices-config-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-devices-query-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-downlevel-advapi32-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-downlevel-advapi32-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-downlevel-normaliz-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-downlevel-ole32-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-downlevel-shell32-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-downlevel-shlwapi-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-downlevel-shlwapi-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-downlevel-user32-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-downlevel-version-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-dx-d3dkmt-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-eventing-classicprovider-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-eventing-consumer-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-eventing-controller-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-eventing-legacy-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-eventing-provider-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-eventlog-legacy-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-gdi-dpiinfo-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-mm-joystick-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-mm-misc-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-mm-mme-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-mm-time-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-ntuser-dc-access-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-ntuser-rectangle-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-ntuser-sysparams-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-perf-legacy-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-power-base-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-power-setting-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-rtcore-ntuser-draw-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-rtcore-ntuser-private-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-rtcore-ntuser-private-l1-1-4.dll.so +%{_libdir}/wine/api-ms-win-rtcore-ntuser-window-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-rtcore-ntuser-winevent-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-rtcore-ntuser-wmpointer-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-rtcore-ntuser-wmpointer-l1-1-3.dll.so +%{_libdir}/wine/api-ms-win-security-activedirectoryclient-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-audit-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-security-base-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-base-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-security-base-private-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-security-credentials-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-cryptoapi-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-grouppolicy-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-1.dll.so +%{_libdir}/wine/api-ms-win-security-lsapolicy-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-provider-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-sddl-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-security-systemfunctions-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-service-core-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-service-core-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-service-management-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-service-management-l2-1-0.dll.so +%{_libdir}/wine/api-ms-win-service-private-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-service-winsvc-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-service-winsvc-l1-2-0.dll.so +%{_libdir}/wine/api-ms-win-shcore-obsolete-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-shcore-scaling-l1-1-1.dll.so +%{_libdir}/wine/api-ms-win-shcore-stream-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-shcore-thread-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-shell-shellcom-l1-1-0.dll.so +%{_libdir}/wine/api-ms-win-shell-shellfolders-l1-1-0.dll.so +%{_libdir}/wine/apphelp.dll.so %{_libdir}/wine/appwiz.cpl.so %{_libdir}/wine/atl.dll.so +%{_libdir}/wine/atl80.dll.so +%{_libdir}/wine/atl90.dll.so +%{_libdir}/wine/atl100.dll.so +%{_libdir}/wine/atl110.dll.so +%{_libdir}/wine/atmlib.dll.so %{_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/bluetoothapis.dll.so %{_libdir}/wine/browseui.dll.so +%{_libdir}/wine/bthprops.cpl.so %{_libdir}/wine/cabinet.dll.so %{_libdir}/wine/cards.dll.so +%{_libdir}/wine/cdosys.dll.so %{_libdir}/wine/cfgmgr32.dll.so %{_libdir}/wine/clock.exe.so %{_libdir}/wine/clusapi.dll.so +%{_libdir}/wine/combase.dll.so %{_libdir}/wine/comcat.dll.so %{_libdir}/wine/comctl32.dll.so %{_libdir}/wine/comdlg32.dll.so %{_libdir}/wine/compstui.dll.so +%{_libdir}/wine/comsvcs.dll.so +%{_libdir}/wine/concrt140.dll.so +%{_libdir}/wine/connect.dll.so %{_libdir}/wine/credui.dll.so %{_libdir}/wine/crtdll.dll.so %{_libdir}/wine/crypt32.dll.so %{_libdir}/wine/cryptdlg.dll.so %{_libdir}/wine/cryptdll.dll.so +%{_libdir}/wine/cryptext.dll.so %{_libdir}/wine/cryptnet.dll.so %{_libdir}/wine/cryptui.dll.so %{_libdir}/wine/ctapi32.dll.so %{_libdir}/wine/ctl3d32.dll.so +%{_libdir}/wine/d2d1.dll.so %{_libdir}/wine/d3d10.dll.so +%{_libdir}/wine/d3d10_1.dll.so %{_libdir}/wine/d3d10core.dll.so +%{_libdir}/wine/d3d11.dll.so +%{_libdir}/wine/d3d12.dll.so %{_libdir}/wine/d3dcompiler_*.dll.so %{_libdir}/wine/d3dim.dll.so %{_libdir}/wine/d3drm.dll.so %{_libdir}/wine/d3dx9_*.dll.so %{_libdir}/wine/d3dx10_*.dll.so +%{_libdir}/wine/d3dx11_42.dll.so +%{_libdir}/wine/d3dx11_43.dll.so %{_libdir}/wine/d3dxof.dll.so +%{_libdir}/wine/davclnt.dll.so +%{_libdir}/wine/dbgeng.dll.so %{_libdir}/wine/dbghelp.dll.so %{_libdir}/wine/dciman32.dll.so %{_libdir}/wine/ddraw.dll.so %{_libdir}/wine/ddrawex.dll.so %{_libdir}/wine/devenum.dll.so +%{_libdir}/wine/dhcpcsvc.dll.so +%{_libdir}/wine/dhtmled.ocx.so +%{_libdir}/wine/difxapi.dll.so %{_libdir}/wine/dinput.dll.so %{_libdir}/wine/dinput8.dll.so %{_libdir}/wine/dispex.dll.so @@ -854,18 +1473,75 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/dpnet.dll.so %{_libdir}/wine/dpnhpast.dll.so %{_libdir}/wine/dpnlobby.dll.so +%{_libdir}/wine/dpvoice.dll.so %{_libdir}/wine/dpwsockx.dll.so %{_libdir}/wine/drmclien.dll.so %{_libdir}/wine/dsound.dll.so +%{_libdir}/wine/dsquery.dll.so %{_libdir}/wine/dssenh.dll.so %{_libdir}/wine/dswave.dll.so %{_libdir}/wine/dwmapi.dll.so +%{_libdir}/wine/dwrite.dll.so +%{_libdir}/wine/dx8vb.dll.so %{_libdir}/wine/dxdiagn.dll.so %{_libdir}/wine/dxgi.dll.so -%{_libdir}/wine/eject.exe.so +%if 0%{?wine_staging} +%{_libdir}/wine/dxgkrnl.sys.so +%{_libdir}/wine/dxgmms1.sys.so +%endif +%{_libdir}/wine/dxva2.dll.so +%{_libdir}/wine/esent.dll.so +%{_libdir}/wine/evr.dll.so %{_libdir}/wine/explorerframe.dll.so +%{_libdir}/wine/ext-ms-win-authz-context-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-domainjoin-netjoin-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-dwmapi-ext-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-gdi-dc-l1-2-0.dll.so +%{_libdir}/wine/ext-ms-win-gdi-dc-create-l1-1-1.dll.so +%{_libdir}/wine/ext-ms-win-gdi-devcaps-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-gdi-draw-l1-1-1.dll.so +%{_libdir}/wine/ext-ms-win-gdi-render-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-kernel32-package-l1-1-1.dll.so +%{_libdir}/wine/ext-ms-win-kernel32-package-current-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-draw-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-gui-l1-3-0.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-keyboard-l1-3-0.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-misc-l1-2-0.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-misc-l1-5-1.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-message-l1-1-1.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-mouse-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-private-l1-1-1.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-private-l1-3-1.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-rectangle-ext-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-uicontext-ext-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-window-l1-1-1.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-window-l1-1-4.dll.so +%{_libdir}/wine/ext-ms-win-ntuser-windowclass-l1-1-1.dll.so +%{_libdir}/wine/ext-ms-win-oleacc-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-ras-rasapi32-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-gdi-devcaps-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-gdi-object-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-gdi-rgn-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-cursor-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dc-access-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dpi-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dpi-l1-2-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-rawinput-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-syscolors-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-sysparams-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-security-credui-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-security-cryptui-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-uxtheme-themes-l1-1-0.dll.so +%if 0%{?wine_staging} +%{_libdir}/wine/ext-ms-win-appmodel-usercontext-l1-1-0.dll.so +%{_libdir}/wine/ext-ms-win-xaml-pal-l1-1-0.dll.so +%endif %{_libdir}/wine/faultrep.dll.so +%{_libdir}/wine/feclient.dll.so %{_libdir}/wine/fltlib.dll.so +%{_libdir}/wine/fltmgr.sys.so +%{_libdir}/wine/fntcache.dll.so +%{_libdir}/wine/fontsub.dll.so %{_libdir}/wine/fusion.dll.so %{_libdir}/wine/fwpuclnt.dll.so %{_libdir}/wine/gameux.dll.so @@ -878,26 +1554,43 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/hh.exe.so %{_libdir}/wine/hhctrl.ocx.so %{_libdir}/wine/hid.dll.so +%{_libdir}/wine/hidclass.sys.so %{_libdir}/wine/hlink.dll.so %{_libdir}/wine/hnetcfg.dll.so %{_libdir}/wine/httpapi.dll.so +%{_libdir}/wine/icacls.exe.so %{_libdir}/wine/iccvid.dll.so %{_libdir}/wine/icinfo.exe.so %{_libdir}/wine/icmp.dll.so +%{_libdir}/wine/ieframe.dll.so +%if 0%{?wine_staging} +%{_libdir}/wine/iertutil.dll.so +%endif +%{_libdir}/wine/ieproxy.dll.so %{_libdir}/wine/imaadp32.acm.so %{_libdir}/wine/imagehlp.dll.so %{_libdir}/wine/imm32.dll.so %{_libdir}/wine/inetcomm.dll.so +%{_libdir}/wine/inetcpl.cpl.so %{_libdir}/wine/inetmib1.dll.so %{_libdir}/wine/infosoft.dll.so %{_libdir}/wine/initpki.dll.so %{_libdir}/wine/inkobj.dll.so %{_libdir}/wine/inseng.dll.so %{_libdir}/wine/iphlpapi.dll.so +%{_libdir}/wine/iprop.dll.so +%{_libdir}/wine/irprops.cpl.so %{_libdir}/wine/itircl.dll.so %{_libdir}/wine/itss.dll.so +%{_libdir}/wine/joy.cpl.so %{_libdir}/wine/jscript.dll.so +%{_libdir}/wine/jsproxy.dll.so +%{_libdir}/wine/kerberos.dll.so %{_libdir}/wine/kernel32.dll.so +%{_libdir}/wine/kernelbase.dll.so +%{_libdir}/wine/ksuser.dll.so +%{_libdir}/wine/ktmw32.dll.so +%{_libdir}/wine/l3codeca.acm.so %{_libdir}/wine/loadperf.dll.so %{_libdir}/wine/localspl.dll.so %{_libdir}/wine/localui.dll.so @@ -907,45 +1600,78 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/mapistub.dll.so %{_libdir}/wine/mciavi32.dll.so %{_libdir}/wine/mcicda.dll.so +%{_libdir}/wine/mciqtz32.dll.so %{_libdir}/wine/mciseq.dll.so %{_libdir}/wine/mciwave.dll.so +%{_libdir}/wine/mf.dll.so +%{_libdir}/wine/mf3216.dll.so +%{_libdir}/wine/mfplat.dll.so +%{_libdir}/wine/mfreadwrite.dll.so +%{_libdir}/wine/mgmtapi.dll.so %{_libdir}/wine/midimap.dll.so %{_libdir}/wine/mlang.dll.so +%{_libdir}/wine/mmcndmgr.dll.so %{_libdir}/wine/mmdevapi.dll.so +%{_libdir}/wine/mofcomp.exe.so %{_libdir}/wine/mountmgr.sys.so +%{_libdir}/wine/mp3dmod.dll.so %{_libdir}/wine/mpr.dll.so %{_libdir}/wine/mprapi.dll.so -%{_libdir}/wine/mciqtz32.dll.so %{_libdir}/wine/msacm32.dll.so %{_libdir}/wine/msacm32.drv.so %{_libdir}/wine/msadp32.acm.so +%{_libdir}/wine/msasn1.dll.so %{_libdir}/wine/mscat32.dll.so %{_libdir}/wine/mscoree.dll.so %{_libdir}/wine/msctf.dll.so +%{_libdir}/wine/msctfp.dll.so %{_libdir}/wine/msdaps.dll.so +%{_libdir}/wine/msdelta.dll.so %{_libdir}/wine/msdmo.dll.so +%{_libdir}/wine/msdrm.dll.so %{_libdir}/wine/msftedit.dll.so %{_libdir}/wine/msg711.acm.so %{_libdir}/wine/msgsm32.acm.so %{_libdir}/wine/mshtml.dll.so %{_libdir}/wine/mshtml.tlb.so %{_libdir}/wine/msi.dll.so +%{_libdir}/wine/msident.dll.so %{_libdir}/wine/msimtf.dll.so %{_libdir}/wine/msimg32.dll.so +%{_libdir}/wine/msimsg.dll.so +%{_libdir}/wine/msinfo32.exe.so %{_libdir}/wine/msisip.dll.so %{_libdir}/wine/msisys.ocx.so +%{_libdir}/wine/msls31.dll.so %{_libdir}/wine/msnet32.dll.so +%{_libdir}/wine/mspatcha.dll.so +%{_libdir}/wine/msports.dll.so +%{_libdir}/wine/msscript.ocx.so %{_libdir}/wine/mssign32.dll.so %{_libdir}/wine/mssip32.dll.so %{_libdir}/wine/msrle32.dll.so %{_libdir}/wine/mstask.dll.so %{_libdir}/wine/msvcirt.dll.so +%{_libdir}/wine/msvcm80.dll.so +%{_libdir}/wine/msvcm90.dll.so +%{_libdir}/wine/msvcp60.dll.so +%{_libdir}/wine/msvcp70.dll.so +%{_libdir}/wine/msvcp71.dll.so +%{_libdir}/wine/msvcp80.dll.so %{_libdir}/wine/msvcp90.dll.so +%{_libdir}/wine/msvcp100.dll.so +%{_libdir}/wine/msvcp110.dll.so +%{_libdir}/wine/msvcp120.dll.so +%{_libdir}/wine/msvcp120_app.dll.so +%{_libdir}/wine/msvcp140.dll.so %{_libdir}/wine/msvcr70.dll.so %{_libdir}/wine/msvcr71.dll.so %{_libdir}/wine/msvcr80.dll.so %{_libdir}/wine/msvcr90.dll.so %{_libdir}/wine/msvcr100.dll.so +%{_libdir}/wine/msvcr110.dll.so +%{_libdir}/wine/msvcr120.dll.so +%{_libdir}/wine/msvcr120_app.dll.so %{_libdir}/wine/msvcrt.dll.so %{_libdir}/wine/msvcrt20.dll.so %{_libdir}/wine/msvcrt40.dll.so @@ -953,17 +1679,35 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/msvfw32.dll.so %{_libdir}/wine/msvidc32.dll.so %{_libdir}/wine/mswsock.dll.so +%{_libdir}/wine/msxml.dll.so +%{_libdir}/wine/msxml2.dll.so %{_libdir}/wine/msxml3.dll.so %{_libdir}/wine/msxml4.dll.so +%{_libdir}/wine/msxml6.dll.so +%{_libdir}/wine/mtxdm.dll.so %{_libdir}/wine/nddeapi.dll.so +%{_libdir}/wine/ncrypt.dll.so +%{_libdir}/wine/ndis.sys.so %{_libdir}/wine/netapi32.dll.so +%{_libdir}/wine/netcfgx.dll.so +%{_libdir}/wine/netprofm.dll.so +%{_libdir}/wine/netsh.exe.so %{_libdir}/wine/newdev.dll.so +%{_libdir}/wine/ninput.dll.so +%{_libdir}/wine/normaliz.dll.so +%{_libdir}/wine/npmshtml.dll.so +%{_libdir}/wine/npptools.dll.so %{_libdir}/wine/ntdll.dll.so %{_libdir}/wine/ntdsapi.dll.so %{_libdir}/wine/ntprint.dll.so +%if 0%{?wine_staging} +%{_libdir}/wine/nvcuda.dll.so +%{_libdir}/wine/nvcuvid.dll.so +%endif %{_libdir}/wine/objsel.dll.so %{_libdir}/wine/odbc32.dll.so %{_libdir}/wine/odbccp32.dll.so +%{_libdir}/wine/odbccu32.dll.so %{_libdir}/wine/ole32.dll.so %{_libdir}/wine/oleacc.dll.so %{_libdir}/wine/oleaut32.dll.so @@ -973,10 +1717,15 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/olepro32.dll.so %{_libdir}/wine/olesvr32.dll.so %{_libdir}/wine/olethk32.dll.so +%{_libdir}/wine/opcservices.dll.so +%{_libdir}/wine/packager.dll.so %{_libdir}/wine/pdh.dll.so +%{_libdir}/wine/photometadatahandler.dll.so %{_libdir}/wine/pidgen.dll.so %{_libdir}/wine/powrprof.dll.so +%{_libdir}/wine/presentationfontcache.exe.so %{_libdir}/wine/printui.dll.so +%{_libdir}/wine/prntvpt.dll.so %{_libdir}/wine/propsys.dll.so %{_libdir}/wine/psapi.dll.so %{_libdir}/wine/pstorec.dll.so @@ -986,43 +1735,71 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/qmgrprxy.dll.so %{_libdir}/wine/quartz.dll.so %{_libdir}/wine/query.dll.so +%{_libdir}/wine/qwave.dll.so %{_libdir}/wine/rasapi32.dll.so %{_libdir}/wine/rasdlg.dll.so +%{_libdir}/wine/regapi.dll.so %{_libdir}/wine/resutils.dll.so %{_libdir}/wine/riched20.dll.so %{_libdir}/wine/riched32.dll.so %{_libdir}/wine/rpcrt4.dll.so %{_libdir}/wine/rsabase.dll.so %{_libdir}/wine/rsaenh.dll.so +%{_libdir}/wine/rstrtmgr.dll.so %{_libdir}/wine/rtutils.dll.so %{_libdir}/wine/samlib.dll.so +%{_libdir}/wine/sapi.dll.so +%{_libdir}/wine/sas.dll.so %{_libdir}/wine/sc.exe.so +%{_libdir}/wine/scarddlg.dll.so %{_libdir}/wine/sccbase.dll.so %{_libdir}/wine/schannel.dll.so +%{_libdir}/wine/scrobj.dll.so +%{_libdir}/wine/scrrun.dll.so +%{_libdir}/wine/scsiport.sys.so %{_libdir}/wine/secur32.dll.so %{_libdir}/wine/sensapi.dll.so %{_libdir}/wine/serialui.dll.so %{_libdir}/wine/setupapi.dll.so %{_libdir}/wine/sfc_os.dll.so +%{_libdir}/wine/shcore.dll.so %{_libdir}/wine/shdoclc.dll.so %{_libdir}/wine/shdocvw.dll.so +%{_libdir}/wine/schedsvc.dll.so %{_libdir}/wine/shell32.dll.so %{_libdir}/wine/shfolder.dll.so %{_libdir}/wine/shlwapi.dll.so +%{_libdir}/wine/shutdown.exe.so %{_libdir}/wine/slbcsp.dll.so %{_libdir}/wine/slc.dll.so %{_libdir}/wine/snmpapi.dll.so %{_libdir}/wine/softpub.dll.so %{_libdir}/wine/spoolsv.exe.so +%{_libdir}/wine/srclient.dll.so +%{_libdir}/wine/sspicli.dll.so %{_libdir}/wine/stdole2.tlb.so %{_libdir}/wine/stdole32.tlb.so %{_libdir}/wine/sti.dll.so +%{_libdir}/wine/strmdll.dll.so +%{_libdir}/wine/subst.exe.so %{_libdir}/wine/svchost.exe.so %{_libdir}/wine/svrapi.dll.so %{_libdir}/wine/sxs.dll.so +%{_libdir}/wine/systeminfo.exe.so %{_libdir}/wine/t2embed.dll.so %{_libdir}/wine/tapi32.dll.so +%{_libdir}/wine/taskkill.exe.so +%{_libdir}/wine/taskschd.dll.so +%{_libdir}/wine/tdh.dll.so +%{_libdir}/wine/tdi.sys.so %{_libdir}/wine/traffic.dll.so +%{_libdir}/wine/tzres.dll.so +%{_libdir}/wine/ucrtbase.dll.so +%if 0%{?wine_staging} +%{_libdir}/wine/uianimation.dll.so +%endif +%{_libdir}/wine/uiautomationcore.dll.so +%{_libdir}/wine/uiribbon.dll.so %{_libdir}/wine/unicows.dll.so %{_libdir}/wine/unlodctr.exe.so %{_libdir}/wine/updspapi.dll.so @@ -1032,16 +1809,42 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/user32.dll.so %{_libdir}/wine/usp10.dll.so %{_libdir}/wine/uxtheme.dll.so +%if 0%{?wine_staging} +%{_libdir}/wine/uxtheme-gtk.dll.so +%endif %{_libdir}/wine/userenv.dll.so +%{_libdir}/wine/vbscript.dll.so +%{_libdir}/wine/vcomp.dll.so +%{_libdir}/wine/vcomp90.dll.so +%{_libdir}/wine/vcomp100.dll.so +%{_libdir}/wine/vcomp110.dll.so +%{_libdir}/wine/vcomp120.dll.so +%{_libdir}/wine/vcomp140.dll.so +%{_libdir}/wine/vcruntime140.dll.so %{_libdir}/wine/vdmdbg.dll.so %{_libdir}/wine/version.dll.so +%{_libdir}/wine/virtdisk.dll.so +%{_libdir}/wine/vssapi.dll.so +%{_libdir}/wine/vulkan-1.dll.so +%{_libdir}/wine/wbemdisp.dll.so %{_libdir}/wine/wbemprox.dll.so +%{_libdir}/wine/wdscore.dll.so +%{_libdir}/wine/webservices.dll.so +%{_libdir}/wine/wer.dll.so +%{_libdir}/wine/wevtapi.dll.so %{_libdir}/wine/wiaservc.dll.so +%{_libdir}/wine/wimgapi.dll.so +%if 0%{?wine_staging} +%{_libdir}/wine/win32k.sys.so +%endif %{_libdir}/wine/windowscodecs.dll.so -%{_libdir}/wine/wineaudioio.drv.so -%{_libdir}/wine/winecoreaudio.drv.so +%{_libdir}/wine/windowscodecsext.dll.so +%{_libdir}/wine/winebus.sys.so +%{_libdir}/wine/winegstreamer.dll.so +%{_libdir}/wine/winehid.sys.so %{_libdir}/wine/winejoystick.drv.so %{_libdir}/wine/winemapi.dll.so +%{_libdir}/wine/winevulkan.dll.so %{_libdir}/wine/winex11.drv.so %{_libdir}/wine/wing32.dll.so %{_libdir}/wine/winhttp.dll.so @@ -1049,18 +1852,37 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/winmm.dll.so %{_libdir}/wine/winnls32.dll.so %{_libdir}/wine/winspool.drv.so +%{_libdir}/wine/winsta.dll.so +%{_libdir}/wine/wmasf.dll.so %{_libdir}/wine/wmi.dll.so +%{_libdir}/wine/wmic.exe.so %{_libdir}/wine/wmiutils.dll.so +%{_libdir}/wine/wmp.dll.so +%{_libdir}/wine/wmvcore.dll.so %{_libdir}/wine/spoolss.dll.so %{_libdir}/wine/winscard.dll.so %{_libdir}/wine/wintab32.dll.so %{_libdir}/wine/wintrust.dll.so +%{_libdir}/wine/winusb.dll.so +%{_libdir}/wine/wlanapi.dll.so +%{_libdir}/wine/wmphoto.dll.so %{_libdir}/wine/wnaspi32.dll.so +%if 0%{?wine_staging} +%{_libdir}/wine/wow64cpu.dll.so +%endif +%{_libdir}/wine/wpc.dll.so +%{_libdir}/wine/wpcap.dll.so %{_libdir}/wine/ws2_32.dll.so +%{_libdir}/wine/wsdapi.dll.so +%{_libdir}/wine/wshom.ocx.so +%{_libdir}/wine/wsnmp32.dll.so %{_libdir}/wine/wsock32.dll.so %{_libdir}/wine/wtsapi32.dll.so %{_libdir}/wine/wuapi.dll.so %{_libdir}/wine/wuaueng.dll.so +%if 0%{?wine_staging} +%{_libdir}/wine/wuauserv.exe.so +%endif %{_libdir}/wine/security.dll.so %{_libdir}/wine/sfc.dll.so %{_libdir}/wine/wineps.drv.so @@ -1070,14 +1892,52 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wined3d.dll.so %{_libdir}/wine/dnsapi.dll.so %{_libdir}/wine/iexplore.exe.so +%{_libdir}/wine/x3daudio1_0.dll.so +%{_libdir}/wine/x3daudio1_1.dll.so +%{_libdir}/wine/x3daudio1_2.dll.so +%{_libdir}/wine/x3daudio1_3.dll.so +%{_libdir}/wine/x3daudio1_4.dll.so +%{_libdir}/wine/x3daudio1_5.dll.so +%{_libdir}/wine/x3daudio1_6.dll.so +%{_libdir}/wine/x3daudio1_7.dll.so +%{_libdir}/wine/xapofx1_1.dll.so +%{_libdir}/wine/xapofx1_2.dll.so +%{_libdir}/wine/xapofx1_3.dll.so +%{_libdir}/wine/xapofx1_4.dll.so +%{_libdir}/wine/xapofx1_5.dll.so +%{_libdir}/wine/xaudio2_0.dll.so +%{_libdir}/wine/xaudio2_1.dll.so +%{_libdir}/wine/xaudio2_2.dll.so +%{_libdir}/wine/xaudio2_3.dll.so +%{_libdir}/wine/xaudio2_4.dll.so +%{_libdir}/wine/xaudio2_5.dll.so +%{_libdir}/wine/xaudio2_6.dll.so +%{_libdir}/wine/xaudio2_7.dll.so +%{_libdir}/wine/xaudio2_8.dll.so +%{_libdir}/wine/xaudio2_9.dll.so %{_libdir}/wine/xcopy.exe.so %{_libdir}/wine/xinput1_1.dll.so %{_libdir}/wine/xinput1_2.dll.so %{_libdir}/wine/xinput1_3.dll.so +%{_libdir}/wine/xinput1_4.dll.so %{_libdir}/wine/xinput9_1_0.dll.so %{_libdir}/wine/xmllite.dll.so -%ifnarch x86_64 +%{_libdir}/wine/xolehlp.dll.so +%{_libdir}/wine/xpsprint.dll.so +%{_libdir}/wine/xpssvcs.dll.so + +%if 0%{?wine_staging} +%ifarch x86_64 aarch64 +%{_libdir}/wine/nvapi64.dll.so +%{_libdir}/wine/nvencodeapi64.dll.so +%else +%{_libdir}/wine/nvapi.dll.so +%{_libdir}/wine/nvencodeapi.dll.so +%endif +%endif + # 16 bit and other non 64bit stuff +%ifnarch x86_64 %{arm} aarch64 %{_libdir}/wine/winevdm.exe.so %{_libdir}/wine/ifsmgr.vxd.so %{_libdir}/wine/mmdevldr.vxd.so @@ -1091,7 +1951,6 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/vtdapi.vxd.so %{_libdir}/wine/vwin32.vxd.so %{_libdir}/wine/w32skrnl.dll.so - %{_libdir}/wine/avifile.dll16.so %{_libdir}/wine/comm.drv16.so %{_libdir}/wine/commdlg.dll16.so @@ -1144,16 +2003,16 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/wow32.dll.so %endif -%files wow -%defattr(-,root,root,-) -%ifarch %{ix86} -%{_bindir}/wine -%endif -%{_bindir}/wineserver -%{_libdir}/wine/wineboot.exe.so +%files filesystem +%doc COPYING.LIB +%dir %{_datadir}/wine +%dir %{_datadir}/wine/gecko +%dir %{_datadir}/wine/mono +%dir %{_datadir}/wine/fonts +%{_datadir}/wine/wine.inf +%{_datadir}/wine/l_intl.nls %files common -%defattr(-,root,root,-) %{_bindir}/notepad %{_bindir}/winedbg %{_bindir}/winefile @@ -1166,116 +2025,148 @@ update-desktop-database &>/dev/null || : %{_bindir}/wineboot %{_bindir}/wineconsole %{_bindir}/winecfg -%dir %{_datadir}/wine -%{_mandir}/man1/wine.1.gz +%{_mandir}/man1/wine.1* %{_mandir}/man1/wineserver.1* -%lang(fr) %{_mandir}/fr.UTF-8/man1/wine.1* -%lang(fr) %{_mandir}/fr.UTF-8/man1/wineserver.1* +%{_mandir}/man1/msiexec.1* +%{_mandir}/man1/notepad.1* +%{_mandir}/man1/regedit.1* +%{_mandir}/man1/regsvr32.1* +%{_mandir}/man1/wineboot.1* +%{_mandir}/man1/winecfg.1* +%{_mandir}/man1/wineconsole.1* +%{_mandir}/man1/winefile.1* +%{_mandir}/man1/winemine.1* +%{_mandir}/man1/winepath.1* %lang(de) %{_mandir}/de.UTF-8/man1/wine.1* %lang(de) %{_mandir}/de.UTF-8/man1/wineserver.1* -%{_datadir}/wine/generic.ppd -%{_datadir}/wine/wine.inf -%{_datadir}/wine/l_intl.nls +%lang(fr) %{_mandir}/fr.UTF-8/man1/wine.1* +%lang(fr) %{_mandir}/fr.UTF-8/man1/wineserver.1* +%lang(pl) %{_mandir}/pl.UTF-8/man1/wine.1* %files fonts -%defattr(-,root,root,-) -%dir %{_datadir}/wine/fonts +# meta package + +%if 0%{?wine_staging} +%files arial-fonts +%doc COPYING.LIB +%{_datadir}/wine/fonts/arial* +%endif #0%{?wine_staging} %files courier-fonts -%defattr(-,root,root,-) %doc COPYING.LIB -%{_datadir}/fonts/wine-courier-fonts +%{_datadir}/wine/fonts/cou* + +%files fixedsys-fonts +%doc COPYING.LIB +%{_datadir}/wine/fonts/*vgafix.fon %files system-fonts -%defattr(-,root,root,-) %doc COPYING.LIB -%{_datadir}/fonts/wine-system-fonts +%{_datadir}/wine/fonts/cvgasys.fon +%{_datadir}/wine/fonts/hvgasys.fon +%{_datadir}/wine/fonts/jvgasys.fon +%{_datadir}/wine/fonts/svgasys.fon +%{_datadir}/wine/fonts/vgas1255.fon +%{_datadir}/wine/fonts/vgas1256.fon +%{_datadir}/wine/fonts/vgas1257.fon +%{_datadir}/wine/fonts/vgas874.fon +%{_datadir}/wine/fonts/vgasys.fon +%{_datadir}/wine/fonts/vgasyse.fon +%{_datadir}/wine/fonts/vgasysg.fon +%{_datadir}/wine/fonts/vgasysr.fon +%{_datadir}/wine/fonts/vgasyst.fon %files small-fonts -%defattr(-,root,root,-) %doc COPYING.LIB -%{_datadir}/fonts/wine-small-fonts +%{_datadir}/wine/fonts/sma* +%{_datadir}/wine/fonts/jsma* %files marlett-fonts %doc COPYING.LIB -%defattr(-,root,root,-) -%{_datadir}/fonts/wine-marlett-fonts +%{_datadir}/wine/fonts/marlett.ttf -#%files ms-sans-serif-fonts -#%defattr(-,root,root,-) -#%doc COPYING.LIB -#%{_datadir}/fonts/wine-ms-sans-serif-fonts - -#%files tahoma-fonts -#%defattr(-,root,root,-) -#%doc COPYING.LIB -#%{_datadir}/fonts/wine-tahoma-fonts - -%files symbol-fonts -%defattr(-,root,root,-) +%files ms-sans-serif-fonts %doc COPYING.LIB -%{_datadir}/fonts/wine-symbol-fonts - -%files desktop -%defattr(-,root,root,-) -%{_datadir}/applications/fedora-wine-notepad.desktop -%{_datadir}/applications/fedora-wine-winefile.desktop -%{_datadir}/applications/fedora-wine-winemine.desktop -%{_datadir}/applications/fedora-wine-mime-msi.desktop -%{_datadir}/applications/fedora-wine.desktop -%{_datadir}/applications/fedora-wine-regedit.desktop -%{_datadir}/applications/fedora-wine-uninstaller.desktop -%{_datadir}/applications/fedora-wine-winecfg.desktop -%{_datadir}/applications/fedora-wine-wineboot.desktop -%{_datadir}/applications/fedora-wine-winhelp.desktop -%{_datadir}/applications/fedora-wine-wordpad.desktop -%{_datadir}/applications/fedora-wine-oleview.desktop -%{_datadir}/desktop-directories/Wine.directory -%{_sysconfdir}/xdg/menus/applications-merged/wine.menu -%{_initrddir}/wine - -%if 0%{?fedora} >= 10 -%{_datadir}/pixmaps/*png +%{_datadir}/wine/fonts/sse* +%if 0%{?wine_staging} +%{_datadir}/wine/fonts/msyh.ttf %endif -# esd subpackage -%files esd -%defattr(-,root,root,-) -%{_libdir}/wine/wineesd.drv.so +%files tahoma-fonts +%doc COPYING.LIB +%{_datadir}/wine/fonts/tahoma*ttf -# jack subpackage -%files jack -%defattr(-,root,root,-) -%{_libdir}/wine/winejack.drv.so +%files tahoma-fonts-system +%doc README-tahoma +%{_datadir}/fonts/wine-tahoma-fonts +%{_fontconfig_confdir}/20-wine-tahoma*conf +%{_fontconfig_templatedir}/20-wine-tahoma*conf -# nas subpackage -%files nas -%defattr(-,root,root,-) -%{_libdir}/wine/winenas.drv.so +%if 0%{?wine_staging} +%files times-new-roman-fonts +%doc COPYING.LIB +%{_datadir}/wine/fonts/times.ttf + +%files times-new-roman-fonts-system +%{_datadir}/fonts/wine-times-new-roman-fonts +%endif + +%files symbol-fonts +%doc COPYING.LIB +%{_datadir}/wine/fonts/symbol.ttf + +%files wingdings-fonts +%doc COPYING.LIB +%{_datadir}/wine/fonts/wingding.ttf + +%files wingdings-fonts-system +%{_datadir}/fonts/wine-wingdings-fonts + +%files desktop +%{_datadir}/applications/wine-notepad.desktop +%{_datadir}/applications/wine-winefile.desktop +%{_datadir}/applications/wine-winemine.desktop +%{_datadir}/applications/wine-mime-msi.desktop +%{_datadir}/applications/wine.desktop +%{_datadir}/applications/wine-regedit.desktop +%{_datadir}/applications/wine-uninstaller.desktop +%{_datadir}/applications/wine-winecfg.desktop +%{_datadir}/applications/wine-wineboot.desktop +%{_datadir}/applications/wine-winhelp.desktop +%{_datadir}/applications/wine-wordpad.desktop +%{_datadir}/applications/wine-oleview.desktop +%{_datadir}/desktop-directories/Wine.directory +%config %{_sysconfdir}/xdg/menus/applications-merged/wine.menu +%{_datadir}/icons/hicolor/scalable/apps/*svg + +%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7 +%files systemd +%config %{_binfmtdir}/wine.conf +%endif + +%if 0%{?rhel} == 6 +%files sysvinit +%{_initrddir}/wine +%endif # ldap subpackage %files ldap -%defattr(-,root,root,-) %{_libdir}/wine/wldap32.dll.so # cms subpackage %files cms -%defattr(-,root,root,-) %{_libdir}/wine/mscms.dll.so # twain subpackage %files twain -%defattr(-,root,root,-) %{_libdir}/wine/twain_32.dll.so %{_libdir}/wine/sane.ds.so # capi subpackage %files capi -%defattr(-,root,root,-) %{_libdir}/wine/capi2032.dll.so %files devel -%defattr(-,root,root,-) %{_bindir}/function_grep.pl %{_bindir}/widl %{_bindir}/winebuild @@ -1288,6 +2179,7 @@ update-desktop-database &>/dev/null || : %{_bindir}/wrc %{_mandir}/man1/widl.1* %{_mandir}/man1/winebuild.1* +%{_mandir}/man1/winecpp.1* %{_mandir}/man1/winedump.1* %{_mandir}/man1/winegcc.1* %{_mandir}/man1/winemaker.1* @@ -1304,25 +2196,21 @@ update-desktop-database &>/dev/null || : %{_libdir}/wine/*.def %files pulseaudio -%defattr(-,root,root,-) -# winepulse documentation -%doc README-FEDORA-PULSEAUDIO %{_libdir}/wine/winepulse.drv.so %files alsa -%defattr(-,root,root,-) %{_libdir}/wine/winealsa.drv.so -%files oss -%defattr(-,root,root,-) -%{_libdir}/wine/wineoss.drv.so - %if 0%{?fedora} >= 10 || 0%{?rhel} >= 6 %files openal -%defattr(-,root,root,-) %{_libdir}/wine/openal32.dll.so %endif +%if 0%{?fedora} +%files opencl +%{_libdir}/wine/opencl.dll.so +%endif + %changelog * Wed Sep 25 2019 Michael Cronenworth 4.0.2-1 - version update @@ -2733,7 +3621,7 @@ update-desktop-database &>/dev/null || : * Sat Apr 15 2006 Andreas Bierfert 0.9.12-1 - fix rpath issues (#187429,#188905) -- version upgrade +- version upgrade * Mon Apr 03 2006 Andreas Bierfert 0.9.11-1 @@ -2785,9 +3673,9 @@ update-desktop-database &>/dev/null || : - fix cflags for compile - test new BR -* Wed Jan 04 2006 Andreas Bierfert -0.9.4-5 -- fix #176834 +* Wed Jan 04 2006 Andreas Bierfert +0.9.4-5 +- fix #176834 * Mon Jan 02 2006 Andreas Bierfert 0.9.4-4 @@ -2854,7 +3742,7 @@ update-desktop-database &>/dev/null || : 20050930-3 - add desktop files - revisit summary and description -- consistant use of %{buildroot} +- consistant use of %%{buildroot} * Sat Oct 22 2005 Andreas Bierfert 20050930-2 @@ -2938,7 +3826,7 @@ update-desktop-database &>/dev/null || : * Wed Feb 18 2004 Vincent Béron 20040213-1fc1 - Update to 20040213 -- Moved Wine dlls back to %{_libdir}/wine rather than %{_libdir}/wine/wine +- Moved Wine dlls back to %%{_libdir}/wine rather than %%{_libdir}/wine/wine * Sun Jan 25 2004 Vincent Béron 20040121-fc1 - Update to 20040121 @@ -2946,13 +3834,13 @@ update-desktop-database &>/dev/null || : * Sat Dec 13 2003 Vincent Béron 20031212-fc1 - Update to 20031212 -* Wed Nov 18 2003 Vincent Béron 20031118-fc1 +* Tue Nov 18 2003 Vincent Béron 20031118-fc1 - Update to 20031118 * Thu Oct 16 2003 Vincent Béron 20031016-1rh9 - Update to 20031016 -* Tue Sep 11 2003 Vincent Béron 20030911-1rh9 +* Thu Sep 11 2003 Vincent Béron 20030911-1rh9 - Fix of include location - Better separation of run-time and development files - Update to 20030911 @@ -2981,7 +3869,7 @@ update-desktop-database &>/dev/null || : * Tue Mar 18 2003 Vincent Béron 20030318-1 - Update to 20030318 -* Thu Mar 11 2003 Vincent Béron 20030219-2 +* Tue Mar 11 2003 Vincent Béron 20030219-2 - Fix the symlinks in wine-c. * Wed Feb 19 2003 Vincent Béron 20030219-1 @@ -3048,7 +3936,7 @@ update-desktop-database &>/dev/null || : * Thu Jul 26 2001 Bernhard Rosenkraenzer 20010726-1 - Fix -devel package group (#49989) - remove internal CVS files -- chkconfig deletion should be in %preun, not %postun +- chkconfig deletion should be in %%preun, not %%postun - rename initscript ("Starting windows:" at startup does look off) * Thu May 03 2001 Bernhard Rosenkraenzer 20010503-1 @@ -3076,7 +3964,7 @@ update-desktop-database &>/dev/null || : - Update - Restore wine's ability to use a global config file, it was removed in CVS for whatever reason -- Move libraries to %{_libdir}/wine to prevent conflicts with libuser +- Move libraries to %%{_libdir}/wine to prevent conflicts with libuser (Bug #24202) - Move include files to /usr/include/wine to prevent it from messing with some autoconf scripts (some broken scripts assume they're running on windoze @@ -3090,7 +3978,7 @@ update-desktop-database &>/dev/null || : * Mon Nov 20 2000 Bernhard Rosenkraenzer - Update CVS - Add a new (user) group wine that can write to the "C: drive" - %{_datadir}/wine-c + %%{_datadir}/wine-c - Fix up winedbg installation (registry entries) - Add "Program Files/Common Files" subdirectory to the "C: drive", it's referenced in the registry @@ -3117,7 +4005,7 @@ update-desktop-database &>/dev/null || : * Fri Jun 23 2000 Bernhard Rosenkraenzer - Start the initscript on startup -* Mon May 9 2000 Bernhard Rosenkraenzer +* Tue May 9 2000 Bernhard Rosenkraenzer - New version - new feature: You can now launch wine by just running a windows .exe file (./some.exe or just click on it in kfm, gmc and the likes) @@ -3144,8 +4032,8 @@ update-desktop-database &>/dev/null || : - Fix up the default wine.conf file (We really don't want it to look for CD-ROMs in /cdrom!) - create a "root filesystem" with everything required to run wine without - windows in %{_datadir}/wine-c (drive c:) -- add RedHat file in /usr/doc/wine-%{version} explaining the new directory + windows in %%{_datadir}/wine-c (drive c:) +- add RedHat file in /usr/doc/wine-%%{version} explaining the new directory layout - wine-devel requires wine diff --git a/wine.systemd b/wine.systemd new file mode 100644 index 0000000..537dd89 --- /dev/null +++ b/wine.systemd @@ -0,0 +1,5 @@ +# Pre-PE Windows Executables +:windows:M::MZ::/usr/bin/wine: + +# PE Windows Executables +:windowsPE:M::PE::/usr/bin/wine: diff --git a/winepulse-0.38-winecfg.patch b/winepulse-0.38-winecfg.patch deleted file mode 100644 index 30d17ed..0000000 --- a/winepulse-0.38-winecfg.patch +++ /dev/null @@ -1,313 +0,0 @@ -diff --git a/programs/winecfg/Bg.rc b/programs/winecfg/Bg.rc -index d1ad34d..a95503c 100644 ---- a/programs/winecfg/Bg.rc -+++ b/programs/winecfg/Bg.rc -@@ -272,6 +272,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Basic" - IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio Driver" - IDS_DRIVER_ALSA "ALSA Driver" - IDS_DRIVER_ESOUND "EsounD Driver" - IDS_DRIVER_OSS "OSS Driver" -diff --git a/programs/winecfg/Cs.rc b/programs/winecfg/Cs.rc -index a3f42d8..4758313 100644 ---- a/programs/winecfg/Cs.rc -+++ b/programs/winecfg/Cs.rc -@@ -272,6 +272,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standardn" - IDS_ACCEL_BASIC "Zkladn" - IDS_ACCEL_EMULATION "Emulace" -+ IDS_DRIVER_PULSE "Ovlada PulseAudio" - IDS_DRIVER_ALSA "Ovlada ALSA" - IDS_DRIVER_ESOUND "Ovlada EsounD" - IDS_DRIVER_OSS "Ovlada OSS" -diff --git a/programs/winecfg/Da.rc b/programs/winecfg/Da.rc -index 6e594cc..4d1778c 100644 ---- a/programs/winecfg/Da.rc -+++ b/programs/winecfg/Da.rc -@@ -279,6 +279,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Grundlæggende" - IDS_ACCEL_EMULATION "Emuléring" -+ IDS_DRIVER_PULSE "PulseAudio-driver" - IDS_DRIVER_ALSA "ALSA-driver" - IDS_DRIVER_ESOUND "EsounD-driver" - IDS_DRIVER_OSS "OSS-driver" -diff --git a/programs/winecfg/De.rc b/programs/winecfg/De.rc -index 885f986..265f006 100644 ---- a/programs/winecfg/De.rc -+++ b/programs/winecfg/De.rc -@@ -278,6 +278,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Einfach" - IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio-Treiber" - IDS_DRIVER_ALSA "ALSA-Treiber" - IDS_DRIVER_ESOUND "EsounD-Treiber" - IDS_DRIVER_OSS "OSS-Treiber" -diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc -index 9fc42ea..5bd66f9 100644 ---- a/programs/winecfg/En.rc -+++ b/programs/winecfg/En.rc -@@ -278,6 +278,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Basic" - IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio Driver" - IDS_DRIVER_ALSA "ALSA Driver" - IDS_DRIVER_ESOUND "EsounD Driver" - IDS_DRIVER_OSS "OSS Driver" -diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc -index dcf8e37..d46f32e 100644 ---- a/programs/winecfg/Es.rc -+++ b/programs/winecfg/Es.rc -@@ -277,6 +277,7 @@ BEGIN - IDS_ACCEL_STANDARD "Estndar" - IDS_ACCEL_BASIC "Bsica" - IDS_ACCEL_EMULATION "Emulacin" -+ IDS_DRIVER_PULSE "Controlador PulseAudio" - IDS_DRIVER_ALSA "Controlador ALSA" - IDS_DRIVER_ESOUND "Controlador EsounD" - IDS_DRIVER_OSS "Controlador OSS" -diff --git a/programs/winecfg/Fi.rc b/programs/winecfg/Fi.rc -index 93c1e24..6beb0cb 100644 ---- a/programs/winecfg/Fi.rc -+++ b/programs/winecfg/Fi.rc -@@ -266,6 +266,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Basic" - IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio Driver" - IDS_DRIVER_ALSA "ALSA Driver" - IDS_DRIVER_ESOUND "EsounD Driver" - IDS_DRIVER_OSS "OSS Driver" -diff --git a/programs/winecfg/Fr.rc b/programs/winecfg/Fr.rc -index ebbcfdd..638025f 100644 ---- a/programs/winecfg/Fr.rc -+++ b/programs/winecfg/Fr.rc -@@ -280,6 +280,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Basique" - IDS_ACCEL_EMULATION "Émulation" -+ IDS_DRIVER_PULSE "Pilote PulseAudio" - IDS_DRIVER_ALSA "Pilote ALSA" - IDS_DRIVER_ESOUND "Pilote EsounD" - IDS_DRIVER_OSS "Pilote OSS" -diff --git a/programs/winecfg/Hu.rc b/programs/winecfg/Hu.rc -index 0fb4982..d7df634 100644 ---- a/programs/winecfg/Hu.rc -+++ b/programs/winecfg/Hu.rc -@@ -266,6 +266,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Basic" - IDS_ACCEL_EMULATION "Emulation" -+ IDS_DRIVER_PULSE "PulseAudio Driver" - IDS_DRIVER_ALSA "ALSA Driver" - IDS_DRIVER_ESOUND "EsounD Driver" - IDS_DRIVER_OSS "OSS Driver" -diff --git a/programs/winecfg/It.rc b/programs/winecfg/It.rc -index e738d22..cd64710 100644 ---- a/programs/winecfg/It.rc -+++ b/programs/winecfg/It.rc -@@ -280,6 +280,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Base" - IDS_ACCEL_EMULATION "Emulazione" -+ IDS_DRIVER_PULSE "Driver PulseAudio" - IDS_DRIVER_ALSA "Driver ALSA" - IDS_DRIVER_ESOUND "Driver Esound" - IDS_DRIVER_OSS "Driver OSS" -diff --git a/programs/winecfg/Ja.rc b/programs/winecfg/Ja.rc -index a082856..e5a889b 100644 ---- a/programs/winecfg/Ja.rc -+++ b/programs/winecfg/Ja.rc -@@ -281,6 +281,7 @@ BEGIN - IDS_ACCEL_STANDARD "標準" - IDS_ACCEL_BASIC "基本" - IDS_ACCEL_EMULATION "エミュレーション" -+ IDS_DRIVER_PULSE "PulseAudio ドライバ" - IDS_DRIVER_ALSA "ALSA ドライバ" - IDS_DRIVER_ESOUND "EsounD ドライバ" - IDS_DRIVER_OSS "OSS ドライバ" -diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc -index 6321fe8..279a99d 100644 ---- a/programs/winecfg/Ko.rc -+++ b/programs/winecfg/Ko.rc -@@ -282,6 +282,7 @@ BEGIN - IDS_ACCEL_STANDARD "표준" - IDS_ACCEL_BASIC "기본" - IDS_ACCEL_EMULATION "애뮬레이션" -+ IDS_DRIVER_PULSE "PulseAudio 드라이버" - IDS_DRIVER_ALSA "ALSA 드라이버" - IDS_DRIVER_ESOUND "EsounD 드라이버" - IDS_DRIVER_OSS "OSS 드라이버" -diff --git a/programs/winecfg/Lt.rc b/programs/winecfg/Lt.rc -index 7a979f0..e4f7ff4 100644 ---- a/programs/winecfg/Lt.rc -+++ b/programs/winecfg/Lt.rc -@@ -279,6 +279,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standartinis" - IDS_ACCEL_BASIC "Bazinis" - IDS_ACCEL_EMULATION "Emuliacija" -+ IDS_DRIVER_PULSE "PulseAudio tvarkyklė" - IDS_DRIVER_ALSA "ALSA tvarkyklė" - IDS_DRIVER_ESOUND "EsounD tvarkyklė" - IDS_DRIVER_OSS "OSS tvarkyklė" -diff --git a/programs/winecfg/Nl.rc b/programs/winecfg/Nl.rc -index 62ab796..8bb207e 100644 ---- a/programs/winecfg/Nl.rc -+++ b/programs/winecfg/Nl.rc -@@ -279,6 +279,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standaard" - IDS_ACCEL_BASIC "Eenvoudig" - IDS_ACCEL_EMULATION "Emulatie" -+ IDS_DRIVER_PULSE "PulseAudio Stuurprogramma" - IDS_DRIVER_ALSA "ALSA Stuurprogramma" - IDS_DRIVER_ESOUND "EsounD Stuurprogramma" - IDS_DRIVER_OSS "OSS Stuurprogramma" -diff --git a/programs/winecfg/No.rc b/programs/winecfg/No.rc -index 338a291..b54bd8e 100644 ---- a/programs/winecfg/No.rc -+++ b/programs/winecfg/No.rc -@@ -279,6 +279,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Grunnleggende" - IDS_ACCEL_EMULATION "Emulering" -+ IDS_DRIVER_PULSE "PulseAudio-driver" - IDS_DRIVER_ALSA "ALSA-driver" - IDS_DRIVER_ESOUND "EsounD-driver" - IDS_DRIVER_OSS "OSS-driver" -diff --git a/programs/winecfg/Pl.rc b/programs/winecfg/Pl.rc -index 4cc4e85..9440ebc 100644 ---- a/programs/winecfg/Pl.rc -+++ b/programs/winecfg/Pl.rc -@@ -280,6 +280,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standardowe" - IDS_ACCEL_BASIC "Podstawowe" - IDS_ACCEL_EMULATION "Emulacja" -+ IDS_DRIVER_PULSE "Sterownik PulseAudio" - IDS_DRIVER_ALSA "Sterownik ALSA" - IDS_DRIVER_ESOUND "Sterownik EsounD" - IDS_DRIVER_OSS "Sterownik OSS" -diff --git a/programs/winecfg/Pt.rc b/programs/winecfg/Pt.rc -index f96b9ad..4d8a05b 100644 ---- a/programs/winecfg/Pt.rc -+++ b/programs/winecfg/Pt.rc -@@ -611,6 +611,7 @@ BEGIN - IDS_ACCEL_STANDARD "Padrão" - IDS_ACCEL_BASIC "Básico" - IDS_ACCEL_EMULATION "Emulação" -+ IDS_DRIVER_PULSE "Controlador PulseAudio" - IDS_DRIVER_ALSA "Controlador ALSA" - IDS_DRIVER_ESOUND "Controlador EsounD" - IDS_DRIVER_OSS "Controlador OSS" -diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc -index f6fe5a0..cf96300 100644 ---- a/programs/winecfg/Ro.rc -+++ b/programs/winecfg/Ro.rc -@@ -278,6 +278,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "De bază" - IDS_ACCEL_EMULATION "Emulare" -+ IDS_DRIVER_PULSE "Driver PulseAudio" - IDS_DRIVER_ALSA "Driver ALSA" - IDS_DRIVER_ESOUND "Driver Esound" - IDS_DRIVER_OSS "Driver OSS" -diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc -index b391edc..70d79f7 100644 ---- a/programs/winecfg/Ru.rc -+++ b/programs/winecfg/Ru.rc -@@ -283,6 +283,7 @@ BEGIN - IDS_ACCEL_STANDARD "Стандартное" - IDS_ACCEL_BASIC "Минимальное" - IDS_ACCEL_EMULATION "Эмуляция" -+ IDS_DRIVER_PULSE "PulseAudio драйвер" - IDS_DRIVER_ALSA "ALSA драйвер" - IDS_DRIVER_ESOUND "EsounD драйвер" - IDS_DRIVER_OSS "OSS драйвер" -diff --git a/programs/winecfg/Si.rc b/programs/winecfg/Si.rc -index 50322b6..bf85f4d 100644 ---- a/programs/winecfg/Si.rc -+++ b/programs/winecfg/Si.rc -@@ -278,6 +278,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standardno" - IDS_ACCEL_BASIC "Osnovno" - IDS_ACCEL_EMULATION "Emulacija" -+ IDS_DRIVER_PULSE "PulseAudio gonilnik" - IDS_DRIVER_ALSA "ALSA gonilnik" - IDS_DRIVER_ESOUND "EsounD gonilnik" - IDS_DRIVER_OSS "OSS gonilnik" -diff --git a/programs/winecfg/Sv.rc b/programs/winecfg/Sv.rc -index 7e7f981..4d11a8c 100644 ---- a/programs/winecfg/Sv.rc -+++ b/programs/winecfg/Sv.rc -@@ -266,6 +266,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standard" - IDS_ACCEL_BASIC "Grundlggande" - IDS_ACCEL_EMULATION "Emulering" -+ IDS_DRIVER_PULSE "PulseAudio-drivrutin" - IDS_DRIVER_ALSA "ALSA-drivrutin" - IDS_DRIVER_ESOUND "EsounD-drivrutin" - IDS_DRIVER_OSS "OSS-drivrutin" -diff --git a/programs/winecfg/Tr.rc b/programs/winecfg/Tr.rc -index c124900..09a0b27 100644 ---- a/programs/winecfg/Tr.rc -+++ b/programs/winecfg/Tr.rc -@@ -266,6 +266,7 @@ BEGIN - IDS_ACCEL_STANDARD "Standart" - IDS_ACCEL_BASIC "Temel" - IDS_ACCEL_EMULATION "Taklit" -+ IDS_DRIVER_PULSE "PulseAudio Srcs" - IDS_DRIVER_ALSA "ALSA Srcs" - IDS_DRIVER_ESOUND "EsounD Srcs" - IDS_DRIVER_OSS "OSS Srcs" -diff --git a/programs/winecfg/Zh.rc b/programs/winecfg/Zh.rc -index 93f6416..84bc6a0 100644 ---- a/programs/winecfg/Zh.rc -+++ b/programs/winecfg/Zh.rc -@@ -271,6 +271,7 @@ BEGIN - IDS_ACCEL_STANDARD "标准" - IDS_ACCEL_BASIC "基本" - IDS_ACCEL_EMULATION "软件模拟" -+ IDS_DRIVER_PULSE "PulseAudio 驱动" - IDS_DRIVER_ALSA "ALSA 驱动" - IDS_DRIVER_ESOUND "EsounD 驱动" - IDS_DRIVER_OSS "OSS 驱动" -diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c -index 134296d..1d70c03 100644 ---- a/programs/winecfg/audio.c -+++ b/programs/winecfg/audio.c -@@ -90,6 +90,7 @@ typedef struct - } AUDIO_DRIVER; - - static AUDIO_DRIVER sAudioDrivers[] = { -+ {IDS_DRIVER_PULSE, "pulse"}, - {IDS_DRIVER_ALSA, "alsa"}, - {IDS_DRIVER_OSS, "oss"}, - {IDS_DRIVER_COREAUDIO, "coreaudio"}, -diff --git a/programs/winecfg/libraries.c b/programs/winecfg/libraries.c -index e402b4e..f0264ca 100644 ---- a/programs/winecfg/libraries.c -+++ b/programs/winecfg/libraries.c -@@ -73,6 +73,7 @@ static const char * const builtin_only[] = - "winedos", - "winemp3.acm", - "wineps", -+ "winepulse.drv", - "winmm", - "wintab32", - "wnaspi32", -diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h -index 43651d8..160e01e 100644 ---- a/programs/winecfg/resource.h -+++ b/programs/winecfg/resource.h -@@ -186,7 +186,7 @@ - #define IDS_ACCEL_BASIC 8302 - #define IDS_ACCEL_EMULATION 8303 - #define IDS_DRIVER_ALSA 8304 -- -+#define IDS_DRIVER_PULSE 8305 - #define IDS_DRIVER_ESOUND 8306 - #define IDS_DRIVER_OSS 8307 - #define IDS_DRIVER_JACK 8308 diff --git a/winepulse-0.39-configure.ac.patch b/winepulse-0.39-configure.ac.patch deleted file mode 100644 index 5055b6d..0000000 --- a/winepulse-0.39-configure.ac.patch +++ /dev/null @@ -1,60 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index 341ba181..998e063 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -78,6 +78,7 @@ AC_ARG_WITH(png, AS_HELP_STRING([--without-png],[do not use PNG]), - [if test "x$withval" = "xno"; then ac_cv_header_png_h=no; fi]) - AC_ARG_WITH(pthread, AS_HELP_STRING([--without-pthread],[do not use the pthread library]), - [if test "x$withval" = "xno"; then ac_cv_header_pthread_h=no; fi]) -+AC_ARG_WITH(pulse, AC_HELP_STRING([--without-pulse],[do not use PulseAudio sound support])) - AC_ARG_WITH(sane, AS_HELP_STRING([--without-sane],[do not use SANE (scanner support)])) - AC_ARG_WITH(tiff, AS_HELP_STRING([--without-tiff],[do not use TIFF]), - [if test "x$withval" = "xno"; then ac_cv_header_tiffio_h=no; fi]) -@@ -1402,6 +1403,30 @@ then - CFLAGS="$save_CFLAGS" - fi - -+dnl **** Check for PulseAudio **** -+AC_SUBST(PULSELIBS,"") -+AC_SUBST(PULSEINCL,"") -+if test "x$with_pulse" != "xno"; -+then -+ ac_save_CPPFLAGS="$CPPFLAGS" -+ if test "$PKG_CONFIG" != "false"; -+ then -+ ac_pulse_libs="`$PKG_CONFIG --libs libpulse 2>/dev/null`" -+ ac_pulse_cflags="`$PKG_CONFIG --cflags-only-I libpulse 2>/dev/null`" -+ -+ CPPFLAGS="$CPPFLAGS $ac_pulse_cflags" -+ AC_CHECK_HEADERS(pulse/pulseaudio.h, -+ [AC_CHECK_LIB(pulse, pa_stream_is_corked, -+ [AC_DEFINE(HAVE_PULSEAUDIO, 1, [Define if you have pulseaudio]) -+ PULSELIBS="$ac_pulse_libs" -+ PULSEINCL="$ac_pulse_cflags"],,$ac_pulse_libs) -+ ]) -+ fi -+ CPPFLAGS="$ac_save_CPPFLAGS" -+fi -+WINE_WARNING_WITH(pulse, [test "$ac_cv_lib_pulse_pa_stream_is_corked" != "yes"], -+ [libpulse ${notice_platform}development files not found or too old, Pulse won't be supported.]) -+ - dnl **** Check for ALSA 1.x **** - AC_SUBST(ALSALIBS,"") - if test "$ac_cv_header_sys_asoundlib_h" = "yes" -o "$ac_cv_header_alsa_asoundlib_h" = "yes" -@@ -1580,7 +1605,7 @@ dnl **** Check for libodbc **** - WINE_CHECK_SONAME(odbc,SQLConnect,,[AC_DEFINE_UNQUOTED(SONAME_LIBODBC,["libodbc.$LIBEXT"])]) - - dnl **** Check for any sound system **** --if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$ac_cv_lib_soname_jack" = "x" -a \ -+if test "x$ALSALIBS$AUDIOIOLIBS$COREAUDIO$NASLIBS$ESDLIBS$PULSELIBS$ac_cv_lib_soname_jack" = "x" -a \ - "$ac_cv_header_sys_soundcard_h" != "yes" -a \ - "$ac_cv_header_machine_soundcard_h" != "yes" -a \ - "$ac_cv_header_soundcard_h" != "yes" -a \ -@@ -2724,6 +2749,7 @@ WINE_CONFIG_DLL(winenas.drv) - WINE_CONFIG_DLL(wineoss.drv) - WINE_CONFIG_DLL(wineps.drv) - WINE_CONFIG_DLL(wineps16.drv16,enable_win16) -+WINE_CONFIG_DLL(winepulse.drv) - WINE_CONFIG_DLL(winequartz.drv) - WINE_CONFIG_DLL(winex11.drv) - WINE_CONFIG_DLL(wing.dll16,enable_win16) diff --git a/winepulse-0.39.patch b/winepulse-0.39.patch deleted file mode 100644 index 9a4b773..0000000 --- a/winepulse-0.39.patch +++ /dev/null @@ -1,2669 +0,0 @@ -diff --git a/dlls/winepulse.drv/Makefile.in b/dlls/winepulse.drv/Makefile.in -new file mode 100644 -index 0000000..a6fdbf8 ---- /dev/null -+++ b/dlls/winepulse.drv/Makefile.in -@@ -0,0 +1,10 @@ -+MODULE = winepulse.drv -+IMPORTS = winmm user32 kernel32 -+EXTRALIBS = @PULSELIBS@ -+EXTRAINCL = @PULSEINCL@ -+ -+C_SRCS = waveout.c \ -+ wavein.c \ -+ pulse.c -+ -+@MAKE_DLL_RULES@ -diff --git a/dlls/winepulse.drv/pulse.c b/dlls/winepulse.drv/pulse.c -new file mode 100644 -index 0000000..9dd1f80 ---- /dev/null -+++ b/dlls/winepulse.drv/pulse.c -@@ -0,0 +1,805 @@ -+/* -+ * Wine Driver for PulseAudio -+ * http://pulseaudio.org/ -+ * -+ * Copyright 2009 Arthur Taylor -+ * -+ * Contains code from other wine sound drivers. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wingdi.h" -+#include "winuser.h" -+#include "winreg.h" -+#include "mmddk.h" -+#include "ks.h" -+#include "ksguid.h" -+#include "ksmedia.h" -+ -+#ifdef HAVE_UNISTD_H -+# include -+#endif -+#include -+ -+#ifdef HAVE_PULSEAUDIO -+ -+#include "wine/unicode.h" -+#include "wine/debug.h" -+#include "wine/library.h" -+ -+#include -+#include -+WINE_DEFAULT_DEBUG_CHANNEL(wave); -+ -+/* These strings used only for tracing */ -+const char * PULSE_getCmdString(enum win_wm_message msg) { -+ static char unknown[32]; -+#define MSG_TO_STR(x) case x: return #x -+ switch(msg) { -+ MSG_TO_STR(WINE_WM_PAUSING); -+ MSG_TO_STR(WINE_WM_RESTARTING); -+ MSG_TO_STR(WINE_WM_RESETTING); -+ MSG_TO_STR(WINE_WM_HEADER); -+ MSG_TO_STR(WINE_WM_BREAKLOOP); -+ MSG_TO_STR(WINE_WM_CLOSING); -+ MSG_TO_STR(WINE_WM_STARTING); -+ MSG_TO_STR(WINE_WM_STOPPING); -+ MSG_TO_STR(WINE_WM_XRUN); -+ MSG_TO_STR(WINE_WM_FEED); -+ } -+#undef MSG_TO_STR -+ sprintf(unknown, "UNKNOWN(0x%08x)", msg); -+ return unknown; -+} -+ -+/*======================================================================* -+ * Ring Buffer Functions - copied from winealsa.drv * -+ *======================================================================*/ -+ -+/* unless someone makes a wineserver kernel module, Unix pipes are faster than win32 events */ -+#define USE_PIPE_SYNC -+ -+#ifdef USE_PIPE_SYNC -+#define INIT_OMR(omr) do { if (pipe(omr->msg_pipe) < 0) { omr->msg_pipe[0] = omr->msg_pipe[1] = -1; } } while (0) -+#define CLOSE_OMR(omr) do { close(omr->msg_pipe[0]); close(omr->msg_pipe[1]); } while (0) -+#define SIGNAL_OMR(omr) do { int x = 0; write((omr)->msg_pipe[1], &x, sizeof(x)); } while (0) -+#define CLEAR_OMR(omr) do { int x = 0; read((omr)->msg_pipe[0], &x, sizeof(x)); } while (0) -+#define RESET_OMR(omr) do { } while (0) -+#define WAIT_OMR(omr, sleep) \ -+ do { struct pollfd pfd; pfd.fd = (omr)->msg_pipe[0]; \ -+ pfd.events = POLLIN; poll(&pfd, 1, sleep); } while (0) -+#else -+#define INIT_OMR(omr) do { omr->msg_event = CreateEventW(NULL, FALSE, FALSE, NULL); } while (0) -+#define CLOSE_OMR(omr) do { CloseHandle(omr->msg_event); } while (0) -+#define SIGNAL_OMR(omr) do { SetEvent((omr)->msg_event); } while (0) -+#define CLEAR_OMR(omr) do { } while (0) -+#define RESET_OMR(omr) do { ResetEvent((omr)->msg_event); } while (0) -+#define WAIT_OMR(omr, sleep) \ -+ do { WaitForSingleObject((omr)->msg_event, sleep); } while (0) -+#endif -+ -+#define PULSE_RING_BUFFER_INCREMENT 64 -+ -+/****************************************************************** -+ * PULSE_InitRingMessage -+ * -+ * Initialize the ring of messages for passing between driver's caller -+ * and playback/record thread -+ */ -+int PULSE_InitRingMessage(PULSE_MSG_RING* omr) -+{ -+ omr->msg_toget = 0; -+ omr->msg_tosave = 0; -+ INIT_OMR(omr); -+ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; -+ omr->messages = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,omr->ring_buffer_size * sizeof(PULSE_MSG)); -+ -+ InitializeCriticalSection(&omr->msg_crst); -+ omr->msg_crst.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": PULSE_MSG_RING.msg_crst"); -+ return 0; -+} -+ -+/****************************************************************** -+ * PULSE_DestroyRingMessage -+ * -+ */ -+int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr) -+{ -+ CLOSE_OMR(omr); -+ HeapFree(GetProcessHeap(),0,omr->messages); -+ omr->messages = NULL; -+ omr->ring_buffer_size = PULSE_RING_BUFFER_INCREMENT; -+ omr->msg_crst.DebugInfo->Spare[0] = 0; -+ DeleteCriticalSection(&omr->msg_crst); -+ return 0; -+} -+/****************************************************************** -+ * PULSE_ResetRingMessage -+ * -+ */ -+void PULSE_ResetRingMessage(PULSE_MSG_RING* omr) -+{ -+ RESET_OMR(omr); -+} -+ -+/****************************************************************** -+ * PULSE_WaitRingMessage -+ * -+ */ -+void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep) -+{ -+ WAIT_OMR(omr, sleep); -+} -+ -+/****************************************************************** -+ * PULSE_AddRingMessage -+ * -+ * Inserts a new message into the ring (should be called from DriverProc derived routines) -+ */ -+int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait) -+{ -+ HANDLE hEvent = INVALID_HANDLE_VALUE; -+ -+ EnterCriticalSection(&omr->msg_crst); -+ if ((omr->msg_toget == ((omr->msg_tosave + 1) % omr->ring_buffer_size))) -+ { -+ int old_ring_buffer_size = omr->ring_buffer_size; -+ omr->ring_buffer_size += PULSE_RING_BUFFER_INCREMENT; -+ omr->messages = HeapReAlloc(GetProcessHeap(),0,omr->messages, omr->ring_buffer_size * sizeof(PULSE_MSG)); -+ /* Now we need to rearrange the ring buffer so that the new -+ buffers just allocated are in between omr->msg_tosave and -+ omr->msg_toget. -+ */ -+ if (omr->msg_tosave < omr->msg_toget) -+ { -+ memmove(&(omr->messages[omr->msg_toget + PULSE_RING_BUFFER_INCREMENT]), -+ &(omr->messages[omr->msg_toget]), -+ sizeof(PULSE_MSG)*(old_ring_buffer_size - omr->msg_toget) -+ ); -+ omr->msg_toget += PULSE_RING_BUFFER_INCREMENT; -+ } -+ } -+ if (wait) -+ { -+ hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); -+ if (hEvent == INVALID_HANDLE_VALUE) -+ { -+ ERR("can't create event !?\n"); -+ LeaveCriticalSection(&omr->msg_crst); -+ return 0; -+ } -+ /* fast messages have to be added at the start of the queue */ -+ omr->msg_toget = (omr->msg_toget + omr->ring_buffer_size - 1) % omr->ring_buffer_size; -+ -+ omr->messages[omr->msg_toget].msg = msg; -+ omr->messages[omr->msg_toget].param = param; -+ omr->messages[omr->msg_toget].hEvent = hEvent; -+ } -+ else -+ { -+ omr->messages[omr->msg_tosave].msg = msg; -+ omr->messages[omr->msg_tosave].param = param; -+ omr->messages[omr->msg_tosave].hEvent = INVALID_HANDLE_VALUE; -+ omr->msg_tosave = (omr->msg_tosave + 1) % omr->ring_buffer_size; -+ } -+ LeaveCriticalSection(&omr->msg_crst); -+ /* signal a new message */ -+ SIGNAL_OMR(omr); -+ if (wait) -+ { -+ /* wait for playback/record thread to have processed the message */ -+ WaitForSingleObject(hEvent, INFINITE); -+ CloseHandle(hEvent); -+ } -+ return 1; -+} -+ -+/****************************************************************** -+ * PULSE_RetrieveRingMessage -+ * -+ * Get a message from the ring. Should be called by the playback/record thread. -+ */ -+int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, -+ enum win_wm_message *msg, DWORD *param, HANDLE *hEvent) -+{ -+ EnterCriticalSection(&omr->msg_crst); -+ -+ if (omr->msg_toget == omr->msg_tosave) /* buffer empty ? */ -+ { -+ LeaveCriticalSection(&omr->msg_crst); -+ return 0; -+ } -+ -+ *msg = omr->messages[omr->msg_toget].msg; -+ omr->messages[omr->msg_toget].msg = 0; -+ *param = omr->messages[omr->msg_toget].param; -+ *hEvent = omr->messages[omr->msg_toget].hEvent; -+ omr->msg_toget = (omr->msg_toget + 1) % omr->ring_buffer_size; -+ CLEAR_OMR(omr); -+ LeaveCriticalSection(&omr->msg_crst); -+ return 1; -+} -+ -+/************************************************************************** -+ * Utility Functions -+ *************************************************************************/ -+ -+/****************************************************************** -+ * PULSE_SetupFormat -+ * -+ * Checks to see if the audio format in wf is supported, and if so set up the -+ * pa_sample_spec at ss to that format. -+ */ -+BOOL PULSE_SetupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss) { -+ WAVEFORMATEXTENSIBLE *wfex; -+ -+ ss->channels = wf->nChannels; -+ ss->rate = wf->nSamplesPerSec; -+ ss->format = PA_SAMPLE_INVALID; -+ -+ if (ss->rate < DSBFREQUENCY_MIN || ss->rate > DSBFREQUENCY_MAX) return FALSE; -+ -+ switch (wf->wFormatTag) { -+ case WAVE_FORMAT_PCM: -+ /* MSDN says that for WAVE_FORMAT_PCM, nChannels must be 1 or 2 and -+ * wBitsPerSample must be 8 or 16, yet other values are used by some -+ * applications in the wild for surround. */ -+ if (ss->channels > 6 || ss->channels < 1) return FALSE; -+ ss->format = wf->wBitsPerSample == 8 ? PA_SAMPLE_U8 -+ : wf->wBitsPerSample == 16 ? PA_SAMPLE_S16NE -+ : wf->wBitsPerSample == 32 ? PA_SAMPLE_S32NE -+ : PA_SAMPLE_INVALID; -+ break; -+ -+ case WAVE_FORMAT_MULAW: -+ if (wf->wBitsPerSample == 8) ss->format = PA_SAMPLE_ULAW; -+ break; -+ -+ case WAVE_FORMAT_ALAW: -+ if (wf->wBitsPerSample == 8) ss->format = PA_SAMPLE_ALAW; -+ break; -+ -+ case WAVE_FORMAT_EXTENSIBLE: -+ if (wf->cbSize > 22) return FALSE; -+ if (ss->channels < 1 || ss->channels > 6) return FALSE; -+ wfex = (WAVEFORMATEXTENSIBLE *)wf; -+ if (IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_PCM)) { -+ if (wf->wBitsPerSample == wfex->Samples.wValidBitsPerSample) { -+ ss->format = wf->wBitsPerSample == 8 ? PA_SAMPLE_U8 -+ : wf->wBitsPerSample == 16 ? PA_SAMPLE_S16NE -+ : wf->wBitsPerSample == 32 ? PA_SAMPLE_S32NE -+ : PA_SAMPLE_INVALID; -+ } else { -+ return FALSE; -+ } -+ } else if (wf->wBitsPerSample != wfex->Samples.wValidBitsPerSample) { -+ return FALSE; -+ } else if ((IsEqualGUID(&wfex->SubFormat, &KSDATAFORMAT_SUBTYPE_IEEE_FLOAT))) { -+ ss->format = PA_SAMPLE_FLOAT32NE; -+ } else { -+ WARN("only KSDATAFORMAT_SUBTYPE_PCM and KSDATAFORMAT_SUBTYPE_IEEE_FLOAT of WAVE_FORMAT_EXTENSIBLE supported\n"); -+ return FALSE; -+ } -+ break; -+ -+ default: -+ WARN("only WAVE_FORMAT_PCM, WAVE_FORMAT_MULAW, WAVE_FORMAT_ALAW and WAVE_FORMAT_EXTENSIBLE supported\n"); -+ return FALSE; -+ } -+ -+ if (!pa_sample_spec_valid(ss)) return FALSE; -+ if (wf->nBlockAlign != pa_frame_size(ss)) { -+ ERR("wf->nBlockAlign != the format frame size!\n"); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+/****************************************************************** -+ * PULSE_SetupFormat -+ * -+ * Converts the current time to a MMTIME structure. lpTime shold be validated -+ * before calling. -+ */ -+HRESULT PULSE_UsecToMMTime(pa_usec_t time, LPMMTIME lpTime, const pa_sample_spec *ss) { -+ pa_usec_t temp; -+ size_t bytes; -+ -+ /* Convert to milliseconds */ -+ time /= 1000; -+ -+ bytes = time * pa_bytes_per_second(ss) / 1000; -+ /* Align to frame size */ -+ bytes -= bytes % pa_frame_size(ss); -+ -+ switch (lpTime->wType) { -+ case TIME_SAMPLES: -+ lpTime->u.sample = bytes / pa_frame_size(ss); -+ TRACE("TIME_SAMPLES=%u\n", lpTime->u.sample); -+ break; -+ case TIME_MS: -+ lpTime->u.ms = time; -+ TRACE("TIME_MS=%u\n", lpTime->u.ms); -+ break; -+ case TIME_SMPTE: -+ lpTime->u.smpte.fps = 30; -+ temp = bytes / pa_frame_size(ss); -+ temp += ss->rate / lpTime->u.smpte.fps - 1; -+ lpTime->u.smpte.sec = time/1000; -+ temp -= lpTime->u.smpte.sec * ss->rate; -+ lpTime->u.smpte.min = lpTime->u.smpte.sec / 60; -+ lpTime->u.smpte.sec -= 60 * lpTime->u.smpte.min; -+ lpTime->u.smpte.hour = lpTime->u.smpte.min / 60; -+ lpTime->u.smpte.min -= 60 * lpTime->u.smpte.hour; -+ lpTime->u.smpte.frame = temp * lpTime->u.smpte.fps / ss->rate; -+ TRACE("TIME_SMPTE=%02u:%02u:%02u:%02u\n", -+ lpTime->u.smpte.hour, lpTime->u.smpte.min, -+ lpTime->u.smpte.sec, lpTime->u.smpte.frame); -+ break; -+ default: -+ WARN("Format %d not supported, using TIME_BYTES !\n", lpTime->wType); -+ lpTime->wType = TIME_BYTES; -+ /* fall through */ -+ case TIME_BYTES: -+ lpTime->u.cb = bytes; -+ TRACE("TIME_BYTES=%u\n", lpTime->u.cb); -+ break; -+ } -+ -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * PULSE_WaitForOperation -+ * -+ * Waits for pa operations to complete, and dereferences the operation. -+ */ -+void PULSE_WaitForOperation(pa_operation *o) { -+ if (!o) return; -+ -+ for (;;) { -+ if (pa_operation_get_state(o) != PA_OPERATION_RUNNING) -+ break; -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ pa_operation_unref(o); -+} -+ -+/************************************************************************** -+ * Common Callbacks -+ */ -+ -+/************************************************************************** -+ * PULSE_StreamRequestCallback -+ * -+ * Called by the pulse mainloop whenever it wants/has audio data. -+ */ -+void PULSE_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata) { -+ WINE_WAVEINST *ww = (WINE_WAVEINST*)userdata; -+ -+ TRACE("Server has %u bytes\n", nbytes); -+ -+ /* Make sure that the player/recorder is running */ -+ if (ww->hThread != INVALID_HANDLE_VALUE && ww->msgRing.messages) { -+ PULSE_AddRingMessage(&ww->msgRing, WINE_WM_FEED, (DWORD)nbytes, FALSE); -+ } -+} -+ -+ -+/************************************************************************** -+ * PULSE_StreamSuspendedCallback [internal] -+ * -+ * Called by the pulse mainloop any time stream playback is intentionally -+ * suspended or resumed from being suspended. -+ */ -+void PULSE_StreamSuspendedCallback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ /* Currently we handle this kinda like an underrun. Perhaps we should -+ * tell the client somehow so it doesn't just hang? */ -+ -+ if (!pa_stream_is_suspended(s) && wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); -+} -+ -+/************************************************************************** -+ * PULSE_StreamUnderflowCallback [internal] -+ * -+ * Called by the pulse mainloop when the prebuf runs out of data. -+ */ -+void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata) { -+ WINE_WAVEINST *wwo = (WINE_WAVEINST*)userdata; -+ assert(s && wwo); -+ -+ /* If we aren't playing, don't care ^_^ */ -+ if (wwo->state != WINE_WS_PLAYING) return; -+ -+ TRACE("Underrun occurred.\n"); -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE && wwo->msgRing.ring_buffer_size > 0); -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_XRUN, 0, FALSE); -+} -+ -+/************************************************************************** -+ * PULSE_StreamMovedCallback [internal] -+ * -+ * Called by the pulse mainloop when the stream gets moved, resulting in -+ * possibly different metrics. -+ */ -+void PULSE_StreamMovedCallback(pa_stream *s, void *userdata) { -+ FIXME("stub"); -+} -+ -+ -+/****************************************************************** -+ * PULSE_StreamStateCallback -+ * -+ * Called by pulse whenever the state of the stream changes. -+ */ -+void PULSE_StreamStateCallback(pa_stream *s, void *userdata) { -+ assert(s); -+ -+ switch (pa_stream_get_state(s)) { -+ case PA_STREAM_READY: -+ TRACE("Stream %p ready\n", userdata); -+ break; -+ -+ case PA_STREAM_TERMINATED: /* Stream closed normally */ -+ TRACE("Stream %p terminated\n", userdata); -+ break; -+ -+ case PA_STREAM_FAILED: /* Stream closed not-normally */ -+ ERR("Stream %p failed!\n", userdata); -+ break; -+ -+ case PA_STREAM_UNCONNECTED: -+ case PA_STREAM_CREATING: -+ return; -+ } -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_StreamSucessCallback -+ */ -+void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata) { -+ if (!success) -+ WARN("Stream %p operation failed: %s\n", userdata, pa_strerror(pa_context_errno(PULSE_context))); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_ContextSuccessCallback -+ */ -+void PULSE_ContextSuccessCallback(pa_context *c, int success, void *userdata) { -+ if (!success) ERR("Context operation failed: %s\n", pa_strerror(pa_context_errno(c))); -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * Connection management and sink / source management. -+ */ -+ -+/************************************************************************** -+ * PULSE_ContextStateCallback [internal] -+ */ -+static void PULSE_ContextStateCallback(pa_context *c, void *userdata) { -+ assert(c); -+ -+ switch (pa_context_get_state(c)) { -+ case PA_CONTEXT_CONNECTING: -+ case PA_CONTEXT_UNCONNECTED: -+ case PA_CONTEXT_AUTHORIZING: -+ case PA_CONTEXT_SETTING_NAME: -+ break; -+ -+ case PA_CONTEXT_READY: -+ case PA_CONTEXT_TERMINATED: -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ break; -+ -+ case PA_CONTEXT_FAILED: -+ ERR("Context failed: %s\n", pa_strerror(pa_context_errno(c))); -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ break; -+ } -+} -+ -+/************************************************************************** -+ * PULSE_AllocateWaveinDevice [internal] -+ * -+ * Creates or adds a device to WInDev based on the pa_source_info. -+ */ -+static void PULSE_AllocateWaveinDevice(const char *name, const char *device, const char *description, const pa_cvolume *v) { -+ WINE_WAVEDEV *wdi; -+ -+ if (WInDev) -+ wdi = HeapReAlloc(GetProcessHeap(), 0, WInDev, sizeof(WINE_WAVEDEV) * (PULSE_WidNumDevs + 1)); -+ else -+ wdi = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); -+ -+ if (!wdi) return; -+ -+ WInDev = wdi; -+ wdi = &WInDev[PULSE_WidNumDevs++]; -+ memset(wdi, 0, sizeof(WINE_WAVEDEV)); -+ memset(&(wdi->caps.in), 0, sizeof(wdi->caps.in)); -+ snprintf(wdi->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); -+ wdi->device_name = pa_xstrdup(device); -+ MultiByteToWideChar(CP_UTF8, 0, description, -1, wdi->caps.in.szPname, sizeof(wdi->caps.in.szPname)/sizeof(WCHAR)); -+ wdi->caps.in.szPname[sizeof(wdi->caps.in.szPname)/sizeof(WCHAR) - 1] = '\0'; -+ wdi->caps.in.wMid = MM_CREATIVE; -+ wdi->caps.in.wPid = MM_CREATIVE_SBP16_WAVEOUT; -+ wdi->caps.in.vDriverVersion = 0x0100; -+ wdi->caps.in.wChannels = v->channels == 1 ? 1 : 2; -+ wdi->caps.in.dwFormats = PULSE_ALL_FORMATS; -+ memset(&wdi->ds_desc, 0, sizeof(DSDRIVERDESC)); -+ memcpy(wdi->ds_desc.szDesc, description, min(sizeof(wdi->ds_desc.szDesc) - 1, strlen(description))); -+ memcpy(wdi->ds_desc.szDrvname, "winepulse.drv", 14); -+ wdi->ds_caps.dwMinSecondarySampleRate = DSBFREQUENCY_MIN; -+ wdi->ds_caps.dwMaxSecondarySampleRate = DSBFREQUENCY_MAX; -+ wdi->ds_caps.dwPrimaryBuffers = 1; -+ wdi->ds_caps.dwFlags = \ -+ DSCAPS_PRIMARYMONO | -+ DSCAPS_PRIMARYSTEREO | -+ DSCAPS_PRIMARY8BIT | -+ DSCAPS_PRIMARY16BIT | -+ DSCAPS_SECONDARYMONO | -+ DSCAPS_SECONDARYSTEREO | -+ DSCAPS_SECONDARY8BIT | -+ DSCAPS_SECONDARY16BIT | -+ DSCCAPS_MULTIPLECAPTURE; -+} -+ -+/************************************************************************** -+ * PULSE_AllocateWaveoutDevice [internal] -+ * -+ * Creates or adds a sink to the WOutDev array. -+ */ -+static void PULSE_AllocateWaveoutDevice(const char *name, const char *device, const char *description, const pa_cvolume *v) { -+ WINE_WAVEDEV *wdo; -+ int x; -+ -+ if (WOutDev) -+ wdo = HeapReAlloc(GetProcessHeap(), 0, WOutDev, sizeof(WINE_WAVEDEV) * (PULSE_WodNumDevs + 1)); -+ else -+ wdo = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_WAVEDEV)); -+ -+ if (!wdo) return; -+ -+ WOutDev = wdo; -+ wdo = &WOutDev[PULSE_WodNumDevs++]; -+ memset(wdo, 0, sizeof(WINE_WAVEDEV)); -+ -+ wdo->device_name = pa_xstrdup(device); -+ wdo->volume.channels = v->channels; -+ for (x = 0; x < v->channels; x++) wdo->volume.values[x] = v->values[x]; -+ snprintf(wdo->interface_name, MAXPNAMELEN * 2, "winepulse: %s", name); -+ MultiByteToWideChar(CP_UTF8, 0, description, -1, wdo->caps.out.szPname, sizeof(wdo->caps.out.szPname)/sizeof(WCHAR)); -+ wdo->caps.out.szPname[sizeof(wdo->caps.out.szPname)/sizeof(WCHAR) - 1] = '\0'; -+ wdo->caps.out.wMid = MM_CREATIVE; -+ wdo->caps.out.wPid = MM_CREATIVE_SBP16_WAVEOUT; -+ wdo->caps.out.vDriverVersion = 0x0100; -+ wdo->caps.out.dwSupport = WAVECAPS_VOLUME | WAVECAPS_SAMPLEACCURATE;// | WAVECAPS_DIRECTSOUND; -+ if (v->channels >= 2) { -+ wdo->caps.out.wChannels = 2; -+ wdo->caps.out.dwSupport |= WAVECAPS_LRVOLUME; -+ } else -+ wdo->caps.out.wChannels = 1; -+ wdo->caps.out.dwFormats = PULSE_ALL_FORMATS; -+ memset(&wdo->ds_desc, 0, sizeof(DSDRIVERDESC)); -+ memcpy(wdo->ds_desc.szDesc, description, min(sizeof(wdo->ds_desc.szDesc) - 1, strlen(description))); -+ memcpy(wdo->ds_desc.szDrvname, "winepulse.drv", 14); -+ wdo->ds_caps.dwMinSecondarySampleRate = DSBFREQUENCY_MIN; -+ wdo->ds_caps.dwMaxSecondarySampleRate = DSBFREQUENCY_MAX; -+ wdo->ds_caps.dwPrimaryBuffers = 1; -+ wdo->ds_caps.dwFlags = \ -+ DSCAPS_PRIMARYMONO | -+ DSCAPS_PRIMARYSTEREO | -+ DSCAPS_PRIMARY8BIT | -+ DSCAPS_PRIMARY16BIT | -+ DSCAPS_SECONDARYMONO | -+ DSCAPS_SECONDARYSTEREO | -+ DSCAPS_SECONDARY8BIT | -+ DSCAPS_SECONDARY16BIT | -+ DSCAPS_CONTINUOUSRATE; -+} -+ -+/************************************************************************** -+ * PULSE_SourceInfoCallback [internal] -+ */ -+static void PULSE_SourceInfoCallback(pa_context *c, const pa_source_info *i, int eol, void *userdata) { -+ -+ if (!eol && i) -+ PULSE_AllocateWaveinDevice(i->name, i->name, i->description, &i->volume); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_SinkInfoCallback [internal] -+ */ -+static void PULSE_SinkInfoCallback(pa_context *c, const pa_sink_info *i, int eol, void *userdata) { -+ -+ if (!eol && i) -+ PULSE_AllocateWaveoutDevice(i->name, i->name, i->description, &i->volume); -+ -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_ContextNotifyCallback [internal] -+ */ -+static void PULSE_ContextNotifyCallback(pa_context *c, void *userdata) { -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+} -+ -+/************************************************************************** -+ * PULSE_WaveClose [internal] -+ * -+ * Disconnect from the server, deallocated the WaveIn/WaveOut devices, stop and -+ * free the mainloop. -+ */ -+static LONG PULSE_WaveClose(void) { -+ int x; -+ TRACE("()\n"); -+ if (!PULSE_ml) return DRV_FAILURE; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ /* device_name is allocated with pa_xstrdup, free with pa_xfree */ -+ for (x = 0; x < PULSE_WodNumDevs; x++) pa_xfree(WOutDev[x].device_name); -+ for (x = 0; x < PULSE_WidNumDevs; x++) pa_xfree(WInDev[x].device_name); -+ HeapFree(GetProcessHeap(), 0, WOutDev); -+ HeapFree(GetProcessHeap(), 0, WInDev); -+ if (PULSE_context) { -+ PULSE_WaitForOperation(pa_context_drain(PULSE_context, PULSE_ContextNotifyCallback, NULL)); -+ pa_context_disconnect(PULSE_context); -+ pa_context_unref(PULSE_context); -+ PULSE_context = NULL; -+ } -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ pa_threaded_mainloop_stop(PULSE_ml); -+ pa_threaded_mainloop_free(PULSE_ml); -+ PULSE_ml = NULL; -+ -+ return DRV_SUCCESS; -+} -+ -+/************************************************************************** -+ * PULSE_WaveInit [internal] -+ * -+ * Connects to the pulseaudio server, tries to discover sinks and sources and -+ * allocates the WaveIn/WaveOut devices. -+ */ -+static LONG PULSE_WaveInit(void) { -+ char *app_name; -+ char path[PATH_MAX]; -+ char *offset = NULL; -+ pa_cvolume fake_cvolume; -+ -+ WOutDev = NULL; -+ WInDev = NULL; -+ PULSE_WodNumDevs = 0; -+ PULSE_WidNumDevs = 0; -+ PULSE_context = NULL; -+ PULSE_ml = NULL; -+ -+ if (!(PULSE_ml = pa_threaded_mainloop_new())) { -+ ERR("Failed to create mainloop object."); -+ return DRV_FAILURE; -+ } -+ -+ /* Application name giving to pulse should be unique to the binary so that -+ * pulse-*-restore can be useful */ -+ -+ /* Get binary path, and remove path a-la strrchr */ -+ if (GetModuleFileNameA(NULL, path, PATH_MAX)) -+ offset = strrchr(path, '\\'); -+ -+ if (offset && ++offset && offset < path + PATH_MAX) { -+ app_name = pa_xmalloc(strlen(offset) + 8); -+ snprintf(app_name, strlen(offset) + 8, "WINE [%s]", offset); -+ } else -+ app_name = pa_xstrdup("WINE Application"); -+ -+ TRACE("App name is \"%s\"\n", app_name); -+ -+ pa_threaded_mainloop_start(PULSE_ml); -+ PULSE_context = pa_context_new(pa_threaded_mainloop_get_api(PULSE_ml), app_name); -+ assert(PULSE_context); -+ pa_xfree(app_name); -+ -+ pa_context_set_state_callback(PULSE_context, PULSE_ContextStateCallback, NULL); -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ -+ TRACE("libpulse protocol version: %u. API Version %u\n", pa_context_get_protocol_version(PULSE_context), PA_API_VERSION); -+ if (pa_context_connect(PULSE_context, NULL, 0, NULL) < 0) -+ goto fail; -+ -+ /* Wait for connection */ -+ for (;;) { -+ pa_context_state_t state = pa_context_get_state(PULSE_context); -+ -+ if (state == PA_CONTEXT_FAILED || state == PA_CONTEXT_TERMINATED) -+ goto fail; -+ -+ if (state == PA_CONTEXT_READY) -+ break; -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ -+ TRACE("Connected to server %s with protocol version: %i.\n", -+ pa_context_get_server(PULSE_context), -+ pa_context_get_server_protocol_version(PULSE_context)); -+ -+ fake_cvolume.channels = 2; -+ pa_cvolume_reset(&fake_cvolume, 2); -+ /* FIXME Translations? */ -+ PULSE_AllocateWaveoutDevice("default", NULL, "Default", &fake_cvolume); -+ PULSE_AllocateWaveinDevice("default", NULL, "Default", &fake_cvolume); -+ PULSE_WaitForOperation(pa_context_get_sink_info_list(PULSE_context, PULSE_SinkInfoCallback, &PULSE_WodNumDevs)); -+ PULSE_WaitForOperation(pa_context_get_source_info_list(PULSE_context, PULSE_SourceInfoCallback, &PULSE_WidNumDevs)); -+ TRACE("Found %u output and %u input device(s).\n", PULSE_WodNumDevs - 1, PULSE_WidNumDevs - 1); -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ return DRV_SUCCESS; -+ -+fail: -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ /* Only warn, because if we failed wine may still choose the next driver */ -+ WARN("Failed to connect to server\n"); -+ return DRV_FAILURE; -+} -+ -+#endif /* HAVE_PULSEAUDIO */ -+ -+/************************************************************************** -+ * DriverProc (WINEPULSE.@) -+ */ -+LRESULT CALLBACK PULSE_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, -+ LPARAM dwParam1, LPARAM dwParam2) { -+ -+ switch(wMsg) { -+#ifdef HAVE_PULSEAUDIO -+ case DRV_LOAD: return PULSE_WaveInit(); -+ case DRV_FREE: return PULSE_WaveClose(); -+ case DRV_OPEN: return 1; -+ case DRV_CLOSE: return 1; -+ case DRV_ENABLE: return 1; -+ case DRV_DISABLE: return 1; -+ case DRV_QUERYCONFIGURE: return 1; -+ case DRV_CONFIGURE: MessageBoxA(0, "PulseAudio MultiMedia Driver !", "PulseAudio Driver", MB_OK); return 1; -+ case DRV_INSTALL: return DRVCNF_RESTART; -+ case DRV_REMOVE: return DRVCNF_RESTART; -+#endif -+ default: -+ return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2); -+ } -+} -diff --git a/dlls/winepulse.drv/wavein.c b/dlls/winepulse.drv/wavein.c -new file mode 100644 -index 0000000..af721b9 ---- /dev/null -+++ b/dlls/winepulse.drv/wavein.c -@@ -0,0 +1,589 @@ -+/* -+ * Wine Driver for PulseAudio - WaveIn Functionality -+ * http://pulseaudio.org/ -+ * -+ * Copyright 2009 Arthur Taylor -+ * -+ * Contains code from other wine multimedia drivers. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wingdi.h" -+#include "winuser.h" -+#include "winnls.h" -+#include "mmddk.h" -+ -+#include -+ -+#include "wine/debug.h" -+ -+WINE_DEFAULT_DEBUG_CHANNEL(wave); -+ -+#if HAVE_PULSEAUDIO -+ -+/*======================================================================* -+ * WAVE IN specific PulseAudio Callbacks * -+ *======================================================================*/ -+ -+/************************************************************************** -+ * widNotifyClient [internal] -+*/ -+static DWORD widNotifyClient(WINE_WAVEINST* wwi, WORD wMsg, DWORD dwParam1, DWORD dwParam2) { -+ TRACE("wMsg = 0x%04x dwParm1 = %04X dwParam2 = %04X\n", wMsg, dwParam1, dwParam2); -+ -+ switch (wMsg) { -+ case WIM_OPEN: -+ case WIM_CLOSE: -+ case WIM_DATA: -+ if (wwi->wFlags != DCB_NULL && -+ !DriverCallback(wwi->waveDesc.dwCallback, wwi->wFlags, (HDRVR)wwi->waveDesc.hWave, -+ wMsg, wwi->waveDesc.dwInstance, dwParam1, dwParam2)) { -+ WARN("can't notify client !\n"); -+ return MMSYSERR_ERROR; -+ } -+ break; -+ default: -+ FIXME("Unknown callback message %u\n", wMsg); -+ return MMSYSERR_INVALPARAM; -+ } -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widRecorder_CopyData [internal] -+ * -+ * Copys data from the fragments pulse returns to queued buffers. -+ */ -+static void widRecorder_CopyData(WINE_WAVEINST *wwi) { -+ LPWAVEHDR lpWaveHdr = wwi->lpQueuePtr; -+ size_t bytes_avail; -+ -+ /* Get this value once and trust it. Note that the total available is made -+ * of one _or more_ fragments. These fragments will probably not align with -+ * the wavehdr buffer sizes. */ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ bytes_avail = pa_stream_readable_size(wwi->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ if (bytes_avail == -1) { -+ ERR("pa_stream_readable_size() returned -1, record stream has failed.\n"); -+ return; -+ } -+ -+ /* If there is an already peeked buffer, add it to the total */ -+ if (wwi->buffer) -+ bytes_avail += wwi->buffer_length - wwi->buffer_read_offset; -+ -+ for (;bytes_avail && lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { -+ size_t peek_avail; -+ -+ if (!wwi->buffer) { -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_peek(wwi->stream, &wwi->buffer, &wwi->buffer_length); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ wwi->buffer_read_offset = 0; -+ -+ if (!wwi->buffer || !wwi->buffer_length) { -+ WARN("pa_stream_peek failed\n"); -+ break; -+ } -+ } -+ -+ peek_avail = min(wwi->buffer_length - wwi->buffer_read_offset, -+ lpWaveHdr->dwBufferLength - lpWaveHdr->dwBytesRecorded); -+ -+ memcpy(lpWaveHdr->lpData + lpWaveHdr->dwBytesRecorded, -+ (PBYTE)wwi->buffer + wwi->buffer_read_offset, -+ peek_avail); -+ -+ wwi->buffer_read_offset += peek_avail; -+ lpWaveHdr->dwBytesRecorded += peek_avail; -+ bytes_avail -= peek_avail; -+ -+ if (lpWaveHdr->dwBytesRecorded == lpWaveHdr->dwBufferLength) { -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpWaveHdr->lpNext; -+ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ } -+ -+ if (wwi->buffer_read_offset == wwi->buffer_length) { -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_drop(wwi->stream); -+ wwi->buffer = NULL; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ } /* for(bytes_avail && lpWaveHdr) */ -+ -+ return; -+} -+ -+static void widRecorder_ProcessMessages(WINE_WAVEINST* wwi) { -+ LPWAVEHDR lpWaveHdr; -+ enum win_wm_message msg; -+ DWORD param; -+ HANDLE ev; -+ -+ -+ while (PULSE_RetrieveRingMessage(&wwi->msgRing, &msg, ¶m, &ev)) { -+ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); -+ -+ switch (msg) { -+ case WINE_WM_FEED: -+ /* Spin the loop in widRecorder */ -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_STARTING: -+ wwi->dwLastReset = wwi->timing_info->read_index; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 0, PULSE_StreamSuccessCallback, NULL)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ wwi->state = WINE_WS_PLAYING; -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_HEADER: -+ lpWaveHdr = (LPWAVEHDR)param; -+ lpWaveHdr->lpNext = 0; -+ /* insert buffer at the end of queue */ -+ { -+ LPWAVEHDR *wh; -+ for (wh = &(wwi->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); -+ *wh = lpWaveHdr; -+ } -+ break; -+ -+ case WINE_WM_STOPPING: -+ if (wwi->state != WINE_WS_STOPPED) { -+ wwi->state = WINE_WS_STOPPED; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); -+ if (wwi->buffer) { -+ pa_stream_drop(wwi->stream); -+ wwi->buffer = NULL; -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ /* return only the current buffer to app */ -+ if ((lpWaveHdr = wwi->lpQueuePtr)) { -+ LPWAVEHDR lpNext = lpWaveHdr->lpNext; -+ TRACE("stop %p %p\n", lpWaveHdr, lpWaveHdr->lpNext); -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpNext; -+ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ } -+ } -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_RESETTING: -+ if (wwi->state != WINE_WS_STOPPED) { -+ wwi->state = WINE_WS_STOPPED; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwi->stream, 1, PULSE_StreamSuccessCallback, NULL)); -+ if (wwi->buffer) { -+ pa_stream_drop(wwi->stream); -+ wwi->buffer = NULL; -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+ -+ /* return all the buffers to the app */ -+ lpWaveHdr = wwi->lpPlayPtr ? wwi->lpPlayPtr : wwi->lpQueuePtr; -+ for (; lpWaveHdr; lpWaveHdr = wwi->lpQueuePtr) { -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ wwi->lpQueuePtr = lpWaveHdr->lpNext; -+ widNotifyClient(wwi, WIM_DATA, (DWORD)lpWaveHdr, 0); -+ } -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_CLOSING: -+ wwi->hThread = 0; -+ wwi->state = WINE_WS_CLOSED; -+ SetEvent(ev); -+ ExitThread(0); -+ /* shouldn't go here */ -+ -+ default: -+ FIXME("unknown message %d\n", msg); -+ break; -+ } -+ } -+} -+ -+/************************************************************************** -+ * widRecorder [internal] -+ */ -+static DWORD CALLBACK widRecorder(LPVOID lpParam) { -+ WINE_WAVEINST *wwi = (WINE_WAVEINST*)lpParam; -+ -+ wwi->state = WINE_WS_STOPPED; -+ SetEvent(wwi->hStartUpEvent); -+ -+ for (;;) { -+ PULSE_WaitRingMessage(&wwi->msgRing, INFINITE); -+ widRecorder_ProcessMessages(wwi); -+ if (wwi->state == WINE_WS_PLAYING && wwi->lpQueuePtr) -+ widRecorder_CopyData(wwi); -+ } -+ -+ return 0; -+} -+ -+/************************************************************************** -+ * widOpen [internal] -+ */ -+static DWORD widOpen(WORD wDevID, DWORD_PTR *lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { -+ WINE_WAVEDEV *wdi; -+ WINE_WAVEINST *wwi = NULL; -+ DWORD ret = MMSYSERR_NOERROR; -+ -+ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); -+ if (lpDesc == NULL) { -+ WARN("Invalid Parameter !\n"); -+ return MMSYSERR_INVALPARAM; -+ } -+ -+ if (wDevID >= PULSE_WidNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WidNumDevs); -+ return MMSYSERR_BADDEVICEID; -+ } -+ wdi = &WInDev[wDevID]; -+ -+ wwi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_WAVEINST)); -+ if (!wwi) return MMSYSERR_NOMEM; -+ *lpdwUser = (DWORD_PTR)wwi; -+ -+ /* check to see if format is supported and make pa_sample_spec struct */ -+ if (!PULSE_SetupFormat(lpDesc->lpFormat, &wwi->sample_spec)) { -+ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ ret = WAVERR_BADFORMAT; -+ goto exit; -+ } -+ -+ if (TRACE_ON(wave)) { -+ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; -+ pa_sample_spec_snprint(t, sizeof(t), &wwi->sample_spec); -+ TRACE("Sample spec '%s'\n", t); -+ } -+ -+ if (dwFlags & WAVE_FORMAT_QUERY) { -+ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ ret = MMSYSERR_NOERROR; -+ goto exit; -+ } -+ -+ wwi->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); -+ wwi->waveDesc = *lpDesc; -+ PULSE_InitRingMessage(&wwi->msgRing); -+ -+ wwi->stream = pa_stream_new(PULSE_context, "WaveIn", &wwi->sample_spec, NULL); -+ if (!wwi->stream) { -+ ret = WAVERR_BADFORMAT; -+ goto exit; -+ } -+ -+ pa_stream_set_state_callback(wwi->stream, PULSE_StreamStateCallback, wwi); -+ pa_stream_set_read_callback (wwi->stream, PULSE_StreamRequestCallback, wwi); -+ -+ wwi->buffer_attr.maxlength = (uint32_t)-1; -+ wwi->buffer_attr.fragsize = pa_bytes_per_second(&wwi->sample_spec) / 100; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ TRACE("Asking to open %s for recording.\n", wdi->device_name); -+ pa_stream_connect_record(wwi->stream, wdi->device_name, &wwi->buffer_attr, -+ PA_STREAM_START_CORKED | -+ PA_STREAM_AUTO_TIMING_UPDATE | -+ PA_STREAM_ADJUST_LATENCY); -+ -+ for (;;) { -+ pa_context_state_t cstate = pa_context_get_state(PULSE_context); -+ pa_stream_state_t sstate = pa_stream_get_state(wwi->stream); -+ -+ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || -+ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { -+ ERR("Failed to connect context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); -+ ret = MMSYSERR_NODRIVER; -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ goto exit; -+ } -+ -+ if (sstate == PA_STREAM_READY) -+ break; -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ TRACE("(%p)->stream connected for recording.\n", wwi); -+ -+ PULSE_WaitForOperation(pa_stream_update_timing_info(wwi->stream, PULSE_StreamSuccessCallback, wwi)); -+ -+ wwi->timing_info = pa_stream_get_timing_info(wwi->stream); -+ assert(wwi->timing_info); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ wwi->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); -+ wwi->hThread = CreateThread(NULL, 0, widRecorder, (LPVOID)wwi, 0, &(wwi->dwThreadID)); -+ if (wwi->hThread) -+ SetThreadPriority(wwi->hThread, THREAD_PRIORITY_TIME_CRITICAL); -+ else { -+ ERR("Thread creation for the widRecorder failed!\n"); -+ ret = MMSYSERR_NOMEM; -+ goto exit; -+ } -+ WaitForSingleObject(wwi->hStartUpEvent, INFINITE); -+ CloseHandle(wwi->hStartUpEvent); -+ wwi->hStartUpEvent = INVALID_HANDLE_VALUE; -+ -+ return widNotifyClient(wwi, WIM_OPEN, 0L, 0L); -+ -+exit: -+ if (!wwi) -+ return ret; -+ -+ if (wwi->hStartUpEvent != INVALID_HANDLE_VALUE) -+ CloseHandle(wwi->hStartUpEvent); -+ -+ if (wwi->msgRing.ring_buffer_size > 0) -+ PULSE_DestroyRingMessage(&wwi->msgRing); -+ -+ if (wwi->stream) { -+ if (pa_stream_get_state(wwi->stream) == PA_STREAM_READY) -+ pa_stream_disconnect(wwi->stream); -+ pa_stream_unref(wwi->stream); -+ } -+ HeapFree(GetProcessHeap(), 0, wwi); -+ -+ return ret; -+} -+/************************************************************************** -+ * widClose [internal] -+ */ -+static DWORD widClose(WORD wDevID, WINE_WAVEINST *wwi) { -+ DWORD ret; -+ -+ TRACE("(%u, %p);\n", wDevID, wwi); -+ if (wDevID >= PULSE_WidNumDevs) { -+ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } else if (!wwi) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (wwi->state != WINE_WS_FAILED) { -+ if (wwi->lpQueuePtr) { -+ WARN("buffers recording recording !\n"); -+ return WAVERR_STILLPLAYING; -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (pa_stream_get_state(wwi->stream) == PA_STREAM_READY) -+ pa_stream_drop(wwi->stream); -+ pa_stream_disconnect(wwi->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ if (wwi->hThread != INVALID_HANDLE_VALUE) -+ PULSE_AddRingMessage(&wwi->msgRing, WINE_WM_CLOSING, 0, TRUE); -+ -+ PULSE_DestroyRingMessage(&wwi->msgRing); -+ } -+ ret = widNotifyClient(wwi, WIM_CLOSE, 0L, 0L); -+ -+ pa_stream_unref(wwi->stream); -+ TRACE("Deallocating record instance.\n"); -+ HeapFree(GetProcessHeap(), 0, wwi); -+ return ret; -+} -+ -+/************************************************************************** -+ * widAddBuffer [internal] -+ * -+ */ -+static DWORD widAddBuffer(WINE_WAVEINST* wwi, LPWAVEHDR lpWaveHdr, DWORD dwSize) { -+ TRACE("(%p, %p, %08X);\n", wwi, lpWaveHdr, dwSize); -+ -+ if (!wwi || wwi->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) -+ return WAVERR_UNPREPARED; -+ -+ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) -+ return WAVERR_STILLPLAYING; -+ -+ lpWaveHdr->dwFlags &= ~WHDR_DONE; -+ lpWaveHdr->dwFlags |= WHDR_INQUEUE; -+ lpWaveHdr->dwBytesRecorded = 0; -+ lpWaveHdr->lpNext = 0; -+ -+ PULSE_AddRingMessage(&wwi->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); -+ -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widRecorderMessage [internal] -+ */ -+static DWORD widRecorderMessage(WINE_WAVEINST *wwi, enum win_wm_message message) { -+ if (!wwi || wwi->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwi->msgRing, message, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widGetPosition [internal] -+ */ -+static DWORD widGetPosition(WINE_WAVEINST *wwi, LPMMTIME lpTime, DWORD uSize) { -+ -+ if (!wwi || wwi->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpTime == NULL) return MMSYSERR_INVALPARAM; -+ -+ return PULSE_UsecToMMTime(pa_bytes_to_usec(wwi->timing_info->read_index - wwi->dwLastReset, &wwi->sample_spec), lpTime, &wwi->sample_spec); -+} -+ -+/************************************************************************** -+ * widGetDevCaps [internal] -+ */ -+static DWORD widGetDevCaps(DWORD wDevID, LPWAVEINCAPSW lpCaps, DWORD dwSize) { -+ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); -+ -+ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; -+ -+ if (wDevID >= PULSE_WidNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WidNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ memcpy(lpCaps, &(WInDev[wDevID].caps.in), min(dwSize, sizeof(*lpCaps))); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widGetNumDevs [internal] -+ * Context-sanity check here, as if we respond with 0, WINE will move on -+ * to the next wavein driver. -+ */ -+static DWORD widGetNumDevs(void) { -+ if (pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) -+ return 0; -+ -+ return PULSE_WidNumDevs; -+} -+ -+/************************************************************************** -+ * widDevInterfaceSize [internal] -+ */ -+static DWORD widDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { -+ TRACE("(%u, %p)\n", wDevID, dwParam1); -+ -+ *dwParam1 = MultiByteToWideChar(CP_UTF8, 0, WInDev[wDevID].interface_name, -1, -+ NULL, 0 ) * sizeof(WCHAR); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widDevInterface [internal] -+ */ -+static DWORD widDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { -+ if (dwParam2 >= MultiByteToWideChar(CP_UTF8, 0, WInDev[wDevID].interface_name, -1, -+ NULL, 0 ) * sizeof(WCHAR)) -+ { -+ MultiByteToWideChar(CP_UTF8, 0, WInDev[wDevID].interface_name, -1, -+ dwParam1, dwParam2 / sizeof(WCHAR)); -+ return MMSYSERR_NOERROR; -+ } -+ return MMSYSERR_INVALPARAM; -+} -+ -+/************************************************************************** -+ * widDsDesc [internal] -+ */ -+DWORD widDsDesc(UINT wDevID, PDSDRIVERDESC desc) -+{ -+ *desc = WInDev[wDevID].ds_desc; -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * widMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_widMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser, -+ DWORD_PTR dwParam1, DWORD_PTR dwParam2) { -+ -+ switch (wMsg) { -+ case DRVM_INIT: -+ case DRVM_EXIT: -+ case DRVM_ENABLE: -+ case DRVM_DISABLE: -+ /* FIXME: Pretend this is supported */ -+ return 0; -+ case WIDM_OPEN: return widOpen (wDevID, (DWORD_PTR*)dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); -+ case WIDM_CLOSE: return widClose (wDevID, (WINE_WAVEINST*)dwUser); -+ case WIDM_ADDBUFFER: return widAddBuffer ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); -+ case WIDM_PREPARE: return MMSYSERR_NOTSUPPORTED; -+ case WIDM_UNPREPARE: return MMSYSERR_NOTSUPPORTED; -+ case WIDM_GETDEVCAPS: return widGetDevCaps(wDevID, (LPWAVEINCAPSW)dwParam1, dwParam2); -+ case WIDM_GETNUMDEVS: return widGetNumDevs(); -+ case WIDM_GETPOS: return widGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); -+ case WIDM_RESET: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_RESETTING); -+ case WIDM_START: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_STARTING); -+ case WIDM_STOP: return widRecorderMessage((WINE_WAVEINST*)dwUser, WINE_WM_STOPPING); -+ case DRV_QUERYDEVICEINTERFACESIZE: return widDevInterfaceSize(wDevID, (LPDWORD)dwParam1); -+ case DRV_QUERYDEVICEINTERFACE: return widDevInterface(wDevID, (PWCHAR)dwParam1, dwParam2); -+ case DRV_QUERYDSOUNDIFACE: return MMSYSERR_NOTSUPPORTED; /* Use emulation, as there is no advantage */ -+ case DRV_QUERYDSOUNDDESC: return widDsDesc(wDevID, (PDSDRIVERDESC)dwParam1); -+ default: -+ FIXME("unknown message %d!\n", wMsg); -+ } -+ return MMSYSERR_NOTSUPPORTED; -+} -+ -+#else /* HAVE_PULSEAUDIO */ -+ -+/************************************************************************** -+ * widMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_widMessage(WORD wDevID, WORD wMsg, DWORD dwUser, -+ DWORD dwParam1, DWORD dwParam2) { -+ FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); -+ return MMSYSERR_NOTENABLED; -+} -+ -+#endif /* HAVE_PULSEAUDIO */ -diff --git a/dlls/winepulse.drv/waveout.c b/dlls/winepulse.drv/waveout.c -new file mode 100644 -index 0000000..99b7c18 ---- /dev/null -+++ b/dlls/winepulse.drv/waveout.c -@@ -0,0 +1,1029 @@ -+/* -+ * Wine Driver for PulseAudio - WaveOut Functionality -+ * http://pulseaudio.org/ -+ * -+ * Copyright 2009 Arthur Taylor -+ * -+ * Contains code from other wine multimedia drivers. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#include "config.h" -+ -+#include -+ -+#include "windef.h" -+#include "winbase.h" -+#include "wingdi.h" -+#include "winuser.h" -+#include "winnls.h" -+#include "winerror.h" -+#include "mmddk.h" -+ -+#include -+ -+#include "wine/debug.h" -+ -+WINE_DEFAULT_DEBUG_CHANNEL(wave); -+ -+#if HAVE_PULSEAUDIO -+ -+/* Use this to make the infinite wait not so infinite */ -+#define PULSE_INFINITE 10000 -+ -+/* state diagram for waveOut writing: -+ * -+ * +---------+-------------+---------------+---------------------------------+ -+ * | state | function | event | new state | -+ * +---------+-------------+---------------+---------------------------------+ -+ * | | open() | | STOPPED | -+ * | PAUSED | write() | | PAUSED | -+ * | STOPPED | write() | | PLAYING | -+ * | PLAYING | write() | HEADER | PLAYING | -+ * | (other) | write() | | | -+ * | (any) | pause() | PAUSING | PAUSED | -+ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | -+ * | PAUSED | reset() | RESETTING | PAUSED | -+ * | (other) | reset() | RESETTING | STOPPED | -+ * | (any) | close() | CLOSING | CLOSED | -+ * +---------+-------------+---------------+---------------------------------+ -+ */ -+ -+/* -+ * - It is currently unknown if pausing in a loop works the same as expected. -+ */ -+ -+/*======================================================================* -+ * WAVE OUT specific PulseAudio Callbacks * -+ *======================================================================*/ -+ -+/************************************************************************** -+ * WAVEOUT_SinkInputInfoCallback [internal] -+ * -+ * Called by the pulse thread. Used for wodGetVolume. -+ */ -+static void WAVEOUT_SinkInputInfoCallback(pa_context *c, const pa_sink_input_info *i, int eol, void *userdata) { -+ WINE_WAVEINST* wwo = (WINE_WAVEINST*)userdata; -+ if (!eol && i) { -+ for (wwo->volume.channels = 0; wwo->volume.channels != i->volume.channels; wwo->volume.channels++) -+ wwo->volume.values[wwo->volume.channels] = i->volume.values[wwo->volume.channels]; -+ pa_threaded_mainloop_signal(PULSE_ml, 0); -+ } -+} -+ -+/*======================================================================* -+ * "Low level" WAVE OUT implementation * -+ *======================================================================*/ -+ -+/************************************************************************** -+ * 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); */ -+ -+ switch (wMsg) { -+ case WOM_OPEN: -+ case WOM_CLOSE: -+ case WOM_DONE: -+ if (wwo->wFlags != DCB_NULL && -+ !DriverCallback(wwo->waveDesc.dwCallback, wwo->wFlags, (HDRVR)wwo->waveDesc.hWave, -+ wMsg, wwo->waveDesc.dwInstance, dwParam1, dwParam2)) { -+ WARN("can't notify client !\n"); -+ return MMSYSERR_ERROR; -+ } -+ break; -+ default: -+ FIXME("Unknown callback message %u\n", wMsg); -+ return MMSYSERR_INVALPARAM; -+ } -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodPlayer_BeginWaveHdr [internal] -+ * -+ * Makes the specified lpWaveHdr the currently playing wave header. -+ * If the specified wave header is a begin loop and we're not already in -+ * a loop, setup the loop. -+ */ -+static void wodPlayer_BeginWaveHdr(WINE_WAVEINST* wwo, LPWAVEHDR lpWaveHdr) { -+ wwo->lpPlayPtr = lpWaveHdr; -+ -+ if (!lpWaveHdr) return; -+ -+ if (lpWaveHdr->dwFlags & WHDR_BEGINLOOP) { -+ if (wwo->lpLoopPtr) { -+ WARN("Already in a loop. Discarding loop on this header (%p)\n", lpWaveHdr); -+ } else { -+ TRACE("Starting loop (%dx) with %p\n", lpWaveHdr->dwLoops, lpWaveHdr); -+ wwo->lpLoopPtr = lpWaveHdr; -+ /* Windows does not touch WAVEHDR.dwLoops, -+ * so we need to make an internal copy */ -+ wwo->dwLoops = lpWaveHdr->dwLoops; -+ } -+ } -+ wwo->dwPartialOffset = 0; -+} -+ -+/************************************************************************** -+ * wodPlayer_PlayPtrNext [internal] -+ * -+ * Advance the play pointer to the next waveheader, looping if required. -+ */ -+static LPWAVEHDR wodPlayer_PlayPtrNext(WINE_WAVEINST* wwo) { -+ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; -+ -+ wwo->dwPartialOffset = 0; -+ if ((lpWaveHdr->dwFlags & WHDR_ENDLOOP) && wwo->lpLoopPtr) { -+ /* We're at the end of a loop, loop if required */ -+ if (--wwo->dwLoops > 0) { -+ wwo->lpPlayPtr = wwo->lpLoopPtr; -+ } else { -+ /* Handle overlapping loops correctly */ -+ if (wwo->lpLoopPtr != lpWaveHdr && (lpWaveHdr->dwFlags & WHDR_BEGINLOOP)) { -+ FIXME("Correctly handled case ? (ending loop buffer also starts a new loop)\n"); -+ /* shall we consider the END flag for the closing loop or for -+ * the opening one or for both ??? -+ * code assumes for closing loop only -+ */ -+ } else { -+ lpWaveHdr = lpWaveHdr->lpNext; -+ } -+ wwo->lpLoopPtr = NULL; -+ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr); -+ } -+ } else { -+ /* We're not in a loop. Advance to the next wave header */ -+ wodPlayer_BeginWaveHdr(wwo, lpWaveHdr = lpWaveHdr->lpNext); -+ } -+ -+ return lpWaveHdr; -+} -+ -+/************************************************************************** -+ * wodPlayer_CheckReleasing [internal] -+ * -+ * Check to make sure that playback has not stalled. If stalled ask to reduce -+ * the size of the buffer on the pulse server side. -+ */ -+static void wodPlayer_CheckReleasing(WINE_WAVEINST *wwo) { -+ LPWAVEHDR lpWaveHdr; -+ -+ if (wwo->buffer_attr.tlength == -1) { -+ pa_threaded_mainloop_lock(PULSE_ml); -+ 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)); -+ TRACE("Triggering stream and hoping for the best\n"); -+ PULSE_WaitForOperation(pa_stream_trigger(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ } -+} -+ -+/************************************************************************** -+ * wodPlayer_NotifyCompletions [internal] -+ * -+ * Notifies the client of wavehdr completion starting from lpQueuePtr and -+ * stopping when hitting an unwritten wavehdr, the beginning of a loop or a -+ * wavehdr that has not been played, when referenced to the time parameter. -+ */ -+static DWORD wodPlayer_NotifyCompletions(WINE_WAVEINST* wwo, BOOL force, pa_usec_t time) { -+ LPWAVEHDR lpWaveHdr = wwo->lpQueuePtr; -+ pa_usec_t wait; -+ -+ while (lpWaveHdr) { -+ if (!force) { -+ /* Start from lpQueuePtr and keep notifying until: -+ * - we hit an unwritten wavehdr -+ * - we hit the beginning of a running loop -+ * - we hit a wavehdr which hasn't finished playing -+ */ -+ if (lpWaveHdr == wwo->lpLoopPtr) { TRACE("loop %p\n", lpWaveHdr); return PULSE_INFINITE; } -+ if (lpWaveHdr == wwo->lpPlayPtr) { TRACE("play %p\n", lpWaveHdr); return PULSE_INFINITE; } -+ -+ /* See if this data has been played, and if not, return when it will have been */ -+ wait = pa_bytes_to_usec(lpWaveHdr->reserved + lpWaveHdr->dwBufferLength, &wwo->sample_spec); -+ if (wait >= time) { -+ wait = ((wait - time) + (pa_usec_t)999) / (pa_usec_t)1000; -+ return wait ?: 1; -+ } -+ } -+ TRACE("Returning %p.[%i]\n", lpWaveHdr, (DWORD)lpWaveHdr->reserved); -+ -+ /* return the wavehdr */ -+ wwo->lpQueuePtr = lpWaveHdr->lpNext; -+ lpWaveHdr->dwFlags &= ~WHDR_INQUEUE; -+ lpWaveHdr->dwFlags |= WHDR_DONE; -+ -+ wodPlayer_NotifyClient(wwo, WOM_DONE, (DWORD)lpWaveHdr, 0); -+ lpWaveHdr = wwo->lpQueuePtr; -+ } -+ /* No more wavehdrs */ -+ TRACE("Empty queue\n"); -+ return PULSE_INFINITE; -+} -+ -+/************************************************************************** -+ * wodPlayer_WriteMax [internal] -+ * -+ * Write either how much free space or how much data we have, depending on -+ * which is less -+ */ -+static DWORD wodPlayer_WriteMax(WINE_WAVEINST *wwo, size_t *space) { -+ LPWAVEHDR lpWaveHdr = wwo->lpPlayPtr; -+ size_t nbytes; -+ -+ nbytes = min(lpWaveHdr->dwBufferLength - wwo->dwPartialOffset, *space); -+ -+ TRACE("Writing wavehdr %p.%u[%u]\n", lpWaveHdr, wwo->dwPartialOffset, lpWaveHdr->dwBufferLength); -+ pa_stream_write(wwo->stream, lpWaveHdr->lpData + wwo->dwPartialOffset, nbytes, NULL, 0, PA_SEEK_RELATIVE); -+ -+ /* Check to see if we wrote all of the wavehdr */ -+ if ((wwo->dwPartialOffset += nbytes) >= lpWaveHdr->dwBufferLength) -+ wodPlayer_PlayPtrNext(wwo); -+ -+ *space -= nbytes; -+ -+ return nbytes; -+} -+ -+/************************************************************************** -+ * wodPlayer_Feed [internal] -+ * -+ * Feed as much sound data as we can into pulse using wodPlayer_WriteMax. -+ * size_t space _must_ have come from either pa_stream_writable_size() or -+ * the value from a stream write callback, as if it isn't you run the risk -+ * of a buffer overflow in which audio data will be lost. -+ */ -+static void wodPlayer_Feed(WINE_WAVEINST* wwo, size_t space) { -+ -+ 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; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ /* Feed from a partial wavehdr */ -+ if (wwo->lpPlayPtr && wwo->dwPartialOffset != 0) -+ wodPlayer_WriteMax(wwo, &space); -+ -+ /* Feed wavehdrs until we run out of wavehdrs or buffer space */ -+ if (wwo->dwPartialOffset == 0 && wwo->lpPlayPtr) { -+ do { -+ wwo->lpPlayPtr->reserved = wwo->timing_info->write_index; -+ } while (wodPlayer_WriteMax(wwo, &space) && wwo->lpPlayPtr && space > 0); -+ } -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+} -+ -+/************************************************************************** -+ * wodPlayer_Reset [internal] -+ * -+ * wodPlayer helper. Resets current output stream. -+ */ -+static void wodPlayer_Reset(WINE_WAVEINST* wwo) { -+ enum win_wm_message msg; -+ DWORD param; -+ HANDLE ev; -+ -+ TRACE("(%p)\n", wwo); -+ -+ /* Remove any buffer */ -+ wodPlayer_NotifyCompletions(wwo, TRUE, 0); -+ -+ wwo->lpPlayPtr = wwo->lpQueuePtr = wwo->lpLoopPtr = NULL; -+ if (wwo->state != WINE_WS_PAUSED) -+ wwo->state = WINE_WS_STOPPED; -+ -+ wwo->dwPartialOffset = 0; -+ -+ if (!wwo->stream || -+ !PULSE_context || -+ pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || -+ pa_stream_get_state(wwo->stream) != PA_STREAM_READY) { -+ return; -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ -+ /* Flush the output buffer of written data*/ -+ PULSE_WaitForOperation(pa_stream_flush(wwo->stream, PULSE_StreamSuccessCallback, NULL)); -+ -+ /* Reset the written byte count as some data may have been flushed */ -+ if (wwo->timing_info->write_index_corrupt) -+ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ -+ wwo->dwLastReset = wwo->timing_info->write_index; -+ -+ /* Return all pending headers in queue */ -+ EnterCriticalSection(&wwo->msgRing.msg_crst); -+ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { -+ if (msg != WINE_WM_HEADER) { -+ SetEvent(ev); -+ continue; -+ } -+ ((LPWAVEHDR)param)->dwFlags &= ~WHDR_INQUEUE; -+ ((LPWAVEHDR)param)->dwFlags |= WHDR_DONE; -+ wodPlayer_NotifyClient(wwo, WOM_DONE, param, 0); -+ } -+ PULSE_ResetRingMessage(&wwo->msgRing); -+ LeaveCriticalSection(&wwo->msgRing.msg_crst); -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+} -+ -+/************************************************************************** -+ * wodPlayer_GetStreamTime [internal] -+ * -+ * Returns how many microseconds into the playback the audio stream is. Does -+ * not reset to 0 on Reset() calls. Better than pa_stream_get_time() as it is -+ * more constant. -+ */ -+static pa_usec_t wodPlayer_GetStreamTime(WINE_WAVEINST *wwo) { -+ pa_usec_t time, temp; -+ const pa_timing_info *t; -+ -+ t = wwo->timing_info; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ -+ time = pa_bytes_to_usec(t->read_index, &wwo->sample_spec); -+ if (t->read_index_corrupt) { -+ WARN("Read index corrupt?!\n"); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return time; -+ } -+ -+ if (t->playing) { -+ time += pa_timeval_age(&t->timestamp); -+ temp = t->transport_usec + t->configured_sink_usec; -+ if (temp > wwo->buffer_attr.tlength) temp = wwo->buffer_attr.tlength; -+ if (time > temp) time -= temp; else time = 0; -+ } -+ -+ /* Make sure we haven't claimed to have played more than we have written */ -+ temp = pa_bytes_to_usec(t->write_index, &wwo->sample_spec); -+ if (time > temp) time = temp; -+ -+ /* No queued buffer shows an underrun, so we lie */ -+ if (!wwo->lpQueuePtr) time = temp; -+ -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ return time; -+} -+ -+/************************************************************************** -+ * wodPlayer_ProcessMessages [internal] -+ */ -+static void wodPlayer_ProcessMessages(WINE_WAVEINST* wwo) { -+ LPWAVEHDR lpWaveHdr; -+ enum win_wm_message msg; -+ DWORD param; -+ HANDLE ev; -+ -+ while (PULSE_RetrieveRingMessage(&wwo->msgRing, &msg, ¶m, &ev)) { -+ TRACE("Received %s %x\n", PULSE_getCmdString(msg), param); -+ -+ switch (msg) { -+ case WINE_WM_PAUSING: -+ wwo->state = WINE_WS_PAUSED; -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_cork(wwo->stream, 1, PULSE_StreamSuccessCallback, wwo)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_RESTARTING: -+ if (wwo->state == WINE_WS_PAUSED) { -+ 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 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); -+ } -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_HEADER: -+ lpWaveHdr = (LPWAVEHDR)param; -+ /* insert buffer at the end of queue */ -+ { -+ LPWAVEHDR *wh; -+ for (wh = &(wwo->lpQueuePtr); *wh; wh = &((*wh)->lpNext)); -+ *wh = lpWaveHdr; -+ } -+ -+ if (!wwo->lpPlayPtr) -+ wodPlayer_BeginWaveHdr(wwo,lpWaveHdr); -+ if (wwo->state == WINE_WS_STOPPED) -+ wwo->state = WINE_WS_PLAYING; -+ -+ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_RESETTING: -+ wodPlayer_Reset(wwo); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_BREAKLOOP: -+ if (wwo->state == WINE_WS_PLAYING && wwo->lpLoopPtr != NULL) -+ /* ensure exit at end of current loop */ -+ wwo->dwLoops = 1; -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_FEED: /* Sent by the pulse thread */ -+ wodPlayer_Feed(wwo, pa_stream_writable_size(wwo->stream)); -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_XRUN: /* Sent by the pulse thread */ -+ 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); -+ -+ SetEvent(ev); -+ break; -+ -+ case WINE_WM_CLOSING: -+ wwo->hThread = NULL; -+ wwo->state = WINE_WS_CLOSED; -+ /* sanity check: this should not happen since the device must have been reset before */ -+ if (wwo->lpQueuePtr || wwo->lpPlayPtr) ERR("out of sync\n"); -+ SetEvent(ev); -+ TRACE("Thread exiting.\n"); -+ ExitThread(0); -+ /* shouldn't go here */ -+ -+ default: -+ FIXME("unknown message %d\n", msg); -+ break; -+ } -+ } -+} -+ -+/************************************************************************** -+ * wodPlayer [internal] -+ * -+ * The thread which is responsible for returning WaveHdrs via DriverCallback, -+ * the writing of queued WaveHdrs, and all pause / reset stream management. -+ */ -+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); -+ -+ /* Wait for the shortest time before an action is required. If there are -+ * no pending actions, wait forever for a command. */ -+ for (;;) { -+ TRACE("Waiting %u ms\n", dwSleepTime); -+ PULSE_WaitRingMessage(&wwo->msgRing, dwSleepTime); -+ -+ 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 */ -+ if (wwo->state == WINE_WS_PLAYING) { -+ dwSleepTime = wodPlayer_NotifyCompletions(wwo, FALSE, wodPlayer_GetStreamTime(wwo)); -+ } else -+ dwSleepTime = INFINITE; -+ } -+ -+ return 0; -+} -+ -+/************************************************************************** -+ * wodOpen [internal] -+ * -+ * Create a new pa_stream and connect it to a sink while creating a new -+ * WINE_WAVEINST to represent the device to the windows application. -+ */ -+static DWORD wodOpen(WORD wDevID, DWORD_PTR lpdwUser, LPWAVEOPENDESC lpDesc, DWORD dwFlags) { -+ WINE_WAVEDEV *wdo; -+ WINE_WAVEINST *wwo = NULL; -+ DWORD ret = MMSYSERR_NOERROR; -+ -+ TRACE("(%u, %p, %08X);\n", wDevID, lpDesc, dwFlags); -+ if (lpDesc == NULL) { -+ WARN("Invalid Parameter!\n"); -+ return MMSYSERR_INVALPARAM; -+ } -+ -+ if (wDevID >= PULSE_WodNumDevs) { -+ WARN("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_BADDEVICEID; -+ } -+ wdo = &WOutDev[wDevID]; -+ -+ wwo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_WAVEINST)); -+ if (!wwo) { -+ WARN("Out of memory?!\n"); -+ return MMSYSERR_NOMEM; -+ } -+ *(WINE_WAVEINST**)lpdwUser = wwo; -+ -+ /* check to see if format is supported and make pa_sample_spec struct */ -+ if (!PULSE_SetupFormat(lpDesc->lpFormat, &wwo->sample_spec)) { -+ WARN("Bad format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ ret = WAVERR_BADFORMAT; -+ goto exit; -+ } -+ -+ /* Check to see if this was just a query */ -+ if (dwFlags & WAVE_FORMAT_QUERY) { -+ TRACE("Query format: tag=%04X nChannels=%d nSamplesPerSec=%d !\n", -+ lpDesc->lpFormat->wFormatTag, lpDesc->lpFormat->nChannels, -+ lpDesc->lpFormat->nSamplesPerSec); -+ ret = MMSYSERR_NOERROR; -+ goto exit; -+ } -+ -+ if (TRACE_ON(wave)) { -+ char t[PA_SAMPLE_SPEC_SNPRINT_MAX]; -+ pa_sample_spec_snprint(t, sizeof(t), &wwo->sample_spec); -+ TRACE("Sample spec '%s'\n", t); -+ } -+ -+ wwo->wFlags = HIWORD(dwFlags & CALLBACK_TYPEMASK); -+ wwo->waveDesc = *lpDesc; -+ PULSE_InitRingMessage(&wwo->msgRing); -+ -+ wwo->stream = pa_stream_new(PULSE_context, "WaveOut", &wwo->sample_spec, NULL); -+ /* If server doesn't support sample_spec, it will error out here (re: 24bit) */ -+ if (!wwo->stream) { -+ ret = WAVERR_BADFORMAT; -+ goto exit; -+ } -+ -+ /* Setup callbacks */ -+ pa_stream_set_write_callback (wwo->stream, PULSE_StreamRequestCallback, wwo); -+ pa_stream_set_state_callback (wwo->stream, PULSE_StreamStateCallback, wwo); -+ pa_stream_set_underflow_callback (wwo->stream, PULSE_StreamUnderflowCallback, wwo); -+ pa_stream_set_moved_callback (wwo->stream, PULSE_StreamMovedCallback, wwo); -+ pa_stream_set_suspended_callback (wwo->stream, PULSE_StreamSuspendedCallback, wwo); -+ -+ /* Blank Buffer Attributes */ -+ wwo->buffer_attr.prebuf = (uint32_t)-1; -+ wwo->buffer_attr.tlength = (uint32_t)-1; -+ wwo->buffer_attr.minreq = (uint32_t)-1; -+ wwo->buffer_attr.maxlength = (uint32_t)-1; -+ -+ /* Try and connect */ -+ TRACE("Connecting stream for playback on %s.\n", wdo->device_name); -+ pa_threaded_mainloop_lock(PULSE_ml); -+ pa_stream_connect_playback(wwo->stream, wdo->device_name, &wwo->buffer_attr, PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_ADJUST_LATENCY, NULL, NULL); -+ -+ /* Wait for connection */ -+ for (;;) { -+ pa_context_state_t cstate = pa_context_get_state(PULSE_context); -+ pa_stream_state_t sstate = pa_stream_get_state(wwo->stream); -+ -+ if (cstate == PA_CONTEXT_FAILED || cstate == PA_CONTEXT_TERMINATED || -+ sstate == PA_STREAM_FAILED || sstate == PA_STREAM_TERMINATED) { -+ ERR("Failed to connect stream context object: %s\n", pa_strerror(pa_context_errno(PULSE_context))); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ ret = MMSYSERR_NODRIVER; -+ goto exit; -+ } -+ -+ if (sstate == PA_STREAM_READY) -+ break; -+ -+ pa_threaded_mainloop_wait(PULSE_ml); -+ } -+ TRACE("(%p)->stream connected for playback.\n", wwo); -+ -+ /* Get the pa_timing_info structure */ -+ PULSE_WaitForOperation(pa_stream_update_timing_info(wwo->stream, PULSE_StreamSuccessCallback, wwo)); -+ wwo->timing_info = pa_stream_get_timing_info(wwo->stream); -+ assert(wwo->timing_info); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ /* Create and start the wodPlayer() thread to manage playback */ -+ wwo->hStartUpEvent = CreateEventW(NULL, FALSE, FALSE, NULL); -+ wwo->hThread = CreateThread(NULL, 0, wodPlayer, (LPVOID)wwo, 0, &(wwo->dwThreadID)); -+ if (wwo->hThread) -+ SetThreadPriority(wwo->hThread, THREAD_PRIORITY_TIME_CRITICAL); -+ else { -+ ERR("Thread creation for the wodPlayer failed!\n"); -+ ret = MMSYSERR_NOMEM; -+ goto exit; -+ } -+ WaitForSingleObject(wwo->hStartUpEvent, INFINITE); -+ CloseHandle(wwo->hStartUpEvent); -+ wwo->hStartUpEvent = INVALID_HANDLE_VALUE; -+ -+ return wodPlayer_NotifyClient (wwo, WOM_OPEN, 0L, 0L); -+ -+exit: -+ if (!wwo) -+ return ret; -+ -+ if (wwo->hStartUpEvent != INVALID_HANDLE_VALUE) -+ CloseHandle(wwo->hStartUpEvent); -+ -+ if (wwo->msgRing.ring_buffer_size > 0) -+ PULSE_DestroyRingMessage(&wwo->msgRing); -+ -+ if (wwo->stream) { -+ if (pa_stream_get_state(wwo->stream) == PA_STREAM_READY) -+ pa_stream_disconnect(wwo->stream); -+ pa_stream_unref(wwo->stream); -+ wwo->stream = NULL; -+ } -+ HeapFree(GetProcessHeap(), 0, wwo); -+ -+ return ret; -+} -+ -+/************************************************************************** -+ * wodClose [internal] -+ */ -+static DWORD wodClose(WINE_WAVEINST *wwo) { -+ DWORD ret; -+ -+ TRACE("(%p);\n", wwo); -+ if (!wwo) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (wwo->state != WINE_WS_FAILED) { -+ if (wwo->lpQueuePtr && wwo->lpPlayPtr) { -+ WARN("buffers still playing !\n"); -+ return WAVERR_STILLPLAYING; -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ PULSE_WaitForOperation(pa_stream_drain(wwo->stream, PULSE_StreamSuccessCallback, NULL)); -+ pa_stream_disconnect(wwo->stream); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ if (wwo->hThread != INVALID_HANDLE_VALUE) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_CLOSING, 0, TRUE); -+ -+ PULSE_DestroyRingMessage(&wwo->msgRing); -+ } -+ -+ if (wwo->stream) -+ pa_stream_unref(wwo->stream); -+ ret = wodPlayer_NotifyClient(wwo, WOM_CLOSE, 0L, 0L); -+ -+ HeapFree(GetProcessHeap(), 0, wwo); -+ -+ return ret; -+} -+ -+/************************************************************************** -+ * wodWrite [internal] -+ */ -+static DWORD wodWrite(WINE_WAVEINST *wwo, LPWAVEHDR lpWaveHdr, DWORD dwSize) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpWaveHdr->lpData == NULL || !(lpWaveHdr->dwFlags & WHDR_PREPARED)) -+ return WAVERR_UNPREPARED; -+ -+ if (lpWaveHdr->dwFlags & WHDR_INQUEUE) -+ return WAVERR_STILLPLAYING; -+ -+ lpWaveHdr->dwFlags &= ~WHDR_DONE; -+ lpWaveHdr->dwFlags |= WHDR_INQUEUE; -+ lpWaveHdr->lpNext = 0; -+ lpWaveHdr->reserved = 0; -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_HEADER, (DWORD)lpWaveHdr, FALSE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodPause [internal] -+ */ -+static DWORD wodPause(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_PAUSING, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodGetPosition [internal] -+ */ -+static DWORD wodGetPosition(WINE_WAVEINST *wwo, LPMMTIME lpTime, DWORD uSize) { -+ pa_usec_t time, temp; -+ -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (lpTime == NULL) return MMSYSERR_INVALPARAM; -+ -+ time = wodPlayer_GetStreamTime(wwo); -+ -+ temp = pa_bytes_to_usec(wwo->dwLastReset, &wwo->sample_spec); -+ if (time > temp) time -= temp; else time = 0; -+ -+ return PULSE_UsecToMMTime(time, lpTime, &wwo->sample_spec); -+} -+/************************************************************************** -+ * wodBreakLoop [internal] -+ */ -+static DWORD wodBreakLoop(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_BREAKLOOP, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodGetDevCaps [internal] -+ */ -+static DWORD wodGetDevCaps(DWORD wDevID, LPWAVEOUTCAPSW lpCaps, DWORD dwSize) { -+ TRACE("(%u, %p, %u);\n", wDevID, lpCaps, dwSize); -+ -+ if (lpCaps == NULL) return MMSYSERR_NOTENABLED; -+ -+ if (wDevID >= PULSE_WodNumDevs) { -+ TRACE("Asked for device %d, but only %d known!\n", wDevID, PULSE_WodNumDevs); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ memcpy(lpCaps, &(WOutDev[wDevID].caps.out), min(dwSize, sizeof(*lpCaps))); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodGetNumDevs [internal] -+ * Context-sanity check here, as if we respond with 0, WINE will move on -+ * to the next waveout driver. -+ */ -+static DWORD wodGetNumDevs(void) { -+ if (!PULSE_ml || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY) -+ return 0; -+ -+ return PULSE_WodNumDevs; -+} -+ -+/************************************************************************** -+ * wodGetVolume [internal] -+ */ -+static DWORD wodGetVolume(WINE_WAVEINST *wwo, LPDWORD lpdwVol) { -+ double value1, value2; -+ DWORD wleft, wright; -+ -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ TRACE("(%p, %p);\n", wwo, lpdwVol); -+ -+ if (lpdwVol == NULL) -+ return MMSYSERR_NOTENABLED; -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (wwo->stream && PULSE_context && pa_context_get_state(PULSE_context) == PA_CONTEXT_READY && -+ pa_stream_get_state(wwo->stream) == PA_STREAM_READY) { -+ PULSE_WaitForOperation(pa_context_get_sink_input_info(PULSE_context, pa_stream_get_index(wwo->stream), WAVEOUT_SinkInputInfoCallback, wwo)); -+ } -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ -+ -+ if (wwo->volume.channels == 2) { -+ value1 = pa_sw_volume_to_linear(wwo->volume.values[0]); -+ value2 = pa_sw_volume_to_linear(wwo->volume.values[1]); -+ } else { -+ value1 = pa_sw_volume_to_linear(pa_cvolume_avg(&wwo->volume)); -+ value2 = value1; -+ } -+ -+ wleft = 0xFFFFl * value1; -+ wright = 0xFFFFl * value2; -+ -+ if (wleft > 0xFFFFl) -+ wleft = 0xFFFFl; -+ if (wright > 0xFFFFl) -+ wright = 0xFFFFl; -+ -+ *lpdwVol = (WORD)wleft + (WORD)(wright << 16); -+ -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodSetVolume [internal] -+ */ -+static DWORD wodSetVolume(WINE_WAVEINST *wwo, DWORD dwParam1) { -+ double value1, value2; -+ -+ TRACE("(%p, %08X);\n", wwo, dwParam1); -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ value1 = (double)LOWORD(dwParam1)/(double)0xFFFFl; -+ value2 = (double)HIWORD(dwParam1)/(double)0xFFFFl; -+ -+ if (wwo->sample_spec.channels == 2) { -+ wwo->volume.channels = 2; -+ wwo->volume.values[0] = pa_sw_volume_from_linear(value1); -+ wwo->volume.values[1] = pa_sw_volume_from_linear(value2); -+ } else { -+ if (value1 != value2) FIXME("Non-stereo streams can't pan!\n"); -+ wwo->volume.channels = wwo->sample_spec.channels; -+ pa_cvolume_set(&wwo->volume, wwo->volume.channels, pa_sw_volume_from_linear(value1 > value2 ? value1 : value2)); -+ } -+ -+ if (TRACE_ON(wave)) { -+ char s[PA_CVOLUME_SNPRINT_MAX]; -+ pa_cvolume_snprint(s, PA_CVOLUME_SNPRINT_MAX, &wwo->volume); -+ TRACE("%s\n", s); -+ } -+ -+ pa_threaded_mainloop_lock(PULSE_ml); -+ if (!wwo->stream || !PULSE_context || pa_context_get_state(PULSE_context) != PA_CONTEXT_READY || -+ pa_stream_get_state(wwo->stream) != PA_STREAM_READY || !pa_cvolume_valid(&wwo->volume)) { -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return MMSYSERR_NOERROR; -+ } -+ -+ PULSE_WaitForOperation(pa_context_set_sink_input_volume(PULSE_context, -+ pa_stream_get_index(wwo->stream), &wwo->volume, -+ PULSE_ContextSuccessCallback, wwo)); -+ pa_threaded_mainloop_unlock(PULSE_ml); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodRestart [internal] -+ */ -+static DWORD wodRestart(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ if (wwo->state == WINE_WS_PAUSED) -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESTARTING, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodReset [internal] -+ */ -+static DWORD wodReset(WINE_WAVEINST *wwo) { -+ if (!wwo || wwo->state == WINE_WS_FAILED) { -+ WARN("Stream instance invalid.\n"); -+ return MMSYSERR_INVALHANDLE; -+ } -+ -+ PULSE_AddRingMessage(&wwo->msgRing, WINE_WM_RESETTING, 0, TRUE); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodDevInterfaceSize [internal] -+ */ -+static DWORD wodDevInterfaceSize(UINT wDevID, LPDWORD dwParam1) { -+ -+ *dwParam1 = MultiByteToWideChar(CP_UTF8, 0, WOutDev[wDevID].interface_name, -1, NULL, 0) * sizeof(WCHAR); -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodDevInterface [internal] -+ */ -+static DWORD wodDevInterface(UINT wDevID, PWCHAR dwParam1, DWORD dwParam2) { -+ if (dwParam2 >= MultiByteToWideChar(CP_UTF8, 0, WOutDev[wDevID].interface_name, -1, -+ NULL, 0 ) * sizeof(WCHAR)) -+ { -+ MultiByteToWideChar(CP_UTF8, 0, WOutDev[wDevID].interface_name, -1, -+ dwParam1, dwParam2 / sizeof(WCHAR)); -+ return MMSYSERR_NOERROR; -+ } -+ return MMSYSERR_INVALPARAM; -+} -+ -+DWORD wodDsDesc(UINT wDevID, PDSDRIVERDESC desc) { -+ TRACE("(%u, %p)\n", wDevID, desc); -+ *desc = WOutDev[wDevID].ds_desc; -+ return MMSYSERR_NOERROR; -+} -+ -+/************************************************************************** -+ * wodMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_wodMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { -+ -+ switch (wMsg) { -+ -+ case DRVM_INIT: -+ case DRVM_EXIT: -+ case DRVM_ENABLE: -+ case DRVM_DISABLE: -+ return 0; -+ -+ /* WaveOut Playback related functions */ -+ case WODM_OPEN: return wodOpen (wDevID, dwUser, (LPWAVEOPENDESC)dwParam1, dwParam2); -+ case WODM_CLOSE: return wodClose ((WINE_WAVEINST*)dwUser); -+ case WODM_WRITE: return wodWrite ((WINE_WAVEINST*)dwUser, (LPWAVEHDR)dwParam1, dwParam2); -+ case WODM_PAUSE: return wodPause ((WINE_WAVEINST*)dwUser); -+ case WODM_GETPOS: return wodGetPosition ((WINE_WAVEINST*)dwUser, (LPMMTIME)dwParam1, dwParam2); -+ case WODM_BREAKLOOP: return wodBreakLoop ((WINE_WAVEINST*)dwUser); -+ case WODM_RESTART: return wodRestart ((WINE_WAVEINST*)dwUser); -+ case WODM_RESET: return wodReset ((WINE_WAVEINST*)dwUser); -+ -+ case WODM_GETVOLUME: return wodGetVolume ((WINE_WAVEINST*)dwUser, (LPDWORD)dwParam1); -+ case WODM_SETVOLUME: return wodSetVolume ((WINE_WAVEINST*)dwUser, dwParam1); -+ -+ case WODM_PREPARE: -+ case WODM_UNPREPARE: -+ -+ case WODM_GETPITCH: -+ case WODM_SETPITCH: -+ -+ case WODM_GETPLAYBACKRATE: -+ case WODM_SETPLAYBACKRATE: -+ return MMSYSERR_NOTSUPPORTED; -+ -+ /* Device enumeration, directsound and capabilities */ -+ case WODM_GETDEVCAPS: return wodGetDevCaps (wDevID, (LPWAVEOUTCAPSW)dwParam1, dwParam2); -+ case WODM_GETNUMDEVS: return wodGetNumDevs (); -+ case DRV_QUERYDEVICEINTERFACESIZE: return wodDevInterfaceSize (wDevID, (LPDWORD)dwParam1); -+ case DRV_QUERYDEVICEINTERFACE: return wodDevInterface (wDevID, (PWCHAR)dwParam1, dwParam2); -+ case DRV_QUERYDSOUNDIFACE: return MMSYSERR_NOTSUPPORTED; -+ case DRV_QUERYDSOUNDDESC: return wodDsDesc (wDevID, (PDSDRIVERDESC)dwParam1); -+ -+ default: -+ FIXME("unknown message %d!\n", wMsg); -+ } -+ return MMSYSERR_NOTSUPPORTED; -+} -+ -+#else /* !HAVE_PULSEAUDIO */ -+ -+/************************************************************************** -+ * wodMessage (WINEPULSE.@) -+ */ -+DWORD WINAPI PULSE_wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser, -+ DWORD dwParam1, DWORD dwParam2) { -+ FIXME("(%u, %04X, %08X, %08X, %08X):stub\n", wDevID, wMsg, dwUser, -+ dwParam1, dwParam2); -+ return MMSYSERR_NOTENABLED; -+} -+ -+#endif /* HAVE_PULSEAUDIO */ -diff --git a/dlls/winepulse.drv/winepulse.drv.spec b/dlls/winepulse.drv/winepulse.drv.spec -new file mode 100644 -index 0000000..1b49460 ---- /dev/null -+++ b/dlls/winepulse.drv/winepulse.drv.spec -@@ -0,0 +1,3 @@ -+@ stdcall -private DriverProc(long long long long long long) PULSE_DriverProc -+@ stdcall -private wodMessage(long long long long long long) PULSE_wodMessage -+@ stdcall -private widMessage(long long long long long long) PULSE_widMessage -diff --git a/dlls/winepulse.drv/winepulse.h b/dlls/winepulse.drv/winepulse.h -new file mode 100644 -index 0000000..b83de5d ---- /dev/null -+++ b/dlls/winepulse.drv/winepulse.h -@@ -0,0 +1,197 @@ -+/* Definitions for PulseAudio Wine Driver -+ * -+ * Copyright 2009 Arthur Taylor -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation; either -+ * version 2.1 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -+ */ -+ -+#ifndef __WINE_CONFIG_H -+# error You must include config.h to use this header -+#endif -+ -+#if defined(HAVE_PULSEAUDIO) && !defined(__WINEPULSE_H) -+#define __WINEPULSE_H -+ -+#include "mmreg.h" -+#include "dsound.h" -+#include "dsdriver.h" -+ -+#include "ks.h" -+#include "ksmedia.h" -+#include "ksguid.h" -+ -+#include -+ -+/* state diagram for waveOut writing: -+ * -+ * +---------+-------------+---------------+---------------------------------+ -+ * | state | function | event | new state | -+ * +---------+-------------+---------------+---------------------------------+ -+ * | | open() | | STOPPED | -+ * | PAUSED | write() | | PAUSED | -+ * | STOPPED | write() | | PLAYING | -+ * | PLAYING | write() | HEADER | PLAYING | -+ * | (other) | write() | | | -+ * | (any) | pause() | PAUSING | PAUSED | -+ * | PAUSED | restart() | RESTARTING | PLAYING (if no thrd => STOPPED) | -+ * | (any) | reset() | RESETTING | STOPPED | -+ * | (any) | close() | CLOSING | CLOSED | -+ * +---------+-------------+---------------+---------------------------------+ -+ */ -+ -+/* states of the playing device */ -+#define WINE_WS_PLAYING 1 -+#define WINE_WS_PAUSED 2 -+#define WINE_WS_STOPPED 3 -+#define WINE_WS_CLOSED 4 -+#define WINE_WS_FAILED 5 -+ -+#define PULSE_ALL_FORMATS \ -+ WAVE_FORMAT_1M08 | /* Mono 11025Hz 8-bit */\ -+ WAVE_FORMAT_1M16 | /* Mono 11025Hz 16-bit */\ -+ WAVE_FORMAT_1S08 | /* Stereo 11025Hz 8-bit */\ -+ WAVE_FORMAT_1S16 | /* Stereo 11025Hz 16-bit */\ -+ WAVE_FORMAT_2M08 | /* Mono 22050Hz 8-bit */\ -+ WAVE_FORMAT_2M16 | /* Mono 22050Hz 16-bit */\ -+ WAVE_FORMAT_2S08 | /* Stereo 22050Hz 8-bit */\ -+ WAVE_FORMAT_2S16 | /* Stereo 22050Hz 16-bit */\ -+ WAVE_FORMAT_4M08 | /* Mono 44100Hz 8-bit */\ -+ WAVE_FORMAT_4M16 | /* Mono 44100Hz 16-bit */\ -+ WAVE_FORMAT_4S08 | /* Stereo 44100Hz 8-bit */\ -+ WAVE_FORMAT_4S16 | /* Stereo 44100Hz 16-bit */\ -+ WAVE_FORMAT_48M08 | /* Mono 48000Hz 8-bit */\ -+ WAVE_FORMAT_48S08 | /* Stereo 48000Hz 8-bit */\ -+ WAVE_FORMAT_48M16 | /* Mono 48000Hz 16-bit */\ -+ WAVE_FORMAT_48S16 | /* Stereo 48000Hz 16-bit */\ -+ WAVE_FORMAT_96M08 | /* Mono 96000Hz 8-bit */\ -+ WAVE_FORMAT_96S08 | /* Stereo 96000Hz 8-bit */\ -+ WAVE_FORMAT_96M16 | /* Mono 96000Hz 16-bit */\ -+ WAVE_FORMAT_96S16 /* Stereo 96000Hz 16-bit */ -+ -+/* events to be sent to device */ -+enum win_wm_message { -+ WINE_WM_PAUSING = WM_USER + 1, WINE_WM_RESTARTING, WINE_WM_RESETTING, WINE_WM_HEADER, -+ WINE_WM_BREAKLOOP, WINE_WM_CLOSING, WINE_WM_STARTING, WINE_WM_STOPPING, WINE_WM_XRUN, WINE_WM_FEED -+}; -+ -+typedef struct { -+ enum win_wm_message msg; /* message identifier */ -+ DWORD param; /* parameter for this message */ -+ HANDLE hEvent; /* if message is synchronous, handle of event for synchro */ -+} PULSE_MSG; -+ -+/* implement an in-process message ring for better performance -+ * (compared to passing thru the server) -+ * this ring will be used by the input (resp output) record (resp playback) routine -+ */ -+typedef struct { -+ PULSE_MSG * messages; -+ int ring_buffer_size; -+ int msg_tosave; -+ int msg_toget; -+/* Either pipe or event is used, but that is defined in pulse.c, -+ * since this is a global header we define both here */ -+ int msg_pipe[2]; -+ HANDLE msg_event; -+ CRITICAL_SECTION msg_crst; -+} PULSE_MSG_RING; -+ -+typedef struct WINE_WAVEDEV WINE_WAVEDEV; -+typedef struct WINE_WAVEINST WINE_WAVEINST; -+ -+/* Per-playback/record device */ -+struct WINE_WAVEDEV { -+ char interface_name[MAXPNAMELEN * 2]; -+ char *device_name; -+ pa_cvolume volume; -+ -+ union { -+ WAVEOUTCAPSW out; -+ WAVEINCAPSW in; -+ } caps; -+ -+ /* DirectSound stuff */ -+ DSDRIVERDESC ds_desc; -+ DSDRIVERCAPS ds_caps; -+}; -+ -+/* Per-playback/record instance */ -+struct WINE_WAVEINST { -+ INT state; /* one of the WINE_WS_ manifest constants */ -+ WAVEOPENDESC waveDesc; -+ WORD wFlags; -+ -+ /* PulseAudio specific data */ -+ pa_stream *stream; /* The PulseAudio stream */ -+ const pa_timing_info *timing_info; /* The timing info structure for the stream */ -+ pa_sample_spec sample_spec; /* Sample spec of this stream / device */ -+ pa_cvolume volume; /* Software volume of the stream */ -+ pa_buffer_attr buffer_attr; /* Buffer attribute, may not be used */ -+ -+ /* waveIn / waveOut wavaHdr */ -+ LPWAVEHDR lpQueuePtr; /* Start of queued WAVEHDRs (waiting to be notified) */ -+ LPWAVEHDR lpPlayPtr; /* Start of not yet fully written buffers */ -+ DWORD dwPartialOffset; /* Offset of not yet written bytes in lpPlayPtr */ -+ LPWAVEHDR lpLoopPtr; /* Pointer of first buffer in loop, if any */ -+ DWORD dwLoops; /* Private copy of loop counter */ -+ DWORD dwLastReset; /* When the last reset occured, as pa stream time doesn't reset */ -+ -+ /* waveIn specific */ -+ const void *buffer; /* Pointer to the latest data fragment for recording streams */ -+ DWORD buffer_length; /* How large the latest data fragment is */ -+ DWORD buffer_read_offset; /* How far into latest data fragment we last read */ -+ -+ /* Thread communication and synchronization stuff */ -+ HANDLE hStartUpEvent; -+ HANDLE hThread; -+ DWORD dwThreadID; -+ PULSE_MSG_RING msgRing; -+}; -+ -+/* We establish one context per instance, so make it global to the lib */ -+pa_context *PULSE_context; /* Connection Context */ -+pa_threaded_mainloop *PULSE_ml; /* PA Runtime information */ -+ -+/* WaveIn / WaveOut devices */ -+WINE_WAVEDEV *WOutDev; -+WINE_WAVEDEV *WInDev; -+DWORD PULSE_WodNumDevs; -+DWORD PULSE_WidNumDevs; -+ -+/* pulse.c: PulseAudio Async Callbacks */ -+void PULSE_StreamRequestCallback(pa_stream *s, size_t nbytes, void *userdata); -+void PULSE_StreamSuccessCallback(pa_stream *s, int success, void *userdata); -+void PULSE_StreamStateCallback(pa_stream *s, void *userdata); -+void PULSE_StreamUnderflowCallback(pa_stream *s, void *userdata); -+void PULSE_StreamSuspendedCallback(pa_stream *s, void *userdata); -+void PULSE_StreamMovedCallback(pa_stream *s, void *userdata); -+void PULSE_ContextSuccessCallback(pa_context *c, int success, void *userdata); -+ -+/* pulse.c: General Functions */ -+void PULSE_WaitForOperation(pa_operation *o); -+BOOL PULSE_SetupFormat(LPWAVEFORMATEX wf, pa_sample_spec *ss); -+HRESULT PULSE_UsecToMMTime(pa_usec_t time, LPMMTIME lpTime, const pa_sample_spec *ss); -+ -+/* pulse.c: Message Ring */ -+int PULSE_InitRingMessage(PULSE_MSG_RING* omr); -+int PULSE_DestroyRingMessage(PULSE_MSG_RING* omr); -+void PULSE_ResetRingMessage(PULSE_MSG_RING* omr); -+void PULSE_WaitRingMessage(PULSE_MSG_RING* omr, DWORD sleep); -+int PULSE_AddRingMessage(PULSE_MSG_RING* omr, enum win_wm_message msg, DWORD param, BOOL wait); -+int PULSE_RetrieveRingMessage(PULSE_MSG_RING* omr, enum win_wm_message *msg, DWORD *param, HANDLE *hEvent); -+ -+/* pulse.c: Tracing */ -+const char * PULSE_getCmdString(enum win_wm_message msg); -+#endif From dc9312f74fd1eeaf5e9e148bcd1c32f2ce4ed01f Mon Sep 17 00:00:00 2001 From: Michael Cronenworth Date: Wed, 25 Sep 2019 08:59:01 -0500 Subject: [PATCH 155/161] Upload 4.0.2 sources --- .gitignore | 5 ++--- sources | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 42391c9..4e514eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -wine-1.2.tar.bz2 -wine-1.3.0.tar.bz2 -/wine-1.3.1.tar.bz2 +/wine-4.0.2.tar.xz +/wine-4.0.2.tar.xz.sign diff --git a/sources b/sources index 057d814..82d9f25 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -5be30df05787f5db5bd5d2aa154aee87 wine-1.3.1.tar.bz2 +SHA512 (wine-4.0.2.tar.xz) = 14cb7eeba188562b73125c668f2020e1df6802e486552e422d3aa75b95f6fccedc0f87868f7e58ce71697941ff49757981ec93b9ef288da37ca8570658f194fc +SHA512 (wine-4.0.2.tar.xz.sign) = 573d2eafbc2925d3eb20fe23aa69746a36a5e463358ab0a306a9c636fa841e15577686c13024d4b074e847fc16d91df6ec170f1dd6d299dc08b9f03010d5c42b From 0b7dd866e4b85211618f1287f579cd5e14d2d36f Mon Sep 17 00:00:00 2001 From: Michael Cronenworth Date: Sat, 23 Nov 2019 10:49:31 -0600 Subject: [PATCH 156/161] drop capi package (rhbz#1775582) --- wine.spec | 34 ++++++---------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/wine.spec b/wine.spec index 5f0926d..4771246 100644 --- a/wine.spec +++ b/wine.spec @@ -171,7 +171,6 @@ Requires: wine-fonts = %{version}-%{release} %ifarch %{ix86} x86_64 %if 0%{?fedora} || 0%{?rhel} <= 6 Requires: wine-core(x86-32) = %{version}-%{release} -Requires: wine-capi(x86-32) = %{version}-%{release} Requires: wine-cms(x86-32) = %{version}-%{release} Requires: wine-ldap(x86-32) = %{version}-%{release} Requires: wine-twain(x86-32) = %{version}-%{release} @@ -195,7 +194,6 @@ Requires: mesa-dri-drivers(x86-32) # x86-64 parts %ifarch x86_64 Requires: wine-core(x86-64) = %{version}-%{release} -Requires: wine-capi(x86-64) = %{version}-%{release} Requires: wine-cms(x86-64) = %{version}-%{release} Requires: wine-ldap(x86-64) = %{version}-%{release} Requires: wine-twain(x86-64) = %{version}-%{release} @@ -216,7 +214,6 @@ Requires: mesa-dri-drivers(x86-64) # ARM parts %ifarch %{arm} aarch64 Requires: wine-core = %{version}-%{release} -Requires: wine-capi = %{version}-%{release} Requires: wine-cms = %{version}-%{release} Requires: wine-ldap = %{version}-%{release} Requires: wine-twain = %{version}-%{release} @@ -232,7 +229,6 @@ Requires: samba-winbind-clients # aarch64 parts %ifarch aarch64 Requires: wine-core(aarch-64) = %{version}-%{release} -Requires: wine-capi(aarch-64) = %{version}-%{release} Requires: wine-cms(aarch-64) = %{version}-%{release} Requires: wine-ldap(aarch-64) = %{version}-%{release} Requires: wine-twain(aarch-64) = %{version}-%{release} @@ -616,23 +612,6 @@ Requires: sane-backends-libs %description twain Twain support for wine -%package capi -Summary: ISDN support for wine -Group: System Environment/Libraries -Requires: wine-core = %{version}-%{release} -%ifarch x86_64 -Requires: isdn4k-utils(x86-64) -%endif -%ifarch %{ix86} -Requires: isdn4k-utils(x86-32) -%endif -%ifarch %{arm} aarch64 -Requires: isdn4k-utils -%endif - -%description capi -ISDN support for wine - %package devel Summary: Wine development environment Group: System Environment/Libraries @@ -945,6 +924,9 @@ install -p -m 0644 loader/wine.fr.UTF-8.man %{buildroot}%{_mandir}/fr.UTF-8/man1 mkdir -p %{buildroot}%{_mandir}/pl.UTF-8/man1 install -p -m 0644 loader/wine.pl.UTF-8.man %{buildroot}%{_mandir}/pl.UTF-8/man1/wine.1 +# remove capi support +rm -f %{buildroot}/%{_libdir}/wine/capi2032.dll.so + %if 0%{?rhel} == 6 %post sysvinit @@ -1030,9 +1012,6 @@ fi %post twain -p /sbin/ldconfig %postun twain -p /sbin/ldconfig -%post capi -p /sbin/ldconfig -%postun capi -p /sbin/ldconfig - %post alsa -p /sbin/ldconfig %postun alsa -p /sbin/ldconfig @@ -2162,10 +2141,6 @@ fi %{_libdir}/wine/twain_32.dll.so %{_libdir}/wine/sane.ds.so -# capi subpackage -%files capi -%{_libdir}/wine/capi2032.dll.so - %files devel %{_bindir}/function_grep.pl %{_bindir}/widl @@ -2212,6 +2187,9 @@ fi %endif %changelog +* Sat Nov 23 2019 Michael Cronenworth 4.0.2-2 +- drop capi package (rhbz#1775582) + * Wed Sep 25 2019 Michael Cronenworth 4.0.2-1 - version update From 09e9a600d0608c731625a716b829aed466c4c238 Mon Sep 17 00:00:00 2001 From: Michael Cronenworth Date: Sat, 23 Nov 2019 10:50:16 -0600 Subject: [PATCH 157/161] bump release --- wine.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wine.spec b/wine.spec index 4771246..6a5220f 100644 --- a/wine.spec +++ b/wine.spec @@ -21,7 +21,7 @@ Name: wine Version: 4.0.2 -Release: 1%{?dist} +Release: 2%{?dist} Summary: A compatibility layer for windows applications Group: Applications/Emulators From 183d919b6018e6d899c85ca2bc63285b772bd834 Mon Sep 17 00:00:00 2001 From: Michael Cronenworth Date: Wed, 27 Nov 2019 08:53:05 -0600 Subject: [PATCH 158/161] Update to 4.0.3 --- .gitignore | 4 ++-- sources | 4 ++-- wine.spec | 7 +++++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 4e514eb..1a0f609 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/wine-4.0.2.tar.xz -/wine-4.0.2.tar.xz.sign +/wine-4.0.3.tar.xz +/wine-4.0.3.tar.xz.sign diff --git a/sources b/sources index 82d9f25..0ba627e 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (wine-4.0.2.tar.xz) = 14cb7eeba188562b73125c668f2020e1df6802e486552e422d3aa75b95f6fccedc0f87868f7e58ce71697941ff49757981ec93b9ef288da37ca8570658f194fc -SHA512 (wine-4.0.2.tar.xz.sign) = 573d2eafbc2925d3eb20fe23aa69746a36a5e463358ab0a306a9c636fa841e15577686c13024d4b074e847fc16d91df6ec170f1dd6d299dc08b9f03010d5c42b +SHA512 (wine-4.0.3.tar.xz) = a8fde0bcf600eaec56c3ce58c9aa992386784c85cf1c93aa84d50aff4c842b12a6b099c23391d3ad9a0059f3dc9069c0f8e00fad293305ba8a33afc70bf26e14 +SHA512 (wine-4.0.3.tar.xz.sign) = 98d2145b9841b79b75ee0a438387a2626feeab17496f44e6729014ead0f012d48c108efb1221493dc63b735567d6bd918350866b2499f77154f89f0bd33e0ce4 diff --git a/wine.spec b/wine.spec index 6a5220f..40d4f73 100644 --- a/wine.spec +++ b/wine.spec @@ -20,8 +20,8 @@ %endif Name: wine -Version: 4.0.2 -Release: 2%{?dist} +Version: 4.0.3 +Release: 1%{?dist} Summary: A compatibility layer for windows applications Group: Applications/Emulators @@ -2187,6 +2187,9 @@ fi %endif %changelog +* Wed Nov 27 2019 Michael Cronenworth 4.0.3-1 +- version update + * Sat Nov 23 2019 Michael Cronenworth 4.0.2-2 - drop capi package (rhbz#1775582) From 45e1c29c8721c780bb9e2e77c4667712a6f2b518 Mon Sep 17 00:00:00 2001 From: Michael Cronenworth Date: Tue, 21 Apr 2020 08:58:40 -0500 Subject: [PATCH 159/161] Update to 4.0.4 --- .gitignore | 4 ++-- sources | 4 ++-- wine.spec | 5 ++++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 1a0f609..3253f0e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/wine-4.0.3.tar.xz -/wine-4.0.3.tar.xz.sign +/wine-4.0.4.tar.xz +/wine-4.0.4.tar.xz.sign diff --git a/sources b/sources index 0ba627e..a85fb3e 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (wine-4.0.3.tar.xz) = a8fde0bcf600eaec56c3ce58c9aa992386784c85cf1c93aa84d50aff4c842b12a6b099c23391d3ad9a0059f3dc9069c0f8e00fad293305ba8a33afc70bf26e14 -SHA512 (wine-4.0.3.tar.xz.sign) = 98d2145b9841b79b75ee0a438387a2626feeab17496f44e6729014ead0f012d48c108efb1221493dc63b735567d6bd918350866b2499f77154f89f0bd33e0ce4 +SHA512 (wine-4.0.4.tar.xz) = 21780b3c846bfa7a54572fe78939d7a2579a2b96654fc578e8e70d20b50262b4bfb43a0431f4089264cf8f83202c2fc67dd6a4c89257e951b64e7c91ee3bdf4e +SHA512 (wine-4.0.4.tar.xz.sign) = 8ad639a7095ea2d5ad63966c6597c8534cba7f50a6ac0a9c170e1e45751016b2599d5b28eca8808ba368280de127fadb10b7eacab28456d081f8119b098beda1 diff --git a/wine.spec b/wine.spec index 40d4f73..1a66839 100644 --- a/wine.spec +++ b/wine.spec @@ -20,7 +20,7 @@ %endif Name: wine -Version: 4.0.3 +Version: 4.0.4 Release: 1%{?dist} Summary: A compatibility layer for windows applications @@ -2187,6 +2187,9 @@ fi %endif %changelog +* Tue Apr 21 2020 Michael Cronenworth 4.0.4-1 +- version update + * Wed Nov 27 2019 Michael Cronenworth 4.0.3-1 - version update From d3341360e0e98c8194f765841e32f623a77853df Mon Sep 17 00:00:00 2001 From: Troy Dawson Date: Thu, 24 Sep 2020 18:54:44 +0000 Subject: [PATCH 160/161] remove package.cfg per new epel-playground policy --- package.cfg | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 package.cfg diff --git a/package.cfg b/package.cfg deleted file mode 100644 index 66ea79d..0000000 --- a/package.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[koji] -targets = epel8 epel8-playground \ No newline at end of file From 68ac5926382b28dca83e67065b17168afab03233 Mon Sep 17 00:00:00 2001 From: Michael Cronenworth Date: Wed, 10 Nov 2021 21:16:39 -0600 Subject: [PATCH 161/161] Update to 6.0.2 --- .gitignore | 4 +- sources | 4 +- wine.spec | 3687 +++++++++++++++------------------------------------- 3 files changed, 1033 insertions(+), 2662 deletions(-) diff --git a/.gitignore b/.gitignore index 3253f0e..7383dcb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ -/wine-4.0.4.tar.xz -/wine-4.0.4.tar.xz.sign +/wine-6.0.2.tar.xz +/wine-6.0.2.tar.xz.sign diff --git a/sources b/sources index a85fb3e..ce8536e 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (wine-4.0.4.tar.xz) = 21780b3c846bfa7a54572fe78939d7a2579a2b96654fc578e8e70d20b50262b4bfb43a0431f4089264cf8f83202c2fc67dd6a4c89257e951b64e7c91ee3bdf4e -SHA512 (wine-4.0.4.tar.xz.sign) = 8ad639a7095ea2d5ad63966c6597c8534cba7f50a6ac0a9c170e1e45751016b2599d5b28eca8808ba368280de127fadb10b7eacab28456d081f8119b098beda1 +SHA512 (wine-6.0.2.tar.xz) = 6cf002c6a06161665614c9f977dfa402bae8e657c0744dd824575066cdeb676bb9d61ebfc3c4b6f76486077a7457fe91cbe5bbadb467279a61e5a320da587696 +SHA512 (wine-6.0.2.tar.xz.sign) = 01402773acaa39c1244ab06a79582ab9b61bbcabe24216176556c09471effb57a6c8f45ef461407b2a149093c5ae4e45a571ef590bf83d397a2dd604d42b083e diff --git a/wine.spec b/wine.spec index 1a66839..69d8bcf 100644 --- a/wine.spec +++ b/wine.spec @@ -2,9 +2,32 @@ %undefine _hardened_build %global no64bit 0 -%global winegecko 2.47 -%global winemono 4.7.5 +%global winegecko 2.47.2 +%global winemono 5.1.1 #global _default_patch_fuzz 2 +%ifarch %{ix86} x86_64 +%global wineacm acm +%global wineax ax +%global winecom com +%global winecpl cpl +%global winedll dll +%global winedrv drv +%global wineexe exe +%global wineocx ocx +%global winesys sys +%global winetlb tlb +%else +%global wineacm acm.so +%global wineax ax.so +%global winecom com.so +%global winecpl cpl.so +%global winedll dll.so +%global winedrv drv.so +%global wineexe exe.so +%global wineocx ocx.so +%global winesys sys.so +%global winetlb tlb.so +%endif # build with wine-staging patches, see: https://github.com/wine-staging/wine-staging %if 0%{?fedora} @@ -20,15 +43,15 @@ %endif Name: wine -Version: 4.0.4 +Version: 6.0.2 Release: 1%{?dist} Summary: A compatibility layer for windows applications Group: Applications/Emulators License: LGPLv2+ URL: https://www.winehq.org/ -Source0: https://dl.winehq.org/wine/source/4.0/wine-%{version}.tar.xz -Source10: https://dl.winehq.org/wine/source/4.0/wine-%{version}.tar.xz.sign +Source0: https://dl.winehq.org/wine/source/6.0/wine-%{version}.tar.xz +Source10: https://dl.winehq.org/wine/source/6.0/wine-%{version}.tar.xz.sign Source1: wine.init Source2: wine.systemd @@ -89,10 +112,18 @@ ExclusiveArch: %{ix86} %{arm} BuildRequires: bison BuildRequires: flex +%ifarch aarch64 +BuildRequires: clang >= 5.0 +%else BuildRequires: gcc +%endif +BuildRequires: mingw32-gcc +BuildRequires: mingw64-gcc BuildRequires: autoconf +BuildRequires: make BuildRequires: desktop-file-utils BuildRequires: alsa-lib-devel +BuildRequires: audiofile-devel BuildRequires: freeglut-devel BuildRequires: lcms2-devel BuildRequires: libieee1284-devel @@ -104,7 +135,6 @@ BuildRequires: libstdc++-devel BuildRequires: libusb-devel BuildRequires: libxml2-devel BuildRequires: libxslt-devel -BuildRequires: ncurses-devel %if 0%{?fedora} BuildRequires: ocl-icd-devel BuildRequires: opencl-headers @@ -149,7 +179,9 @@ BuildRequires: gstreamer1-plugins-base-devel BuildRequires: mpg123-devel BuildRequires: SDL2-devel BuildRequires: libvkd3d-devel +BuildRequires: libvkd3d-shader-devel BuildRequires: vulkan-devel +BuildRequires: libFAudio-devel # Silverlight DRM-stuff needs XATTR enabled. %if 0%{?wine_staging} @@ -189,6 +221,7 @@ Requires: wine-mono = %winemono Requires: /usr/bin/ntlm_auth Requires: mesa-dri-drivers(x86-32) %endif +Recommends: gstreamer1-plugins-good(x86-32) %endif # x86-64 parts @@ -209,6 +242,7 @@ Requires: mingw64-wine-gecko = %winegecko Requires: wine-mono = %winemono %endif Requires: mesa-dri-drivers(x86-64) +Recommends: gstreamer1-plugins-good(x86-64) %endif # ARM parts @@ -264,7 +298,7 @@ Requires: wine-filesystem = %{version}-%{release} # CUPS support uses dlopen - rhbz#1367537 Requires: cups-libs(x86-32) Requires: freetype(x86-32) -Requires: nss-mdns(x86-32) +Requires: (nss-mdns(x86-32) if nss-mdns(x86-64)) Requires: gnutls(x86-32) Requires: libXcomposite(x86-32) Requires: libXcursor(x86-32) @@ -278,7 +312,7 @@ Requires: mesa-libOSMesa(x86-32) Requires: libv4l(x86-32) Requires: unixODBC(x86-32) Requires: SDL2(x86-32) -Requires: vulkan(x86-32) +Requires: vulkan-loader(x86-32) %if 0%{?wine_staging} Requires: libva(x86-32) %endif @@ -288,7 +322,7 @@ Requires: libva(x86-32) # CUPS support uses dlopen - rhbz#1367537 Requires: cups-libs(x86-64) Requires: freetype(x86-64) -Requires: nss-mdns(x86-64) +Requires: (nss-mdns(x86-64) if nss-mdns(x86-32)) Requires: gnutls(x86-64) Requires: libXcomposite(x86-64) Requires: libXcursor(x86-64) @@ -302,7 +336,7 @@ Requires: mesa-libOSMesa(x86-64) Requires: libv4l(x86-64) Requires: unixODBC(x86-64) Requires: SDL2(x86-64) -Requires: vulkan(x86-64) +Requires: vulkan-loader(x86-64) %if 0%{?wine_staging} Requires: libva(x86-64) %endif @@ -323,7 +357,7 @@ Requires: mesa-libOSMesa Requires: libv4l Requires: unixODBC Requires: SDL2 -Requires: vulkan +Requires: vulkan-loader %if 0%{?wine_staging} Requires: libva %endif @@ -425,6 +459,7 @@ Obsoletes: wine-times-new-roman-fonts <= %{version}-%{release} Obsoletes: wine-times-new-roman-fonts-system <= %{version}-%{release} %endif # 0%{?wine_staging} Requires: wine-symbol-fonts = %{version}-%{release} +Requires: wine-webdings-fonts = %{version}-%{release} Requires: wine-wingdings-fonts = %{version}-%{release} # intermediate fix for #593140 Requires: liberation-sans-fonts liberation-serif-fonts liberation-mono-fonts @@ -557,6 +592,14 @@ Requires: fontpackages-filesystem %description symbol-fonts %{summary} +%package webdings-fonts +Summary: Wine Webdings font family +BuildArch: noarch +Requires: fontpackages-filesystem + +%description webdings-fonts +%{summary} + %package wingdings-fonts Summary: Wine Wingdings font family Group: User Interface/X @@ -674,12 +717,32 @@ sed -i -e 's!^loader server: libs/port libs/wine tools.*!& include!' Makefile.in %endif # 0%{?wine_staging} %build +# This package uses top level ASM constructs which are incompatible with LTO. +# Top level ASMs are often used to implement symbol versioning. gcc-10 +# introduces a new mechanism for symbol versioning which works with LTO. +# Converting packages to use that mechanism instead of toplevel ASMs is +# recommended. +# Disable LTO +%define _lto_cflags %{nil} # disable fortify as it breaks wine # http://bugs.winehq.org/show_bug.cgi?id=24606 # http://bugs.winehq.org/show_bug.cgi?id=25073 export CFLAGS="`echo $RPM_OPT_FLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//'` -Wno-error" +%ifarch aarch64 +%if 0%{?fedora} >= 33 +%global toolchain clang +%else +# ARM64 now requires clang +# https://source.winehq.org/git/wine.git/commit/8fb8cc03c3edb599dd98f369e14a08f899cbff95 +export CC="/usr/bin/clang" +# Fedora's default compiler flags now conflict with what clang supports +# https://bugzilla.redhat.com/show_bug.cgi?id=1658311 +export CFLAGS="`echo $CFLAGS | sed -e 's/-fstack-clash-protection//'`" +%endif +%endif + %configure \ --sysconfdir=%{_sysconfdir}/wine \ --x-includes=%{_includedir} --x-libraries=%{_libdir} \ @@ -712,6 +775,9 @@ mv %{buildroot}%{_bindir}/wineserver %{buildroot}%{_bindir}/wineserver64 %ifarch %{ix86} %{arm} mv %{buildroot}%{_bindir}/wine %{buildroot}%{_bindir}/wine32 mv %{buildroot}%{_bindir}/wineserver %{buildroot}%{_bindir}/wineserver32 +# do not ship typelibs in 32-bit packages +# https://www.winehq.org/pipermail/wine-devel/2020-June/167283.html +rm %{buildroot}%{_includedir}/wine/windows/*.tlb %endif %ifnarch %{arm} aarch64 x86_64 mv %{buildroot}%{_bindir}/wine-preloader %{buildroot}%{_bindir}/wine32-preloader @@ -769,11 +835,16 @@ PROGRAM_ICONFIX='s/height="272"/height="256"/;'\ ' x="368"\n'\ ' y="8"\n'\ ' viewBox="368, 8, 256, 256"/;' +MAIN_ICONFIX='s/height="272"/height="256"/;'\ +'s/width="632"/width="256"\n'\ +' x="8"\n'\ +' y="8"\n'\ +' viewBox="8, 8, 256, 256"/;' # This icon file is still in the legacy format install -p -m 644 dlls/user32/resources/oic_winlogo.svg \ %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/wine.svg -sed -i -e '3s/368/64/' %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/wine.svg +sed -i -e "$MAIN_ICONFIX" %{buildroot}%{_datadir}/icons/hicolor/scalable/apps/wine.svg # The rest come from programs/, and contain larger scalable icons # with a new layout that requires the PROGRAM_ICONFIX sed adjustment @@ -1034,30 +1105,27 @@ fi %doc VERSION # do not include huge changelogs .OLD .ALPHA .BETA (#204302) %doc documentation/README.* -%if 0%{?wine_staging} %{_bindir}/msidb -%{_libdir}/wine/runas.exe.so -%endif %{_bindir}/winedump -%{_libdir}/wine/explorer.exe.so -%{_libdir}/wine/cabarc.exe.so -%{_libdir}/wine/control.exe.so -%{_libdir}/wine/cmd.exe.so -%{_libdir}/wine/dxdiag.exe.so -%{_libdir}/wine/notepad.exe.so -%{_libdir}/wine/plugplay.exe.so -%{_libdir}/wine/progman.exe.so -%{_libdir}/wine/taskmgr.exe.so +%{_libdir}/wine/explorer.%{wineexe} +%{_libdir}/wine/cabarc.%{wineexe} +%{_libdir}/wine/control.%{wineexe} +%{_libdir}/wine/cmd.%{wineexe} +%{_libdir}/wine/dxdiag.%{wineexe} +%{_libdir}/wine/notepad.%{wineexe} +%{_libdir}/wine/plugplay.%{wineexe} +%{_libdir}/wine/progman.%{wineexe} +%{_libdir}/wine/taskmgr.%{wineexe} %{_libdir}/wine/winedbg.exe.so -%{_libdir}/wine/winefile.exe.so -%{_libdir}/wine/winemine.exe.so -%{_libdir}/wine/winemsibuilder.exe.so -%{_libdir}/wine/winepath.exe.so -%{_libdir}/wine/winmgmt.exe.so -%{_libdir}/wine/winver.exe.so -%{_libdir}/wine/wordpad.exe.so -%{_libdir}/wine/write.exe.so -%{_libdir}/wine/wusa.exe.so +%{_libdir}/wine/winefile.%{wineexe} +%{_libdir}/wine/winemine.%{wineexe} +%{_libdir}/wine/winemsibuilder.%{wineexe} +%{_libdir}/wine/winepath.%{wineexe} +%{_libdir}/wine/winmgmt.%{wineexe} +%{_libdir}/wine/winver.%{wineexe} +%{_libdir}/wine/wordpad.%{wineexe} +%{_libdir}/wine/write.%{wineexe} +%{_libdir}/wine/wusa.%{wineexe} %ifarch %{ix86} %{arm} %{_bindir}/wine32 @@ -1087,790 +1155,879 @@ fi %dir %{_libdir}/wine/fakedlls %{_libdir}/wine/fakedlls/* -%{_libdir}/wine/attrib.exe.so -%{_libdir}/wine/arp.exe.so -%{_libdir}/wine/aspnet_regiis.exe.so -%{_libdir}/wine/cacls.exe.so -%{_libdir}/wine/conhost.exe.so -%{_libdir}/wine/cscript.exe.so -%{_libdir}/wine/dism.exe.so -%{_libdir}/wine/dpnsvr.exe.so -%{_libdir}/wine/eject.exe.so -%{_libdir}/wine/expand.exe.so -%{_libdir}/wine/extrac32.exe.so -%{_libdir}/wine/fc.exe.so -%{_libdir}/wine/find.exe.so -%{_libdir}/wine/findstr.exe.so -%{_libdir}/wine/fsutil.exe.so -%{_libdir}/wine/hostname.exe.so -%{_libdir}/wine/ipconfig.exe.so -%{_libdir}/wine/winhlp32.exe.so -%{_libdir}/wine/mshta.exe.so -%if 0%{?wine_staging} -%{_libdir}/wine/msidb.exe.so -%endif -%{_libdir}/wine/msiexec.exe.so -%{_libdir}/wine/net.exe.so -%{_libdir}/wine/netstat.exe.so -%{_libdir}/wine/ngen.exe.so -%{_libdir}/wine/ntoskrnl.exe.so -%{_libdir}/wine/oleview.exe.so -%{_libdir}/wine/ping.exe.so -%{_libdir}/wine/powershell.exe.so -%{_libdir}/wine/reg.exe.so -%{_libdir}/wine/regasm.exe.so -%{_libdir}/wine/regedit.exe.so -%{_libdir}/wine/regsvcs.exe.so -%{_libdir}/wine/regsvr32.exe.so -%{_libdir}/wine/rpcss.exe.so -%{_libdir}/wine/rundll32.exe.so -%{_libdir}/wine/schtasks.exe.so -%{_libdir}/wine/sdbinst.exe.so -%{_libdir}/wine/secedit.exe.so -%{_libdir}/wine/servicemodelreg.exe.so -%{_libdir}/wine/services.exe.so -%{_libdir}/wine/start.exe.so -%{_libdir}/wine/tasklist.exe.so -%{_libdir}/wine/termsv.exe.so -%{_libdir}/wine/view.exe.so -%{_libdir}/wine/wevtutil.exe.so -%{_libdir}/wine/wineboot.exe.so +%{_libdir}/wine/attrib.%{wineexe} +%{_libdir}/wine/arp.%{wineexe} +%{_libdir}/wine/aspnet_regiis.%{wineexe} +%{_libdir}/wine/cacls.%{wineexe} +%{_libdir}/wine/conhost.%{wineexe} +%{_libdir}/wine/cscript.%{wineexe} +%{_libdir}/wine/dism.%{wineexe} +%{_libdir}/wine/dplaysvr.%{wineexe} +%{_libdir}/wine/dpnsvr.%{wineexe} +%{_libdir}/wine/dpvsetup.%{wineexe} +%{_libdir}/wine/eject.%{wineexe} +%{_libdir}/wine/expand.%{wineexe} +%{_libdir}/wine/extrac32.%{wineexe} +%{_libdir}/wine/fc.%{wineexe} +%{_libdir}/wine/find.%{wineexe} +%{_libdir}/wine/findstr.%{wineexe} +%{_libdir}/wine/fsutil.%{wineexe} +%{_libdir}/wine/hostname.%{wineexe} +%{_libdir}/wine/ipconfig.%{wineexe} +%{_libdir}/wine/winhlp32.%{wineexe} +%{_libdir}/wine/mshta.%{wineexe} +%{_libdir}/wine/msidb.%{wineexe} +%{_libdir}/wine/msiexec.%{wineexe} +%{_libdir}/wine/net.%{wineexe} +%{_libdir}/wine/netstat.%{wineexe} +%{_libdir}/wine/ngen.%{wineexe} +%{_libdir}/wine/ntoskrnl.%{wineexe} +%{_libdir}/wine/oleview.%{wineexe} +%{_libdir}/wine/ping.%{wineexe} +%{_libdir}/wine/powershell.%{wineexe} +%{_libdir}/wine/reg.%{wineexe} +%{_libdir}/wine/regasm.%{wineexe} +%{_libdir}/wine/regedit.%{wineexe} +%{_libdir}/wine/regsvcs.%{wineexe} +%{_libdir}/wine/regsvr32.%{wineexe} +%{_libdir}/wine/rpcss.%{wineexe} +%{_libdir}/wine/rundll32.%{wineexe} +%{_libdir}/wine/schtasks.%{wineexe} +%{_libdir}/wine/sdbinst.%{wineexe} +%{_libdir}/wine/secedit.%{wineexe} +%{_libdir}/wine/servicemodelreg.%{wineexe} +%{_libdir}/wine/services.%{wineexe} +%{_libdir}/wine/start.%{wineexe} +%{_libdir}/wine/tasklist.%{wineexe} +%{_libdir}/wine/termsv.%{wineexe} +%{_libdir}/wine/view.%{wineexe} +%{_libdir}/wine/wevtutil.%{wineexe} +%{_libdir}/wine/where.%{wineexe} +%{_libdir}/wine/whoami.%{wineexe} +%{_libdir}/wine/wineboot.%{wineexe} %{_libdir}/wine/winebrowser.exe.so -%{_libdir}/wine/wineconsole.exe.so +%{_libdir}/wine/wineconsole.%{wineexe} %{_libdir}/wine/winemenubuilder.exe.so %{_libdir}/wine/winecfg.exe.so -%{_libdir}/wine/winedevice.exe.so -%{_libdir}/wine/wmplayer.exe.so -%{_libdir}/wine/wscript.exe.so -%{_libdir}/wine/uninstaller.exe.so +%{_libdir}/wine/winedevice.%{wineexe} +%{_libdir}/wine/wmplayer.%{wineexe} +%{_libdir}/wine/wscript.%{wineexe} +%{_libdir}/wine/uninstaller.%{wineexe} %{_libdir}/libwine.so.1* -%{_libdir}/wine/acledit.dll.so -%{_libdir}/wine/aclui.dll.so -%{_libdir}/wine/activeds.dll.so -%{_libdir}/wine/actxprxy.dll.so -%{_libdir}/wine/adsldp.dll.so -%{_libdir}/wine/adsldpc.dll.so -%{_libdir}/wine/advapi32.dll.so -%{_libdir}/wine/advpack.dll.so -%{_libdir}/wine/amstream.dll.so -%{_libdir}/wine/api-ms-win-appmodel-identity-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-2.dll.so -%{_libdir}/wine/api-ms-win-core-apiquery-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-appcompat-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-appinit-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-atoms-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-bem-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-com-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-com-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-com-private-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-comm-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-console-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-console-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-crt-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-crt-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-datetime-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-datetime-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-debug-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-debug-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-delayload-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-delayload-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-2.dll.so -%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-3.dll.so -%{_libdir}/wine/api-ms-win-core-fibers-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-fibers-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-file-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-file-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-file-l1-2-1.dll.so -%{_libdir}/wine/api-ms-win-core-file-l1-2-2.dll.so -%{_libdir}/wine/api-ms-win-core-file-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-file-l2-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-file-l2-1-2.dll.so -%{_libdir}/wine/api-ms-win-core-handle-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-heap-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-heap-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-heap-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-heap-obsolete-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-interlocked-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-interlocked-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-io-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-io-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-job-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-job-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-largeinteger-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-kernel32-private-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-1.dll.so -%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-2.dll.so -%{_libdir}/wine/api-ms-win-core-localization-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-localization-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-localization-l1-2-1.dll.so -%{_libdir}/wine/api-ms-win-core-localization-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-localization-obsolete-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-localization-obsolete-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-localization-obsolete-l1-3-0.dll.so -%{_libdir}/wine/api-ms-win-core-localization-private-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-localregistry-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-memory-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-memory-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-memory-l1-1-2.dll.so -%{_libdir}/wine/api-ms-win-core-misc-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-namedpipe-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-namedpipe-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-namespace-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-normalization-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-path-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-privateprofile-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-processenvironment-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-processenvironment-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-2.dll.so -%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-3.dll.so -%{_libdir}/wine/api-ms-win-core-processtopology-obsolete-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-profile-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-psapi-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-psapi-ansi-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-psapi-obsolete-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-quirks-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-realtime-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-registry-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-registry-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-registryuserspecific-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-rtlsupport-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-rtlsupport-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-shlwapi-legacy-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-shutdown-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-sidebyside-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-string-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-string-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-string-obsolete-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-stringansi-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-stringloader-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-synch-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-synch-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-synch-l1-2-1.dll.so -%{_libdir}/wine/api-ms-win-core-synch-ansi-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-sysinfo-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-1.dll.so -%{_libdir}/wine/api-ms-win-core-threadpool-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-threadpool-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-core-threadpool-legacy-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-threadpool-private-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-timezone-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-toolhelp-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-url-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-util-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-version-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-version-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-version-private-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-versionansi-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-windowserrorreporting-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-winrt-error-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-winrt-error-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-winrt-errorprivate-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-winrt-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-winrt-registration-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-winrt-string-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-winrt-string-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-wow64-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-wow64-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-core-xstate-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-core-xstate-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-conio-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-convert-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-environment-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-filesystem-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-heap-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-locale-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-math-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-multibyte-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-private-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-process-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-runtime-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-stdio-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-string-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-time-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-crt-utility-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-devices-config-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-devices-config-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-devices-query-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-downlevel-advapi32-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-downlevel-advapi32-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-downlevel-normaliz-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-downlevel-ole32-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-downlevel-shell32-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-downlevel-shlwapi-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-downlevel-shlwapi-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-downlevel-user32-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-downlevel-version-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-dx-d3dkmt-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-eventing-classicprovider-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-eventing-consumer-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-eventing-controller-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-eventing-legacy-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-eventing-provider-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-eventlog-legacy-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-gdi-dpiinfo-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-mm-joystick-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-mm-misc-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-mm-mme-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-mm-time-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-ntuser-dc-access-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-ntuser-rectangle-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-ntuser-sysparams-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-perf-legacy-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-power-base-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-power-setting-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-rtcore-ntuser-draw-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-rtcore-ntuser-private-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-rtcore-ntuser-private-l1-1-4.dll.so -%{_libdir}/wine/api-ms-win-rtcore-ntuser-window-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-rtcore-ntuser-winevent-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-rtcore-ntuser-wmpointer-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-rtcore-ntuser-wmpointer-l1-1-3.dll.so -%{_libdir}/wine/api-ms-win-security-activedirectoryclient-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-audit-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-security-base-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-base-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-security-base-private-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-security-credentials-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-cryptoapi-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-grouppolicy-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-1.dll.so -%{_libdir}/wine/api-ms-win-security-lsapolicy-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-provider-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-sddl-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-security-systemfunctions-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-service-core-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-service-core-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-service-management-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-service-management-l2-1-0.dll.so -%{_libdir}/wine/api-ms-win-service-private-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-service-winsvc-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-service-winsvc-l1-2-0.dll.so -%{_libdir}/wine/api-ms-win-shcore-obsolete-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-shcore-scaling-l1-1-1.dll.so -%{_libdir}/wine/api-ms-win-shcore-stream-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-shcore-thread-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-shell-shellcom-l1-1-0.dll.so -%{_libdir}/wine/api-ms-win-shell-shellfolders-l1-1-0.dll.so -%{_libdir}/wine/apphelp.dll.so -%{_libdir}/wine/appwiz.cpl.so -%{_libdir}/wine/atl.dll.so -%{_libdir}/wine/atl80.dll.so -%{_libdir}/wine/atl90.dll.so -%{_libdir}/wine/atl100.dll.so -%{_libdir}/wine/atl110.dll.so -%{_libdir}/wine/atmlib.dll.so -%{_libdir}/wine/authz.dll.so +%{_libdir}/wine/acledit.%{winedll} +%{_libdir}/wine/aclui.%{winedll} +%{_libdir}/wine/activeds.%{winedll} +%{_libdir}/wine/activeds.%{winetlb} +%{_libdir}/wine/actxprxy.%{winedll} +%{_libdir}/wine/adsldp.%{winedll} +%{_libdir}/wine/adsldpc.%{winedll} +%{_libdir}/wine/advapi32.%{winedll} +%{_libdir}/wine/advpack.%{winedll} +%{_libdir}/wine/amsi.%{winedll} +%{_libdir}/wine/amstream.%{winedll} +%{_libdir}/wine/api-ms-win-appmodel-identity-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-2.%{winedll} +%{_libdir}/wine/api-ms-win-core-apiquery-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-appcompat-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-appinit-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-atoms-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-bem-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-com-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-com-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-com-private-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-comm-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-console-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-console-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-crt-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-crt-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-datetime-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-datetime-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-debug-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-debug-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-delayload-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-delayload-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-2.%{winedll} +%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-3.%{winedll} +%{_libdir}/wine/api-ms-win-core-fibers-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-fibers-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-file-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-file-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-file-l1-2-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-file-l1-2-2.%{winedll} +%{_libdir}/wine/api-ms-win-core-file-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-file-l2-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-file-l2-1-2.%{winedll} +%{_libdir}/wine/api-ms-win-core-file-ansi-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-file-fromapp-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-handle-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-heap-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-heap-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-heap-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-heap-obsolete-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-interlocked-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-interlocked-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-io-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-io-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-job-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-job-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-largeinteger-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-kernel32-private-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-2.%{winedll} +%{_libdir}/wine/api-ms-win-core-libraryloader-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-localization-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-localization-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-localization-l1-2-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-localization-l1-2-2.%{winedll} +%{_libdir}/wine/api-ms-win-core-localization-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-localization-obsolete-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-localization-obsolete-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-localization-obsolete-l1-3-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-localization-private-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-localregistry-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-memory-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-memory-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-memory-l1-1-2.%{winedll} +%{_libdir}/wine/api-ms-win-core-memory-l1-1-3.%{winedll} +%{_libdir}/wine/api-ms-win-core-memory-l1-1-4.%{winedll} +%{_libdir}/wine/api-ms-win-core-misc-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-namedpipe-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-namedpipe-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-namedpipe-ansi-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-namespace-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-normalization-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-path-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-privateprofile-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-processenvironment-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-processenvironment-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-2.%{winedll} +%{_libdir}/wine/api-ms-win-core-processthreads-l1-1-3.%{winedll} +%{_libdir}/wine/api-ms-win-core-processtopology-obsolete-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-profile-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-psapi-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-psapi-ansi-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-psapi-obsolete-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-quirks-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-realtime-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-registry-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-registry-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-registry-l2-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-registryuserspecific-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-rtlsupport-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-rtlsupport-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-shlwapi-legacy-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-shutdown-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-sidebyside-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-string-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-string-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-string-obsolete-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-stringansi-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-stringloader-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-synch-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-synch-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-synch-l1-2-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-synch-ansi-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-sysinfo-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-systemtopology-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-threadpool-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-threadpool-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-threadpool-legacy-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-threadpool-private-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-timezone-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-toolhelp-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-url-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-util-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-version-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-version-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-version-private-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-versionansi-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-windowserrorreporting-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-winrt-error-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-winrt-error-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-winrt-errorprivate-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-winrt-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-winrt-registration-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-winrt-roparameterizediid-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-winrt-string-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-winrt-string-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-wow64-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-wow64-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-core-xstate-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-core-xstate-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-conio-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-convert-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-environment-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-filesystem-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-heap-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-locale-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-math-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-multibyte-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-private-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-process-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-runtime-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-stdio-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-string-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-time-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-crt-utility-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-devices-config-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-devices-config-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-devices-query-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-advapi32-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-advapi32-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-kernel32-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-normaliz-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-ole32-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-shell32-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-shlwapi-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-shlwapi-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-user32-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-downlevel-version-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-dx-d3dkmt-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-eventing-classicprovider-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-eventing-consumer-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-eventing-controller-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-eventing-legacy-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-eventing-provider-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-eventlog-legacy-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-gdi-dpiinfo-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-mm-joystick-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-mm-misc-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-mm-mme-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-mm-time-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-ntuser-dc-access-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-ntuser-rectangle-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-ntuser-sysparams-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-perf-legacy-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-power-base-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-power-setting-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-rtcore-ntuser-draw-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-rtcore-ntuser-private-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-rtcore-ntuser-private-l1-1-4.%{winedll} +%{_libdir}/wine/api-ms-win-rtcore-ntuser-window-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-rtcore-ntuser-winevent-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-rtcore-ntuser-wmpointer-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-rtcore-ntuser-wmpointer-l1-1-3.%{winedll} +%{_libdir}/wine/api-ms-win-security-activedirectoryclient-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-audit-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-security-base-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-base-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-base-private-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-security-credentials-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-cryptoapi-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-grouppolicy-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-security-lsapolicy-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-provider-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-sddl-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-security-systemfunctions-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-service-core-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-service-core-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-service-management-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-service-management-l2-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-service-private-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-service-winsvc-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-service-winsvc-l1-2-0.%{winedll} +%{_libdir}/wine/api-ms-win-shcore-obsolete-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-shcore-scaling-l1-1-1.%{winedll} +%{_libdir}/wine/api-ms-win-shcore-stream-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-shcore-thread-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-shell-shellcom-l1-1-0.%{winedll} +%{_libdir}/wine/api-ms-win-shell-shellfolders-l1-1-0.%{winedll} +%{_libdir}/wine/apphelp.%{winedll} +%{_libdir}/wine/appwiz.%{winecpl} +%{_libdir}/wine/atl.%{winedll} +%{_libdir}/wine/atl80.%{winedll} +%{_libdir}/wine/atl90.%{winedll} +%{_libdir}/wine/atl100.%{winedll} +%{_libdir}/wine/atl110.%{winedll} +%{_libdir}/wine/atlthunk.%{winedll} +%{_libdir}/wine/atmlib.%{winedll} +%{_libdir}/wine/authz.%{winedll} %{_libdir}/wine/avicap32.dll.so -%{_libdir}/wine/avifil32.dll.so -%{_libdir}/wine/avrt.dll.so -%{_libdir}/wine/bcrypt.dll.so -%{_libdir}/wine/bluetoothapis.dll.so -%{_libdir}/wine/browseui.dll.so -%{_libdir}/wine/bthprops.cpl.so -%{_libdir}/wine/cabinet.dll.so -%{_libdir}/wine/cards.dll.so -%{_libdir}/wine/cdosys.dll.so -%{_libdir}/wine/cfgmgr32.dll.so -%{_libdir}/wine/clock.exe.so -%{_libdir}/wine/clusapi.dll.so -%{_libdir}/wine/combase.dll.so -%{_libdir}/wine/comcat.dll.so -%{_libdir}/wine/comctl32.dll.so -%{_libdir}/wine/comdlg32.dll.so -%{_libdir}/wine/compstui.dll.so -%{_libdir}/wine/comsvcs.dll.so -%{_libdir}/wine/concrt140.dll.so -%{_libdir}/wine/connect.dll.so -%{_libdir}/wine/credui.dll.so -%{_libdir}/wine/crtdll.dll.so -%{_libdir}/wine/crypt32.dll.so -%{_libdir}/wine/cryptdlg.dll.so -%{_libdir}/wine/cryptdll.dll.so -%{_libdir}/wine/cryptext.dll.so -%{_libdir}/wine/cryptnet.dll.so -%{_libdir}/wine/cryptui.dll.so +%{_libdir}/wine/avifil32.%{winedll} +%{_libdir}/wine/avrt.%{winedll} +%{_libdir}/wine/bcrypt.so +%{_libdir}/wine/bcrypt.%{winedll} +%{_libdir}/wine/bluetoothapis.%{winedll} +%{_libdir}/wine/browseui.%{winedll} +%{_libdir}/wine/bthprops.%{winecpl} +%{_libdir}/wine/cabinet.%{winedll} +%{_libdir}/wine/cards.%{winedll} +%{_libdir}/wine/cdosys.%{winedll} +%{_libdir}/wine/cfgmgr32.%{winedll} +%{_libdir}/wine/chcp.%{winecom} +%{_libdir}/wine/clock.%{wineexe} +%{_libdir}/wine/clusapi.%{winedll} +%{_libdir}/wine/combase.%{winedll} +%{_libdir}/wine/comcat.%{winedll} +%{_libdir}/wine/comctl32.%{winedll} +%{_libdir}/wine/comdlg32.%{winedll} +%{_libdir}/wine/compstui.%{winedll} +%{_libdir}/wine/comsvcs.%{winedll} +%{_libdir}/wine/concrt140.%{winedll} +%{_libdir}/wine/connect.%{winedll} +%{_libdir}/wine/credui.%{winedll} +%{_libdir}/wine/crtdll.so +%{_libdir}/wine/crtdll.%{winedll} +%{_libdir}/wine/crypt32.so +%{_libdir}/wine/crypt32.%{winedll} +%{_libdir}/wine/cryptdlg.%{winedll} +%{_libdir}/wine/cryptdll.%{winedll} +%{_libdir}/wine/cryptext.%{winedll} +%{_libdir}/wine/cryptnet.%{winedll} +%{_libdir}/wine/cryptui.%{winedll} %{_libdir}/wine/ctapi32.dll.so -%{_libdir}/wine/ctl3d32.dll.so -%{_libdir}/wine/d2d1.dll.so -%{_libdir}/wine/d3d10.dll.so -%{_libdir}/wine/d3d10_1.dll.so -%{_libdir}/wine/d3d10core.dll.so -%{_libdir}/wine/d3d11.dll.so +%{_libdir}/wine/ctl3d32.%{winedll} +%{_libdir}/wine/d2d1.%{winedll} +%{_libdir}/wine/d3d10.%{winedll} +%{_libdir}/wine/d3d10_1.%{winedll} +%{_libdir}/wine/d3d10core.%{winedll} +%{_libdir}/wine/d3d11.%{winedll} %{_libdir}/wine/d3d12.dll.so -%{_libdir}/wine/d3dcompiler_*.dll.so -%{_libdir}/wine/d3dim.dll.so -%{_libdir}/wine/d3drm.dll.so -%{_libdir}/wine/d3dx9_*.dll.so -%{_libdir}/wine/d3dx10_*.dll.so -%{_libdir}/wine/d3dx11_42.dll.so -%{_libdir}/wine/d3dx11_43.dll.so -%{_libdir}/wine/d3dxof.dll.so -%{_libdir}/wine/davclnt.dll.so -%{_libdir}/wine/dbgeng.dll.so -%{_libdir}/wine/dbghelp.dll.so -%{_libdir}/wine/dciman32.dll.so -%{_libdir}/wine/ddraw.dll.so -%{_libdir}/wine/ddrawex.dll.so -%{_libdir}/wine/devenum.dll.so -%{_libdir}/wine/dhcpcsvc.dll.so -%{_libdir}/wine/dhtmled.ocx.so -%{_libdir}/wine/difxapi.dll.so +%{_libdir}/wine/d3dcompiler_*.%{winedll} +%{_libdir}/wine/d3dim.%{winedll} +%{_libdir}/wine/d3dim700.%{winedll} +%{_libdir}/wine/d3drm.%{winedll} +%{_libdir}/wine/d3dx9_*.%{winedll} +%{_libdir}/wine/d3dx10_*.%{winedll} +%{_libdir}/wine/d3dx11_42.%{winedll} +%{_libdir}/wine/d3dx11_43.%{winedll} +%{_libdir}/wine/d3dxof.%{winedll} +%{_libdir}/wine/davclnt.%{winedll} +%{_libdir}/wine/dbgeng.%{winedll} +%{_libdir}/wine/dbghelp.%{winedll} +%{_libdir}/wine/dciman32.%{winedll} +%{_libdir}/wine/dcomp.%{winedll} +%{_libdir}/wine/ddraw.%{winedll} +%{_libdir}/wine/ddrawex.%{winedll} +%{_libdir}/wine/devenum.%{winedll} +%{_libdir}/wine/dhcpcsvc.%{winedll} +%{_libdir}/wine/dhtmled.%{wineocx} +%{_libdir}/wine/difxapi.%{winedll} %{_libdir}/wine/dinput.dll.so %{_libdir}/wine/dinput8.dll.so -%{_libdir}/wine/dispex.dll.so -%{_libdir}/wine/dmband.dll.so -%{_libdir}/wine/dmcompos.dll.so -%{_libdir}/wine/dmime.dll.so -%{_libdir}/wine/dmloader.dll.so -%{_libdir}/wine/dmscript.dll.so -%{_libdir}/wine/dmstyle.dll.so -%{_libdir}/wine/dmsynth.dll.so -%{_libdir}/wine/dmusic.dll.so -%{_libdir}/wine/dmusic32.dll.so -%{_libdir}/wine/dplay.dll.so -%{_libdir}/wine/dplayx.dll.so -%{_libdir}/wine/dpnaddr.dll.so -%{_libdir}/wine/dpnet.dll.so -%{_libdir}/wine/dpnhpast.dll.so -%{_libdir}/wine/dpnlobby.dll.so -%{_libdir}/wine/dpvoice.dll.so -%{_libdir}/wine/dpwsockx.dll.so -%{_libdir}/wine/drmclien.dll.so -%{_libdir}/wine/dsound.dll.so -%{_libdir}/wine/dsquery.dll.so -%{_libdir}/wine/dssenh.dll.so -%{_libdir}/wine/dswave.dll.so -%{_libdir}/wine/dwmapi.dll.so +%{_libdir}/wine/directmanipulation.%{winedll} +%{_libdir}/wine/dispex.%{winedll} +%{_libdir}/wine/dmband.%{winedll} +%{_libdir}/wine/dmcompos.%{winedll} +%{_libdir}/wine/dmime.%{winedll} +%{_libdir}/wine/dmloader.%{winedll} +%{_libdir}/wine/dmscript.%{winedll} +%{_libdir}/wine/dmstyle.%{winedll} +%{_libdir}/wine/dmsynth.%{winedll} +%{_libdir}/wine/dmusic.%{winedll} +%{_libdir}/wine/dmusic32.%{winedll} +%{_libdir}/wine/dplay.%{winedll} +%{_libdir}/wine/dplayx.%{winedll} +%{_libdir}/wine/dpnaddr.%{winedll} +%{_libdir}/wine/dpnet.%{winedll} +%{_libdir}/wine/dpnhpast.%{winedll} +%{_libdir}/wine/dpnlobby.%{winedll} +%{_libdir}/wine/dpvoice.%{winedll} +%{_libdir}/wine/dpwsockx.%{winedll} +%{_libdir}/wine/drmclien.%{winedll} +%{_libdir}/wine/dsound.%{winedll} +%{_libdir}/wine/dsdmo.%{winedll} +%{_libdir}/wine/dsquery.%{winedll} +%{_libdir}/wine/dssenh.%{winedll} +%{_libdir}/wine/dsuiext.%{winedll} +%{_libdir}/wine/dswave.%{winedll} +%{_libdir}/wine/dwmapi.%{winedll} %{_libdir}/wine/dwrite.dll.so -%{_libdir}/wine/dx8vb.dll.so -%{_libdir}/wine/dxdiagn.dll.so +%{_libdir}/wine/dx8vb.%{winedll} +%{_libdir}/wine/dxdiagn.%{winedll} %{_libdir}/wine/dxgi.dll.so %if 0%{?wine_staging} -%{_libdir}/wine/dxgkrnl.sys.so -%{_libdir}/wine/dxgmms1.sys.so +%{_libdir}/wine/d3dpmesh.%{winedll} +%{_libdir}/wine/diactfrm.%{winedll} +%{_libdir}/wine/dimap.%{winedll} +%{_libdir}/wine/dpmodemx.%{winedll} +%{_libdir}/wine/dpnhupnp.%{winedll} +%{_libdir}/wine/dpvacm.%{winedll} +%{_libdir}/wine/dpvvox.%{winedll} +%{_libdir}/wine/dsdmoprp.%{winedll} +%{_libdir}/wine/dsound3d.%{winedll} +%{_libdir}/wine/dx7vb.%{winedll} +%{_libdir}/wine/dxapi.%{winesys} +%{_libdir}/wine/dxgkrnl.%{winesys} +%{_libdir}/wine/dxgmms1.%{winesys} +%{_libdir}/wine/encapi.%{winedll} +%{_libdir}/wine/gcdef.%{winedll} +%{_libdir}/wine/qdv.%{winedll} +%{_libdir}/wine/qedwipes.%{winedll} %endif -%{_libdir}/wine/dxva2.dll.so -%{_libdir}/wine/esent.dll.so -%{_libdir}/wine/evr.dll.so -%{_libdir}/wine/explorerframe.dll.so -%{_libdir}/wine/ext-ms-win-authz-context-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-domainjoin-netjoin-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-dwmapi-ext-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-gdi-dc-l1-2-0.dll.so -%{_libdir}/wine/ext-ms-win-gdi-dc-create-l1-1-1.dll.so -%{_libdir}/wine/ext-ms-win-gdi-devcaps-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-gdi-draw-l1-1-1.dll.so -%{_libdir}/wine/ext-ms-win-gdi-render-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-kernel32-package-l1-1-1.dll.so -%{_libdir}/wine/ext-ms-win-kernel32-package-current-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-draw-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-gui-l1-3-0.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-keyboard-l1-3-0.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-misc-l1-2-0.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-misc-l1-5-1.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-message-l1-1-1.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-mouse-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-private-l1-1-1.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-private-l1-3-1.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-rectangle-ext-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-uicontext-ext-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-window-l1-1-1.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-window-l1-1-4.dll.so -%{_libdir}/wine/ext-ms-win-ntuser-windowclass-l1-1-1.dll.so -%{_libdir}/wine/ext-ms-win-oleacc-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-ras-rasapi32-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-gdi-devcaps-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-gdi-object-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-gdi-rgn-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-ntuser-cursor-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dc-access-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dpi-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dpi-l1-2-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-ntuser-rawinput-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-ntuser-syscolors-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-rtcore-ntuser-sysparams-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-security-credui-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-security-cryptui-l1-1-0.dll.so -%{_libdir}/wine/ext-ms-win-uxtheme-themes-l1-1-0.dll.so +%{_libdir}/wine/dxva2.%{winedll} +%{_libdir}/wine/esent.%{winedll} +%{_libdir}/wine/evr.%{winedll} +%{_libdir}/wine/explorerframe.%{winedll} +%{_libdir}/wine/ext-ms-win-authz-context-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-domainjoin-netjoin-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-dwmapi-ext-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-gdi-dc-l1-2-0.%{winedll} +%{_libdir}/wine/ext-ms-win-gdi-dc-create-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-gdi-dc-create-l1-1-1.%{winedll} +%{_libdir}/wine/ext-ms-win-gdi-devcaps-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-gdi-draw-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-gdi-draw-l1-1-1.%{winedll} +%{_libdir}/wine/ext-ms-win-gdi-font-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-gdi-font-l1-1-1.%{winedll} +%{_libdir}/wine/ext-ms-win-gdi-render-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-kernel32-package-l1-1-1.%{winedll} +%{_libdir}/wine/ext-ms-win-kernel32-package-current-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-dialogbox-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-draw-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-gui-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-gui-l1-3-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-keyboard-l1-3-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-misc-l1-2-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-misc-l1-5-1.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-message-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-message-l1-1-1.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-misc-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-mouse-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-private-l1-1-1.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-private-l1-3-1.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-rectangle-ext-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-uicontext-ext-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-window-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-window-l1-1-1.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-window-l1-1-4.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-windowclass-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ntuser-windowclass-l1-1-1.%{winedll} +%{_libdir}/wine/ext-ms-win-oleacc-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-ras-rasapi32-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-gdi-devcaps-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-gdi-object-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-gdi-rgn-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-cursor-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dc-access-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dpi-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dpi-l1-2-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-rawinput-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-syscolors-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-rtcore-ntuser-sysparams-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-security-credui-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-security-cryptui-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-shell-comctl32-init-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-shell-comdlg32-l1-1-0.%{winedll} +%{_libdir}/wine/ext-ms-win-shell-shell32-l1-2-0.%{winedll} +%{_libdir}/wine/ext-ms-win-uxtheme-themes-l1-1-0.%{winedll} %if 0%{?wine_staging} %{_libdir}/wine/ext-ms-win-appmodel-usercontext-l1-1-0.dll.so %{_libdir}/wine/ext-ms-win-xaml-pal-l1-1-0.dll.so %endif -%{_libdir}/wine/faultrep.dll.so -%{_libdir}/wine/feclient.dll.so -%{_libdir}/wine/fltlib.dll.so -%{_libdir}/wine/fltmgr.sys.so -%{_libdir}/wine/fntcache.dll.so -%{_libdir}/wine/fontsub.dll.so -%{_libdir}/wine/fusion.dll.so -%{_libdir}/wine/fwpuclnt.dll.so -%{_libdir}/wine/gameux.dll.so -%{_libdir}/wine/gdi32.dll.so -%{_libdir}/wine/gdiplus.dll.so -%{_libdir}/wine/glu32.dll.so +%{_libdir}/wine/faultrep.%{winedll} +%{_libdir}/wine/feclient.%{winedll} +%{_libdir}/wine/fltlib.%{winedll} +%{_libdir}/wine/fltmgr.%{winesys} +%{_libdir}/wine/fntcache.%{winedll} +%{_libdir}/wine/fontsub.%{winedll} +%{_libdir}/wine/fusion.%{winedll} +%{_libdir}/wine/fwpuclnt.%{winedll} +%{_libdir}/wine/gameux.%{winedll} +%{_libdir}/wine/gdi32.so +%{_libdir}/wine/gdi32.%{winedll} +%{_libdir}/wine/gdiplus.%{winedll} +%{_libdir}/wine/glu32.%{winedll} %{_libdir}/wine/gphoto2.ds.so -%{_libdir}/wine/gpkcsp.dll.so -%{_libdir}/wine/hal.dll.so -%{_libdir}/wine/hh.exe.so -%{_libdir}/wine/hhctrl.ocx.so -%{_libdir}/wine/hid.dll.so -%{_libdir}/wine/hidclass.sys.so -%{_libdir}/wine/hlink.dll.so -%{_libdir}/wine/hnetcfg.dll.so -%{_libdir}/wine/httpapi.dll.so -%{_libdir}/wine/icacls.exe.so -%{_libdir}/wine/iccvid.dll.so -%{_libdir}/wine/icinfo.exe.so -%{_libdir}/wine/icmp.dll.so -%{_libdir}/wine/ieframe.dll.so +%{_libdir}/wine/gpkcsp.%{winedll} +%{_libdir}/wine/hal.%{winedll} +%{_libdir}/wine/hh.%{wineexe} +%{_libdir}/wine/hhctrl.%{wineocx} +%{_libdir}/wine/hid.%{winedll} +%{_libdir}/wine/hidclass.%{winesys} +%{_libdir}/wine/hlink.%{winedll} +%{_libdir}/wine/hnetcfg.%{winedll} +%{_libdir}/wine/http.%{winesys} +%{_libdir}/wine/httpapi.%{winedll} +%{_libdir}/wine/icacls.%{wineexe} +%{_libdir}/wine/iccvid.%{winedll} +%{_libdir}/wine/icinfo.%{wineexe} +%{_libdir}/wine/icmp.%{winedll} +%{_libdir}/wine/ieframe.%{winedll} %if 0%{?wine_staging} %{_libdir}/wine/iertutil.dll.so %endif -%{_libdir}/wine/ieproxy.dll.so -%{_libdir}/wine/imaadp32.acm.so -%{_libdir}/wine/imagehlp.dll.so -%{_libdir}/wine/imm32.dll.so -%{_libdir}/wine/inetcomm.dll.so -%{_libdir}/wine/inetcpl.cpl.so -%{_libdir}/wine/inetmib1.dll.so -%{_libdir}/wine/infosoft.dll.so -%{_libdir}/wine/initpki.dll.so -%{_libdir}/wine/inkobj.dll.so -%{_libdir}/wine/inseng.dll.so +%{_libdir}/wine/ieproxy.%{winedll} +%{_libdir}/wine/imaadp32.%{wineacm} +%{_libdir}/wine/imagehlp.%{winedll} +%{_libdir}/wine/imm32.%{winedll} +%{_libdir}/wine/inetcomm.%{winedll} +%{_libdir}/wine/inetcpl.%{winecpl} +%{_libdir}/wine/inetmib1.%{winedll} +%{_libdir}/wine/infosoft.%{winedll} +%{_libdir}/wine/initpki.%{winedll} +%{_libdir}/wine/inkobj.%{winedll} +%{_libdir}/wine/inseng.%{winedll} %{_libdir}/wine/iphlpapi.dll.so -%{_libdir}/wine/iprop.dll.so -%{_libdir}/wine/irprops.cpl.so -%{_libdir}/wine/itircl.dll.so -%{_libdir}/wine/itss.dll.so -%{_libdir}/wine/joy.cpl.so -%{_libdir}/wine/jscript.dll.so -%{_libdir}/wine/jsproxy.dll.so +%{_libdir}/wine/iprop.%{winedll} +%{_libdir}/wine/irprops.%{winecpl} +%{_libdir}/wine/itircl.%{winedll} +%{_libdir}/wine/itss.%{winedll} +%{_libdir}/wine/joy.%{winecpl} +%{_libdir}/wine/jscript.%{winedll} +%{_libdir}/wine/jsproxy.%{winedll} %{_libdir}/wine/kerberos.dll.so -%{_libdir}/wine/kernel32.dll.so -%{_libdir}/wine/kernelbase.dll.so -%{_libdir}/wine/ksuser.dll.so -%{_libdir}/wine/ktmw32.dll.so +%{_libdir}/wine/kernel32.%{winedll} +%{_libdir}/wine/kernelbase.%{winedll} +%{_libdir}/wine/ksecdd.%{winesys} +%{_libdir}/wine/ksproxy.%{wineax} +%{_libdir}/wine/ksuser.%{winedll} +%{_libdir}/wine/ktmw32.%{winedll} %{_libdir}/wine/l3codeca.acm.so -%{_libdir}/wine/loadperf.dll.so -%{_libdir}/wine/localspl.dll.so -%{_libdir}/wine/localui.dll.so -%{_libdir}/wine/lodctr.exe.so -%{_libdir}/wine/lz32.dll.so -%{_libdir}/wine/mapi32.dll.so -%{_libdir}/wine/mapistub.dll.so -%{_libdir}/wine/mciavi32.dll.so -%{_libdir}/wine/mcicda.dll.so -%{_libdir}/wine/mciqtz32.dll.so -%{_libdir}/wine/mciseq.dll.so -%{_libdir}/wine/mciwave.dll.so -%{_libdir}/wine/mf.dll.so -%{_libdir}/wine/mf3216.dll.so -%{_libdir}/wine/mfplat.dll.so -%{_libdir}/wine/mfreadwrite.dll.so -%{_libdir}/wine/mgmtapi.dll.so -%{_libdir}/wine/midimap.dll.so -%{_libdir}/wine/mlang.dll.so -%{_libdir}/wine/mmcndmgr.dll.so -%{_libdir}/wine/mmdevapi.dll.so -%{_libdir}/wine/mofcomp.exe.so +%{_libdir}/wine/loadperf.%{winedll} +%{_libdir}/wine/localspl.%{winedll} +%{_libdir}/wine/localui.%{winedll} +%{_libdir}/wine/lodctr.%{wineexe} +%{_libdir}/wine/lz32.%{winedll} +%{_libdir}/wine/mapi32.%{winedll} +%{_libdir}/wine/mapistub.%{winedll} +%{_libdir}/wine/mciavi32.%{winedll} +%{_libdir}/wine/mcicda.%{winedll} +%{_libdir}/wine/mciqtz32.%{winedll} +%{_libdir}/wine/mciseq.%{winedll} +%{_libdir}/wine/mciwave.%{winedll} +%{_libdir}/wine/mf.%{winedll} +%{_libdir}/wine/mf3216.%{winedll} +%{_libdir}/wine/mferror.%{winedll} +%{_libdir}/wine/mfmediaengine.%{winedll} +%{_libdir}/wine/mfplat.%{winedll} +%{_libdir}/wine/mfplay.%{winedll} +%{_libdir}/wine/mfreadwrite.%{winedll} +%{_libdir}/wine/mgmtapi.%{winedll} +%{_libdir}/wine/midimap.%{winedll} +%{_libdir}/wine/mlang.%{winedll} +%{_libdir}/wine/mmcndmgr.%{winedll} +%{_libdir}/wine/mmdevapi.%{winedll} +%{_libdir}/wine/mofcomp.%{wineexe} %{_libdir}/wine/mountmgr.sys.so %{_libdir}/wine/mp3dmod.dll.so -%{_libdir}/wine/mpr.dll.so -%{_libdir}/wine/mprapi.dll.so -%{_libdir}/wine/msacm32.dll.so -%{_libdir}/wine/msacm32.drv.so -%{_libdir}/wine/msadp32.acm.so -%{_libdir}/wine/msasn1.dll.so -%{_libdir}/wine/mscat32.dll.so -%{_libdir}/wine/mscoree.dll.so -%{_libdir}/wine/msctf.dll.so -%{_libdir}/wine/msctfp.dll.so -%{_libdir}/wine/msdaps.dll.so -%{_libdir}/wine/msdelta.dll.so -%{_libdir}/wine/msdmo.dll.so -%{_libdir}/wine/msdrm.dll.so -%{_libdir}/wine/msftedit.dll.so -%{_libdir}/wine/msg711.acm.so +%{_libdir}/wine/mpr.%{winedll} +%{_libdir}/wine/mprapi.%{winedll} +%{_libdir}/wine/msacm32.%{winedll} +%{_libdir}/wine/msacm32.%{winedrv} +%{_libdir}/wine/msado15.%{winedll} +%{_libdir}/wine/msadp32.%{wineacm} +%{_libdir}/wine/msasn1.%{winedll} +%{_libdir}/wine/mscat32.%{winedll} +%{_libdir}/wine/mscoree.%{winedll} +%{_libdir}/wine/mscorwks.%{winedll} +%{_libdir}/wine/msctf.%{winedll} +%{_libdir}/wine/msctfp.%{winedll} +%{_libdir}/wine/msdaps.%{winedll} +%{_libdir}/wine/msdelta.%{winedll} +%{_libdir}/wine/msdmo.%{winedll} +%{_libdir}/wine/msdrm.%{winedll} +%{_libdir}/wine/msftedit.%{winedll} +%{_libdir}/wine/msg711.%{wineacm} %{_libdir}/wine/msgsm32.acm.so -%{_libdir}/wine/mshtml.dll.so -%{_libdir}/wine/mshtml.tlb.so -%{_libdir}/wine/msi.dll.so -%{_libdir}/wine/msident.dll.so -%{_libdir}/wine/msimtf.dll.so -%{_libdir}/wine/msimg32.dll.so -%{_libdir}/wine/msimsg.dll.so -%{_libdir}/wine/msinfo32.exe.so -%{_libdir}/wine/msisip.dll.so -%{_libdir}/wine/msisys.ocx.so -%{_libdir}/wine/msls31.dll.so -%{_libdir}/wine/msnet32.dll.so -%{_libdir}/wine/mspatcha.dll.so -%{_libdir}/wine/msports.dll.so -%{_libdir}/wine/msscript.ocx.so -%{_libdir}/wine/mssign32.dll.so -%{_libdir}/wine/mssip32.dll.so -%{_libdir}/wine/msrle32.dll.so -%{_libdir}/wine/mstask.dll.so -%{_libdir}/wine/msvcirt.dll.so -%{_libdir}/wine/msvcm80.dll.so -%{_libdir}/wine/msvcm90.dll.so -%{_libdir}/wine/msvcp60.dll.so -%{_libdir}/wine/msvcp70.dll.so -%{_libdir}/wine/msvcp71.dll.so -%{_libdir}/wine/msvcp80.dll.so -%{_libdir}/wine/msvcp90.dll.so -%{_libdir}/wine/msvcp100.dll.so -%{_libdir}/wine/msvcp110.dll.so -%{_libdir}/wine/msvcp120.dll.so -%{_libdir}/wine/msvcp120_app.dll.so -%{_libdir}/wine/msvcp140.dll.so -%{_libdir}/wine/msvcr70.dll.so -%{_libdir}/wine/msvcr71.dll.so -%{_libdir}/wine/msvcr80.dll.so -%{_libdir}/wine/msvcr90.dll.so -%{_libdir}/wine/msvcr100.dll.so -%{_libdir}/wine/msvcr110.dll.so -%{_libdir}/wine/msvcr120.dll.so -%{_libdir}/wine/msvcr120_app.dll.so -%{_libdir}/wine/msvcrt.dll.so -%{_libdir}/wine/msvcrt20.dll.so -%{_libdir}/wine/msvcrt40.dll.so -%{_libdir}/wine/msvcrtd.dll.so -%{_libdir}/wine/msvfw32.dll.so -%{_libdir}/wine/msvidc32.dll.so -%{_libdir}/wine/mswsock.dll.so -%{_libdir}/wine/msxml.dll.so -%{_libdir}/wine/msxml2.dll.so +%{_libdir}/wine/mshtml.%{winedll} +%{_libdir}/wine/mshtml.%{winetlb} +%{_libdir}/wine/msi.%{winedll} +%{_libdir}/wine/msident.%{winedll} +%{_libdir}/wine/msimtf.%{winedll} +%{_libdir}/wine/msimg32.%{winedll} +%{_libdir}/wine/msimsg.%{winedll} +%{_libdir}/wine/msinfo32.%{wineexe} +%{_libdir}/wine/msisip.%{winedll} +%{_libdir}/wine/msisys.%{wineocx} +%{_libdir}/wine/msls31.%{winedll} +%{_libdir}/wine/msnet32.%{winedll} +%{_libdir}/wine/mspatcha.%{winedll} +%{_libdir}/wine/msports.%{winedll} +%{_libdir}/wine/msscript.%{wineocx} +%{_libdir}/wine/mssign32.%{winedll} +%{_libdir}/wine/mssip32.%{winedll} +%{_libdir}/wine/msrle32.%{winedll} +%{_libdir}/wine/mstask.%{winedll} +%{_libdir}/wine/msvcirt.%{winedll} +%{_libdir}/wine/msvcm80.%{winedll} +%{_libdir}/wine/msvcm90.%{winedll} +%{_libdir}/wine/msvcp60.%{winedll} +%{_libdir}/wine/msvcp70.%{winedll} +%{_libdir}/wine/msvcp71.%{winedll} +%{_libdir}/wine/msvcp80.%{winedll} +%{_libdir}/wine/msvcp90.%{winedll} +%{_libdir}/wine/msvcp100.%{winedll} +%{_libdir}/wine/msvcp110.%{winedll} +%{_libdir}/wine/msvcp120.%{winedll} +%{_libdir}/wine/msvcp120_app.%{winedll} +%{_libdir}/wine/msvcp140.%{winedll} +%{_libdir}/wine/msvcp140_1.%{winedll} +%{_libdir}/wine/msvcr70.so +%{_libdir}/wine/msvcr70.%{winedll} +%{_libdir}/wine/msvcr71.so +%{_libdir}/wine/msvcr71.%{winedll} +%{_libdir}/wine/msvcr80.so +%{_libdir}/wine/msvcr80.%{winedll} +%{_libdir}/wine/msvcr90.so +%{_libdir}/wine/msvcr90.%{winedll} +%{_libdir}/wine/msvcr100.so +%{_libdir}/wine/msvcr100.%{winedll} +%{_libdir}/wine/msvcr110.so +%{_libdir}/wine/msvcr110.%{winedll} +%{_libdir}/wine/msvcr120.so +%{_libdir}/wine/msvcr120.%{winedll} +%{_libdir}/wine/msvcr120_app.%{winedll} +%{_libdir}/wine/msvcrt.so +%{_libdir}/wine/msvcrt.%{winedll} +%{_libdir}/wine/msvcrt20.%{winedll} +%{_libdir}/wine/msvcrt40.%{winedll} +%{_libdir}/wine/msvcrtd.so +%{_libdir}/wine/msvcrtd.%{winedll} +%{_libdir}/wine/msvfw32.%{winedll} +%{_libdir}/wine/msvidc32.%{winedll} +%{_libdir}/wine/mswsock.%{winedll} +%{_libdir}/wine/msxml.%{winedll} +%{_libdir}/wine/msxml2.%{winedll} %{_libdir}/wine/msxml3.dll.so -%{_libdir}/wine/msxml4.dll.so -%{_libdir}/wine/msxml6.dll.so -%{_libdir}/wine/mtxdm.dll.so -%{_libdir}/wine/nddeapi.dll.so -%{_libdir}/wine/ncrypt.dll.so -%{_libdir}/wine/ndis.sys.so +%{_libdir}/wine/msxml4.%{winedll} +%{_libdir}/wine/msxml6.%{winedll} +%{_libdir}/wine/mtxdm.%{winedll} +%{_libdir}/wine/nddeapi.%{winedll} +%{_libdir}/wine/ncrypt.%{winedll} +%{_libdir}/wine/ndis.%{winesys} %{_libdir}/wine/netapi32.dll.so -%{_libdir}/wine/netcfgx.dll.so -%{_libdir}/wine/netprofm.dll.so -%{_libdir}/wine/netsh.exe.so -%{_libdir}/wine/newdev.dll.so -%{_libdir}/wine/ninput.dll.so -%{_libdir}/wine/normaliz.dll.so -%{_libdir}/wine/npmshtml.dll.so -%{_libdir}/wine/npptools.dll.so -%{_libdir}/wine/ntdll.dll.so -%{_libdir}/wine/ntdsapi.dll.so -%{_libdir}/wine/ntprint.dll.so +%{_libdir}/wine/netcfgx.%{winedll} +%{_libdir}/wine/netio.%{winesys} +%{_libdir}/wine/netprofm.%{winedll} +%{_libdir}/wine/netsh.%{wineexe} +%{_libdir}/wine/netutils.%{winedll} +%{_libdir}/wine/newdev.%{winedll} +%{_libdir}/wine/ninput.%{winedll} +%{_libdir}/wine/normaliz.%{winedll} +%{_libdir}/wine/npmshtml.%{winedll} +%{_libdir}/wine/npptools.%{winedll} +%{_libdir}/wine/ntdll.so +%{_libdir}/wine/ntdll.%{winedll} +%{_libdir}/wine/ntdsapi.%{winedll} +%{_libdir}/wine/ntprint.%{winedll} %if 0%{?wine_staging} %{_libdir}/wine/nvcuda.dll.so %{_libdir}/wine/nvcuvid.dll.so %endif -%{_libdir}/wine/objsel.dll.so -%{_libdir}/wine/odbc32.dll.so -%{_libdir}/wine/odbccp32.dll.so -%{_libdir}/wine/odbccu32.dll.so -%{_libdir}/wine/ole32.dll.so -%{_libdir}/wine/oleacc.dll.so -%{_libdir}/wine/oleaut32.dll.so -%{_libdir}/wine/olecli32.dll.so -%{_libdir}/wine/oledb32.dll.so -%{_libdir}/wine/oledlg.dll.so -%{_libdir}/wine/olepro32.dll.so -%{_libdir}/wine/olesvr32.dll.so -%{_libdir}/wine/olethk32.dll.so -%{_libdir}/wine/opcservices.dll.so -%{_libdir}/wine/packager.dll.so -%{_libdir}/wine/pdh.dll.so -%{_libdir}/wine/photometadatahandler.dll.so -%{_libdir}/wine/pidgen.dll.so -%{_libdir}/wine/powrprof.dll.so -%{_libdir}/wine/presentationfontcache.exe.so -%{_libdir}/wine/printui.dll.so -%{_libdir}/wine/prntvpt.dll.so -%{_libdir}/wine/propsys.dll.so -%{_libdir}/wine/psapi.dll.so -%{_libdir}/wine/pstorec.dll.so -%{_libdir}/wine/qcap.dll.so -%{_libdir}/wine/qedit.dll.so -%{_libdir}/wine/qmgr.dll.so -%{_libdir}/wine/qmgrprxy.dll.so -%{_libdir}/wine/quartz.dll.so -%{_libdir}/wine/query.dll.so -%{_libdir}/wine/qwave.dll.so -%{_libdir}/wine/rasapi32.dll.so -%{_libdir}/wine/rasdlg.dll.so -%{_libdir}/wine/regapi.dll.so -%{_libdir}/wine/resutils.dll.so -%{_libdir}/wine/riched20.dll.so -%{_libdir}/wine/riched32.dll.so -%{_libdir}/wine/rpcrt4.dll.so -%{_libdir}/wine/rsabase.dll.so -%{_libdir}/wine/rsaenh.dll.so -%{_libdir}/wine/rstrtmgr.dll.so -%{_libdir}/wine/rtutils.dll.so -%{_libdir}/wine/samlib.dll.so -%{_libdir}/wine/sapi.dll.so -%{_libdir}/wine/sas.dll.so -%{_libdir}/wine/sc.exe.so -%{_libdir}/wine/scarddlg.dll.so -%{_libdir}/wine/sccbase.dll.so -%{_libdir}/wine/schannel.dll.so -%{_libdir}/wine/scrobj.dll.so -%{_libdir}/wine/scrrun.dll.so -%{_libdir}/wine/scsiport.sys.so +%{_libdir}/wine/objsel.%{winedll} +%{_libdir}/wine/odbc32.so +%{_libdir}/wine/odbc32.%{winedll} +%{_libdir}/wine/odbcbcp.%{winedll} +%{_libdir}/wine/odbccp32.%{winedll} +%{_libdir}/wine/odbccu32.%{winedll} +%{_libdir}/wine/ole32.%{winedll} +%{_libdir}/wine/oleacc.%{winedll} +%{_libdir}/wine/oleaut32.%{winedll} +%{_libdir}/wine/olecli32.%{winedll} +%{_libdir}/wine/oledb32.%{winedll} +%{_libdir}/wine/oledlg.%{winedll} +%{_libdir}/wine/olepro32.%{winedll} +%{_libdir}/wine/olesvr32.%{winedll} +%{_libdir}/wine/olethk32.%{winedll} +%{_libdir}/wine/opcservices.%{winedll} +%{_libdir}/wine/packager.%{winedll} +%{_libdir}/wine/pdh.%{winedll} +%{_libdir}/wine/photometadatahandler.%{winedll} +%{_libdir}/wine/pidgen.%{winedll} +%{_libdir}/wine/powrprof.%{winedll} +%{_libdir}/wine/presentationfontcache.%{wineexe} +%{_libdir}/wine/printui.%{winedll} +%{_libdir}/wine/prntvpt.%{winedll} +%{_libdir}/wine/propsys.%{winedll} +%{_libdir}/wine/psapi.%{winedll} +%{_libdir}/wine/pstorec.%{winedll} +%{_libdir}/wine/pwrshplugin.%{winedll} +%{_libdir}/wine/qasf.%{winedll} +%{_libdir}/wine/qcap.%{winedll} +%{_libdir}/wine/qcap.so +%{_libdir}/wine/qdvd.%{winedll} +%{_libdir}/wine/qedit.%{winedll} +%{_libdir}/wine/qmgr.%{winedll} +%{_libdir}/wine/qmgrprxy.%{winedll} +%{_libdir}/wine/quartz.%{winedll} +%{_libdir}/wine/query.%{winedll} +%{_libdir}/wine/qwave.%{winedll} +%{_libdir}/wine/rasapi32.%{winedll} +%{_libdir}/wine/rasdlg.%{winedll} +%{_libdir}/wine/regapi.%{winedll} +%{_libdir}/wine/regini.%{wineexe} +%{_libdir}/wine/resutils.%{winedll} +%{_libdir}/wine/riched20.%{winedll} +%{_libdir}/wine/riched32.%{winedll} +%{_libdir}/wine/rpcrt4.%{winedll} +%{_libdir}/wine/rsabase.%{winedll} +%{_libdir}/wine/rsaenh.%{winedll} +%{_libdir}/wine/rstrtmgr.%{winedll} +%{_libdir}/wine/rtutils.%{winedll} +%{_libdir}/wine/rtworkq.%{winedll} +%{_libdir}/wine/samlib.%{winedll} +%{_libdir}/wine/sapi.%{winedll} +%{_libdir}/wine/sas.%{winedll} +%{_libdir}/wine/sc.%{wineexe} +%{_libdir}/wine/scarddlg.%{winedll} +%{_libdir}/wine/sccbase.%{winedll} +%{_libdir}/wine/schannel.%{winedll} +%{_libdir}/wine/scrobj.%{winedll} +%{_libdir}/wine/scrrun.%{winedll} +%{_libdir}/wine/scsiport.%{winesys} +%{_libdir}/wine/sechost.%{winedll} %{_libdir}/wine/secur32.dll.so -%{_libdir}/wine/sensapi.dll.so -%{_libdir}/wine/serialui.dll.so -%{_libdir}/wine/setupapi.dll.so -%{_libdir}/wine/sfc_os.dll.so -%{_libdir}/wine/shcore.dll.so -%{_libdir}/wine/shdoclc.dll.so -%{_libdir}/wine/shdocvw.dll.so -%{_libdir}/wine/schedsvc.dll.so +%{_libdir}/wine/sensapi.%{winedll} +%{_libdir}/wine/serialui.%{winedll} +%{_libdir}/wine/setupapi.%{winedll} +%{_libdir}/wine/sfc_os.%{winedll} +%{_libdir}/wine/shcore.%{winedll} +%{_libdir}/wine/shdoclc.%{winedll} +%{_libdir}/wine/shdocvw.%{winedll} +%{_libdir}/wine/schedsvc.%{winedll} %{_libdir}/wine/shell32.dll.so -%{_libdir}/wine/shfolder.dll.so -%{_libdir}/wine/shlwapi.dll.so -%{_libdir}/wine/shutdown.exe.so -%{_libdir}/wine/slbcsp.dll.so -%{_libdir}/wine/slc.dll.so -%{_libdir}/wine/snmpapi.dll.so -%{_libdir}/wine/softpub.dll.so -%{_libdir}/wine/spoolsv.exe.so -%{_libdir}/wine/srclient.dll.so -%{_libdir}/wine/sspicli.dll.so -%{_libdir}/wine/stdole2.tlb.so -%{_libdir}/wine/stdole32.tlb.so -%{_libdir}/wine/sti.dll.so -%{_libdir}/wine/strmdll.dll.so -%{_libdir}/wine/subst.exe.so -%{_libdir}/wine/svchost.exe.so -%{_libdir}/wine/svrapi.dll.so -%{_libdir}/wine/sxs.dll.so -%{_libdir}/wine/systeminfo.exe.so -%{_libdir}/wine/t2embed.dll.so -%{_libdir}/wine/tapi32.dll.so -%{_libdir}/wine/taskkill.exe.so -%{_libdir}/wine/taskschd.dll.so -%{_libdir}/wine/tdh.dll.so -%{_libdir}/wine/tdi.sys.so -%{_libdir}/wine/traffic.dll.so -%{_libdir}/wine/tzres.dll.so -%{_libdir}/wine/ucrtbase.dll.so -%if 0%{?wine_staging} -%{_libdir}/wine/uianimation.dll.so -%endif -%{_libdir}/wine/uiautomationcore.dll.so -%{_libdir}/wine/uiribbon.dll.so -%{_libdir}/wine/unicows.dll.so -%{_libdir}/wine/unlodctr.exe.so -%{_libdir}/wine/updspapi.dll.so -%{_libdir}/wine/url.dll.so -%{_libdir}/wine/urlmon.dll.so -%{_libdir}/wine/usbd.sys.so -%{_libdir}/wine/user32.dll.so -%{_libdir}/wine/usp10.dll.so -%{_libdir}/wine/uxtheme.dll.so -%if 0%{?wine_staging} -%{_libdir}/wine/uxtheme-gtk.dll.so -%endif -%{_libdir}/wine/userenv.dll.so -%{_libdir}/wine/vbscript.dll.so -%{_libdir}/wine/vcomp.dll.so -%{_libdir}/wine/vcomp90.dll.so -%{_libdir}/wine/vcomp100.dll.so -%{_libdir}/wine/vcomp110.dll.so -%{_libdir}/wine/vcomp120.dll.so -%{_libdir}/wine/vcomp140.dll.so -%{_libdir}/wine/vcruntime140.dll.so -%{_libdir}/wine/vdmdbg.dll.so -%{_libdir}/wine/version.dll.so -%{_libdir}/wine/virtdisk.dll.so -%{_libdir}/wine/vssapi.dll.so -%{_libdir}/wine/vulkan-1.dll.so -%{_libdir}/wine/wbemdisp.dll.so -%{_libdir}/wine/wbemprox.dll.so -%{_libdir}/wine/wdscore.dll.so -%{_libdir}/wine/webservices.dll.so -%{_libdir}/wine/wer.dll.so -%{_libdir}/wine/wevtapi.dll.so -%{_libdir}/wine/wiaservc.dll.so -%{_libdir}/wine/wimgapi.dll.so -%if 0%{?wine_staging} -%{_libdir}/wine/win32k.sys.so -%endif -%{_libdir}/wine/windowscodecs.dll.so -%{_libdir}/wine/windowscodecsext.dll.so +%{_libdir}/wine/shfolder.%{winedll} +%{_libdir}/wine/shlwapi.%{winedll} +%{_libdir}/wine/shutdown.%{wineexe} +%{_libdir}/wine/slbcsp.%{winedll} +%{_libdir}/wine/slc.%{winedll} +%{_libdir}/wine/snmpapi.%{winedll} +%{_libdir}/wine/softpub.%{winedll} +%{_libdir}/wine/spoolsv.%{wineexe} +%{_libdir}/wine/srclient.%{winedll} +%{_libdir}/wine/srvcli.%{winedll} +%{_libdir}/wine/sspicli.%{winedll} +%{_libdir}/wine/stdole2.%{winetlb} +%{_libdir}/wine/stdole32.%{winetlb} +%{_libdir}/wine/sti.%{winedll} +%{_libdir}/wine/strmdll.%{winedll} +%{_libdir}/wine/subst.%{wineexe} +%{_libdir}/wine/svchost.%{wineexe} +%{_libdir}/wine/svrapi.%{winedll} +%{_libdir}/wine/sxs.%{winedll} +%{_libdir}/wine/systeminfo.%{wineexe} +%{_libdir}/wine/t2embed.%{winedll} +%{_libdir}/wine/tapi32.%{winedll} +%{_libdir}/wine/taskkill.%{wineexe} +%{_libdir}/wine/taskschd.%{winedll} +%{_libdir}/wine/tdh.%{winedll} +%{_libdir}/wine/tdi.%{winesys} +%{_libdir}/wine/traffic.%{winedll} +%{_libdir}/wine/tzres.%{winedll} +%{_libdir}/wine/ucrtbase.so +%{_libdir}/wine/ucrtbase.%{winedll} +%{_libdir}/wine/uianimation.%{winedll} +%{_libdir}/wine/uiautomationcore.%{winedll} +%{_libdir}/wine/uiribbon.%{winedll} +%{_libdir}/wine/unicows.%{winedll} +%{_libdir}/wine/unlodctr.%{wineexe} +%{_libdir}/wine/updspapi.%{winedll} +%{_libdir}/wine/url.%{winedll} +%{_libdir}/wine/urlmon.%{winedll} +%{_libdir}/wine/usbd.%{winesys} +%{_libdir}/wine/user32.so +%{_libdir}/wine/user32.%{winedll} +%{_libdir}/wine/usp10.%{winedll} +%{_libdir}/wine/utildll.%{winedll} +%{_libdir}/wine/uxtheme.%{winedll} +%{_libdir}/wine/userenv.%{winedll} +%{_libdir}/wine/vbscript.%{winedll} +%{_libdir}/wine/vcomp.%{winedll} +%{_libdir}/wine/vcomp90.%{winedll} +%{_libdir}/wine/vcomp100.%{winedll} +%{_libdir}/wine/vcomp110.%{winedll} +%{_libdir}/wine/vcomp120.%{winedll} +%{_libdir}/wine/vcomp140.%{winedll} +%{_libdir}/wine/vcruntime140.%{winedll} +%{_libdir}/wine/vcruntime140_1.%{winedll} +%{_libdir}/wine/vdmdbg.%{winedll} +%{_libdir}/wine/version.%{winedll} +%{_libdir}/wine/vga.%{winedll} +%{_libdir}/wine/virtdisk.%{winedll} +%{_libdir}/wine/vssapi.%{winedll} +%{_libdir}/wine/vulkan-1.%{winedll} +%{_libdir}/wine/wbemdisp.%{winedll} +%{_libdir}/wine/wbemprox.%{winedll} +%{_libdir}/wine/wdscore.%{winedll} +%{_libdir}/wine/webservices.%{winedll} +%{_libdir}/wine/wer.%{winedll} +%{_libdir}/wine/wevtapi.%{winedll} +%{_libdir}/wine/wevtsvc.%{winedll} +%{_libdir}/wine/wiaservc.%{winedll} +%{_libdir}/wine/wimgapi.%{winedll} +#%{_libdir}/wine/win32k.%{winesys} +#%{_libdir}/wine/windows.gaming.input.%{winedll} +#%{_libdir}/wine/windows.globalization.%{winedll} +#%{_libdir}/wine/windows.media.speech.%{winedll} +#%{_libdir}/wine/windows.networking.connectivity.%{winedll} +%{_libdir}/wine/windowscodecs.%{winedll} +%{_libdir}/wine/windowscodecs.so +%{_libdir}/wine/windowscodecsext.%{winedll} %{_libdir}/wine/winebus.sys.so %{_libdir}/wine/winegstreamer.dll.so -%{_libdir}/wine/winehid.sys.so +%{_libdir}/wine/winehid.%{winesys} %{_libdir}/wine/winejoystick.drv.so -%{_libdir}/wine/winemapi.dll.so +%{_libdir}/wine/winemapi.%{winedll} +%{_libdir}/wine/wineusb.sys.so %{_libdir}/wine/winevulkan.dll.so %{_libdir}/wine/winex11.drv.so -%{_libdir}/wine/wing32.dll.so -%{_libdir}/wine/winhttp.dll.so -%{_libdir}/wine/wininet.dll.so -%{_libdir}/wine/winmm.dll.so -%{_libdir}/wine/winnls32.dll.so +%{_libdir}/wine/wing32.%{winedll} +%{_libdir}/wine/winhttp.%{winedll} +%{_libdir}/wine/wininet.%{winedll} +%{_libdir}/wine/winmm.%{winedll} +%{_libdir}/wine/winnls32.%{winedll} %{_libdir}/wine/winspool.drv.so -%{_libdir}/wine/winsta.dll.so -%{_libdir}/wine/wmasf.dll.so -%{_libdir}/wine/wmi.dll.so -%{_libdir}/wine/wmic.exe.so -%{_libdir}/wine/wmiutils.dll.so -%{_libdir}/wine/wmp.dll.so -%{_libdir}/wine/wmvcore.dll.so -%{_libdir}/wine/spoolss.dll.so -%{_libdir}/wine/winscard.dll.so -%{_libdir}/wine/wintab32.dll.so -%{_libdir}/wine/wintrust.dll.so -%{_libdir}/wine/winusb.dll.so -%{_libdir}/wine/wlanapi.dll.so -%{_libdir}/wine/wmphoto.dll.so +%{_libdir}/wine/winsta.%{winedll} +%{_libdir}/wine/wmasf.%{winedll} +%{_libdir}/wine/wmi.%{winedll} +%{_libdir}/wine/wmic.%{wineexe} +%{_libdir}/wine/wmiutils.%{winedll} +%{_libdir}/wine/wmp.%{winedll} +%{_libdir}/wine/wmvcore.%{winedll} +%{_libdir}/wine/spoolss.%{winedll} +%{_libdir}/wine/winscard.%{winedll} +%{_libdir}/wine/wintab32.%{winedll} +%{_libdir}/wine/wintrust.%{winedll} +%{_libdir}/wine/winusb.%{winedll} +%{_libdir}/wine/wlanapi.%{winedll} +%{_libdir}/wine/wlanui.%{winedll} +%{_libdir}/wine/wmphoto.%{winedll} %{_libdir}/wine/wnaspi32.dll.so %if 0%{?wine_staging} %{_libdir}/wine/wow64cpu.dll.so %endif -%{_libdir}/wine/wpc.dll.so +%{_libdir}/wine/wpc.%{winedll} %{_libdir}/wine/wpcap.dll.so %{_libdir}/wine/ws2_32.dll.so -%{_libdir}/wine/wsdapi.dll.so -%{_libdir}/wine/wshom.ocx.so -%{_libdir}/wine/wsnmp32.dll.so -%{_libdir}/wine/wsock32.dll.so -%{_libdir}/wine/wtsapi32.dll.so -%{_libdir}/wine/wuapi.dll.so -%{_libdir}/wine/wuaueng.dll.so -%if 0%{?wine_staging} -%{_libdir}/wine/wuauserv.exe.so -%endif -%{_libdir}/wine/security.dll.so -%{_libdir}/wine/sfc.dll.so -%{_libdir}/wine/wineps.drv.so -%{_libdir}/wine/d3d8.dll.so -%{_libdir}/wine/d3d9.dll.so +%{_libdir}/wine/wsdapi.%{winedll} +%{_libdir}/wine/wshom.%{wineocx} +%{_libdir}/wine/wsnmp32.%{winedll} +%{_libdir}/wine/wsock32.%{winedll} +%{_libdir}/wine/wtsapi32.%{winedll} +%{_libdir}/wine/wuapi.%{winedll} +%{_libdir}/wine/wuaueng.%{winedll} +%{_libdir}/wine/wuauserv.%{wineexe} +%{_libdir}/wine/security.%{winedll} +%{_libdir}/wine/sfc.%{winedll} +%{_libdir}/wine/wineps.%{winedrv} +%{_libdir}/wine/d3d8.%{winedll} +%{_libdir}/wine/d3d8thk.%{winedll} +%{_libdir}/wine/d3d9.%{winedll} %{_libdir}/wine/opengl32.dll.so %{_libdir}/wine/wined3d.dll.so %{_libdir}/wine/dnsapi.dll.so -%{_libdir}/wine/iexplore.exe.so +%{_libdir}/wine/iexplore.%{wineexe} %{_libdir}/wine/x3daudio1_0.dll.so %{_libdir}/wine/x3daudio1_1.dll.so %{_libdir}/wine/x3daudio1_2.dll.so @@ -1879,6 +2036,27 @@ fi %{_libdir}/wine/x3daudio1_5.dll.so %{_libdir}/wine/x3daudio1_6.dll.so %{_libdir}/wine/x3daudio1_7.dll.so +%if 0%{?wine_staging} +%{_libdir}/wine/xactengine2_0.dll.so +%{_libdir}/wine/xactengine2_1.dll.so +%{_libdir}/wine/xactengine2_2.dll.so +%{_libdir}/wine/xactengine2_3.dll.so +%{_libdir}/wine/xactengine2_4.dll.so +%{_libdir}/wine/xactengine2_5.dll.so +%{_libdir}/wine/xactengine2_6.dll.so +%{_libdir}/wine/xactengine2_7.dll.so +%{_libdir}/wine/xactengine2_8.dll.so +%{_libdir}/wine/xactengine2_9.dll.so +%{_libdir}/wine/xactengine2_10.dll.so +%endif +%{_libdir}/wine/xactengine3_0.dll.so +%{_libdir}/wine/xactengine3_1.dll.so +%{_libdir}/wine/xactengine3_2.dll.so +%{_libdir}/wine/xactengine3_3.dll.so +%{_libdir}/wine/xactengine3_4.dll.so +%{_libdir}/wine/xactengine3_5.dll.so +%{_libdir}/wine/xactengine3_6.dll.so +%{_libdir}/wine/xactengine3_7.dll.so %{_libdir}/wine/xapofx1_1.dll.so %{_libdir}/wine/xapofx1_2.dll.so %{_libdir}/wine/xapofx1_3.dll.so @@ -1894,16 +2072,16 @@ fi %{_libdir}/wine/xaudio2_7.dll.so %{_libdir}/wine/xaudio2_8.dll.so %{_libdir}/wine/xaudio2_9.dll.so -%{_libdir}/wine/xcopy.exe.so -%{_libdir}/wine/xinput1_1.dll.so -%{_libdir}/wine/xinput1_2.dll.so -%{_libdir}/wine/xinput1_3.dll.so -%{_libdir}/wine/xinput1_4.dll.so -%{_libdir}/wine/xinput9_1_0.dll.so -%{_libdir}/wine/xmllite.dll.so -%{_libdir}/wine/xolehlp.dll.so -%{_libdir}/wine/xpsprint.dll.so -%{_libdir}/wine/xpssvcs.dll.so +%{_libdir}/wine/xcopy.%{wineexe} +%{_libdir}/wine/xinput1_1.%{winedll} +%{_libdir}/wine/xinput1_2.%{winedll} +%{_libdir}/wine/xinput1_3.%{winedll} +%{_libdir}/wine/xinput1_4.%{winedll} +%{_libdir}/wine/xinput9_1_0.%{winedll} +%{_libdir}/wine/xmllite.%{winedll} +%{_libdir}/wine/xolehlp.%{winedll} +%{_libdir}/wine/xpsprint.%{winedll} +%{_libdir}/wine/xpssvcs.%{winedll} %if 0%{?wine_staging} %ifarch x86_64 aarch64 @@ -1918,68 +2096,68 @@ fi # 16 bit and other non 64bit stuff %ifnarch x86_64 %{arm} aarch64 %{_libdir}/wine/winevdm.exe.so -%{_libdir}/wine/ifsmgr.vxd.so -%{_libdir}/wine/mmdevldr.vxd.so -%{_libdir}/wine/monodebg.vxd.so -%{_libdir}/wine/rundll.exe16.so -%{_libdir}/wine/vdhcp.vxd.so -%{_libdir}/wine/user.exe16.so -%{_libdir}/wine/vmm.vxd.so -%{_libdir}/wine/vnbt.vxd.so -%{_libdir}/wine/vnetbios.vxd.so -%{_libdir}/wine/vtdapi.vxd.so -%{_libdir}/wine/vwin32.vxd.so -%{_libdir}/wine/w32skrnl.dll.so -%{_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.so -%{_libdir}/wine/keyboard.drv16.so -%{_libdir}/wine/lzexpand.dll16.so -%{_libdir}/wine/mmsystem.dll16.so -%{_libdir}/wine/mouse.drv16.so -%{_libdir}/wine/msacm.dll16.so -%{_libdir}/wine/msvideo.dll16.so -%{_libdir}/wine/ole2.dll16.so -%{_libdir}/wine/ole2conv.dll16.so -%{_libdir}/wine/ole2disp.dll16.so -%{_libdir}/wine/ole2nls.dll16.so -%{_libdir}/wine/ole2prox.dll16.so -%{_libdir}/wine/ole2thk.dll16.so -%{_libdir}/wine/olecli.dll16.so -%{_libdir}/wine/olesvr.dll16.so -%{_libdir}/wine/rasapi16.dll16.so -%{_libdir}/wine/setupx.dll16.so -%{_libdir}/wine/shell.dll16.so -%{_libdir}/wine/sound.drv16.so -%{_libdir}/wine/storage.dll16.so -%{_libdir}/wine/stress.dll16.so -%{_libdir}/wine/system.drv16.so -%{_libdir}/wine/toolhelp.dll16.so -%{_libdir}/wine/twain.dll16.so -%{_libdir}/wine/typelib.dll16.so -%{_libdir}/wine/ver.dll16.so -%{_libdir}/wine/w32sys.dll16.so -%{_libdir}/wine/win32s16.dll16.so -%{_libdir}/wine/win87em.dll16.so -%{_libdir}/wine/winaspi.dll16.so -%{_libdir}/wine/windebug.dll16.so -%{_libdir}/wine/wineps16.drv16.so -%{_libdir}/wine/wing.dll16.so -%{_libdir}/wine/winhelp.exe16.so -%{_libdir}/wine/winnls.dll16.so -%{_libdir}/wine/winoldap.mod16.so -%{_libdir}/wine/winsock.dll16.so -%{_libdir}/wine/wintab.dll16.so -%{_libdir}/wine/wow32.dll.so +%{_libdir}/wine/ifsmgr.vxd +%{_libdir}/wine/mmdevldr.vxd +%{_libdir}/wine/monodebg.vxd +%{_libdir}/wine/rundll.exe16 +%{_libdir}/wine/vdhcp.vxd +%{_libdir}/wine/user.exe16 +%{_libdir}/wine/vmm.vxd +%{_libdir}/wine/vnbt.vxd +%{_libdir}/wine/vnetbios.vxd +%{_libdir}/wine/vtdapi.vxd +%{_libdir}/wine/vwin32.vxd +%{_libdir}/wine/w32skrnl.dll +%{_libdir}/wine/avifile.dll16 +%{_libdir}/wine/comm.drv16 +%{_libdir}/wine/commdlg.dll16 +%{_libdir}/wine/compobj.dll16 +%{_libdir}/wine/ctl3d.dll16 +%{_libdir}/wine/ctl3dv2.dll16 +%{_libdir}/wine/ddeml.dll16 +%{_libdir}/wine/dispdib.dll16 +%{_libdir}/wine/display.drv16 +%{_libdir}/wine/gdi.exe16 +%{_libdir}/wine/imm.dll16 +%{_libdir}/wine/krnl386.exe16 +%{_libdir}/wine/keyboard.drv16 +%{_libdir}/wine/lzexpand.dll16 +%{_libdir}/wine/mmsystem.dll16 +%{_libdir}/wine/mouse.drv16 +%{_libdir}/wine/msacm.dll16 +%{_libdir}/wine/msvideo.dll16 +%{_libdir}/wine/ole2.dll16 +%{_libdir}/wine/ole2conv.dll16 +%{_libdir}/wine/ole2disp.dll16 +%{_libdir}/wine/ole2nls.dll16 +%{_libdir}/wine/ole2prox.dll16 +%{_libdir}/wine/ole2thk.dll16 +%{_libdir}/wine/olecli.dll16 +%{_libdir}/wine/olesvr.dll16 +%{_libdir}/wine/rasapi16.dll16 +%{_libdir}/wine/setupx.dll16 +%{_libdir}/wine/shell.dll16 +%{_libdir}/wine/sound.drv16 +%{_libdir}/wine/storage.dll16 +%{_libdir}/wine/stress.dll16 +%{_libdir}/wine/system.drv16 +%{_libdir}/wine/toolhelp.dll16 +%{_libdir}/wine/twain.dll16 +%{_libdir}/wine/typelib.dll16 +%{_libdir}/wine/ver.dll16 +%{_libdir}/wine/w32sys.dll16 +%{_libdir}/wine/win32s16.dll16 +%{_libdir}/wine/win87em.dll16 +%{_libdir}/wine/winaspi.dll16 +%{_libdir}/wine/windebug.dll16 +%{_libdir}/wine/wineps16.drv16 +%{_libdir}/wine/wing.dll16 +%{_libdir}/wine/winhelp.exe16 +%{_libdir}/wine/winnls.dll16 +%{_libdir}/wine/winoldap.mod16 +%{_libdir}/wine/winsock.dll16 +%{_libdir}/wine/wintab.dll16 +%{_libdir}/wine/wow32.dll %endif %files filesystem @@ -1989,7 +2167,7 @@ fi %dir %{_datadir}/wine/mono %dir %{_datadir}/wine/fonts %{_datadir}/wine/wine.inf -%{_datadir}/wine/l_intl.nls +%{_datadir}/wine/nls/ %files common %{_bindir}/notepad @@ -2094,6 +2272,10 @@ fi %doc COPYING.LIB %{_datadir}/wine/fonts/symbol.ttf +%files webdings-fonts +%doc COPYING.LIB +%{_datadir}/wine/fonts/webdings.ttf + %files wingdings-fonts %doc COPYING.LIB %{_datadir}/wine/fonts/wingding.ttf @@ -2134,11 +2316,12 @@ fi # cms subpackage %files cms -%{_libdir}/wine/mscms.dll.so +%{_libdir}/wine/mscms.so +%{_libdir}/wine/mscms.%{winedll} # twain subpackage %files twain -%{_libdir}/wine/twain_32.dll.so +%{_libdir}/wine/twain_32.%{winedll} %{_libdir}/wine/sane.ds.so %files devel @@ -2166,7 +2349,6 @@ fi %lang(fr) %{_mandir}/fr.UTF-8/man1/winemaker.1* %attr(0755, root, root) %dir %{_includedir}/wine %{_includedir}/wine/* -%{_libdir}/*.so %{_libdir}/wine/*.a %{_libdir}/wine/*.def @@ -2187,6 +2369,12 @@ fi %endif %changelog +* Wed Nov 10 2021 Michael Cronenworth 6.0.2-1 +- version update + +* Thu Jan 14 2021 Michael Cronenworth 6.0-1 +- version update + * Tue Apr 21 2020 Michael Cronenworth 4.0.4-1 - version update @@ -2227,1820 +2415,3 @@ fi * Mon Dec 18 2017 Michael Cronenworth 2.0.3-1 - version update -* Mon Dec 19 2016 Michael Cronenworth 1.8.6-1 -- version upgrade - -* Mon Nov 07 2016 Michael Cronenworth 1.8.5-2 -- remove old cruft and fix scriptlets (rhbz#1314762) -- add hard dependency on cups-libs (rhbz#1367537) - -* Fri Oct 07 2016 Michael Cronenworth 1.8.5-1 -- version upgrade - -* Fri Sep 09 2016 Michael Cronenworth 1.8.4-1 -- version upgrade - -* Fri Jun 17 2016 Michael Cronenworth 1.8.3-1 -- version upgrade - -* Tue Apr 19 2016 Michael Cronenworth 1.8.2-1 -- version upgrade - -* Wed Feb 03 2016 Michael Cronenworth 1.8.1-1 -- version upgrade - -* Wed Dec 23 2015 Michael Cronenworth 1.8-1 -- version upgrade - -* Tue Dec 15 2015 Michael Cronenworth 1.8-0.2 -- version upgrade, 1.8-rc4 -- enabling compiler optimizations again (-O2), thanks to gcc 5.3 - -* Sun Dec 06 2015 Michael Cronenworth 1.8-0.1 -- version upgrade, 1.8-rc3 - -* Sun Nov 15 2015 Michael Cronenworth 1.7.55-1 -- version upgrade - -* Wed Nov 04 2015 Michael Cronenworth 1.7.54-1 -- version upgrade - -* Wed Oct 21 2015 Michael Cronenworth 1.7.53-1 -- version upgrade - -* Sat Oct 03 2015 Michael Cronenworth 1.7.52-1 -- version upgrade - -* Tue Sep 08 2015 Michael Cronenworth 1.7.51-1 -- version upgrade - -* Mon Aug 24 2015 Michael Cronenworth 1.7.50-1 -- version upgrade - -* Fri Aug 14 2015 Michael Cronenworth 1.7.49-2 -- backport gecko 2.40 patch - -* Fri Aug 14 2015 Michael Cronenworth 1.7.49-1 -- version upgrade - -* Mon Aug 10 2015 Björn Esser - 1.7.48-2 -- rebuilt for mingw-wine-gecko-2.40 - -* Fri Jul 31 2015 Michael Cronenworth 1.7.48-1 -- version upgrade - -* Sun Jul 12 2015 Michael Cronenworth 1.7.47-1 -- version upgrade - -* Mon Jun 29 2015 Michael Cronenworth 1.7.46-1 -- version upgrade - -* Fri Jun 19 2015 Fedora Release Engineering - 1.7.45-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Sun Jun 14 2015 Michael Cronenworth 1.7.45-1 -- version upgrade - -* Sun May 31 2015 Michael Cronenworth 1.7.44-1 -- version upgrade - -* Mon May 18 2015 Michael Cronenworth 1.7.43-1 -- version upgrade - -* Mon May 04 2015 Michael Cronenworth 1.7.42-1 -- version upgrade - -* Sat Apr 18 2015 Michael Cronenworth 1.7.41-1 -- version upgrade -- Disable gstreamer support (rhbz#1204185) - -* Mon Apr 06 2015 Michael Cronenworth 1.7.40-1 -- version upgrade - -* Sun Mar 22 2015 Michael Cronenworth 1.7.39-1 -- version upgrade -- Enable some optimizations and workarounds for GCC5 regressions - -* Tue Mar 10 2015 Adam Jackson 1.7.38-3 -- Drop sysvinit subpackage on F23+ - -* Sat Mar 07 2015 Michael Cronenworth - 1.7.38-2 -- Fix wine-gecko and wine-mono versions - -* Sat Mar 07 2015 Michael Cronenworth - 1.7.38-1 -- version upgrade - -* Sun Feb 22 2015 Andreas Bierfert -- 1.7.37-1 -- version upgrade - -* Mon Feb 16 2015 Michael Cronenworth - 1.7.36-2 -- Patch for RtlUnwindEx fix (staging bz #68) -- Use new systemd macros for binfmt handling - -* Sun Feb 08 2015 Michael Cronenworth - 1.7.36-1 -- version upgrade - -* Wed Feb 04 2015 Orion Poplawski - 1.7.35-3 -- Add patch to fix stack smashing (bug #1110419) - -* Mon Jan 26 2015 Michael Cronenworth - 1.7.35-2 -- Rebuild (libgphoto2) - -* Sun Jan 25 2015 Michael Cronenworth - 1.7.35-1 -- version upgrade -- use alternatives system, remove wow sub-package - -* Tue Jan 20 2015 Peter Robinson 1.7.34-2 -- Rebuild (libgphoto2) - -* Sat Jan 10 2015 Michael Cronenworth -- 1.7.34-1 -- version upgrade -- enable OpenCL support (rhbz#1176605) - -* Sun Dec 14 2014 Michael Cronenworth -- 1.7.33-1 -- version upgrade - -* Sun Nov 30 2014 Michael Cronenworth -- 1.7.32-1 -- version upgrade -- wine-mono upgrade - -* Fri Nov 14 2014 Andreas Bierfert -- 1.7.31-1 -- version upgrade -- wine-gecko upgrade -- add some missing arch requires - -* Sun Nov 02 2014 Andreas Bierfert -- 1.7.30-1 -- version upgrade (rhbz#1159548) -- use winepulse patch from compholio patchset when build w/o - compholio (rhbz#1151862) - -* Fri Oct 24 2014 Michael Cronenworth -- 1.7.29-1 -- version upgrade - -* Sun Oct 05 2014 Michael Cronenworth -- 1.7.28-1 -- version upgrade -- New sub-package for wingdings font system integration - -* Wed Sep 24 2014 Michael Cronenworth -- 1.7.27-1 -- version upgrade - -* Mon Sep 08 2014 Michael Cronenworth -- 1.7.26-1 -- version upgrade - -* Sun Aug 24 2014 Michael Cronenworth -- 1.7.25-1 -- version upgrade - -* Mon Aug 18 2014 Fedora Release Engineering - 1.7.24-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Fri Aug 15 2014 Michael Cronenworth -- 1.7.24-1 -- version upgrade -- No longer install Wine fonts into system directory (rhbz#1039763) - -* Thu Jul 17 2014 Björn Esser - 1.7.22-4 -- prevent accidential build with compholio-patchset on EPEL -- rebuild for pulseaudio (bug #1117683) - -* Mon Jul 14 2014 Björn Esser - 1.7.22-3 -- dropped virtual Provides: %%{name}(compholio) - -* Sat Jul 12 2014 Björn Esser - 1.7.22-2 -- added conditionalized option to build with compholio-patchset for pipelight - Source900 -- compholio-patchset, wine-arial-fonts sub-package, - BR: libattr-devel and configure --with-xattr for Silverlight DRM-stuff - -* Fri Jul 11 2014 Michael Cronenworth -- 1.7.22-1 -- version upgrade - -* Wed Jul 09 2014 Michael Cronenworth -- 1.7.21-2 -- Fixes for EPEL7 (rhbz#1117422) - -* Tue Jul 01 2014 Andreas Bierfert -- 1.7.21-1 -- version upgrade - -* Thu Jun 19 2014 Andreas Bierfert -- 1.7.20-1 -- version upgrade - -* Sun Jun 08 2014 Fedora Release Engineering - 1.7.19-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Sun May 18 2014 Andreas Bierfert -- 1.7.19-1 -- version upgrade - -* Sat May 10 2014 Michael Cronenworth -- 1.7.18-1 -- version upgrade - -* Fri Apr 25 2014 Andreas Bierfert -- 1.7.17-2 -- fix systemd binfmt location (rhbz#1090170) - -* Tue Apr 22 2014 Andreas Bierfert -- 1.7.17-1 -- version upgrade - -* Mon Apr 07 2014 Andreas Bierfert -- 1.7.16-2 -- explicitly require libpng (fixes rhbz#1085075) - -* Mon Apr 07 2014 Andreas Bierfert -- 1.7.16-1 -- version upgrade - -* Mon Mar 24 2014 Andreas Bierfert -- 1.7.15-1 -- version upgrade - -* Sat Mar 08 2014 Andreas Bierfert -- 1.7.14-1 -- version upgrade - -* Sun Feb 23 2014 Andreas Bierfert -- 1.7.13-1 -- version upgrade -- upgraded winepulse - -* Sat Feb 08 2014 Andreas Bierfert -- 1.7.12-1 -- version upgrade - -* Sun Jan 26 2014 Andreas Bierfert -- 1.7.11-1 -- version upgrade - -* Thu Jan 09 2014 Andreas Bierfert -- 1.7.10-1 -- version upgrade -- upgraded winepulse - -* Sun Dec 08 2013 Andreas Bierfert -- 1.7.8-1 -- version upgrade -- wine mono 4.5.2 -- upgraded winepulse - -* Sat Nov 23 2013 Andreas Bierfert -- 1.7.7-1 -- version upgrade - -* Mon Oct 28 2013 Andreas Bierfert -- 1.7.5-1 -- version upgrade (rhbz#1023716) -- upgraded winepulse - -* Sat Oct 12 2013 Andreas Bierfert -- 1.7.4-1 -- version upgrade (rhbz#1018601) - -* Sat Sep 28 2013 Andreas Bierfert -- 1.7.3-1 -- version upgrade (rhbz#1008441) -- upgraded winepulse -- wine gecko 2.24 -- fix systemd subpackage scriplet (rhbz#1010742) - -* Sun Sep 15 2013 Andreas Bierfert -- 1.7.2-1 -- version upgrade -- workaround for rhbz#968860 -- upgraded winepulse - -* Sat Aug 31 2013 Andreas Bierfert -- 1.7.1-2 -- fix icons with patch provided by Frank Dana (rhbz#997543) -- pull in mesa-dri-drivers in meta package to make direct rendering work out - of the box (rhbz#827776) -- restart systemd binfmt handler on post/postun (rhbz#912354) -- add arabic translation to fedora desktop files provided by Mosaab Alzoubi - (rhbz#979770) - -* Sat Aug 31 2013 Andreas Bierfert -- 1.7.1-1 -- version upgrade -- build with lcms2 - -* Sat Aug 17 2013 Andreas Bierfert -- 1.7.0-1 -- version upgrade -- wine pulse update - -* Sun Aug 04 2013 Fedora Release Engineering - 1.6-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Tue Jul 23 2013 Dennis Gilmore - 1.6-2 -- wine-desktop has architecture specific Requires so can not be noarch - -* Sat Jul 20 2013 Andreas Bierfert -- 1.6-1 -- 1.6 release - -* Thu Jul 18 2013 Petr Pisar - 1.6-0.5.rc5 -- Perl 5.18 rebuild - -* Fri Jul 12 2013 Andreas Bierfert -- 1.6-0.4.rc5 -- 1.6 rc5 - -* Sat Jun 29 2013 Andreas Bierfert -- 1.6-0.3.rc4 -- 1.6 rc4 - -* Thu Jun 27 2013 Andreas Bierfert -- 1.6-0.2.rc3 -- 1.6 rc3 - -* Sun Jun 16 2013 Andreas Bierfert -- 1.6-0.1.rc2 -- 1.6 rc2 - -* Thu May 30 2013 Andreas Bierfert -- 1.5.31-1 -- version upgrade -- upgraded winepulse -- wine gecko 2.21 -- wine meta: require samba-winbind-clients for ntlm - -* Tue May 14 2013 Andreas Bierfert -- 1.5.30-1 -- version upgrade - -* Thu May 09 2013 Andreas Bierfert -- 1.5.29-1 -- version upgrade - -* Sat Mar 30 2013 Andreas Bierfert -- 1.5.27-1 -- version upgrade - -* Sun Mar 17 2013 Andreas Bierfert -- 1.5.26-1 -- version upgrade - -* Tue Mar 05 2013 Andreas Bierfert -- 1.5.25-1 -- version upgrade -- now font package for wingdings family - -* Mon Feb 18 2013 Andreas Bierfert -- 1.5.24-1 -- version upgrade - -* Sun Feb 10 2013 Andreas Bierfert -- 1.5.23-1 -- version upgrade - -* Sun Feb 10 2013 Parag Nemade - 1.5.22-2 -- Remove vendor tag from desktop file as per https://fedorahosted.org/fesco/ticket/1077 -- Cleanup spec as per recently changed packaging guidelines -- fix bogus date changelog - -* Sat Jan 19 2013 Andreas Bierfert -- 1.5.22-1 -- version upgrade -- upgraded winepulse -- wine gecko 1.9 - -* Sun Jan 06 2013 Andreas Bierfert -- 1.5.21-1 -- version upgrade - -* Fri Dec 28 2012 Andreas Bierfert -- 1.5.20-1 -- version upgrade -- upgraded winepulse - -* Sun Dec 09 2012 Andreas Bierfert -- 1.5.19-1 -- version upgrade -- upgraded winepulse - -* Fri Nov 23 2012 Andreas Bierfert -- 1.5.18-1 -- version upgrade - -* Mon Nov 12 2012 Andreas Bierfert -- 1.5.17-1 -- version upgrade -- upgraded winepulse - -* Sun Oct 28 2012 Andreas Bierfert -- 1.5.16-1 -- version upgrade (rhbz#870611) -- wine mono 0.8 -- update pulse patch -- fix midi in winepulse (rhbz#863129) -- fix dependencies for openssl (rhbz#868576) -- move wineboot.exe.so to -core instead of -wow (rhbz#842820) - -* Mon Oct 15 2012 Andreas Bierfert -- 1.5.15-1 -- version upgrade -- wine gecko 1.8 - -* Sat Sep 29 2012 Andreas Bierfert -- 1.5.14-1 -- version upgrade - -* Sat Sep 15 2012 Andreas Bierfert -- 1.5.13-1 -- version upgrade - -* Fri Aug 31 2012 Andreas Bierfert -- 1.5.12-1 -- version upgrade - -* Thu Aug 30 2012 Andreas Bierfert -- 1.5.11-2 -- rebuild on rawhide for fixed libOSMesa - -* Sat Aug 18 2012 Andreas Bierfert -- 1.5.11-1 -- version upgrade -- use changed libOSMesa check from gentoo (>f18 still fails see rhbz#849405) - -* Tue Jul 31 2012 Andreas Bierfert -- 1.5.10-1 -- version upgrade -- wine gecko 1.7 - -* Sat Jul 21 2012 Peter Robinson - 1.5.9-2 -- isdn4linux now builds on ARM - -* Wed Jul 18 2012 Andreas Bierfert -- 1.5.9-1 -- version upgrade -- clean up cjk patch to comply with default fonts where possible -- update fedora readme to point out required font packages per cjk locale - -* Thu Jul 12 2012 Andreas Bierfert -- 1.5.8-2 -- bump for libgphoto2 2.5.0 - -* Wed Jul 04 2012 Andreas Bierfert -- 1.5.8-1 -- version upgrade (rhbz#834762) -- change {mingw-,}wine-mono require - -* Sun Jun 24 2012 Andreas Bierfert -- 1.5.7-1 -- version upgrade (rhbz#834762) -- require new wine-gecko version - -* Sat Jun 09 2012 Andreas Bierfert -- 1.5.6-1 -- version upgrade (rhbz#830424) -- split tahoma font package and add -system subpackage (rhbz#693180) - -* Thu May 31 2012 Andreas Bierfert -- 1.5.5-2 -- fix description - -* Mon May 28 2012 Andreas Bierfert -- 1.5.5-1 -- version upgrade (rhbz#817257) -- split out -filesystem and clean up -common/-core requires -- re-add winepulse driver (rhbz#821207, rhbz#783699) -- add font replacements for CJK to wine.inf and add information for cjk users - to fedora readme (rhbz#815125, rhbz#820096) -- add support for and require wine-mono - -* Mon May 14 2012 Andreas Bierfert -- 1.5.4-1 -- version upgrade - -* Mon Apr 30 2012 Andreas Bierfert -- 1.5.3-1 -- version upgrade - -* Sat Apr 21 2012 Andreas Bierfert -- 1.5.2-2 -- reenable xinput2 (rhbz#801436) - -* Sat Apr 14 2012 Andreas Bierfert -- 1.5.2-1 -- version upgrade - -* Sat Mar 31 2012 Andreas Bierfert -- 1.5.1-1 -- version upgrade - -* Tue Mar 20 2012 Andreas Bierfert -- 1.5.0-2 -- require wine gecko from fedora mingw - -* Mon Mar 19 2012 Andreas Bierfert -- 1.5.0-1 -- version upgrade - -* Wed Mar 07 2012 Andreas Bierfert -- 1.4-1 -- version upgrade - -* Tue Mar 06 2012 Andreas Bierfert -- 1.4-0.8.rc6 -- version upgrade - -* Sat Feb 25 2012 Andreas Bierfert -- 1.4-0.7.rc5 -- version upgrade - -* Tue Feb 21 2012 Andreas Bierfert -- 1.4-0.6.rc4 -- fix dependency issue (#795295) - -* Sun Feb 19 2012 Andreas Bierfert -- 1.4-0.5.rc4 -- version upgrade - -* Fri Feb 17 2012 Andreas Bierfert -- 1.4-0.4.rc3 -- version upgrade -- cleanup arm dependency fixes - -* Fri Feb 17 2012 Peter Robinson - 1.4-0.3.rc2 -- Fix architecture dependencies on ARM so it installs - -* Thu Feb 02 2012 Andreas Bierfert -- 1.4-0.2.rc2 -- version upgrade - -* Sat Jan 28 2012 Andreas Bierfert -- 1.4-0.1.rc1 -- version upgrade - -* Wed Jan 25 2012 Peter Robinson - 1.3.37-2 -- Add initial support for wine on ARM - -* Fri Jan 13 2012 Andreas Bierfert -- 1.3.37-1 -- version upgrade -- drop obsoleted patches - -* Sat Dec 31 2011 Andreas Bierfert -- 1.3.36-1 -- version upgrade - -* Mon Dec 19 2011 Andreas Bierfert -- 1.3.35-1 -- version upgrade - -* Thu Dec 08 2011 Andreas Bierfert -- 1.3.34-1 -- version upgrade - -* Sun Nov 20 2011 Andreas Bierfert -- 1.3.33-1 -- version upgrade(rhbz#755192) - -* Sat Nov 05 2011 Andreas Bierfert -- 1.3.32-1 -- version upgrade (rhbz#745434) - -* Fri Nov 04 2011 Andreas Bierfert -- 1.3.31-2 -- pull in correct wine-alsa arch in the pa meta package (rhbz#737431) - -* Sun Oct 23 2011 Andreas Bierfert -- 1.3.31-1 -- version upgrade - -* Mon Oct 10 2011 Andreas Bierfert -- 1.3.30-1 -- version upgrade - -* Sat Sep 24 2011 Andreas Bierfert -- 1.3.29-1 -- version upgrade - -* Sun Sep 11 2011 Andreas Bierfert -- 1.3.28-1 -- version upgrade -- require -alsa from -pulseaudio package for new sound api - -* Mon Aug 29 2011 Andreas Bierfert -- 1.3.27-1 -- version upgrade -- fix epel build (rhbz#733802) - -* Tue Aug 23 2011 Andreas Bierfert -- 1.3.26-3 -- drop pulse configure option -- fix f16 build (dbus/hal configure options) - -* Mon Aug 22 2011 Andreas Bierfert -- 1.3.26-2 -- drop pulse patches -- make pulseaudio package meta and require alsa pa plugin -- update udisks patch - -* Sun Aug 07 2011 Andreas Bierfert -- 1.3.26-1 -- version upgrade - -* Fri Jul 22 2011 Andreas Bierfert -- 1.3.25-1 -- version upgrade -- remove -jack and -esd (retired upstream) -- rebase to Maarten Lankhorst's winepulse -- drop obsolete winepulse readme -- add udisks support from pending patches (winehq#21713, rhbz#712755) -- disable xinput2 (broken) - -* Sun Jul 10 2011 Andreas Bierfert -- 1.3.24-1 -- version upgrade -- add sign as source10 -- drop mshtml patch (upstream) - -* Sun Jun 26 2011 Andreas Bierfert -- 1.3.23-1 -- version upgrade -- winepulse upgrade (0.40) -- fix gcc optimization problem (rhbz#710352, winehq#27375) - -* Tue Jun 21 2011 Andreas Bierfert -- 1.3.22-2 -- workaround gcc optimization problem (rhbz#710352) - -* Sun Jun 12 2011 Andreas Bierfert -- 1.3.22-1 -- version upgrade - -* Sat May 28 2011 Andreas Bierfert -- 1.3.21-1 -- version upgrade - -* Sun May 15 2011 Andreas Bierfert -- 1.3.20-1 -- version upgrade - -* Sat Apr 30 2011 Andreas Bierfert -- 1.3.19-1 -- version upgrade (#701003) -- remove wine-oss -- disable hal (>=f16) - -* Sat Apr 16 2011 Andreas Bierfert -- 1.3.18-1 -- version upgrade - -* Thu Apr 07 2011 Andreas Bierfert -- 1.3.17-3 -- add fix for office installation (upstream #26650) - -* Tue Apr 05 2011 Andreas Bierfert -- 1.3.17-2 -- cleanup spec file -- remove rpath via chrpath -- convert README files to utf8 -- move SysV init script so sysvinit subpackage (>=f15) -- add some missing lsb keywords to init file -- create systemd subpackage and require it in the wine-desktop package (>=f15) -- disable embedded bitmaps in tahoma (#693180) -- provide readme how to disable wine-tahoma in fontconfig (#693180) - -* Sat Apr 02 2011 Andreas Bierfert -- 1.3.17-1 -- version upgrade - -* Fri Mar 18 2011 Andreas Bierfert -- 1.3.16-1 -- version upgrade -- cleanup unneeded patches -- drop some patches -- reenable smp build - -* Thu Mar 17 2011 Andreas Bierfert -- 1.3.15-3 -- reenable fonts - -* Sun Mar 13 2011 Andreas Bierfert -- 1.3.15-2 -- use svg files for icons (#684277) - -* Tue Mar 08 2011 Andreas Bierfert -- 1.3.15-1 -- version upgrade - -* Tue Mar 01 2011 Andreas Bierfert -- 1.3.14-2 -- prepare for wine-gecko - -* Sat Feb 19 2011 Andreas Bierfert -- 1.3.14-1 -- version upgrade - -* Mon Feb 07 2011 Fedora Release Engineering - 1.3.13-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild - -* Sun Feb 06 2011 Andreas Bierfert -- 1.3.13-1 -- version upgrade -- update desktop files - -* Mon Jan 24 2011 Andreas Bierfert -- 1.3.12-1 -- version upgrade - -* Sun Jan 09 2011 Andreas Bierfert -- 1.3.11-1 -- version upgrade - -* Tue Dec 28 2010 Andreas Bierfert -- 1.3.10-1 -- version upgrade - -* Sat Dec 11 2010 Andreas Bierfert -- 1.3.9-1 -- version upgrade - -* Sat Nov 27 2010 Andreas Bierfert -- 1.3.8-1 -- version upgrade -- require libXcursor (#655255) -- require wine-openal in wine meta package (#657144) - -* Tue Nov 16 2010 Andreas Bierfert -- 1.3.7-2 -- cleanup cflags a bit - -* Sat Nov 13 2010 Andreas Bierfert -- 1.3.7-1 -- version upgrade -- fix package description (#652718) -- compile with D_FORTIFY_SOURCE=0 for now to avoid breaking wine (#650875) - -* Fri Oct 29 2010 Andreas Bierfert -- 1.3.6-1 -- version upgrade -- rebase winepulse configure patch -- add gstreamer BR for new gstreamer support -- add libtiff BR for new tiff support - -* Mon Oct 18 2010 Andreas Bierfert -- 1.3.5-1 -- version upgrade - -* Sun Oct 03 2010 Andreas Bierfert -- 1.3.4-1 -- version upgrade - -* Wed Sep 29 2010 Andreas Bierfert -- 1.3.3-2 -- winepulse upgrade (0.39) - -* Mon Sep 20 2010 Andreas Bierfert -- 1.3.3-1 -- version upgrade - -* Wed Sep 08 2010 Andreas Bierfert -- 1.3.2-1 -- version upgrade - -* Sat Aug 21 2010 Andreas Bierfert -- 1.3.1-1 -- version ugprade - -* Sat Jul 31 2010 Andreas Bierfert -- 1.3.0-1 -- version upgrade - -* Wed Jul 28 2010 Andreas Bierfert -- 1.2.0-2 -- fix segfault (#617968) -- enable openal-soft on el6 - -* Fri Jul 16 2010 Andreas Bierfert -- 1.2-1 -- final release - -* Fri Jul 16 2010 Andreas Bierfert -- 1.2-0.8.rc7 -- improve font patch - -* Sun Jul 11 2010 Andreas Bierfert -- 1.2-0.7.rc7 -- version upgrade -- make sure font packages include the license file in case they are installed - standalone - -* Sun Jul 04 2010 Andreas Bierfert -- 1.2-0.6.rc6 -- version upgrade -- use new winelogo from user32 -- winepulse upgrade - -* Sun Jun 27 2010 Andreas Bierfert -- 1.2-0.5.rc5 -- version upgrade -- require liberation-narrow-fonts - -* Fri Jun 18 2010 Andreas Bierfert -- 1.2-0.4.rc4 -- version upgrade -- fixes winecfg on 64bit (#541986) -- require wine-common from -core to ensure man pages and wine.inf are present - (#528335) - -* Sun Jun 13 2010 Andreas Bierfert -- 1.2-0.3.rc3 -- version upgrade - -* Mon May 31 2010 Andreas Bierfert -- 1.2-0.2.rc2 -- version upgrade - -* Mon May 24 2010 Andreas Bierfert -- 1.2-0.1.rc1 -- upgrade to rc1 -- add BR for ImageMagick and icoutils -- spec cleanup -- install available icon files (#594950) -- desktop package requires wine x86-32 because of wine/wine64 rename -- put system/small fonts in right place - -* Wed May 19 2010 Andreas Bierfert -- 1.1.44-5 -- fix font issues - -* Thu May 13 2010 Andreas Bierfert -- 1.1.44-4 -- fix install of 32bit only wine on x86_64 via install wine.i686 - -* Wed May 12 2010 Andreas Bierfert -- 1.1.44-3 -- move wine symlink to -wow for 32bit (#591690) - -* Tue May 11 2010 Andreas Bierfert -- 1.1.44-2 -- fix manpage conflict between -common and -devel - -* Sun May 09 2010 Andreas Bierfert -- 1.1.44-1 -- version upgrade (#580024) - -* Sun Apr 18 2010 Andreas Bierfert -- 1.1.43-1 -- version upgrade - -* Sun Apr 11 2010 Andreas Bierfert -- 1.1.42-1 -- version upgrade -- rework for wow64 - -* Mon Mar 29 2010 Andreas Bierfert -- 1.1.41-3 -- add support for mingw32-wine-gecko - -* Sun Mar 28 2010 Andreas Bierfert -- 1.1.41-2 -- convert to font package guidelines -- add libv4l-devel BR - -* Sun Mar 28 2010 Andreas Bierfert -- 1.1.41-1 -- version upgrade (#577587, #576607) -- winepulse upgrade (0.36) - -* Sat Mar 06 2010 Andreas Bierfert -- 1.1.40-1 -- version upgrade - -* Sun Feb 21 2010 Andreas Bierfert -- 1.1.39-1 -- version upgrade - -* Tue Feb 09 2010 Andreas Bierfert -- 1.1.38-1 -- version upgrade -- winepulse upgrade (0.35) - -* Mon Jan 18 2010 Andreas Bierfert -- 1.1.36-1 -- version upgrade (#554102) -- require -common in -desktop (#549190) - -* 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) -- update winepulse - -* Mon Sep 28 2009 Andreas Bierfert -- 1.1.30-1 -- version upgrade -- openal support -- drop steam regression patch - -* Sun Sep 13 2009 Andreas Bierfert -- 1.1.29-3 -- patch for steam regression (upstream #19916) -- update winepulse winecfg patch - -* Thu Sep 10 2009 Andreas Bierfert -- 1.1.29-2 -- rebuild for new gcc (#505862) - -* Wed Sep 02 2009 Andreas Bierfert -- 1.1.29-1 -- version upgrade - -* Mon Aug 24 2009 Andreas Bierfert -- 1.1.28-1 -- version upgrade -- make 32bit and 64bit version parallel installable - -* Sun Aug 09 2009 Andreas Bierfert -- 1.1.27-1 -- version upgrade -- WinePulse 0.30 - -* Thu Aug 06 2009 Andreas Bierfert -- 1.1.26-2 -- build 32bit wine on x86_64 and prepare for 64bit parallel build (#487651) -- fix subpackage problems (#485410,#508766,#508944,#514967) -- fix nss dependencies on x86_64 (#508412) - -* Sat Jul 18 2009 Andreas Bierfert -- 1.1.26-1 -- version upgrade -- WinePulse 0.29 -- require Xrender isa for x86_64 (#510947) - -* Thu Jul 09 2009 Andreas Bierfert -- 1.1.25-1 -- version upgrade (#509648) - -* Mon Jun 29 2009 Andreas Bierfert -- 1.1.24-3 -- pull in nss correctly on x86_64 - -* Sun Jun 21 2009 Andreas Bierfert -- 1.1.24-2 -- adjust wine-menu to follow wine behavior (wine-wine instead of Wine) - (fixes #479649, #495953) -- fix wine help desktop entry (#495953, #507154) -- add some more wine application desktop entries (#495953) -- split alsa/oss support into wine-alsa/wine-oss -- drop nas require from wine meta package -- fix dns resolution (#492700) - -* Fri Jun 19 2009 Andreas Bierfert -- 1.1.24-1 -- version upgrade -- WinePulse 0.28 -- drop meta package requires for jack and esd (#492983) - -* Wed Jun 10 2009 Andreas Bierfert -- 1.1.23-1 -- version upgrade (#491321) -- rediff pulseaudio patch (Michael Cronenworth) - -* Wed May 13 2009 Andreas Bierfert -- 1.1.21-2 -- fix uninstaller (#500479) - -* Tue May 12 2009 Andreas Bierfert -- 1.1.21-1 -- version upgrade - -* Mon Apr 27 2009 Andreas Bierfert -- 1.1.20-1 -- version upgrade - -* Mon Mar 30 2009 Andreas Bierfert -- 1.1.18-1 -- version upgrade (#490672, #491321) -- winepulse update - -* Sun Mar 15 2009 Nicolas Mailhot - 1.1.15-3 -— Make sure F11 font packages have been built with F11 fontforge - -* Tue Feb 24 2009 Andreas Bierfert -- 1.1.15-2 -- switch from i386 to ix86 - -* Sun Feb 15 2009 Andreas Bierfert -- 1.1.15-1 -- version upgrade -- new pulse patches - -* Sat Jan 31 2009 Andreas Bierfert -- 1.1.14-1 -- version upgrade - -* Sat Jan 17 2009 Andreas Bierfert -- 1.1.13-1 -- version upgrade -- fix gcc compile problems (#440139, #461720) - -* Mon Jan 05 2009 Andreas Bierfert -- 1.1.12-1 -- version upgrade - -* Sat Dec 06 2008 Andreas Bierfert -- 1.1.10-1 -- version upgrade -- add native pulseaudio driver from winehq bugzilla (#10495) - fixes #474435, #344281 - -* Mon Nov 24 2008 Andreas Bierfert -- 1.1.9-2 -- fix #469907 - -* Sun Nov 23 2008 Andreas Bierfert -- 1.1.9-1 -- version upgrade - -* Sun Oct 26 2008 Andreas Bierfert -- 1.1.7-1 -- version upgrade - -* Thu Oct 23 2008 Andreas Bierfert -- 1.1.6-1 -- version upgrade -- fix multiarch problems (#466892,#467480) - -* Sat Sep 20 2008 Andreas Bierfert -- 1.1.5-1 -- version upgrade - -* Fri Sep 05 2008 Andreas Bierfert -- 1.1.4-1 -- version upgrade -- drop wine-prefixfonts.patch (#460745) - -* Fri Aug 29 2008 Andreas Bierfert -- 1.1.3-1 -- version upgrade - -* Sun Jul 27 2008 Andreas Bierfert -- 1.1.2-1 -- version upgrade (#455960, #456831) -- require freetype (#452417) -- disable wineprefixcreate patch for now - -* Fri Jul 11 2008 Andreas Bierfert -- 1.1.1-1 -- version upgrade - -* Tue Jun 17 2008 Andreas Bierfert -- 1.0-1 -- version upgrade (#446311,#417161) -- fix wine.desktop mime types (#448338) -- add desktop package including desktop files and binary handler (#441310) -- pull in some wine alsa/pulseaudio patches (#344281) - -* Mon Jun 16 2008 Andreas Bierfert -- 1.0-0.5.rc5 -- version upgrade - -* Fri Jun 06 2008 Andreas Bierfert -- 1.0-0.4.rc4 -- version upgrade - -* Sun Jun 01 2008 Andreas Bierfert -- 1.0-0.3.rc3 -- version upgrade - -* Fri May 23 2008 Andreas Bierfert -- 1.0-0.2.rc2 -- version upgrade -- add compile workaround for fedora 9/rawhide (#440139) - -* Sat May 10 2008 Andreas Bierfert -- 1.0-0.1.rc1 -- version upgrade to rc1 - -* Mon May 05 2008 Andreas Bierfert -- 0.9.61-1 -- version upgrade - -* Fri Apr 18 2008 Andreas Bierfert -- 0.9.60-1 -- version upgrade - -* Sat Apr 05 2008 Andreas Bierfert -- 0.9.59-1 -- version upgrade - -* Sat Mar 22 2008 Andreas Bierfert -- 0.9.58-1 -- version upgrade - -* Tue Mar 11 2008 Andreas Bierfert -- 0.9.57-1 -- version upgrade - -* Sat Feb 23 2008 Andreas Bierfert -- 0.9.56-1 -- version upgrade - -* Sun Feb 10 2008 Andreas Bierfert -- 0.9.55-1 -- version upgrade - -* Fri Jan 25 2008 Andreas Bierfert -- 0.9.54-1 -- version upgrade -- remove default pulseaudio workaround (#429420,#428745) -- improve pulseaudio readme - -* Sun Jan 13 2008 Andreas Bierfert -- 0.9.53-2 -- add some missing BR - -* Sat Jan 12 2008 Andreas Bierfert -- 0.9.53-1 -- version upgrade - -* Sat Dec 29 2007 Andreas Bierfert -- 0.9.52-2 -- fix menu bug (#393641) - -* Fri Dec 28 2007 Andreas Bierfert -- 0.9.52-1 -- version upgrade - -* Fri Dec 28 2007 Andreas Bierfert -- 0.9.51-3 -- add -n Wine to pulseaudio workaround -- try to fix menu bug #393641 - -* Fri Dec 28 2007 Andreas Bierfert -- 0.9.51-2 -- add fix for #344281 pulseaudio workaround -- fix #253474: wine-jack should require jack-audio-connection-kit - -* Sun Dec 16 2007 Andreas Bierfert -- 0.9.51-1 -- version upgrade - -* Sat Dec 01 2007 Andreas Bierfert -- 0.9.50-1 -- version upgrade - -* Tue Nov 13 2007 Andreas Bierfert -- 0.9.49-1 -- version upgrade - -* Fri Oct 26 2007 Andreas Bierfert -- 0.9.48-1 -- version upgrade - -* Sat Oct 13 2007 Andreas Bierfert -- 0.9.47-1 -- version upgrade - -* Sun Oct 07 2007 Andreas Bierfert -- 0.9.46-1 -- version upgrade - -* Sun Sep 16 2007 Andreas Bierfert -- 0.9.45-1 -- version upgrade - -* Sat Aug 25 2007 Andreas Bierfert -- 0.9.44-1 -- version upgrade - -* Sat Aug 18 2007 Andreas Bierfert -- 0.9.43-2 -- fix license -- fix #248999 - -* Sat Aug 11 2007 Andreas Bierfert -- 0.9.43-1 -- version upgrade -- fix init-script output (#252144) -- add lsb stuff (#247096) - -* Sat Jul 28 2007 Andreas Bierfert -- 0.9.42-1 -- version upgrade - -* Mon Jul 16 2007 Andreas Bierfert -- 0.9.41-1 -- version upgrade - -* Tue Jul 03 2007 Andreas Bierfert -- 0.9.40-1 -- version upgrade - -* Mon Jun 18 2007 Andreas Bierfert -- 0.9.39-2 -- fix desktop entries - -* Sun Jun 17 2007 Andreas Bierfert -- 0.9.39-1 -- version upgrade -- convert to utf8 (#244046) -- fix mime entry (#243511) - -* Wed Jun 06 2007 Andreas Bierfert -0.9.38-3 -- fix description - -* Sun Jun 03 2007 Andreas Bierfert -0.9.38-2 -- allow full opt flags again -- set ExclusiveArch to i386 for koji to only build i386 - -* Sat Jun 02 2007 Andreas Bierfert -0.9.38-1 -- version upgrade (#242087) -- fix menu problem (#220723) -- fix BR -- clean up desktop file section - -* Wed May 23 2007 Andreas Bierfert -0.9.37-1 -- version upgrade -- add BR for xcursor (#240648) -- add desktop entry for wineboot (#240683) -- add mime handler for msi files (#240682) -- minor cleanups - -* Wed May 02 2007 Andreas Bierfert -0.9.36-2 -- fix BR (#238774) -- fix some typos - -* Sat Apr 28 2007 Andreas Bierfert -0.9.36-1 -- version upgrade - -* Mon Apr 16 2007 Andreas Bierfert -0.9.35-1 -- version upgrade (#234766) -- sources file comments (#235232) -- smpflags work again (mentioned by Marcin Zajączkowski) -- drop arts sound driver package, as it is no longer part of wine - -* Sun Apr 01 2007 Andreas Bierfert -0.9.34-1 -- version upgrade - -* Sat Mar 17 2007 Andreas Bierfert -0.9.33-1 -- version upgrade - -* Sun Mar 04 2007 Andreas Bierfert -0.9.32-1 -- version upgrade - -* Sat Feb 17 2007 Andreas Bierfert -0.9.31-1 -- version upgrade - -* Wed Feb 07 2007 Andreas Bierfert -0.9.30-1 -- version upgrade - -* Thu Jan 11 2007 Andreas Bierfert -0.9.29-1 -- version upgrade - -* Mon Dec 18 2006 Andreas Bierfert -0.9.27-1 -- version upgrade (#220130) -- fix submenus (#216076) -- fix BR (#217338) - -* Thu Nov 16 2006 Andreas Bierfert -0.9.25-1 -- version upgrade -- fix init script (#213230) -- fix twain subpackage content (#213396) -- create wine submenu (#205024) - -* Sat Oct 28 2006 Andreas Bierfert -0.9.24-1 -- version upgrade - -* Tue Oct 17 2006 Andreas Bierfert -0.9.23-1 -- version upgrade - -* Sat Sep 30 2006 Andreas Bierfert -0.9.22-1 -- version upgrade - -* Sun Sep 17 2006 Andreas Bierfert -0.9.21-1 -- version upgrade -- own datadir/wine (#206403) -- do not include huge changelogs (#204302) - -* Mon Aug 28 2006 Andreas Bierfert -0.9.20-1 -- version upgrade - -* Mon Aug 21 2006 Andreas Bierfert -0.9.19-1 -- version upgrade - -* Thu Aug 03 2006 Andreas Bierfert -0.9.18-1 -- version upgrade - -* Mon Jul 10 2006 Andreas Bierfert -0.9.17-1 -- version upgrade - -* Thu Jun 29 2006 Andreas Bierfert -0.9.16-1 -- version upgrade -- rename wine to wine-core -- add meta package wine - -* Fri Jun 09 2006 Andreas Bierfert -0.9.15-1 -- version upgrade - -* Tue May 30 2006 Andreas Bierfert -0.9.14-1 -- version upgrade - -* Fri May 19 2006 Andreas Bierfert -0.9.13-2 -- enable dbus/hal support - -* Mon May 15 2006 Andreas Bierfert -0.9.13-1 -- version upgrade - -* Sat Apr 15 2006 Andreas Bierfert -0.9.12-1 -- fix rpath issues (#187429,#188905) -- version upgrade - -* Mon Apr 03 2006 Andreas Bierfert -0.9.11-1 -- version upgrade -- fix #187546 - -* Mon Mar 20 2006 Andreas Bierfert -0.9.10-2 -- bump for x86_64 tree inclusion \o/ - -* Thu Mar 16 2006 Andreas Bierfert -0.9.10-1 -- version upgrade -- drop ancient extra fonts - -* Fri Mar 03 2006 Andreas Bierfert -0.9.9-1 -- version upgrade - -* Thu Feb 16 2006 Andreas Bierfert -0.9.8-1 -- version upgrade - -* Thu Feb 09 2006 Andreas Bierfert -0.9.7-3 -- fix up tarball - -* Wed Feb 08 2006 Andreas Bierfert -0.9.7-2 -- fix up post/preun scriplets (#178954) - -* Thu Feb 02 2006 Andreas Bierfert -0.9.7-1 -- version upgrade - -* Thu Jan 19 2006 Andreas Bierfert -0.9.6-1 -- version upgrade -- drop wmf exploit patch (part of current version) - -* Sun Jan 08 2006 Andreas Bierfert -0.9.5-2 -- fix for CVE-2005-4560 - -* Fri Jan 06 2006 Andreas Bierfert -0.9.5-1 -- version upgrade -- fix #177089 (winemine desktop entry should be in Game not in System) -- fix cflags for compile -- test new BR - -* Wed Jan 04 2006 Andreas Bierfert -0.9.4-5 -- fix #176834 - -* Mon Jan 02 2006 Andreas Bierfert -0.9.4-4 -- add dist - -* Sun Jan 01 2006 Andreas Bierfert -0.9.4-3 -- use ExclusiveArch instead of ExcludeArch - -* Sun Jan 01 2006 Andreas Bierfert -0.9.4-2 -- own font directory -- fix devel summary -- add ExcludeArch x86_64 for now - -* Sat Dec 31 2005 Andreas Bierfert -0.9.4-1 -- version upgrade -- changed wine.init perissions to 0644 -- added autoconf BR - -* Mon Dec 12 2005 Andreas Bierfert -0.9.3-1 -- version upgrade - -* Thu Nov 24 2005 Andreas Bierfert -0.9.2-1 -- version upgrade - -* Thu Nov 17 2005 Andreas Bierfert -0.9.1-2 -- add fontforge BR and include generated fonts... - -* Sat Nov 12 2005 Andreas Bierfert -0.9.1-1 -- version upgrade -- move uninstaller and winecfg into wine main package... -- drop wine suite - -* Sat Oct 29 2005 Andreas Bierfert -0.9-3 -- s/libwine/wine/ - -* Thu Oct 27 2005 Andreas Bierfert -0.9-2 -- remerge some subpackages which should be defaults - -* Tue Oct 25 2005 Andreas Bierfert -0.9-1 -- upgrade to new version -- start splitting - -* Mon Oct 24 2005 Andreas Bierfert -0.0-1.20050930 -- add fedora readme -- switch to new (old) versioning sheme - -* Sat Oct 22 2005 Andreas Bierfert -20050930-3 -- add desktop files -- revisit summary and description -- consistant use of %%{buildroot} - -* Sat Oct 22 2005 Andreas Bierfert -20050930-2 -- some more spec tuneups... - -* Sat Oct 01 2005 Andreas Bierfert -20050930-1 -- version upgrade - -* Sun Sep 25 2005 Andreas Bierfert -20050925-1 -- upgrade to current cvs - -* Mon Sep 19 2005 Andreas Bierfert -20050830-1 -- version upgrade - -* Mon Sep 19 2005 Andreas Bierfert -20050524-2 -- fedorarized version - -* Mon May 30 2005 Vincent Béron 20050524-1fc3 -- Update to 20050524 -- Remove pdf documentation build as it's no more included in the main archive -- Workaround for generic.ppd installation - -* Tue Apr 19 2005 Vincent Béron 20050419-1fc3 -- Update to 20050419 - -* Thu Mar 10 2005 Vincent Béron 20050310-1fc3 -- Update to 20050310 - -* Sat Feb 12 2005 Vincent Béron 20050211-1fc3 -- Update to 20050211 - -* Tue Jan 11 2005 Vincent Béron 20050111-1fc3 -- Update to 20050111 - -* Wed Dec 1 2004 Vincent Béron 20041201-1fc3 -- Recompile for FC3 -- Update to 20041201 -- Small reorganization: - - use the generic ICU static libs name; - - no more wine group; - - use Wine's generated stdole32.tlb file; - - use Wine's generated fonts. - -* Wed Oct 20 2004 Vincent Béron 20041019-1fc2 -- Update to 20041019 - -* Wed Sep 15 2004 Vincent Béron 20040914-1fc2 -- Update to 20040914 - -* Sat Aug 14 2004 Vincent Béron 20040813-1fc2 -- Update to 20040813 - -* Sat Jul 17 2004 Vincent Béron 20040716-1fc2 -- Update to 20040716 - -* Fri Jun 25 2004 Vincent Béron 20040615-1fc2 -- Recompile for FC2 -- Backport from current CVS some fixes to the preloader to prevent - a segfault on startup -- Include a currently uncommitted patch from Alexandre Julliard regarding - further issues with the preloader - -* Sun Jun 20 2004 Vincent Béron 20040615-1fc1 -- Update to 20040615 -- Use of wineprefixcreate instead of old RedHat patches - -* Wed May 5 2004 Vincent Béron 20040505-1fc1 -- Update to 20040505 - -* Fri Apr 9 2004 Vincent Béron 20040408-1fc1 -- Update to 20040408 -- Change the handling of paths to DOS drives in the installation process - -* Wed Mar 17 2004 Vincent Béron 20040309-1fc1 -- Update to 20040309 -- Replaced winedefault.reg by wine.inf - -* Wed Feb 18 2004 Vincent Béron 20040213-1fc1 -- Update to 20040213 -- Moved Wine dlls back to %%{_libdir}/wine rather than %%{_libdir}/wine/wine - -* Sun Jan 25 2004 Vincent Béron 20040121-fc1 -- Update to 20040121 - -* Sat Dec 13 2003 Vincent Béron 20031212-fc1 -- Update to 20031212 - -* Tue Nov 18 2003 Vincent Béron 20031118-fc1 -- Update to 20031118 - -* Thu Oct 16 2003 Vincent Béron 20031016-1rh9 -- Update to 20031016 - -* Thu Sep 11 2003 Vincent Béron 20030911-1rh9 -- Fix of include location -- Better separation of run-time and development files -- Update to 20030911 - -* Wed Aug 13 2003 Vincent Béron 20030813-1rh9 -- Update to 20030813 - -* Wed Jul 09 2003 Vincent Béron 20030709-1rh9 -- Update to 20030709 - -* Wed Jun 18 2003 Vincent Béron 20030618-1rh9 -- Change the default C drive to ~/.wine/c, copied from /usr/share/wine - if non-existant (Thanks to Rudolf Kastl) -- Updated to 20030618 - -* Tue May 20 2003 Vincent Béron 20030508-1rh9 -- Adapted for RH9 - -* Thu May 08 2003 Vincent Béron 20030508-1 -- Add libraries definition files to devel package -- Update to 20030508 - -* Tue Apr 08 2003 Vincent Béron 20030408-1 -- Update to 20030408 - -* Tue Mar 18 2003 Vincent Béron 20030318-1 -- Update to 20030318 - -* Tue Mar 11 2003 Vincent Béron 20030219-2 -- Fix the symlinks in wine-c. - -* Wed Feb 19 2003 Vincent Béron 20030219-1 -- Update to 20030129 -- Various fixes in RPM build process - -* Fri Jan 17 2003 Vincent Béron 20030115-1 -- Update to 20030115 -- fix to build problem - -* Thu Nov 7 2002 Vincent Béron 20021031-1 -- Update to 20021031 -- Tweaks here and there - -* Wed Sep 4 2002 Bill Nottingham 20020605-2 -- fix docs (#72923) - -* Wed Jul 10 2002 Karsten Hopp 20020605-1 -- update -- remove obsolete part of redhat patch -- redo destdir patch -- redo kde patch -- redo defaultversion patch -- fix 'my_perl unknown' error -- work around name conflict with textutils 'expand' - -* Fri Jun 21 2002 Tim Powers -- automated rebuild - -* Thu May 23 2002 Tim Powers -- automated rebuild - -* Wed Mar 27 2002 Bernhard Rosenkraenzer 20020327-1 -- Fix wineshelllink (#61761) -- Fix up initscript (#53625) -- Clean up spec file -- Default to emulating Windoze ME rather than 3.1, nobody uses 3.1 - applications anymore -- Auto-generate default config if none exists (#61920) - -* Mon Mar 04 2002 Bernhard Rosenkraenzer 20020304-1 -- Assign gid 66 (closest to 666 [Microsoft number] we can get for a - system account ;) ) -- Don't use glibc private functions (__libc_fork) -- Update - -* Tue Feb 26 2002 Bernhard Rosenkraenzer 20020226-1 -- Fix bug #60250 -- Update - -* Thu Feb 21 2002 Bernhard Rosenkraenzer 20020221-1 -- Update -- Don't try to launch winesetup in winelauncher, we aren't shipping it - (#59621) - -* Sun Jan 27 2002 Bernhard Rosenkraenzer 20020127-1 -- Update -- Fix build in current environment - -* Wed Aug 22 2001 Bernhard Rosenkraenzer 20010822-1 -- Make sure the package can be cleanly uninstalled (#52007) -- Add build dependencies - -* Thu Jul 26 2001 Bernhard Rosenkraenzer 20010726-1 -- Fix -devel package group (#49989) -- remove internal CVS files -- chkconfig deletion should be in %%preun, not %%postun -- rename initscript ("Starting windows:" at startup does look off) - -* Thu May 03 2001 Bernhard Rosenkraenzer 20010503-1 -- Update -- generate HTML documentation rather than shipping plain docbook text - (#38453) - -* Sat Apr 14 2001 Bernhard Rosenkraenzer -- Update -- Update registry to mount "/" as drive "Z:", fixes winedbg (needs to be - accessible from 'doze drives) -- Don't create KDE 1.x style desktop entries in wineshelllink -- Be more tolerant on failing stuff in %%post - -* Thu Mar 1 2001 Bernhard Rosenkraenzer -- Update - -* Thu Feb 15 2001 Tim Powers -- fixed time.h build problems - -* Wed Jan 31 2001 Bernhard Rosenkraenzer -- Add a patch to handle .exe and .com file permissions the way we want them - -* Thu Jan 18 2001 Bernhard Rosenkraenzer -- Update -- Restore wine's ability to use a global config file, it was removed - in CVS for whatever reason -- Move libraries to %%{_libdir}/wine to prevent conflicts with libuser - (Bug #24202) -- Move include files to /usr/include/wine to prevent it from messing with - some autoconf scripts (some broken scripts assume they're running on windoze - if /usr/include/windows.h exists...) - -* Tue Dec 19 2000 Bernhard Rosenkraenzer -- Fix %%pre and %%postun scripts -- --enable-opengl, glibc 2.2 should be safe -- Update CVS - -* Mon Nov 20 2000 Bernhard Rosenkraenzer -- Update CVS -- Add a new (user) group wine that can write to the "C: drive" - %%{_datadir}/wine-c -- Fix up winedbg installation (registry entries) -- Add "Program Files/Common Files" subdirectory to the "C: drive", it's - referenced in the registry - -* Wed Oct 11 2000 Bernhard Rosenkraenzer -- update - -* Mon Aug 7 2000 Tim Powers -- rebuilt with new DGA - -* Tue Jul 25 2000 Bernhard Rosenkraenzer -- new snapshot -- fix compilation with gcc 2.96 - -* Fri Jul 21 2000 Bernhard Rosenkraenzer -- Move init script back -- new version -- move man pages to FHS locations - -* Thu Jul 13 2000 Bernhard Rosenkraenzer -- move initscript -- new snapshot - -* Fri Jun 23 2000 Bernhard Rosenkraenzer -- Start the initscript on startup - -* Tue May 9 2000 Bernhard Rosenkraenzer -- New version -- new feature: You can now launch wine by just running a windows .exe file - (./some.exe or just click on it in kfm, gmc and the likes) -- some spec file modifications - -* Sun Feb 13 2000 Bernhard Rosenkraenzer -- newer version -- Improve the system.ini file - all multimedia stuff should work now. - -* Wed Feb 2 2000 Bernhard Rosenkraenzer -- enable and fix up the urlmon/wininet patch -- add: autoexec.bat, config.sys, windows/win.ini windows/system.ini - windows/Profiles/Administrator -- allow i[456]86 arches -- add some system.ini configuration - -* Wed Feb 2 2000 Bernhard Rosenkraenzer -- update current -- add urlmon and wininet patches from Corel (don't apply them for now though) -- create empty shell*dll and winsock*dll files (as mentioned in the HOWTO) - -* Mon Jan 17 2000 Bernhard Rosenkraenzer -- update to current (lots of important fixes) -- Fix up the default wine.conf file (We really don't want it to look - for CD-ROMs in /cdrom!) -- create a "root filesystem" with everything required to run wine without - windows in %%{_datadir}/wine-c (drive c:) -- add RedHat file in /usr/doc/wine-%%{version} explaining the new directory - layout -- wine-devel requires wine - -* Tue Dec 14 1999 Preston Brown -- updated source for Powertools 6.2 -- better files list - -* Fri Jul 23 1999 Tim Powers -- updated source -- built for 6.1 - -* Tue Apr 13 1999 Michael Maher -- built package for 6.0 -- updated package and spec file - -* Mon Oct 26 1998 Preston Brown -- updated to 10/25/98 version. There is really no point in keeping the -- older one, it is full of bugs and the newer one has fewer. -- commented out building of texinfo manual, it is horrendously broken. - -* Mon Oct 12 1998 Michael Maher -- built package for 5.2 -- pressured by QA, not updating. - -* Fri May 22 1998 Cristian Gafton -- repackaged for PowerTools