public inbox for cygwin-apps-cvs@sourceware.org
help / color / mirror / Atom feed
* [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20210110-2-ged5a8f8
@ 2021-02-10 15:14 Jon TURNEY
0 siblings, 0 replies; only message in thread
From: Jon TURNEY @ 2021-02-10 15:14 UTC (permalink / raw)
To: cygwin-apps-cvs
https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=ed5a8f814447f0b2e7c12f9582d67546e871ffc0
commit ed5a8f814447f0b2e7c12f9582d67546e871ffc0
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date: Sun Feb 7 16:24:30 2021 +0000
Update perl annotation tool
Update perl annotation tool to update requires: with the appropriate
provide name stored in an annotation, where it looks like it should be
needed, now we actually have them.
https://sourceware.org/git/gitweb.cgi?p=cygwin-apps/calm.git;h=c7759627578cc49d007f47982646b7e24a37ce95
commit c7759627578cc49d007f47982646b7e24a37ce95
Author: Jon Turney <jon.turney@dronecode.org.uk>
Date: Sun Jan 10 19:38:25 2021 +0000
Ignore B902 flake
Ignore 'B902 blind except Exception: statement' flake.
This isn't ideal. Three of these places are where we would otherwise
have to enumerate all possible exceptions which could be raised during
reading a compressed archive.
The final place is were we are catching any possible exception to log
before terminating, so really needs to be blind.
Diff:
---
.flake8 | 2 +-
calm/fix-annotate-perl-hint.py | 82 ++++++++++++++++++++++++++++++++++--------
2 files changed, 68 insertions(+), 16 deletions(-)
diff --git a/.flake8 b/.flake8
index 81548f7..0baa6cd 100644
--- a/.flake8
+++ b/.flake8
@@ -1,3 +1,3 @@
[flake8]
-ignore=E741,E129,W504,A003
+ignore=E741,E129,W504,A003,B902
max-line-length=240
diff --git a/calm/fix-annotate-perl-hint.py b/calm/fix-annotate-perl-hint.py
index 0f2679a..41ab770 100644
--- a/calm/fix-annotate-perl-hint.py
+++ b/calm/fix-annotate-perl-hint.py
@@ -24,31 +24,36 @@
import argparse
import logging
import os
+import re
import shutil
import sys
+import tarfile
+import xtarfile
from . import common_constants
from . import hint
+# packages which are known to embed a perl interpreter or contain perl extension
+# dlls (i.e. link with libperl)
+known_packages = [
+ 'perl-gdal',
+ 'hexchat-perl',
+ 'irssi',
+ 'postgresql-contrib',
+ 'postgresql-plperl',
+ 'rxvt-unicode',
+ 'weechat-perl',
+ 'znc-perl',
+]
+
#
#
#
-def fix_one_hint(dirpath, hintfile):
+def fix_one_hint(dirpath, hintfile, tf):
pn = os.path.join(dirpath, hintfile)
- annotation = False
- with open(pn, 'r') as f:
- for l in f:
- if '# perl5_26' in l:
- logging.info("%s has annotation comment" % (hintfile))
- annotation = True
- break
-
- if not annotation:
- return
-
hints = hint.hint_file_parse(pn, hint.pvr)
hints.pop('parse-warnings', None)
@@ -56,18 +61,65 @@ def fix_one_hint(dirpath, hintfile):
logging.error('invalid hints %s' % hintfile)
return
- hints['notes'] = 'perl5_26'
+ modified = False
+
+ # if no annotation yet, add a perl annotation
+ if 'notes' not in hints:
+ requires = hints.get('requires', '').split()
+ if requires:
+ if ('perl_base' in requires) or ('perl' in requires):
+ logging.info("%s has perl in requires and no annotations" % (hintfile))
+ hints['notes'] = 'perl5_030'
+ modified = True
+
+ # if annotated, check if this package installs into vendor_perl, and if so,
+ # add the annotate perl version to requires, if not already present
+ if hints.get('notes', '').startswith('perl5_0'):
+ ivp = False
+ exe = False
+
+ try:
+ with xtarfile.open(os.path.join(dirpath, tf), mode='r') as a:
+ ivp = any(re.match(r'usr/(lib|share)/perl5/vendor_perl/', m) for m in a.getnames())
+ exe = any(re.search(r'\.(exe|dll)$', m) for m in a.getnames())
+ except tarfile.ReadError:
+ pass
+
+ knwn = any(hintfile.startswith(k) for k in known_packages)
+
+ if ivp or knwn:
+ requires = hints.get('requires', '').split()
+ if hints['notes'] not in requires:
+ requires.append(hints['notes'])
+ requires = sorted(requires)
+ modified = True
+ logging.warning("adding perl provide to requires in %s" % (hintfile))
+ hints['requires'] = ' '.join(requires)
+ else:
+ if exe:
+ logging.info("%s has perl in requires, and might have content linked to libperl" % (hintfile))
+ else:
+ logging.info("%s has perl in requires, assuming that's for a perl script" % (hintfile))
+
+ if not modified:
+ return
# write updated hints
shutil.copy2(pn, pn + '.bak')
hint.hint_file_write(pn, hints)
+ # os.system('/usr/bin/diff -uBZ %s %s' % (pn + '.bak', pn))
def fix_hints(relarea):
for (dirpath, _subdirs, files) in os.walk(relarea):
for f in files:
- if f.endswith('.hint'):
- fix_one_hint(dirpath, f)
+ match = re.match(r'^([^-].*?)\.tar' + common_constants.PACKAGE_COMPRESSIONS_RE + r'$', f)
+ if match:
+ root = match.group(1)
+ if root.endswith('-src'):
+ continue
+
+ fix_one_hint(dirpath, root + '.hint', f)
#
#
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-02-10 15:14 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-10 15:14 [calm - Cygwin server-side packaging maintenance script] branch master, updated. 20210110-2-ged5a8f8 Jon TURNEY
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).