You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
111 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
17c1053de4 | ||
|
b56948f392 | ||
|
7850f8bd74 | ||
|
25a137c8c6 | ||
|
cdf5f42599 | ||
|
daf84945cb | ||
|
a83a587270 | ||
|
595ac8afa2 | ||
|
09ab82e9d0 | ||
|
87fd17de51 | ||
|
ec40c1c8d0 | ||
|
a0d5d4158b | ||
|
e7782a24bf | ||
|
5c890acd8a | ||
|
09dbde3104 | ||
|
e0a9d6cb9d | ||
|
19d41e6139 | ||
|
f2b6e399d4 | ||
|
d4fa1d1816 | ||
|
e01a0f00de | ||
|
4f4df208a9 | ||
|
62d458238d | ||
|
f80d76f069 | ||
|
cb475f78f9 | ||
|
0868bcbade | ||
|
ac1ffc70f8 | ||
|
fe43f3ddc6 | ||
|
3f85f1763b | ||
|
1fe2ba1ddc | ||
|
2543a28ce4 | ||
|
673cb4f847 | ||
|
2e6bd2290e | ||
|
1f5939c74a | ||
|
63509658f4 | ||
|
9fb3f40824 | ||
|
41728a6faf | ||
|
5f3631c6be | ||
|
ad5dcc9752 | ||
|
abdef6b13c | ||
|
205001dab8 | ||
|
1ba1541771 | ||
|
ef6a3db00f | ||
|
d8cde81519 | ||
|
a5ec351f6e | ||
|
4c95b9d483 | ||
|
90c12baba2 | ||
|
d3262def33 | ||
|
63a6c00152 | ||
|
aa13fb8472 | ||
|
21ab9dc521 | ||
|
40e8ab0c08 | ||
|
e09be4fd77 | ||
|
9f43cabb0a | ||
|
b5e303e711 | ||
|
706ff96060 | ||
|
6294cf99ff | ||
|
0ad98f7460 | ||
|
b22ef7765c | ||
|
2fce7d906c | ||
|
44abde0a0d | ||
|
e103c8cb4a | ||
|
ca871ef7fd | ||
|
bbd04d95a2 | ||
|
1944c4b4e8 | ||
|
913f7f2af2 | ||
|
9c6e895b0b | ||
|
1f74cc531e | ||
|
05fd4e7f64 | ||
|
74e480d41e | ||
|
b6a21b238f | ||
|
9b064a2d9b | ||
|
981ea8facf | ||
|
a934f08991 | ||
|
ce701fe0df | ||
|
91e07b125f | ||
|
2ec8a387a0 | ||
|
b594ebe2e7 | ||
|
4f213843ac | ||
|
cdcb0f8b99 | ||
|
9e0670934a | ||
|
f85f8cf234 | ||
|
7bad59bbdd | ||
|
030275f110 | ||
|
0d1d699881 | ||
|
a59b542fd6 | ||
|
aeedb30ca0 | ||
|
9efe53b3f5 | ||
|
3d8a3c0e69 | ||
|
c6eae9c6a3 | ||
|
135f617b33 | ||
|
64fafd5c2e | ||
|
72b64cb4f2 | ||
|
f6749f92de | ||
|
d2c32c103a | ||
|
777d431d9a | ||
|
2777cce402 | ||
|
3fe922b5f5 | ||
|
dd5e8aebb1 | ||
|
f7f1efa7df | ||
|
0df2608bb1 | ||
|
2912921b94 | ||
|
7dac73a69b | ||
|
90261acce1 | ||
|
12af26a582 | ||
|
f3e96bb902 | ||
|
565f1e2e53 | ||
|
b0ab8b3913 | ||
|
1de37be8c1 | ||
|
71a0838ac3 | ||
|
8765c50218 | ||
|
346417b032 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,4 +1,2 @@
|
||||
debian/tools/wine
|
||||
.patchupdate.cache
|
||||
*.ok
|
||||
*.pyc
|
||||
|
40
README.md
40
README.md
@@ -37,11 +37,15 @@ Wine. All those differences are also documented on the
|
||||
Included bug fixes and improvements
|
||||
===================================
|
||||
|
||||
**Bugs fixed in Wine Staging 1.7.33 [119]:**
|
||||
**Bugs fixed in Wine Staging 1.7.34-1 [135]:**
|
||||
|
||||
* ATL IOCS data should not be stored in GWLP_USERDATA ([Wine Bug #21767](https://bugs.winehq.org/show_bug.cgi?id=21767))
|
||||
* Add Dynamic DST exceptions for Israel Standard Time ([Wine Bug #36374](https://bugs.winehq.org/show_bug.cgi?id=36374))
|
||||
* Add default ACLs for user shell folders
|
||||
* Add nvapi stubs required for GPU PhysX support
|
||||
* Add stub for D3DXComputeNormalMap
|
||||
* Add stub for D3DXComputeTangentFrameEx ([Wine Bug #31984](https://bugs.winehq.org/show_bug.cgi?id=31984))
|
||||
* Add stub for D3DXIntersect
|
||||
* Add stub for NtSetLdtEntries/ZwSetLdtEntries ([Wine Bug #26268](https://bugs.winehq.org/show_bug.cgi?id=26268))
|
||||
* Add support for GetPropValue to PulseAudio backend
|
||||
* Adobe Reader needs ITextSelection_fnGetDuplicate implementation
|
||||
@@ -51,18 +55,23 @@ Included bug fixes and improvements
|
||||
* Audio stuttering and performance drops in multiple applications ([Wine Bug #30639](https://bugs.winehq.org/show_bug.cgi?id=30639))
|
||||
* Avoid crashing when broken app tries to release surface although refcount is zero ([Wine Bug #18477](https://bugs.winehq.org/show_bug.cgi?id=18477))
|
||||
* Avoid race-conditions of async WSARecv() operations with write watches.
|
||||
* Basic support for CUDA
|
||||
* Black & White needs DXTn software decoding support ([Wine Bug #14939](https://bugs.winehq.org/show_bug.cgi?id=14939))
|
||||
* Correctly treat '.' when checking for empty directories ([Wine Bug #26272](https://bugs.winehq.org/show_bug.cgi?id=26272))
|
||||
* CreateProcess does not prioritize the working directory over the system search path ([Wine Bug #23934](https://bugs.winehq.org/show_bug.cgi?id=23934))
|
||||
* D3DCompileShader should filter specific warning messages ([Wine Bug #33770](https://bugs.winehq.org/show_bug.cgi?id=33770))
|
||||
* Do not fail when a used context is passed to wglShareLists ([Wine Bug #11436](https://bugs.winehq.org/show_bug.cgi?id=11436))
|
||||
* Don't fill KdHelp structure for usermode applications ([Wine Bug #37272](https://bugs.winehq.org/show_bug.cgi?id=37272))
|
||||
* Emulate access to KI_USER_SHARED_DATA kernel page on x86_64 ([Wine Bug #33849](https://bugs.winehq.org/show_bug.cgi?id=33849))
|
||||
* Emulate write to CR4 register ([Wine Bug #30220](https://bugs.winehq.org/show_bug.cgi?id=30220))
|
||||
* Ensure NtProtectVirtualMemory and NtCreateSection are on separate pages ([Wine Bug #33162](https://bugs.winehq.org/show_bug.cgi?id=33162))
|
||||
* Ensure X11 input events are handled even without explicit message loop ([Wine Bug #8854](https://bugs.winehq.org/show_bug.cgi?id=8854))
|
||||
* Exception during start of fr-043 caused by missing DXTn support ([Wine Bug #37391](https://bugs.winehq.org/show_bug.cgi?id=37391))
|
||||
* Expose PKEY_AudioEndpoint_PhysicalSpeakers device property in PulseAudio driver
|
||||
* FEAR 1 installer expects basic_string_wchar_dtor to return NULL ([Wine Bug #37358](https://bugs.winehq.org/show_bug.cgi?id=37358))
|
||||
* FairplayKD.sys needs KeSetSystemAffinityThread ([Wine Bug #36822](https://bugs.winehq.org/show_bug.cgi?id=36822))
|
||||
* Fix NULL dereference in ICSeqCompressFrameStart ([Wine Bug #27595](https://bugs.winehq.org/show_bug.cgi?id=27595))
|
||||
* Fix access violation when calling GetStringTypeW with NULL src. ([Wine Bug #37759](https://bugs.winehq.org/show_bug.cgi?id=37759))
|
||||
* Fix black screen on startup introduced by pixelformat changes. ([Wine Bug #35950](https://bugs.winehq.org/show_bug.cgi?id=35950))
|
||||
* Fix color key regression causing pink rectangles around text ([Wine Bug #37748](https://bugs.winehq.org/show_bug.cgi?id=37748))
|
||||
* Fix comparison of punctuation characters in lstrcmp ([Wine Bug #10767](https://bugs.winehq.org/show_bug.cgi?id=10767))
|
||||
* Fix condition mask handling in RtlVerifyVersionInfo ([Wine Bug #36143](https://bugs.winehq.org/show_bug.cgi?id=36143))
|
||||
* Fix crash of Trine Demo on start ([Wine Bug #19231](https://bugs.winehq.org/show_bug.cgi?id=19231))
|
||||
@@ -73,21 +82,27 @@ Included bug fixes and improvements
|
||||
* Fix gray screen on startup introduced by pixelformat changes. ([Wine Bug #35975](https://bugs.winehq.org/show_bug.cgi?id=35975))
|
||||
* Fix handling of empty section and key name for profile files. ([Wine Bug #8036](https://bugs.winehq.org/show_bug.cgi?id=8036))
|
||||
* Fix handling of invert_y in DrawTextExW ([Wine Bug #22109](https://bugs.winehq.org/show_bug.cgi?id=22109))
|
||||
* Fix handling of subdirectory in FtpFindFirstFile ([Wine Bug #16526](https://bugs.winehq.org/show_bug.cgi?id=16526))
|
||||
* Fix issues when driver dispatch routine returns different status codes ([Wine Bug #30155](https://bugs.winehq.org/show_bug.cgi?id=30155))
|
||||
* Fix issues with dragging layers between images in Adobe Photoshop 7.0 ([Wine Bug #12007](https://bugs.winehq.org/show_bug.cgi?id=12007))
|
||||
* Fix missing video introduced by pixelformat changes. ([Wine Bug #36900](https://bugs.winehq.org/show_bug.cgi?id=36900))
|
||||
* Fix parameters for ConvertToIndexedBlendedMesh stub ([Wine Bug #36449](https://bugs.winehq.org/show_bug.cgi?id=36449))
|
||||
* Fix possible segfault in pulse_rd_loop of PulseAudio backend
|
||||
* Fix return value of ScrollWindowEx for invisible windows ([Wine Bug #37706](https://bugs.winehq.org/show_bug.cgi?id=37706))
|
||||
* Fix texture corruption in CSI: Fatal Conspiracy ([Wine Bug #33768](https://bugs.winehq.org/show_bug.cgi?id=33768))
|
||||
* Fix unintentional leaks with ntdll internals
|
||||
* Fix wined3d performance drop introduced by pixelformat changes. ([Wine Bug #35655](https://bugs.winehq.org/show_bug.cgi?id=35655))
|
||||
* Games For Windows Live 1.x expects a valid linker version in the PE header ([Wine Bug #28768](https://bugs.winehq.org/show_bug.cgi?id=28768))
|
||||
* GetMonitorInfo returns the same name for all monitors ([Wine Bug #37709](https://bugs.winehq.org/show_bug.cgi?id=37709))
|
||||
* GetSecurityInfo returns NULL DACL for process object ([Wine Bug #15980](https://bugs.winehq.org/show_bug.cgi?id=15980))
|
||||
* Hearthstone fails to start ([Wine Bug #36216](https://bugs.winehq.org/show_bug.cgi?id=36216))
|
||||
* IOCTL_DVD_READ_STRUCTURE expects the wrong size of output buffer for some requests ([Wine Bug #37767](https://bugs.winehq.org/show_bug.cgi?id=37767))
|
||||
* Ignore unsupported flags for CoInternetSetFeatureEnabled ([Wine Bug #35197](https://bugs.winehq.org/show_bug.cgi?id=35197))
|
||||
* Implement ID3DXEffect::FindNextValidTechnique ([Wine Bug #34101](https://bugs.winehq.org/show_bug.cgi?id=34101))
|
||||
* Implement IDXGIOutput::GetDesc
|
||||
* Implement a Microsoft Yahei replacement font ([Wine Bug #13829](https://bugs.winehq.org/show_bug.cgi?id=13829))
|
||||
* Implement an Arial replacement font ([Wine Bug #32323](https://bugs.winehq.org/show_bug.cgi?id=32323))
|
||||
* Implement exclusive mode in PulseAudio backend ([Wine Bug #37042](https://bugs.winehq.org/show_bug.cgi?id=37042))
|
||||
* Implement stubs for mfplat.MFStartup and MFShutdown ([Wine Bug #37701](https://bugs.winehq.org/show_bug.cgi?id=37701))
|
||||
* Improvement for heap allocation performance
|
||||
* Initialize irp.Tail.Overlay.OriginalFileObject with stub file object ([Wine Bug #37537](https://bugs.winehq.org/show_bug.cgi?id=37537))
|
||||
* Lego Stunt Rally requires DXTn software de/encoding support ([Wine Bug #25486](https://bugs.winehq.org/show_bug.cgi?id=25486))
|
||||
@@ -99,8 +114,6 @@ Included bug fixes and improvements
|
||||
* Need for Speed 3 installer requires devices in HKEY_DYN_DATA ([Wine Bug #7115](https://bugs.winehq.org/show_bug.cgi?id=7115))
|
||||
* Other Pipelight-specific enhancements
|
||||
* Prevent window managers from grouping all wine programs together ([Wine Bug #32699](https://bugs.winehq.org/show_bug.cgi?id=32699))
|
||||
* Provide named entry point shell32.SHILCreateFromPath for vista apps ([Wine Bug #37265](https://bugs.winehq.org/show_bug.cgi?id=37265))
|
||||
* Reallocate buffer when adding records to AVI files ([Wine Bug #5137](https://bugs.winehq.org/show_bug.cgi?id=5137))
|
||||
* Reduced SetTimer minimum value from 10 ms to 5 ms (improves Silverlight framerates)
|
||||
* Return an error when trying to open a terminated process ([Wine Bug #37087](https://bugs.winehq.org/show_bug.cgi?id=37087))
|
||||
* Return correct IMediaSeeking stream positions in quartz ([Wine Bug #23174](https://bugs.winehq.org/show_bug.cgi?id=23174))
|
||||
@@ -112,6 +125,8 @@ Included bug fixes and improvements
|
||||
* Support for AllocateAndGetTcpExTableFromStack ([Wine Bug #34372](https://bugs.winehq.org/show_bug.cgi?id=34372))
|
||||
* Support for BindImageEx ([Wine Bug #3591](https://bugs.winehq.org/show_bug.cgi?id=3591))
|
||||
* Support for CSMT (command stream) to increase graphic performance ([Wine Bug #11674](https://bugs.winehq.org/show_bug.cgi?id=11674))
|
||||
* Support for CUDA GPU video decoding
|
||||
* Support for D3DXComputeNormals ([Wine Bug #26379](https://bugs.winehq.org/show_bug.cgi?id=26379))
|
||||
* Support for D3DXGetShaderInputSemantics ([Wine Bug #22682](https://bugs.winehq.org/show_bug.cgi?id=22682))
|
||||
* Support for DOS hidden/system file attributes ([Wine Bug #9158](https://bugs.winehq.org/show_bug.cgi?id=9158))
|
||||
* Support for Dynamic DST (daylight saving time) information in registry
|
||||
@@ -119,11 +134,11 @@ Included bug fixes and improvements
|
||||
* Support for GetFinalPathNameByHandle ([Wine Bug #36073](https://bugs.winehq.org/show_bug.cgi?id=36073))
|
||||
* Support for GetSystemTimes ([Wine Bug #19813](https://bugs.winehq.org/show_bug.cgi?id=19813))
|
||||
* Support for GetVolumePathName
|
||||
* Support for ID3DXFont::DrawTextA/W ([Wine Bug #24754](https://bugs.winehq.org/show_bug.cgi?id=24754))
|
||||
* Support for ID3DXSkinInfoImpl_UpdateSkinnedMesh ([Wine Bug #32572](https://bugs.winehq.org/show_bug.cgi?id=32572))
|
||||
* Support for ITextDocument_fnRange function ([Wine Bug #12458](https://bugs.winehq.org/show_bug.cgi?id=12458))
|
||||
* Support for ITextRange, ITextFont and ITextPara ([Wine Bug #18303](https://bugs.winehq.org/show_bug.cgi?id=18303))
|
||||
* Support for Junction Points ([Wine Bug #12401](https://bugs.winehq.org/show_bug.cgi?id=12401))
|
||||
* Support for K32EnumProcessModulesEx ([Wine Bug #34864](https://bugs.winehq.org/show_bug.cgi?id=34864))
|
||||
* Support for KF_FLAG_DEFAULT_PATH in SHGetKnownFolderPath ([Wine Bug #30385](https://bugs.winehq.org/show_bug.cgi?id=30385))
|
||||
* Support for LoadIconMetric ([Wine Bug #35375](https://bugs.winehq.org/show_bug.cgi?id=35375))
|
||||
* Support for NtQuerySection ([Wine Bug #37338](https://bugs.winehq.org/show_bug.cgi?id=37338))
|
||||
@@ -131,31 +146,32 @@ Included bug fixes and improvements
|
||||
* Support for PulseAudio backend for audio ([Wine Bug #10495](https://bugs.winehq.org/show_bug.cgi?id=10495))
|
||||
* Support for RtlDecompressBuffer ([Wine Bug #37449](https://bugs.winehq.org/show_bug.cgi?id=37449))
|
||||
* Support for SHCreateSessionKey ([Wine Bug #35630](https://bugs.winehq.org/show_bug.cgi?id=35630))
|
||||
* Support for StrCatChainW
|
||||
* Support for SLGetWindowsInformationDWORD ([Wine Bug #36709](https://bugs.winehq.org/show_bug.cgi?id=36709))
|
||||
* Support for TOOLTIPS_GetTipText edge cases ([Wine Bug #30648](https://bugs.winehq.org/show_bug.cgi?id=30648))
|
||||
* Support for TransmitFile ([Wine Bug #5048](https://bugs.winehq.org/show_bug.cgi?id=5048))
|
||||
* Support for UTF7 encoding/decoding ([Wine Bug #27388](https://bugs.winehq.org/show_bug.cgi?id=27388))
|
||||
* Support for WTSEnumerateProcessesW ([Wine Bug #29903](https://bugs.winehq.org/show_bug.cgi?id=29903))
|
||||
* Support for combase HSTRING objects
|
||||
* Support for extra large and jumbo icon lists in shell32 ([Wine Bug #24721](https://bugs.winehq.org/show_bug.cgi?id=24721))
|
||||
* Support for inherited file ACLs ([Wine Bug #34406](https://bugs.winehq.org/show_bug.cgi?id=34406))
|
||||
* Support for interface change notifications ([Wine Bug #32328](https://bugs.winehq.org/show_bug.cgi?id=32328))
|
||||
* Support for loader dll redirections
|
||||
* Support for named pipe message mode (Linux only) ([Wine Bug #17195](https://bugs.winehq.org/show_bug.cgi?id=17195))
|
||||
* Support for pasting HTML from Unix applications ([Wine Bug #7372](https://bugs.winehq.org/show_bug.cgi?id=7372))
|
||||
* Support for process ACLs ([Wine Bug #22006](https://bugs.winehq.org/show_bug.cgi?id=22006))
|
||||
* Support for setcap on wine-preloader ([Wine Bug #26256](https://bugs.winehq.org/show_bug.cgi?id=26256))
|
||||
* Support for stored file ACLs ([Wine Bug #31858](https://bugs.winehq.org/show_bug.cgi?id=31858))
|
||||
* Support for wine64 on FreeBSD/PC-BSD ([Wine Bug #34330](https://bugs.winehq.org/show_bug.cgi?id=34330))
|
||||
* Try harder to get the host name address in getaddrinfo() ([Wine Bug #29609](https://bugs.winehq.org/show_bug.cgi?id=29609))
|
||||
* Tumblebugs 2 requires DXTn software encoding support ([Wine Bug #29586](https://bugs.winehq.org/show_bug.cgi?id=29586))
|
||||
* Unity3D Editor requires ProductId registry value ([Wine Bug #36964](https://bugs.winehq.org/show_bug.cgi?id=36964))
|
||||
* Update a XIM candidate position when cursor location changes ([Wine Bug #30938](https://bugs.winehq.org/show_bug.cgi?id=30938))
|
||||
* Use actual program name if available to describe PulseAudio streams
|
||||
* Use manual relay for RunDLL_CallEntry16 in shell32 ([Wine Bug #23033](https://bugs.winehq.org/show_bug.cgi?id=23033))
|
||||
* Voobly expects correct handling of WRITECOPY memory protection ([Wine Bug #29384](https://bugs.winehq.org/show_bug.cgi?id=29384))
|
||||
* WSARecv should call SetLastError on success ([Wine Bug #31438](https://bugs.winehq.org/show_bug.cgi?id=31438))
|
||||
* Wine ignores IDF_CHECKFIRST flag in SetupPromptForDisk ([Wine Bug #20465](https://bugs.winehq.org/show_bug.cgi?id=20465))
|
||||
* Workaround for shlwapi URLs with relative paths
|
||||
* XEMBED support for embedding Wine windows inside Linux applications
|
||||
* nVidia driver for high-end laptop cards does not list all supported resolutions
|
||||
* vSphere needs IoCsqInitialize ([Wine Bug #36777](https://bugs.winehq.org/show_bug.cgi?id=36777))
|
||||
* ntdll is missing WinSqm[Start|End]Session implementation ([Wine Bug #31971](https://bugs.winehq.org/show_bug.cgi?id=31971))
|
||||
* wglDescribePixelFormat should return max index for NULL descriptor ([Wine Bug #6176](https://bugs.winehq.org/show_bug.cgi?id=6176))
|
||||
* wininet should allow Accept-Encoding header for HTTP/1.0 ([Wine Bug #37046](https://bugs.winehq.org/show_bug.cgi?id=37046))
|
||||
|
||||
|
63
debian/changelog
vendored
63
debian/changelog
vendored
@@ -1,3 +1,64 @@
|
||||
wine-staging (1.7.34-1) unstable; urgency=low
|
||||
* Debian/Ubuntu specific package dependency fix (no changes for other distros).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sun, 11 Jan 2015 19:14:09 +0100
|
||||
|
||||
wine-staging (1.7.34) unstable; urgency=low
|
||||
* Huge rewrite of patchupdate.py, deprecation of Makefile based way to apply patches.
|
||||
* Rename debian package from 'wine-compholio' to 'wine-staging' and provide compatibility package.
|
||||
* Avoid duplicate wined3d specfile by adding PARENTSPEC Makefile argument.
|
||||
* Fix issue in DOS Attributes patch which broke ./configure on systems with alternative shells.
|
||||
* Fix issue in user32-WndProc patch which caused crashes for some 16-bit apps.
|
||||
* Fix issue in ws2_32-WriteWatches patch which can cause exceptions on the signal stack.
|
||||
* Fix issue with invalid handles being incorrect when a new process is created.
|
||||
* Update DXTn patches to better handle when libtxc_dxtn is missing or support is not compiled in.
|
||||
* Added patch for WSARecv to call SetLastError on success.
|
||||
* Added patch for CreateProcess to prioritize the working directory over the system search path.
|
||||
* Added patch with stubs for WinSqm[Start|End]Session.
|
||||
* Added patch to fix handling of subdirectory in FtpFindFirstFile.
|
||||
* Added patch to return proper charcount for GetLocaleInfo with LOCALE_IFIRSTDAYOFWEEK.
|
||||
* Added patch to ensure X11 input events are handled even without explicit message loop.
|
||||
* Added test for server-Unexpected_Wakeup patch.
|
||||
* Added patch for stub of ntdll.RtlSetHeapInformation.
|
||||
* Added patch for IDXGIOutput::GetDesc.
|
||||
* Added patch for ID3DXEffect::FindNextValidTechnique.
|
||||
* Added patch with stub for D3DXComputeTangentFrameEx.
|
||||
* Added patch with stub for D3DXIntersect.
|
||||
* Added test for RtlIpv4StringToAddressExA.
|
||||
* Added patch for support of SLGetWindowsInformationDWORD.
|
||||
* Added patch to expect the correct buffer size for different IOCTL_DVD_READ_STRUCTURE requests.
|
||||
* Added patch to use actual program name if available to describe PulseAudio streams.
|
||||
* Added patch to try harder to get the host name address in getaddrinfo().
|
||||
* Added patch to fix invalid usage of RegOpenKeyExW in msdmo.
|
||||
* Added patch to add support for named pipe message mode.
|
||||
* Added patch to avoid calling IDirect3DDevice7_DrawIndexedPrimitive if there is no primitive.
|
||||
* Added patch to fix access violation when calling GetStringTypeW with NULL src.
|
||||
* Added patch for ID3DXFont::DrawTextA/W support.
|
||||
* Added patch to fix parameters for ConvertToIndexedBlendedMesh stub.
|
||||
* Added patch for basic CUDA support.
|
||||
* Added patches for D3DXComputeNormals and D3DXComputeNormalMap.
|
||||
* Added patch for nvapi stubs (required for GPU PhysX support).
|
||||
* Added patch to fix NULL dereference in ICSeqCompressFrameStart.
|
||||
* Added patch to implement support for CUDA GPU video decoding.
|
||||
* Added patch to fix color key regression causing pink rectangles around text.
|
||||
* Rebased winepulse-Pulseaudio_Support patches to latest version from http://repo.or.cz/w/wine/multimedia.git.
|
||||
* Removed patch to emulate write to CR4 register (accepted upstream).
|
||||
* Removed patch with stub for KeSetSystemAffinityThread (accepted upstream).
|
||||
* Removed patch to implement combase HSTRING objects (accepted upstream).
|
||||
* Removed patch to add fake ProductId to registry (accepted upstream).
|
||||
* Removed patch to implement stubs for MFStartup and MFShutdown (accepted upstream).
|
||||
* Removed patch to implement shlwapi.StrCatChainW (accepted upstream).
|
||||
* Removed patch to implement semi-stub for psapi/kernel32 K32EnumProcessModulesEx (accepted upstream).
|
||||
* Removed patch to return proper charcount for GetLocaleInfo with LOCALE_IFIRSTDAYOFWEEK (accepted upstream).
|
||||
* Removed patch to export SHILCreateFromPath by name (accepted upstream).
|
||||
* Removed patch for stub of ntdll.RtlSetHeapInformation (accepted upstream).
|
||||
* Removed patch for wine64 support on FreeBSD (accepted upstream).
|
||||
* Removed patch for IoCsqInitialize (accepted upstream).
|
||||
* Removed patch to fix invalid usage of RegOpenKeyExW in msdmo (fixed upstream).
|
||||
* Removed patch to reallocate buffer when adding records to AVI files (fixed upstream).
|
||||
* Partially removed patches for ntdll DOS attributes (accepted upstream).
|
||||
* Partially removed patches for UTF7 support (accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sat, 10 Jan 2015 22:22:01 +0100
|
||||
|
||||
wine-compholio (1.7.33) unstable; urgency=low
|
||||
* Various improvements of patchupdate.py.
|
||||
* Added patches for wined3d CSMT (command stream) support.
|
||||
@@ -54,7 +115,7 @@ wine-compholio (1.7.32) unstable; urgency=low
|
||||
* Removed patch to fix implementation ofCoWaitForMultipleHandles (accepted upstream).
|
||||
* Removed patch to avoid interthread no-op messages in ShowWindow (accepted upstream).
|
||||
* Removed patches to take abs() of vertex z coordinate as FFP fog coordinate (fixed upstream).
|
||||
* Removed patch to fix detection of gnutls on Ubuntu 14.10.
|
||||
* Removed patch to fix detection of gnutls on Ubuntu 14.10 (accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sun, 30 Nov 2014 15:22:49 +0100
|
||||
|
||||
wine-compholio (1.7.31) unstable; urgency=low
|
||||
|
82
debian/control
vendored
82
debian/control
vendored
@@ -1,4 +1,4 @@
|
||||
Source: wine-compholio
|
||||
Source: wine-staging
|
||||
Section: otherosfs
|
||||
Priority: optional
|
||||
Maintainer: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
@@ -69,7 +69,7 @@ Build-Depends: autotools-dev,
|
||||
x11proto-xinerama-dev
|
||||
Standards-Version: 3.9.2
|
||||
|
||||
Package: wine-compholio-i386
|
||||
Package: wine-staging-i386
|
||||
Architecture: i386
|
||||
Multi-Arch: foreign
|
||||
Pre-Depends: dpkg (>= 1.14.12ubuntu3), ${misc:Pre-Depends}
|
||||
@@ -108,9 +108,7 @@ Recommends: libcapi20-3,
|
||||
libgsm1
|
||||
Section: otherosfs
|
||||
Priority: optional
|
||||
Replaces: wine-compholio (<< 1.7.15-1~)
|
||||
Breaks: wine-compholio (<< 1.7.15-1~)
|
||||
Description: The Compholio Edition is a special build of the popular Wine software
|
||||
Description: The Staging Edition is a special build of the popular Wine software
|
||||
with patches representing my current staging tree for Wine.
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
@@ -125,7 +123,7 @@ Description: The Compholio Edition is a special build of the popular Wine softwa
|
||||
work, there may be some loss of functionality compared with the stable release
|
||||
provided by the regular wine package.
|
||||
|
||||
Package: wine-compholio-amd64
|
||||
Package: wine-staging-amd64
|
||||
Architecture: amd64
|
||||
Multi-Arch: foreign
|
||||
Pre-Depends: dpkg (>= 1.14.12ubuntu3), ${misc:Pre-Depends}
|
||||
@@ -164,9 +162,7 @@ Recommends: libcapi20-3,
|
||||
libgsm1
|
||||
Section: otherosfs
|
||||
Priority: optional
|
||||
Replaces: wine-compholio (<< 1.7.15-1~)
|
||||
Breaks: wine-compholio (<< 1.7.15-1~)
|
||||
Description: The Compholio Edition is a special build of the popular Wine software
|
||||
Description: The Staging Edition is a special build of the popular Wine software
|
||||
with patches representing my current staging tree for Wine.
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
@@ -181,16 +177,16 @@ Description: The Compholio Edition is a special build of the popular Wine softwa
|
||||
work, there may be some loss of functionality compared with the stable release
|
||||
provided by the regular wine package.
|
||||
|
||||
Package: wine-compholio
|
||||
Package: wine-staging
|
||||
Architecture: i386 amd64
|
||||
Multi-Arch: foreign
|
||||
Pre-Depends: dpkg (>= 1.14.12ubuntu3), ${misc:Pre-Depends}
|
||||
Depends: ${misc:Depends}, ${shlibs:Depends},
|
||||
wine-compholio-i386 (= ${binary:Version}) [i386 amd64],
|
||||
wine-compholio-amd64 (= ${binary:Version}) [amd64],
|
||||
wine-staging-i386 (= ${binary:Version}) [i386 amd64],
|
||||
wine-staging-amd64 (= ${binary:Version}) [amd64],
|
||||
Section: otherosfs
|
||||
Priority: optional
|
||||
Description: The Compholio Edition is a special build of the popular Wine software
|
||||
Description: The Staging Edition is a special build of the popular Wine software
|
||||
with patches representing my current staging tree for Wine.
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
@@ -207,18 +203,16 @@ Description: The Compholio Edition is a special build of the popular Wine softwa
|
||||
work, there may be some loss of functionality compared with the stable release
|
||||
provided by the regular wine package.
|
||||
|
||||
Package: wine-compholio-dev
|
||||
Package: wine-staging-dev
|
||||
Architecture: i386 amd64
|
||||
Pre-Depends: dpkg (>= 1.14.12ubuntu3), ${misc:Pre-Depends}
|
||||
Depends: libc6-dev,
|
||||
${shlibs:Depends},
|
||||
wine-compholio-i386 (= ${binary:Version}) [i386 amd64],
|
||||
wine-compholio-amd64 (= ${binary:Version}) [amd64],
|
||||
wine-staging-i386 (= ${binary:Version}) [i386 amd64],
|
||||
wine-staging-amd64 (= ${binary:Version}) [amd64],
|
||||
Section: libdevel
|
||||
Priority: optional
|
||||
Replaces: wine-compholio (<< 1.7.15-1~)
|
||||
Breaks: wine-compholio (<< 1.7.15-1~)
|
||||
Description: The Compholio Edition is a special build of the popular Wine software
|
||||
Description: The Staging Edition is a special build of the popular Wine software
|
||||
with patches representing my current staging tree for Wine.
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
@@ -230,18 +224,16 @@ Description: The Compholio Edition is a special build of the popular Wine softwa
|
||||
This package consists of the development files needed to compile programs
|
||||
using wine's free version of the Microsoft Windows API.
|
||||
|
||||
Package: wine-compholio-dbg
|
||||
Package: wine-staging-dbg
|
||||
Architecture: i386 amd64
|
||||
Multi-Arch: same
|
||||
Pre-Depends: dpkg (>= 1.14.12ubuntu3), ${misc:Pre-Depends}
|
||||
Depends: ${shlibs:Depends},
|
||||
wine-compholio-i386 (= ${binary:Version}) [i386 amd64],
|
||||
wine-compholio-amd64 (= ${binary:Version}) [amd64],
|
||||
wine-staging-i386 (= ${binary:Version}) [i386 amd64],
|
||||
wine-staging-amd64 (= ${binary:Version}) [amd64],
|
||||
Section: debug
|
||||
Priority: optional
|
||||
Replaces: wine-compholio (<< 1.7.15-1~)
|
||||
Breaks: wine-compholio (<< 1.7.15-1~)
|
||||
Description: The Compholio Edition is a special build of the popular Wine software
|
||||
Description: The Staging Edition is a special build of the popular Wine software
|
||||
with patches representing my current staging tree for Wine.
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
@@ -252,3 +244,43 @@ Description: The Compholio Edition is a special build of the popular Wine softwa
|
||||
.
|
||||
This package includes debugging symbols useful for reporting crashes and other
|
||||
failures.
|
||||
|
||||
Package: wine-compholio
|
||||
Architecture: i386 amd64
|
||||
Depends: wine-staging, ${misc:Depends}
|
||||
Priority: extra
|
||||
Section: oldlibs
|
||||
Description: Transitional dummy package
|
||||
This is a transitional dummy package. It can safely be removed.
|
||||
|
||||
Package: wine-compholio-i386
|
||||
Architecture: i386
|
||||
Depends: wine-staging-i386, ${misc:Depends}
|
||||
Priority: extra
|
||||
Section: oldlibs
|
||||
Description: Transitional dummy package
|
||||
This is a transitional dummy package. It can safely be removed.
|
||||
|
||||
Package: wine-compholio-amd64
|
||||
Architecture: amd64
|
||||
Depends: wine-staging-amd64, ${misc:Depends}
|
||||
Priority: extra
|
||||
Section: oldlibs
|
||||
Description: Transitional dummy package
|
||||
This is a transitional dummy package. It can safely be removed.
|
||||
|
||||
Package: wine-compholio-dev
|
||||
Architecture: i386 amd64
|
||||
Depends: wine-staging-dev, ${misc:Depends}
|
||||
Priority: extra
|
||||
Section: oldlibs
|
||||
Description: Transitional dummy package
|
||||
This is a transitional dummy package. It can safely be removed.
|
||||
|
||||
Package: wine-compholio-dbg
|
||||
Architecture: i386 amd64
|
||||
Depends: wine-staging-dbg, ${misc:Depends}
|
||||
Priority: extra
|
||||
Section: oldlibs
|
||||
Description: Transitional dummy package
|
||||
This is a transitional dummy package. It can safely be removed.
|
||||
|
43
debian/rules
vendored
43
debian/rules
vendored
@@ -14,11 +14,11 @@ endif
|
||||
override_dh_auto_configure:
|
||||
|
||||
# Apply our patches, reconfigure, and update the wineserver protocol request data
|
||||
make -C "$(CURDIR)/patches/" DESTDIR="$(CURDIR)" install
|
||||
"$(CURDIR)/patches/patchinstall.sh" DESTDIR="$(CURDIR)" --all
|
||||
|
||||
# Run configure
|
||||
ifeq ($(DEB_BUILD_ARCH), amd64)
|
||||
./configure --prefix=/opt/wine-compholio \
|
||||
./configure --prefix=/opt/wine-staging \
|
||||
--libdir=\$${prefix}/lib64 \
|
||||
--mandir=\$${prefix}/share/man \
|
||||
--infodir=\$${prefix}/share/info \
|
||||
@@ -27,7 +27,7 @@ ifeq ($(DEB_BUILD_ARCH), amd64)
|
||||
--with-xattr \
|
||||
$(CONFFLAGS)
|
||||
else
|
||||
./configure --prefix=/opt/wine-compholio \
|
||||
./configure --prefix=/opt/wine-staging \
|
||||
--libdir=\$${prefix}/lib \
|
||||
--mandir=\$${prefix}/share/man \
|
||||
--infodir=\$${prefix}/share/info \
|
||||
@@ -42,31 +42,42 @@ override_dh_auto_test:
|
||||
|
||||
|
||||
override_dh_installdocs:
|
||||
|
||||
# Create copies of license files
|
||||
cp "$(CURDIR)/LICENSE" "$(CURDIR)/LICENSE.wine"
|
||||
cp "$(CURDIR)/LICENSE.md" "$(CURDIR)/LICENSE.wine-compholio"
|
||||
|
||||
dh_installdocs --link-doc=wine-compholio
|
||||
dh_installdocs --link-doc=wine-staging
|
||||
|
||||
|
||||
override_dh_install:
|
||||
dh_install --fail-missing
|
||||
|
||||
# These files will end up in multiple packages otherwise
|
||||
rm -f debian/wine-compholio/opt/wine-compholio/bin/wine
|
||||
rm -f debian/wine-compholio/opt/wine-compholio/bin/wine-preloader
|
||||
rm -f debian/wine-compholio/opt/wine-compholio/bin/wine64
|
||||
rm -f debian/wine-compholio/opt/wine-compholio/bin/wine64-preloader
|
||||
rm -f debian/wine-staging/opt/wine-staging/bin/wine
|
||||
rm -f debian/wine-staging/opt/wine-staging/bin/wine-preloader
|
||||
rm -f debian/wine-staging/opt/wine-staging/bin/wine64
|
||||
rm -f debian/wine-staging/opt/wine-staging/bin/wine64-preloader
|
||||
|
||||
# Create compatibility symlinks
|
||||
mkdir -p debian/wine-compholio/opt/wine-compholio/bin
|
||||
for _file in $$(ls "debian/wine-staging/opt/wine-staging/bin"); do \
|
||||
ln -s "/opt/wine-staging/bin/$$_file" "debian/wine-compholio/opt/wine-compholio/bin/$$_file"; \
|
||||
done
|
||||
|
||||
# Architecture specific compatibility symlinks
|
||||
ifeq ($(DEB_HOST_ARCH),amd64)
|
||||
for _file in wine wine-preloader wine64 wine64-preloader; do \
|
||||
ln -s "/opt/wine-staging/bin/$$_file" "debian/wine-compholio/opt/wine-compholio/bin/$$_file"; \
|
||||
done
|
||||
else
|
||||
for _file in wine wine-preloader; do \
|
||||
ln -s "/opt/wine-staging/bin/$$_file" "debian/wine-compholio/opt/wine-compholio/bin/$$_file"; \
|
||||
done
|
||||
endif
|
||||
|
||||
override_dh_strip:
|
||||
dh_strip -Xwine-pthread -Xwine-kthread --dbg-package=wine-compholio-dbg
|
||||
dh_strip -Xwine-pthread -Xwine-kthread --dbg-package=wine-staging-dbg
|
||||
|
||||
|
||||
override_dh_shlibdeps:
|
||||
ifeq ($(DEB_HOST_ARCH),amd64)
|
||||
dh_shlibdeps -l $(CURDIR)/debian/tmp/opt/wine-compholio/lib64/
|
||||
dh_shlibdeps -l $(CURDIR)/debian/tmp/opt/wine-staging/lib64/
|
||||
else
|
||||
dh_shlibdeps -l $(CURDIR)/debian/tmp/opt/wine-compholio/lib/
|
||||
dh_shlibdeps -l $(CURDIR)/debian/tmp/opt/wine-staging/lib/
|
||||
endif
|
||||
|
4
debian/tools/gitapply.sh
vendored
4
debian/tools/gitapply.sh
vendored
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# Wrapper to apply binary patches without git.
|
||||
#
|
||||
# Copyright (C) 2014 Sebastian Lackner
|
||||
# Copyright (C) 2014-2015 Sebastian Lackner
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
@@ -75,7 +75,7 @@ filesize()
|
||||
|
||||
|
||||
# Parse environment variables
|
||||
while [[ $# > 0 ]]; do
|
||||
while [ "$#" -gt 0 ]; do
|
||||
cmd="$1"; shift
|
||||
case "$cmd" in
|
||||
|
||||
|
291
debian/tools/patchinstall.sh.in
vendored
Normal file
291
debian/tools/patchinstall.sh.in
vendored
Normal file
@@ -0,0 +1,291 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Script to automatically install all Wine Staging patches
|
||||
#
|
||||
# Copyright (C) 2015 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
|
||||
#
|
||||
|
||||
# Show usage information
|
||||
usage()
|
||||
{{
|
||||
echo ""
|
||||
echo "Usage: ./patchinstall.sh [DESTDIR=path] [--all] [-W patchset] [patchset ...]"
|
||||
echo ""
|
||||
echo "Autogenerated script to apply all Wine Staging patches on your Wine"
|
||||
echo "source tree. This script replaces and enhances the old method of"
|
||||
echo "using a Makefile."
|
||||
echo ""
|
||||
echo "Configuration:"
|
||||
echo " DESTDIR=path Specify the path to the wine source tree"
|
||||
echo " --all Select all patches"
|
||||
echo " --help Display this help and exit"
|
||||
echo " --no-autoupdate Do not apply patchlist and don't auto-update files"
|
||||
echo " -W patchset Exclude a specific patchset"
|
||||
echo ""
|
||||
echo "Backends:"
|
||||
echo " --backend=patch Use regular 'patch' utility to apply patches (default)"
|
||||
echo " --backend=git-am Use 'git am' to apply patches"
|
||||
echo " --backend=git-apply Use 'git apply' to apply patches"
|
||||
echo ""
|
||||
}}
|
||||
|
||||
# Critical error, abort
|
||||
abort()
|
||||
{{
|
||||
echo "ERROR: $1" >&2
|
||||
exit 1
|
||||
}}
|
||||
|
||||
{patch_helpers}
|
||||
|
||||
# Default settings
|
||||
patch_enable_all 0
|
||||
enable_autoupdate=1
|
||||
patchlist="/dev/null"
|
||||
backend="patch"
|
||||
enable=1
|
||||
|
||||
if test "$#" -eq 0; then
|
||||
abort "No commandline arguments given, don't know what to do."
|
||||
fi
|
||||
|
||||
while test "$#" -gt 0; do
|
||||
if patch_enable "$1" "$enable"; then
|
||||
shift
|
||||
enable=1
|
||||
continue
|
||||
fi
|
||||
|
||||
if test "$enable" -ne 1; then
|
||||
abort "Wrong use of -W commandline argument, expected patchname."
|
||||
fi
|
||||
|
||||
case "$1" in
|
||||
DESTDIR=*)
|
||||
DESTDIR="${{1#*=}}"
|
||||
shift
|
||||
;;
|
||||
|
||||
--all)
|
||||
patch_enable_all 1
|
||||
shift
|
||||
;;
|
||||
|
||||
--backend=*)
|
||||
backend="${{1#*=}}"
|
||||
shift
|
||||
;;
|
||||
|
||||
--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--no-autoupdate)
|
||||
enable_autoupdate=0
|
||||
shift
|
||||
;;
|
||||
|
||||
-W)
|
||||
enable=2
|
||||
shift
|
||||
;;
|
||||
|
||||
*)
|
||||
abort "Unknown commandline argument $1"
|
||||
exit 1
|
||||
esac
|
||||
done
|
||||
|
||||
if test "$enable" -ne 1; then
|
||||
abort "Missing argument for -W, expected patchname."
|
||||
fi
|
||||
|
||||
# Apply the patches using gitapply.sh, a small wrapper around 'patch'
|
||||
if test "$backend" = "patch"; then
|
||||
|
||||
patch_apply ()
|
||||
{{
|
||||
echo "Applying $1"
|
||||
if ! ../debian/tools/gitapply.sh -d "$DESTDIR" < "$1"; then
|
||||
abort "Failed to apply patch, aborting!"
|
||||
fi
|
||||
}}
|
||||
|
||||
# GIT backend - apply patches using 'git am'
|
||||
elif test "$backend" = "git" -o "$backend" = "git-am"; then
|
||||
|
||||
patch_apply ()
|
||||
{{
|
||||
echo "Applying $1"
|
||||
if ! cat "$1" | (cd "$DESTDIR" && git am); then
|
||||
abort "Failed to apply patch, aborting!"
|
||||
fi
|
||||
}}
|
||||
|
||||
# Git apply backend
|
||||
elif test "$backend" = "git-apply"; then
|
||||
|
||||
patch_apply ()
|
||||
{{
|
||||
echo "Applying $1"
|
||||
if ! cat "$1" | (cd "$DESTDIR" && git apply); then
|
||||
abort "Failed to apply patch, aborting!"
|
||||
fi
|
||||
}}
|
||||
|
||||
# Stacked GIT backend - import the patches (mainly for developers)
|
||||
elif test "$backend" = "stg"; then
|
||||
|
||||
# Only import the regular patches, no autogenerated ones -
|
||||
# moreover, don't run autoreconf or ./tools/make_requests.
|
||||
enable_autoupdate=0
|
||||
|
||||
patch_apply ()
|
||||
{{
|
||||
echo "Applying $1"
|
||||
if ! echo "staging/$1" | cat - "$1" | (cd "$DESTDIR" && stg import); then
|
||||
abort "Failed to apply patch, aborting!"
|
||||
fi
|
||||
}}
|
||||
|
||||
else
|
||||
abort "Selected backend $backend not supported."
|
||||
fi
|
||||
|
||||
|
||||
{patch_resolver}
|
||||
|
||||
|
||||
if test -z "$DESTDIR" -a -f ./tools/make_requests; then
|
||||
DESTDIR="$(pwd)"
|
||||
|
||||
elif test ! -f "$DESTDIR/tools/make_requests"; then
|
||||
abort "DESTDIR does not point to the Wine source tree."
|
||||
fi
|
||||
|
||||
# To make sure we find all the patches and tools switch to the patches directory now
|
||||
script="$(readlink -f "$0")"
|
||||
curdir="$(dirname "$script")"
|
||||
if ! cd "$curdir"; then
|
||||
abort "Failed to change working directory to $curdir."
|
||||
fi
|
||||
|
||||
# If autoupdate is enabled then create a tempfile to keep track of all patches
|
||||
if test "$enable_autoupdate" -eq 1; then
|
||||
patchlist=$(mktemp)
|
||||
if test ! -f "$patchlist"; then
|
||||
echo "ERROR: Unable to create temporary file for patchlist." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
{patch_apply}
|
||||
|
||||
|
||||
if test "$enable_autoupdate" -eq 1; then
|
||||
|
||||
# Generate a temporary patch containing the patchlist and apply it
|
||||
patch_data=$(cat "$patchlist" | sort)
|
||||
patch_lines=$(echo "$patch_data" | wc -l)
|
||||
if test ! -z "$patch_data"; then
|
||||
patch_lines=$((${{patch_lines}}+23))
|
||||
cat > "$patchlist" <<EOF
|
||||
From: Wine Staging Team <webmaster@fds-team.de>
|
||||
Subject: Autogenerated patch list.
|
||||
|
||||
diff --git a/include/wine/library.h b/include/wine/library.h
|
||||
--- 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 );
|
||||
diff --git a/libs/wine/config.c b/libs/wine/config.c
|
||||
index a273502..0a3182f 100644
|
||||
--- a/libs/wine/config.c
|
||||
+++ b/libs/wine/config.c
|
||||
@@ -478,6 +478,${{patch_lines}} @@ const char *wine_get_version(void)
|
||||
return PACKAGE_VERSION;
|
||||
}}
|
||||
|
||||
+static const struct
|
||||
+{{
|
||||
+ const char *author;
|
||||
+ const char *subject;
|
||||
+ int revision;
|
||||
+}}
|
||||
+wine_patch_data[] =
|
||||
+{{
|
||||
${{patch_data}}
|
||||
+ {{ NULL, NULL, 0 }}
|
||||
+}};
|
||||
+
|
||||
+/* 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;
|
||||
EOF
|
||||
patch_apply "$patchlist"
|
||||
fi
|
||||
rm "$patchlist"
|
||||
|
||||
# Other autogenerated changes
|
||||
if ! (cd "$DESTDIR" && autoreconf -f); then
|
||||
abort "'autoreconf -f' failed."
|
||||
fi
|
||||
if ! (cd "$DESTDIR" && ./tools/make_requests); then
|
||||
abort "'./tools/make_requests' failed."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Success
|
||||
exit 0
|
74
debian/tools/patchlist.sh
vendored
74
debian/tools/patchlist.sh
vendored
@@ -1,74 +0,0 @@
|
||||
#!/bin/sh
|
||||
PATCH_DATA=$(cat);
|
||||
PATCH_LINES=$(echo "${PATCH_DATA}" | wc -l);
|
||||
PATCH_LINES=$((${PATCH_LINES}+23));
|
||||
|
||||
cat <<EOF
|
||||
From: Wine Staging Team <webmaster@fds-team.de>
|
||||
Subject: Autogenerated patch list.
|
||||
|
||||
diff --git a/include/wine/library.h b/include/wine/library.h
|
||||
--- 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 );
|
||||
diff --git a/libs/wine/config.c b/libs/wine/config.c
|
||||
index a273502..0a3182f 100644
|
||||
--- a/libs/wine/config.c
|
||||
+++ b/libs/wine/config.c
|
||||
@@ -478,6 +478,${PATCH_LINES} @@ const char *wine_get_version(void)
|
||||
return PACKAGE_VERSION;
|
||||
}
|
||||
|
||||
+static const struct
|
||||
+{
|
||||
+ const char *author;
|
||||
+ const char *subject;
|
||||
+ int revision;
|
||||
+}
|
||||
+wine_patch_data[] =
|
||||
+{
|
||||
${PATCH_DATA}
|
||||
+ { NULL, NULL, 0 }
|
||||
+};
|
||||
+
|
||||
+/* 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;
|
||||
EOF
|
388
debian/tools/patchupdate.py
vendored
388
debian/tools/patchupdate.py
vendored
@@ -1,8 +1,8 @@
|
||||
#!/usr/bin/python2
|
||||
#
|
||||
# Automatic patch dependency checker and Makefile/README.md generator.
|
||||
# Automatic patch dependency checker and apply script/README.md generator.
|
||||
#
|
||||
# Copyright (C) 2014 Sebastian Lackner
|
||||
# Copyright (C) 2014-2015 Sebastian Lackner
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
@@ -43,17 +43,15 @@ latest_wine_commit = None
|
||||
cached_patch_result = {}
|
||||
|
||||
class config(object):
|
||||
path_depcache = ".patchupdate.cache"
|
||||
|
||||
path_patches = "patches"
|
||||
path_changelog = "debian/changelog"
|
||||
path_wine = "debian/tools/wine"
|
||||
|
||||
path_template_Makefile = "debian/tools/Makefile.in"
|
||||
path_Makefile = "patches/Makefile"
|
||||
path_template_script = "debian/tools/patchinstall.sh.in"
|
||||
path_script = "patches/patchinstall.sh"
|
||||
|
||||
path_README_md = "README.md"
|
||||
path_template_README_md = "debian/tools/README.md.in"
|
||||
path_README_md = "README.md"
|
||||
|
||||
path_IfDefined = "9999-IfDefined.patch"
|
||||
|
||||
@@ -64,6 +62,7 @@ class PatchUpdaterError(RuntimeError):
|
||||
class PatchSet(object):
|
||||
def __init__(self, name, directory):
|
||||
self.name = name
|
||||
self.variable = None
|
||||
self.directory = directory
|
||||
self.fixes = []
|
||||
self.changes = []
|
||||
@@ -75,7 +74,6 @@ class PatchSet(object):
|
||||
self.modified_files = set()
|
||||
self.depends = set()
|
||||
|
||||
self.verify_depends = set()
|
||||
self.verify_time = None
|
||||
|
||||
def _pairs(a):
|
||||
@@ -98,14 +96,6 @@ def _split_seq(iterable, size):
|
||||
yield items
|
||||
items = list(itertools.islice(it, size))
|
||||
|
||||
def _merge_seq(iterable, callback=None):
|
||||
"""Merge lists/iterators into a new one. Call callback after each chunk"""
|
||||
for i, items in enumerate(iterable):
|
||||
if callback is not None:
|
||||
callback(i)
|
||||
for obj in items:
|
||||
yield obj
|
||||
|
||||
def _escape(s):
|
||||
"""Escape string inside of '...' quotes."""
|
||||
return s.replace("\\", "\\\\\\\\").replace("\"", "\\\"").replace("'", "'\\''")
|
||||
@@ -322,13 +312,6 @@ def causal_time_relation_any(all_patches, indices):
|
||||
return False
|
||||
return True
|
||||
|
||||
def causal_time_permutations(all_patches, indices):
|
||||
"""Iterate over all possible permutations of patches affecting
|
||||
a specific file, which are compatible with dependencies."""
|
||||
for permutation in itertools.permutations(indices):
|
||||
if causal_time_relation(all_patches, permutation):
|
||||
yield permutation
|
||||
|
||||
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:
|
||||
@@ -373,133 +356,20 @@ def select_patches(all_patches, indices, filename):
|
||||
selected_patches[i] = extract_patch(all_patches[i], filename)
|
||||
return selected_patches
|
||||
|
||||
def verify_patch_order(all_patches, indices, filename, pool):
|
||||
"""Checks if the dependencies are defined correctly by applying
|
||||
the patches on a (temporary) copy from the git tree."""
|
||||
|
||||
# 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_any(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
|
||||
|
||||
original_content = get_wine_file(filename)
|
||||
original_content_hash = _sha256(original_content)
|
||||
selected_patches = select_patches(all_patches, indices, filename)
|
||||
try:
|
||||
|
||||
def _test_apply(permutations):
|
||||
"""Tests if specific permutations of patches apply on the wine source tree."""
|
||||
patch_stack_indices = []
|
||||
patch_stack_patches = []
|
||||
try:
|
||||
|
||||
for permutation in permutations:
|
||||
|
||||
# Calculate hash
|
||||
m = hashlib.sha256()
|
||||
m.update(original_content_hash)
|
||||
for i in permutation:
|
||||
m.update(selected_patches[i][0])
|
||||
input_hash = m.digest()
|
||||
|
||||
# Fast path -> we know that it applies properly
|
||||
try:
|
||||
yield cached_patch_result[input_hash]
|
||||
continue
|
||||
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
# Remove unneeded patches from patch stack
|
||||
while list(permutation[:len(patch_stack_indices)]) != patch_stack_indices:
|
||||
patch_stack_indices.pop()
|
||||
patch_stack_patches.pop().close()
|
||||
|
||||
# Apply the patches (without fuzz)
|
||||
try:
|
||||
while len(patch_stack_indices) < len(permutation):
|
||||
i = permutation[len(patch_stack_indices)]
|
||||
original = patch_stack_patches[-1] if len(patch_stack_indices) else original_content
|
||||
patch_stack_patches.append(patchutils.apply_patch(original, selected_patches[i][1], fuzz=0))
|
||||
patch_stack_indices.append(i)
|
||||
output_hash = _sha256(patch_stack_patches[-1])
|
||||
|
||||
except patchutils.PatchApplyError:
|
||||
output_hash = None
|
||||
|
||||
cached_patch_result[input_hash] = output_hash
|
||||
yield output_hash
|
||||
|
||||
finally:
|
||||
# Ensure temporary files are cleaned up properly
|
||||
while len(patch_stack_patches):
|
||||
patch_stack_patches.pop().close()
|
||||
|
||||
# Show a progress bar while applying the patches - this task might take some time
|
||||
chunk_size = 20
|
||||
total_tasks = (math.factorial(len(indices)) + chunk_size - 1) / chunk_size
|
||||
with progressbar.ProgressBar(desc=filename, total=total_tasks) as progress:
|
||||
|
||||
failed_to_apply = False
|
||||
last_result_hash = None
|
||||
|
||||
# Check for possible ways to apply the patch
|
||||
it = _split_seq(causal_time_permutations(all_patches, indices), chunk_size)
|
||||
for output_hash in _merge_seq(pool.imap_unordered(lambda seq: list(_test_apply(seq)), it), \
|
||||
callback=progress.update):
|
||||
|
||||
# Failed to apply patch, continue checking the rest.
|
||||
if output_hash is None:
|
||||
failed_to_apply = True
|
||||
if last_result_hash is None:
|
||||
continue
|
||||
break
|
||||
|
||||
# No known hash yet, remember the result. If we failed applying before, we can stop now.
|
||||
elif last_result_hash is None:
|
||||
last_result_hash = output_hash
|
||||
if failed_to_apply: break
|
||||
|
||||
# Applied successful, but result has a different hash - also treat as failure.
|
||||
elif last_result_hash != output_hash:
|
||||
failed_to_apply = True
|
||||
break
|
||||
|
||||
if failed_to_apply:
|
||||
progress.finish("<failed to apply>")
|
||||
elif verbose:
|
||||
progress.finish(binascii.hexlify(last_result_hash))
|
||||
|
||||
finally:
|
||||
original_content.close()
|
||||
for _, (_, p) in selected_patches.iteritems():
|
||||
p.close()
|
||||
|
||||
# If something failed, then show the appropriate error message.
|
||||
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:
|
||||
raise PatchUpdaterError("Depending on the order some changes to file %s don'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 resolve_dependencies(all_patches, index):
|
||||
def resolve_dependencies(all_patches, index = None, depends = None):
|
||||
"""Returns a sorted list with all dependencies for a given patch."""
|
||||
|
||||
def _resolve(depends):
|
||||
for i in depends:
|
||||
# Check for disabled patch
|
||||
if all_patches[i].disabled:
|
||||
raise PatchUpdaterError("Encountered dependency on disabled patchset %s" % all_patches[i].name)
|
||||
# Dependencies already resolved
|
||||
if all_patches[i].verify_resolved > 0:
|
||||
continue
|
||||
# Detect circular dependency
|
||||
if all_patches[i].verify_resolved < 0:
|
||||
raise PatchUpdaterError("Circular dependency while trying to resolve dependencies of %s" % all_patches[index].name)
|
||||
raise PatchUpdaterError("Circular dependency while trying to resolve %s" % all_patches[i].name)
|
||||
|
||||
# Recusively resolve dependencies
|
||||
all_patches[i].verify_resolved = -1
|
||||
@@ -511,7 +381,9 @@ def resolve_dependencies(all_patches, index):
|
||||
patch.verify_resolved = 0
|
||||
|
||||
resolved = []
|
||||
_resolve(all_patches[index].depends)
|
||||
if depends is None:
|
||||
depends = all_patches[index].depends
|
||||
_resolve(depends)
|
||||
return resolved
|
||||
|
||||
def generate_ifdefined(all_patches):
|
||||
@@ -564,111 +436,148 @@ def generate_ifdefined(all_patches):
|
||||
assert p.modified_file in patch.modified_files
|
||||
patch.patches.append(p)
|
||||
|
||||
def verify_dependencies(all_patches):
|
||||
"""Resolve dependencies, and afterwards run verify_patch_order() to check if everything applies properly."""
|
||||
|
||||
def _load_patch_cache():
|
||||
"""Load dictionary for cached patch dependency tests."""
|
||||
global cached_patch_result
|
||||
cached_patch_result = _load_dict(config.path_depcache)
|
||||
|
||||
def _save_patch_cache():
|
||||
"""Save dictionary for cached patch dependency tests."""
|
||||
_save_dict(config.path_depcache, cached_patch_result.copy())
|
||||
|
||||
enabled_patches = dict([(i, patch) for i, patch in all_patches.iteritems() if not patch.disabled])
|
||||
max_patches = max(enabled_patches.keys()) + 1
|
||||
|
||||
for _, patch in enabled_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(enabled_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 (or disabled dependency) in set of patches: %s" %
|
||||
", ".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]
|
||||
def generate_script(all_patches):
|
||||
"""Resolve dependencies, and afterwards check if everything applies properly."""
|
||||
depends = sorted([i for i, patch in all_patches.iteritems() if not patch.disabled])
|
||||
resolved = resolve_dependencies(all_patches, depends=depends)
|
||||
max_patches = max(resolved) + 1
|
||||
|
||||
# Generate timestamps based on dependencies, still required for binary patches
|
||||
# Find out which files are modified by multiple patches
|
||||
modified_files = {}
|
||||
for i, patch in enabled_patches.iteritems():
|
||||
for i, patch in [(i, all_patches[i]) for i in resolved]:
|
||||
patch.verify_time = [0]*max_patches
|
||||
patch.verify_time[i] += 1
|
||||
for j in patch.depends:
|
||||
patch.verify_time = causal_time_combine(patch.verify_time, all_patches[j].verify_time)
|
||||
|
||||
for f in patch.modified_files:
|
||||
if f not in modified_files:
|
||||
modified_files[f] = []
|
||||
modified_files[f].append(i)
|
||||
|
||||
# Check if patches always apply correctly
|
||||
_load_patch_cache()
|
||||
pool = multiprocessing.pool.ThreadPool(processes=8)
|
||||
try:
|
||||
for f, indices in modified_files.iteritems():
|
||||
verify_patch_order(enabled_patches, indices, f, pool)
|
||||
finally:
|
||||
_save_patch_cache()
|
||||
pool.close()
|
||||
# Check dependencies
|
||||
for filename, indices in modified_files.iteritems():
|
||||
|
||||
def generate_makefile(all_patches):
|
||||
"""Generate Makefile for a specific set of patches."""
|
||||
# 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_any(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])))
|
||||
continue
|
||||
|
||||
with open(config.path_template_Makefile) as template_fp:
|
||||
original_content = get_wine_file(filename)
|
||||
selected_patches = select_patches(all_patches, indices, filename)
|
||||
|
||||
# Show a progress bar while applying the patches - this task might take some time
|
||||
with progressbar.ProgressBar(desc=filename, total=2 ** len(indices)) as progress:
|
||||
for k, bitstring in enumerate(itertools.product([0,1], repeat=len(indices))):
|
||||
progress.update(k)
|
||||
|
||||
set_apply = [(i, all_patches[i]) for u, i in zip(bitstring, indices) if u]
|
||||
set_skip = [(i, all_patches[i]) for u, i in zip(bitstring, indices) if not u]
|
||||
test_apply = True
|
||||
|
||||
# Check if there is any patch2 which depends directly or indirectly on patch1.
|
||||
# If this is the case we found an impossible situation, we can be skipped in this test.
|
||||
for i, patch1 in set_apply:
|
||||
for j, patch2 in set_skip:
|
||||
if causal_time_smaller(patch2.verify_time, patch1.verify_time):
|
||||
test_apply = False
|
||||
break
|
||||
if not test_apply:
|
||||
break
|
||||
|
||||
if test_apply:
|
||||
try:
|
||||
original = original_content
|
||||
for i, patch in set_apply:
|
||||
original = patchutils.apply_patch(original, selected_patches[i][1], fuzz=0)
|
||||
except patchutils.PatchApplyError:
|
||||
progress.finish("<failed to apply>")
|
||||
raise PatchUpdaterError("Changes to file %s don't apply: %s" %
|
||||
(filename, ", ".join([all_patches[i].name for i in indices])))
|
||||
|
||||
# Generate code for helper functions
|
||||
lines = []
|
||||
lines.append("# Enable or disable all patchsets\n")
|
||||
lines.append("patch_enable_all ()\n")
|
||||
lines.append("{\n")
|
||||
for i, patch in sorted([(i, all_patches[i]) for i in resolved], key=lambda x:x[1].name):
|
||||
patch.variable = "enable_%s" % patch.name.replace("-","_")
|
||||
lines.append("\t%s=\"$1\"\n" % patch.variable)
|
||||
lines.append("}\n")
|
||||
lines.append("\n")
|
||||
lines.append("# Enable or disable a specific patchset\n")
|
||||
lines.append("patch_enable ()\n")
|
||||
lines.append("{\n")
|
||||
lines.append("\tcase \"$1\" in\n")
|
||||
for i, patch in sorted([(i, all_patches[i]) for i in resolved], key=lambda x:x[1].name):
|
||||
lines.append("\t\t%s)\n" % patch.name)
|
||||
lines.append("\t\t\t%s=\"$2\"\n" % patch.variable)
|
||||
lines.append("\t\t\t;;\n")
|
||||
lines.append("\t\t*)\n")
|
||||
lines.append("\t\t\treturn 1\n")
|
||||
lines.append("\t\t\t;;\n")
|
||||
lines.append("\tesac\n")
|
||||
lines.append("\treturn 0\n")
|
||||
lines.append("}\n")
|
||||
lines_helpers = lines
|
||||
|
||||
# Generate code for dependency resolver
|
||||
lines = []
|
||||
for i, patch in [(i, all_patches[i]) for i in reversed(resolved)]:
|
||||
if len(patch.depends):
|
||||
lines.append("if test \"$%s\" -eq 1; then\n" % patch.variable)
|
||||
for j in sorted(patch.depends):
|
||||
lines.append("\tif test \"$%s\" -gt 1; then\n" % all_patches[j].variable)
|
||||
lines.append("\t\tabort \"Patchset %s disabled, but %s depends on that.\"\n" %
|
||||
(all_patches[j].name, patch.name))
|
||||
lines.append("\tfi\n")
|
||||
for j in sorted(patch.depends):
|
||||
lines.append("\t%s=1\n" % all_patches[j].variable)
|
||||
lines.append("fi\n\n")
|
||||
lines_resolver = lines
|
||||
|
||||
# Generate code for applying all patchsets
|
||||
lines = []
|
||||
for i, patch in [(i, all_patches[i]) for i in resolved]:
|
||||
lines.append("# Patchset %s\n" % patch.name)
|
||||
lines.append("# |\n")
|
||||
|
||||
# List all bugs fixed by this patchset
|
||||
if any([bugid is not None for bugid, bugname in patch.fixes]):
|
||||
lines.append("# | This patchset fixes the following Wine bugs:\n")
|
||||
for bugid, bugname in patch.fixes:
|
||||
if bugid is not None:
|
||||
lines.append("# | *\t%s\n" % "\n# | \t".join(textwrap.wrap("[#%d] %s" % (bugid, bugname), 120)))
|
||||
lines.append("# |\n")
|
||||
|
||||
# List all modified files
|
||||
lines.append("# | Modified files:\n")
|
||||
lines.append("# | *\t%s\n" % "\n# | \t".join(textwrap.wrap(", ".join(sorted(patch.modified_files)), 120)))
|
||||
lines.append("# |\n")
|
||||
lines.append("if test \"$%s\" -eq 1; then\n" % patch.variable)
|
||||
for f in patch.files:
|
||||
lines.append("\tpatch_apply %s\n" % os.path.join(patch.name, f))
|
||||
if len(patch.patches):
|
||||
lines.append("\t(\n")
|
||||
for p in _unique(patch.patches, key=lambda p: (p.patch_author, p.patch_subject, p.patch_revision)):
|
||||
lines.append("\t\techo '+ { \"%s\", \"%s\", %d },';\n" %
|
||||
(_escape(p.patch_author), _escape(p.patch_subject), p.patch_revision))
|
||||
lines.append("\t) >> \"$patchlist\"\n")
|
||||
lines.append("fi\n\n")
|
||||
lines_apply = lines
|
||||
|
||||
with open(config.path_template_script) as template_fp:
|
||||
template = template_fp.read()
|
||||
|
||||
with open(config.path_Makefile, "w") as fp:
|
||||
fp.write(template.format(patchlist="\t" + " \\\n\t".join(
|
||||
["%s.ok" % patch.name for _, patch in all_patches.iteritems() if not patch.disabled])))
|
||||
|
||||
for _, patch in all_patches.iteritems():
|
||||
fp.write("# Patchset %s\n" % patch.name)
|
||||
fp.write("# |\n")
|
||||
|
||||
# List all bugs fixed by this patchset
|
||||
if any([bugid is not None for bugid, bugname in patch.fixes]):
|
||||
fp.write("# | This patchset fixes the following Wine bugs:\n")
|
||||
for bugid, bugname 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
|
||||
fp.write(".INTERMEDIATE: %s.ok\n" % patch.name)
|
||||
depends = " ".join([""] + sorted(["%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$(call APPLY_FILE,%s)\n" % os.path.join(patch.name, f))
|
||||
|
||||
# Create *.ok file (used to generate patchlist)
|
||||
if len(patch.patches):
|
||||
fp.write("\t@( \\\n")
|
||||
for p in _unique(patch.patches, key=lambda p: (p.patch_author, p.patch_subject, p.patch_revision)):
|
||||
fp.write("\t\techo '+ { \"%s\", \"%s\", %d },'; \\\n" % \
|
||||
(_escape(p.patch_author), _escape(p.patch_subject), p.patch_revision))
|
||||
fp.write("\t) > %s.ok\n" % patch.name)
|
||||
else:
|
||||
fp.write("\ttouch %s.ok\n" % patch.name)
|
||||
fp.write("\n");
|
||||
with open(config.path_script, "w") as fp:
|
||||
fp.write(template.format(patch_helpers="".join(lines_helpers).rstrip("\n"),
|
||||
patch_resolver="".join(lines_resolver).rstrip("\n"),
|
||||
patch_apply="".join(lines_apply).rstrip("\n")))
|
||||
|
||||
# Add changes to git
|
||||
subprocess.call(["git", "add", config.path_Makefile])
|
||||
subprocess.call(["git", "add", config.path_script])
|
||||
|
||||
def generate_markdown(all_patches, stable_patches, stable_compholio_version):
|
||||
"""Generate README.md including information about specific patches and bugfixes."""
|
||||
@@ -731,9 +640,8 @@ def generate_markdown(all_patches, stable_patches, stable_compholio_version):
|
||||
subprocess.call(["git", "add", config.path_README_md])
|
||||
|
||||
if __name__ == "__main__":
|
||||
verbose = "-v" in sys.argv[1:]
|
||||
|
||||
# Hack to avoid KeyboardInterrupts on worker threads
|
||||
# Hack to avoid KeyboardInterrupts on different threads
|
||||
def _sig_int(signum=None, frame=None):
|
||||
signal.signal(signal.SIGINT, signal.SIG_IGN)
|
||||
raise RuntimeError("CTRL+C pressed")
|
||||
@@ -749,14 +657,8 @@ if __name__ == "__main__":
|
||||
all_patches = read_patchset()
|
||||
stable_patches = read_patchset(revision="v%s" % stable_compholio_version)
|
||||
|
||||
# Update autogenerated ifdefined patches
|
||||
generate_ifdefined(all_patches)
|
||||
|
||||
# Check dependencies
|
||||
verify_dependencies(all_patches)
|
||||
|
||||
# Update Makefile and README.md
|
||||
generate_makefile(all_patches)
|
||||
generate_script(all_patches)
|
||||
generate_markdown(all_patches, stable_patches, stable_compholio_version)
|
||||
|
||||
except PatchUpdaterError as e:
|
||||
|
4
debian/wine-compholio-amd64.install
vendored
4
debian/wine-compholio-amd64.install
vendored
@@ -1,4 +0,0 @@
|
||||
/opt/wine-compholio/lib64/libwine.so*
|
||||
/opt/wine-compholio/lib64/wine
|
||||
/opt/wine-compholio/bin/wine64
|
||||
/opt/wine-compholio/bin/wine64-preloader
|
1
debian/wine-compholio-dev.install
vendored
1
debian/wine-compholio-dev.install
vendored
@@ -1 +0,0 @@
|
||||
/opt/wine-compholio/include
|
4
debian/wine-compholio-i386.install
vendored
4
debian/wine-compholio-i386.install
vendored
@@ -1,4 +0,0 @@
|
||||
/opt/wine-compholio/lib/libwine.so*
|
||||
/opt/wine-compholio/lib/wine
|
||||
/opt/wine-compholio/bin/wine
|
||||
/opt/wine-compholio/bin/wine-preloader
|
6
debian/wine-compholio.docs
vendored
6
debian/wine-compholio.docs
vendored
@@ -1,6 +0,0 @@
|
||||
documentation/README.*
|
||||
ANNOUNCE
|
||||
AUTHORS
|
||||
LICENSE.wine
|
||||
LICENSE.wine-compholio
|
||||
README
|
2
debian/wine-compholio.install
vendored
2
debian/wine-compholio.install
vendored
@@ -1,2 +0,0 @@
|
||||
/opt/wine-compholio/bin
|
||||
/opt/wine-compholio/share
|
4
debian/wine-staging-amd64.install
vendored
Normal file
4
debian/wine-staging-amd64.install
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/opt/wine-staging/lib64/libwine.so*
|
||||
/opt/wine-staging/lib64/wine
|
||||
/opt/wine-staging/bin/wine64
|
||||
/opt/wine-staging/bin/wine64-preloader
|
1
debian/wine-staging-dev.install
vendored
Normal file
1
debian/wine-staging-dev.install
vendored
Normal file
@@ -0,0 +1 @@
|
||||
/opt/wine-staging/include
|
4
debian/wine-staging-i386.install
vendored
Normal file
4
debian/wine-staging-i386.install
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/opt/wine-staging/lib/libwine.so*
|
||||
/opt/wine-staging/lib/wine
|
||||
/opt/wine-staging/bin/wine
|
||||
/opt/wine-staging/bin/wine-preloader
|
9
debian/wine-staging.docs
vendored
Normal file
9
debian/wine-staging.docs
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
documentation/README.*
|
||||
ANNOUNCE
|
||||
AUTHORS
|
||||
LICENSE
|
||||
COPYING.LIB
|
||||
COPYING.arial
|
||||
COPYING.cour
|
||||
COPYING.msyh
|
||||
README
|
2
debian/wine-staging.install
vendored
Normal file
2
debian/wine-staging.install
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/opt/wine-staging/bin
|
||||
/opt/wine-staging/share
|
2587
patches/Makefile
2587
patches/Makefile
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user