From 8d276fcfe12fa32a03a908167ae10d467a6768e6 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sat, 9 Aug 2014 03:05:27 +0200 Subject: [PATCH] patchupdate.py: Always change directory before running $(PATCH), simplifies using other patch commands. --- debian/tools/Makefile.in | 6 +- debian/tools/patchupdate.py | 2 +- patches/Makefile | 236 ++++++++++++++++++------------------ 3 files changed, 126 insertions(+), 118 deletions(-) diff --git a/debian/tools/Makefile.in b/debian/tools/Makefile.in index 66acf572..b6229446 100644 --- a/debian/tools/Makefile.in +++ b/debian/tools/Makefile.in @@ -3,7 +3,11 @@ # CURDIR ?= ${{.CURDIR}} -PATCH := $(CURDIR)/../debian/tools/gitapply.sh -d $(DESTDIR) +PATCH := $(CURDIR)/../debian/tools/gitapply.sh + +APPLY_PATCH = \ + @echo "Applying $(1)"; \ + cd $(DESTDIR) && $(PATCH) < $(CURDIR)/$(1) PATCHLIST := {patchlist} diff --git a/debian/tools/patchupdate.py b/debian/tools/patchupdate.py index 46378910..40212ec6 100755 --- a/debian/tools/patchupdate.py +++ b/debian/tools/patchupdate.py @@ -452,7 +452,7 @@ def generate_makefile(all_patches, fp): 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)) + fp.write("\t$(call APPLY_PATCH,%s)\n" % os.path.join(patch.name, f)) # Create *.ok file (used to generate patchlist) if len(patch.authors): diff --git a/patches/Makefile b/patches/Makefile index f4ed38ed..be098889 100644 --- a/patches/Makefile +++ b/patches/Makefile @@ -3,7 +3,11 @@ # CURDIR ?= ${.CURDIR} -PATCH := $(CURDIR)/../debian/tools/gitapply.sh -d $(DESTDIR) +PATCH := $(CURDIR)/../debian/tools/gitapply.sh + +APPLY_PATCH = \ + @echo "Applying $(1)"; \ + cd $(DESTDIR) && $(PATCH) < $(CURDIR)/$(1) PATCHLIST := Miscellaneous.ok \ Pipelight.ok \ @@ -72,9 +76,9 @@ clean: # | .INTERMEDIATE: Miscellaneous.ok Miscellaneous.ok: - $(PATCH) < Miscellaneous/0001-wined3d-Silence-repeated-resource_check_usage-FIXME.patch - $(PATCH) < Miscellaneous/0002-kernel32-Silence-repeated-CompareStringEx-FIXME.patch - $(PATCH) < Miscellaneous/0003-wined3d-Silence-repeated-wined3d_swapchain_present-F.patch + $(call APPLY_PATCH,Miscellaneous/0001-wined3d-Silence-repeated-resource_check_usage-FIXME.patch) + $(call APPLY_PATCH,Miscellaneous/0002-kernel32-Silence-repeated-CompareStringEx-FIXME.patch) + $(call APPLY_PATCH,Miscellaneous/0003-wined3d-Silence-repeated-wined3d_swapchain_present-F.patch) @( \ echo '+ { "Miscellaneous", "Sebastian Lackner", "kernel32: Silence repeated CompareStringEx FIXME." },'; \ echo '+ { "Miscellaneous", "Erich E. Hoover", "wined3d: Silence repeated resource_check_usage FIXME. [rev 2]" },'; \ @@ -95,10 +99,10 @@ Miscellaneous.ok: # | .INTERMEDIATE: Pipelight.ok Pipelight.ok: - $(PATCH) < Pipelight/0001-winex11-Implement-X11DRV_FLUSH_GDI_DISPLAY-ExtEscape-c.patch - $(PATCH) < Pipelight/0002-user32-Decrease-minimum-SetTimer-interval-to-5-ms.patch - $(PATCH) < Pipelight/0003-wined3d-allow-changing-strict-drawing-through-an-exp.patch - $(PATCH) < Pipelight/0004-winex11.drv-Indicate-direct-rendering-through-OpenGL.patch + $(call APPLY_PATCH,Pipelight/0001-winex11-Implement-X11DRV_FLUSH_GDI_DISPLAY-ExtEscape-c.patch) + $(call APPLY_PATCH,Pipelight/0002-user32-Decrease-minimum-SetTimer-interval-to-5-ms.patch) + $(call APPLY_PATCH,Pipelight/0003-wined3d-allow-changing-strict-drawing-through-an-exp.patch) + $(call APPLY_PATCH,Pipelight/0004-winex11.drv-Indicate-direct-rendering-through-OpenGL.patch) @( \ echo '+ { "Pipelight", "Michael Müller", "Decrease minimum SetTimer interval to 5 ms. [rev 2]" },'; \ echo '+ { "Pipelight", "Michael Müller", "Allow changing strict draw ordering through an exported function." },'; \ @@ -119,7 +123,7 @@ Pipelight.ok: # | .INTERMEDIATE: atl-IOCS_Property.ok atl-IOCS_Property.ok: - $(PATCH) < atl-IOCS_Property/0001-atl-Don-t-use-GWLP_USERDATA-to-store-IOCS-to-avoid-c.patch + $(call APPLY_PATCH,atl-IOCS_Property/0001-atl-Don-t-use-GWLP_USERDATA-to-store-IOCS-to-avoid-c.patch) @( \ echo '+ { "atl-IOCS_Property", "Qian Hong", "Store IOCS data in a property instead of GWLP_USERDATA." },'; \ ) > atl-IOCS_Property.ok @@ -139,8 +143,8 @@ atl-IOCS_Property.ok: # | .INTERMEDIATE: comctl32-LoadIconMetric.ok comctl32-LoadIconMetric.ok: - $(PATCH) < comctl32-LoadIconMetric/0001-comctl32-Implement-LoadIconMetric-function.patch - $(PATCH) < comctl32-LoadIconMetric/0002-comctl32-tests-Add-tests-for-LoadIconMetric-function.patch + $(call APPLY_PATCH,comctl32-LoadIconMetric/0001-comctl32-Implement-LoadIconMetric-function.patch) + $(call APPLY_PATCH,comctl32-LoadIconMetric/0002-comctl32-tests-Add-tests-for-LoadIconMetric-function.patch) @( \ echo '+ { "comctl32-LoadIconMetric", "Michael Müller", "Implement LoadIconMetric function." },'; \ ) > comctl32-LoadIconMetric.ok @@ -158,8 +162,8 @@ comctl32-LoadIconMetric.ok: # | .INTERMEDIATE: ddraw-Empty_Hardware_Flags.ok ddraw-Empty_Hardware_Flags.ok: - $(PATCH) < ddraw-Empty_Hardware_Flags/0001-ddraw-tests-Remove-broken-tests-of-D3DTRANSFORM_UNCL.patch - $(PATCH) < ddraw-Empty_Hardware_Flags/0002-ddraw-Return-empty-D3D-hardware-flags-for-RGB-device.patch + $(call APPLY_PATCH,ddraw-Empty_Hardware_Flags/0001-ddraw-tests-Remove-broken-tests-of-D3DTRANSFORM_UNCL.patch) + $(call APPLY_PATCH,ddraw-Empty_Hardware_Flags/0002-ddraw-Return-empty-D3D-hardware-flags-for-RGB-device.patch) @( \ echo '+ { "ddraw-Empty_Hardware_Flags", "Erich E. Hoover", "Return empty D3D hardware flags for HEL device enumeration." },'; \ ) > ddraw-Empty_Hardware_Flags.ok @@ -177,7 +181,7 @@ ddraw-Empty_Hardware_Flags.ok: # | .INTERMEDIATE: dsound-Fast_Mixer.ok dsound-Fast_Mixer.ok: - $(PATCH) < dsound-Fast_Mixer/0001-dsound-Add-a-linear-resampler-for-use-with-a-large-n.patch + $(call APPLY_PATCH,dsound-Fast_Mixer/0001-dsound-Add-a-linear-resampler-for-use-with-a-large-n.patch) @( \ echo '+ { "dsound-Fast_Mixer", "Alexander E. Patrakov", "Add a linear resampler for use with a large number of dsound mixing buffers." },'; \ ) > dsound-Fast_Mixer.ok @@ -197,8 +201,8 @@ dsound-Fast_Mixer.ok: # | .INTERMEDIATE: fonts-Missing_Fonts.ok fonts-Missing_Fonts.ok: - $(PATCH) < fonts-Missing_Fonts/0001-fonts-Add-Liberation-Sans-as-an-Arial-replacement.patch - $(PATCH) < fonts-Missing_Fonts/0002-fonts-Add-WenQuanYi-Micro-Hei-as-a-Microsoft-Yahei-r.patch + $(call APPLY_PATCH,fonts-Missing_Fonts/0001-fonts-Add-Liberation-Sans-as-an-Arial-replacement.patch) + $(call APPLY_PATCH,fonts-Missing_Fonts/0002-fonts-Add-WenQuanYi-Micro-Hei-as-a-Microsoft-Yahei-r.patch) @( \ echo '+ { "fonts-Missing_Fonts", "Torsten Kurbad / Erich E. Hoover", "Implement missing fonts expected by Silverlight. [rev 2]" },'; \ ) > fonts-Missing_Fonts.ok @@ -216,7 +220,7 @@ fonts-Missing_Fonts.ok: # | .INTERMEDIATE: iphlpapi-TCP_Table.ok iphlpapi-TCP_Table.ok: - $(PATCH) < iphlpapi-TCP_Table/0001-iphlpapi-Implement-AllocateAndGetTcpExTableFromStack.patch + $(call APPLY_PATCH,iphlpapi-TCP_Table/0001-iphlpapi-Implement-AllocateAndGetTcpExTableFromStack.patch) @( \ echo '+ { "iphlpapi-TCP_Table", "Erich E. Hoover", "Implement AllocateAndGetTcpExTableFromStack." },'; \ ) > iphlpapi-TCP_Table.ok @@ -234,8 +238,8 @@ iphlpapi-TCP_Table.ok: # | .INTERMEDIATE: kernel32-GetSystemTimes.ok kernel32-GetSystemTimes.ok: - $(PATCH) < kernel32-GetSystemTimes/0001-kernel32-Add-tests-for-GetSystemTimes.patch - $(PATCH) < kernel32-GetSystemTimes/0002-kernel32-Implement-GetSystemTimes.patch + $(call APPLY_PATCH,kernel32-GetSystemTimes/0001-kernel32-Add-tests-for-GetSystemTimes.patch) + $(call APPLY_PATCH,kernel32-GetSystemTimes/0002-kernel32-Implement-GetSystemTimes.patch) @( \ echo '+ { "kernel32-GetSystemTimes", "Louis Lenders / Erich E. Hoover", "Implement GetSystemTimes." },'; \ ) > kernel32-GetSystemTimes.ok @@ -250,9 +254,9 @@ kernel32-GetSystemTimes.ok: # | .INTERMEDIATE: kernel32-GetVolumePathName.ok kernel32-GetVolumePathName.ok: - $(PATCH) < kernel32-GetVolumePathName/0001-kernel32-Implement-GetVolumePathName.patch - $(PATCH) < kernel32-GetVolumePathName/0002-kernel32-Convert-GetVolumePathName-tests-into-a-list.patch - $(PATCH) < kernel32-GetVolumePathName/0003-kernel32-Add-a-bunch-more-GetVolumePathName-tests.patch + $(call APPLY_PATCH,kernel32-GetVolumePathName/0001-kernel32-Implement-GetVolumePathName.patch) + $(call APPLY_PATCH,kernel32-GetVolumePathName/0002-kernel32-Convert-GetVolumePathName-tests-into-a-list.patch) + $(call APPLY_PATCH,kernel32-GetVolumePathName/0003-kernel32-Add-a-bunch-more-GetVolumePathName-tests.patch) @( \ echo '+ { "kernel32-GetVolumePathName", "Erich E. Hoover", "Implement GetVolumePathName." },'; \ ) > kernel32-GetVolumePathName.ok @@ -272,8 +276,8 @@ kernel32-GetVolumePathName.ok: # | .INTERMEDIATE: kernel32-Named_Pipe.ok kernel32-Named_Pipe.ok: - $(PATCH) < kernel32-Named_Pipe/0001-kernel32-Change-return-value-of-stub-SetNamedPipeHandl.patch - $(PATCH) < kernel32-Named_Pipe/0002-kernel32-ConnectNamedPort-should-return-FALSE-and-se.patch + $(call APPLY_PATCH,kernel32-Named_Pipe/0001-kernel32-Change-return-value-of-stub-SetNamedPipeHandl.patch) + $(call APPLY_PATCH,kernel32-Named_Pipe/0002-kernel32-ConnectNamedPort-should-return-FALSE-and-se.patch) @( \ echo '+ { "kernel32-Named_Pipe", "Sebastian Lackner / Dan Kegel", "Support for NamedPipe operations. [rev 2]" },'; \ ) > kernel32-Named_Pipe.ok @@ -291,7 +295,7 @@ kernel32-Named_Pipe.ok: # | .INTERMEDIATE: kernel32-SystemFileCacheSize.ok kernel32-SystemFileCacheSize.ok: - $(PATCH) < kernel32-SystemFileCacheSize/0001-kernel32-Add-stub-for-Get-Set-SystemFileCacheSize.patch + $(call APPLY_PATCH,kernel32-SystemFileCacheSize/0001-kernel32-Add-stub-for-Get-Set-SystemFileCacheSize.patch) @( \ echo '+ { "kernel32-SystemFileCacheSize", "Austin English", "Add stub for [Get|Set]SystemFileCacheSize." },'; \ ) > kernel32-SystemFileCacheSize.ok @@ -309,7 +313,7 @@ kernel32-SystemFileCacheSize.ok: # | .INTERMEDIATE: libs-Unicode_Collation.ok libs-Unicode_Collation.ok: - $(PATCH) < libs-Unicode_Collation/0001-libs-Fix-most-problems-with-CompareString.patch + $(call APPLY_PATCH,libs-Unicode_Collation/0001-libs-Fix-most-problems-with-CompareString.patch) @( \ echo '+ { "libs-Unicode_Collation", "Dmitry Timoshkov", "Fix comparison of punctuation characters." },'; \ ) > libs-Unicode_Collation.ok @@ -326,8 +330,8 @@ libs-Unicode_Collation.ok: # | .INTERMEDIATE: loader-Cmdline_Diagnostics.ok loader-Cmdline_Diagnostics.ok: - $(PATCH) < loader-Cmdline_Diagnostics/0001-loader-Add-commandline-option-patches-to-show-the-pa.patch - $(PATCH) < loader-Cmdline_Diagnostics/0002-loader-Add-commandline-option-check-libs.patch + $(call APPLY_PATCH,loader-Cmdline_Diagnostics/0001-loader-Add-commandline-option-patches-to-show-the-pa.patch) + $(call APPLY_PATCH,loader-Cmdline_Diagnostics/0002-loader-Add-commandline-option-check-libs.patch) @( \ echo '+ { "loader-Cmdline_Diagnostics", "Sebastian Lackner", "Add commandline option --patches to show the patch list." },'; \ echo '+ { "loader-Cmdline_Diagnostics", "Michael Müller", "Add commandline option --check-libs to test if shared libraries are installed." },'; \ @@ -347,8 +351,8 @@ loader-Cmdline_Diagnostics.ok: # | .INTERMEDIATE: ntdll-Dynamic_DST.ok ntdll-Dynamic_DST.ok: - $(PATCH) < ntdll-Dynamic_DST/0001-ntdll-Add-support-for-Dynamic-DST-daylight-saving-ti.patch - $(PATCH) < ntdll-Dynamic_DST/0002-wine.inf-Add-Dynamic-DST-exceptions-for-Israel-Stand.patch + $(call APPLY_PATCH,ntdll-Dynamic_DST/0001-ntdll-Add-support-for-Dynamic-DST-daylight-saving-ti.patch) + $(call APPLY_PATCH,ntdll-Dynamic_DST/0002-wine.inf-Add-Dynamic-DST-exceptions-for-Israel-Stand.patch) @( \ echo '+ { "ntdll-Dynamic_DST", "Michael Müller", "Add support for Dynamic DST (daylight saving time) information in registry." },'; \ echo '+ { "ntdll-Dynamic_DST", "Sebastian Lackner", "Add Dynamic DST exceptions for Israel Standard Time." },'; \ @@ -364,7 +368,7 @@ ntdll-Dynamic_DST.ok: # | .INTERMEDIATE: ntdll-FD_Cache.ok ntdll-FD_Cache.ok: - $(PATCH) < ntdll-FD_Cache/0001-ntdll-Use-lockfree-implementation-for-get_cached_fd.patch + $(call APPLY_PATCH,ntdll-FD_Cache/0001-ntdll-Use-lockfree-implementation-for-get_cached_fd.patch) @( \ echo '+ { "ntdll-FD_Cache", "Sebastian Lackner", "Use lockfree implementation for get_cached_fd. [rev 4]" },'; \ ) > ntdll-FD_Cache.ok @@ -383,9 +387,9 @@ ntdll-FD_Cache.ok: # | .INTERMEDIATE: ntdll-FileDispositionInformation.ok ntdll-FileDispositionInformation.ok: - $(PATCH) < ntdll-FileDispositionInformation/0001-server-Keep-a-pointer-to-parent-s-fd-unix_name-in-th.patch - $(PATCH) < ntdll-FileDispositionInformation/0002-server-Add-support-for-setting-file-disposition-info.patch - $(PATCH) < ntdll-FileDispositionInformation/0003-server-Do-not-permit-FileDispositionInformation-to-d.patch + $(call APPLY_PATCH,ntdll-FileDispositionInformation/0001-server-Keep-a-pointer-to-parent-s-fd-unix_name-in-th.patch) + $(call APPLY_PATCH,ntdll-FileDispositionInformation/0002-server-Add-support-for-setting-file-disposition-info.patch) + $(call APPLY_PATCH,ntdll-FileDispositionInformation/0003-server-Do-not-permit-FileDispositionInformation-to-d.patch) @( \ echo '+ { "ntdll-FileDispositionInformation", "Dmitry Timoshkov / Erich E. Hoover", "Add support for setting file disposition information." },'; \ ) > ntdll-FileDispositionInformation.ok @@ -403,13 +407,13 @@ ntdll-FileDispositionInformation.ok: # | .INTERMEDIATE: ntdll-Junction_Points.ok ntdll-Junction_Points.ok: - $(PATCH) < ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch - $(PATCH) < ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch - $(PATCH) < ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch - $(PATCH) < ntdll-Junction_Points/0004-ntdll-Advertise-that-a-file-is-a-junction-point.patch - $(PATCH) < ntdll-Junction_Points/0005-kernel32-ntdll-Add-support-for-deleting-junction-poi.patch - $(PATCH) < ntdll-Junction_Points/0006-kernel32-Advertise-junction-point-support.patch - $(PATCH) < ntdll-Junction_Points/0007-ntdll-tests-Add-test-for-deleting-junction-point-tar.patch + $(call APPLY_PATCH,ntdll-Junction_Points/0001-ntdll-Add-support-for-junction-point-creation.patch) + $(call APPLY_PATCH,ntdll-Junction_Points/0002-ntdll-Add-support-for-reading-junction-points.patch) + $(call APPLY_PATCH,ntdll-Junction_Points/0003-ntdll-Add-support-for-deleting-junction-points.patch) + $(call APPLY_PATCH,ntdll-Junction_Points/0004-ntdll-Advertise-that-a-file-is-a-junction-point.patch) + $(call APPLY_PATCH,ntdll-Junction_Points/0005-kernel32-ntdll-Add-support-for-deleting-junction-poi.patch) + $(call APPLY_PATCH,ntdll-Junction_Points/0006-kernel32-Advertise-junction-point-support.patch) + $(call APPLY_PATCH,ntdll-Junction_Points/0007-ntdll-tests-Add-test-for-deleting-junction-point-tar.patch) @( \ echo '+ { "ntdll-Junction_Points", "Erich E. Hoover", "Support for junction points/reparse points." },'; \ ) > ntdll-Junction_Points.ok @@ -427,7 +431,7 @@ ntdll-Junction_Points.ok: # | .INTERMEDIATE: ntdll-Pipe_SpecialCharacters.ok ntdll-Pipe_SpecialCharacters.ok: - $(PATCH) < ntdll-Pipe_SpecialCharacters/0001-ntdll-Allow-special-characters-in-pipe-names.patch + $(call APPLY_PATCH,ntdll-Pipe_SpecialCharacters/0001-ntdll-Allow-special-characters-in-pipe-names.patch) @( \ echo '+ { "ntdll-Pipe_SpecialCharacters", "Michael Müller", "Allow special characters in pipe names." },'; \ ) > ntdll-Pipe_SpecialCharacters.ok @@ -445,7 +449,7 @@ ntdll-Pipe_SpecialCharacters.ok: # | .INTERMEDIATE: ntdll-loader_EntryPoint.ok ntdll-loader_EntryPoint.ok: - $(PATCH) < ntdll-loader_EntryPoint/0001-ntdll-Set-ldr.EntryPoint-for-main-executable.patch + $(call APPLY_PATCH,ntdll-loader_EntryPoint/0001-ntdll-Set-ldr.EntryPoint-for-main-executable.patch) @( \ echo '+ { "ntdll-loader_EntryPoint", "Sebastian Lackner", "Set ldr.EntryPoint for main executable." },'; \ ) > ntdll-loader_EntryPoint.ok @@ -463,10 +467,10 @@ ntdll-loader_EntryPoint.ok: # | .INTERMEDIATE: quartz-MediaSeeking_Positions.ok quartz-MediaSeeking_Positions.ok: - $(PATCH) < quartz-MediaSeeking_Positions/0001-quartz-Include-the-stream-position-in-addition-to-th.patch - $(PATCH) < quartz-MediaSeeking_Positions/0002-quartz-Implement-MediaSeeking_GetCurrentPosition-on-.patch - $(PATCH) < quartz-MediaSeeking_Positions/0003-quartz-Implement-MediaSeeking_GetStopPosition-on-top.patch - $(PATCH) < quartz-MediaSeeking_Positions/0004-quartz-Remove-unused-cache-of-MediaSeeking-stop-posi.patch + $(call APPLY_PATCH,quartz-MediaSeeking_Positions/0001-quartz-Include-the-stream-position-in-addition-to-th.patch) + $(call APPLY_PATCH,quartz-MediaSeeking_Positions/0002-quartz-Implement-MediaSeeking_GetCurrentPosition-on-.patch) + $(call APPLY_PATCH,quartz-MediaSeeking_Positions/0003-quartz-Implement-MediaSeeking_GetStopPosition-on-top.patch) + $(call APPLY_PATCH,quartz-MediaSeeking_Positions/0004-quartz-Remove-unused-cache-of-MediaSeeking-stop-posi.patch) @( \ echo '+ { "quartz-MediaSeeking_Positions", "Erich E. Hoover", "Return correct IMediaSeeking stream positions in quartz." },'; \ ) > quartz-MediaSeeking_Positions.ok @@ -481,7 +485,7 @@ quartz-MediaSeeking_Positions.ok: # | .INTERMEDIATE: server-ACL_Compat.ok server-ACL_Compat.ok: server-Inherited_ACLs.ok - $(PATCH) < server-ACL_Compat/0010-server-Add-compatibility-code-for-handling-the-old-m.patch + $(call APPLY_PATCH,server-ACL_Compat/0010-server-Add-compatibility-code-for-handling-the-old-m.patch) @( \ echo '+ { "server-ACL_Compat", "Erich E. Hoover", "Compatibility patch for old method of storing extended file system attributes. [rev 6]" },'; \ ) > server-ACL_Compat.ok @@ -499,11 +503,11 @@ server-ACL_Compat.ok: server-Inherited_ACLs.ok # | .INTERMEDIATE: server-Address_Change_Notification.ok server-Address_Change_Notification.ok: - $(PATCH) < server-Address_Change_Notification/0001-server-Implement-socket-specific-ioctl-routine.patch - $(PATCH) < server-Address_Change_Notification/0002-server-Add-socket-side-support-for-the-interface-cha.patch - $(PATCH) < server-Address_Change_Notification/0003-server-Add-blocked-support-for-SIO_ADDRESS_LIST_CHAN.patch - $(PATCH) < server-Address_Change_Notification/0004-server-Implement-the-interface-change-notification-o.patch - $(PATCH) < server-Address_Change_Notification/0005-ws2_32-Add-an-interactive-test-for-interface-change-.patch + $(call APPLY_PATCH,server-Address_Change_Notification/0001-server-Implement-socket-specific-ioctl-routine.patch) + $(call APPLY_PATCH,server-Address_Change_Notification/0002-server-Add-socket-side-support-for-the-interface-cha.patch) + $(call APPLY_PATCH,server-Address_Change_Notification/0003-server-Add-blocked-support-for-SIO_ADDRESS_LIST_CHAN.patch) + $(call APPLY_PATCH,server-Address_Change_Notification/0004-server-Implement-the-interface-change-notification-o.patch) + $(call APPLY_PATCH,server-Address_Change_Notification/0005-ws2_32-Add-an-interactive-test-for-interface-change-.patch) @( \ echo '+ { "server-Address_Change_Notification", "Erich E. Hoover", "Implement SIO_ADDRESS_LIST_CHANGE. [rev 2]" },'; \ ) > server-Address_Change_Notification.ok @@ -522,10 +526,10 @@ server-Address_Change_Notification.ok: # | .INTERMEDIATE: server-CreateProcess_ACLs.ok server-CreateProcess_ACLs.ok: - $(PATCH) < server-CreateProcess_ACLs/0001-server-A-new-function-set_sd_defaults_from_token-try.patch - $(PATCH) < server-CreateProcess_ACLs/0002-server-Support-sending-process-and-thread-security-d.patch - $(PATCH) < server-CreateProcess_ACLs/0003-server-implement-passing-a-process-security-descript.patch - $(PATCH) < server-CreateProcess_ACLs/0004-server-implement-passing-a-thread-security-descripto.patch + $(call APPLY_PATCH,server-CreateProcess_ACLs/0001-server-A-new-function-set_sd_defaults_from_token-try.patch) + $(call APPLY_PATCH,server-CreateProcess_ACLs/0002-server-Support-sending-process-and-thread-security-d.patch) + $(call APPLY_PATCH,server-CreateProcess_ACLs/0003-server-implement-passing-a-process-security-descript.patch) + $(call APPLY_PATCH,server-CreateProcess_ACLs/0004-server-implement-passing-a-thread-security-descripto.patch) @( \ echo '+ { "server-CreateProcess_ACLs", "Joris van der Wel", "Implement passing ACLs to CreateProcess." },'; \ ) > server-CreateProcess_ACLs.ok @@ -543,8 +547,8 @@ server-CreateProcess_ACLs.ok: # | .INTERMEDIATE: server-Inherited_ACLs.ok server-Inherited_ACLs.ok: server-Stored_ACLs.ok - $(PATCH) < server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch - $(PATCH) < server-Inherited_ACLs/0002-server-Inherit-security-attributes-from-parent-direc.patch + $(call APPLY_PATCH,server-Inherited_ACLs/0001-server-Inherit-security-attributes-from-parent-direc.patch) + $(call APPLY_PATCH,server-Inherited_ACLs/0002-server-Inherit-security-attributes-from-parent-direc.patch) @( \ echo '+ { "server-Inherited_ACLs", "Erich E. Hoover", "Add support for inherited security attributes. [rev 6]" },'; \ ) > server-Inherited_ACLs.ok @@ -562,8 +566,8 @@ server-Inherited_ACLs.ok: server-Stored_ACLs.ok # | .INTERMEDIATE: server-Misc_ACL.ok server-Misc_ACL.ok: - $(PATCH) < server-Misc_ACL/0001-server-Add-default-security-descriptor-ownership-for.patch - $(PATCH) < server-Misc_ACL/0002-server-Add-default-security-descriptor-DACL-for-proc.patch + $(call APPLY_PATCH,server-Misc_ACL/0001-server-Add-default-security-descriptor-ownership-for.patch) + $(call APPLY_PATCH,server-Misc_ACL/0002-server-Add-default-security-descriptor-DACL-for-proc.patch) @( \ echo '+ { "server-Misc_ACL", "Erich E. Hoover", "Add default security descriptor ownership and DACLs for processes." },'; \ ) > server-Misc_ACL.ok @@ -581,12 +585,12 @@ server-Misc_ACL.ok: # | .INTERMEDIATE: server-Stored_ACLs.ok server-Stored_ACLs.ok: - $(PATCH) < server-Stored_ACLs/0001-server-Unify-the-storage-of-security-attributes-for-.patch - $(PATCH) < server-Stored_ACLs/0002-server-Unify-the-retrieval-of-security-attributes-fo.patch - $(PATCH) < server-Stored_ACLs/0003-server-Store-file-security-attributes-with-extended-.patch - $(PATCH) < server-Stored_ACLs/0004-server-Store-user-and-group-inside-stored-extended-f.patch - $(PATCH) < server-Stored_ACLs/0005-server-Retrieve-file-security-attributes-with-extend.patch - $(PATCH) < server-Stored_ACLs/0006-server-Convert-return-of-file-security-masks-with-ge.patch + $(call APPLY_PATCH,server-Stored_ACLs/0001-server-Unify-the-storage-of-security-attributes-for-.patch) + $(call APPLY_PATCH,server-Stored_ACLs/0002-server-Unify-the-retrieval-of-security-attributes-fo.patch) + $(call APPLY_PATCH,server-Stored_ACLs/0003-server-Store-file-security-attributes-with-extended-.patch) + $(call APPLY_PATCH,server-Stored_ACLs/0004-server-Store-user-and-group-inside-stored-extended-f.patch) + $(call APPLY_PATCH,server-Stored_ACLs/0005-server-Retrieve-file-security-attributes-with-extend.patch) + $(call APPLY_PATCH,server-Stored_ACLs/0006-server-Convert-return-of-file-security-masks-with-ge.patch) @( \ echo '+ { "server-Stored_ACLs", "Erich E. Hoover", "Store and return security attributes with extended file attributes. [rev 6]" },'; \ ) > server-Stored_ACLs.ok @@ -601,7 +605,7 @@ server-Stored_ACLs.ok: # | .INTERMEDIATE: shell32-Default_Folder_ACLs.ok shell32-Default_Folder_ACLs.ok: - $(PATCH) < shell32-Default_Folder_ACLs/0001-shell32-Set-the-default-security-attributes-for-user.patch + $(call APPLY_PATCH,shell32-Default_Folder_ACLs/0001-shell32-Set-the-default-security-attributes-for-user.patch) @( \ echo '+ { "shell32-Default_Folder_ACLs", "Erich E. Hoover", "Generate default ACLs for user shell folders. [rev 6]" },'; \ ) > shell32-Default_Folder_ACLs.ok @@ -619,7 +623,7 @@ shell32-Default_Folder_ACLs.ok: # | .INTERMEDIATE: shell32-Icons.ok shell32-Icons.ok: - $(PATCH) < shell32-Icons/0001-shell32-Add-support-for-extra-large-and-jumbo-icon-l.patch + $(call APPLY_PATCH,shell32-Icons/0001-shell32-Add-support-for-extra-large-and-jumbo-icon-l.patch) @( \ echo '+ { "shell32-Icons", "Michael Müller", "Add support for extra large and jumbo icon lists in shell32." },'; \ ) > shell32-Icons.ok @@ -637,7 +641,7 @@ shell32-Icons.ok: # | .INTERMEDIATE: shell32-RunDLL_CallEntry16.ok shell32-RunDLL_CallEntry16.ok: - $(PATCH) < shell32-RunDLL_CallEntry16/0001-shell32-Use-manual-redirection-for-RunDLL_CallEntry1.patch + $(call APPLY_PATCH,shell32-RunDLL_CallEntry16/0001-shell32-Use-manual-redirection-for-RunDLL_CallEntry1.patch) @( \ echo '+ { "shell32-RunDLL_CallEntry16", "Michael Müller", "Manually relay RunDLL_CallEntry16 to make Tages Protection v5 happy." },'; \ ) > shell32-RunDLL_CallEntry16.ok @@ -655,7 +659,7 @@ shell32-RunDLL_CallEntry16.ok: # | .INTERMEDIATE: shell32-SHCreateSessionKey.ok shell32-SHCreateSessionKey.ok: - $(PATCH) < shell32-SHCreateSessionKey/0001-shell32-Implement-SHCreateSessionKey.patch + $(call APPLY_PATCH,shell32-SHCreateSessionKey/0001-shell32-Implement-SHCreateSessionKey.patch) @( \ echo '+ { "shell32-SHCreateSessionKey", "Dmitry Timoshkov", "shell32: Implement SHCreateSessionKey." },'; \ ) > shell32-SHCreateSessionKey.ok @@ -670,8 +674,8 @@ shell32-SHCreateSessionKey.ok: # | .INTERMEDIATE: shlwapi-UrlCombine.ok shlwapi-UrlCombine.ok: - $(PATCH) < shlwapi-UrlCombine/0001-shlwapi-tests-Add-additional-tests-for-UrlCombine-and-.patch - $(PATCH) < shlwapi-UrlCombine/0002-shlwapi-UrlCombineW-workaround-for-relative-paths.patch + $(call APPLY_PATCH,shlwapi-UrlCombine/0001-shlwapi-tests-Add-additional-tests-for-UrlCombine-and-.patch) + $(call APPLY_PATCH,shlwapi-UrlCombine/0002-shlwapi-UrlCombineW-workaround-for-relative-paths.patch) @( \ echo '+ { "shlwapi-UrlCombine", "Sebastian Lackner", "Workaround for broken implementation of shlwapi url functions." },'; \ ) > shlwapi-UrlCombine.ok @@ -689,7 +693,7 @@ shlwapi-UrlCombine.ok: # | .INTERMEDIATE: user32-GetSystemMetrics.ok user32-GetSystemMetrics.ok: - $(PATCH) < user32-GetSystemMetrics/0001-user32-Allow-changing-the-tablet-media-center-status.patch + $(call APPLY_PATCH,user32-GetSystemMetrics/0001-user32-Allow-changing-the-tablet-media-center-status.patch) @( \ echo '+ { "user32-GetSystemMetrics", "Michael Müller", "Allow changing the tablet / media center status via wine registry key." },'; \ ) > user32-GetSystemMetrics.ok @@ -707,8 +711,8 @@ user32-GetSystemMetrics.ok: # | .INTERMEDIATE: user32-GetTipText.ok user32-GetTipText.ok: - $(PATCH) < user32-GetTipText/0001-Fix-TOOLTIPS_GetTipText-when-a-resource-cannot-be-fo.patch - $(PATCH) < user32-GetTipText/0002-Fix-TOOLTIPS_GetTipText-when-a-NULL-instance-is-used.patch + $(call APPLY_PATCH,user32-GetTipText/0001-Fix-TOOLTIPS_GetTipText-when-a-resource-cannot-be-fo.patch) + $(call APPLY_PATCH,user32-GetTipText/0002-Fix-TOOLTIPS_GetTipText-when-a-NULL-instance-is-used.patch) @( \ echo '+ { "user32-GetTipText", "Erich E. Hoover", "Handle TOOLTIPS_GetTipText edge cases." },'; \ ) > user32-GetTipText.ok @@ -727,7 +731,7 @@ user32-GetTipText.ok: # | .INTERMEDIATE: user32-WndProc.ok user32-WndProc.ok: - $(PATCH) < user32-WndProc/0001-user32-Increase-MAX_WINPROCS-to-16384.patch + $(call APPLY_PATCH,user32-WndProc/0001-user32-Increase-MAX_WINPROCS-to-16384.patch) @( \ echo '+ { "user32-WndProc", "Sebastian Lackner", "Workaround for programs leaking wndproc splots." },'; \ ) > user32-WndProc.ok @@ -746,7 +750,7 @@ user32-WndProc.ok: # | .INTERMEDIATE: wineboot-HKEY_DYN_DATA.ok wineboot-HKEY_DYN_DATA.ok: - $(PATCH) < wineboot-HKEY_DYN_DATA/0001-wineboot-Add-some-generic-hardware-in-HKEY_DYN_DATA-.patch + $(call APPLY_PATCH,wineboot-HKEY_DYN_DATA/0001-wineboot-Add-some-generic-hardware-in-HKEY_DYN_DATA-.patch) @( \ echo '+ { "wineboot-HKEY_DYN_DATA", "Michael Müller", "Add some generic hardware in HKEY_DYN_DATA\\\\Config Manager\\\\Enum." },'; \ ) > wineboot-HKEY_DYN_DATA.ok @@ -766,33 +770,33 @@ wineboot-HKEY_DYN_DATA.ok: # | .INTERMEDIATE: winepulse-PulseAudio_Support.ok winepulse-PulseAudio_Support.ok: - $(PATCH) < winepulse-PulseAudio_Support/0001-winmm-Load-winealsa-if-winepulse-is-found.patch - $(PATCH) < winepulse-PulseAudio_Support/0002-winepulse-Add-initial-stub-for-pulseaudio-support.patch - $(PATCH) < winepulse-PulseAudio_Support/0003-winepulse-Add-format-and-period-probing.patch - $(PATCH) < winepulse-PulseAudio_Support/0004-winepulse-Add-audioclient.patch - $(PATCH) < winepulse-PulseAudio_Support/0005-winepulse-Add-IAudioRenderClient-and-IAudioCaptureCl.patch - $(PATCH) < winepulse-PulseAudio_Support/0006-winepulse-Add-IAudioClock-and-IAudioClock2.patch - $(PATCH) < winepulse-PulseAudio_Support/0007-winepulse-Add-audiostreamvolume.patch - $(PATCH) < winepulse-PulseAudio_Support/0008-winepulse-Add-session-support.patch - $(PATCH) < winepulse-PulseAudio_Support/0009-fix-fdels-trailing-whitespaces.patch - $(PATCH) < winepulse-PulseAudio_Support/0010-winepulse-v12.patch - $(PATCH) < winepulse-PulseAudio_Support/0011-winepulse-v15-Add-support-for-missing-formats-and-si.patch - $(PATCH) < winepulse-PulseAudio_Support/0012-winepulse-v16-Add-official-warning-wine-doesn-t-want.patch - $(PATCH) < winepulse-PulseAudio_Support/0013-winepulse-v17-Fix-winmm-tests.patch - $(PATCH) < winepulse-PulseAudio_Support/0014-winepulse-v18-Latency-and-compilation-improvements.patch - $(PATCH) < winepulse-PulseAudio_Support/0015-winepulse-API-Compatibility-with-1.5.2-onward-v2.patch - $(PATCH) < winepulse-PulseAudio_Support/0016-winepulse-Fix-low-latency-support.patch - $(PATCH) < winepulse-PulseAudio_Support/0017-winepulse-drop-realtime-priority-before-thread-destr.patch - $(PATCH) < winepulse-PulseAudio_Support/0018-winepulse-remove-bogus-SetEvent-from-pulse_started_c.patch - $(PATCH) < winepulse-PulseAudio_Support/0019-winepulse-disable-the-setevent-part-of-the-latency-h.patch - $(PATCH) < winepulse-PulseAudio_Support/0020-winepulse-v20-fix-the-checks-in-IsFormatSupported.patch - $(PATCH) < winepulse-PulseAudio_Support/0021-winepulse-fixup-IsFormatSupported-calls.patch - $(PATCH) < winepulse-PulseAudio_Support/0022-winepulse-v21-return-early-if-padding-didn-t-update.patch - $(PATCH) < winepulse-PulseAudio_Support/0023-winepulse-fix-unneeded-free-in-write.patch - $(PATCH) < winepulse-PulseAudio_Support/0024-winepulse-v23-fixup-a-invalid-free-in-mmdevapi.patch - $(PATCH) < winepulse-PulseAudio_Support/0025-winepulse-use-a-pi-mutex-for-serialization.patch - $(PATCH) < winepulse-PulseAudio_Support/0026-winepulse-add-support-for-IMarshal.patch - $(PATCH) < winepulse-PulseAudio_Support/0027-winepulse-handle-stream-create-failing-correctly.patch + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0001-winmm-Load-winealsa-if-winepulse-is-found.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0002-winepulse-Add-initial-stub-for-pulseaudio-support.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0003-winepulse-Add-format-and-period-probing.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0004-winepulse-Add-audioclient.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0005-winepulse-Add-IAudioRenderClient-and-IAudioCaptureCl.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0006-winepulse-Add-IAudioClock-and-IAudioClock2.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0007-winepulse-Add-audiostreamvolume.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0008-winepulse-Add-session-support.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0009-fix-fdels-trailing-whitespaces.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0010-winepulse-v12.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0011-winepulse-v15-Add-support-for-missing-formats-and-si.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0012-winepulse-v16-Add-official-warning-wine-doesn-t-want.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0013-winepulse-v17-Fix-winmm-tests.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0014-winepulse-v18-Latency-and-compilation-improvements.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0015-winepulse-API-Compatibility-with-1.5.2-onward-v2.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0016-winepulse-Fix-low-latency-support.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0017-winepulse-drop-realtime-priority-before-thread-destr.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0018-winepulse-remove-bogus-SetEvent-from-pulse_started_c.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0019-winepulse-disable-the-setevent-part-of-the-latency-h.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0020-winepulse-v20-fix-the-checks-in-IsFormatSupported.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0021-winepulse-fixup-IsFormatSupported-calls.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0022-winepulse-v21-return-early-if-padding-didn-t-update.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0023-winepulse-fix-unneeded-free-in-write.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0024-winepulse-v23-fixup-a-invalid-free-in-mmdevapi.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0025-winepulse-use-a-pi-mutex-for-serialization.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0026-winepulse-add-support-for-IMarshal.patch) + $(call APPLY_PATCH,winepulse-PulseAudio_Support/0027-winepulse-handle-stream-create-failing-correctly.patch) @( \ echo '+ { "winepulse-PulseAudio_Support", "Maarten Lankhorst", "Winepulse patches extracted from https://launchpad.net/~ubuntu-wine/+archive/ubuntu/ppa/+files/wine1.7_1.7.22-0ubuntu1.debian.tar.gz. [rev 4]" },'; \ ) > winepulse-PulseAudio_Support.ok @@ -808,8 +812,8 @@ winepulse-PulseAudio_Support.ok: # | .INTERMEDIATE: winex11-XEMBED.ok winex11-XEMBED.ok: - $(PATCH) < winex11-XEMBED/0001-winex11-Update-gl_drawable-for-embedded-windows.patch - $(PATCH) < winex11-XEMBED/0002-winex11-Enable-disable-windows-when-they-are-un-mapped.patch + $(call APPLY_PATCH,winex11-XEMBED/0001-winex11-Update-gl_drawable-for-embedded-windows.patch) + $(call APPLY_PATCH,winex11-XEMBED/0002-winex11-Enable-disable-windows-when-they-are-un-mapped.patch) @( \ echo '+ { "winex11-XEMBED", "Sebastian Lackner", "Enable/disable windows when they are (un)mapped by foreign applications." },'; \ echo '+ { "winex11-XEMBED", "Sebastian Lackner", "Update gl_drawable for embedded windows." },'; \ @@ -825,8 +829,8 @@ winex11-XEMBED.ok: # | .INTERMEDIATE: ws2_32-Connect_Time.ok ws2_32-Connect_Time.ok: - $(PATCH) < ws2_32-Connect_Time/0001-server-Store-the-time-of-the-socket-connection.patch - $(PATCH) < ws2_32-Connect_Time/0002-ws2_32-Properly-implement-SO_CONNECT_TIME.patch + $(call APPLY_PATCH,ws2_32-Connect_Time/0001-server-Store-the-time-of-the-socket-connection.patch) + $(call APPLY_PATCH,ws2_32-Connect_Time/0002-ws2_32-Properly-implement-SO_CONNECT_TIME.patch) @( \ echo '+ { "ws2_32-Connect_Time", "Bruno Jesus / Erich E. Hoover", "Return the appropriate connection time with SO_CONNECT_TIME." },'; \ ) > ws2_32-Connect_Time.ok @@ -845,11 +849,11 @@ ws2_32-Connect_Time.ok: # | .INTERMEDIATE: ws2_32-TransmitFile.ok ws2_32-TransmitFile.ok: - $(PATCH) < ws2_32-TransmitFile/0001-ws2_32-Add-stub-for-TransmitFile.patch - $(PATCH) < ws2_32-TransmitFile/0002-ws2_32-Check-for-invalid-parameters-in-TransmitFile.patch - $(PATCH) < ws2_32-TransmitFile/0003-ws2_32-Implement-a-basic-synchronous-TransmitFile.patch - $(PATCH) < ws2_32-TransmitFile/0004-ws2_32-Add-asynchronous-support-for-TransmitFile.patch - $(PATCH) < ws2_32-TransmitFile/0005-ws2_32-Add-support-for-TF_DISCONNECT-and-TF_REUSE_SO.patch + $(call APPLY_PATCH,ws2_32-TransmitFile/0001-ws2_32-Add-stub-for-TransmitFile.patch) + $(call APPLY_PATCH,ws2_32-TransmitFile/0002-ws2_32-Check-for-invalid-parameters-in-TransmitFile.patch) + $(call APPLY_PATCH,ws2_32-TransmitFile/0003-ws2_32-Implement-a-basic-synchronous-TransmitFile.patch) + $(call APPLY_PATCH,ws2_32-TransmitFile/0004-ws2_32-Add-asynchronous-support-for-TransmitFile.patch) + $(call APPLY_PATCH,ws2_32-TransmitFile/0005-ws2_32-Add-support-for-TF_DISCONNECT-and-TF_REUSE_SO.patch) @( \ echo '+ { "ws2_32-TransmitFile", "Erich E. Hoover", "Implement TransmitFile." },'; \ ) > ws2_32-TransmitFile.ok @@ -867,7 +871,7 @@ ws2_32-TransmitFile.ok: # | .INTERMEDIATE: ws2_32-inet_pton.ok ws2_32-inet_pton.ok: - $(PATCH) < ws2_32-inet_pton/0001-ws2_32-Implement-inet_pton.patch + $(call APPLY_PATCH,ws2_32-inet_pton/0001-ws2_32-Implement-inet_pton.patch) @( \ echo '+ { "ws2_32-inet_pton", "Bruno Jesus", "Implement ws2_32.inet_pton." },'; \ ) > ws2_32-inet_pton.ok @@ -886,7 +890,7 @@ ws2_32-inet_pton.ok: # | .INTERMEDIATE: wtsapi32-EnumerateProcesses.ok wtsapi32-EnumerateProcesses.ok: - $(PATCH) < wtsapi32-EnumerateProcesses/0001-wtsapi32-Partial-implementation-of-WTSEnumerateProce.patch + $(call APPLY_PATCH,wtsapi32-EnumerateProcesses/0001-wtsapi32-Partial-implementation-of-WTSEnumerateProce.patch) @( \ echo '+ { "wtsapi32-EnumerateProcesses", "Sebastian Lackner", "Partial implementation of WTSEnumerateProcessesW." },'; \ ) > wtsapi32-EnumerateProcesses.ok