mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-01-28 22:04:43 -08:00
Rewrite of patch system to simplify mainting large patchsets.
This commit is contained in:
commit
ef427399da
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.ok
|
||||
.depcache
|
93
README.md
93
README.md
@ -1,23 +1,84 @@
|
||||
wine-compholio
|
||||
==============
|
||||
|
||||
The Wine "Compholio" Edition repository includes a variety of patches for Wine to run common Windows applications under Linux.
|
||||
The Wine "Compholio" Edition repository includes a variety of patches for
|
||||
Wine to run common Windows applications under Linux.
|
||||
|
||||
Current patches include:
|
||||
These patches fix the following Wine bugs:
|
||||
|
||||
* Support for TransmitFile ([Wine Bug #5048](http://bugs.winehq.org/show_bug.cgi?id=5048 "Multiple applications and games need support for ws2_32 SIO_GET_EXTENSION_FUNCTION_POINTER TransmitFile (WSAID_TRANSMITFILE)"))
|
||||
* Support for Junction Points ([Wine Bug #12401](http://bugs.winehq.org/show_bug.cgi?id=12401 "Support junction points, i.e. DeviceIoCtl(FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT)"))
|
||||
* GetSecurityInfo returns NULL DACL for process object ([Wine Bug #15980](http://bugs.winehq.org/show_bug.cgi?id=15980 "Rhapsody 2 crashes on startup (GetSecurityInfo returns NULL DACL for process object)"))
|
||||
* Workaround for TransactNamedPipe not being supported ([Wine Bug #17273](http://bugs.winehq.org/show_bug.cgi?id=17273 "Many apps and games need SetNamedPipeHandleState implementation (support for named pipe message mode)(FireFox+Flash, Win8/NET 4.x SDK/vcrun2012, WiX installers)"))
|
||||
* Support for process ACLs ([Wine Bug #22006](http://bugs.winehq.org/show_bug.cgi?id=22006 "OpenProcess does not enforce ACL"))
|
||||
* Return correct IMediaSeeking stream positions in quartz ([Wine Bug #23174](http://bugs.winehq.org/show_bug.cgi?id=23174 "Fallout 3: Diologue and Video/sound issues"))
|
||||
* Add implementation of WTSEnumerateProcessesW ([Wine Bug #29903](http://bugs.winehq.org/show_bug.cgi?id=29903 "Some Microsoft debuggers fail to enumerate processes due to wtsapi32.WTSEnumerateProcessesW() being a stub (Microsoft Visual Studio 2005, DbgCLR from .NET 2.0 SDK)"))
|
||||
* Fix race conditions and deadlocks in strmbase/quartz ([Wine Bug #31566](http://bugs.winehq.org/show_bug.cgi?id=31566 "Fallout 3: regression causes block at critical section when radio is enabled"))
|
||||
* Support for stored file ACLs ([Wine Bug #31858](http://bugs.winehq.org/show_bug.cgi?id=31858 "Netflix on Firefox fails with Internet Connection Problem when loading bar is at 99%"))
|
||||
* Implement an Arial replacement font ([Wine Bug #32323](http://bugs.winehq.org/show_bug.cgi?id=32323 "Netflix (Silverlight 4.x) and several .NET Framework 3.x/4.0 WPF apps require either Arial or Verdana to be installed"))
|
||||
* Support for interface change notifications ([Wine Bug #32328](http://bugs.winehq.org/show_bug.cgi?id=32328 "Many .NET and Silverlight applications require SIO_ADDRESS_LIST_CHANGE for interface change notifications"))
|
||||
* Support for inherited file ACLs ([Wine Bug #34406](http://bugs.winehq.org/show_bug.cgi?id=34406 "Finale Notepad 2012 doesn't copy/create user files on program start"))
|
||||
|
||||
Besides that the following additional changes are included:
|
||||
|
||||
* Support for interface change notifications ([Wine Bug #32328](http://bugs.winehq.org/show_bug.cgi?id=32328))
|
||||
* Support for stored file ACLs ([Wine Bug #31858](http://bugs.winehq.org/show_bug.cgi?id=31858))
|
||||
* Support for inherited file ACLs ([Wine Bug #34406](http://bugs.winehq.org/show_bug.cgi?id=34406))
|
||||
* Support for Junction Points ([Wine Bug #12401](http://bugs.winehq.org/show_bug.cgi?id=12401))
|
||||
* Support for TransmitFile ([Wine Bug #5048](http://bugs.winehq.org/show_bug.cgi?id=5048))
|
||||
* Support for GetVolumePathName
|
||||
* Implement an Arial replacement font ([Wine Bug #32323](http://bugs.winehq.org/show_bug.cgi?id=32323))
|
||||
* Workaround for TransactNamedPipe not being supported ([Wine Bug #17273](http://bugs.winehq.org/show_bug.cgi?id=17273))
|
||||
* Fix incorrect scaling for DECIMAL values in VarDecAdd ([Wine Bug #31269](http://bugs.winehq.org/show_bug.cgi?id=31269))
|
||||
* Return NULL-terminated list of arguments in CommandLineToArgvW ([Wine Bug #22829](http://bugs.winehq.org/show_bug.cgi?id=22829))
|
||||
* XEMBED support for embedding Wine windows inside Linux applications
|
||||
* Reduced SetTimer minimum value from 15 ms to 5 ms (improves Silverlight framerates)
|
||||
* Lockfree algorithm for filedescriptor cache (improves file access speed)
|
||||
* Workaround for shlwapi URLs with relative paths
|
||||
* Support for PulseAudio backend for audio
|
||||
* Other Pipelight specific enhancements
|
||||
* Reduced SetTimer minimum value from 15 ms to 5 ms (improves Silverlight framerates)
|
||||
* Support for GetVolumePathName
|
||||
* Support for PulseAudio backend for audio
|
||||
* Workaround for shlwapi URLs with relative paths
|
||||
* XEMBED support for embedding Wine windows inside Linux applications
|
||||
|
||||
### Compiling wine-compholio
|
||||
|
||||
In order to wine-compholio, please use the recommended Makefile based approach which
|
||||
will automatically decide whether to use 'git apply' or 'gitapply.sh'. The following
|
||||
instructions (based on the [Gentoo Wiki](https://wiki.gentoo.org/wiki/Netflix/Pipelight#Compiling_manually))
|
||||
will give a short overview how to compile wine-compholio, but of course not explain
|
||||
details. Make sure to install all required wine dependencies before proceeding.
|
||||
|
||||
As the first step please grab the latest Wine source:
|
||||
```bash
|
||||
wget http://prdownloads.sourceforge.net/wine/wine-1.7.22.tar.bz2
|
||||
wget https://github.com/compholio/wine-compholio-daily/archive/v1.7.22.tar.gz
|
||||
```
|
||||
Extract the archives:
|
||||
```bash
|
||||
tar xvjf wine-1*.tar.bz2
|
||||
cd wine-1*
|
||||
tar xvzf ../v1.7.22.tar.gz --strip-components 1
|
||||
```
|
||||
And apply the patches:
|
||||
```bash
|
||||
make -C ./patches DESTDIR=$(pwd) install
|
||||
```
|
||||
Afterwards run configure (you can also specify a prefix if you don't want to install
|
||||
wine-compholio system-wide):
|
||||
```bash
|
||||
./configure --with-xattr
|
||||
```
|
||||
Before you continue you should make sure that ./configure doesn't show any warnings
|
||||
(look at the end of the output). If there are any warnings, this most likely means
|
||||
that you're missing some important header files. Install them and repeat the ./configure
|
||||
step until all problems are fixed.
|
||||
|
||||
Afterwards compile it (and grab a cup of coffee):
|
||||
```bash
|
||||
make
|
||||
```
|
||||
And install it (you only need sudo for a system-wide installation):
|
||||
```bash
|
||||
sudo make install
|
||||
```
|
||||
|
||||
### Excluding patches
|
||||
|
||||
It is also possible to apply only a subset of the patches, for example if you're compiling
|
||||
for a distribution where PulseAudio is not installed, or if you just don't like a specific
|
||||
patchset. Please note that some patchsets depend on each other, and requesting an impossible
|
||||
situation might result in a failure to apply all patches.
|
||||
|
||||
Lets assume you want to exclude the patchset in directory DIRNAME, then just invoke make like that:
|
||||
```bash
|
||||
make -C ./patches DESTDIR=$(pwd) install -W DIRNAME.ok
|
||||
```
|
||||
|
1
debian/changelog
vendored
1
debian/changelog
vendored
@ -1,4 +1,5 @@
|
||||
wine-compholio (1.7.23) UNRELEASED; urgency=low
|
||||
* Rewrite of patch system to simplify mainting large patchsets.
|
||||
* Fix failing Junction Point test.
|
||||
* Fix possible race conditions in strmbase/quartz.
|
||||
* Fix race condition between EndOfStream and Pause.
|
||||
|
112
debian/tools/gitapply.sh
vendored
112
debian/tools/gitapply.sh
vendored
@ -1,4 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Wrapper to apply binary patches without git.
|
||||
#
|
||||
# Copyright (C) 2014 Sebastian Lackner
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
# Setup parser variables
|
||||
nogit=0
|
||||
@ -41,6 +60,12 @@ usage()
|
||||
echo ""
|
||||
}
|
||||
|
||||
gitsha1()
|
||||
{
|
||||
echo -en "blob $(du -b "$1" | cut -f1)\x00" | cat - "$1" | sha1sum | cut -d' ' -f1
|
||||
}
|
||||
|
||||
|
||||
# Parse environment variables
|
||||
while [[ $# > 0 ]]; do
|
||||
cmd="$1"; shift
|
||||
@ -62,7 +87,8 @@ while [[ $# > 0 ]]; do
|
||||
;;
|
||||
|
||||
-R)
|
||||
abort "Reverse applying patches not supported yet with this patch tool."
|
||||
echo "Reverse applying patches not supported yet with this tool." >&2
|
||||
exit 1
|
||||
;;
|
||||
|
||||
--help)
|
||||
@ -82,10 +108,19 @@ if [ "$nogit" -eq 0 ] && command -v git >/dev/null 2>&1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check for missing depdencies
|
||||
for dependency in awk chmod cut dd du gzip hexdump patch sha1sum; do
|
||||
if ! command -v "$dependency" >/dev/null 2>&1; then
|
||||
echo "Missing dependency: $dependency - please install this program and try again." >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Detect BSD
|
||||
if gzip -V 2>&1 | grep "BSD" &> /dev/null; then
|
||||
echo "This script is not compatible with *BSD utilities." >&2
|
||||
echo "Please install git, which provides the same functionality and will be used instead." >&2
|
||||
exit 1;
|
||||
echo "This script is not compatible with *BSD utilities. Please install git," >&2
|
||||
echo "which provides the same functionality and will be used instead." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Decode base85 git data, prepend with a gzip header
|
||||
@ -194,7 +229,7 @@ while IFS= read -r line; do
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
|
||||
elif [[ "$line" =~ ^old\ mode ]] || [[ "$line" =~ ^deleted\ file\ mode ]]; then
|
||||
elif [ "${line:0:8}" == "old mode" ] || [ "${line:0:17}" == "deleted file mode" ]; then
|
||||
# ignore
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
@ -204,31 +239,25 @@ while IFS= read -r line; do
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
|
||||
elif [[ "$line" =~ ^new\ mode ]] || [[ "$line" =~ ^new\ file\ mode ]]; then
|
||||
patch_errors+=("$lineno: unable to parse header line '$line'")
|
||||
elif [ "${line:0:8}" == "new mode" ] || [ "${line:0:13}" == "new file mode" ]; then
|
||||
patch_errors+=("$lineno: Unable to parse header line '$line'.")
|
||||
patch_invalid=1
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
|
||||
elif [[ "$line" =~ ^copy\ from ]] || [[ "$line" =~ ^copy\ to ]]; then
|
||||
patch_errors+=("$lineno: copy header not implemented yet")
|
||||
elif [ "${line:0:9}" == "copy from" ] || [ "${line:0:7}" == "copy to" ]; then
|
||||
patch_errors+=("$lineno: Copy header not implemented yet.")
|
||||
patch_invalid=1
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
|
||||
elif [[ "$line" =~ ^rename\ old ]] || [[ "$line" =~ ^rename\ from ]]; then
|
||||
patch_errors+=("$lineno: rename header not implemented yet")
|
||||
elif [ "${line:0:7}" == "rename " ]; then
|
||||
patch_errors+=("$lineno: Patch rename header not implemented yet.")
|
||||
patch_invalid=1
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
|
||||
elif [[ "$line" =~ ^rename\ new ]] || [[ "$line" =~ ^rename\ to ]]; then
|
||||
patch_errors+=("$lineno: rename header not implemented yet")
|
||||
patch_invalid=1
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
|
||||
elif [[ "$line" =~ ^similarity\ index ]] || [[ "$line" =~ ^dissimilarity\ index ]]; then
|
||||
elif [ "${line:0:16}" == "similarity index" ] || [ "${line:0:19}" == "dissimilarity index" ]; then
|
||||
# ignore
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
@ -239,8 +268,8 @@ while IFS= read -r line; do
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
|
||||
elif [[ "$line" =~ ^index\ ]]; then
|
||||
patch_errors+=("$lineno: unable to parse header line '$line'")
|
||||
elif [ "${line:0:6}" == "index " ]; then
|
||||
patch_errors+=("$lineno: Unable to parse header line '$line'.")
|
||||
patch_invalid=1
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
@ -250,12 +279,12 @@ while IFS= read -r line; do
|
||||
if [[ "$patch_oldname" =~ ^a/(.*)$ ]]; then
|
||||
patch_oldname="${BASH_REMATCH[1]}"
|
||||
elif [ "$patch_oldname" != "/dev/null" ]; then
|
||||
abort "old name doesn't start with a/."
|
||||
abort "Old name doesn't start with a/."
|
||||
fi
|
||||
if [[ "$patch_newname" =~ ^b/(.*)$ ]]; then
|
||||
patch_newname="${BASH_REMATCH[1]}"
|
||||
elif [ "$patch_newname" != "/dev/null" ]; then
|
||||
abort "new name doesn't start with b/."
|
||||
abort "New name doesn't start with b/."
|
||||
fi
|
||||
|
||||
patch_mode=2
|
||||
@ -269,12 +298,12 @@ while IFS= read -r line; do
|
||||
if [[ "$line" == "GIT binary patch" ]]; then
|
||||
|
||||
if [ -z "$patch_oldsha1" ] || [ -z "$patch_newsha1" ]; then
|
||||
patch_errors+=("$lineno: missing index header, sha1 sums required for binary patch")
|
||||
patch_errors+=("$lineno: Missing index header, sha1 sums required for binary patch.")
|
||||
patch_invalid=1
|
||||
fi
|
||||
|
||||
if [ "$patch_oldname" != "$patch_newname" ]; then
|
||||
patch_errors+=("$lineno: stripped old- and new name doesn't match")
|
||||
patch_errors+=("$lineno: Stripped old- and new name doesn't match for binary patch.")
|
||||
patch_invalid=1
|
||||
fi
|
||||
|
||||
@ -286,7 +315,7 @@ while IFS= read -r line; do
|
||||
patch_mode=100
|
||||
continue
|
||||
|
||||
elif [[ "$line" =~ ^@@\ - ]]; then
|
||||
elif [ "${line:0:4}" == "@@ -" ]; then
|
||||
# We count the number of lines added/removed for informational purposes
|
||||
patch_total_add=0
|
||||
patch_total_rem=0
|
||||
@ -294,10 +323,10 @@ while IFS= read -r line; do
|
||||
patch_mode=200
|
||||
# fall-through
|
||||
|
||||
elif [[ "$line" =~ ^diff\ --git\ ]]; then
|
||||
elif [ "${line:0:11}" == "diff --git " ]; then
|
||||
|
||||
if [ "$patch_oldname" != "$patch_newname" ]; then
|
||||
patch_errors+=("$lineno: stripped old- and new name doesn't match")
|
||||
patch_errors+=("$lineno: Stripped old- and new name doesn't match.")
|
||||
patch_invalid=1
|
||||
fi
|
||||
|
||||
@ -328,7 +357,7 @@ while IFS= read -r line; do
|
||||
# Check shasum if its not a patch creating a new file
|
||||
if [ "$patch_oldsha1" != "0000000000000000000000000000000000000000" ] || [ "$binary_patch_type" == "delta" ] || [ -f "$patch_oldname" ]; then
|
||||
if [ -f "$patch_oldname" ]; then
|
||||
sha=$(echo -en "blob $(du -b "$patch_oldname" | cut -f1)\x00" | cat - "$patch_oldname" | sha1sum | cut -d' ' -f1)
|
||||
sha=$(gitsha1 "$patch_oldname")
|
||||
else
|
||||
sha="0000000000000000000000000000000000000000"
|
||||
fi
|
||||
@ -403,13 +432,13 @@ while IFS= read -r line; do
|
||||
while read cmd arg1 arg2; do
|
||||
if [ "$cmd" == "S" ]; then
|
||||
binary_patch_destsize="$arg2"
|
||||
if [ "$arg1" -ne "$(du -b "$patch_oldname" | cut -f 1)" ]; then break; fi
|
||||
[ "$arg1" -eq "$(du -b "$patch_oldname" | cut -f 1)" ] || break
|
||||
|
||||
elif [ "$cmd" == "1" ]; then
|
||||
if ! dd if="$patch_oldname" bs=1 skip="$arg1" count="$arg2" >> "$decoded_tmpfile" 2>/dev/null; then break; fi
|
||||
dd if="$patch_oldname" bs=1 skip="$arg1" count="$arg2" >> "$decoded_tmpfile" 2>/dev/null || break
|
||||
|
||||
elif [ "$cmd" == "2" ]; then
|
||||
if ! dd if="$patch_tmpfile" bs=1 skip="$arg1" count="$arg2" >> "$decoded_tmpfile" 2>/dev/null; then break; fi
|
||||
dd if="$patch_tmpfile" bs=1 skip="$arg1" count="$arg2" >> "$decoded_tmpfile" 2>/dev/null || break
|
||||
|
||||
elif [ "$cmd" == "E" ]; then
|
||||
binary_patch_complete=1
|
||||
@ -432,7 +461,7 @@ while IFS= read -r line; do
|
||||
fi
|
||||
|
||||
# Check shasum if its not a patch creating a new file
|
||||
sha=$(echo -en "blob $(du -b "$patch_tmpfile" | cut -f1)\x00" | cat - "$patch_tmpfile" | sha1sum | cut -d' ' -f1)
|
||||
sha=$(gitsha1 "$patch_tmpfile")
|
||||
if [ "$patch_newsha1" != "$sha" ]; then
|
||||
echo "$lineno: Expected $patch_newsha1" >&2
|
||||
echo "$lineno: Got $sha" >&2
|
||||
@ -440,7 +469,7 @@ while IFS= read -r line; do
|
||||
fi
|
||||
|
||||
if ! cp "$patch_tmpfile" "$patch_oldname"; then
|
||||
abort "Unable to replace original file"
|
||||
abort "Unable to replace original file."
|
||||
fi
|
||||
if [ ! -z "$patch_filemode" ]; then
|
||||
chmod "${patch_filemode: -3}" "$patch_oldname" # we ignore failures for now
|
||||
@ -471,6 +500,11 @@ while IFS= read -r line; do
|
||||
patch_mode=201
|
||||
continue
|
||||
|
||||
elif [ "${line:0:2}" == "\\ " ]; then
|
||||
# ignore
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
continue
|
||||
|
||||
else
|
||||
echo "patching $patch_newname"
|
||||
|
||||
@ -489,23 +523,23 @@ while IFS= read -r line; do
|
||||
# These lines are part of a hunk, append it
|
||||
echo "$line" >> "$patch_tmpfile"
|
||||
|
||||
if [ "$hunk_src_lines" -gt 0 ] && [ "$hunk_dst_lines" -gt 0 ] && [[ "$line" =~ ^\ ]]; then
|
||||
if [ "${line:0:1}" == " " ] && [ "$hunk_src_lines" -gt 0 ] && [ "$hunk_dst_lines" -gt 0 ]; then
|
||||
(( hunk_src_lines-- ))
|
||||
(( hunk_dst_lines-- ))
|
||||
|
||||
elif [ "$hunk_src_lines" -gt 0 ] && [[ "$line" =~ ^- ]]; then
|
||||
elif [ "${line:0:1}" == "-" ] && [ "$hunk_src_lines" -gt 0 ]; then
|
||||
(( hunk_src_lines-- ))
|
||||
(( patch_total_rem++ ))
|
||||
|
||||
elif [ "$hunk_dst_lines" -gt 0 ] && [[ "$line" =~ ^\+ ]]; then
|
||||
elif [ "${line:0:1}" == "+" ] && [ "$hunk_dst_lines" -gt 0 ]; then
|
||||
(( hunk_dst_lines-- ))
|
||||
(( patch_total_add++ ))
|
||||
|
||||
elif [[ "$line" =~ ^\\\ ]]; then
|
||||
elif [ "${line:0:2}" == "\\ " ]; then
|
||||
continue # ignore "\\ No newline ..."
|
||||
|
||||
else
|
||||
abort "Unexpected line in hunk"
|
||||
abort "Unexpected line in hunk."
|
||||
fi
|
||||
|
||||
# If it was the last line of this hunk then go back to mode 200
|
||||
@ -544,7 +578,7 @@ while IFS= read -r line; do
|
||||
patch_mode=1
|
||||
continue
|
||||
|
||||
elif [[ "$line" =~ ^@@\ - ]] || [[ "$line" =~ ^---\ ]] || [[ "$line" =~ ^\+\+\+\ ]]; then
|
||||
elif [ "${line:0:4}" == "@@ -" ] || [ "${line:0:4}" == "--- " ] || [ "${line:0:4}" == "+++ " ]; then
|
||||
abort "Patch corrupted or not created with git."
|
||||
fi
|
||||
fi
|
||||
|
@ -1,21 +1,5 @@
|
||||
#!/bin/sh
|
||||
PATCH_DATA="";
|
||||
|
||||
for FILE in patches/*/*.def; do
|
||||
UUID=$(echo "${FILE}" | sed -e 's|^.*/||g' -e 's|\.def$||g');
|
||||
REVISION=$(cat "${FILE}" | sed -n 's|Revision: \(.*\)|\1|p');
|
||||
AUTHOR=$(cat "${FILE}" | sed -n 's|Author: \(.*\)|\1|p');
|
||||
TITLE=$(cat "${FILE}" | sed -n 's|Title: \(.*\)|\1|p');
|
||||
if [ "${AUTHOR}" = "" ] && [ "${TITLE}" = "" ]; then
|
||||
continue;
|
||||
fi
|
||||
if [ "${PATCH_DATA}" != "" ]; then
|
||||
PATCH_DATA="${PATCH_DATA}
|
||||
";
|
||||
fi
|
||||
PATCH_DATA="${PATCH_DATA}+ { \"${UUID}:${REVISION}\", \"${AUTHOR}\", \"${TITLE}\" },";
|
||||
done
|
||||
|
||||
PATCH_DATA=$(cat);
|
||||
PATCH_LINES=$(echo "${PATCH_DATA}" | wc -l);
|
||||
PATCH_LINES=$((${PATCH_LINES}+20));
|
||||
|
570
debian/tools/patchupdate.py
vendored
Executable file
570
debian/tools/patchupdate.py
vendored
Executable file
@ -0,0 +1,570 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# Automatic patch dependency checker and Makefile/README.md generator.
|
||||
#
|
||||
# Copyright (C) 2014 Sebastian Lackner
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
from multiprocessing import Pool
|
||||
from xml.dom import minidom
|
||||
import contextlib
|
||||
import hashlib
|
||||
import itertools
|
||||
import os
|
||||
import patchutils
|
||||
import pickle
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import textwrap
|
||||
import urllib
|
||||
|
||||
# Cached information to speed up patch dependency checks
|
||||
cached_patch_result = {}
|
||||
|
||||
class PatchUpdaterError(RuntimeError):
|
||||
"""Failed to update patches."""
|
||||
pass
|
||||
|
||||
class AuthorInfo(object):
|
||||
def __init__(self):
|
||||
self.author = ""
|
||||
self.subject = ""
|
||||
self.revision = ""
|
||||
|
||||
class PatchSet(object):
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.authors = []
|
||||
self.fixes = []
|
||||
self.changes = []
|
||||
|
||||
self.files = []
|
||||
self.patches = []
|
||||
self.modified_files = set()
|
||||
self.depends = set()
|
||||
|
||||
self.verify_depends = set()
|
||||
self.verify_time = None
|
||||
|
||||
def download(url):
|
||||
"""Open a specific URL and return the content."""
|
||||
with contextlib.closing(urllib.urlopen(url)) as fp:
|
||||
return fp.read()
|
||||
|
||||
def read_patchsets(directory):
|
||||
"""Read information about all patchsets in a given directory."""
|
||||
|
||||
def _iter_kv_from_file(filename):
|
||||
with open(filename) as fp:
|
||||
for line in fp:
|
||||
if line.startswith("#"):
|
||||
continue
|
||||
tmp = line.split(":", 1)
|
||||
if len(tmp) != 2:
|
||||
yield None, None
|
||||
else:
|
||||
yield tmp[0].lower(), tmp[1].strip()
|
||||
|
||||
unique_id = itertools.count()
|
||||
all_patches = {}
|
||||
name_to_id = {}
|
||||
all_bugs = []
|
||||
|
||||
# Read in sorted order (to ensure created Makefile doesn't change too much)
|
||||
for name in sorted(os.listdir(directory)):
|
||||
if name in [".", ".."]: continue
|
||||
subdirectory = os.path.join(directory, name)
|
||||
if not os.path.isdir(subdirectory): continue
|
||||
|
||||
patch = PatchSet(name)
|
||||
|
||||
# Enumerate .patch files in the given directory, enumerate individual patches and affected files
|
||||
for f in sorted(os.listdir(subdirectory)):
|
||||
if not f.endswith(".patch") or not os.path.isfile(os.path.join(subdirectory, f)):
|
||||
continue
|
||||
patch.files.append(f)
|
||||
for p in patchutils.read_patch(os.path.join(subdirectory, f)):
|
||||
patch.patches.append(p)
|
||||
patch.modified_files.add(p.modified_file)
|
||||
|
||||
# No single patch within this directory, ignore it
|
||||
if len(patch.patches) == 0:
|
||||
del patch
|
||||
continue
|
||||
|
||||
i = next(unique_id)
|
||||
all_patches[i] = patch
|
||||
name_to_id[name] = i
|
||||
|
||||
# Now read the definition files in a second step
|
||||
for i, patch in all_patches.iteritems():
|
||||
deffile = os.path.join(os.path.join(directory, patch.name), "definition")
|
||||
|
||||
if not os.path.isfile(deffile):
|
||||
raise PatchUpdaterError("Missing definition file %s" % deffile)
|
||||
|
||||
info = AuthorInfo()
|
||||
|
||||
for key, val in _iter_kv_from_file(deffile):
|
||||
if key is None:
|
||||
if len(info.author) and len(info.subject) and len(info.revision):
|
||||
patch.authors.append(info)
|
||||
info = AuthorInfo()
|
||||
continue
|
||||
|
||||
if key == "author":
|
||||
if len(info.author): info.author += ", "
|
||||
info.author += val
|
||||
|
||||
elif key == "subject" or key == "title":
|
||||
if len(info.subject): info.subject += " "
|
||||
info.subject += val
|
||||
|
||||
elif key == "revision":
|
||||
if len(info.revision): info.revision += ", "
|
||||
info.revision += val
|
||||
|
||||
elif key == "fixes":
|
||||
r = re.match("^[0-9]+$", val)
|
||||
if r:
|
||||
bugid = int(val)
|
||||
patch.fixes.append((bugid, None, None))
|
||||
all_bugs.append(bugid)
|
||||
continue
|
||||
|
||||
r = re.match("^\\[ *([0-9]+) *\\](.*)$", val)
|
||||
if r:
|
||||
bugid, description = int(r.group(1)), r.group(2).strip()
|
||||
patch.fixes.append((bugid, None, description))
|
||||
all_bugs.append(bugid)
|
||||
continue
|
||||
|
||||
patch.fixes.append((None, None, val))
|
||||
|
||||
elif key == "depends":
|
||||
if not name_to_id.has_key(val):
|
||||
raise PatchUpdaterError("Definition file %s references unknown dependency %s" % (deffile, val))
|
||||
patch.depends.add(name_to_id[val])
|
||||
|
||||
else:
|
||||
print "WARNING: Ignoring unknown command in definition file %s: %s" % (deffile, line)
|
||||
|
||||
if len(info.author) and len(info.subject) and len(info.revision):
|
||||
patch.authors.append(info)
|
||||
|
||||
# In a third step query information for the patches from Wine bugzilla
|
||||
pool = Pool(8)
|
||||
|
||||
bug_short_desc = {None:None}
|
||||
for bugid, data in zip(all_bugs, pool.map(download, ["http://bugs.winehq.org/show_bug.cgi?id=%d&ctype=xml&field=short_desc" % bugid for bugid in all_bugs])):
|
||||
bug_short_desc[bugid] = minidom.parseString(data).getElementsByTagName('short_desc')[0].firstChild.data
|
||||
|
||||
# The following command triggers a (harmless) python bug, which would confuse the user:
|
||||
# > Exception RuntimeError: RuntimeError('cannot join current thread',) in <Finalize object, dead> ignored
|
||||
# To avoid that just keep the pool until it destroyed by the garbage collector.
|
||||
# pool.close()
|
||||
|
||||
for i, patch in all_patches.iteritems():
|
||||
patch.fixes = [(bugid, bug_short_desc[bugid], description) for bugid, dummy, description in patch.fixes]
|
||||
|
||||
return all_patches
|
||||
|
||||
def causal_time_combine(a, b):
|
||||
"""Combines two timestamps into a new one."""
|
||||
return [max(a, b) for a, b in zip(a, b)]
|
||||
|
||||
def causal_time_smaller(a, b):
|
||||
"""Checks if timestamp a is smaller than timestamp b."""
|
||||
return all([i <= j for i, j in zip(a,b)]) and any([i < j for i, j in zip(a,b)])
|
||||
|
||||
def causal_time_relation(all_patches, indices):
|
||||
"""Checks if the patches with given indices are applied in a very specific order."""
|
||||
|
||||
def _pairs(a):
|
||||
for i, j in enumerate(a):
|
||||
for k in a[i+1:]:
|
||||
yield (j, k)
|
||||
|
||||
for i, j in _pairs(indices):
|
||||
if not (causal_time_smaller(all_patches[i].verify_time, all_patches[j].verify_time) or \
|
||||
causal_time_smaller(all_patches[j].verify_time, all_patches[i].verify_time)):
|
||||
return False
|
||||
return True
|
||||
|
||||
def causal_time_permutations(all_patches, indices, filename):
|
||||
"""Iterate over all possible permutations of patches affecting
|
||||
a specific file, which are compatible with dependencies."""
|
||||
for perm in itertools.permutations(indices):
|
||||
for i, j in zip(perm[:-1], perm[1:]):
|
||||
if causal_time_smaller(all_patches[j].verify_time, all_patches[i].verify_time):
|
||||
break
|
||||
else:
|
||||
selected_patches = []
|
||||
for i in perm:
|
||||
selected_patches += [patch for patch in all_patches[i].patches if patch.modified_file == filename]
|
||||
yield selected_patches
|
||||
|
||||
def contains_binary_patch(all_patches, indices, filename):
|
||||
"""Checks if any patch with given indices affecting filename is a binary patch."""
|
||||
for i in indices:
|
||||
for patch in all_patches[i].patches:
|
||||
if patch.modified_file == filename and patch.is_binary():
|
||||
return True
|
||||
return False
|
||||
|
||||
def load_patch_cache():
|
||||
"""Load dictionary for cached patch dependency tests into cached_patch_result."""
|
||||
global cached_patch_result
|
||||
try:
|
||||
with open("./.depcache") as fp:
|
||||
cached_patch_result = pickle.load(fp)
|
||||
except IOError:
|
||||
cached_patch_result = {}
|
||||
|
||||
def save_patch_cache():
|
||||
"""Save dictionary for cached patch depdency tests."""
|
||||
with open("./.depcache", "wb") as fp:
|
||||
pickle.dump(cached_patch_result, fp, pickle.HIGHEST_PROTOCOL)
|
||||
|
||||
def verify_patch_order(all_patches, indices, filename):
|
||||
"""Checks if the dependencies are defined correctly by applying on the patches on a copy from the git tree."""
|
||||
global cached_patch_result
|
||||
|
||||
# If one of patches is a binary patch, then we cannot / won't verify it - require dependencies in this case
|
||||
if contains_binary_patch(all_patches, indices, filename):
|
||||
if not causal_time_relation(all_patches, indices):
|
||||
raise PatchUpdaterError("Because of binary patch modifying file %s the following patches need explicit dependencies: %s" %
|
||||
(filename, ", ".join([all_patches[i].name for i in indices])))
|
||||
return
|
||||
|
||||
# Grab original file from the wine git repository - please note we grab from origin/master, not the current branch
|
||||
try:
|
||||
with open(os.devnull, 'w') as devnull:
|
||||
original_content = subprocess.check_output(["git", "show", "origin/master:%s" % filename],
|
||||
cwd="./debian/tools/wine", stderr=devnull)
|
||||
except subprocess.CalledProcessError as e:
|
||||
if e.returncode != 128: raise # not found
|
||||
original_content = ""
|
||||
|
||||
# Calculate hash of original content
|
||||
original_content_hash = hashlib.sha256(original_content).digest()
|
||||
|
||||
# Check for possible ways to apply the patch
|
||||
failed_to_apply = False
|
||||
last_result_hash = None
|
||||
for patches in causal_time_permutations(all_patches, indices, filename):
|
||||
|
||||
# Calculate unique hash based on the original content and the order in which the patches are applied
|
||||
m = hashlib.sha256()
|
||||
m.update(original_content_hash)
|
||||
for patch in patches:
|
||||
m.update(patch.hash())
|
||||
unique_hash = m.digest()
|
||||
|
||||
# Fast path -> we know that it applies properly
|
||||
if cached_patch_result.has_key(unique_hash):
|
||||
result_hash = cached_patch_result[unique_hash]
|
||||
|
||||
else:
|
||||
# Apply the patches (without fuzz)
|
||||
try:
|
||||
content = patchutils.apply_patch(original_content, patches, fuzz=0)
|
||||
except patchutils.PatchApplyError:
|
||||
if last_result_hash is not None:
|
||||
break
|
||||
# We failed to apply the patches, but don't know if it works at all - continue
|
||||
failed_to_apply = True
|
||||
continue
|
||||
|
||||
# Get hash of resulting file and add to cache
|
||||
result_hash = hashlib.sha256(content).digest()
|
||||
cached_patch_result[unique_hash] = result_hash
|
||||
|
||||
# First time we got a successful result
|
||||
if last_result_hash is None:
|
||||
last_result_hash = result_hash
|
||||
if failed_to_apply: break
|
||||
# All the other times: hash to match with previous attempt
|
||||
elif last_result_hash != result_hash:
|
||||
last_result_hash = None
|
||||
break
|
||||
|
||||
if failed_to_apply and last_result_hash is None:
|
||||
raise PatchUpdaterError("Changes to file %s don't apply on git source tree: %s" %
|
||||
(filename, ", ".join([all_patches[i].name for i in indices])))
|
||||
|
||||
elif failed_to_apply or last_result_hash is None:
|
||||
raise PatchUpdaterError("Depending on the order some changes to file %s dont't apply / lead to different results: %s" %
|
||||
(filename, ", ".join([all_patches[i].name for i in indices])))
|
||||
|
||||
else:
|
||||
assert len(last_result_hash) == 32
|
||||
|
||||
def verify_dependencies(all_patches):
|
||||
"""Resolve dependencies, and afterwards run verify_patch_order() to check if everything applies properly."""
|
||||
max_patches = max(all_patches.keys()) + 1
|
||||
|
||||
for i, patch in all_patches.iteritems():
|
||||
patch.verify_depends = set(patch.depends)
|
||||
patch.verify_time = [0]*max_patches
|
||||
|
||||
# Check for circular dependencies and perform modified vector clock algorithm
|
||||
patches = dict(all_patches)
|
||||
while len(patches):
|
||||
|
||||
to_delete = []
|
||||
for i, patch in patches.iteritems():
|
||||
if len(patch.verify_depends) == 0:
|
||||
patch.verify_time[i] += 1
|
||||
to_delete.append(i)
|
||||
|
||||
if len(to_delete) == 0:
|
||||
raise PatchUpdaterError("Circular dependency in set of patches: %d" %
|
||||
", ".join([patch.name for i, patch in patches.iteritems()]))
|
||||
|
||||
for j in to_delete:
|
||||
for i, patch in patches.iteritems():
|
||||
if i != j and j in patch.verify_depends:
|
||||
patch.verify_time = causal_time_combine(patch.verify_time, patches[j].verify_time)
|
||||
patch.verify_depends.remove(j)
|
||||
del patches[j]
|
||||
|
||||
# Find out which files are modified by multiple patches
|
||||
modified_files = {}
|
||||
for i, patch in all_patches.iteritems():
|
||||
for f in patch.modified_files:
|
||||
if f not in modified_files:
|
||||
modified_files[f] = []
|
||||
modified_files[f].append(i)
|
||||
|
||||
# Iterate over pairs of patches, check for existing causal relationship
|
||||
load_patch_cache()
|
||||
try:
|
||||
for f, indices in modified_files.iteritems():
|
||||
verify_patch_order(all_patches, indices, f)
|
||||
finally:
|
||||
save_patch_cache()
|
||||
|
||||
def generate_makefile(all_patches, fp):
|
||||
"""Generate Makefile for a specific set of patches."""
|
||||
|
||||
fp.write("#\n")
|
||||
fp.write("# This file is automatically generated, DO NOT EDIT!\n")
|
||||
fp.write("#\n")
|
||||
fp.write("\n")
|
||||
fp.write("CURDIR ?= ${.CURDIR}\n")
|
||||
fp.write("PATCH := $(CURDIR)/../debian/tools/gitapply.sh -d $(DESTDIR)\n")
|
||||
fp.write("\n")
|
||||
fp.write("PATCHLIST :=\t%s\n" % " \\\n\t\t".join(["%s.ok" % patch.name for i, patch in all_patches.iteritems()]))
|
||||
fp.write("\n")
|
||||
fp.write(".PHONY: install\n")
|
||||
fp.write("install:\n")
|
||||
fp.write("\t@$(MAKE) apply; \\\n")
|
||||
fp.write("\tstatus=$$?; \\\n")
|
||||
fp.write("\trm -f *.ok; \\\n")
|
||||
fp.write("\texit $$status\n")
|
||||
fp.write("\n")
|
||||
fp.write(".PHONY: apply\n")
|
||||
fp.write("apply: $(PATCHLIST)\n")
|
||||
fp.write("\tcat *.ok | sort | $(CURDIR)/../debian/tools/patchlist.sh | $(PATCH)\n")
|
||||
fp.write("\tcd $(DESTDIR) && autoreconf -f\n")
|
||||
fp.write("\tcd $(DESTDIR) && ./tools/make_requests\n")
|
||||
fp.write("\n")
|
||||
fp.write(".PHONY: clean\n")
|
||||
fp.write("clean:\n")
|
||||
fp.write("\trm -f *.ok\n")
|
||||
fp.write("\n")
|
||||
fp.write(".NOTPARALLEL:\n")
|
||||
fp.write("\n")
|
||||
|
||||
for i, patch in all_patches.iteritems():
|
||||
fp.write("# Patchset %s\n" % patch.name)
|
||||
fp.write("# |\n")
|
||||
fp.write("# | Included patches:\n")
|
||||
|
||||
# List all patches and their corresponding authors
|
||||
for info in patch.authors:
|
||||
if not info.subject: continue
|
||||
s = []
|
||||
if info.revision and info.revision != "1": s.append("rev %s" % info.revision)
|
||||
if info.author: s.append("by %s" % info.author)
|
||||
if len(s): s = " [%s]" % ", ".join(s)
|
||||
fp.write("# | *\t%s\n" % "\n# | \t".join(textwrap.wrap(info.subject + s, 120)))
|
||||
fp.write("# |\n")
|
||||
|
||||
# List all bugs fixed by this patchset
|
||||
if any([bugid is not None for bugid, bugname, description in patch.fixes]):
|
||||
fp.write("# | This patchset fixes the following Wine bugs:\n")
|
||||
for bugid, bugname, description in patch.fixes:
|
||||
if bugid is not None:
|
||||
fp.write("# | *\t%s\n" % "\n# | \t".join(textwrap.wrap("[#%d] %s" % (bugid, bugname), 120)))
|
||||
fp.write("# |\n")
|
||||
|
||||
# List all modified files
|
||||
fp.write("# | Modified files: \n")
|
||||
fp.write("# | *\t%s\n" % "\n# | \t".join(textwrap.wrap(", ".join(sorted(patch.modified_files)), 120)))
|
||||
fp.write("# |\n")
|
||||
|
||||
# Generate dependencies and code to apply patches
|
||||
depends = " ".join([""] + ["%s.ok" % all_patches[d].name for d in patch.depends]) if len(patch.depends) else ""
|
||||
fp.write("%s.ok:%s\n" % (patch.name, depends))
|
||||
for f in patch.files:
|
||||
fp.write("\t$(PATCH) < %s\n" % os.path.join(patch.name, f))
|
||||
|
||||
# Create *.ok file (used to generate patchlist)
|
||||
if len(patch.authors):
|
||||
fp.write("\t( \\\n")
|
||||
for info in patch.authors:
|
||||
if not info.subject: continue
|
||||
s = info.subject
|
||||
if info.revision and info.revision != "1": s += " [rev %s]" % info.revision
|
||||
fp.write("\t\techo \"+ { \\\"%s\\\", \\\"%s\\\", \\\"%s\\\" },\"; \\\n" % (patch.name, info.author, s))
|
||||
fp.write("\t) > %s.ok\n" % patch.name)
|
||||
else:
|
||||
fp.write("\ttouch %s.ok\n" % patch.name)
|
||||
fp.write("\n");
|
||||
|
||||
README_template = """wine-compholio
|
||||
==============
|
||||
|
||||
The Wine \"Compholio\" Edition repository includes a variety of patches for
|
||||
Wine to run common Windows applications under Linux.
|
||||
|
||||
These patches fix the following Wine bugs:
|
||||
|
||||
{bugs}
|
||||
|
||||
Besides that the following additional changes are included:
|
||||
|
||||
{fixes}
|
||||
|
||||
### Compiling wine-compholio
|
||||
|
||||
In order to wine-compholio, please use the recommended Makefile based approach which
|
||||
will automatically decide whether to use 'git apply' or 'gitapply.sh'. The following
|
||||
instructions (based on the [Gentoo Wiki](https://wiki.gentoo.org/wiki/Netflix/Pipelight#Compiling_manually))
|
||||
will give a short overview how to compile wine-compholio, but of course not explain
|
||||
details. Make sure to install all required wine dependencies before proceeding.
|
||||
|
||||
As the first step please grab the latest Wine source:
|
||||
```bash
|
||||
wget http://prdownloads.sourceforge.net/wine/wine-{version}.tar.bz2
|
||||
wget https://github.com/compholio/wine-compholio-daily/archive/v{version}.tar.gz
|
||||
```
|
||||
Extract the archives:
|
||||
```bash
|
||||
tar xvjf wine-1*.tar.bz2
|
||||
cd wine-1*
|
||||
tar xvzf ../v{version}.tar.gz --strip-components 1
|
||||
```
|
||||
And apply the patches:
|
||||
```bash
|
||||
make -C ./patches DESTDIR=$(pwd) install
|
||||
```
|
||||
Afterwards run configure (you can also specify a prefix if you don't want to install
|
||||
wine-compholio system-wide):
|
||||
```bash
|
||||
./configure --with-xattr
|
||||
```
|
||||
Before you continue you should make sure that ./configure doesn't show any warnings
|
||||
(look at the end of the output). If there are any warnings, this most likely means
|
||||
that you're missing some important header files. Install them and repeat the ./configure
|
||||
step until all problems are fixed.
|
||||
|
||||
Afterwards compile it (and grab a cup of coffee):
|
||||
```bash
|
||||
make
|
||||
```
|
||||
And install it (you only need sudo for a system-wide installation):
|
||||
```bash
|
||||
sudo make install
|
||||
```
|
||||
|
||||
### Excluding patches
|
||||
|
||||
It is also possible to apply only a subset of the patches, for example if you're compiling
|
||||
for a distribution where PulseAudio is not installed, or if you just don't like a specific
|
||||
patchset. Please note that some patchsets depend on each other, and requesting an impossible
|
||||
situation might result in a failure to apply all patches.
|
||||
|
||||
Lets assume you want to exclude the patchset in directory DIRNAME, then just invoke make like that:
|
||||
```bash
|
||||
make -C ./patches DESTDIR=$(pwd) install -W DIRNAME.ok
|
||||
```
|
||||
"""
|
||||
|
||||
def generate_readme(all_patches, fp):
|
||||
"""Generate README.md including information about specific patches and bugfixes."""
|
||||
|
||||
# Get list of all bugs
|
||||
def _all_bugs():
|
||||
all_bugs = []
|
||||
for i, patch in all_patches.iteritems():
|
||||
for (bugid, bugname, description) in patch.fixes:
|
||||
if bugid is not None: all_bugs.append((bugid, bugname, description))
|
||||
for (bugid, bugname, description) in sorted(all_bugs):
|
||||
if description is None: description = bugname
|
||||
yield "%s ([Wine Bug #%d](http://bugs.winehq.org/show_bug.cgi?id=%d \"%s\"))" % (description, bugid, bugid, bugname)
|
||||
|
||||
# Get list of all fixes
|
||||
def _all_fixes():
|
||||
all_fixes = []
|
||||
for i, patch in all_patches.iteritems():
|
||||
for (bugid, bugname, description) in patch.fixes:
|
||||
if bugid is None: all_fixes.append(description)
|
||||
for description in sorted(all_fixes):
|
||||
yield description
|
||||
|
||||
# Create enumeration from list
|
||||
def _enum(x):
|
||||
return "* " + "\n* ".join(x)
|
||||
|
||||
# Read information from changelog
|
||||
def _read_changelog():
|
||||
with open("debian/changelog") as fp:
|
||||
for line in fp:
|
||||
r = re.match("^([a-zA-Z0-9][^(]*)\((.*)\) ([^;]*)", line)
|
||||
if r: yield (r.group(1).strip(), r.group(2).strip(), r.group(3).strip())
|
||||
|
||||
# Get version number of the latest stable release
|
||||
def _latest_stable_version():
|
||||
for package, version, distro in _read_changelog():
|
||||
if distro.lower() != "unreleased":
|
||||
return version
|
||||
|
||||
fp.write(README_template.format(bugs=_enum(_all_bugs()), fixes=_enum(_all_fixes()), version=_latest_stable_version()))
|
||||
|
||||
if __name__ == "__main__":
|
||||
if not os.path.isdir("./debian/tools/wine"):
|
||||
raise RuntimeError("Please create a symlink to the wine repository in ./debian/tools/wine")
|
||||
|
||||
try:
|
||||
all_patches = read_patchsets("./patches")
|
||||
verify_dependencies(all_patches)
|
||||
except PatchUpdaterError as e:
|
||||
print ""
|
||||
print "ERROR: %s" % e
|
||||
print ""
|
||||
exit(1)
|
||||
|
||||
|
||||
with open("./patches/Makefile", "w") as fp:
|
||||
generate_makefile(all_patches, fp)
|
||||
|
||||
with open("./README.md", "w") as fp:
|
||||
generate_readme(all_patches, fp)
|
320
debian/tools/patchutils.py
vendored
Normal file
320
debian/tools/patchutils.py
vendored
Normal file
@ -0,0 +1,320 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# Python functions to read, split and apply patches.
|
||||
#
|
||||
# Copyright (C) 2014 Sebastian Lackner
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
||||
import collections
|
||||
import difflib
|
||||
import hashlib
|
||||
import itertools
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import tempfile
|
||||
|
||||
class PatchParserError(RuntimeError):
|
||||
"""Unable to parse patch file - either an unimplemented feature, or corrupted patch."""
|
||||
pass
|
||||
|
||||
class PatchApplyError(RuntimeError):
|
||||
"""Failed to apply/merge patch."""
|
||||
pass
|
||||
|
||||
class PatchObject(object):
|
||||
def __init__(self, filename):
|
||||
self.extracted_patch = None
|
||||
self.unique_hash = None
|
||||
|
||||
self.filename = filename
|
||||
self.offset_begin = None
|
||||
self.offset_end = None
|
||||
self.isbinary = False
|
||||
|
||||
self.oldname = None
|
||||
self.newname = None
|
||||
self.modified_file = None
|
||||
|
||||
self.oldsha1 = None
|
||||
self.newsha1 = None
|
||||
self.newmode = None
|
||||
|
||||
def is_binary(self):
|
||||
return self.isbinary
|
||||
|
||||
def read_chunks(self):
|
||||
"""Iterates over arbitrary sized chunks of this patch."""
|
||||
assert self.offset_end >= self.offset_begin
|
||||
with open(self.filename) as fp:
|
||||
fp.seek(self.offset_begin)
|
||||
i = self.offset_end - self.offset_begin
|
||||
while i > 0:
|
||||
buf = fp.read(4096 if i > 4096 else i)
|
||||
if buf == "": raise IOError("Unable to extract patch.")
|
||||
yield buf
|
||||
i -= len(buf)
|
||||
|
||||
def extract(self):
|
||||
"""Create a temporary file containing the extracted patch."""
|
||||
if not self.extracted_patch:
|
||||
self.extracted_patch = tempfile.NamedTemporaryFile()
|
||||
for chunk in self.read_chunks():
|
||||
self.extracted_patch.write(chunk)
|
||||
self.extracted_patch.flush()
|
||||
return self.extracted_patch
|
||||
|
||||
def hash(self):
|
||||
"""Hash the content of the patch."""
|
||||
if not self.unique_hash:
|
||||
m = hashlib.sha256()
|
||||
for chunk in self.read_chunks():
|
||||
m.update(chunk)
|
||||
self.unique_hash = m.digest()
|
||||
return self.unique_hash
|
||||
|
||||
def read_patch(filename):
|
||||
"""Iterates over all patches contained in a file, and returns PatchObject objects."""
|
||||
|
||||
class _FileReader(object):
|
||||
def __init__(self, filename):
|
||||
self.filename = filename
|
||||
self.fp = open(self.filename)
|
||||
self.peeked = None
|
||||
|
||||
def close(self):
|
||||
self.fp.close()
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, type, value, traceback):
|
||||
self.close()
|
||||
|
||||
def seek(self, pos):
|
||||
"""Change the file cursor position."""
|
||||
self.fp.seek(pos)
|
||||
self.peeked = None
|
||||
|
||||
def tell(self):
|
||||
"""Return the current file cursor position."""
|
||||
if self.peeked is None:
|
||||
return self.fp.tell()
|
||||
return self.peeked[0]
|
||||
|
||||
def peek(self):
|
||||
"""Read one line without changing the file cursor."""
|
||||
if self.peeked is None:
|
||||
pos = self.fp.tell()
|
||||
tmp = self.fp.readline()
|
||||
if len(tmp) == 0: return None
|
||||
self.peeked = (pos, tmp)
|
||||
return self.peeked[1]
|
||||
|
||||
def read(self):
|
||||
"""Read one line from the file, and move the file cursor to the next line."""
|
||||
if self.peeked is None:
|
||||
tmp = self.fp.readline()
|
||||
if len(tmp) == 0: return None
|
||||
return tmp
|
||||
tmp, self.peeked = self.peeked, None
|
||||
return tmp[1]
|
||||
|
||||
def _read_single_patch(fp, oldname=None, newname=None):
|
||||
"""Internal function to read a single patch from a file."""
|
||||
|
||||
patch = PatchObject(fp.filename)
|
||||
patch.offset_begin = fp.tell()
|
||||
patch.oldname = oldname
|
||||
patch.newname = newname
|
||||
|
||||
# Skip over initial diff --git header
|
||||
line = fp.peek()
|
||||
if line.startswith("diff --git "):
|
||||
assert fp.read() == line
|
||||
|
||||
# Read header
|
||||
while True:
|
||||
line = fp.peek()
|
||||
if line is None:
|
||||
break
|
||||
elif line.startswith("--- "):
|
||||
patch.oldname = line[4:].strip()
|
||||
elif line.startswith("+++ "):
|
||||
patch.newname = line[4:].strip()
|
||||
elif line.startswith("old mode") or line.startswith("deleted file mode"):
|
||||
pass # ignore
|
||||
elif line.startswith("new mode "):
|
||||
patch.newmode = line[9:].strip()
|
||||
elif line.startswith("new file mode "):
|
||||
patch.newmode = line[14:].strip()
|
||||
elif line.startswith("new mode") or line.startswith("new file mode"):
|
||||
raise PatchParserError("Unable to parse header line '%s'." % line)
|
||||
elif line.startswith("copy from") or line.startswith("copy to"):
|
||||
raise NotImplementedError("Patch copy header not implemented yet.")
|
||||
elif line.startswith("rename "):
|
||||
raise NotImplementedError("Patch rename header not implemented yet.")
|
||||
elif line.startswith("similarity index") or line.startswith("dissimilarity index"):
|
||||
pass # ignore
|
||||
elif line.startswith("index "):
|
||||
r = re.match("^index ([a-fA-F0-9]*)\.\.([a-fA-F0-9]*)", line)
|
||||
if not r: raise PatchParserError("Unable to parse index header line '%s'." % line)
|
||||
patch.oldsha1, patch.newsha1 = r.group(1), r.group(2)
|
||||
else:
|
||||
break
|
||||
assert fp.read() == line
|
||||
|
||||
if patch.oldname is None or patch.newname is None:
|
||||
raise PatchParserError("Missing old or new name.")
|
||||
elif patch.oldname == "/dev/null" and patch.newname == "/dev/null":
|
||||
raise PatchParserError("Old and new name is /dev/null?")
|
||||
|
||||
if patch.oldname.startswith("a/"):
|
||||
patch.oldname = patch.oldname[2:]
|
||||
elif patch.oldname != "/dev/null":
|
||||
raise PatchParserError("Old name in patch doesn't start with a/.")
|
||||
|
||||
if patch.newname.startswith("b/"):
|
||||
patch.newname = patch.newname[2:]
|
||||
elif patch.newname != "/dev/null":
|
||||
raise PatchParserError("New name in patch doesn't start with b/.")
|
||||
|
||||
if patch.newname != "/dev/null":
|
||||
patch.modified_file = patch.newname
|
||||
else:
|
||||
patch.modified_file = patch.oldname
|
||||
|
||||
# Decide between binary and textual patch
|
||||
if line is None or line.startswith("diff --git ") or line.startswith("--- "):
|
||||
if oldname != newname:
|
||||
raise PatchParserError("Stripped old- and new name doesn't match.")
|
||||
|
||||
elif line.startswith("@@ -"):
|
||||
while True:
|
||||
line = fp.peek()
|
||||
if line is None or not line.startswith("@@ -"):
|
||||
break
|
||||
|
||||
r = re.match("^@@ -(([0-9]+),)?([0-9]+) \+(([0-9]+),)?([0-9]+) @@", line)
|
||||
if not r: raise PatchParserError("Unable to parse hunk header '%s'." % line)
|
||||
srcpos = max(int(r.group(2)) - 1, 0) if r.group(2) else 0
|
||||
dstpos = max(int(r.group(5)) - 1, 0) if r.group(5) else 0
|
||||
srclines, dstlines = int(r.group(3)), int(r.group(6))
|
||||
if srclines <= 0 and dstlines <= 0:
|
||||
raise PatchParserError("Empty hunk doesn't make sense.")
|
||||
assert fp.read() == line
|
||||
|
||||
while srclines > 0 or dstlines > 0:
|
||||
line = fp.read()
|
||||
if line is None:
|
||||
raise PatchParserError("Truncated patch.")
|
||||
elif line.startswith(" "):
|
||||
if srclines == 0 or dstlines == 0:
|
||||
raise PatchParserError("Corrupted patch.")
|
||||
srclines -= 1
|
||||
dstlines -= 1
|
||||
elif line.startswith("-"):
|
||||
if srclines == 0:
|
||||
raise PatchParserError("Corrupted patch.")
|
||||
srclines -= 1
|
||||
elif line.startswith("+"):
|
||||
if dstlines == 0:
|
||||
raise PatchParserError("Corrupted patch.")
|
||||
dstlines -= 1
|
||||
elif line.startswith("\\ "):
|
||||
pass # ignore
|
||||
else:
|
||||
raise PatchParserError("Unexpected line in hunk.")
|
||||
|
||||
while True:
|
||||
line = fp.peek()
|
||||
if line is None or not line.startswith("\\ "): break
|
||||
assert fp.read() == line
|
||||
|
||||
elif line.rstrip() == "GIT binary patch":
|
||||
if patch.oldsha1 is None or patch.newsha1 is None:
|
||||
raise PatchParserError("Missing index header, sha1 sums required for binary patch.")
|
||||
elif patch.oldname != patch.newname:
|
||||
raise PatchParserError("Stripped old- and new name doesn't match for binary patch.")
|
||||
assert fp.read() == line
|
||||
|
||||
line = fp.read()
|
||||
if line is None: raise PatchParserError("Unexpected end of file.")
|
||||
r = re.match("^(literal|delta) ([0-9]+)", line)
|
||||
if not r: raise NotImplementedError("Only literal/delta patches are supported.")
|
||||
patch.isbinary = True
|
||||
|
||||
# Skip over patch data
|
||||
while True:
|
||||
line = fp.read()
|
||||
if line is None or line.strip() == "":
|
||||
break
|
||||
|
||||
else:
|
||||
raise PatchParserError("Unknown patch format.")
|
||||
|
||||
patch.offset_end = fp.tell()
|
||||
return patch
|
||||
|
||||
with _FileReader(filename) as fp:
|
||||
while True:
|
||||
line = fp.peek()
|
||||
if line is None:
|
||||
break
|
||||
elif line.startswith("diff --git "):
|
||||
tmp = line.strip().split(" ")
|
||||
if len(tmp) != 4: raise PatchParserError("Unable to parse git diff header line '%s'." % line)
|
||||
yield _read_single_patch(fp, tmp[2].strip(), tmp[3].strip())
|
||||
elif line.startswith("--- "):
|
||||
yield _read_single_patch(fp)
|
||||
elif line.startswith("@@ -") or line.startswith("+++ "):
|
||||
raise PatchParserError("Patch didn't start with a git or diff header.")
|
||||
else:
|
||||
assert fp.read() == line
|
||||
|
||||
def apply_patch(content, patches, reverse=False, fuzz=2):
|
||||
"""Apply a patch with optional fuzz - uses the commandline 'patch' utility."""
|
||||
|
||||
if not isinstance(patches, collections.Sequence):
|
||||
patches = [patches]
|
||||
|
||||
contentfile = tempfile.NamedTemporaryFile(delete=False)
|
||||
try:
|
||||
contentfile.write(content)
|
||||
contentfile.close()
|
||||
|
||||
for patch in patches:
|
||||
|
||||
patchfile = patch.extract()
|
||||
cmdline = ["patch", "--batch", "--silent", "-r", "-"]
|
||||
if reverse: cmdline.append("--reverse")
|
||||
if fuzz != 2: cmdline.append("--fuzz=%d" % fuzz)
|
||||
cmdline += [contentfile.name, patchfile.name]
|
||||
|
||||
with open(os.devnull, 'w') as devnull:
|
||||
exitcode = subprocess.call(cmdline, stdout=devnull, stderr=devnull)
|
||||
if exitcode != 0:
|
||||
raise PatchApplyError("Failed to apply patch (exitcode %d)." % exitcode)
|
||||
|
||||
with open(contentfile.name) as fp:
|
||||
content = fp.read()
|
||||
|
||||
finally:
|
||||
os.unlink(contentfile.name)
|
||||
|
||||
return content
|
||||
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: Add commandline option --patches to show the patch list.
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Michael Müller
|
||||
Title: Add commandline option --check-libs to test if shared libraries are installed.
|
7
patches/00-Commandline/definition
Normal file
7
patches/00-Commandline/definition
Normal file
@ -0,0 +1,7 @@
|
||||
Author: Sebastian Lackner
|
||||
Subject: Add commandline option --patches to show the patch list.
|
||||
Revision: 1
|
||||
|
||||
Author: Michael Müller
|
||||
Subject: Add commandline option --check-libs to test if shared libraries are installed.
|
||||
Revision: 1
|
@ -1,3 +0,0 @@
|
||||
Revision: 2
|
||||
Author: Erich E. Hoover
|
||||
Title: Implement SIO_ADDRESS_LIST_CHANGE.
|
4
patches/01-Address_Change_Notification/definition
Normal file
4
patches/01-Address_Change_Notification/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Erich E. Hoover
|
||||
Subject: Implement SIO_ADDRESS_LIST_CHANGE.
|
||||
Revision: 2
|
||||
Fixes: [32328] Support for interface change notifications
|
@ -1,3 +0,0 @@
|
||||
Revision: 6
|
||||
Author: Erich E. Hoover
|
||||
Title: Store and return security attributes with extended file attributes.
|
5
patches/02-ACL_Extended_Attributes/definition
Normal file
5
patches/02-ACL_Extended_Attributes/definition
Normal file
@ -0,0 +1,5 @@
|
||||
Author: Erich E. Hoover
|
||||
Subject: Store and return security attributes with extended file attributes.
|
||||
Revision: 6
|
||||
Fixes: [31858] Support for stored file ACLs
|
||||
Fixes: [34406] Support for inherited file ACLs
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: Enable/disable windows when they are (un)mapped by foreign applications.
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: Update gl_drawable for embedded windows.
|
9
patches/04-XEMBED/definition
Normal file
9
patches/04-XEMBED/definition
Normal file
@ -0,0 +1,9 @@
|
||||
Author: Sebastian Lackner
|
||||
Subject: Enable/disable windows when they are (un)mapped by foreign applications.
|
||||
Revision: 1
|
||||
|
||||
Author: Sebastian Lackner
|
||||
Subject: Update gl_drawable for embedded windows.
|
||||
Revision: 1
|
||||
|
||||
Fixes: XEMBED support for embedding Wine windows inside Linux applications
|
@ -1,4 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: Change return value of stub SetNamedPipeHandleState to TRUE.
|
||||
|
5
patches/05-Named_Pipe/definition
Normal file
5
patches/05-Named_Pipe/definition
Normal file
@ -0,0 +1,5 @@
|
||||
Author: Sebastian Lackner
|
||||
Subject: Change return value of stub SetNamedPipeHandleState to TRUE.
|
||||
Revision: 1
|
||||
|
||||
Fixes: [17273] Workaround for TransactNamedPipe not being supported
|
@ -1,7 +1,7 @@
|
||||
From 8cb75a25d71c1ea659ce69fa74f725cd9b9a64f0 Mon Sep 17 00:00:00 2001
|
||||
From 9c64dcb14a77b7b1835bb06e03c90c502a1109f0 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:53 +0100
|
||||
Subject: [PATCH 08/42] winmm: Load winealsa if winepulse is found
|
||||
Date: Tue, 24 Jun 2014 08:48:45 +0200
|
||||
Subject: [PATCH 08/43] winmm: Load winealsa if winepulse is found
|
||||
|
||||
Fixes midi on winepulse
|
||||
---
|
||||
@ -25,5 +25,5 @@ index c3b3674..56cfe35 100644
|
||||
HeapFree(GetProcessHeap(), 0, drvA);
|
||||
PropVariantClear(&pv);
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,13 +1,12 @@
|
||||
From dac832bfc418de315808a109ab9adba0c5936be5 Mon Sep 17 00:00:00 2001
|
||||
From 182d5c5625ea79c4506daa6856de158558de24d8 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:53 +0100
|
||||
Subject: [PATCH 09/42] winepulse: Add initial stub for pulseaudio support
|
||||
Date: Tue, 24 Jun 2014 08:48:45 +0200
|
||||
Subject: [PATCH 09/43] winepulse: Add initial stub for pulseaudio support
|
||||
|
||||
---
|
||||
Just the basic of initialization and pulseaudio mainloop support is
|
||||
added here.
|
||||
---
|
||||
configure | 99 +++++++++++-
|
||||
configure.ac | 32 +++-
|
||||
dlls/mmdevapi/main.c | 2 +-
|
||||
dlls/winepulse.drv/Makefile.in | 7 +
|
||||
@ -18,171 +17,8 @@ added here.
|
||||
create mode 100644 dlls/winepulse.drv/mmdevdrv.c
|
||||
create mode 100644 dlls/winepulse.drv/winepulse.drv.spec
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index 246b888..d9f6ddd 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -653,6 +653,8 @@ OSS4_CFLAGS
|
||||
ALSA_LIBS
|
||||
GSTREAMER_LIBS
|
||||
GSTREAMER_CFLAGS
|
||||
+PULSEINCL
|
||||
+PULSELIBS
|
||||
GETTEXTPO_LIBS
|
||||
Z_LIBS
|
||||
FREETYPE_LIBS
|
||||
@@ -824,6 +826,7 @@ with_osmesa
|
||||
with_oss
|
||||
with_png
|
||||
with_pthread
|
||||
+with_pulse
|
||||
with_sane
|
||||
with_tiff
|
||||
with_v4l
|
||||
@@ -1253,6 +1256,7 @@ enable_winemapi
|
||||
enable_winemp3_acm
|
||||
enable_wineoss_drv
|
||||
enable_wineps_drv
|
||||
+enable_winepulse_drv
|
||||
enable_wineqtdecoder
|
||||
enable_winex11_drv
|
||||
enable_wing32
|
||||
@@ -2079,6 +2083,7 @@ Optional Packages:
|
||||
--without-oss do not use the OSS sound support
|
||||
--without-png do not use PNG
|
||||
--without-pthread do not use the pthread library
|
||||
+ --without-pulse do not use PulseAudio sound support
|
||||
--without-sane do not use SANE (scanner support)
|
||||
--without-tiff do not use TIFF
|
||||
--without-v4l do not use v4l1 (v4l support)
|
||||
@@ -3320,6 +3325,12 @@ if test "${with_pthread+set}" = set; then :
|
||||
fi
|
||||
|
||||
|
||||
+# Check whether --with-pulse was given.
|
||||
+if test "${with_pulse+set}" = set; then :
|
||||
+ withval=$with_pulse;
|
||||
+fi
|
||||
+
|
||||
+
|
||||
# Check whether --with-sane was given.
|
||||
if test "${with_sane+set}" = set; then :
|
||||
withval=$with_sane;
|
||||
@@ -12083,6 +12094,87 @@ esac
|
||||
fi
|
||||
fi
|
||||
|
||||
+PULSELIBS=""
|
||||
+
|
||||
+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"
|
||||
+ for ac_header in pulse/pulseaudio.h
|
||||
+do :
|
||||
+ ac_fn_c_check_header_mongrel "$LINENO" "pulse/pulseaudio.h" "ac_cv_header_pulse_pulseaudio_h" "$ac_includes_default"
|
||||
+if test "x$ac_cv_header_pulse_pulseaudio_h" = xyes; then :
|
||||
+ cat >>confdefs.h <<_ACEOF
|
||||
+#define HAVE_PULSE_PULSEAUDIO_H 1
|
||||
+_ACEOF
|
||||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pa_stream_is_corked in -lpulse" >&5
|
||||
+$as_echo_n "checking for pa_stream_is_corked in -lpulse... " >&6; }
|
||||
+if ${ac_cv_lib_pulse_pa_stream_is_corked+:} false; then :
|
||||
+ $as_echo_n "(cached) " >&6
|
||||
+else
|
||||
+ ac_check_lib_save_LIBS=$LIBS
|
||||
+LIBS="-lpulse $ac_pulse_libs $LIBS"
|
||||
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||
+/* end confdefs.h. */
|
||||
+
|
||||
+/* Override any GCC internal prototype to avoid an error.
|
||||
+ Use char because int might match the return type of a GCC
|
||||
+ builtin and then its argument prototype would still apply. */
|
||||
+#ifdef __cplusplus
|
||||
+extern "C"
|
||||
+#endif
|
||||
+char pa_stream_is_corked ();
|
||||
+int
|
||||
+main ()
|
||||
+{
|
||||
+return pa_stream_is_corked ();
|
||||
+ ;
|
||||
+ return 0;
|
||||
+}
|
||||
+_ACEOF
|
||||
+if ac_fn_c_try_link "$LINENO"; then :
|
||||
+ ac_cv_lib_pulse_pa_stream_is_corked=yes
|
||||
+else
|
||||
+ ac_cv_lib_pulse_pa_stream_is_corked=no
|
||||
+fi
|
||||
+rm -f core conftest.err conftest.$ac_objext \
|
||||
+ conftest$ac_exeext conftest.$ac_ext
|
||||
+LIBS=$ac_check_lib_save_LIBS
|
||||
+fi
|
||||
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pulse_pa_stream_is_corked" >&5
|
||||
+$as_echo "$ac_cv_lib_pulse_pa_stream_is_corked" >&6; }
|
||||
+if test "x$ac_cv_lib_pulse_pa_stream_is_corked" = xyes; then :
|
||||
+
|
||||
+$as_echo "#define HAVE_PULSEAUDIO 1" >>confdefs.h
|
||||
+
|
||||
+ PULSELIBS="$ac_pulse_libs"
|
||||
+ PULSEINCL="$ac_pulse_cflags"
|
||||
+fi
|
||||
+
|
||||
+
|
||||
+fi
|
||||
+
|
||||
+done
|
||||
+
|
||||
+ fi
|
||||
+ CPPFLAGS="$ac_save_CPPFLAGS"
|
||||
+fi
|
||||
+if test "$ac_cv_lib_pulse_pa_stream_is_corked" != "yes"; then :
|
||||
+ case "x$with_pulse" in
|
||||
+ x) as_fn_append wine_warnings "|libpulse ${notice_platform}development files not found or too old, Pulse won't be supported." ;;
|
||||
+ xno) ;;
|
||||
+ *) as_fn_error $? "libpulse ${notice_platform}development files not found or too old, Pulse won't be supported.
|
||||
+This is an error since --with-pulse was requested." "$LINENO" 5 ;;
|
||||
+esac
|
||||
+fi
|
||||
+
|
||||
if test "x$with_gstreamer" != "xno"
|
||||
then
|
||||
if ${GSTREAMER_CFLAGS:+false} :; then :
|
||||
@@ -13394,12 +13486,14 @@ fi
|
||||
|
||||
test -n "$ALSA_LIBS" || enable_winealsa_drv=${enable_winealsa_drv:-no}
|
||||
test -n "$COREAUDIO_LIBS" || enable_winecoreaudio_drv=${enable_winecoreaudio_drv:-no}
|
||||
+test -n "$PULSELIBS" || enable_winepulse_drv=${enable_winepulse_drv:-no}
|
||||
test "x$ac_cv_member_oss_sysinfo_numaudioengines" = xyes || enable_wineoss_drv=${enable_wineoss_drv:-no}
|
||||
test "$ac_cv_header_linux_joystick_h" = "yes" || enable_winejoystick_drv=${enable_winejoystick_drv:-no}
|
||||
|
||||
-if test "x$ALSA_LIBS$COREAUDIO_LIBS" = "x" -a \
|
||||
+if test "x$ALSA_LIBS$COREAUDIO_LIBS$PULSELIBS" = "x" -a \
|
||||
+if test "x$ALSALIBS$COREAUDIO$PULSELIBS" = "x" -a \
|
||||
"x$ac_cv_member_oss_sysinfo_numaudioengines" != xyes -a \
|
||||
- "x$with_alsa$with_coreaudio$with_oss" != xnonono
|
||||
+ "x$with_alsa$with_coreaudio$with_oss$with_pulse" != xnononono
|
||||
then
|
||||
as_fn_append wine_warnings "|No sound system was found. Windows applications will be silent."
|
||||
fi
|
||||
@@ -17203,6 +17297,7 @@ wine_fn_config_dll winemp3.acm enable_winemp3_acm
|
||||
wine_fn_config_dll wineoss.drv enable_wineoss_drv
|
||||
wine_fn_config_dll wineps.drv enable_wineps_drv clean,po
|
||||
wine_fn_config_dll wineps16.drv16 enable_win16
|
||||
+wine_fn_config_dll winepulse.drv enable_winepulse_drv
|
||||
wine_fn_config_dll wineqtdecoder enable_wineqtdecoder
|
||||
wine_fn_config_dll winex11.drv enable_winex11_drv
|
||||
wine_fn_config_dll wing.dll16 enable_win16
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index de807d2..ec3db46 100644
|
||||
index eccf19c..d4939c7 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -70,6 +70,7 @@ AC_ARG_WITH(oss, AS_HELP_STRING([--without-oss],[do not use the OSS sound
|
||||
@ -193,7 +29,7 @@ index de807d2..ec3db46 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]))
|
||||
AC_ARG_WITH(v4l, AS_HELP_STRING([--without-v4l],[do not use v4l1 (v4l support)]))
|
||||
@@ -1512,6 +1513,30 @@ then
|
||||
@@ -1516,6 +1517,30 @@ then
|
||||
[GetText ${notice_platform}development files not found (or too old), po files can't be rebuilt.])
|
||||
fi
|
||||
|
||||
@ -224,7 +60,7 @@ index de807d2..ec3db46 100644
|
||||
dnl **** Check for gstreamer ****
|
||||
if test "x$with_gstreamer" != "xno"
|
||||
then
|
||||
@@ -1730,13 +1755,15 @@ fi
|
||||
@@ -1734,13 +1759,15 @@ fi
|
||||
dnl **** Disable unsupported winmm drivers ****
|
||||
test -n "$ALSA_LIBS" || enable_winealsa_drv=${enable_winealsa_drv:-no}
|
||||
test -n "$COREAUDIO_LIBS" || enable_winecoreaudio_drv=${enable_winecoreaudio_drv:-no}
|
||||
@ -242,7 +78,7 @@ index de807d2..ec3db46 100644
|
||||
then
|
||||
WINE_WARNING([No sound system was found. Windows applications will be silent.])
|
||||
fi
|
||||
@@ -3217,6 +3244,7 @@ WINE_CONFIG_DLL(winemp3.acm)
|
||||
@@ -3235,6 +3262,7 @@ WINE_CONFIG_DLL(winemp3.acm)
|
||||
WINE_CONFIG_DLL(wineoss.drv)
|
||||
WINE_CONFIG_DLL(wineps.drv,,[clean,po])
|
||||
WINE_CONFIG_DLL(wineps16.drv16,enable_win16)
|
||||
@ -584,5 +420,5 @@ index 0000000..a089166
|
||||
+@ stdcall -private GetAudioEndpoint(ptr ptr long ptr) AUDDRV_GetAudioEndpoint
|
||||
+@ stdcall -private GetAudioSessionManager(ptr ptr) AUDDRV_GetAudioSessionManager
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From ac6de861806e5692fa004cb2c449feba95287323 Mon Sep 17 00:00:00 2001
|
||||
From 66366363c2c99a359dfea648d2de409e362b5557 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:53 +0100
|
||||
Subject: [PATCH 10/42] winepulse: Add format and period probing
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 10/43] winepulse: Add format and period probing
|
||||
|
||||
---
|
||||
dlls/winepulse.drv/mmdevdrv.c | 128 ++++++++++++++++++++++++++++++++++++++++++
|
||||
@ -168,5 +168,5 @@ index d187bdc..40db26d 100644
|
||||
UINT *num, UINT *def_index)
|
||||
{
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 54c37abb982df8e5aefccfe2add2a05fa5707db8 Mon Sep 17 00:00:00 2001
|
||||
From 26cd0e172f299c7e63c51af9f67035f4e5865822 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:53 +0100
|
||||
Subject: [PATCH 11/42] winepulse: Add audioclient
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 11/43] winepulse: Add audioclient
|
||||
|
||||
---
|
||||
Without AudioRenderClient and AudioCaptureClient it won't work,
|
||||
@ -1094,5 +1094,5 @@ index 40db26d..37d85ff 100644
|
||||
IAudioSessionManager2 **out)
|
||||
{
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 4191de925518baace7ad4c13a0c72750a91f1abd Mon Sep 17 00:00:00 2001
|
||||
From 9cca5914bed2a12edcafc8cebf5918d51e2570de Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 12/42] winepulse: Add IAudioRenderClient and
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 12/43] winepulse: Add IAudioRenderClient and
|
||||
IAudioCaptureClient
|
||||
|
||||
---
|
||||
@ -348,5 +348,5 @@ index 37d85ff..01cfd25 100644
|
||||
IAudioSessionManager2 **out)
|
||||
{
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 2e3b7073ee776ecbd5b186d8f146e80ef30775b8 Mon Sep 17 00:00:00 2001
|
||||
From 6b97d362c570ec4a813db1d58574a94ad61f9015 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 13/42] winepulse: Add IAudioClock and IAudioClock2
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 13/43] winepulse: Add IAudioClock and IAudioClock2
|
||||
|
||||
---
|
||||
dlls/winepulse.drv/mmdevdrv.c | 172 ++++++++++++++++++++++++++++++++++++++++++
|
||||
@ -205,5 +205,5 @@ index 01cfd25..3ed2288 100644
|
||||
IAudioSessionManager2 **out)
|
||||
{
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 85e33b703dd8c082af2b4a008215adca70308fc5 Mon Sep 17 00:00:00 2001
|
||||
From 0f827300a5f9d66de488f43fa5f544e97335ea35 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 14/42] winepulse: Add audiostreamvolume
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 14/43] winepulse: Add audiostreamvolume
|
||||
|
||||
---
|
||||
Pulse allows streams to set volume, but for various reasons it's
|
||||
@ -281,5 +281,5 @@ index 3ed2288..b7414c2 100644
|
||||
IAudioSessionManager2 **out)
|
||||
{
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From ca90d6371ca330a63447c4a67cda50d65d51a73b Mon Sep 17 00:00:00 2001
|
||||
From 313c40a06e4b535ea524c0393c466a52d9c1e8eb Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 15/42] winepulse: Add session support
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 15/43] winepulse: Add session support
|
||||
|
||||
---
|
||||
Copied verbatim from winealsa
|
||||
@ -932,5 +932,5 @@ index b7414c2..64ee62e 100644
|
||||
+ return S_OK;
|
||||
}
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From bef79b1cc995c36d4dccc6e7a7251f2954eef89a Mon Sep 17 00:00:00 2001
|
||||
From 379ef856e7d5c5d691a8aabbb77a95dc3b0e6d9c Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 16/42] fix fdels trailing whitespaces
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 16/43] fix fdels trailing whitespaces
|
||||
|
||||
Happy? :P
|
||||
---
|
||||
@ -31,5 +31,5 @@ index 64ee62e..5a71a3d 100644
|
||||
if (*pos < This->clock_lastpos)
|
||||
*pos = This->clock_lastpos;
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 8a7d39774081539935d060f405fc0f4f1718cb5b Mon Sep 17 00:00:00 2001
|
||||
From 99756a89f015bdf24d42ef75b59736d2cfd930c5 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 17/42] winepulse v12
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 17/43] winepulse v12
|
||||
|
||||
Changes since v11:
|
||||
- Fix incorrect assertions which may fail on moving a capture device
|
||||
@ -44,5 +44,5 @@ index 5a71a3d..960af3c 100644
|
||||
copy = rem;
|
||||
if (copy > src_len)
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 91657e70984483200e08c29ed9431027cf10db24 Mon Sep 17 00:00:00 2001
|
||||
From 8bdeceb10d8f3d69cc6835e53d3a3137a276d756 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 18/42] winepulse v15: Add support for missing formats, and
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 18/43] winepulse v15: Add support for missing formats, and
|
||||
silence an error for missing format tags
|
||||
|
||||
---
|
||||
@ -37,5 +37,5 @@ index 960af3c..f52f119 100644
|
||||
This->ss.channels = This->map.channels;
|
||||
if (!pa_channel_map_valid(&This->map) || This->ss.format == PA_SAMPLE_INVALID) {
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 7cdac1f6eb46245e55ed93b819c561da2380ccef Mon Sep 17 00:00:00 2001
|
||||
From a3b41022c8746ecf5036adf6c5582f8fe1f7e7b4 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 19/42] winepulse v16: Add official warning wine doesn't want
|
||||
Date: Tue, 24 Jun 2014 08:48:46 +0200
|
||||
Subject: [PATCH 19/43] winepulse v16: Add official warning wine doesn't want
|
||||
to support winepulse
|
||||
|
||||
And give an alternative place to ask for support.
|
||||
@ -75,5 +75,5 @@ index f52f119..76a2e0e 100644
|
||||
return E_UNEXPECTED;
|
||||
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From d8b279f724839e5fbd5443e2d2a6f3e8f7c93dac Mon Sep 17 00:00:00 2001
|
||||
From 384845108243ed6592df164f13e00dd88705b8bf Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <m.b.lankhorst@gmail.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 20/42] winepulse v17: Fix winmm tests
|
||||
Date: Tue, 24 Jun 2014 08:48:47 +0200
|
||||
Subject: [PATCH 20/43] winepulse v17: Fix winmm tests
|
||||
|
||||
Handle dwChannelMask = SPEAKER_ALL better so WAVE_FORMAT_EXTENSIBLE tests pass too
|
||||
---
|
||||
@ -121,5 +121,5 @@ index 76a2e0e..6e75674 100644
|
||||
if (hr == S_OK || !out) {
|
||||
CoTaskMemFree(closest);
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 4e4971813a136b9535b912fb95995b5b13dba8bb Mon Sep 17 00:00:00 2001
|
||||
From e07df6656ffbccbf4974ca9103c5953f5ff090f3 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 21/42] winepulse v18: Latency and compilation improvements
|
||||
Date: Tue, 24 Jun 2014 08:48:47 +0200
|
||||
Subject: [PATCH 21/43] winepulse v18: Latency and compilation improvements
|
||||
|
||||
Changes since v17:
|
||||
- Remove clock_pulse interpolation
|
||||
@ -203,5 +203,5 @@ index 6e75674..8e76826 100644
|
||||
/* Make time never go backwards */
|
||||
if (*pos < This->clock_lastpos)
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 7a2597d90627ce1bacf0e1969cc4b2eea4e1cd5d Mon Sep 17 00:00:00 2001
|
||||
From a1e43cc033dd64d05bcfc6189b332227facc24cf Mon Sep 17 00:00:00 2001
|
||||
From: Juergen Tretthahn <orson@orson.at>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 22/42] winepulse: API Compatibility with 1.5.2 onward, v2
|
||||
Date: Tue, 24 Jun 2014 08:48:47 +0200
|
||||
Subject: [PATCH 22/43] winepulse: API Compatibility with 1.5.2 onward, v2
|
||||
|
||||
V2: Add winepulse.drv.spec to commit too
|
||||
V1: Original version
|
||||
@ -110,5 +110,5 @@ index a089166..612bf46 100644
|
||||
+@ stdcall -private GetAudioEndpoint(ptr ptr ptr) AUDDRV_GetAudioEndpoint
|
||||
@ stdcall -private GetAudioSessionManager(ptr ptr) AUDDRV_GetAudioSessionManager
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From e8533a5bf1e137ccfbe8b44e5e6a645805de8d2b Mon Sep 17 00:00:00 2001
|
||||
From cf251ef3bc965d723003723fc86a995ed0808c17 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:54 +0100
|
||||
Subject: [PATCH 23/42] winepulse: Fix low latency support
|
||||
Date: Tue, 24 Jun 2014 08:48:47 +0200
|
||||
Subject: [PATCH 23/43] winepulse: Fix low latency support
|
||||
|
||||
Some games request a 20 ms buffer and will only fill 20 ms.
|
||||
Since 10 ms periods are too long in this case for winepulse,
|
||||
@ -54,5 +54,5 @@ index b374b53..7c07f54 100644
|
||||
return S_OK;
|
||||
}
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 3487d764ca9c97a2f6b7898acf653a616c8c8dae Mon Sep 17 00:00:00 2001
|
||||
From 94b06acf43a3687efabf329ab32190ebc54147e5 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:55 +0100
|
||||
Subject: [PATCH 24/42] winepulse: drop realtime priority before thread
|
||||
Date: Tue, 24 Jun 2014 08:48:47 +0200
|
||||
Subject: [PATCH 24/43] winepulse: drop realtime priority before thread
|
||||
destruction
|
||||
|
||||
prevents having to handle a kernel RT Watchdog Timeout.
|
||||
@ -23,5 +23,5 @@ index 7c07f54..ba68102 100644
|
||||
pa_context_disconnect(pulse_ctx);
|
||||
pa_context_unref(pulse_ctx);
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 7806b9b3fd846e8ce55e13ac4abdfeca4b26a270 Mon Sep 17 00:00:00 2001
|
||||
From 363670394eb26ede216523dfbaca4c22032f35b8 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:55 +0100
|
||||
Subject: [PATCH 25/42] winepulse: remove bogus SetEvent from
|
||||
Date: Tue, 24 Jun 2014 08:48:47 +0200
|
||||
Subject: [PATCH 25/43] winepulse: remove bogus SetEvent from
|
||||
pulse_started_callback
|
||||
|
||||
---
|
||||
@ -25,5 +25,5 @@ index ba68102..68de00c 100644
|
||||
|
||||
static void pulse_rd_loop(ACImpl *This, size_t bytes)
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 78a28b81d51df9aebcd7b130f8535437af9df6fa Mon Sep 17 00:00:00 2001
|
||||
From 5cfd0ad9a87b738a7bce79c966b476a682892506 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:55 +0100
|
||||
Subject: [PATCH 26/42] winepulse: disable the setevent part of the latency
|
||||
Date: Tue, 24 Jun 2014 08:48:47 +0200
|
||||
Subject: [PATCH 26/43] winepulse: disable the setevent part of the latency
|
||||
hack
|
||||
|
||||
If you get playback glitches in skyrim or other games as a result of
|
||||
@ -38,5 +38,5 @@ index 68de00c..643d55e 100644
|
||||
return S_OK;
|
||||
}
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 67159f14084007bfdd743b5e2194942e3fa1fe7a Mon Sep 17 00:00:00 2001
|
||||
From b5e9e9af838afe41a7e82ba8c5c1e0c4bd5bd517 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:55 +0100
|
||||
Subject: [PATCH 27/42] winepulse v20: fix the checks in IsFormatSupported
|
||||
Date: Tue, 24 Jun 2014 08:48:47 +0200
|
||||
Subject: [PATCH 27/43] winepulse v20: fix the checks in IsFormatSupported
|
||||
|
||||
Thanks to DGhost001 for reporting and isolating the issue.
|
||||
---
|
||||
@ -24,5 +24,5 @@ index 643d55e..86dd10a 100644
|
||||
CoTaskMemFree(closest);
|
||||
if (out)
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From d563d66ef2dda02730d8211e9334906fd9daf2e2 Mon Sep 17 00:00:00 2001
|
||||
From 2813e16dbbefcccbf4b8b29bf65c30e4d7f2605c Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:55 +0100
|
||||
Subject: [PATCH 28/42] winepulse: fixup IsFormatSupported calls
|
||||
Date: Tue, 24 Jun 2014 08:48:47 +0200
|
||||
Subject: [PATCH 28/43] winepulse: fixup IsFormatSupported calls
|
||||
|
||||
---
|
||||
dlls/mmdevapi/tests/render.c | 164 +++++++++++++++++++++++++++++++++++++++
|
||||
@ -409,5 +409,5 @@ index 86dd10a..554a9fc 100644
|
||||
TRACE("returning: %08x %p\n", hr, out ? *out : NULL);
|
||||
return hr;
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 50da53d33c85896f752802990aecf79fe29dc735 Mon Sep 17 00:00:00 2001
|
||||
From e95e4533229ef499e6e2ecb793e3054b8be3809a Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:55 +0100
|
||||
Subject: [PATCH 29/42] winepulse v21: return early if padding didn't update
|
||||
Date: Tue, 24 Jun 2014 08:48:48 +0200
|
||||
Subject: [PATCH 29/43] winepulse v21: return early if padding didn't update
|
||||
|
||||
---
|
||||
dlls/winepulse.drv/mmdevdrv.c | 5 ++++-
|
||||
@ -24,5 +24,5 @@ index 554a9fc..a4575d5 100644
|
||||
This->clock_written += oldpad - This->pad;
|
||||
TRACE("New pad: %zu (-%zu)\n", This->pad / pa_frame_size(&This->ss), (oldpad - This->pad) / pa_frame_size(&This->ss));
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 5b3f36aed665d2edb524eda22908664442234184 Mon Sep 17 00:00:00 2001
|
||||
From 0a2ea36a38fccd41fa3387be71fea39462e4102c Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:55 +0100
|
||||
Subject: [PATCH 30/42] winepulse: fix unneeded free in write..
|
||||
Date: Tue, 24 Jun 2014 08:48:48 +0200
|
||||
Subject: [PATCH 30/43] winepulse: fix unneeded free in write..
|
||||
|
||||
---
|
||||
dlls/winepulse.drv/mmdevdrv.c | 6 +++++-
|
||||
@ -32,5 +32,5 @@ index a4575d5..3ca68fd 100644
|
||||
This->locked_ptr = NULL;
|
||||
TRACE("Released %u, pad %zu\n", written_frames, This->pad / pa_frame_size(&This->ss));
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From fa89aaea30c0956c25a01ac8ad38fa4713bf47ca Mon Sep 17 00:00:00 2001
|
||||
From 46f5df733fba376a7d6bbb3804fb25e108b760f0 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:55 +0100
|
||||
Subject: [PATCH 31/42] winepulse v23: fixup a invalid free in mmdevapi
|
||||
Date: Tue, 24 Jun 2014 08:48:48 +0200
|
||||
Subject: [PATCH 31/43] winepulse v23: fixup a invalid free in mmdevapi
|
||||
|
||||
array members of ids should be dynamically allocated, judging from valgrind output.
|
||||
---
|
||||
@ -47,5 +47,5 @@ index 3ca68fd..5b041a2 100644
|
||||
(*keys)[0] = pulse_render_guid;
|
||||
else
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 8fd7e21cea105091d14f36511317af643cb256be Mon Sep 17 00:00:00 2001
|
||||
From 8d23cea7bd4c530d352d0358bb078e7c9eea4b43 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:56 +0100
|
||||
Subject: [PATCH 38/42] winepulse: use a pi-mutex for serialization.
|
||||
Date: Tue, 24 Jun 2014 08:48:48 +0200
|
||||
Subject: [PATCH 38/43] winepulse: use a pi-mutex for serialization.
|
||||
|
||||
The winepulse thread is realtime, to prevent blocking it indefinitely
|
||||
use priority inheritance. Only initialize and release are potentially
|
||||
@ -63,5 +63,5 @@ index 5b041a2..a09ce7f 100644
|
||||
if (pulse_thread)
|
||||
SetThreadPriority(pulse_thread, 0);
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 09d3be12108151fe6746f6f33a86b5fa2473e3dc Mon Sep 17 00:00:00 2001
|
||||
From 0db6f5427a3a74f23c8833680a53df63cb1ab339 Mon Sep 17 00:00:00 2001
|
||||
From: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
||||
Date: Sat, 8 Feb 2014 16:08:56 +0100
|
||||
Subject: [PATCH 39/42] winepulse: add support for IMarshal
|
||||
Date: Tue, 24 Jun 2014 08:48:49 +0200
|
||||
Subject: [PATCH 39/43] winepulse: add support for IMarshal
|
||||
|
||||
Fixes bug 32161 for winepulse. Based On Jeff Klein's patches for the
|
||||
other drivers.
|
||||
@ -133,5 +133,5 @@ index a09ce7f..f052a08 100644
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
--
|
||||
1.8.5.2
|
||||
2.0.0
|
||||
|
||||
|
@ -0,0 +1,29 @@
|
||||
From 0f7b5851573569ddf40e36e48670bf9d09765920 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Harmstone <mark@harmstone.com>
|
||||
Date: Tue, 24 Jun 2014 08:48:49 +0200
|
||||
Subject: [PATCH 43/43] winepulse: handle stream create failing correctly
|
||||
|
||||
---
|
||||
dlls/winepulse.drv/mmdevdrv.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/dlls/winepulse.drv/mmdevdrv.c b/dlls/winepulse.drv/mmdevdrv.c
|
||||
index f052a08..e755e8a 100644
|
||||
--- a/dlls/winepulse.drv/mmdevdrv.c
|
||||
+++ b/dlls/winepulse.drv/mmdevdrv.c
|
||||
@@ -701,6 +701,12 @@ static HRESULT pulse_stream_connect(ACImpl *This, UINT32 period_bytes) {
|
||||
ret = InterlockedIncrement(&number);
|
||||
sprintf(buffer, "audio stream #%i", ret);
|
||||
This->stream = pa_stream_new(pulse_ctx, buffer, &This->ss, &This->map);
|
||||
+
|
||||
+ if (!This->stream) {
|
||||
+ WARN("pa_stream_new returned error %i\n", pa_context_errno(pulse_ctx));
|
||||
+ return AUDCLNT_E_ENDPOINT_CREATE_FAILED;
|
||||
+ }
|
||||
+
|
||||
pa_stream_set_state_callback(This->stream, pulse_stream_state, This);
|
||||
pa_stream_set_buffer_attr_callback(This->stream, pulse_attr_update, This);
|
||||
pa_stream_set_moved_callback(This->stream, pulse_attr_update, This);
|
||||
--
|
||||
2.0.0
|
||||
|
@ -1,3 +0,0 @@
|
||||
Revision: 3
|
||||
Author: Maarten Lankhorst
|
||||
Title: Winepulse patches extracted from https://launchpad.net/~ubuntu-wine/+archive/ppa/+files/wine1.7_1.7.19-0ubuntu2~trusty2.debian.tar.gz.
|
4
patches/06-winepulse/definition
Normal file
4
patches/06-winepulse/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Maarten Lankhorst
|
||||
Subject: Winepulse patches extracted from https://launchpad.net/~ubuntu-wine/+archive/ubuntu/ppa/+files/wine1.7_1.7.21-0ubuntu1~ppa1.debian.tar.gz.
|
||||
Revision: 4
|
||||
Fixes: Support for PulseAudio backend for audio
|
4
patches/07-GetVolumePathName/definition
Normal file
4
patches/07-GetVolumePathName/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Erich E. Hoover
|
||||
Subject: Implement GetVolumePathName.
|
||||
Revision: 1
|
||||
Fixes: Support for GetVolumePathName
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Erich E. Hoover
|
||||
Title: Implement GetVolumePathName.
|
@ -1,4 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Erich E. Hoover
|
||||
Title: Support for junction points/reparse points.
|
||||
|
4
patches/08-Junction_Points/definition
Normal file
4
patches/08-Junction_Points/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Erich E. Hoover
|
||||
Subject: Support for junction points/reparse points.
|
||||
Revision: 1
|
||||
Fixes: [12401] Support for Junction Points
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Erich E. Hoover
|
||||
Title: Implement TransmitFile.
|
4
patches/09-TransmitFile/definition
Normal file
4
patches/09-TransmitFile/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Erich E. Hoover
|
||||
Subject: Implement TransmitFile.
|
||||
Revision: 1
|
||||
Fixes: [5048] Support for TransmitFile
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Torsten Kurbad
|
||||
Title: Implement missing Arial font expected by Silverlight.
|
4
patches/10-Missing_Fonts/definition
Normal file
4
patches/10-Missing_Fonts/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Torsten Kurbad
|
||||
Subject: Implement missing Arial font expected by Silverlight.
|
||||
Revision: 1
|
||||
Fixes: [32323] Implement an Arial replacement font
|
4
patches/12-FD_Cache/definition
Normal file
4
patches/12-FD_Cache/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Sebastian Lackner
|
||||
Subject: Use lockfree implementation for get_cached_fd.
|
||||
Revision: 4
|
||||
Fixes: Lockfree algorithm for filedescriptor cache (improves file access speed)
|
@ -1,3 +0,0 @@
|
||||
Revision: 4
|
||||
Author: Sebastian Lackner
|
||||
Title: Use lockfree implementation for get_cached_fd.
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Erich E. Hoover
|
||||
Title: Add default security descriptor ownership and DACLs for processes.
|
4
patches/13-Misc_ACL/definition
Normal file
4
patches/13-Misc_ACL/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Erich E. Hoover
|
||||
Subject: Add default security descriptor ownership and DACLs for processes.
|
||||
Revision: 1
|
||||
Fixes: [15980] GetSecurityInfo returns NULL DACL for process object
|
4
patches/14-UrlCombineW/definition
Normal file
4
patches/14-UrlCombineW/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Sebastian Lackner
|
||||
Subject: Workaround for broken implementation of shlwapi url functions.
|
||||
Revision: 1
|
||||
Fixes: Workaround for shlwapi URLs with relative paths
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: Workaround for broken implementation of shlwapi url functions.
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: Partial implementation of WTSEnumerateProcessesW.
|
4
patches/15-wtsapi32/definition
Normal file
4
patches/15-wtsapi32/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Sebastian Lackner
|
||||
Subject: Partial implementation of WTSEnumerateProcessesW.
|
||||
Revision: 1
|
||||
Fixes: [29903] Add implementation of WTSEnumerateProcessesW
|
4
patches/16-server-CreateProcess_ACLs/definition
Normal file
4
patches/16-server-CreateProcess_ACLs/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Joris van der Wel
|
||||
Subject: Implement passing ACLs to CreateProcess.
|
||||
Revision: 1
|
||||
Fixes: [22006] Support for process ACLs
|
4
patches/17-strmbase-Lock_Race_Conditions/definition
Normal file
4
patches/17-strmbase-Lock_Race_Conditions/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Erich E. Hoover
|
||||
Subject: Fix possible race conditions in strmbase/quartz.
|
||||
Revision: 1
|
||||
Fixes: [31566] Fix race conditions and deadlocks in strmbase/quartz
|
4
patches/18-quartz-MediaSeeking_Positions/definition
Normal file
4
patches/18-quartz-MediaSeeking_Positions/definition
Normal file
@ -0,0 +1,4 @@
|
||||
Author: Erich E. Hoover
|
||||
Subject: Return correct IMediaSeeking stream positions in quartz.
|
||||
Revision: 1
|
||||
Fixes: [23174] Return correct IMediaSeeking stream positions in quartz
|
@ -1,3 +0,0 @@
|
||||
Revision: 2
|
||||
Author: Michael Müller
|
||||
Title: Decrease minimum SetTimer interval to 5 ms.
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Michael Müller
|
||||
Title: Allow changing strict draw ordering through an exported function.
|
@ -1,4 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Michael Müller
|
||||
Title: Indicate direct rendering through OpenGL extension.
|
||||
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command.
|
18
patches/97-Pipelight/definition
Normal file
18
patches/97-Pipelight/definition
Normal file
@ -0,0 +1,18 @@
|
||||
Author: Michael Müller
|
||||
Subject: Decrease minimum SetTimer interval to 5 ms.
|
||||
Revision: 2
|
||||
|
||||
Author: Michael Müller
|
||||
Subject: Allow changing strict draw ordering through an exported function.
|
||||
Revision: 1
|
||||
|
||||
Author: Michael Müller
|
||||
Subject: Indicate direct rendering through OpenGL extension.
|
||||
Revision: 1
|
||||
|
||||
Author: Sebastian Lackner
|
||||
Subject: Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command.
|
||||
Revision: 1
|
||||
|
||||
Fixes: Reduced SetTimer minimum value from 15 ms to 5 ms (improves Silverlight framerates)
|
||||
Fixes: Other Pipelight specific enhancements
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: kernel32: Silence repeated CompareStringEx FIXME.
|
@ -1,4 +0,0 @@
|
||||
Revision: 2
|
||||
Author: Erich E. Hoover
|
||||
Title: wined3d: Silence repeated resource_check_usage FIXME.
|
||||
|
@ -1,3 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: wined3d: Silence repeated wined3d_swapchain_present FIXME.
|
11
patches/98-Miscellaneous/definition
Normal file
11
patches/98-Miscellaneous/definition
Normal file
@ -0,0 +1,11 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: kernel32: Silence repeated CompareStringEx FIXME.
|
||||
|
||||
Revision: 2
|
||||
Author: Erich E. Hoover
|
||||
Title: wined3d: Silence repeated resource_check_usage FIXME.
|
||||
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: wined3d: Silence repeated wined3d_swapchain_present FIXME.
|
463
patches/Makefile
463
patches/Makefile
@ -1,44 +1,441 @@
|
||||
SUBDIRS=10-Missing_Fonts
|
||||
#
|
||||
# This file is automatically generated, DO NOT EDIT!
|
||||
#
|
||||
|
||||
#PATCH:=patch -N -p0 --strip=1
|
||||
#PATCH:=git apply
|
||||
CURDIR ?= ${.CURDIR}
|
||||
PATCH:=$(CURDIR)/../debian/tools/gitapply.sh
|
||||
PATCH := $(CURDIR)/../debian/tools/gitapply.sh -d $(DESTDIR)
|
||||
|
||||
PATCHLIST := 00-Commandline.ok \
|
||||
01-Address_Change_Notification.ok \
|
||||
02-ACL_Extended_Attributes.ok \
|
||||
04-XEMBED.ok \
|
||||
05-Named_Pipe.ok \
|
||||
06-winepulse.ok \
|
||||
07-GetVolumePathName.ok \
|
||||
08-Junction_Points.ok \
|
||||
09-TransmitFile.ok \
|
||||
10-Missing_Fonts.ok \
|
||||
12-FD_Cache.ok \
|
||||
13-Misc_ACL.ok \
|
||||
14-UrlCombineW.ok \
|
||||
15-wtsapi32.ok \
|
||||
16-server-CreateProcess_ACLs.ok \
|
||||
17-strmbase-Lock_Race_Conditions.ok \
|
||||
18-quartz-MediaSeeking_Positions.ok \
|
||||
97-Pipelight.ok \
|
||||
98-Miscellaneous.ok
|
||||
|
||||
.PHONY: install
|
||||
install:
|
||||
# Update the list of patches
|
||||
cd $(CURDIR)/..; ./debian/tools/generate-patchlist.sh > $(CURDIR)/patch-list.patch;
|
||||
@$(MAKE) apply; \
|
||||
status=$$?; \
|
||||
rm -f *.ok; \
|
||||
exit $$status
|
||||
|
||||
# Apply our patches to Wine
|
||||
cd $(DESTDIR); \
|
||||
for DIR in $$(find $(CURDIR) -type d | sort); do \
|
||||
for FILE in $$(ls $$DIR | sort | grep '\.patch$$'); do \
|
||||
SHORTNAME=$$(echo "$$DIR/$$FILE" | sed 's|$(CURDIR)|\.|g' ); \
|
||||
printf "Applying patch '$$SHORTNAME'...\n"; \
|
||||
$(PATCH) < $$DIR/$$FILE || exit 1; \
|
||||
done \
|
||||
done
|
||||
.PHONY: apply
|
||||
apply: $(PATCHLIST)
|
||||
cat *.ok | sort | $(CURDIR)/../debian/tools/patchlist.sh | $(PATCH)
|
||||
cd $(DESTDIR) && autoreconf -f
|
||||
cd $(DESTDIR) && ./tools/make_requests
|
||||
|
||||
# Update the configure script
|
||||
cd $(DESTDIR); autoreconf -f;
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f *.ok
|
||||
|
||||
# Update the wineserver protocol request data
|
||||
cd $(DESTDIR); ./tools/make_requests;
|
||||
.NOTPARALLEL:
|
||||
|
||||
uninstall:
|
||||
# Remove our patches from Wine
|
||||
cd $(DESTDIR); \
|
||||
for DIR in $$(find $(CURDIR) -type d | sort -r); do \
|
||||
for FILE in $$(ls $$DIR | sort -r | grep '\.patch$$'); do \
|
||||
SHORTNAME=$$(echo "$$DIR/$$FILE" | sed 's|$(CURDIR)|\.|g' ); \
|
||||
printf "Reversing patch '$$SHORTNAME'...\n"; \
|
||||
$(PATCH) -R < $$DIR/$$FILE || exit 1; \
|
||||
done \
|
||||
done
|
||||
# Patchset 00-Commandline
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Add commandline option --patches to show the patch list. [by Sebastian Lackner]
|
||||
# | * Add commandline option --check-libs to test if shared libraries are installed. [by Michael Müller]
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/misc.c, dlls/ntdll/ntdll.spec, include/wine/library.h, libs/wine/config.c, libs/wine/loader.c,
|
||||
# | libs/wine/wine.def, libs/wine/wine.map, loader/main.c
|
||||
# |
|
||||
00-Commandline.ok:
|
||||
$(PATCH) < 00-Commandline/0001-loader-Add-commandline-option-patches-to-show-the-pa.patch
|
||||
$(PATCH) < 00-Commandline/0002-loader-Add-commandline-option-check-libs.patch
|
||||
( \
|
||||
echo "+ { \"00-Commandline\", \"Sebastian Lackner\", \"Add commandline option --patches to show the patch list.\" },"; \
|
||||
echo "+ { \"00-Commandline\", \"Michael Müller\", \"Add commandline option --check-libs to test if shared libraries are installed.\" },"; \
|
||||
) > 00-Commandline.ok
|
||||
|
||||
# Update the configure script
|
||||
cd $(DESTDIR); autoreconf;
|
||||
# Patchset 01-Address_Change_Notification
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Implement SIO_ADDRESS_LIST_CHANGE. [rev 2, by Erich E. Hoover]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#32328] Many .NET and Silverlight applications require SIO_ADDRESS_LIST_CHANGE for interface change notifications
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ws2_32/tests/sock.c, server/event.c, server/named_pipe.c, server/object.h, server/sock.c
|
||||
# |
|
||||
01-Address_Change_Notification.ok:
|
||||
$(PATCH) < 01-Address_Change_Notification/0001-server-Implement-socket-specific-ioctl-routine.patch
|
||||
$(PATCH) < 01-Address_Change_Notification/0002-server-Add-socket-side-support-for-the-interface-cha.patch
|
||||
$(PATCH) < 01-Address_Change_Notification/0003-server-Add-blocked-support-for-SIO_ADDRESS_LIST_CHAN.patch
|
||||
$(PATCH) < 01-Address_Change_Notification/0004-server-Implement-the-interface-change-notification-o.patch
|
||||
$(PATCH) < 01-Address_Change_Notification/0005-ws2_32-Add-an-interactive-test-for-interface-change-.patch
|
||||
( \
|
||||
echo "+ { \"01-Address_Change_Notification\", \"Erich E. Hoover\", \"Implement SIO_ADDRESS_LIST_CHANGE. [rev 2]\" },"; \
|
||||
) > 01-Address_Change_Notification.ok
|
||||
|
||||
# Update the wineserver protocol request data
|
||||
cd $(DESTDIR); ./tools/make_requests;
|
||||
# Patchset 02-ACL_Extended_Attributes
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Store and return security attributes with extended file attributes. [rev 6, by Erich E. Hoover]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#31858] Netflix on Firefox fails with Internet Connection Problem when loading bar is at 99%
|
||||
# | * [#34406] Finale Notepad 2012 doesn't copy/create user files on program start
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * configure.ac, dlls/advapi32/tests/security.c, dlls/shell32/shellpath.c, include/winnt.h, server/change.c, server/fd.c,
|
||||
# | server/file.c, server/file.h
|
||||
# |
|
||||
02-ACL_Extended_Attributes.ok:
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0001-server-Unify-the-storage-of-security-attributes-for-.patch
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0002-server-Unify-the-retrieval-of-security-attributes-fo.patch
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0003-server-Store-file-security-attributes-with-extended-.patch
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0004-server-Store-user-and-group-inside-stored-extended-f.patch
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0005-server-Retrieve-file-security-attributes-with-extend.patch
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0006-server-Convert-return-of-file-security-masks-with-ge.patch
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0007-server-Inherit-security-attributes-from-parent-direc.patch
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0008-server-Inherit-security-attributes-from-parent-direc.patch
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0009-shell32-Set-the-default-security-attributes-for-user.patch
|
||||
$(PATCH) < 02-ACL_Extended_Attributes/0010-server-Add-compatibility-code-for-handling-the-old-m.patch
|
||||
( \
|
||||
echo "+ { \"02-ACL_Extended_Attributes\", \"Erich E. Hoover\", \"Store and return security attributes with extended file attributes. [rev 6]\" },"; \
|
||||
) > 02-ACL_Extended_Attributes.ok
|
||||
|
||||
# Patchset 04-XEMBED
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Enable/disable windows when they are (un)mapped by foreign applications. [by Sebastian Lackner]
|
||||
# | * Update gl_drawable for embedded windows. [by Sebastian Lackner]
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/winex11.drv/event.c, dlls/winex11.drv/window.c
|
||||
# |
|
||||
04-XEMBED.ok:
|
||||
$(PATCH) < 04-XEMBED/0001-winex11-Update-gl_drawable-for-embedded-windows.patch
|
||||
$(PATCH) < 04-XEMBED/0002-winex11-Enable-disable-windows-when-they-are-un-mapped.patch
|
||||
( \
|
||||
echo "+ { \"04-XEMBED\", \"Sebastian Lackner\", \"Enable/disable windows when they are (un)mapped by foreign applications.\" },"; \
|
||||
echo "+ { \"04-XEMBED\", \"Sebastian Lackner\", \"Update gl_drawable for embedded windows.\" },"; \
|
||||
) > 04-XEMBED.ok
|
||||
|
||||
# Patchset 05-Named_Pipe
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Change return value of stub SetNamedPipeHandleState to TRUE. [by Sebastian Lackner]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#17273] Many apps and games need SetNamedPipeHandleState implementation (support for named pipe message
|
||||
# | mode)(FireFox+Flash, Win8/NET 4.x SDK/vcrun2012, WiX installers)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/sync.c
|
||||
# |
|
||||
05-Named_Pipe.ok:
|
||||
$(PATCH) < 05-Named_Pipe/0001-kernel32-Change-return-value-of-stub-SetNamedPipeHandl.patch
|
||||
( \
|
||||
echo "+ { \"05-Named_Pipe\", \"Sebastian Lackner\", \"Change return value of stub SetNamedPipeHandleState to TRUE.\" },"; \
|
||||
) > 05-Named_Pipe.ok
|
||||
|
||||
# Patchset 06-winepulse
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Winepulse patches extracted from https://launchpad.net/~ubuntu-
|
||||
# | wine/+archive/ubuntu/ppa/+files/wine1.7_1.7.21-0ubuntu1~ppa1.debian.tar.gz. [rev 4, by Maarten Lankhorst]
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * configure.ac, dlls/mmdevapi/main.c, dlls/mmdevapi/tests/render.c, dlls/winepulse.drv/Makefile.in,
|
||||
# | dlls/winepulse.drv/mmdevdrv.c, dlls/winepulse.drv/winepulse.drv.spec, dlls/winmm/lolvldrv.c
|
||||
# |
|
||||
06-winepulse.ok:
|
||||
$(PATCH) < 06-winepulse/0001-winmm-Load-winealsa-if-winepulse-is-found.patch
|
||||
$(PATCH) < 06-winepulse/0002-winepulse-Add-initial-stub-for-pulseaudio-support.patch
|
||||
$(PATCH) < 06-winepulse/0003-winepulse-Add-format-and-period-probing.patch
|
||||
$(PATCH) < 06-winepulse/0004-winepulse-Add-audioclient.patch
|
||||
$(PATCH) < 06-winepulse/0005-winepulse-Add-IAudioRenderClient-and-IAudioCaptureCl.patch
|
||||
$(PATCH) < 06-winepulse/0006-winepulse-Add-IAudioClock-and-IAudioClock2.patch
|
||||
$(PATCH) < 06-winepulse/0007-winepulse-Add-audiostreamvolume.patch
|
||||
$(PATCH) < 06-winepulse/0008-winepulse-Add-session-support.patch
|
||||
$(PATCH) < 06-winepulse/0009-fix-fdels-trailing-whitespaces.patch
|
||||
$(PATCH) < 06-winepulse/0010-winepulse-v12.patch
|
||||
$(PATCH) < 06-winepulse/0011-winepulse-v15-Add-support-for-missing-formats-and-si.patch
|
||||
$(PATCH) < 06-winepulse/0012-winepulse-v16-Add-official-warning-wine-doesn-t-want.patch
|
||||
$(PATCH) < 06-winepulse/0013-winepulse-v17-Fix-winmm-tests.patch
|
||||
$(PATCH) < 06-winepulse/0014-winepulse-v18-Latency-and-compilation-improvements.patch
|
||||
$(PATCH) < 06-winepulse/0015-winepulse-API-Compatibility-with-1.5.2-onward-v2.patch
|
||||
$(PATCH) < 06-winepulse/0016-winepulse-Fix-low-latency-support.patch
|
||||
$(PATCH) < 06-winepulse/0017-winepulse-drop-realtime-priority-before-thread-destr.patch
|
||||
$(PATCH) < 06-winepulse/0018-winepulse-remove-bogus-SetEvent-from-pulse_started_c.patch
|
||||
$(PATCH) < 06-winepulse/0019-winepulse-disable-the-setevent-part-of-the-latency-h.patch
|
||||
$(PATCH) < 06-winepulse/0020-winepulse-v20-fix-the-checks-in-IsFormatSupported.patch
|
||||
$(PATCH) < 06-winepulse/0021-winepulse-fixup-IsFormatSupported-calls.patch
|
||||
$(PATCH) < 06-winepulse/0022-winepulse-v21-return-early-if-padding-didn-t-update.patch
|
||||
$(PATCH) < 06-winepulse/0023-winepulse-fix-unneeded-free-in-write.patch
|
||||
$(PATCH) < 06-winepulse/0024-winepulse-v23-fixup-a-invalid-free-in-mmdevapi.patch
|
||||
$(PATCH) < 06-winepulse/0025-winepulse-use-a-pi-mutex-for-serialization.patch
|
||||
$(PATCH) < 06-winepulse/0026-winepulse-add-support-for-IMarshal.patch
|
||||
$(PATCH) < 06-winepulse/0027-winepulse-handle-stream-create-failing-correctly.patch
|
||||
( \
|
||||
echo "+ { \"06-winepulse\", \"Maarten Lankhorst\", \"Winepulse patches extracted from https://launchpad.net/~ubuntu-wine/+archive/ubuntu/ppa/+files/wine1.7_1.7.21-0ubuntu1~ppa1.debian.tar.gz. [rev 4]\" },"; \
|
||||
) > 06-winepulse.ok
|
||||
|
||||
# Patchset 07-GetVolumePathName
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Implement GetVolumePathName. [by Erich E. Hoover]
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/tests/volume.c, dlls/kernel32/volume.c
|
||||
# |
|
||||
07-GetVolumePathName.ok:
|
||||
$(PATCH) < 07-GetVolumePathName/0001-kernel32-Implement-GetVolumePathName.patch
|
||||
$(PATCH) < 07-GetVolumePathName/0002-kernel32-Convert-GetVolumePathName-tests-into-a-list.patch
|
||||
$(PATCH) < 07-GetVolumePathName/0003-kernel32-Add-a-bunch-more-GetVolumePathName-tests.patch
|
||||
( \
|
||||
echo "+ { \"07-GetVolumePathName\", \"Erich E. Hoover\", \"Implement GetVolumePathName.\" },"; \
|
||||
) > 07-GetVolumePathName.ok
|
||||
|
||||
# Patchset 08-Junction_Points
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Support for junction points/reparse points. [by Erich E. Hoover]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#12401] Support junction points, i.e. DeviceIoCtl(FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/path.c, dlls/kernel32/volume.c, dlls/ntdll/file.c, dlls/ntdll/tests/file.c, include/ntifs.h
|
||||
# |
|
||||
08-Junction_Points.ok:
|
||||
$(PATCH) < 08-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch
|
||||
$(PATCH) < 08-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch
|
||||
$(PATCH) < 08-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch
|
||||
$(PATCH) < 08-Junction_Points/0004-ntdll-Advertise-that-a-file-is-a-junction-point.patch
|
||||
$(PATCH) < 08-Junction_Points/0005-kernel32-ntdll-Add-support-for-deleting-junction-poi.patch
|
||||
$(PATCH) < 08-Junction_Points/0006-kernel32-Advertise-junction-point-support.patch
|
||||
$(PATCH) < 08-Junction_Points/0007-ntdll-tests-Add-test-for-deleting-junction-point-tar.patch
|
||||
( \
|
||||
echo "+ { \"08-Junction_Points\", \"Erich E. Hoover\", \"Support for junction points/reparse points.\" },"; \
|
||||
) > 08-Junction_Points.ok
|
||||
|
||||
# Patchset 09-TransmitFile
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Implement TransmitFile. [by Erich E. Hoover]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#5048] Multiple applications and games need support for ws2_32 SIO_GET_EXTENSION_FUNCTION_POINTER TransmitFile
|
||||
# | (WSAID_TRANSMITFILE)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c, include/winsock.h, server/protocol.def, server/sock.c
|
||||
# |
|
||||
09-TransmitFile.ok:
|
||||
$(PATCH) < 09-TransmitFile/0001-ws2_32-Add-stub-for-TransmitFile.patch
|
||||
$(PATCH) < 09-TransmitFile/0002-ws2_32-Check-for-invalid-parameters-in-TransmitFile.patch
|
||||
$(PATCH) < 09-TransmitFile/0003-ws2_32-Implement-a-basic-synchronous-TransmitFile.patch
|
||||
$(PATCH) < 09-TransmitFile/0004-ws2_32-Add-asynchronous-support-for-TransmitFile.patch
|
||||
$(PATCH) < 09-TransmitFile/0005-ws2_32-Add-support-for-TF_DISCONNECT-and-TF_REUSE_SO.patch
|
||||
( \
|
||||
echo "+ { \"09-TransmitFile\", \"Erich E. Hoover\", \"Implement TransmitFile.\" },"; \
|
||||
) > 09-TransmitFile.ok
|
||||
|
||||
# Patchset 10-Missing_Fonts
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Implement missing Arial font expected by Silverlight. [by Torsten Kurbad]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#32323] Netflix (Silverlight 4.x) and several .NET Framework 3.x/4.0 WPF apps require either Arial or Verdana to be
|
||||
# | installed
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * fonts/Makefile.in, fonts/arial.sfd, fonts/arial.ttf
|
||||
# |
|
||||
10-Missing_Fonts.ok:
|
||||
$(PATCH) < 10-Missing_Fonts/0001-fonts-Add-Liberation-Sans-as-an-Arial-replacement.patch
|
||||
( \
|
||||
echo "+ { \"10-Missing_Fonts\", \"Torsten Kurbad\", \"Implement missing Arial font expected by Silverlight.\" },"; \
|
||||
) > 10-Missing_Fonts.ok
|
||||
|
||||
# Patchset 12-FD_Cache
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Use lockfree implementation for get_cached_fd. [rev 4, by Sebastian Lackner]
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/ntdll/server.c
|
||||
# |
|
||||
12-FD_Cache.ok:
|
||||
$(PATCH) < 12-FD_Cache/0001-ntdll-Use-lockfree-implementation-for-get_cached_fd.patch
|
||||
( \
|
||||
echo "+ { \"12-FD_Cache\", \"Sebastian Lackner\", \"Use lockfree implementation for get_cached_fd. [rev 4]\" },"; \
|
||||
) > 12-FD_Cache.ok
|
||||
|
||||
# Patchset 13-Misc_ACL
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Add default security descriptor ownership and DACLs for processes. [by Erich E. Hoover]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#15980] Rhapsody 2 crashes on startup (GetSecurityInfo returns NULL DACL for process object)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/tests/security.c, server/process.c, server/security.h, server/token.c
|
||||
# |
|
||||
13-Misc_ACL.ok:
|
||||
$(PATCH) < 13-Misc_ACL/0001-server-Add-default-security-descriptor-ownership-for.patch
|
||||
$(PATCH) < 13-Misc_ACL/0002-server-Add-default-security-descriptor-DACL-for-proc.patch
|
||||
( \
|
||||
echo "+ { \"13-Misc_ACL\", \"Erich E. Hoover\", \"Add default security descriptor ownership and DACLs for processes.\" },"; \
|
||||
) > 13-Misc_ACL.ok
|
||||
|
||||
# Patchset 14-UrlCombineW
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Workaround for broken implementation of shlwapi url functions. [by Sebastian Lackner]
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/shlwapi/tests/url.c, dlls/shlwapi/url.c
|
||||
# |
|
||||
14-UrlCombineW.ok:
|
||||
$(PATCH) < 14-UrlCombineW/0001-shlwapi-tests-Add-additional-tests-for-UrlCombine-and-.patch
|
||||
$(PATCH) < 14-UrlCombineW/0002-shlwapi-UrlCombineW-workaround-for-relative-paths.patch
|
||||
( \
|
||||
echo "+ { \"14-UrlCombineW\", \"Sebastian Lackner\", \"Workaround for broken implementation of shlwapi url functions.\" },"; \
|
||||
) > 14-UrlCombineW.ok
|
||||
|
||||
# Patchset 15-wtsapi32
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Partial implementation of WTSEnumerateProcessesW. [by Sebastian Lackner]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#29903] Some Microsoft debuggers fail to enumerate processes due to wtsapi32.WTSEnumerateProcessesW() being a stub
|
||||
# | (Microsoft Visual Studio 2005, DbgCLR from .NET 2.0 SDK)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/wtsapi32/tests/wtsapi.c, dlls/wtsapi32/wtsapi32.c
|
||||
# |
|
||||
15-wtsapi32.ok:
|
||||
$(PATCH) < 15-wtsapi32/0001-wtsapi32-Partial-implementation-of-WTSEnumerateProce.patch
|
||||
( \
|
||||
echo "+ { \"15-wtsapi32\", \"Sebastian Lackner\", \"Partial implementation of WTSEnumerateProcessesW.\" },"; \
|
||||
) > 15-wtsapi32.ok
|
||||
|
||||
# Patchset 16-server-CreateProcess_ACLs
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Implement passing ACLs to CreateProcess. [by Joris van der Wel]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#22006] OpenProcess does not enforce ACL
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/tests/security.c, dlls/kernel32/process.c, server/object.c, server/object.h, server/process.c,
|
||||
# | server/protocol.def
|
||||
# |
|
||||
16-server-CreateProcess_ACLs.ok:
|
||||
$(PATCH) < 16-server-CreateProcess_ACLs/0001-server-A-new-function-set_sd_defaults_from_token-try.patch
|
||||
$(PATCH) < 16-server-CreateProcess_ACLs/0002-server-Support-sending-process-and-thread-security-d.patch
|
||||
$(PATCH) < 16-server-CreateProcess_ACLs/0003-server-implement-passing-a-process-security-descript.patch
|
||||
$(PATCH) < 16-server-CreateProcess_ACLs/0004-server-implement-passing-a-thread-security-descripto.patch
|
||||
( \
|
||||
echo "+ { \"16-server-CreateProcess_ACLs\", \"Joris van der Wel\", \"Implement passing ACLs to CreateProcess.\" },"; \
|
||||
) > 16-server-CreateProcess_ACLs.ok
|
||||
|
||||
# Patchset 17-strmbase-Lock_Race_Conditions
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Fix possible race conditions in strmbase/quartz. [by Erich E. Hoover]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#31566] Fallout 3: regression causes block at critical section when radio is enabled
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/quartz/dsoundrender.c, dlls/quartz/videorenderer.c, dlls/strmbase/renderer.c
|
||||
# |
|
||||
17-strmbase-Lock_Race_Conditions.ok:
|
||||
$(PATCH) < 17-strmbase-Lock_Race_Conditions/0001-strmbase-Fix-race-condition-on-InputPin_BeginFlush-b.patch
|
||||
$(PATCH) < 17-strmbase-Lock_Race_Conditions/0002-strmbase-Fix-race-condition-on-InputPin_EndFlush-bet.patch
|
||||
$(PATCH) < 17-strmbase-Lock_Race_Conditions/0003-strmbase-Fix-race-condition-on-InputPin_EndOfStream-.patch
|
||||
$(PATCH) < 17-strmbase-Lock_Race_Conditions/0004-quartz-Fix-race-condition-on-EndOfStream-between-csR.patch
|
||||
$(PATCH) < 17-strmbase-Lock_Race_Conditions/0005-quartz-Fix-race-condition-on-EndFlush-between-csRend.patch
|
||||
$(PATCH) < 17-strmbase-Lock_Race_Conditions/0006-quartz-Fix-race-condition-between-EndOfStream-and-Pa.patch
|
||||
( \
|
||||
echo "+ { \"17-strmbase-Lock_Race_Conditions\", \"Erich E. Hoover\", \"Fix possible race conditions in strmbase/quartz.\" },"; \
|
||||
) > 17-strmbase-Lock_Race_Conditions.ok
|
||||
|
||||
# Patchset 18-quartz-MediaSeeking_Positions
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Return correct IMediaSeeking stream positions in quartz. [by Erich E. Hoover]
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#23174] Fallout 3: Diologue and Video/sound issues
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/quartz/filtergraph.c
|
||||
# |
|
||||
18-quartz-MediaSeeking_Positions.ok:
|
||||
$(PATCH) < 18-quartz-MediaSeeking_Positions/0001-quartz-Include-the-stream-position-in-addition-to-th.patch
|
||||
$(PATCH) < 18-quartz-MediaSeeking_Positions/0002-quartz-Implement-MediaSeeking_GetCurrentPosition-on-.patch
|
||||
$(PATCH) < 18-quartz-MediaSeeking_Positions/0003-quartz-Implement-MediaSeeking_GetStopPosition-on-top.patch
|
||||
$(PATCH) < 18-quartz-MediaSeeking_Positions/0004-quartz-Remove-unused-cache-of-MediaSeeking-stop-posi.patch
|
||||
( \
|
||||
echo "+ { \"18-quartz-MediaSeeking_Positions\", \"Erich E. Hoover\", \"Return correct IMediaSeeking stream positions in quartz.\" },"; \
|
||||
) > 18-quartz-MediaSeeking_Positions.ok
|
||||
|
||||
# Patchset 97-Pipelight
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * Decrease minimum SetTimer interval to 5 ms. [rev 2, by Michael Müller]
|
||||
# | * Allow changing strict draw ordering through an exported function. [by Michael Müller]
|
||||
# | * Indicate direct rendering through OpenGL extension. [by Michael Müller]
|
||||
# | * Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command. [by Sebastian Lackner]
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/user32/message.c, dlls/wined3d/wined3d.spec, dlls/wined3d/wined3d_main.c, dlls/winex11.drv/init.c,
|
||||
# | dlls/winex11.drv/opengl.c, dlls/winex11.drv/x11drv.h
|
||||
# |
|
||||
97-Pipelight.ok:
|
||||
$(PATCH) < 97-Pipelight/0001-winex11-Implement-X11DRV_FLUSH_GDI_DISPLAY-ExtEscape-c.patch
|
||||
$(PATCH) < 97-Pipelight/0002-user32-Decrease-minimum-SetTimer-interval-to-5-ms.patch
|
||||
$(PATCH) < 97-Pipelight/0003-wined3d-allow-changing-strict-drawing-through-an-exp.patch
|
||||
$(PATCH) < 97-Pipelight/0004-winex11.drv-Indicate-direct-rendering-through-OpenGL.patch
|
||||
( \
|
||||
echo "+ { \"97-Pipelight\", \"Michael Müller\", \"Decrease minimum SetTimer interval to 5 ms. [rev 2]\" },"; \
|
||||
echo "+ { \"97-Pipelight\", \"Michael Müller\", \"Allow changing strict draw ordering through an exported function.\" },"; \
|
||||
echo "+ { \"97-Pipelight\", \"Michael Müller\", \"Indicate direct rendering through OpenGL extension.\" },"; \
|
||||
echo "+ { \"97-Pipelight\", \"Sebastian Lackner\", \"Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command.\" },"; \
|
||||
) > 97-Pipelight.ok
|
||||
|
||||
# Patchset 98-Miscellaneous
|
||||
# |
|
||||
# | Included patches:
|
||||
# | * kernel32: Silence repeated CompareStringEx FIXME. [by Sebastian Lackner]
|
||||
# | * wined3d: Silence repeated resource_check_usage FIXME. [rev 2, by Erich E. Hoover]
|
||||
# | * wined3d: Silence repeated wined3d_swapchain_present FIXME. [by Sebastian Lackner]
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/kernel32/locale.c, dlls/wined3d/resource.c, dlls/wined3d/swapchain.c
|
||||
# |
|
||||
98-Miscellaneous.ok:
|
||||
$(PATCH) < 98-Miscellaneous/0001-wined3d-Silence-repeated-resource_check_usage-FIXME.patch
|
||||
$(PATCH) < 98-Miscellaneous/0002-kernel32-Silence-repeated-CompareStringEx-FIXME.patch
|
||||
$(PATCH) < 98-Miscellaneous/0003-wined3d-Silence-repeated-wined3d_swapchain_present-F.patch
|
||||
( \
|
||||
echo "+ { \"98-Miscellaneous\", \"Sebastian Lackner\", \"kernel32: Silence repeated CompareStringEx FIXME.\" },"; \
|
||||
echo "+ { \"98-Miscellaneous\", \"Erich E. Hoover\", \"wined3d: Silence repeated resource_check_usage FIXME. [rev 2]\" },"; \
|
||||
echo "+ { \"98-Miscellaneous\", \"Sebastian Lackner\", \"wined3d: Silence repeated wined3d_swapchain_present FIXME.\" },"; \
|
||||
) > 98-Miscellaneous.ok
|
||||
|
||||
|
@ -1,91 +0,0 @@
|
||||
From: "FDS-Team" <webmaster@fds-team.de>
|
||||
Subject: Autogenerated patch list.
|
||||
|
||||
---
|
||||
diff --git a/libs/wine/config.c b/libs/wine/config.c
|
||||
index a273502..5fa0cd5 100644
|
||||
--- a/libs/wine/config.c
|
||||
+++ b/libs/wine/config.c
|
||||
@@ -478,6 +478,46 @@ const char *wine_get_version(void)
|
||||
return PACKAGE_VERSION;
|
||||
}
|
||||
|
||||
+struct wine_patch {
|
||||
+ const char *hash;
|
||||
+ const char *author;
|
||||
+ const char *title;
|
||||
+} wine_patch_data[] = {
|
||||
+ { "1b7ac850-5040-4d9e-8fde-9c483c3baf33:1", "Sebastian Lackner", "Add commandline option --patches to show the patch list." },
|
||||
+ { "9e9a58e1-b226-4d4d-943b-be9a4c1dc525:1", "Michael Müller", "Add commandline option --check-libs to test if shared libraries are installed." },
|
||||
+ { "8a366b6d-8ad6-4581-8aa9-66a03590a57b:2", "Erich E. Hoover", "Implement SIO_ADDRESS_LIST_CHANGE." },
|
||||
+ { "92938b89-506b-430a-ba50-32de8b286e56:6", "Erich E. Hoover", "Store and return security attributes with extended file attributes." },
|
||||
+ { "5d6bb7b5-ec88-4ed3-907d-9ad2173a2f88:1", "Sebastian Lackner", "Enable/disable windows when they are (un)mapped by foreign applications." },
|
||||
+ { "94186fff-6dbf-44d0-8eb1-2463d1608a0f:1", "Sebastian Lackner", "Update gl_drawable for embedded windows." },
|
||||
+ { "cbe240e8-2c58-430a-b61c-7fbb9d0e1e11:1", "Sebastian Lackner", "Change return value of stub SetNamedPipeHandleState to TRUE." },
|
||||
+ { "00273da7-72f8-4025-9e96-0c2bc95dacdb:3", "Maarten Lankhorst", "Winepulse patches extracted from https://launchpad.net/~ubuntu-wine/+archive/ppa/+files/wine1.7_1.7.19-0ubuntu2~trusty2.debian.tar.gz." },
|
||||
+ { "fbea4ef6-85ac-4524-b32d-fc9882b73e5a:1", "Erich E. Hoover", "Implement GetVolumePathName." },
|
||||
+ { "4cd13e94-7f2d-11e3-b5eb-0090f5c75ad5:1", "Erich E. Hoover", "Support for junction points/reparse points." },
|
||||
+ { "5fb1f5c8-7f17-11e3-9b62-0090f5c75ad5:1", "Erich E. Hoover", "Implement TransmitFile." },
|
||||
+ { "3d7c4774-9e7f-11e3-9cfc-0090f5c75ad5:1", "Torsten Kurbad", "Implement missing Arial font expected by Silverlight." },
|
||||
+ { "e7581ed7-12b3-4ed3-835b-5a62afbf9c85:4", "Sebastian Lackner", "Use lockfree implementation for get_cached_fd." },
|
||||
+ { "3405aa34-f341-11e3-83ce-0090f5c75ad5:1", "Erich E. Hoover", "Add default security descriptor ownership and DACLs for processes." },
|
||||
+ { "e46b26df-3c1b-419c-9579-f0d1e1c50bea:1", "Sebastian Lackner", "Workaround for broken implementation of shlwapi url functions." },
|
||||
+ { "3790a2d5-f930-423e-9c03-f7fc1c1e0811:1", "Sebastian Lackner", "Partial implementation of WTSEnumerateProcessesW." },
|
||||
+ { "a3f43350-092c-11e4-9b1e-0090f5c75ad5:1", "Joris van der Wel", "Implement passing ACLs to CreateProcess." },
|
||||
+ { "c64ef9a8-0dd2-11e4-ab01-0090f5c75ad5:1", "Erich E. Hoover", "Fix possible race conditions in strmbase/quartz." },
|
||||
+ { "748e5166-11ad-11e4-ae23-0090f5c75ad5:1", "Erich E. Hoover", "Return correct IMediaSeeking stream positions in quartz." },
|
||||
+ { "0b21d7ac-0387-4493-aa38-fbafe3e749f5:2", "Michael Müller", "Decrease minimum SetTimer interval to 5 ms." },
|
||||
+ { "2394843e-2bc4-4fa4-8368-1ef32093b89e:1", "Michael Müller", "Allow changing strict draw ordering through an exported function." },
|
||||
+ { "255473fa-4e0a-4f51-952b-4deecc1a2181:1", "Michael Müller", "Indicate direct rendering through OpenGL extension." },
|
||||
+ { "59bd38b7-bbdc-4cfd-9ccd-1c72c4ed84c0:1", "Sebastian Lackner", "Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command." },
|
||||
+ { "325645ba-d39d-4de4-9c94-3fe694eedaab:1", "Sebastian Lackner", "kernel32: Silence repeated CompareStringEx FIXME." },
|
||||
+ { "acff3012-0f75-4710-9941-08b5ce4c61f3:2", "Erich E. Hoover", "wined3d: Silence repeated resource_check_usage FIXME." },
|
||||
+ { "c7263660-be78-439b-979f-e745a8d87120:1", "Sebastian Lackner", "wined3d: Silence repeated wined3d_swapchain_present FIXME." },
|
||||
+ { NULL, NULL, NULL }
|
||||
+};
|
||||
+
|
||||
+/* return the applied non-standard patches */
|
||||
+const void * wine_get_patches(void)
|
||||
+{
|
||||
+ return &wine_patch_data[0];
|
||||
+}
|
||||
+
|
||||
/* return the build id string */
|
||||
const char *wine_get_build_id(void)
|
||||
{
|
||||
diff --git a/libs/wine/wine.def b/libs/wine/wine.def
|
||||
index ed315bd..5b42029 100644
|
||||
--- a/libs/wine/wine.def
|
||||
+++ b/libs/wine/wine.def
|
||||
@@ -83,6 +83,7 @@ EXPORTS
|
||||
wine_get_sortkey
|
||||
wine_get_user_name
|
||||
wine_get_version
|
||||
+ wine_get_patches
|
||||
wine_init
|
||||
wine_init_argv0_path
|
||||
wine_is_dbcs_leadbyte
|
||||
diff --git a/libs/wine/wine.map b/libs/wine/wine.map
|
||||
index 2159fac..7cb2918 100644
|
||||
--- a/libs/wine/wine.map
|
||||
+++ b/libs/wine/wine.map
|
||||
@@ -90,6 +90,7 @@ WINE_1.0
|
||||
wine_get_ss;
|
||||
wine_get_user_name;
|
||||
wine_get_version;
|
||||
+ wine_get_patches;
|
||||
wine_init;
|
||||
wine_init_argv0_path;
|
||||
wine_is_dbcs_leadbyte;
|
||||
diff --git a/include/wine/library.h b/include/wine/library.h
|
||||
index 242bb69..aa9e585 100644
|
||||
--- a/include/wine/library.h
|
||||
+++ b/include/wine/library.h
|
||||
@@ -43,6 +43,7 @@ extern const char *wine_get_data_dir(void);
|
||||
extern const char *wine_get_server_dir(void);
|
||||
extern const char *wine_get_user_name(void);
|
||||
extern const char *wine_get_version(void);
|
||||
+extern const void *wine_get_patches(void);
|
||||
extern const char *wine_get_build_id(void);
|
||||
extern void wine_init_argv0_path( const char *argv0 );
|
||||
extern void wine_exec_wine_binary( const char *name, char **argv, const char *env_var );
|
@ -2,12 +2,12 @@
|
||||
# Installation: ln -s ../../precommit-hook.sh .git/hooks/pre-commit
|
||||
|
||||
git diff --cached --name-status | while read status file; do
|
||||
if [[ "$file" =~ ^patches/ ]] || [[ "$file" =~ ^debian/tools/generate-patchlist.sh$ ]]; then
|
||||
if [[ "$file" =~ ^patches/ ]] || [[ "$file" =~ ^debian/tools/ ]] || [[ "$file" =~ ^debian/changelog ]]; then
|
||||
echo ""
|
||||
echo "*** GENERATING patch-list.patch ***"
|
||||
echo "*** UPDATING AUTOGENERATED FILES ***"
|
||||
echo ""
|
||||
debian/tools/generate-patchlist.sh > patches/patch-list.patch || exit 1
|
||||
git add patches/patch-list.patch || exit 1
|
||||
debian/tools/patchupdate.py || exit 1
|
||||
git add patches/Makefile README.md || exit 1
|
||||
break;
|
||||
fi
|
||||
done
|
||||
|
Loading…
x
Reference in New Issue
Block a user