Initial version of new dependency based patch system.

This commit is contained in:
Sebastian Lackner 2014-07-11 18:51:03 +02:00
parent 9d3369d7a6
commit 42afbafa33
32 changed files with 582 additions and 175 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.ok

View File

@ -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));

247
debian/tools/patchupdate.py vendored Executable file
View File

@ -0,0 +1,247 @@
#!/usr/bin/python
import sys
import os
import textwrap
import urllib
import contextlib
from xml.dom import minidom
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.patches = []
self.files = set()
self.depends = set()
self.verify_depends = set()
self.verify_time = None
def pairs(a):
for i, j in enumerate(a):
for k in a[i+1:]:
yield (j, k)
def causal_time_combine(a, b):
return [(a if a > b else b) for a, b in zip(a, b)]
def causal_time_smaller(a, 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(a, b):
return causal_time_smaller(a, b) or causal_time_smaller(b, a)
def verify_dependencies(all_patches):
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:
print "** Found circular dependencies, unable to apply remaining patches:"
print "** %s" % ", ".join([patch.name for dummy, patch in patches.iteritems()])
exit(1)
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.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
for f, indices in modified_files.iteritems():
for i, j in pairs(indices):
if not causal_time_relation(all_patches[i].verify_time, all_patches[j].verify_time):
print "** Missing dependency between %s and %s" % (all_patches[i].name, all_patches[j].name)
print "** Both patches modify the same file %s" % f
exit(1)
def lsdiff(f):
with open(f) as fp:
for line in fp:
if line.startswith("diff --git "):
tmp = line.strip().split(" ")
if len(tmp) == 4 and tmp[3].startswith("b/"):
yield tmp[3][2:]
def read_patchsets(directory):
next_patch = 0
patches = {}
name_to_id = {}
for name in sorted(os.listdir(directory)): # Read in sorted order to ensure created Makefile doesn't change too much
if name in [".", ".."]: continue
subdirectory = os.path.join(directory, name)
if not os.path.isdir(subdirectory): continue
patch = PatchSet(name)
for f in sorted(os.listdir(subdirectory)):
if not f.endswith(".patch") or not os.path.isfile(os.path.join(subdirectory, f)):
continue
# Append to the list of patches within this set
patch.patches.append(f)
# Determine which files are affected
for modified_file in lsdiff(os.path.join(subdirectory, f)):
patch.files.add(modified_file)
# No single patch within this directory, ignore it
if len(patch.patches) == 0:
del patch
continue
patches[next_patch] = patch
name_to_id[name] = next_patch
next_patch += 1
# Now read the definition files in a second step
for i, patch in patches.iteritems():
deffile = os.path.join(os.path.join(directory, patch.name), "definition")
if not os.path.isfile(deffile):
print "** Missing definition file: %s" % deffile
exit(1)
info = AuthorInfo()
with open(deffile) as fp:
for line in fp:
if line.startswith("#"): continue
tmp = line.split(":", 1)
if len(tmp) < 2:
if len(info.author) and len(info.subject) and len(info.revision):
patch.authors.append(info)
info = AuthorInfo()
continue
cmd = tmp[0].lower()
val = tmp[1].strip()
if cmd == "author":
if len(info.author): info.author += ", "
info.author += val
elif cmd == "subject" or cmd == "title":
if len(info.subject): info.subject += " "
info.subject += val
elif cmd == "revision":
if len(info.revision): info.revision += ", "
info.revision += val
elif cmd == "fixes":
try:
val = int(val)
except ValueError:
continue # Ignore invalid entry
with contextlib.closing(urllib.urlopen("http://bugs.winehq.org/show_bug.cgi?id=%d&ctype=xml&field=short_desc" % val)) as wr:
xmldoc = minidom.parseString(wr.read())
short_desc = xmldoc.getElementsByTagName('short_desc')[0].firstChild.data
patch.fixes.append((val, short_desc))
elif cmd == "depends":
if not name_to_id.has_key(val):
print "** Definition file %s references unknown dependency %s" % (deffile, val)
exit(1)
patch.depends.add(name_to_id[val])
else:
print "** 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)
return patches
def generate_makefile(patches):
fp = sys.stdout
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 patches.iteritems()]))
fp.write("\n")
fp.write(".PHONY: install\n")
fp.write("install: $(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("\trm -f *.ok\n")
fp.write("\n")
fp.write(".PHONY: abort\n")
fp.write("abort:\n")
fp.write("\trm -f *.ok\n")
fp.write("\n")
for i, patch in patches.iteritems():
fp.write("# Patchset %s\n" % patch.name)
fp.write("# |\n")
fp.write("# | Included patches:\n")
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")
if len(patch.fixes):
fp.write("# | This patchset fixes the following Wine bugs:\n")
for (bugid, bugname) in patch.fixes:
fp.write("# | *\t%s\n" % "\n# | \t".join(textwrap.wrap("[#%d] %s" % (bugid, bugname), 120)))
fp.write("# |\n")
depends = " ".join([""] + ["%s.ok" % 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.patches:
fp.write("\t$(PATCH) < %s\n" % os.path.join(patch.name, f))
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");
def generate_readme(patches):
pass
if __name__ == "__main__":
patches = read_patchsets("./patches")
verify_dependencies(patches)
generate_makefile(patches)

View File

@ -1,3 +0,0 @@
Revision: 1
Author: Sebastian Lackner
Title: Add commandline option --patches to show the patch list.

View File

@ -1,3 +1,7 @@
Revision: 1
Author: Sebastian Lackner
Title: Add commandline option --patches to show the patch list.
Revision: 1
Author: Michael Müller
Title: Add commandline option --check-libs to test if shared libraries are installed.

View File

@ -1,3 +1,4 @@
Revision: 2
Author: Erich E. Hoover
Title: Implement SIO_ADDRESS_LIST_CHANGE.
Fixes: 32328

View File

@ -1,3 +0,0 @@
Revision: 1
Author: Sebastian Lackner
Title: Update gl_drawable for embedded windows.

View File

@ -1,3 +1,7 @@
Revision: 1
Author: Sebastian Lackner
Title: Enable/disable windows when they are (un)mapped by foreign applications.
Revision: 1
Author: Sebastian Lackner
Title: Update gl_drawable for embedded windows.

View File

@ -1,3 +1,6 @@
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.
# Both patches modify configure.ac
Depends: 02-ACL_Extended_Attributes

View File

@ -2,3 +2,5 @@ Revision: 1
Author: Erich E. Hoover
Title: Support for junction points/reparse points.
# Both patches modify dlls/kernel32/volume.c
Depends: 07-GetVolumePathName

View File

@ -1,3 +0,0 @@
Revision: 1
Author: Erich E. Hoover
Title: Implement TransmitFile.

View File

@ -0,0 +1,6 @@
Revision: 1
Author: Erich E. Hoover
Title: Implement TransmitFile.
# both patches modify server/sock.c
Depends: 01-Address_Change_Notification

View File

@ -1,3 +1,6 @@
Revision: 1
Author: Erich E. Hoover
Title: Add default security descriptor ownership and DACLs for processes.
# Both patches modify dlls/advapi32/tests/security.c
Depends: 02-ACL_Extended_Attributes

View File

@ -1,3 +0,0 @@
Revision: 2
Author: Michael Müller
Title: Decrease minimum SetTimer interval to 5 ms.

View File

@ -1,3 +0,0 @@
Revision: 1
Author: Michael Müller
Title: Allow changing strict draw ordering through an exported function.

View File

@ -1,4 +0,0 @@
Revision: 1
Author: Michael Müller
Title: Indicate direct rendering through OpenGL extension.

View File

@ -1,3 +0,0 @@
Revision: 1
Author: Sebastian Lackner
Title: Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command.

View File

@ -0,0 +1,15 @@
Revision: 2
Author: Michael Müller
Title: Decrease minimum SetTimer interval to 5 ms.
Revision: 1
Author: Michael Müller
Title: Allow changing strict draw ordering through an exported function.
Revision: 1
Author: Michael Müller
Title: Indicate direct rendering through OpenGL extension.
Revision: 1
Author: Sebastian Lackner
Title: Implement X11DRV_FLUSH_GDI_DISPLAY ExtEscape command.

View File

@ -1,3 +0,0 @@
Revision: 1
Author: Sebastian Lackner
Title: kernel32: Silence repeated CompareStringEx FIXME.

View File

@ -1,4 +0,0 @@
Revision: 2
Author: Erich E. Hoover
Title: wined3d: Silence repeated resource_check_usage FIXME.

View File

@ -1,3 +0,0 @@
Revision: 1
Author: Sebastian Lackner
Title: wined3d: Silence repeated wined3d_swapchain_present FIXME.

View 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.

View File

@ -1,44 +1,290 @@
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)
install:
# Update the list of patches
cd $(CURDIR)/..; ./debian/tools/generate-patchlist.sh > $(CURDIR)/patch-list.patch;
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 \
97-Pipelight.ok \
98-Miscellaneous.ok
# 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: install
install: $(PATCHLIST)
cat *.ok | sort | $(CURDIR)/../debian/tools/patchlist.sh | $(PATCH)
cd $(DESTDIR); autoreconf -f
cd $(DESTDIR); ./tools/make_requests
rm -f *.ok
# Update the configure script
cd $(DESTDIR); autoreconf -f;
.PHONY: abort
abort:
rm -f *.ok
# Update the wineserver protocol request data
cd $(DESTDIR); ./tools/make_requests;
# 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]
# |
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
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 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
# |
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 configure script
cd $(DESTDIR); autoreconf;
# Patchset 02-ACL_Extended_Attributes
# |
# | Included patches:
# | * Store and return security attributes with extended file attributes. [rev 6, by Erich E. Hoover]
# |
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
# Update the wineserver protocol request data
cd $(DESTDIR); ./tools/make_requests;
# 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]
# |
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]
# |
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/ppa/+files/wine1.7_1.7.19-0ubuntu2~trusty2.debian.tar.gz. [rev 3, by Maarten Lankhorst]
# |
06-winepulse.ok: 02-ACL_Extended_Attributes.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
( \
echo "+ { \"06-winepulse\", \"Maarten Lankhorst\", \"Winepulse patches extracted from https://launchpad.net/~ubuntu-wine/+archive/ppa/+files/wine1.7_1.7.19-0ubuntu2~trusty2.debian.tar.gz. [rev 3]\" },"; \
) > 06-winepulse.ok
# Patchset 07-GetVolumePathName
# |
# | Included patches:
# | * Implement GetVolumePathName. [by Erich E. Hoover]
# |
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]
# |
08-Junction_Points.ok: 07-GetVolumePathName.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
$(PATCH) < 08-Junction_Points/0008-ntdll-Use-relative-paths-for-creating-links.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]
# |
09-TransmitFile.ok: 01-Address_Change_Notification.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 fonts expected by Silverlight. [by Erich E. Hoover]
# |
10-Missing_Fonts.ok:
$(PATCH) < 10-Missing_Fonts/0001-fonts-Add-a-subset-of-Liberation-Sans-as-an-Arial-re.patch
$(PATCH) < 10-Missing_Fonts/0002-fonts-Implement-the-rest-of-Liberation-Sans-Arial-re.patch
( \
echo "+ { \"10-Missing_Fonts\", \"Erich E. Hoover\", \"Implement missing fonts 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]
# |
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]
# |
13-Misc_ACL.ok: 02-ACL_Extended_Attributes.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]
# |
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]
# |
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 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]
# |
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]
# |
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

View File

@ -1,88 +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,43 @@ 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", "Erich E. Hoover", "Implement missing fonts 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." },
+ { "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 );

View File

@ -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/ ]]; 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 > patches/Makefile || exit 1
git add patches/Makefile || exit 1
break;
fi
done