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
255 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
87684b59a7 | ||
|
7e72d7770d | ||
|
73da458bc5 | ||
|
e12216c644 | ||
|
2ec0d480e3 | ||
|
c9bed78b65 | ||
|
7a419c031a | ||
|
723bc23e50 | ||
|
dc05c7f163 | ||
|
972842c50e | ||
|
f9c1ebaa12 | ||
|
2789fdcece | ||
|
1637f56db9 | ||
|
c501f9328f | ||
|
917b9ce280 | ||
|
82d94a776d | ||
|
75c5402c30 | ||
|
a9b0616fc8 | ||
|
ed7e1530b5 | ||
|
693e4d185b | ||
|
3a5f2b6be0 | ||
|
7641fa58b9 | ||
|
4b062e3f22 | ||
|
de353ee024 | ||
|
513952a066 | ||
|
78784bf5d3 | ||
|
f5cb09e9a4 | ||
|
c9da32b6b0 | ||
|
5eae92bf33 | ||
|
c3920efc17 | ||
|
475485ce5b | ||
|
d7bdce7fb6 | ||
|
e5b7f0c052 | ||
|
03554ec52b | ||
|
b0f0338a95 | ||
|
8308e3a332 | ||
|
a5bc6762f1 | ||
|
90d7c40949 | ||
|
52263be2fe | ||
|
1aa8b412df | ||
|
1ec6f34853 | ||
|
c213417376 | ||
|
393eed4e68 | ||
|
11f1207852 | ||
|
a05b7dc368 | ||
|
8d9d2558c9 | ||
|
f6dd7940f0 | ||
|
14ae97f5a2 | ||
|
677a246d22 | ||
|
6cc9038091 | ||
|
653547070d | ||
|
fdd2f4a7f3 | ||
|
1c01fe44d7 | ||
|
2c0583d002 | ||
|
a691cec6e7 | ||
|
f66b06739e | ||
|
92fc5f6141 | ||
|
d260e9e7c4 | ||
|
d0d310a271 | ||
|
305af53597 | ||
|
f09106e8c4 | ||
|
775e8675c1 | ||
|
463d01d3aa | ||
|
5a51c64426 | ||
|
7c793eb695 | ||
|
25e56dc257 | ||
|
749fc944fc | ||
|
9c556a5905 | ||
|
61769b2227 | ||
|
212f94bb9f | ||
|
514e29e7dc | ||
|
9414a2da0a | ||
|
3cf93b92fc | ||
|
35adc2a6f7 | ||
|
5661a76f20 | ||
|
953163c6ff | ||
|
7e6191a4cd | ||
|
621ece3c6f | ||
|
9c9639f3ae | ||
|
ade7c1e886 | ||
|
26699042ab | ||
|
1349af11e7 | ||
|
ca7325e83a | ||
|
3dd8fd35af | ||
|
cc459b2b4f | ||
|
aa07c4b087 | ||
|
79d612a5ad | ||
|
c554fa8396 | ||
|
2dcb4d2c27 | ||
|
4410ccbead | ||
|
2f5a9b7ba1 | ||
|
f9c393b4a8 | ||
|
4934857730 | ||
|
021356ceb0 | ||
|
6c4eb0bb53 | ||
|
36dafc95aa | ||
|
475489c79c | ||
|
110924352c | ||
|
09cb0884c5 | ||
|
07f9996abc | ||
|
d3d40b651b | ||
|
e63ff1be87 | ||
|
8cd730631b | ||
|
500d83235b | ||
|
971d304a1f | ||
|
6e3502a34b | ||
|
6039fad49e | ||
|
b7668e1d7a | ||
|
291d4468f7 | ||
|
34cab4fddf | ||
|
5a35178f86 | ||
|
71db25dc7d | ||
|
b757d6fe5c | ||
|
7336108ab8 | ||
|
90c872c5fe | ||
|
8a1c3d4d46 | ||
|
9e2db30661 | ||
|
18657270f8 | ||
|
414b6059ba | ||
|
90cccc00fb | ||
|
e8e7e9c09b | ||
|
1cbbc802af | ||
|
f0a3c3c2f4 | ||
|
ac0b4fe1ac | ||
|
69db736c0c | ||
|
413b5ee73f | ||
|
04467e7e68 | ||
|
5ee11fd2d6 | ||
|
6c9d5534cb | ||
|
014eb110f1 | ||
|
5ce94e4f43 | ||
|
9fb8420891 | ||
|
aada22c826 | ||
|
9efec7af28 | ||
|
b165863a60 | ||
|
4164b920d2 | ||
|
f8f2f10751 | ||
|
7787c66cc7 | ||
|
541cc8d086 | ||
|
05fbac8c95 | ||
|
e4d758a10b | ||
|
35bcebd562 | ||
|
e273769702 | ||
|
7f43d57d01 | ||
|
b585bfb7f4 | ||
|
6a19f586ea | ||
|
8634ed8ea4 | ||
|
339e6431d0 | ||
|
aaf0c7d2dc | ||
|
2616a89d50 | ||
|
4f5b5fa483 | ||
|
c4b33f044e | ||
|
f2f8ea98c5 | ||
|
fb86960b4f | ||
|
108cd9f304 | ||
|
7a36c29ef4 | ||
|
f062a5a3ba | ||
|
fa52b6489a | ||
|
e8107fe104 | ||
|
b4642f5151 | ||
|
e9da761795 | ||
|
acacbd588d | ||
|
ed22aea5bd | ||
|
6a81960f7a | ||
|
8fbca5cb69 | ||
|
97d1e27035 | ||
|
626c7fccd7 | ||
|
9882020ee6 | ||
|
7b26c74d54 | ||
|
a9a8b351ea | ||
|
d8de3eb6fa | ||
|
a5250a0fc4 | ||
|
7dae05d4de | ||
|
d35ca29434 | ||
|
4aabc285b9 | ||
|
421dcf31d5 | ||
|
2f26c3d624 | ||
|
f43cf8d682 | ||
|
68a575f319 | ||
|
c8164d802d | ||
|
d8aaa94042 | ||
|
297a301f35 | ||
|
0f73278955 | ||
|
299a2daeac | ||
|
969e9d5583 | ||
|
312800fa66 | ||
|
943405c277 | ||
|
d874e1323d | ||
|
773df03830 | ||
|
c5f802363f | ||
|
6aecd5a407 | ||
|
42f18b7237 | ||
|
4fb2477927 | ||
|
5ba46f55f2 | ||
|
774f0634ba | ||
|
797ead4b3c | ||
|
9a4a7e1cb3 | ||
|
6053bea2da | ||
|
c83e83b911 | ||
|
aaf6e38a98 | ||
|
b33ea6c233 | ||
|
f5abff47fb | ||
|
1a5b602120 | ||
|
7b90cca3d7 | ||
|
6bca298771 | ||
|
ba1bf62faa | ||
|
1598a4326e | ||
|
baae7829ff | ||
|
41b4bc29a0 | ||
|
1d0979cb9b | ||
|
b91cca8e61 | ||
|
130fbbe654 | ||
|
e536c2d707 | ||
|
6c26951aae | ||
|
cc1c1f12ae | ||
|
b1a5dfb1f7 | ||
|
3cd7f91608 | ||
|
752393bbe3 | ||
|
4c094dc57d | ||
|
5cab0e1b8f | ||
|
819a738d3d | ||
|
4caa3f834f | ||
|
749bdd1781 | ||
|
a118c9b4bd | ||
|
b0f0c3ea9f | ||
|
e272c49cd8 | ||
|
c51df83deb | ||
|
c45a17079d | ||
|
faf78575ac | ||
|
027b85ed1b | ||
|
9b303a4f82 | ||
|
4ff0b53021 | ||
|
04d674d9b6 | ||
|
e91e2daca4 | ||
|
ece1d51745 | ||
|
125673271d | ||
|
da7d2715d3 | ||
|
e2f635a164 | ||
|
9e6408add9 | ||
|
f6566f892d | ||
|
9c80cd53f9 | ||
|
f4e3d72fc1 | ||
|
15a19d27fc | ||
|
a8f3f9c4e4 | ||
|
3246faa114 | ||
|
4e4a8b7d32 | ||
|
cf5a6bdbf3 | ||
|
7e7a3881c4 | ||
|
023b7bd4cb | ||
|
ff169cd1b7 | ||
|
5f93d74102 | ||
|
ce3f41cee9 | ||
|
d447778cfb | ||
|
6fa663e823 | ||
|
fa92b283ed |
30
DEVELOPER.md
30
DEVELOPER.md
@@ -2,16 +2,16 @@ Developers and maintainers guide
|
||||
================================
|
||||
|
||||
This document will provide some information targeted at developers, who
|
||||
either want to build/package Wine-Compholio for their distribution, but also
|
||||
for developers who would like to contribute their patches to Wine-Compholio,
|
||||
either want to build/package Wine Staging for their distribution, but also
|
||||
for developers who would like to contribute their patches to Wine Staging,
|
||||
to get them included in future releases.
|
||||
|
||||
|
||||
|
||||
Compiling Wine-Compholio
|
||||
========================
|
||||
Compiling Wine Staging
|
||||
======================
|
||||
|
||||
**Warning:** Please note that starting with Wine-Compholio 1.7.23 it is
|
||||
**Warning:** Please note that starting with Staging 1.7.23 it is
|
||||
deprecated to manually apply patches without using the Makefile. To avoid
|
||||
typical pitfalls for package maintainers (like trying to use the patch
|
||||
commandline utility for binary patches or not updating the patchlist) it is
|
||||
@@ -26,21 +26,21 @@ Instructions
|
||||
|
||||
The following instructions (based on the [Gentoo
|
||||
Wiki](https://wiki.gentoo.org/wiki/Netflix/Pipelight#Compiling_manually))
|
||||
will give a short overview how to compile Wine-Compholio, but of course not
|
||||
will give a short overview how to compile Wine Staging, but of course not
|
||||
explain all details. Make sure to install all required Wine dependencies
|
||||
before proceeding.
|
||||
|
||||
As the first step please grab the latest Wine source:
|
||||
```bash
|
||||
wget http://prdownloads.sourceforge.net/wine/wine-1.7.25.tar.bz2
|
||||
wget https://github.com/compholio/wine-compholio-daily/archive/v1.7.25.tar.gz
|
||||
wget http://prdownloads.sourceforge.net/wine/wine-1.7.31.tar.bz2
|
||||
wget https://github.com/wine-compholio/wine-staging/archive/v1.7.31.tar.gz
|
||||
```
|
||||
|
||||
Extract the archives:
|
||||
```bash
|
||||
tar xvjf wine-1*.tar.bz2
|
||||
cd wine-1*
|
||||
tar xvzf ../v1.7.25.tar.gz --strip-components 1
|
||||
tar xvzf ../v1.7.31.tar.gz --strip-components 1
|
||||
```
|
||||
|
||||
And apply the patches:
|
||||
@@ -49,7 +49,7 @@ make -C ./patches DESTDIR=$(pwd) install
|
||||
```
|
||||
|
||||
Afterwards run configure (you can also specify a prefix if you don't want to install
|
||||
Wine-Compholio system-wide):
|
||||
Wine Staging system-wide):
|
||||
```bash
|
||||
./configure --with-xattr
|
||||
```
|
||||
@@ -93,11 +93,11 @@ make -C ./patches DESTDIR=$(pwd) PATCHLIST="DIRNAME1.ok DIRNAME2.ok" install
|
||||
```
|
||||
|
||||
|
||||
Contributing to Wine-Compholio
|
||||
==============================
|
||||
Contributing to Wine Staging
|
||||
============================
|
||||
|
||||
Please note that Wine-Compholio is not just an arbitrary collection of Wine
|
||||
patches. We see Wine-Compholio as a **testing version** in preparation for
|
||||
Please note that Wine Staging is not just an arbitrary collection of Wine
|
||||
patches. We see Wine Staging as a **testing version** in preparation for
|
||||
patches to be submitted to upstream Wine. This implies that all patches should
|
||||
at least have a minimum standard quality. Unlike some other PPAs/AURs which
|
||||
provide heavily patched Wine versions, we will not accept hacks for very
|
||||
@@ -126,7 +126,7 @@ for upstream Wine.
|
||||
Attribution guidelines
|
||||
----------------------
|
||||
|
||||
The Wine "Compholio" Edition repository expects all patches to conform to
|
||||
The Wine Staging repository expects all patches to conform to
|
||||
Wine's (undocumented) attribution guidelines. There are a variety of ways
|
||||
to attribute patches, but they all involve an additional line to the patch
|
||||
subject:
|
||||
|
12
LICENSE.md
12
LICENSE.md
@@ -1,15 +1,15 @@
|
||||
Wine-Compholio license
|
||||
======================
|
||||
Wine Staging license
|
||||
====================
|
||||
|
||||
**Note:** Some files in this repository are provided under a different license.
|
||||
Please check the list of exceptions below. Unless stated otherwise all files
|
||||
are part of **Wine-Compholio** and are licensed under the terms of the
|
||||
are part of **Wine Staging** and are licensed under the terms of the
|
||||
[LGPLv2.1](#gnu-lgpl-version-21), to stay compatible with Wine:
|
||||
|
||||
```
|
||||
Copyright (C) 2014 the Wine-Compholio project authors.
|
||||
Copyright (C) 2014 the Wine Staging project authors.
|
||||
|
||||
Wine-Compholio is free software; you can redistribute it and/or
|
||||
Wine Staging 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.
|
||||
@@ -26,7 +26,7 @@ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
### Exceptions
|
||||
|
||||
The following files are not part of Wine-Compholio and provided under a
|
||||
The following files are not part of Wine Staging and provided under a
|
||||
different license. These files are not linked to the rest of the project in
|
||||
any way and are simply installed for end-user convenience.
|
||||
|
||||
|
147
debian/changelog
vendored
147
debian/changelog
vendored
@@ -1,3 +1,149 @@
|
||||
wine-compholio (1.7.31) unstable; urgency=low
|
||||
* Improve output of 'wine --patches' and simplify syntax of definition files.
|
||||
* Update kernel32-GetSystemTimes patches.
|
||||
* Improve style for ntdll-Fix_Alignment patches.
|
||||
* Added possibility to temporarily disable patches to patch system.
|
||||
* Added patch to allow selecting specific audio device for PulseAudio backend.
|
||||
* Added patch with stub for NtSetLdtEntries/ZwSetLdtEntries.
|
||||
* Added patch to prevent processing message events for CoWaitForMultipleHandles when APC calls are queued.
|
||||
* Added patch with stub for KeSetSystemAffinityThread.
|
||||
* Added patch to implement DXTn support for d3dx9_36.
|
||||
* Added patch to return correct values for GetThreadTimes.
|
||||
* Added patch to align texture dimensions to block size for compressed textures.
|
||||
* Added patch with stub for IoCsqInitialize.
|
||||
* Added patch with stubs for vectored continue handler functions.
|
||||
* Added patch to fix wglDescribePixelFormat when NULL is passed as pixel format descriptor.
|
||||
* Added patch to allow NULL pointer for optional arguments of D3DXIntersectTri.
|
||||
* Added patch to fix crash of winedevice when relocation entry crosses page boundary.
|
||||
* Added patch to emulate 'mov Eb, Gb' instruction on x86 processor architecture.
|
||||
* Added patch to emulate access to KI_USER_SHARED_DATA kernel page on x86_64.
|
||||
* Added patch to initialize irp.Tail.Overlay.OriginalFileObject with stub file object.
|
||||
* Added patch to implement emulation of SIDT instruction when using Exagear.
|
||||
* Added patch to return more context attributes in schan_InitializeSecurityContextW.
|
||||
* Added patch to avoid crashing when broken app tries to release surface although refcount is zero.
|
||||
* Added patch to avoid sending window messages in FindWindowExW.
|
||||
* Added patch to fix handling of invert_y in DrawTextExW.
|
||||
* Added patch to fix implementation of K32GetPerformanceInfo.
|
||||
* Added patch to close server fd if there is no space in thread inflight fd list.
|
||||
* Added patch to avoid failing in d3dx9_mesh_OptimizeInplace because of unimplemented vertex reordering.
|
||||
* Added patch to workaround bugs in CompareStringW (triggered by Adobe Flash).
|
||||
* Removed patch for iphlpapi stub functions (accepted upstream).
|
||||
* Removed patches for FindFirstFileExW (accepted upstream).
|
||||
* Removed patches for TLB dependencies lookup in resources (accepted upstream).
|
||||
* Removed patches for ws2_32.inet_pton implementation (fixed upstream).
|
||||
* Removed patch to update properties when applying MSI transforms (fixed upstream).
|
||||
* Removed patch to silence repeated GSUB_apply_ChainContext[Subst|Pos] FIXMEs (accepted upstream).
|
||||
* Removed patch with additional tests for MsgWaitForMultipleObjectsEx (accepted upstream).
|
||||
* Removed patches for D3DXCreatePolygon (accepted upstream).
|
||||
* Removed patches vor vectored continue handler stubs (accepted upstream).
|
||||
* Removed patches for K32GetPerformanceInfo (accepted upstream).
|
||||
* Removed patch for D3DXIntersectTri (accepted upstream).
|
||||
* Partially removed patches for UTF-7 tests (accepted upstream).
|
||||
* Partially removed patches for WS_SO_CONNECT_TIME (accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sat, 15 Nov 2014 15:36:38 +0100
|
||||
|
||||
wine-compholio (1.7.30) unstable; urgency=low
|
||||
* Fix wrong escaping of quote/slash characters in patchupdater script.
|
||||
* Added additional conversion functions to DXTn patch.
|
||||
* Added patch to filter specific warning messages for D3DCompileShader.
|
||||
* Added patch to implement iphlpapi stub functions.
|
||||
* Added patch to implement support for pasting HTML from native Unix applications.
|
||||
* Added patch to implement RtlDecompressBuffer.
|
||||
* Added patch to emulate write to CR4 register.
|
||||
* Added patch for implementation of GdipCreateRegionRgnData.
|
||||
* Added patch for implementation of D3DXCreatePolygon.
|
||||
* Added patch for TLB dependencies lookup in resources.
|
||||
* Added patch to update ProductVersion when applying MSI transforms.
|
||||
* Added patch for ITextSelection_fnGetDuplicate implementation.
|
||||
* Removed patch to avoid Clang compiler warning because of unused Vtable (accepted upstream).
|
||||
* Removed patch for additional ATL thunks (accepted upstream).
|
||||
* Removed patch to Ămplement IRichEditOle and ITextDocument support for ITextServices (accepted upstream).
|
||||
* Removed patch to fix compile errors on Archlinux (fixed upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sun, 02 Nov 2014 00:45:28 +0100
|
||||
|
||||
wine-compholio (1.7.29) unstable; urgency=low
|
||||
* Updated DOS Attributes patch to better detect XATTR functions.
|
||||
* Updated patch for shell32 default folder ACLs.
|
||||
* Updated NtQuerySection patch.
|
||||
* Updated patch for WRITECOPY memory protection.
|
||||
* Added patch to support IDF_CHECKFIRST in SetupPromptForDisk.
|
||||
* Added patch to fix issues when executing pages with guard page / write watch permissions.
|
||||
* Added patch to set return value of basic_string_wchar_dtor to return NULL.
|
||||
* Added patch for UTF7 encoding/decoding support.
|
||||
* Added patch to implement ID3DXSkinInfoImpl_UpdateSkinnedMesh.
|
||||
* Added patch for implementation of D3DXGetShaderInputSemantics.
|
||||
* Added patch to ensure tests check exact return value of ParseURLFromOutsideSourceX.
|
||||
* Added patch for additional ATL thunks.
|
||||
* Added patch to add partially support for sessionStorage.
|
||||
* Added patch for implementation of GetNumaProcessorNode.
|
||||
* Added patch for wine64 support on FreeBSD/PC-BSD.
|
||||
* Added patch for improved multi monitor support.
|
||||
* Added patch for implementation of BindImageEx.
|
||||
* Removed patch to fix issues with drag image in ImageLists (accepted upstream).
|
||||
* Removed patch to set ldr.EntryPoint for main executable (accepted upstream).
|
||||
* Removed patch to implement stubs for [Get|Set]SystemFileCacheSize (accepted upstream).
|
||||
* Removed patches for ATL thunk implementation (accepted upstream).
|
||||
* Partially removed patches for WRITECOPY memory protection (accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sun, 19 Oct 2014 19:37:21 +0200
|
||||
|
||||
wine-compholio (1.7.28) unstable; urgency=low
|
||||
* Added missing recommendation for libtxc-dxtn-s2tc0 on Ubuntu.
|
||||
* Added patch to fix issues with over-the-spot input method.
|
||||
* Added patch to fix winemenubuilder desktop icon wine path (when using multiple wine versions).
|
||||
* Added patch to support FIND_FIRST_EX_CASE_SENSITIVE flag in FindFirstFileExW.
|
||||
* Added patch to send WM_PAINT event during dialog creation.
|
||||
* Added patch to fix issues when driver dispatch routine returns different status codes.
|
||||
* Added several patches for Unity3D Editor.
|
||||
* Added patch to fix differences between exception handling behaviour in Wine and Windows.
|
||||
* Added patch to export ?_BADOFF@std@@3_JB on both i386 and win64.
|
||||
* Added patch to limit cross thread access to ImmSet* functions.
|
||||
* Added patch for IRichEditOle and ITextDocument support for ITextServices.
|
||||
* Added patch to fix implementation of SH*Shared commands.
|
||||
* Added patch to handle WRITECOPY memory protection properly on i386 (disabled by default).
|
||||
* Added patch to fix some issues with write watches / guard page access.
|
||||
* Added patch to implement NtQuerySection.
|
||||
* Added patches to make clearly visible, that this is a patched wine version.
|
||||
* Added patch for FindFirstFileExW level FindExInfoBasic.
|
||||
* Removed patch to support FIND_FIRST_EX_CASE_SENSITIVE flag in FindFirstFileExW (accepted upstream).
|
||||
* Removed patch to fix implementation of SH*Shared commands (accepted upstream).
|
||||
* Removed patch to export ?_BADOFF@std@@3_JB on both i386 and win64 (accepted upstream).
|
||||
* Partially removed patches for CreateProcess ACLs (accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sat, 04 Oct 2014 04:36:22 +0200
|
||||
|
||||
wine-compholio (1.7.27) unstable; urgency=low
|
||||
* Fixed some issues in the patches for GetSystemTimes.
|
||||
* Added patch to support FIND_FIRST_EX_LARGE_FETCH flag in FindFirstFileExW.
|
||||
* Added patch to fix deadlock caused by incorrect wrapper of glu polygon/contour function.
|
||||
* Added patch to avoid filling out KdHelp for usermode applications.
|
||||
* Added patch to silence repeated GSUB_apply_ChainContext[Subst|Pos] FIXMEs.
|
||||
* Added patch to revert wined3d pixelformat changes (causes regression in many games).
|
||||
* Added patch to implement software decoding/encoding of DXT1 textures.
|
||||
* Removed patch to use assembly wrapper for TLS callbacks (accepted upstream).
|
||||
* Removed patch to fix uninitialized cch struct member in GetMenuItemInfo (accepted upstream).
|
||||
* Removed some patches for riched20/IText*-interface (accepted upstream).
|
||||
* Removed patch to fix deadlock caused by incorrect wrapper of glu functions (accepted upstream).
|
||||
* Removed patch for stub of BCryptGetFipsAlgorithmMode (accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sat, 20 Sep 2014 05:52:23 +0200
|
||||
|
||||
wine-compholio (1.7.26) unstable; urgency=low
|
||||
* Added new make targets 'series' and 'install-git'.
|
||||
* Some improvements in the patch system scripts.
|
||||
* Fixed issues in the winepulse configure script.
|
||||
* Fixed some issues in patches for Inherited ACLs.
|
||||
* Fixed some issues in patches for backwards compatibility with old ACL format.
|
||||
* Added patch to fix unintentional leaks with ntdll internals.
|
||||
* Added patch to add support for DOS hidden/system file attributes.
|
||||
* Added patch to use dynamic linking for libpcap.
|
||||
* Added patch to fix issues when using setcap on wine executable.
|
||||
* Added patch to improve heap allocation performance by using more freelists.
|
||||
* Added patch to fix detection of ncurses on Archlinux (avoids ugly workarounds at build time).
|
||||
* Added patch to fix detection of gnutls on Ubuntu 14.10.
|
||||
* Added patch to use assembly wrapper for TLS callbacks.
|
||||
* Added patch to fix uninitialized cch struct member in GetMenuItemInfo.
|
||||
* Removed patch to fix issue with msi/ITERATE_MoveFiles (accepted upstream).
|
||||
* Removed patch to fix detection of ncurses on Archlinux (accepted upstream).
|
||||
-- Sebastian Lackner <sebastian@fds-team.de> Sun, 07 Sep 2014 23:50:25 +0200
|
||||
|
||||
wine-compholio (1.7.25) unstable; urgency=low
|
||||
* Improve generation of README.md on patch update.
|
||||
* Updated patches for riched20 IText* Interface.
|
||||
@@ -6,6 +152,7 @@ wine-compholio (1.7.25) unstable; urgency=low
|
||||
* Fixed issue with gitapply.sh script on Gentoo systems.
|
||||
* Added patch with stub for DwmInvalidateIconicBitmaps.
|
||||
* Added Courier Prime (OFLv1.1) as a Courier New replacement.
|
||||
* Added patch to implement DOS hidden/system file attributes.
|
||||
* Added patch to better detect broken nVidia RandR 1.2 support.
|
||||
* Added patch to set linker version in PE header.
|
||||
* Added patch to move NtProtectVirtualMemory and NtCreateSection to separate pages.
|
||||
|
25
debian/control
vendored
25
debian/control
vendored
@@ -46,6 +46,7 @@ Build-Depends: autotools-dev,
|
||||
libssl-dev,
|
||||
libstdc++6-4.5-dev | libstdc++-dev,
|
||||
libtiff5-dev | libtiff4-dev | libtiff-dev,
|
||||
libtxc-dxtn-s2tc-dev,
|
||||
libv4l-dev,
|
||||
libx11-dev,
|
||||
libxcomposite-dev,
|
||||
@@ -86,11 +87,13 @@ Recommends: libcapi20-3,
|
||||
libjpeg8,
|
||||
libopenal1 (>= 1:1.12),
|
||||
libosmesa6,
|
||||
libpcap0.8,
|
||||
libpng12-0,
|
||||
libpulse0,
|
||||
libsane,
|
||||
libssl1.0.0,
|
||||
libtiff5 | libtiff4,
|
||||
libtxc-dxtn-s2tc0,
|
||||
libv4l-0,
|
||||
libxcomposite1,
|
||||
libxcursor1,
|
||||
@@ -109,10 +112,6 @@ 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
|
||||
with patches representing my current staging tree for Wine.
|
||||
Currently these patches fix:
|
||||
* Netflix on Firefox hangs with loading bar at 100% (Bug 31993).
|
||||
* Netflix on Firefox fails with Internet Connection Problem when loading bar is
|
||||
at 99% (Bug 31858).
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
Wine is a compatibility layer for running Windows applications on Linux.
|
||||
@@ -144,11 +143,13 @@ Recommends: libcapi20-3,
|
||||
libjpeg8,
|
||||
libopenal1 (>= 1:1.12),
|
||||
libosmesa6,
|
||||
libpcap0.8,
|
||||
libpng12-0,
|
||||
libpulse0,
|
||||
libsane,
|
||||
libssl1.0.0,
|
||||
libtiff5 | libtiff4,
|
||||
libtxc-dxtn-s2tc0,
|
||||
libv4l-0,
|
||||
libxcomposite1,
|
||||
libxcursor1,
|
||||
@@ -167,10 +168,6 @@ 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
|
||||
with patches representing my current staging tree for Wine.
|
||||
Currently these patches fix:
|
||||
* Netflix on Firefox hangs with loading bar at 100% (Bug 31993).
|
||||
* Netflix on Firefox fails with Internet Connection Problem when loading bar is
|
||||
at 99% (Bug 31858).
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
Wine is a compatibility layer for running Windows applications on Linux.
|
||||
@@ -195,10 +192,6 @@ Section: otherosfs
|
||||
Priority: optional
|
||||
Description: The Compholio Edition is a special build of the popular Wine software
|
||||
with patches representing my current staging tree for Wine.
|
||||
Currently these patches fix:
|
||||
* Netflix on Firefox hangs with loading bar at 100% (Bug 31993).
|
||||
* Netflix on Firefox fails with Internet Connection Problem when loading bar is
|
||||
at 99% (Bug 31858).
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
Wine is a compatibility layer for running Windows applications on Linux.
|
||||
@@ -227,10 +220,6 @@ 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
|
||||
with patches representing my current staging tree for Wine.
|
||||
Currently these patches fix:
|
||||
* Netflix on Firefox hangs with loading bar at 100% (Bug 31993).
|
||||
* Netflix on Firefox fails with Internet Connection Problem when loading bar is
|
||||
at 99% (Bug 31858).
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
Wine is a compatibility layer for running Windows applications on Linux.
|
||||
@@ -254,10 +243,6 @@ 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
|
||||
with patches representing my current staging tree for Wine.
|
||||
Currently these patches fix:
|
||||
* Netflix on Firefox hangs with loading bar at 100% (Bug 31993).
|
||||
* Netflix on Firefox fails with Internet Connection Problem when loading bar is
|
||||
at 99% (Bug 31858).
|
||||
.
|
||||
Microsoft Windows Compatibility Layer (Binary Emulator and Library)
|
||||
Wine is a compatibility layer for running Windows applications on Linux.
|
||||
|
23
debian/postinst
vendored
23
debian/postinst
vendored
@@ -1,23 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
if [ "$1" = "upgrade" ] ; then
|
||||
if ps -C wineserver > /dev/null && test -d /var/lib/update-notifier/user.d/ ; then
|
||||
cp -f /usr/share/wine/wineserver-restart-required.update-notifier /var/lib/update-notifier/user.d/wineserver-restart-required
|
||||
fi
|
||||
fi
|
||||
|
||||
service procps start || /etc/init.d/procps restart
|
||||
|
||||
# Automatically added by dh_installmime
|
||||
if [ "$1" = "configure" ] && [ -x "`which update-mime 2>/dev/null`" ]; then
|
||||
update-mime
|
||||
fi
|
||||
# End automatically added section
|
||||
# Automatically added by dh_makeshlibs
|
||||
if [ "$1" = "configure" ]; then
|
||||
ldconfig
|
||||
fi
|
||||
# End automatically added section
|
||||
|
||||
|
||||
|
10
debian/postrm
vendored
10
debian/postrm
vendored
@@ -1,10 +0,0 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
# Automatically added by dh_installmime
|
||||
if which update-mime >/dev/null 2>&1; then update-mime; fi
|
||||
# End automatically added section
|
||||
# Automatically added by dh_makeshlibs
|
||||
if [ "$1" = "remove" ]; then
|
||||
ldconfig
|
||||
fi
|
||||
# End automatically added section
|
9
debian/prerm
vendored
9
debian/prerm
vendored
@@ -1,9 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
|
||||
if [ "$1" = "remove" ] ; then
|
||||
if [ -x /usr/sbin/update-binfmts ]; then
|
||||
/usr/sbin/update-binfmts --package wine --remove wine /usr/bin/wine || true
|
||||
fi
|
||||
fi
|
||||
|
||||
|
26
debian/tools/DEVELOPER.md.in
vendored
26
debian/tools/DEVELOPER.md.in
vendored
@@ -2,16 +2,16 @@ Developers and maintainers guide
|
||||
================================
|
||||
|
||||
This document will provide some information targeted at developers, who
|
||||
either want to build/package Wine-Compholio for their distribution, but also
|
||||
for developers who would like to contribute their patches to Wine-Compholio,
|
||||
either want to build/package Wine Staging for their distribution, but also
|
||||
for developers who would like to contribute their patches to Wine Staging,
|
||||
to get them included in future releases.
|
||||
|
||||
|
||||
|
||||
Compiling Wine-Compholio
|
||||
========================
|
||||
Compiling Wine Staging
|
||||
======================
|
||||
|
||||
**Warning:** Please note that starting with Wine-Compholio 1.7.23 it is
|
||||
**Warning:** Please note that starting with Staging 1.7.23 it is
|
||||
deprecated to manually apply patches without using the Makefile. To avoid
|
||||
typical pitfalls for package maintainers (like trying to use the patch
|
||||
commandline utility for binary patches or not updating the patchlist) it is
|
||||
@@ -26,14 +26,14 @@ Instructions
|
||||
|
||||
The following instructions (based on the [Gentoo
|
||||
Wiki](https://wiki.gentoo.org/wiki/Netflix/Pipelight#Compiling_manually))
|
||||
will give a short overview how to compile Wine-Compholio, but of course not
|
||||
will give a short overview how to compile Wine Staging, but of course not
|
||||
explain all details. Make sure to install all required Wine dependencies
|
||||
before proceeding.
|
||||
|
||||
As the first step please grab the latest Wine source:
|
||||
```bash
|
||||
wget http://prdownloads.sourceforge.net/wine/wine-{version}.tar.bz2
|
||||
wget https://github.com/compholio/wine-compholio-daily/archive/v{version}.tar.gz
|
||||
wget https://github.com/wine-compholio/wine-staging/archive/v{version}.tar.gz
|
||||
```
|
||||
|
||||
Extract the archives:
|
||||
@@ -49,7 +49,7 @@ make -C ./patches DESTDIR=$(pwd) install
|
||||
```
|
||||
|
||||
Afterwards run configure (you can also specify a prefix if you don't want to install
|
||||
Wine-Compholio system-wide):
|
||||
Wine Staging system-wide):
|
||||
```bash
|
||||
./configure --with-xattr
|
||||
```
|
||||
@@ -93,11 +93,11 @@ make -C ./patches DESTDIR=$(pwd) PATCHLIST="DIRNAME1.ok DIRNAME2.ok" install
|
||||
```
|
||||
|
||||
|
||||
Contributing to Wine-Compholio
|
||||
==============================
|
||||
Contributing to Wine Staging
|
||||
============================
|
||||
|
||||
Please note that Wine-Compholio is not just an arbitrary collection of Wine
|
||||
patches. We see Wine-Compholio as a **testing version** in preparation for
|
||||
Please note that Wine Staging is not just an arbitrary collection of Wine
|
||||
patches. We see Wine Staging as a **testing version** in preparation for
|
||||
patches to be submitted to upstream Wine. This implies that all patches should
|
||||
at least have a minimum standard quality. Unlike some other PPAs/AURs which
|
||||
provide heavily patched Wine versions, we will not accept hacks for very
|
||||
@@ -126,7 +126,7 @@ for upstream Wine.
|
||||
Attribution guidelines
|
||||
----------------------
|
||||
|
||||
The Wine "Compholio" Edition repository expects all patches to conform to
|
||||
The Wine Staging repository expects all patches to conform to
|
||||
Wine's (undocumented) attribution guidelines. There are a variety of ways
|
||||
to attribute patches, but they all involve an additional line to the patch
|
||||
subject:
|
||||
|
58
debian/tools/Makefile.in
vendored
58
debian/tools/Makefile.in
vendored
@@ -2,10 +2,21 @@
|
||||
# This file is automatically generated, DO NOT EDIT!
|
||||
#
|
||||
|
||||
CURDIR ?= ${{.CURDIR}}
|
||||
PATCH := $(CURDIR)/../debian/tools/gitapply.sh
|
||||
APPLY := (cd $(DESTDIR) && $(PATCH))
|
||||
APPLY_FILE = @echo "Applying $(1)"; $(APPLY) < $(CURDIR)/$(1)
|
||||
.NOTPARALLEL:
|
||||
|
||||
CURDIR ?= ${{.CURDIR}}
|
||||
PATCH := $(CURDIR)/../debian/tools/gitapply.sh
|
||||
APPLY = (cd "$(DESTDIR)" && $(PATCH))
|
||||
APPLY_FILE = @echo "Applying $(1)"; $(APPLY) < "$(CURDIR)/$(1)"
|
||||
|
||||
#
|
||||
# This Makefile understands the following targets:
|
||||
#
|
||||
# install (default): apply patches to directory provided by DESTDIR
|
||||
# install-git: as above, but use 'git am' to apply the patches
|
||||
# series: create a 'series' file containing the patch order
|
||||
# clean: delete autogenerated and temporary files
|
||||
#
|
||||
|
||||
PATCHLIST := \
|
||||
{patchlist}
|
||||
@@ -16,9 +27,44 @@ install: $(PATCHLIST)
|
||||
cd $(DESTDIR) && autoreconf -f
|
||||
cd $(DESTDIR) && ./tools/make_requests
|
||||
|
||||
.PHONY: install-git
|
||||
install-git: PATCH := git am
|
||||
install-git: install
|
||||
|
||||
series: APPLY_FILE = @echo "$(1)" >> series
|
||||
series: $(PATCHLIST)
|
||||
@cat *.ok | sort | $(CURDIR)/../debian/tools/patchlist.sh > patchlist.diff
|
||||
@echo "patchlist.diff" >> series
|
||||
@( \
|
||||
echo ""; \
|
||||
echo "The 'series' file was created in current directory. Please note that"; \
|
||||
echo "'patchlist.diff' is autogenerated based on your selection of patches and not"; \
|
||||
echo "included in this repository - keep in mind to update it on every release."; \
|
||||
echo ""; \
|
||||
echo "Moreover, depending on which patches you have selected, you will have to run"; \
|
||||
echo "'autoreconf -f' and/or './tools/make_requests' after applying them."; \
|
||||
echo ""; \
|
||||
binary=0; \
|
||||
while IFS= read -r line; do \
|
||||
if grep -q "^GIT binary patch" "$$line"; then \
|
||||
binary=1; break; \
|
||||
fi \
|
||||
done < series; \
|
||||
if [ "$$binary" -ne 0 ]; then \
|
||||
echo "The following files contain binary patches and cannot be applied with the"; \
|
||||
echo "regular 'patch' commandline tool:"; \
|
||||
echo ""; \
|
||||
while IFS= read -r line; do \
|
||||
grep -q "^GIT binary patch" "$$line" && echo "$$line"; \
|
||||
done < series; \
|
||||
echo ""; \
|
||||
echo "Please use 'git apply' or '../debian/tools/gitapply.sh' from this repository."; \
|
||||
echo ""; \
|
||||
fi \
|
||||
)
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -f series patchlist.diff
|
||||
rm -f *.ok
|
||||
|
||||
.NOTPARALLEL:
|
||||
|
||||
|
356
debian/tools/README.md.in
vendored
356
debian/tools/README.md.in
vendored
@@ -1,325 +1,43 @@
|
||||
What is Wine-Compholio?
|
||||
=======================
|
||||
What is Wine Staging?
|
||||
=====================
|
||||
|
||||
The **Wine "Compholio" Edition** is a special patched version of Wine that
|
||||
includes both patches written by our team directly and specific patches by
|
||||
third party developers that we consider good enough for inclusion. This can
|
||||
be seen as a testing version in preparation for patches to be submitted
|
||||
to upstream Wine - don't be surprised if you encounter additional bugs,
|
||||
which are not present in regular wine, and always report such issues to us
|
||||
(via github), so we can improve our fixes even further. Thanks!
|
||||
**Warning: Do not report bugs at bugs.winehq.org when using this version!
|
||||
Please take a look at our
|
||||
[Wiki](https://github.com/wine-compholio/wine-staging/wiki/Reporting-bugs)
|
||||
for more information about how to report bugs.**
|
||||
|
||||
**Wine Staging** (formerly wine-compholio) is a special wine version containing
|
||||
bug fixes and features that are not yet available in regular wine versions. The
|
||||
idea behind Wine Staging is to provide new features faster to end users and to
|
||||
give developers the possibility to discuss and improve their patches before
|
||||
they are sent upstream. We also intend to create a community of wine developers
|
||||
to share experience and to make it easier for beginners to start hacking on
|
||||
wine.
|
||||
|
||||
Although we are reviewing all patches before adding them, you may encounter
|
||||
additional bugs, which are not present in regular wine. Make sure to report
|
||||
such issues in our bug tracker instead of winehq.org so that we can try to
|
||||
solve them in future versions. Thanks!
|
||||
|
||||
How to install and use Wine Staging
|
||||
===================================
|
||||
|
||||
Ready-to-use packages for Wine Staging are available for a variety
|
||||
of different Linux distributions directly for download. Just follow the
|
||||
instructions available on the
|
||||
[Wiki](https://github.com/wine-compholio/wine-staging/wiki/Installation).
|
||||
|
||||
When using Wine Staging there are a few differences compared to regular
|
||||
Wine. The main difference is that it is not sufficient to type `wine` to
|
||||
run it, but instead you will have to type `/opt/wine-compholio/bin/wine`.
|
||||
Besides that there are also some other differences, for example additional
|
||||
configuration options to tweak performance, which are not available in regular
|
||||
Wine. All those differences are also documented on the
|
||||
[Wiki](https://github.com/wine-compholio/wine-staging/wiki/Usage).
|
||||
|
||||
|
||||
Included bugfixes and improvements
|
||||
----------------------------------
|
||||
Included bug fixes and improvements
|
||||
===================================
|
||||
|
||||
{fixes}
|
||||
|
||||
|
||||
How to install Wine-Compholio
|
||||
=============================
|
||||
|
||||
Ready-to-use packages for Wine-Compholio are available for a variety
|
||||
of different Linux distributions directly for download. Just follow the
|
||||
instructions below to install it (and all required dependencies). After the
|
||||
installation, please take a look at the next section for instructions how
|
||||
to use it in order to run your desired application.
|
||||
|
||||
**Important:** If you already have installed 'pipelight' on your system, there
|
||||
is a good chance that you already have Wine-Compholio. Take a look at the
|
||||
next section on how to find out if this is the case.
|
||||
|
||||
If your distribution is not listed below, feel free to add a feature request -
|
||||
if the demand is high enough we might consider packaging it for additional
|
||||
distributions.
|
||||
|
||||
|
||||
 Ubuntu / Linux Mint
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Please run the following commands from a terminal, one line after each other.
|
||||
```bash
|
||||
sudo add-apt-repository ppa:pipelight/stable
|
||||
sudo apt-get update
|
||||
sudo apt-get install --install-recommends wine-compholio
|
||||
```
|
||||
|
||||
 Arch Linux
|
||||
---------------------------------------------------------------------
|
||||
|
||||
As a first step you have to import the key for our repository, and set the
|
||||
trust level to trusted:
|
||||
```bash
|
||||
sudo pacman-key -r E49CC0415DC2D5CA
|
||||
sudo pacman-key --lsign-key E49CC0415DC2D5CA
|
||||
```
|
||||
|
||||
Afterwards you have to add the following lines to `/etc/pacman.conf`:
|
||||
```
|
||||
[compholio]
|
||||
Server = http://cdn.fds-team.de/stable/arch/$arch
|
||||
```
|
||||
|
||||
Now you can install Wine-Compholio directly using `pacman`:
|
||||
```bash
|
||||
sudo pacman -Syu wine-compholio
|
||||
```
|
||||
|
||||
 Debian Jessie/Sid
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
*(Instructions for Debian Wheezy can be found below)*
|
||||
|
||||
In order to install i386 packages on a 64-bit system, you have to run the
|
||||
following command as a first step:
|
||||
```bash
|
||||
sudo dpkg --add-architecture i386
|
||||
```
|
||||
|
||||
Afterwards import the key for our repository:
|
||||
```bash
|
||||
wget http://repos.fds-team.de/Release.key
|
||||
sudo apt-key add Release.key
|
||||
```
|
||||
|
||||
And add our repository at the end of your `/etc/apt/sources.list` file:
|
||||
```
|
||||
# For Debian Jessie add the following line:
|
||||
deb http://cdn.fds-team.de/stable/debian/ jessie main
|
||||
|
||||
# For Debian Sid this one:
|
||||
deb http://cdn.fds-team.de/stable/debian/ sid main
|
||||
```
|
||||
|
||||
Afterwards update the package cache and install it:
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install wine-compholio
|
||||
```
|
||||
|
||||
|
||||
 Debian Wheezy
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
In order to install i386 packages on a 64-bit system, you have to run the
|
||||
following command as a first step:
|
||||
```bash
|
||||
sudo dpkg --add-architecture i386
|
||||
```
|
||||
|
||||
Afterwards import the key for our repository:
|
||||
```bash
|
||||
wget http://download.opensuse.org/repositories/home:/DarkPlayer:/Pipelight/Debian_7.0/Release.key
|
||||
sudo apt-key add Release.key
|
||||
```
|
||||
|
||||
And add our repository at the end of your `/etc/apt/sources.list` file:
|
||||
```
|
||||
# For Debian Wheezy add the following line:
|
||||
deb http://download.opensuse.org/repositories/home:/DarkPlayer:/Pipelight/Debian_7.0/ ./
|
||||
```
|
||||
|
||||
Afterwards update the package cache and install it:
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install wine-compholio
|
||||
```
|
||||
|
||||
|
||||
 OpenSUSE
|
||||
-----------------------------------------------------------------------
|
||||
|
||||
All the following steps have to be executed as root user. As a first step
|
||||
you have to add the repository - this step depends on the openSUSE version
|
||||
you're using.
|
||||
|
||||
| openSUSE version | Path component |
|
||||
| ------------------- | ----------------------- |
|
||||
| openSUSE 12.2 | `/openSUSE_12.2/` |
|
||||
| openSUSE 12.3 | `/openSUSE_12.3/` |
|
||||
| openSUSE 13.1 | `/openSUSE_13.1/` |
|
||||
| openSUSE Factory | `/openSUSE_Factory/` |
|
||||
| openSUSE Tumbleweed | `/openSUSE_Tumbleweed/` |
|
||||
|
||||
The following commandline is an example for openSUSE 13.1, for a different
|
||||
version just replace the path component according to the table above:
|
||||
```bash
|
||||
zypper ar --refresh http://download.opensuse.org/repositories/home:/DarkPlayer:/Pipelight/openSUSE_13.1/home:DarkPlayer:Pipelight.repo
|
||||
```
|
||||
|
||||
Afterwards just run the following commands to install it:
|
||||
```bash
|
||||
zypper ref
|
||||
zypper install wine-compholio
|
||||
```
|
||||
|
||||
|
||||
 Fedora
|
||||
-------------------------------------------------------------------
|
||||
|
||||
**Warning:** In contrary to other distributions, its not possible to have both
|
||||
a regular wine version and Wine-Compholio installed at the same time - using
|
||||
the instructions below will replace your regular version. Moreover it will
|
||||
be installed to `/usr/bin/wine` in contrary to `/opt/wine-compholio/bin/wine`.
|
||||
|
||||
As a first step you have to add the repository - this step depends on the
|
||||
Fedora version you're using.
|
||||
|
||||
| Fedora version | Patch component |
|
||||
| --------------- | --------------- |
|
||||
| Fedora 18 | `/Fedora_18/` |
|
||||
| Fedora 19 | `/Fedora_19/` |
|
||||
| Fedora 20 | `/Fedora_20/` |
|
||||
|
||||
The following commandline is an example for Fedora 19, for a different version
|
||||
just replace the path component according to the table above:
|
||||
```bash
|
||||
sudo wget http://download.opensuse.org/repositories/home:/DarkPlayer:/Pipelight/Fedora_19/home:DarkPlayer:Pipelight.repo -O /etc/yum.repos.d/pipelight.repo
|
||||
```
|
||||
|
||||
Afterwards run the following command to install the package:
|
||||
```bash
|
||||
sudo yum install wine-compholio
|
||||
```
|
||||
|
||||
Please note that you might run into trouble if the official Fedora package
|
||||
(without compholio patches) is newer than the one from the repository above,
|
||||
so if something doesn't work, always make sure that you have installed
|
||||
our version. To do that just run:
|
||||
```bash
|
||||
/usr/bin/wine --patches
|
||||
```
|
||||
|
||||
When you're using Wine-Compholio this will show to a list of all patches
|
||||
included, for an unpatched version this command will fail.
|
||||
|
||||
|
||||
 Mageia 4
|
||||
---------------------------------------------------------------------
|
||||
|
||||
As a first step please add the key for our repository
|
||||
```bash
|
||||
wget http://repos.fds-team.de/Release.key
|
||||
rpm --import Release.key
|
||||
```
|
||||
|
||||
If you're using a 32-bit version of Mageia just add the repository
|
||||
for 32-bit packages:
|
||||
```bash
|
||||
sudo urpmi.addmedia "Compholio 32-bit" http://cdn.fds-team.de/stable/mageia/4/i586/
|
||||
```
|
||||
|
||||
For a 64-bit version of Mageia you'll need both the 32-bit and the
|
||||
64-bit repository:
|
||||
```bash
|
||||
sudo urpmi.addmedia "Compholio 32-bit" http://cdn.fds-team.de/stable/mageia/4/i586/
|
||||
sudo urpmi.addmedia "Compholio 64-bit" http://cdn.fds-team.de/stable/mageia/4/x86_64/
|
||||
```
|
||||
|
||||
Afterwards run the following commands to install the package:
|
||||
```bash
|
||||
sudo urpmi.update -a
|
||||
sudo urpmi wine-compholio
|
||||
```
|
||||
|
||||
Using Wine-Compholio
|
||||
====================
|
||||
|
||||
Since we don't want to duplicate a lot of information here, we recommend
|
||||
to take a look at the [official Wine FAQ](http://wiki.winehq.org/FAQ) for
|
||||
general information about how to use Wine. The following part will mainly
|
||||
concentrate on the differences between wine and Wine-Compholio.
|
||||
|
||||
|
||||
Running Wine-Compholio
|
||||
----------------------
|
||||
|
||||
**Using multiple Wine versions:** Unless you specify a special `WINEPREFIX`
|
||||
environment variable, Wine-Compholio will use the same wineprefix `~/.wine`
|
||||
(in your home directory) like regular wine. This allows you to use your
|
||||
already installed programs directly, without much effort or reinstalling
|
||||
them. Often you have both regular wine and Wine-Compholio installed at the
|
||||
same time, which is *absolutely no problem* - by typing in either `wine`
|
||||
(=regular wine) or `/opt/wine-compholio/bin/wine` you can decide, which
|
||||
wine version you want to run. You can switch between versions as often as
|
||||
you like - just make sure that all Windows programs have terminated before
|
||||
starting them with a different version.
|
||||
|
||||
To run Wine-Compholio always type `/opt/wine-compholio/bin/wine`, for example:
|
||||
```bash
|
||||
cd ~/.wine/drive_c/<your path>/
|
||||
/opt/wine-compholio/bin/wine game.exe
|
||||
```
|
||||
|
||||
You also have to add `/opt/wine-compholio/bin/` when running other wine
|
||||
related programs, here are some additional example:
|
||||
```bash
|
||||
# Initialize the wine prefix
|
||||
/opt/wine-compholio/bin/wineboot
|
||||
|
||||
# Open the wine configuration
|
||||
/opt/wine-compholio/bin/winecfg
|
||||
|
||||
# Run winepath to convert paths
|
||||
/opt/wine-compholio/bin/winepath --unix 'c:\Windows'
|
||||
|
||||
# Kill the running wineserver instance
|
||||
/opt/wine-compholio/bin/wineserver -k
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
If you're an experienced user, and always want to use Wine-Compholio, you
|
||||
can also add `/opt/wine-compholio/bin` to your bash profile. We will not
|
||||
go into detail here, because such a setup has the big disadvantage, that
|
||||
it hides which version you're using - which is very important for getting
|
||||
support or reporting bugs.
|
||||
|
||||
|
||||
Submitting bugs
|
||||
---------------
|
||||
|
||||
**Warning: Do not submit bug reports at bugs.winehq.org when using this
|
||||
version!**
|
||||
|
||||
If you encounter any issues, the first thing you should do is to try it with
|
||||
regular wine. We're only a very small developer team, and although we would
|
||||
like to do that, we probably cannot really solve all your Wine bugs. When
|
||||
it turns out that the official Wine version also doesn't work, you can file
|
||||
a bugreport at the official [Wine bugtracker](http://bugs.winehq.org/).
|
||||
Feel free to mention that you also tested with Wine-Compholio, but all
|
||||
bugreport related information (logs, crashdumps, ...) should concentrate
|
||||
only on upstream wine.
|
||||
|
||||
If it turns out, that it works with upstream wine, but not with Wine-Compholio,
|
||||
then it might be a regression caused by our patches. We would like you to
|
||||
report this issue to us, so we can fix it in future versions. You can also
|
||||
report issues, when testing with upstream Wine is impossible or it crashes
|
||||
with a different error (for example much earlier).
|
||||
|
||||
When submitting a application related bug here on github, please make sure to
|
||||
include at least the following information. Generally its always a good idea
|
||||
to provide as much information as possible, since this will significantly
|
||||
increase chances to provide support and to fix it.
|
||||
|
||||
1. **Which application triggers the bug**
|
||||
* Application name and version number
|
||||
* How to obtain it (download URL + checksum if public available)
|
||||
|
||||
2. **What exactly doesn't work**
|
||||
* Log of the terminal output of the application
|
||||
* For visual issues please additionally attach a screenshot, and describe
|
||||
what it should look like
|
||||
* *Optionally:* If you already know whats going wrong, please attach
|
||||
appropriate `WINEDEBUG` logs or excerpts showing the issue.
|
||||
|
||||
3. **Details about your WINEPREFIX**
|
||||
* *Recommended:* Test it in a new wine prefix, and report if this works
|
||||
* Did you install any overrides? (for examples by using `winetricks`)
|
||||
* Did you change any settings by running `winecfg`?
|
||||
|
||||
4. **Information about your Wine-Compholio version**
|
||||
* *Recommended:* Test with regular wine, and report if this works
|
||||
* Version number (`/opt/wine-compholio/bin/wine --version`)
|
||||
* Patches in your build (`/opt/wine-compholio/bin/wine --patches`)
|
||||
* Installed optional libraries (`/opt/wine-compholio/bin/wine --check-libs`)
|
||||
|
45
debian/tools/patchlist.sh
vendored
45
debian/tools/patchlist.sh
vendored
@@ -1,32 +1,47 @@
|
||||
#!/bin/sh
|
||||
PATCH_DATA=$(cat);
|
||||
PATCH_LINES=$(echo "${PATCH_DATA}" | wc -l);
|
||||
PATCH_LINES=$((${PATCH_LINES}+20));
|
||||
PATCH_LINES=$((${PATCH_LINES}+23));
|
||||
|
||||
cat <<EOF
|
||||
From: "FDS-Team" <webmaster@fds-team.de>
|
||||
From: FDS-Team <webmaster@fds-team.de>
|
||||
Subject: Autogenerated patch list.
|
||||
|
||||
---
|
||||
diff --git a/include/wine/library.h b/include/wine/library.h
|
||||
index 242bb69..fae73fe 100644
|
||||
--- a/include/wine/library.h
|
||||
+++ b/include/wine/library.h
|
||||
@@ -43,6 +43,7 @@ extern const char *wine_get_data_dir(void);
|
||||
extern const char *wine_get_server_dir(void);
|
||||
extern const char *wine_get_user_name(void);
|
||||
extern const char *wine_get_version(void);
|
||||
+extern const void *wine_get_patches(void);
|
||||
extern const char *wine_get_build_id(void);
|
||||
extern void wine_init_argv0_path( const char *argv0 );
|
||||
extern void wine_exec_wine_binary( const char *name, char **argv, const char *env_var );
|
||||
diff --git a/libs/wine/config.c b/libs/wine/config.c
|
||||
index a273502..5fa0cd5 100644
|
||||
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;
|
||||
}
|
||||
|
||||
+struct wine_patch {
|
||||
+ const char *hash;
|
||||
+static const struct
|
||||
+{
|
||||
+ const char *author;
|
||||
+ const char *title;
|
||||
+} wine_patch_data[] = {
|
||||
+ const char *subject;
|
||||
+ int revision;
|
||||
+}
|
||||
+wine_patch_data[] =
|
||||
+{
|
||||
${PATCH_DATA}
|
||||
+ { NULL, NULL, NULL }
|
||||
+ { NULL, NULL, 0 }
|
||||
+};
|
||||
+
|
||||
+/* return the applied non-standard patches */
|
||||
+const void * wine_get_patches(void)
|
||||
+const void *wine_get_patches(void)
|
||||
+{
|
||||
+ return &wine_patch_data[0];
|
||||
+}
|
||||
@@ -58,16 +73,4 @@ index 2159fac..7cb2918 100644
|
||||
wine_init;
|
||||
wine_init_argv0_path;
|
||||
wine_is_dbcs_leadbyte;
|
||||
diff --git a/include/wine/library.h b/include/wine/library.h
|
||||
index 242bb69..aa9e585 100644
|
||||
--- a/include/wine/library.h
|
||||
+++ b/include/wine/library.h
|
||||
@@ -43,6 +43,7 @@ extern const char *wine_get_data_dir(void);
|
||||
extern const char *wine_get_server_dir(void);
|
||||
extern const char *wine_get_user_name(void);
|
||||
extern const char *wine_get_version(void);
|
||||
+extern const void *wine_get_patches(void);
|
||||
extern const char *wine_get_build_id(void);
|
||||
extern void wine_init_argv0_path( const char *argv0 );
|
||||
extern void wine_exec_wine_binary( const char *name, char **argv, const char *env_var );
|
||||
EOF
|
||||
|
172
debian/tools/patchupdate.py
vendored
172
debian/tools/patchupdate.py
vendored
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/python2
|
||||
#
|
||||
# Automatic patch dependency checker and Makefile/README.md generator.
|
||||
#
|
||||
@@ -19,19 +19,15 @@
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
#
|
||||
|
||||
from xml.dom import minidom
|
||||
import contextlib
|
||||
import hashlib
|
||||
import itertools
|
||||
import multiprocessing
|
||||
import operator
|
||||
import os
|
||||
import patchutils
|
||||
import pickle
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import textwrap
|
||||
import urllib
|
||||
|
||||
# Cached information to speed up patch dependency checks
|
||||
latest_wine_commit = None
|
||||
@@ -59,18 +55,12 @@ class PatchUpdaterError(RuntimeError):
|
||||
"""Failed to update patches."""
|
||||
pass
|
||||
|
||||
class AuthorInfo(object):
|
||||
def __init__(self):
|
||||
self.author = ""
|
||||
self.subject = ""
|
||||
self.revision = ""
|
||||
|
||||
class PatchSet(object):
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.authors = []
|
||||
self.fixes = []
|
||||
self.changes = []
|
||||
self.disabled = False
|
||||
|
||||
self.files = []
|
||||
self.patches = []
|
||||
@@ -86,6 +76,16 @@ def _pairs(a):
|
||||
for k in a[i+1:]:
|
||||
yield (j, k)
|
||||
|
||||
def _unique(iterable, key=None):
|
||||
"List unique elements, preserving order. Remember only the element just seen."
|
||||
# unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
|
||||
# unique_justseen('ABBCcAD', str.lower) --> A B C A D
|
||||
return itertools.imap(next, itertools.imap(operator.itemgetter(1), itertools.groupby(iterable, key)))
|
||||
|
||||
def _escape(s):
|
||||
"""Escape string inside of '...' quotes."""
|
||||
return s.replace("\\", "\\\\").replace("\"", "\\\"").replace("'", "'\\''")
|
||||
|
||||
def _load_dict(filename):
|
||||
"""Load a Python dictionary object from a file."""
|
||||
try:
|
||||
@@ -99,24 +99,15 @@ def _save_dict(filename, value):
|
||||
with open(filename, "wb") as fp:
|
||||
pickle.dump(value, fp, pickle.HIGHEST_PROTOCOL)
|
||||
|
||||
def _winebugs_query_short_desc(bugids):
|
||||
"""Query short_desc from multiple wine bugzilla bugs at the same time."""
|
||||
bugids = list(set(bugids)) # Remove duplicates and convert to fixed order
|
||||
if len(bugids) == 0: return {}
|
||||
|
||||
# Query bugzilla
|
||||
url = "http://bugs.winehq.org/show_bug.cgi?%s&ctype=xml&field=short_desc" % \
|
||||
"&".join(["id=%d" % bugid for bugid in bugids])
|
||||
with contextlib.closing(urllib.urlopen(url)) as fp:
|
||||
data = minidom.parseString(fp.read())
|
||||
|
||||
# convert xml in a dictionary containing all bugs we found
|
||||
result = {}
|
||||
for element in data.getElementsByTagName('bug_id'):
|
||||
bugids.remove(int(element.firstChild.data))
|
||||
for bugid, element in zip(bugids, data.getElementsByTagName('short_desc')):
|
||||
result[bugid] = element.firstChild.data
|
||||
return result
|
||||
def parse_int(val, default=0):
|
||||
"""Parse an integer or boolean value."""
|
||||
r = re.match("^[0-9]+$", val)
|
||||
if r:
|
||||
return int(val)
|
||||
try:
|
||||
return {'true': 1, 'yes': 1, 'false': 0, 'no': 0}[val.lower()]
|
||||
except AttributeError:
|
||||
return default
|
||||
|
||||
# Read information from changelog
|
||||
def _read_changelog():
|
||||
@@ -174,7 +165,7 @@ def enum_directories(revision, path):
|
||||
return dirs
|
||||
|
||||
def read_definition(revision, filename, name_to_id):
|
||||
"""Read a definition file and return information as tuple (authors, depends, fixes)."""
|
||||
"""Read a definition file and return information as tuple (depends, fixes)."""
|
||||
|
||||
filename = os.path.join(filename, "definition")
|
||||
if revision is None:
|
||||
@@ -188,10 +179,9 @@ def read_definition(revision, filename, name_to_id):
|
||||
except CalledProcessError:
|
||||
raise IOError("Failed to load %s" % filename)
|
||||
|
||||
authors = []
|
||||
depends = set()
|
||||
fixes = []
|
||||
info = AuthorInfo()
|
||||
depends = set()
|
||||
fixes = []
|
||||
disabled = False
|
||||
|
||||
for line in content.split("\n"):
|
||||
if line.startswith("#"):
|
||||
@@ -199,25 +189,10 @@ def read_definition(revision, filename, name_to_id):
|
||||
|
||||
tmp = line.split(":", 1)
|
||||
if len(tmp) != 2:
|
||||
if len(info.author) and len(info.subject):
|
||||
authors.append(info)
|
||||
info = AuthorInfo()
|
||||
continue
|
||||
|
||||
key, val = tmp[0].lower(), tmp[1].strip()
|
||||
if key == "author":
|
||||
if len(info.author): info.author += ", "
|
||||
info.author += val
|
||||
|
||||
elif key == "subject" or key == "title":
|
||||
if len(info.subject): info.subject += " "
|
||||
info.subject += val
|
||||
|
||||
elif key == "revision":
|
||||
if len(info.revision): info.revision += ", "
|
||||
info.revision += val
|
||||
|
||||
elif key == "depends":
|
||||
if key == "depends":
|
||||
if name_to_id is not None:
|
||||
if not name_to_id.has_key(val):
|
||||
raise PatchUpdaterError("Definition file %s references unknown dependency %s" % (filename, val))
|
||||
@@ -234,12 +209,13 @@ def read_definition(revision, filename, name_to_id):
|
||||
continue
|
||||
fixes.append((None, val))
|
||||
|
||||
else:
|
||||
print "WARNING: Ignoring unknown command in definition file %s: %s" % (deffile, line)
|
||||
elif key == "disabled":
|
||||
disabled = parse_int(val)
|
||||
|
||||
if len(info.author) and len(info.subject):
|
||||
authors.append(info)
|
||||
return authors, depends, fixes
|
||||
elif revision is None:
|
||||
print "WARNING: Ignoring unknown command in definition file %s: %s" % (filename, line)
|
||||
|
||||
return depends, fixes, disabled
|
||||
|
||||
def read_patchset(revision = None):
|
||||
"""Read information about all patchsets for a specific revision."""
|
||||
@@ -279,10 +255,10 @@ def read_patchset(revision = None):
|
||||
# Now read the definition files in a second step
|
||||
for i, patch in all_patches.iteritems():
|
||||
try:
|
||||
patch.authors, patch.depends, patch.fixes = \
|
||||
patch.depends, patch.fixes, patch.disabled = \
|
||||
read_definition(revision, os.path.join(config.path_patches, patch.name), name_to_id)
|
||||
except IOError:
|
||||
raise PatchUpaterError("Missing definition file for %s" % patch.name)
|
||||
patch.depends, patch.fixes, patch.disabled = set(), [], False
|
||||
|
||||
return all_patches
|
||||
|
||||
@@ -348,7 +324,8 @@ def get_wine_file(filename, force=False):
|
||||
return (content_hash, content)
|
||||
|
||||
def verify_patch_order(all_patches, indices, filename):
|
||||
"""Checks if the dependencies are defined correctly by applying on the patches on a copy from the git tree."""
|
||||
"""Checks if the dependencies are defined correctly by applying
|
||||
the patches on a (temporary) copy from the git tree."""
|
||||
global cached_patch_result
|
||||
|
||||
# If one of patches is a binary patch, then we cannot / won't verify it - require dependencies in this case
|
||||
@@ -376,6 +353,7 @@ def verify_patch_order(all_patches, indices, filename):
|
||||
# Fast path -> we know that it applies properly
|
||||
if cached_patch_result.has_key(unique_hash):
|
||||
result_hash = cached_patch_result[unique_hash]
|
||||
assert result_hash is not None
|
||||
|
||||
else:
|
||||
# Now really get the file, if we don't have it yet
|
||||
@@ -386,19 +364,25 @@ def verify_patch_order(all_patches, indices, filename):
|
||||
try:
|
||||
content = patchutils.apply_patch(original_content, patches, fuzz=0)
|
||||
except patchutils.PatchApplyError:
|
||||
if last_result_hash is not None: break
|
||||
# Remember that we failed to apply the patches, but continue, if there is still a chance
|
||||
# that it applies in a different order (to give a better error message).
|
||||
failed_to_apply = True
|
||||
continue
|
||||
if last_result_hash is None:
|
||||
continue
|
||||
break
|
||||
|
||||
# Get hash of resulting file and add to cache
|
||||
result_hash = hashlib.sha256(content).digest()
|
||||
cached_patch_result[unique_hash] = result_hash
|
||||
|
||||
# No known hash yet, remember the result. If we failed applying before, we can stop now.
|
||||
if last_result_hash is None:
|
||||
last_result_hash = result_hash
|
||||
if failed_to_apply: break
|
||||
|
||||
# Applied successful, but result has a different hash - also treat as failure.
|
||||
elif last_result_hash != result_hash:
|
||||
last_result_hash = None
|
||||
failed_to_apply = True
|
||||
break
|
||||
|
||||
# If something failed, then show the appropriate error message.
|
||||
@@ -406,8 +390,8 @@ def verify_patch_order(all_patches, indices, filename):
|
||||
raise PatchUpdaterError("Changes to file %s don't apply on git source tree: %s" %
|
||||
(filename, ", ".join([all_patches[i].name for i in indices])))
|
||||
|
||||
elif failed_to_apply or last_result_hash is None:
|
||||
raise PatchUpdaterError("Depending on the order some changes to file %s dont't apply / lead to different results: %s" %
|
||||
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:
|
||||
@@ -417,25 +401,26 @@ 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 into cached_patch_result."""
|
||||
"""Load dictionary for cached patch dependency tests."""
|
||||
global cached_patch_result
|
||||
global cached_original_src
|
||||
cached_patch_result = _load_dict(config.path_depcache)
|
||||
cached_original_src = _load_dict(config.path_srccache)
|
||||
|
||||
def _save_patch_cache():
|
||||
"""Save dictionary for cached patch depdency tests."""
|
||||
"""Save dictionary for cached patch dependency tests."""
|
||||
_save_dict(config.path_depcache, cached_patch_result)
|
||||
_save_dict(config.path_srccache, cached_original_src)
|
||||
|
||||
max_patches = max(all_patches.keys()) + 1
|
||||
enabled_patches = dict([(i, patch) for i, patch in all_patches.iteritems() if not patch.disabled])
|
||||
max_patches = max(enabled_patches.keys()) + 1
|
||||
|
||||
for i, patch in all_patches.iteritems():
|
||||
for i, 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(all_patches)
|
||||
patches = dict(enabled_patches)
|
||||
while len(patches):
|
||||
|
||||
to_delete = []
|
||||
@@ -445,7 +430,7 @@ def verify_dependencies(all_patches):
|
||||
to_delete.append(i)
|
||||
|
||||
if len(to_delete) == 0:
|
||||
raise PatchUpdaterError("Circular dependency in set of patches: %s" %
|
||||
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:
|
||||
@@ -457,7 +442,7 @@ def verify_dependencies(all_patches):
|
||||
|
||||
# Find out which files are modified by multiple patches
|
||||
modified_files = {}
|
||||
for i, patch in all_patches.iteritems():
|
||||
for i, patch in enabled_patches.iteritems():
|
||||
for f in patch.modified_files:
|
||||
if f not in modified_files:
|
||||
modified_files[f] = []
|
||||
@@ -467,7 +452,7 @@ def verify_dependencies(all_patches):
|
||||
_load_patch_cache()
|
||||
try:
|
||||
for f, indices in modified_files.iteritems():
|
||||
verify_patch_order(all_patches, indices, f)
|
||||
verify_patch_order(enabled_patches, indices, f)
|
||||
finally:
|
||||
_save_patch_cache()
|
||||
|
||||
@@ -478,22 +463,12 @@ def generate_makefile(all_patches):
|
||||
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 i, patch in all_patches.iteritems()])))
|
||||
fp.write(template.format(patchlist="\t" + " \\\n\t".join(
|
||||
["%s.ok" % patch.name for i, patch in all_patches.iteritems() if not patch.disabled])))
|
||||
|
||||
for i, patch in all_patches.iteritems():
|
||||
fp.write("# Patchset %s\n" % patch.name)
|
||||
fp.write("# |\n")
|
||||
fp.write("# | Included patches:\n")
|
||||
|
||||
# List all patches and their corresponding authors
|
||||
for info in patch.authors:
|
||||
if not info.subject: continue
|
||||
s = []
|
||||
if info.revision and info.revision != "1": s.append("rev %s" % info.revision)
|
||||
if info.author: s.append("by %s" % info.author)
|
||||
if len(s): s = " [%s]" % ", ".join(s)
|
||||
fp.write("# | *\t%s\n" % "\n# | \t".join(textwrap.wrap(info.subject + s, 120)))
|
||||
fp.write("# |\n")
|
||||
|
||||
# List all bugs fixed by this patchset
|
||||
if any([bugid is not None for bugid, bugname in patch.fixes]):
|
||||
@@ -504,7 +479,7 @@ def generate_makefile(all_patches):
|
||||
fp.write("# |\n")
|
||||
|
||||
# List all modified files
|
||||
fp.write("# | Modified files: \n")
|
||||
fp.write("# | Modified files:\n")
|
||||
fp.write("# | *\t%s\n" % "\n# | \t".join(textwrap.wrap(", ".join(sorted(patch.modified_files)), 120)))
|
||||
fp.write("# |\n")
|
||||
|
||||
@@ -516,13 +491,11 @@ def generate_makefile(all_patches):
|
||||
fp.write("\t$(call APPLY_FILE,%s)\n" % os.path.join(patch.name, f))
|
||||
|
||||
# Create *.ok file (used to generate patchlist)
|
||||
if len(patch.authors):
|
||||
if len(patch.patches):
|
||||
fp.write("\t@( \\\n")
|
||||
for info in patch.authors:
|
||||
if not info.subject: continue
|
||||
s = info.subject.replace("\\", "\\\\\\\\").replace("\"", "\\\\\"")
|
||||
if info.revision and info.revision != "1": s += " [rev %s]" % info.revision
|
||||
fp.write("\t\techo '+ { \"%s\", \"%s\", \"%s\" },'; \\\n" % (patch.name, info.author, s))
|
||||
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)
|
||||
@@ -532,28 +505,22 @@ def generate_markdown(all_patches, stable_patches, stable_compholio_version):
|
||||
"""Generate README.md and DEVELOPER.md including information about specific patches and bugfixes."""
|
||||
|
||||
def _format_bug(mode, bugid, bugname):
|
||||
if bugid is not None:
|
||||
short_desc = bug_short_desc[bugid]
|
||||
if bugname is None: bugname = short_desc
|
||||
if mode < 0: bugname = "~~%s~~" % bugname
|
||||
if bugid is None: return "* %s" % bugname
|
||||
return "* %s ([Wine Bug #%d](http://bugs.winehq.org/show_bug.cgi?id=%d \"%s\"))" % \
|
||||
(bugname, bugid, bugid, short_desc.replace("\\", "\\\\").replace("\"", "\\\""))
|
||||
return "* %s ([Wine Bug #%d](https://bugs.winehq.org/show_bug.cgi?id=%d))" % \
|
||||
(bugname, bugid, bugid) #, short_desc.replace("\\", "\\\\").replace("\"", "\\\""))
|
||||
|
||||
all_bugids = set()
|
||||
all_fixes = {}
|
||||
|
||||
# Get fixes for current version
|
||||
for i, patch in all_patches.iteritems():
|
||||
for bugid, bugname in patch.fixes:
|
||||
if bugid is not None: all_bugids.add(bugid)
|
||||
key = bugid if bugid is not None else bugname
|
||||
all_fixes[key] = [1, bugid, bugname]
|
||||
|
||||
# Compare with fixes for latest stable version
|
||||
for i, patch in stable_patches.iteritems():
|
||||
for bugid, bugname in patch.fixes:
|
||||
if bugid is not None: all_bugids.add(bugid)
|
||||
key = bugid if bugid is not None else bugname
|
||||
if all_fixes.has_key(key):
|
||||
all_fixes[key][0] = 0
|
||||
@@ -571,9 +538,6 @@ def generate_markdown(all_patches, stable_patches, stable_compholio_version):
|
||||
old_fixes = new_fixes
|
||||
new_fixes = []
|
||||
|
||||
# Query information from bugzilla
|
||||
bug_short_desc = _winebugs_query_short_desc(all_bugids)
|
||||
|
||||
# Generate information for current version
|
||||
lines = []
|
||||
if len(new_fixes):
|
||||
@@ -583,7 +547,7 @@ def generate_markdown(all_patches, stable_patches, stable_compholio_version):
|
||||
lines.append(_format_bug(mode, bugid, bugname))
|
||||
lines.append("")
|
||||
lines.append("")
|
||||
lines.append("**Bugs fixed in Wine-Compholio %s [%d]:**" % (stable_compholio_version, len(old_fixes)))
|
||||
lines.append("**Bugs fixed in Wine Staging %s [%d]:**" % (stable_compholio_version, len(old_fixes)))
|
||||
lines.append("")
|
||||
for mode, bugid, bugname in sorted(old_fixes, key=lambda x: x[2]):
|
||||
lines.append(_format_bug(mode, bugid, bugname))
|
||||
|
143
debian/tools/patchutils.py
vendored
143
debian/tools/patchutils.py
vendored
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/python
|
||||
#!/usr/bin/python2
|
||||
#
|
||||
# Python functions to read, split and apply patches.
|
||||
#
|
||||
@@ -19,6 +19,7 @@
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
#
|
||||
|
||||
import email.header
|
||||
import collections
|
||||
import difflib
|
||||
import hashlib
|
||||
@@ -37,22 +38,27 @@ class PatchApplyError(RuntimeError):
|
||||
pass
|
||||
|
||||
class PatchObject(object):
|
||||
def __init__(self, filename):
|
||||
self.extracted_patch = None
|
||||
self.unique_hash = None
|
||||
def __init__(self, filename, header):
|
||||
self.patch_author = header['author']
|
||||
self.patch_email = header['email']
|
||||
self.patch_subject = header['subject']
|
||||
self.patch_revision = header['revision'] if header.has_key('revision') else 1
|
||||
|
||||
self.filename = filename
|
||||
self.offset_begin = None
|
||||
self.offset_end = None
|
||||
self.isbinary = False
|
||||
self.extracted_patch = None
|
||||
self.unique_hash = None
|
||||
|
||||
self.oldname = None
|
||||
self.newname = None
|
||||
self.modified_file = None
|
||||
self.filename = filename
|
||||
self.offset_begin = None
|
||||
self.offset_end = None
|
||||
self.isbinary = False
|
||||
|
||||
self.oldsha1 = None
|
||||
self.newsha1 = None
|
||||
self.newmode = None
|
||||
self.oldname = None
|
||||
self.newname = None
|
||||
self.modified_file = None
|
||||
|
||||
self.oldsha1 = None
|
||||
self.newsha1 = None
|
||||
self.newmode = None
|
||||
|
||||
def is_binary(self):
|
||||
return self.isbinary
|
||||
@@ -134,10 +140,10 @@ def read_patch(filename):
|
||||
tmp, self.peeked = self.peeked, None
|
||||
return tmp[1]
|
||||
|
||||
def _read_single_patch(fp, oldname=None, newname=None):
|
||||
def _read_single_patch(fp, header, oldname=None, newname=None):
|
||||
"""Internal function to read a single patch from a file."""
|
||||
|
||||
patch = PatchObject(fp.filename)
|
||||
patch = PatchObject(fp.filename, header)
|
||||
patch.offset_begin = fp.tell()
|
||||
patch.oldname = oldname
|
||||
patch.newname = newname
|
||||
@@ -152,28 +158,39 @@ def read_patch(filename):
|
||||
line = fp.peek()
|
||||
if line is None:
|
||||
break
|
||||
|
||||
elif line.startswith("--- "):
|
||||
patch.oldname = line[4:].strip()
|
||||
|
||||
elif line.startswith("+++ "):
|
||||
patch.newname = line[4:].strip()
|
||||
|
||||
elif line.startswith("old mode") or line.startswith("deleted file mode"):
|
||||
pass # ignore
|
||||
|
||||
elif line.startswith("new mode "):
|
||||
patch.newmode = line[9:].strip()
|
||||
|
||||
elif line.startswith("new file mode "):
|
||||
patch.newmode = line[14:].strip()
|
||||
|
||||
elif line.startswith("new mode") or line.startswith("new file mode"):
|
||||
raise PatchParserError("Unable to parse header line '%s'." % line)
|
||||
|
||||
elif line.startswith("copy from") or line.startswith("copy to"):
|
||||
raise NotImplementedError("Patch copy header not implemented yet.")
|
||||
|
||||
elif line.startswith("rename "):
|
||||
raise NotImplementedError("Patch rename header not implemented yet.")
|
||||
|
||||
elif line.startswith("similarity index") or line.startswith("dissimilarity index"):
|
||||
pass # ignore
|
||||
|
||||
elif line.startswith("index "):
|
||||
r = re.match("^index ([a-fA-F0-9]*)\.\.([a-fA-F0-9]*)", line)
|
||||
if not r: raise PatchParserError("Unable to parse index header line '%s'." % line)
|
||||
patch.oldsha1, patch.newsha1 = r.group(1), r.group(2)
|
||||
|
||||
else:
|
||||
break
|
||||
assert fp.read() == line
|
||||
@@ -218,27 +235,28 @@ def read_patch(filename):
|
||||
raise PatchParserError("Empty hunk doesn't make sense.")
|
||||
assert fp.read() == line
|
||||
|
||||
while srclines > 0 or dstlines > 0:
|
||||
line = fp.read()
|
||||
if line is None:
|
||||
raise PatchParserError("Truncated patch.")
|
||||
elif line.startswith(" "):
|
||||
if srclines == 0 or dstlines == 0:
|
||||
raise PatchParserError("Corrupted patch.")
|
||||
srclines -= 1
|
||||
dstlines -= 1
|
||||
elif line.startswith("-"):
|
||||
if srclines == 0:
|
||||
raise PatchParserError("Corrupted patch.")
|
||||
srclines -= 1
|
||||
elif line.startswith("+"):
|
||||
if dstlines == 0:
|
||||
raise PatchParserError("Corrupted patch.")
|
||||
dstlines -= 1
|
||||
elif line.startswith("\\ "):
|
||||
pass # ignore
|
||||
else:
|
||||
raise PatchParserError("Unexpected line in hunk.")
|
||||
try:
|
||||
while srclines > 0 or dstlines > 0:
|
||||
line = fp.read()[0]
|
||||
if line == " ":
|
||||
if srclines == 0 or dstlines == 0:
|
||||
raise PatchParserError("Corrupted patch.")
|
||||
srclines -= 1
|
||||
dstlines -= 1
|
||||
elif line == "-":
|
||||
if srclines == 0:
|
||||
raise PatchParserError("Corrupted patch.")
|
||||
srclines -= 1
|
||||
elif line == "+":
|
||||
if dstlines == 0:
|
||||
raise PatchParserError("Corrupted patch.")
|
||||
dstlines -= 1
|
||||
elif line == "\\":
|
||||
pass # ignore
|
||||
else:
|
||||
raise PatchParserError("Unexpected line in hunk.")
|
||||
except TypeError: # triggered by None[0]
|
||||
raise PatchParserError("Truncated patch.")
|
||||
|
||||
while True:
|
||||
line = fp.peek()
|
||||
@@ -270,19 +288,66 @@ def read_patch(filename):
|
||||
patch.offset_end = fp.tell()
|
||||
return patch
|
||||
|
||||
def _parse_author(author):
|
||||
author = ' '.join([data.decode(format or 'utf-8').encode('utf-8') for \
|
||||
data, format in email.header.decode_header(author)])
|
||||
r = re.match("\"?([^\"]*)\"? <(.*)>", author)
|
||||
if r is None: raise NotImplementedError("Failed to parse From - header.")
|
||||
return r.group(1).strip(), r.group(2).strip()
|
||||
|
||||
def _parse_subject(subject):
|
||||
version = "(v|try|rev|take) *([0-9]+)"
|
||||
subject = subject.strip()
|
||||
if subject.endswith("."): subject = subject[:-1]
|
||||
r = re.match("^\\[PATCH([^]]*)\\](.*)$", subject, re.IGNORECASE)
|
||||
if r is not None:
|
||||
subject = r.group(2).strip()
|
||||
r = re.search(version, r.group(1), re.IGNORECASE)
|
||||
if r is not None: return subject, int(r.group(2))
|
||||
r = re.match("^(.*)\\(%s\\)$" % version, subject, re.IGNORECASE)
|
||||
if r is not None: return r.group(1).strip(), int(r.group(3))
|
||||
r = re.match("^(.*)[.,] +%s$" % version, subject, re.IGNORECASE)
|
||||
if r is not None: return r.group(1).strip(), int(r.group(3))
|
||||
r = re.match("^([^:]+) %s: (.*)$" % version, subject, re.IGNORECASE)
|
||||
if r is not None: return "%s: %s" % (r.group(1), r.group(4)), int(r.group(3))
|
||||
r = re.match("^(.*) +%s$" % version, subject, re.IGNORECASE)
|
||||
if r is not None: return r.group(1).strip(), int(r.group(3))
|
||||
return subject, 1
|
||||
|
||||
header = {}
|
||||
with _FileReader(filename) as fp:
|
||||
while True:
|
||||
line = fp.peek()
|
||||
if line is None:
|
||||
break
|
||||
|
||||
elif line.startswith("From: "):
|
||||
header['author'], header['email'] = _parse_author(line[6:])
|
||||
assert fp.read() == line
|
||||
|
||||
elif line.startswith("Subject: "):
|
||||
subject = line[9:].rstrip("\r\n")
|
||||
assert fp.read() == line
|
||||
while True:
|
||||
line = fp.peek()
|
||||
if not line.startswith(" "): break
|
||||
subject += line.rstrip("\r\n")
|
||||
assert fp.read() == line
|
||||
subject, revision = _parse_subject(subject)
|
||||
if not subject.endswith("."): subject += "."
|
||||
header['subject'], header['revision'] = subject, revision
|
||||
|
||||
elif line.startswith("diff --git "):
|
||||
tmp = line.strip().split(" ")
|
||||
if len(tmp) != 4: raise PatchParserError("Unable to parse git diff header line '%s'." % line)
|
||||
yield _read_single_patch(fp, tmp[2].strip(), tmp[3].strip())
|
||||
yield _read_single_patch(fp, header, tmp[2].strip(), tmp[3].strip())
|
||||
|
||||
elif line.startswith("--- "):
|
||||
yield _read_single_patch(fp)
|
||||
yield _read_single_patch(fp, header)
|
||||
|
||||
elif line.startswith("@@ -") or line.startswith("+++ "):
|
||||
raise PatchParserError("Patch didn't start with a git or diff header.")
|
||||
|
||||
else:
|
||||
assert fp.read() == line
|
||||
|
||||
|
@@ -0,0 +1,288 @@
|
||||
From 7cb209e122fc503190dcad411483147ebc6d6cb4 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Tue, 11 Nov 2014 03:11:33 +0100
|
||||
Subject: ntdll: Implement emulation of SIDT instruction when using Exagear.
|
||||
|
||||
---
|
||||
configure.ac | 8 ++
|
||||
dlls/ntdll/signal_i386.c | 224 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 232 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 92d78a2..c88a139 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -32,6 +32,7 @@ AC_ARG_ENABLE(win16, AS_HELP_STRING([--disable-win16],[do not include Win16 supp
|
||||
AC_ARG_ENABLE(win64, AS_HELP_STRING([--enable-win64],[build a Win64 emulator on AMD64 (won't run Win32 binaries)]))
|
||||
AC_ARG_ENABLE(tests, AS_HELP_STRING([--disable-tests],[do not build the regression tests]))
|
||||
AC_ARG_ENABLE(maintainer-mode, AS_HELP_STRING([--enable-maintainer-mode],[enable maintainer-specific build rules]))
|
||||
+AC_ARG_ENABLE(exagear-compat, AS_HELP_STRING([--enable-exagear-compat],[use workarounds for known problems in the Exagear emulator]))
|
||||
|
||||
AC_ARG_WITH(alsa, AS_HELP_STRING([--without-alsa],[do not use the Alsa sound support]),
|
||||
[if test "x$withval" = "xno"; then ac_cv_header_sys_asoundlib_h=no; ac_cv_header_alsa_asoundlib_h=no; fi])
|
||||
@@ -367,6 +368,13 @@ fi
|
||||
WINE_WARNING_WITH(gettext,[test "$MSGFMT" = false],
|
||||
[gettext tools not found (or too old), translations won't be built.])
|
||||
|
||||
+dnl **** Enable Exagear workarounds ****
|
||||
+
|
||||
+if test "x$enable_exagear_compat" = "xyes"
|
||||
+then
|
||||
+ AC_DEFINE(EXAGEAR_COMPAT, 1, [Define if you want to enable Exagear emulator workarounds])
|
||||
+fi
|
||||
+
|
||||
dnl **** Check for some libraries ****
|
||||
|
||||
dnl Check for -li386 for NetBSD and OpenBSD
|
||||
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
|
||||
index 13df4bb..edf5ea8 100644
|
||||
--- a/dlls/ntdll/signal_i386.c
|
||||
+++ b/dlls/ntdll/signal_i386.c
|
||||
@@ -96,6 +96,14 @@ typedef struct
|
||||
BYTE Reserved4[96];
|
||||
} XMM_SAVE_AREA32;
|
||||
|
||||
+#include "pshpack1.h"
|
||||
+struct idtr
|
||||
+{
|
||||
+ WORD limit;
|
||||
+ BYTE *base;
|
||||
+};
|
||||
+#include "poppack.h"
|
||||
+
|
||||
/***********************************************************************
|
||||
* signal context platform-specific definitions
|
||||
*/
|
||||
@@ -1573,6 +1581,214 @@ static inline DWORD is_privileged_instr( CONTEXT *context )
|
||||
}
|
||||
}
|
||||
|
||||
+
|
||||
+#ifdef EXAGEAR_COMPAT
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * INSTR_GetOperandAddr
|
||||
+ *
|
||||
+ * Return the address of an instruction operand (from the mod/rm byte).
|
||||
+ */
|
||||
+static BYTE *INSTR_GetOperandAddr( CONTEXT *context, const BYTE *instr,
|
||||
+ int long_addr, int segprefix, int *len )
|
||||
+{
|
||||
+ int mod, rm, base = 0, index = 0, ss = 0, off;
|
||||
+
|
||||
+#define GET_VAL(val,type) \
|
||||
+ { *val = *(type *)instr; instr += sizeof(type); *len += sizeof(type); }
|
||||
+
|
||||
+ *len = 0;
|
||||
+ GET_VAL( &mod, BYTE );
|
||||
+ rm = mod & 7;
|
||||
+ mod >>= 6;
|
||||
+
|
||||
+ if (mod == 3)
|
||||
+ {
|
||||
+ switch(rm)
|
||||
+ {
|
||||
+ case 0: return (BYTE *)&context->Eax;
|
||||
+ case 1: return (BYTE *)&context->Ecx;
|
||||
+ case 2: return (BYTE *)&context->Edx;
|
||||
+ case 3: return (BYTE *)&context->Ebx;
|
||||
+ case 4: return (BYTE *)&context->Esp;
|
||||
+ case 5: return (BYTE *)&context->Ebp;
|
||||
+ case 6: return (BYTE *)&context->Esi;
|
||||
+ case 7: return (BYTE *)&context->Edi;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (long_addr)
|
||||
+ {
|
||||
+ if (rm == 4)
|
||||
+ {
|
||||
+ BYTE sib;
|
||||
+ GET_VAL( &sib, BYTE );
|
||||
+ rm = sib & 7;
|
||||
+ ss = sib >> 6;
|
||||
+ switch((sib >> 3) & 7)
|
||||
+ {
|
||||
+ case 0: index = context->Eax; break;
|
||||
+ case 1: index = context->Ecx; break;
|
||||
+ case 2: index = context->Edx; break;
|
||||
+ case 3: index = context->Ebx; break;
|
||||
+ case 4: index = 0; break;
|
||||
+ case 5: index = context->Ebp; break;
|
||||
+ case 6: index = context->Esi; break;
|
||||
+ case 7: index = context->Edi; break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ switch(rm)
|
||||
+ {
|
||||
+ case 0: base = context->Eax; break;
|
||||
+ case 1: base = context->Ecx; break;
|
||||
+ case 2: base = context->Edx; break;
|
||||
+ case 3: base = context->Ebx; break;
|
||||
+ case 4: base = context->Esp; break;
|
||||
+ case 5: base = context->Ebp; break;
|
||||
+ case 6: base = context->Esi; break;
|
||||
+ case 7: base = context->Edi; break;
|
||||
+ }
|
||||
+ switch (mod)
|
||||
+ {
|
||||
+ case 0:
|
||||
+ if (rm == 5) /* special case: ds:(disp32) */
|
||||
+ {
|
||||
+ GET_VAL( &base, DWORD );
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case 1: /* 8-bit disp */
|
||||
+ GET_VAL( &off, BYTE );
|
||||
+ base += (signed char)off;
|
||||
+ break;
|
||||
+
|
||||
+ case 2: /* 32-bit disp */
|
||||
+ GET_VAL( &off, DWORD );
|
||||
+ base += (signed long)off;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ else /* short address */
|
||||
+ {
|
||||
+ switch(rm)
|
||||
+ {
|
||||
+ case 0: /* ds:(bx,si) */
|
||||
+ base = LOWORD(context->Ebx) + LOWORD(context->Esi);
|
||||
+ break;
|
||||
+ case 1: /* ds:(bx,di) */
|
||||
+ base = LOWORD(context->Ebx) + LOWORD(context->Edi);
|
||||
+ break;
|
||||
+ case 2: /* ss:(bp,si) */
|
||||
+ base = LOWORD(context->Ebp) + LOWORD(context->Esi);
|
||||
+ break;
|
||||
+ case 3: /* ss:(bp,di) */
|
||||
+ base = LOWORD(context->Ebp) + LOWORD(context->Edi);
|
||||
+ break;
|
||||
+ case 4: /* ds:(si) */
|
||||
+ base = LOWORD(context->Esi);
|
||||
+ break;
|
||||
+ case 5: /* ds:(di) */
|
||||
+ base = LOWORD(context->Edi);
|
||||
+ break;
|
||||
+ case 6: /* ss:(bp) */
|
||||
+ base = LOWORD(context->Ebp);
|
||||
+ break;
|
||||
+ case 7: /* ds:(bx) */
|
||||
+ base = LOWORD(context->Ebx);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ switch(mod)
|
||||
+ {
|
||||
+ case 0:
|
||||
+ if (rm == 6) /* special case: ds:(disp16) */
|
||||
+ {
|
||||
+ GET_VAL( &base, WORD );
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case 1: /* 8-bit disp */
|
||||
+ GET_VAL( &off, BYTE );
|
||||
+ base += (signed char)off;
|
||||
+ break;
|
||||
+
|
||||
+ case 2: /* 16-bit disp */
|
||||
+ GET_VAL( &off, WORD );
|
||||
+ base += (signed short)off;
|
||||
+ break;
|
||||
+ }
|
||||
+ base &= 0xffff;
|
||||
+ }
|
||||
+ /* FIXME: we assume that all segments have a base of 0 */
|
||||
+ return (BYTE *)(base + (index << ss));
|
||||
+#undef GET_VAL
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * check_invalid_instr
|
||||
+ *
|
||||
+ * Support for instructions not implemented by Exagear.
|
||||
+ */
|
||||
+static inline BOOL check_invalid_instr( CONTEXT *context )
|
||||
+{
|
||||
+ const BYTE *instr;
|
||||
+ unsigned int prefix_count = 0;
|
||||
+ int len, long_addr = 1;
|
||||
+
|
||||
+ if (!wine_ldt_is_system( context->SegCs )) return FALSE;
|
||||
+ instr = (BYTE *)context->Eip;
|
||||
+
|
||||
+ for (;;) switch (*instr)
|
||||
+ {
|
||||
+ /* instruction prefixes */
|
||||
+ case 0x2e: /* %cs: */
|
||||
+ case 0x36: /* %ss: */
|
||||
+ case 0x3e: /* %ds: */
|
||||
+ case 0x26: /* %es: */
|
||||
+ case 0x64: /* %fs: */
|
||||
+ case 0x65: /* %gs: */
|
||||
+ case 0x66: /* opcode size */
|
||||
+ case 0x67: /* addr size */
|
||||
+ case 0xf0: /* lock */
|
||||
+ case 0xf2: /* repne */
|
||||
+ case 0xf3: /* repe */
|
||||
+ if (++prefix_count >= 15) return FALSE;
|
||||
+ if (*instr == 0x67) long_addr = !long_addr; /* addr size */
|
||||
+ instr++;
|
||||
+ continue;
|
||||
+ case 0x0f: /* extended instruction */
|
||||
+ switch (instr[1])
|
||||
+ {
|
||||
+ case 0x01:
|
||||
+ if (((instr[2] >> 3) & 7) == 1) /* sidt m */
|
||||
+ {
|
||||
+ struct idtr ret;
|
||||
+ BYTE *addr;
|
||||
+
|
||||
+ if ((instr[2] >> 6) == 3) return FALSE; /* loading to register not allowed */
|
||||
+ addr = INSTR_GetOperandAddr( context, instr + 2, long_addr, 0, &len );
|
||||
+
|
||||
+ /* fake IDT structure */
|
||||
+ ret.limit = 0xfff;
|
||||
+ ret.base = (void *)0xff000000;
|
||||
+ memcpy(addr, &ret, sizeof(ret));
|
||||
+
|
||||
+ context->Eip += prefix_count + len + 2;
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ return FALSE;
|
||||
+ default:
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#endif /* EXAGEAR_COMPAT */
|
||||
+
|
||||
+
|
||||
/***********************************************************************
|
||||
* check_invalid_gs
|
||||
*
|
||||
@@ -1902,6 +2118,14 @@ static void WINAPI raise_segv_exception( EXCEPTION_RECORD *rec, CONTEXT *context
|
||||
|
||||
switch(rec->ExceptionCode)
|
||||
{
|
||||
+#ifdef EXAGEAR_COMPAT
|
||||
+ case EXCEPTION_ILLEGAL_INSTRUCTION:
|
||||
+ {
|
||||
+ if (check_invalid_instr( context ))
|
||||
+ goto done;
|
||||
+ }
|
||||
+ break;
|
||||
+#endif
|
||||
case EXCEPTION_ACCESS_VIOLATION:
|
||||
if (rec->NumberParameters == 2)
|
||||
{
|
||||
--
|
||||
2.1.3
|
||||
|
1621
patches/Makefile
1621
patches/Makefile
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
From 018b5f5d6211aa706e5aef762acb98d39240d9f1 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Sun, 20 Jul 2014 22:29:02 +0200
|
||||
Subject: wined3d: Silence repeated resource_check_usage FIXME.
|
||||
Subject: wined3d: Silence repeated resource_check_usage FIXME. (try 2)
|
||||
|
||||
---
|
||||
dlls/wined3d/resource.c | 5 ++++-
|
||||
|
@@ -1,16 +1,15 @@
|
||||
From fec987aaff3478e5325df368cce471109fe3c064 Mon Sep 17 00:00:00 2001
|
||||
From f56694f318ce0134317b812ff32f6c35875c31b3 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Fri, 8 Aug 2014 19:33:14 -0600
|
||||
Subject: Appease the blessed version of gcc (4.5) when -Werror is enabled.
|
||||
|
||||
---
|
||||
dlls/d3d9/tests/visual.c | 2 +-
|
||||
dlls/netapi32/netapi32.c | 2 +-
|
||||
dlls/winealsa.drv/mmdevdrv.c | 2 +-
|
||||
dlls/wined3d/glsl_shader.c | 2 +-
|
||||
server/object.c | 2 +-
|
||||
tools/makedep.c | 2 +-
|
||||
6 files changed, 6 insertions(+), 6 deletions(-)
|
||||
dlls/d3d9/tests/visual.c | 2 +-
|
||||
dlls/netapi32/netapi32.c | 2 +-
|
||||
dlls/winealsa.drv/mmdevdrv.c | 2 +-
|
||||
dlls/wined3d/glsl_shader.c | 2 +-
|
||||
tools/makedep.c | 2 +-
|
||||
5 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3d9/tests/visual.c b/dlls/d3d9/tests/visual.c
|
||||
index 117c8eb..3988628 100644
|
||||
@@ -52,10 +51,10 @@ index a4c02bf..909db53 100644
|
||||
static const WCHAR dashW[] = {' ','-',' ',0};
|
||||
static const size_t dashW_len = (sizeof(dashW) / sizeof(*dashW)) - 1;
|
||||
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
|
||||
index 1097d87..38d6cbd 100644
|
||||
index 34cc567..4f2a6c6 100644
|
||||
--- a/dlls/wined3d/glsl_shader.c
|
||||
+++ b/dlls/wined3d/glsl_shader.c
|
||||
@@ -5798,7 +5798,7 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
|
||||
@@ -5784,7 +5784,7 @@ static void set_glsl_shader_program(const struct wined3d_context *context, const
|
||||
GLhandleARB vs_id = 0;
|
||||
GLhandleARB gs_id = 0;
|
||||
GLhandleARB ps_id = 0;
|
||||
@@ -64,21 +63,8 @@ index 1097d87..38d6cbd 100644
|
||||
|
||||
if (!(context->shader_update_mask & (1 << WINED3D_SHADER_TYPE_VERTEX)))
|
||||
{
|
||||
diff --git a/server/object.c b/server/object.c
|
||||
index 11ef0ce..133c6b5 100644
|
||||
--- a/server/object.c
|
||||
+++ b/server/object.c
|
||||
@@ -428,7 +428,7 @@ int default_set_sd( struct object *obj, const struct security_descriptor *sd,
|
||||
{
|
||||
struct security_descriptor new_sd, *new_sd_ptr;
|
||||
int present;
|
||||
- const SID *owner, *group;
|
||||
+ const SID *owner = NULL, *group = NULL;
|
||||
const ACL *sacl, *dacl;
|
||||
char *ptr;
|
||||
|
||||
diff --git a/tools/makedep.c b/tools/makedep.c
|
||||
index 396a1e3..1261785 100644
|
||||
index 54aab45..103422e 100644
|
||||
--- a/tools/makedep.c
|
||||
+++ b/tools/makedep.c
|
||||
@@ -1480,7 +1480,7 @@ static char *get_make_variable( struct makefile *make, const char *name )
|
||||
@@ -91,5 +77,5 @@ index 396a1e3..1261785 100644
|
||||
expand = get_make_variable( make, name );
|
||||
if (!expand) return NULL;
|
||||
--
|
||||
1.7.9.5
|
||||
2.1.1
|
||||
|
||||
|
@@ -1,16 +0,0 @@
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: kernel32: Silence repeated CompareStringEx FIXME.
|
||||
|
||||
Revision: 2
|
||||
Author: Erich E. Hoover
|
||||
Title: wined3d: Silence repeated resource_check_usage FIXME.
|
||||
|
||||
Revision: 1
|
||||
Author: Sebastian Lackner
|
||||
Title: wined3d: Silence repeated wined3d_swapchain_present FIXME.
|
||||
|
||||
Revision: 1
|
||||
Author: Erich E. Hoover
|
||||
Title: Appease the blessed version of gcc (4.5) when -Werror is enabled.
|
||||
|
@@ -1,7 +1,7 @@
|
||||
From 70d9c625738a8c368e6276be3bed8baab9103083 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 2 May 2014 20:46:19 +0200
|
||||
Subject: user32: Decrease minimum SetTimer interval to 5 ms
|
||||
Subject: user32: Decrease minimum SetTimer interval to 5 ms. (try 2)
|
||||
|
||||
---
|
||||
dlls/user32/message.c | 2 +-
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user