[med-svn] [Git][med-team/pdb2pqr][master] 9 commits: replace 2to3.patch with python3_PR516.patch

Drew Parsons gitlab at salsa.debian.org
Thu Mar 26 19:18:33 GMT 2020



Drew Parsons pushed to branch master at Debian Med / pdb2pqr


Commits:
7fd23fce by Drew Parsons at 2020-03-27T00:33:10+08:00
replace 2to3.patch with python3_PR516.patch

Applies upstream PR#516 porting from Python2 to Python3.

- - - - -
6ded87eb by Drew Parsons at 2020-03-27T01:13:38+08:00
reinstate scons part of 2to3.patch as python3_scons.patch

Upstream PR#516 (python3_PR516.patch) does not address the Scons build
system.

Also update PyInt_FromLong to PyLong_FromLong in Algorithms.cpp.

- - - - -
15ee09f5 by Drew Parsons at 2020-03-27T01:15:18+08:00
Standards-Version: 4.5.0

- - - - -
2ff9b2d3 by Drew Parsons at 2020-03-27T01:20:42+08:00
add debian patch python3_scriptbang.patch

updates script hashbangs to python3

- - - - -
13ee0082 by Drew Parsons at 2020-03-27T01:58:31+08:00
close privacy breach by replacing hrefs to http://agave.wustl.edu/css/baker.css

replace with "local" baker.css

Actually this url at agave.wustl.edu is no longer available, but
that's a different problem (reported upstream, Issue#537)

Process after dh_installexamples not dh_installdocs, since
dh_installexamples is later in the dh sequence (for processing
examples/index.html)

- - - - -
ac9a05e6 by Drew Parsons at 2020-03-27T02:48:43+08:00
reinstate python3_sundry.patch from 2to3.patch

adds more python3 patches missing in upstream PR#516.

- - - - -
491693c5 by Drew Parsons at 2020-03-27T02:59:38+08:00
update debian/tests

to python3-networkx,
access 1a1a under its directory

- - - - -
dc3f697b by Drew Parsons at 2020-03-27T03:03:22+08:00
mark pdb2pqr-doc Multi-Arch: foreign

- - - - -
aa9f2885 by Drew Parsons at 2020-03-27T03:08:34+08:00
upload 2.1.1+dfsg-6 to unstable

- - - - -


11 changed files:

- debian/changelog
- debian/control
- − debian/patches/2to3.patch
- + debian/patches/python3_PR516.patch
- + debian/patches/python3_scons.patch
- + debian/patches/python3_scriptbang.patch
- + debian/patches/python3_sundry.patch
- debian/patches/series
- debian/rules
- debian/tests/control
- debian/tests/pdb2pka-test


Changes:

=====================================
debian/changelog
=====================================
@@ -1,10 +1,13 @@
-pdb2pqr (2.1.1+dfsg-6) UNRELEASED; urgency=medium
+pdb2pqr (2.1.1+dfsg-6) unstable; urgency=medium
 
-  * Use 2to3 to port from Python2 to Python3
-    Closes: #937262
+  * Team upload.
+
+  [ Andreas Tille ]
+  * python3_scons.patch, python3_sundry.patch port Scons and other
+    sundry files from Python2 to Python3 missed by upstream PR#516.
+    Closes: #937262.
   * Re-activate other part of autopkgtest
   * debhelper-compat 12
-  * Standards-Version: 4.4.1
   * Remove trailing whitespace in debian/changelog
   * Remove trailing whitespace in debian/control
   * Remove trailing whitespace in debian/copyright
@@ -12,7 +15,16 @@ pdb2pqr (2.1.1+dfsg-6) UNRELEASED; urgency=medium
   * Use Debian packaged scons
   TODO: convince scons to install do $(CURDIR)/debian/tmp
 
- -- Andreas Tille <tille at debian.org>  Thu, 12 Dec 2019 15:41:47 +0100
+  [ Drew Parsons ]
+  * Use python3_PR516.patch to apply upstream PR#516 porting from
+    Python2 to Python3.
+  * python3_scriptbang.patch updates script hashbangs to python3
+  * Standards-Version: 4.5.0
+  * close privacy breach by replacing hrefs to
+    http://agave.wustl.edu/css/baker.css (which is no longer
+    available) to baker.css
+
+ -- Drew Parsons <dparsons at debian.org>  Fri, 27 Mar 2020 03:08:11 +0800
 
 pdb2pqr (2.1.1+dfsg-5) unstable; urgency=medium
 


=====================================
debian/control
=====================================
@@ -16,7 +16,7 @@ Build-Depends: debhelper-compat (= 12),
                scons (>= 3.1.1-4),
                dos2unix,
                pkg-config
-Standards-Version: 4.4.1
+Standards-Version: 4.5.0
 Vcs-Browser: https://salsa.debian.org/med-team/pdb2pqr
 Vcs-Git: https://salsa.debian.org/med-team/pdb2pqr.git
 Homepage: https://www.cgl.ucsf.edu/chimera/docs/ContributedSoftware/apbs/pdb2pqr.html
@@ -50,6 +50,7 @@ Description: Preparation of protein structures for electrostatics calculations
 
 Package: pdb2pqr-doc
 Architecture: all
+Multi-Arch: foreign
 Section: doc
 Depends: ${misc:Depends}
 Recommends: pdb2pqr


