Automatically generate installation instructions based on template whenever updating patches / version.

This commit is contained in:
Sebastian Lackner 2014-07-13 01:30:44 +02:00
parent a0a5084f55
commit dc95c57c20
2 changed files with 133 additions and 28 deletions

View File

@ -1,7 +1,8 @@
wine-compholio
==============
The Wine "Compholio" Edition repository includes a variety of patches for Wine to run common Windows applications under Linux.
The Wine "Compholio" Edition repository includes a variety of patches ") for
Wine to run common Windows applications under Linux.
These patches fix the following Wine bugs:
@ -16,7 +17,6 @@ These patches fix the following Wine bugs:
* Support for interface change notifications ([Wine Bug #32328](http://bugs.winehq.org/show_bug.cgi?id=32328 "Many .NET and Silverlight applications require SIO_ADDRESS_LIST_CHANGE for interface change notifications"))
* Support for inherited file ACLs ([Wine Bug #34406](http://bugs.winehq.org/show_bug.cgi?id=34406 "Finale Notepad 2012 doesn't copy/create user files on program start"))
Besides that the following additional changes are included:
* Lockfree algorithm for filedescriptor cache (improves file access speed)
@ -27,3 +27,44 @@ Besides that the following additional changes are included:
* Workaround for shlwapi URLs with relative paths
* XEMBED support for embedding Wine windows inside Linux applications
# Compiling wine-compholio
In order to wine-compholio, please use the recommended Makefile based approach which
will automatically decide whether to use 'git apply' or 'gitapply.sh'. The following
instructions (based on the [Gentoo Wiki](https://wiki.gentoo.org/wiki/Netflix/Pipelight#Compiling_manually)
will give a short overview how to compile wine-compholio, but of course not explain
details. Make sure to install all required wine dependencies before proceeding.
As the first step please grab the latest Wine source:
```bash
wget http://prdownloads.sourceforge.net/wine/wine-1.7.22.tar.bz2
wget https://github.com/compholio/wine-compholio-daily/archive/v1.7.22.tar.gz
```
Extract the archives:
```bash
tar xvjf wine-1*.tar.bz2
cd wine-1*
tar xvzf ../v1.7.22.tar.gz --strip-components 1
```
And apply the patches:
```bash
make -C ./patches DESTDIR=$(pwd) install
```
Afterwards run configure (you can also specify a prefix if you don't want to install
wine-compholio system-wide):
```bash
./configure --with-xattr
```
Before you continue you should make sure that ./configure doesn't show any warnings
(look at the end of the output). If there are any warnings, this most likely means
that you're missing some important header files. Install them and repeat the ./configure
step until all problems are fixed.
Afterwards compile it (and grab a cup of coffee):
```bash
make
```
And install it (you only need sudo for a system-wide installation):
```bash
sudo make install
```

View File

@ -197,6 +197,12 @@ def read_patchsets(directory):
return patches
def read_changelog():
with open("debian/changelog") as fp:
for line in fp:
r = re.match("^([a-zA-Z0-9][^(]*)\((.*)\) ([^;]*)", line)
if r: yield (r.group(1).strip(), r.group(2).strip(), r.group(3).strip())
def generate_makefile(patches, fp):
fp.write("#\n")
fp.write("# This file is automatically generated, DO NOT EDIT!\n")
@ -256,37 +262,95 @@ def generate_makefile(patches, fp):
fp.write("\ttouch %s.ok\n" % patch.name)
fp.write("\n");
README_template = """wine-compholio
==============
The Wine \"Compholio\" Edition repository includes a variety of patches ") for
Wine to run common Windows applications under Linux.
These patches fix the following Wine bugs:
@@bugs@@
Besides that the following additional changes are included:
@@fixes@@
# Compiling wine-compholio
In order to wine-compholio, please use the recommended Makefile based approach which
will automatically decide whether to use 'git apply' or 'gitapply.sh'. The following
instructions (based on the [Gentoo Wiki](https://wiki.gentoo.org/wiki/Netflix/Pipelight#Compiling_manually)
will give a short overview how to compile wine-compholio, but of course not explain
details. Make sure to install all required wine dependencies before proceeding.
As the first step please grab the latest Wine source:
```bash
wget http://prdownloads.sourceforge.net/wine/wine-@@version@@.tar.bz2
wget https://github.com/compholio/wine-compholio-daily/archive/v@@version@@.tar.gz
```
Extract the archives:
```bash
tar xvjf wine-1*.tar.bz2
cd wine-1*
tar xvzf ../v@@version@@.tar.gz --strip-components 1
```
And apply the patches:
```bash
make -C ./patches DESTDIR=$(pwd) install
```
Afterwards run configure (you can also specify a prefix if you don't want to install
wine-compholio system-wide):
```bash
./configure --with-xattr
```
Before you continue you should make sure that ./configure doesn't show any warnings
(look at the end of the output). If there are any warnings, this most likely means
that you're missing some important header files. Install them and repeat the ./configure
step until all problems are fixed.
Afterwards compile it (and grab a cup of coffee):
```bash
make
```
And install it (you only need sudo for a system-wide installation):
```bash
sudo make install
```
"""
def generate_readme(patches, fp):
fp.write("wine-compholio\n")
fp.write("==============\n")
fp.write("\n")
fp.write("The Wine \"Compholio\" Edition repository includes a variety of patches ")
fp.write("for Wine to run common Windows applications under Linux.\n")
fp.write("\n")
fp.write("These patches fix the following Wine bugs:\n")
fp.write("\n")
all_bugs = []
for i, patch in patches.iteritems():
for (bugid, bugname, description) in patch.fixes:
if bugid is not None: all_bugs.append((bugid, bugname, description))
for (bugid, bugname, description) in sorted(all_bugs):
if description is None: description = bugname
fp.write("* %s ([Wine Bug #%d](http://bugs.winehq.org/show_bug.cgi?id=%d \"%s\"))\n" % (description, bugid, bugid, bugname))
def _all_bugs():
all_bugs = []
for i, patch in patches.iteritems():
for (bugid, bugname, description) in patch.fixes:
if bugid is not None: all_bugs.append((bugid, bugname, description))
for (bugid, bugname, description) in sorted(all_bugs):
if description is None: description = bugname
yield "%s ([Wine Bug #%d](http://bugs.winehq.org/show_bug.cgi?id=%d \"%s\"))" % (description, bugid, bugid, bugname)
fp.write("\n")
fp.write("\n")
fp.write("Besides that the following additional changes are included:\n")
fp.write("\n")
def _all_fixes():
all_fixes = []
for i, patch in patches.iteritems():
for (bugid, bugname, description) in patch.fixes:
if bugid is None: all_fixes.append(description)
for description in sorted(all_fixes):
yield description
all_fixes = []
for i, patch in patches.iteritems():
for (bugid, bugname, description) in patch.fixes:
if bugid is None: all_fixes.append(description)
for description in sorted(all_fixes):
fp.write("* %s\n" % description)
def _enum(x):
return "* " + "\n* ".join(x)
fp.write("\n")
def _latest_stable_version():
for package, version, distro in read_changelog():
if distro.lower() == "unreleased": continue
return version
template = README_template
template = template.replace("@@bugs@@", _enum(_all_bugs()))
template = template.replace("@@fixes@@", _enum(_all_fixes()))
template = template.replace("@@version@@", _latest_stable_version())
fp.write(template)
if __name__ == "__main__":
patches = read_patchsets("./patches")