From dc95c57c20fc04bc02e61c412bc8146f1c0a87f0 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 13 Jul 2014 01:30:44 +0200 Subject: [PATCH] Automatically generate installation instructions based on template whenever updating patches / version. --- README.md | 45 +++++++++++++- debian/tools/patchupdate.py | 116 ++++++++++++++++++++++++++++-------- 2 files changed, 133 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 808c72c3..99d530c4 100644 --- a/README.md +++ b/README.md @@ -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 +``` diff --git a/debian/tools/patchupdate.py b/debian/tools/patchupdate.py index dffeaaae..09420068 100755 --- a/debian/tools/patchupdate.py +++ b/debian/tools/patchupdate.py @@ -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")