=====================================
debian/patches/2to3.patch deleted
=====================================
The diff for this file was not included because it is too large.

=====================================
debian/patches/python3_PR516.patch
=====================================
The diff for this file was not included because it is too large.

=====================================
debian/patches/python3_scons.patch
=====================================
@@ -0,0 +1,810 @@
+Description: Use 2to3 to port from Python2 to Python3
+Bug-Debian: https://bugs.debian.org/937262
+Author: Andreas Tille <tille at debian.org>
+Last-Update: Thu, 12 Dec 2019 15:41:47 +0100
+
+--- a/SConscript-error.py
++++ b/SConscript-error.py
+@@ -67,11 +67,11 @@
+     
+     status, failures_message = build_status()
+     if status == 'failed':
+-        print
+-        print "FAILED!!!!"  # could display alert, ring bell, etc.
++        print()
++        print("FAILED!!!!")  # could display alert, ring bell, etc.
+     elif status == 'ok':
+-        print
+-        print "Build succeeded."
+-    print failures_message
++        print()
++        print("Build succeeded.")
++    print(failures_message)
+ 
+ atexit.register(display_build_status)
+\ No newline at end of file
+--- a/SConscript-install.py
++++ b/SConscript-install.py
+@@ -102,7 +102,7 @@
+ 	
+ Alias('install', env.Command(env['PREFIX']+'tmp', None,
+ 							[Mkdir('$TARGET'),
+-			 				Chmod('$TARGET', 0777)]))
++			 				Chmod('$TARGET', 0o777)]))
+ 
+ #Testing stuff to test installed pdb2pqr	
+ for dir_name in ('tests/',
+--- a/SConscript-main.py
++++ b/SConscript-main.py
+@@ -166,13 +166,13 @@
+ #Set up regex to alternately clear tags or wipe sections
+ if env['OPAL'] == '':
+     #Not using opal for pdb2pqr.
+-    print "not using opal", env['OPAL']
++    print("not using opal", env['OPAL'])
+     withOpalRegex = r'@WITHOPAL at .*?@WITHOPAL@'
+     withoutOpalRegex = '@WITHOUTOPAL@'
+ 
+ else:
+     #Using opal for pdb2pqr.
+-    print "using opal", env['OPAL']
++    print("using opal", env['OPAL'])
+     withOpalRegex = '@WITHOPAL@'
+     withoutOpalRegex = r'@WITHOUTOPAL at .*?@WITHOUTOPAL@'
+ 
+@@ -184,7 +184,7 @@
+                   withOpalRegex:'',
+                   withoutOpalRegex:''}
+ 
+-chmodAction = Chmod('$TARGET', 0755)
++chmodAction = Chmod('$TARGET', 0o755)
+ serverHtmlCopySub = CopySub('$TARGET', '$SOURCE', serverHtmlDict, useRegex=True)
+ normalCopySub = CopySub('$TARGET', '$SOURCE', replacementDict, useRegex=False)
+ 
+@@ -217,7 +217,7 @@
+     try:
+         import numpy
+     except ImportError:
+-        print 'WARNING: PDB2PKA build skipped, numpy not installed. Ligand support will not be available.'
++        print('WARNING: PDB2PKA build skipped, numpy not installed. Ligand support will not be available.')
+         numpy_error = True
+ 
+     if not numpy_error:
+@@ -234,9 +234,9 @@
+         compile_targets.append(algorithms_pyc)
+ 
+         if os.name == 'nt':
+-            alg_msvs_env = env.Clone(MSVSBUILDCOM='cd .. && '+pythonBin+' scons/scons.py algorithms DEBUG=True',
+-                                     MSVSCLEANCOM='cd .. && '+pythonBin+' scons/scons.py -c algorithms',
+-                                     MSVSREBUILDCOM='cd .. && '+pythonBin+' scons/scons.py -c algorithms && '+pythonBin+' scons/scons.py algorithms DEBUG=True')
++            alg_msvs_env = env.Clone(MSVSBUILDCOM='cd .. && scons algorithms DEBUG=True',
++                                     MSVSCLEANCOM='cd .. && scons -c algorithms',
++                                     MSVSREBUILDCOM='cd .. && scons -c algorithms && scons algorithms DEBUG=True')
+ 
+             algorithms_project = alg_msvs_env.MSVSProject(target = 'msvs/Algorithms' + env['MSVSPROJECTSUFFIX'],
+                                                           auto_build_solution=0,
+@@ -259,9 +259,9 @@
+         compile_targets.append(pmc_pyc)
+ 
+         if os.name == 'nt':
+-            pmc_msvs_env = env.Clone(MSVSBUILDCOM='cd .. && '+pythonBin+' scons/scons.py pmc_mult DEBUG=True'+build_swig,
+-                                     MSVSCLEANCOM='cd .. && '+pythonBin+' scons/scons.py -c pmc_mult',
+-                                     MSVSREBUILDCOM='cd .. && '+pythonBin+' scons/scons.py -c pmc_mult && '+pythonBin+' scons/scons.py pmc_mult DEBUG=True'+build_swig)
++            pmc_msvs_env = env.Clone(MSVSBUILDCOM='cd .. && scons pmc_mult DEBUG=True'+build_swig,
++                                     MSVSCLEANCOM='cd .. && scons -c pmc_mult',
++                                     MSVSREBUILDCOM='cd .. && scons -c pmc_mult && scons pmc_mult DEBUG=True'+build_swig)
+ 
+             pmc_mult_project = pmc_msvs_env.MSVSProject(target = 'msvs/pMC_mult' + env['MSVSPROJECTSUFFIX'],
+                                                         auto_build_solution=0,
+@@ -285,65 +285,65 @@
+ SConscript('SConscript-error.py')
+ 
+ def print_default_message(target_list):
+-    target_list = map(str, target_list)
++    target_list = list(map(str, target_list))
+     if any('test' in x for x in target_list):
+         return
+     if GetOption("clean"):
+         return
+     if not GetOption("help"):
+ 
+-        print
+-        print 'TARGETS:', target_list
+-        print
+-        print '========================'
+-        print 'Configuration Parameters'
+-        print '========================'
+-        print
+-        print 'Version:', productVersion
+-        print 'Install directory:', env['PREFIX']
++        print()
++        print('TARGETS:', target_list)
++        print()
++        print('========================')
++        print('Configuration Parameters')
++        print('========================')
++        print()
++        print('Version:', productVersion)
++        print('Install directory:', env['PREFIX'])
+         if numpy_error:
+-            print
+-            print 'WARNING: PDB2PKA build skipped, numpy not installed. Ligand support will not be available.'
+-            print
++            print()
++            print('WARNING: PDB2PKA build skipped, numpy not installed. Ligand support will not be available.')
++            print()
+         else:
+-            print 'pdb2pka and ligand support:', env['BUILD_PDB2PKA']
+-        print 'Path to the website directory:', url
++            print('pdb2pka and ligand support:', env['BUILD_PDB2PKA'])
++        print('Path to the website directory:', url)
+         if env['OPAL'] == '':
+-            print 'PDB2PQR jobs run via the web interface will be forked on the server.'
++            print('PDB2PQR jobs run via the web interface will be forked on the server.')
+         else:
+-            print 'PDB2PQR jobs run via the web interface will be run via opal at', env['OPAL']
++            print('PDB2PQR jobs run via the web interface will be run via opal at', env['OPAL'])
+     else:
+-        print
+-        print 'Run "python scons/scons.py" to build pdb2pqr.'
++        print()
++        print('Run "scons" to build pdb2pqr.')
+ 
+-    print
+-    print 'The preferred way to configure the build is by editing the file', config_file
+-    print
+-    print 'Run scons with the python that you intend to use with pdb2pqr.'
+-    print 'For example: "/opt/bin/python scons/scons.py" will setup pdb2pqr to be run with /opt/bin/python'
++    print()
++    print('The preferred way to configure the build is by editing the file', config_file)
++    print()
++    print('Run scons with the python3 that you intend to use with pdb2pqr.')
++    print('For example: "scons" will setup pdb2pqr to be run with Debian default Python3 interpreter')
+ 
+     if 'install' not in target_list:
+-        print
+-        print 'Run "python scons/scons.py install" to install pdb2pqr in', env['PREFIX']
++        print()
++        print('Run "scons install" to install pdb2pqr in', env['PREFIX'])
+ 
+-    print
+-    print 'Run "python scons/scons.py basic-test" for a basic functionality test'
+-    print 'Run "python scons/scons.py advanced-test" for a single test of ligand and PROPKA support. Requires numpy and PDB2PKA support compiled.'
+-    print 'Run "python scons/scons.py complete-test" for a complete test of all functionality EXCEPT PDB2PKA. Requires numpy and PDB2PKA support compiled.'
+-    print 'Run "python scons/scons.py pdb2pka-test" for a test of PDB2PKA functionality.'
+-    print '    Requires numpy, PDB2PKA support compiled AND the APBS python libraries compiled and installed in the pdb2pka directory.'
+-
+-    print
+-    print 'To setup a web service create a symbolic link to', env['PREFIX'], 'that enables you to view', env['URL'],'after running "scons/scons.py install"'
+-    print
+-    print 'Run "python scons/scons.py msvs" to build Visual Studio projects for the Algorithms and pMC_mult modules.'
+-    print 'VS project generation is not well supported in scons. Resulting projects should build using NMAKE but cannot be used for debugging.'
+-    print 'The resulting projects will need to modified to use VS natively to compile the code or debug.'
++    print()
++    print('Run "scons basic-test" for a basic functionality test')
++    print('Run "scons advanced-test" for a single test of ligand and PROPKA support. Requires numpy and PDB2PKA support compiled.')
++    print('Run "scons complete-test" for a complete test of all functionality EXCEPT PDB2PKA. Requires numpy and PDB2PKA support compiled.')
++    print('Run "scons pdb2pka-test" for a test of PDB2PKA functionality.')
++    print('    Requires numpy, PDB2PKA support compiled AND the APBS python3 libraries compiled and installed in the pdb2pka directory.')
++
++    print()
++    print('To setup a web service create a symbolic link to', env['PREFIX'], 'that enables you to view', env['URL'],'after running "scons install"')
++    print()
++    print('Run "scons msvs" to build Visual Studio projects for the Algorithms and pMC_mult modules.')
++    print('VS project generation is not well supported in scons. Resulting projects should build using NMAKE but cannot be used for debugging.')
++    print('The resulting projects will need to modified to use VS natively to compile the code or debug.')
+ 
+ 
+     if 'install' in target_list:
+-        print
+-        print 'pdb2pqr installed in', env['PREFIX']
++        print()
++        print('pdb2pqr installed in', env['PREFIX'])
+ 
+ 
+ atexit.register(print_default_message, BUILD_TARGETS)
+--- a/fabfile.py
++++ b/fabfile.py
+@@ -51,7 +51,7 @@
+                 arcname = os.path.join(self.prefix, name)
+ 
+         self.tar.add(name, arcname)
+-        print('Packing file: ' + name if arcname is None else arcname)
++        print(('Packing file: ' + name if arcname is None else arcname))
+ 
+     def close(self):
+         self.tar.close()
+@@ -97,7 +97,7 @@
+     local("move pdb2pqr-src-"+pv+'.tar.gz dist_files\\')
+ 
+ def deploy():
+-    python = 'python2.7'
++    python = 'python3'
+ 
+     put('pdb2pqr.tgz', '~/')
+     with settings(warn_only=True):
+@@ -106,15 +106,15 @@
+ 
+     with cd('~/tmp/'):
+         run('tar -zxvf ~/pdb2pqr.tgz')
+-        run(python+' scons/scons.py')
++        run('scons')
+ 
+         if run_tests:
+-            run(python+' scons/scons.py -j 4 pdb2pka-test')
+-            run(python+' scons/scons.py -j 4 complete-test')
++            run('scons -j 4 pdb2pka-test')
++            run('scons -j 4 complete-test')
+ 
+ 
+ def install_on_deployed():
+-    python = 'python2.7'
++    python = 'python3'
+ 
+     with settings(warn_only=True):
+         with cd('~/www/pdb2pqr'):
+@@ -147,8 +147,8 @@
+ #             configopts += ' PREFIX=/Users/d3k084/www/pdb2pqr/'
+ #             configopts += ' URL=http://PT24098/d3k084/pdb2pqr'
+ 
+-        run(python+' scons/scons.py ' + configopts)
+-        run(python+' scons/scons.py install ' + configopts)
++        run('scons ' + configopts)
++        run('scons install ' + configopts)
+ 
+ def build_binary_from_deploy():
+     create_dist_folder()
+@@ -190,11 +190,11 @@
+ @runs_once
+ def build_windows():
+     local(r'copy apbs_libs\windows\* pdb2pka\\')
+-    local(r'python scons\scons.py -c')
+-    local(r'python scons\scons.py')
++    local(r'python3 scons\scons.py -c')
++    local(r'python3 scons\scons.py')
+     if run_tests:
+-        local(r'python scons\scons.py -j 4 pdb2pka-test')
+-        local(r'python scons\scons.py -j 7 complete-test')
++        local(r'python3 scons\scons.py -j 4 pdb2pka-test')
++        local(r'python3 scons\scons.py -j 7 complete-test')
+ 
+     build_windows_binary()
+     if run_tests:
+@@ -219,12 +219,12 @@
+     zip_file = zipfile.ZipFile(name + '.zip', 'w', zipfile.ZIP_DEFLATED)
+     for root, _, files in os.walk(r'dist\\'+name):
+         new_root = root.split('/', 1)[-1]
+-        print root
++        print(root)
+         for f in files:
+             zip_file_path = os.path.join(new_root,f)
+             real_file_path = os.path.join(root,f)
+             zip_file.write(real_file_path, zip_file_path)
+-            print 'Zipping ' + zip_file_path
++            print('Zipping ' + zip_file_path)
+     zip_file.close()
+     create_dist_folder()
+     local('move /Y ' + name + '.zip' + r' dist_files\\' + name + '.zip')
+--- a/scons/scons-time.py
++++ b/scons/scons-time.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python3
+ #
+ # scons-time - run SCons timings and collect statistics
+ #
+@@ -29,8 +29,8 @@
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+-from __future__ import division
+-from __future__ import nested_scopes
++
++
+ 
+ __revision__ = "src/script/scons-time.py  2014/08/24 12:12:31 garyo"
+ 
+@@ -109,8 +109,8 @@
+     internal functions.
+     '''
+     if not args:          exec(cmd)
+-    elif len(args) == 1:  exec cmd in args[0]
+-    else:                 exec cmd in args[0], args[1]
++    elif len(args) == 1:  exec(cmd, args[0])
++    else:                 exec(cmd, args[0], args[1])
+ 
+ class Plotter(object):
+     def increment_size(self, largest):
+@@ -146,7 +146,7 @@
+ 
+     def print_label(self, inx, x, y):
+         if self.label:
+-            print 'set label %s "%s" at %s,%s right' % (inx, self.label, x, y)
++            print('set label %s "%s" at %s,%s right' % (inx, self.label, x, y))
+ 
+     def plot_string(self):
+         if self.title:
+@@ -159,15 +159,15 @@
+         if fmt is None:
+             fmt = self.fmt
+         if self.comment:
+-            print '# %s' % self.comment
++            print('# %s' % self.comment)
+         for x, y in self.points:
+             # If y is None, it usually represents some kind of break
+             # in the line's index number.  We might want to represent
+             # this some way rather than just drawing the line straight
+             # between the two points on either side.
+             if not y is None:
+-                print fmt % (x, y)
+-        print 'e'
++                print(fmt % (x, y))
++        print('e')
+ 
+     def get_x_values(self):
+         return [ p[0] for p in self.points ]
+@@ -253,8 +253,8 @@
+             return
+ 
+         if self.title:
+-            print 'set title "%s"' % self.title
+-        print 'set key %s' % self.key_location
++            print('set title "%s"' % self.title)
++        print('set key %s' % self.key_location)
+ 
+         min_y = self.get_min_y()
+         max_y = self.max_graph_value(self.get_max_y())
+@@ -269,7 +269,7 @@
+             inx += 1
+ 
+         plot_strings = [ self.plot_string(l) for l in self.lines ]
+-        print 'plot ' + ', \\\n     '.join(plot_strings)
++        print('plot ' + ', \\\n     '.join(plot_strings))
+ 
+         for line in self.lines:
+             line.print_points()
+@@ -540,7 +540,7 @@
+         header_fmt = ' '.join(['%12s'] * len(columns))
+         line_fmt = header_fmt + '    %s'
+ 
+-        print header_fmt % columns
++        print(header_fmt % columns)
+ 
+         for file in files:
+             t = line_function(file, *args, **kw)
+@@ -550,7 +550,7 @@
+             if diff > 0:
+                 t += [''] * diff
+             t.append(file_function(file))
+-            print line_fmt % tuple(t)
++            print(line_fmt % tuple(t))
+ 
+     def collect_results(self, files, function, *args, **kw):
+         results = {}
+@@ -690,13 +690,13 @@
+         """
+         try:
+             import pstats
+-        except ImportError, e:
++        except ImportError as e:
+             sys.stderr.write('%s: func: %s\n' % (self.name, e))
+             sys.stderr.write('%s  This version of Python is missing the profiler.\n' % self.name_spaces)
+             sys.stderr.write('%s  Cannot use the "func" subcommand.\n' % self.name_spaces)
+             sys.exit(1)
+         statistics = pstats.Stats(file).stats
+-        matches = [ e for e in statistics.items() if e[0][2] == function ]
++        matches = [ e for e in list(statistics.items()) if e[0][2] == function ]
+         r = matches[0]
+         return r[0][0], r[0][1], r[0][2], r[1][3]
+ 
+@@ -751,7 +751,7 @@
+             return self.default(argv)
+         try:
+             return func(argv)
+-        except TypeError, e:
++        except TypeError as e:
+             sys.stderr.write("%s %s: %s\n" % (self.name, cmdName, e))
+             import traceback
+             traceback.print_exc(file=sys.stderr)
+@@ -856,7 +856,7 @@
+                 self.title = a
+ 
+         if self.config_file:
+-            exec open(self.config_file, 'rU').read() in self.__dict__
++            exec(open(self.config_file, 'rU').read(), self.__dict__)
+ 
+         if self.chdir:
+             os.chdir(self.chdir)
+@@ -889,13 +889,13 @@
+                 try:
+                     f, line, func, time = \
+                             self.get_function_profile(file, function_name)
+-                except ValueError, e:
++                except ValueError as e:
+                     sys.stderr.write("%s: func: %s: %s\n" %
+                                      (self.name, file, e))
+                 else:
+                     if f.startswith(cwd_):
+                         f = f[len(cwd_):]
+-                    print "%.3f %s:%d(%s)" % (time, f, line, func)
++                    print("%.3f %s:%d(%s)" % (time, f, line, func))
+ 
+         elif format == 'gnuplot':
+ 
+@@ -1233,7 +1233,7 @@
+             sys.exit(1)
+ 
+         if self.config_file:
+-            exec open(self.config_file, 'rU').read() in self.__dict__
++            exec(open(self.config_file, 'rU').read(), self.__dict__)
+ 
+         if args:
+             self.archive_list = args
+@@ -1466,7 +1466,7 @@
+             elif o in ('--title',):
+                 self.title = a
+             elif o in ('--which',):
+-                if not a in self.time_strings.keys():
++                if not a in list(self.time_strings.keys()):
+                     sys.stderr.write('%s: time: Unrecognized timer "%s".\n' % (self.name, a))
+                     sys.stderr.write('%s  Type "%s help time" for help.\n' % (self.name_spaces, self.name))
+                     sys.exit(1)
+--- a/scons/scons.py
++++ b/scons/scons.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python3
+ #
+ # SCons - a Software Constructor
+ #
+@@ -191,7 +191,7 @@
+     except:
+         print("Import failed. Unable to find SCons files in:")
+         for path in libs:
+-          print "  %s" % path
++          print("  %s" % path)
+         raise
+ 
+     # this does all the work, and calls sys.exit
+--- a/scons/sconsign.py
++++ b/scons/sconsign.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python3
+ #
+ # SCons - a Software Constructor
+ #
+@@ -171,7 +171,7 @@
+ 
+ import SCons.compat   # so pickle will import cPickle instead
+ 
+-import whichdb
++import dbm
+ import time
+ import pickle
+ import imp
+@@ -189,8 +189,8 @@
+         pass
+     return _orig_whichdb(filename)
+ 
+-_orig_whichdb = whichdb.whichdb
+-whichdb.whichdb = my_whichdb
++_orig_whichdb = dbm.whichdb
++dbm.whichdb = my_whichdb
+ 
+ def my_import(mname):
+     if '.' in mname:
+@@ -310,14 +310,14 @@
+     outlist = field("implicit", entry, 0)
+     if outlist:
+         if Verbose:
+-            print "    implicit:"
+-        print "        " + outlist
++            print("    implicit:")
++        print("        " + outlist)
+     outact = field("action", entry, 0)
+     if outact:
+         if Verbose:
+-            print "    action: " + outact
++            print("    action: " + outact)
+         else:
+-            print "        " + outact
++            print("        " + outact)
+ 
+ def printentries(entries, location):
+     if Print_Entries:
+@@ -330,9 +330,9 @@
+                 try:
+                     ninfo = entry.ninfo
+                 except AttributeError:
+-                    print name + ":"
++                    print(name + ":")
+                 else:
+-                    print nodeinfo_string(name, entry.ninfo)
++                    print(nodeinfo_string(name, entry.ninfo))
+                 printfield(name, entry.binfo)
+     else:
+         for name in sorted(entries.keys()):
+@@ -340,9 +340,9 @@
+             try:
+                 ninfo = entry.ninfo
+             except AttributeError:
+-                print name + ":"
++                print(name + ":")
+             else:
+-                print nodeinfo_string(name, entry.ninfo)
++                print(nodeinfo_string(name, entry.ninfo))
+             printfield(name, entry.binfo)
+ 
+ class Do_SConsignDB(object):
+@@ -361,7 +361,7 @@
+             #   .sconsign               => .sconsign.dblite
+             #   .sconsign.dblite        => .sconsign.dblite.dblite
+             db = self.dbm.open(fname, "r")
+-        except (IOError, OSError), e:
++        except (IOError, OSError) as e:
+             print_e = e
+             try:
+                 # That didn't work, so try opening the base name,
+@@ -375,7 +375,7 @@
+                 # suffix-mangling).
+                 try:
+                     open(fname, "r")
+-                except (IOError, OSError), e:
++                except (IOError, OSError) as e:
+                     # Nope, that file doesn't even exist, so report that
+                     # fact back.
+                     print_e = e
+@@ -386,7 +386,7 @@
+         except pickle.UnpicklingError:
+             sys.stderr.write("sconsign: ignoring invalid `%s' file `%s'\n" % (self.dbm_name, fname))
+             return
+-        except Exception, e:
++        except Exception as e:
+             sys.stderr.write("sconsign: ignoring invalid `%s' file `%s': %s\n" % (self.dbm_name, fname, e))
+             return
+ 
+@@ -403,13 +403,13 @@
+                 self.printentries(dir, db[dir])
+ 
+     def printentries(self, dir, val):
+-        print '=== ' + dir + ':'
++        print('=== ' + dir + ':')
+         printentries(pickle.loads(val), dir)
+ 
+ def Do_SConsignDir(name):
+     try:
+         fp = open(name, 'rb')
+-    except (IOError, OSError), e:
++    except (IOError, OSError) as e:
+         sys.stderr.write("sconsign: %s\n" % (e))
+         return
+     try:
+@@ -419,7 +419,7 @@
+     except pickle.UnpicklingError:
+         sys.stderr.write("sconsign: ignoring invalid .sconsign file `%s'\n" % (name))
+         return
+-    except Exception, e:
++    except Exception as e:
+         sys.stderr.write("sconsign: ignoring invalid .sconsign file `%s': %s\n" % (name, e))
+         return
+     printentries(sconsign.entries, args[0])
+@@ -471,13 +471,13 @@
+                 dbm = my_import(dbm_name)
+             except:
+                 sys.stderr.write("sconsign: illegal file format `%s'\n" % a)
+-                print helpstr
++                print(helpstr)
+                 sys.exit(2)
+             Do_Call = Do_SConsignDB(a, dbm)
+         else:
+             Do_Call = Do_SConsignDir
+     elif o in ('-h', '--help'):
+-        print helpstr
++        print(helpstr)
+         sys.exit(0)
+     elif o in ('-i', '--implicit'):
+         Print_Flags['implicit'] = 1
+@@ -497,7 +497,7 @@
+         Do_Call(a)
+ else:
+     for a in args:
+-        dbm_name = whichdb.whichdb(a)
++        dbm_name = dbm.whichdb(a)
+         if dbm_name:
+             Map_Module = {'SCons.dblite' : 'dblite'}
+             dbm = my_import(dbm_name)
+--- a/site_scons/site_init.py
++++ b/site_scons/site_init.py
+@@ -48,35 +48,35 @@
+             contents = f.read()
+             f.close()
+         except:
+-            raise SCons.Errors.UserError, "Can't read source file %s"%sourcefile
++            raise SCons.Errors.UserError("Can't read source file %s"%sourcefile)
+         if useRegex:
+-            for (k,v) in dict.items():
++            for (k,v) in list(dict.items()):
+                 #In 2.6 re.sub has no "flags" argument.
+                 mo = re.compile(k, flags=re.DOTALL)
+                 contents = mo.sub(v, contents)
+         else:
+-            for (k,v) in dict.items():
++            for (k,v) in list(dict.items()):
+                 contents = contents.replace(k, v)
+         try:
+             f = open(targetfile, 'wb')
+             f.write(contents)
+             f.close()
+         except:
+-            raise SCons.Errors.UserError, "Can't write target file %s"%targetfile
++            raise SCons.Errors.UserError("Can't write target file %s"%targetfile)
+         return 0 # success
+ 
+     def subst_in_file(target, source, env):
+         useRegex = env['SUBST_USE_REGEX'] if 'SUBST_USE_REGEX' in env else False
+         if 'SUBST_DICT' not in env:
+-            raise SCons.Errors.UserError, "SubstInFile requires SUBST_DICT to be set."
++            raise SCons.Errors.UserError("SubstInFile requires SUBST_DICT to be set.")
+         d = dict(env['SUBST_DICT']) # copy it
+-        for (k,v) in d.items():
++        for (k,v) in list(d.items()):
+             if callable(v):
+                 d[k] = env.subst(v())
+             elif SCons.Util.is_String(v):
+                 d[k]=env.subst(v)
+             else:
+-                raise SCons.Errors.UserError, "SubstInFile: key %s: %s must be a string or callable"%(k, repr(v))
++                raise SCons.Errors.UserError("SubstInFile: key %s: %s must be a string or callable"%(k, repr(v)))
+         for (t,s) in zip(target, source):
+             return do_subst_in_file(str(t), str(s), d, useRegex)
+ 
+@@ -90,7 +90,7 @@
+         Returns original target, source tuple unchanged.
+         """
+         d = env['SUBST_DICT'].copy() # copy it
+-        for (k,v) in d.items():
++        for (k,v) in list(d.items()):
+             if callable(v):
+                 d[k] = env.subst(v())
+             elif SCons.Util.is_String(v):
+@@ -108,25 +108,25 @@
+     1.2345 etc.
+     """
+     try:
+-        f = open(sourcefile, 'rb')
++        f = open(sourcefile, 'r')
+         contents = f.read()
+         f.close()
+     except:
+-        raise SCons.Errors.UserError, "Can't read source file %s"%sourcefile
++        raise SCons.Errors.UserError("Can't read source file %s"%sourcefile)
+     if useRegex:
+-        for (k,v) in dict.items():
++        for (k,v) in list(dict.items()):
+             #In 2.6 re.sub has no "flags" argument.
+             mo = re.compile(k, flags=re.DOTALL)
+             contents = mo.sub(v, contents)
+     else:
+-        for (k,v) in dict.items():
++        for (k,v) in list(dict.items()):
+             contents = contents.replace(k, v)
+     try:
+-        f = open(targetfile, 'wb')
++        f = open(targetfile, 'w')
+         f.write(contents)
+         f.close()
+     except:
+-        raise SCons.Errors.UserError, "Can't write target file %s"%targetfile
++        raise SCons.Errors.UserError("Can't write target file %s"%targetfile)
+     return 0 # success
+ 
+ def CopySubActionStringFunc(targetfile, sourcefile, dict, useRegex):
+@@ -138,12 +138,12 @@
+     try:
+         import py_compile
+     except ImportError:
+-        raise SCons.Errors.InternalError, "Couldn't import py_compile module"
++        raise SCons.Errors.InternalError("Couldn't import py_compile module")
+ 
+     try:
+         py_compile.compile(sourcefile, targetfile, doraise=True)
+     except py_compile.PyCompileError:
+-        raise SCons.Errors.InternalError, "Couldn't compile {0}".format(sourcefile)
++        raise SCons.Errors.InternalError("Couldn't compile {0}".format(sourcefile))
+ 
+ 
+ 
+--- a/site_scons/test_tools.py
++++ b/site_scons/test_tools.py
+@@ -1,4 +1,4 @@
+-from itertools import ifilter, izip_longest, izip
++from itertools import zip_longest
+ from glob import glob
+ from os import path
+ import csv
+@@ -31,19 +31,19 @@
+     return strings,ints,floats
+ 
+ def compareParsedAtoms(atom1, atom2):
+-    return atom1[0:1] == atom2[0:1] and all(abs(x-y)<0.1 for x,y in izip(atom1[2],atom2[2]))
++    return atom1[0:1] == atom2[0:1] and all(abs(x-y)<0.1 for x,y in zip(atom1[2],atom2[2]))
+ 
+ def ComparePQRAction(outputFileName, testFileName, correctFileName, has_chain=False):
+     failure = False
+     results = []
+     with open(testFileName) as testFile:
+         with open(correctFileName) as correctFile:
+-            testAtoms = ifilter(isAtomLine, testFile)
+-            correctAtoms = ifilter(isAtomLine, correctFile)
++            testAtoms = filter(isAtomLine, testFile)
++            correctAtoms = filter(isAtomLine, correctFile)
+             check_error = False
+             correct_total = 0.0
+             test_total = 0.0
+-            for testAtom, correctAtom in izip_longest(testAtoms, correctAtoms, fillvalue=None):
++            for testAtom, correctAtom in zip_longest(testAtoms, correctAtoms, fillvalue=None):
+                 if testAtom is None or correctAtom is None:
+                     results.append('TEST ERROR: Result file is the wrong length!\n')
+                     failure = True
+@@ -99,7 +99,7 @@
+         else:
+             combined[ph][1] = value
+ 
+-    keys = combined.keys()
++    keys = list(combined.keys())
+     keys.sort()
+ 
+     combined_list = [(combined[ph][0], combined[ph][1]) for ph in keys]
+@@ -166,12 +166,12 @@
+ 
+ 
+ def getSummaryLines(sourceFile):
+-    while 'SUMMARY' not in sourceFile.next():
++    while 'SUMMARY' not in next(sourceFile):
+         pass
+ 
+     #Skip header
+-    sourceFile.next()
+-    line = sourceFile.next()
++    next(sourceFile)
++    line = next(sourceFile)
+ 
+     results = []
+ 
+@@ -184,7 +184,7 @@
+ 
+         results.append((strings,floats))
+ 
+-        line = sourceFile.next()
++        line = next(sourceFile)
+ 
+     return results
+ 
+@@ -197,7 +197,7 @@
+             correctPKAs = getSummaryLines(correctFile)
+             correct_total = 0.0
+             test_total = 0.0
+-            for testPKA, correctPKA in izip_longest(testPKAs, correctPKAs, fillvalue=None):
++            for testPKA, correctPKA in zip_longest(testPKAs, correctPKAs, fillvalue=None):
+                 if testPKA is None or correctPKA is None:
+                     results.append('TEST ERROR: Result file is the wrong length!')
+                     failure = True
+--- a/tests/complete-test/SConscript
++++ b/tests/complete-test/SConscript
+@@ -108,7 +108,7 @@
+ 		  '--ff=AMBER --ligand=${SOURCES[1]} --whitespace')
+ 		  
+ #Test ph and ligand	  
+-for ph in xrange(1,14):
++for ph in range(1,14):
+ 
+ 	out_file_name = 'test-output-1HPX-ligand-ph{0}.pqr'.format(ph)
+ 	correct_file_name = 'test-output-1HPX-ligand-ph{0}-correct.pqr'.format(ph)
+@@ -169,4 +169,4 @@
+ 					  'test-misc-options',
+ 					  '--ff=AMBER --apbs-input --whitespace --typemap --include-header')
+ 		  
+-Alias('complete-test', testList)
+\ No newline at end of file
++Alias('complete-test', testList)


=====================================
debian/patches/python3_scriptbang.patch
=====================================
@@ -0,0 +1,8 @@
+--- a/src/psize.py
++++ b/src/psize.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python
++#!/usr/bin/python3
+ 
+ """ psize class
+ 


=====================================
debian/patches/python3_sundry.patch
=====================================
The diff for this file was not included because it is too large.

=====================================
debian/patches/series
=====================================
@@ -4,5 +4,8 @@ do_not_try_to_build_removed_js_target.patch
 fix_hardening_no_relro
 fix_no_debug_symbols_warning
 spelling.patch
-2to3.patch
+python3_PR516.patch
+python3_scons.patch
+python3_sundry.patch
+python3_scriptbang.patch
 use_pkg-config.patch


=====================================
debian/rules
=====================================
@@ -46,6 +46,11 @@ override_dh_install-arch:
 	dos2unix debian/pdb2pqr/usr/share/pdb2pqr/propka30/propka.py
 	dos2unix debian/pdb2pqr/usr/share/pdb2pqr/src/psize.py
 
+override_dh_installexamples:
+	dh_installexamples
+	for bakerdoc in $$( grep -l "http://agave.wustl.edu/css/baker.css" -R debian/pdb2pqr-doc/usr/share/doc/pdb2pqr/* ); do \
+	  sed "s|href=\"http://agave.wustl.edu/css/baker.css\"|href=\"baker.css\"|g" -i $$bakerdoc; done
+
 override_dh_link-arch:
 	dh_link -a
 	dh_link -a usr/lib/pdb2pqr/pdb2pka/$(shell basename `find . -name "_pMC_mult*.so"`)		usr/share/pdb2pqr/pdb2pka/_pMC_mult.so


=====================================
debian/tests/control
=====================================
@@ -3,5 +3,5 @@ Depends: pdb2pqr
 Restrictions: allow-stderr
 
 Tests: pdb2pka-test
-Depends: @, python-networkx
+Depends: @, python3-networkx
 Restrictions: allow-stderr


=====================================
debian/tests/pdb2pka-test
=====================================
@@ -2,10 +2,6 @@
 # autopkgtest check: build and run with default test data
 # Author: Tatiana Malygina <merlettaia at gmail.com>
 
-#  Hmmm, lets see, whether this might work with our 2to3 Python3 port
-# echo "This test is skipped since apbs Python support does not work"
-# exit 0
-
 set -e
 
 pkg=pdb2pqr
@@ -27,7 +23,7 @@ done
 
 echo "Run pdb2pqr..."
 
-pdb2pqr --with-ph=7.0 --ph-calc-method=pdb2pka --ff=parse --verbose 1a1p 1a1p.pqr
+pdb2pqr --with-ph=7.0 --ph-calc-method=pdb2pka --ff=parse --verbose 1a1p/1a1p.pdb 1a1p/1a1p.pqr
 # error messages fixed, at my VM this still appears:
 ## Missing libraries for interfacing with APBS
 ## You need to build APBS with Python support using the CMake variable -DENABLE_PYTHON=ON.



View it on GitLab: https://salsa.debian.org/med-team/pdb2pqr/-/compare/187d16363564d81a94133f9703bf9983575da601...aa9f2885b30f78d764aca2ca02b2bd1de98bf3a6

-- 
View it on GitLab: https://salsa.debian.org/med-team/pdb2pqr/-/compare/187d16363564d81a94133f9703bf9983575da601...aa9f2885b30f78d764aca2ca02b2bd1de98bf3a6
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20200326/df6909b6/attachment-0001.html>


More information about the debian-med-commit mailing list