Message ID | 20180706132927.DA37843994575@oldenburg.str.redhat.com |
---|---|
State | New |
Headers | show |
Series | conform/conformtest.pl: Escape literal braces in regular expressions | expand |
On 07/06/2018 09:29 AM, Florian Weimer wrote: > This suppresses Perl warnings like these: > > Unescaped left brace in regex is deprecated here (and will be fatal in > Perl 5.32), passed through in regex; marked by <-- HERE in m/^element > *({ <-- HERE ([^}]*)}|([^{ ]*)) *({([^}]*)}|([^{ ]*)) *([A-Za-z0-9_]*) > *(.*)/ at conformtest.pl line 370. > > 2018-07-06 Florian Weimer <fweimer@redhat.com> > > * conform/conformtest.pl (checknamespace): Escape literal braces > in regular expressions. Please commit. You should feel free to check something like this in without review, particularly if it fixes a direct warning. If someone wants to rewrite this in python, or in a different way in perl, then they can always follow up with another patch. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
On Fri, 6 Jul 2018, Carlos O'Donell wrote: > You should feel free to check something like this in without review, > particularly if it fixes a direct warning. If someone wants to rewrite Agreed. > this in python, or in a different way in perl, then they can always > follow up with another patch. I support the idea of moving the various functionality using perl to python (this is not volunteering to rewrite it all, though if we had consensus for such a change I might well end up doing it for the math/ and conform/ pieces).
On 07/18/2018 12:38 PM, Joseph Myers wrote: > On Fri, 6 Jul 2018, Carlos O'Donell wrote: > >> You should feel free to check something like this in without review, >> particularly if it fixes a direct warning. If someone wants to rewrite > > Agreed. > >> this in python, or in a different way in perl, then they can always >> follow up with another patch. > > I support the idea of moving the various functionality using perl to > python (this is not volunteering to rewrite it all, though if we had > consensus for such a change I might well end up doing it for the math/ and > conform/ pieces). Python is turning out to be easier to maintain than perl. We see more volunteers with python experience than perl. I am strongly in favour of migrating perl or awk scripts to python and shell.
On 18/07/2018 14:39, Carlos O'Donell wrote: > On 07/18/2018 12:38 PM, Joseph Myers wrote: >> On Fri, 6 Jul 2018, Carlos O'Donell wrote: >> >>> You should feel free to check something like this in without review, >>> particularly if it fixes a direct warning. If someone wants to rewrite >> >> Agreed. >> >>> this in python, or in a different way in perl, then they can always >>> follow up with another patch. >> >> I support the idea of moving the various functionality using perl to >> python (this is not volunteering to rewrite it all, though if we had >> consensus for such a change I might well end up doing it for the math/ and >> conform/ pieces). > > Python is turning out to be easier to maintain than perl. > > We see more volunteers with python experience than perl. > > I am strongly in favour of migrating perl or awk scripts to python and shell. > +1
On Wed, Jul 18, 2018 at 3:27 PM, Adhemerval Zanella <adhemerval.zanella@linaro.org> wrote: > On 18/07/2018 14:39, Carlos O'Donell wrote: >> On 07/18/2018 12:38 PM, Joseph Myers wrote: >>> On Fri, 6 Jul 2018, Carlos O'Donell wrote: >>> >>>> You should feel free to check something like this in without review, >>>> particularly if it fixes a direct warning. If someone wants to rewrite >>> >>> Agreed. >>> >>>> this in python, or in a different way in perl, then they can always >>>> follow up with another patch. >>> >>> I support the idea of moving the various functionality using perl to >>> python (this is not volunteering to rewrite it all, though if we had >>> consensus for such a change I might well end up doing it for the math/ and >>> conform/ pieces). >> >> Python is turning out to be easier to maintain than perl. >> >> We see more volunteers with python experience than perl. >> >> I am strongly in favour of migrating perl or awk scripts to python and shell. >> > > +1 Strike out "and shell" and I'll endorse this plan too :) zw
On Wed, 18 Jul 2018, Carlos O'Donell wrote:
> I am strongly in favour of migrating perl or awk scripts to python and shell.
For the perl scripts, they are already optional in the build (albeit
needed to build the manual), so that's a matter of replacing one tool used
optionally with another.
For the awk scripts, while I'd certainly prefer to maintain such scripts
in python, many such scripts are also required for the build, and if
you're adding a new required build dependency, that needs considering much
more carefully. (I wouldn't consider there to be such an issue with awk
scripts used only in individual testcases, even though moving those to
Python would replace always-supported tests with ones that have a new
dependency.)
It's entirely possible the new dependency is actually theoretical, in that
if a broad enough range of python versions is allowed, no-one is actually
building glibc on a system without python.
* Joseph Myers: > I support the idea of moving the various functionality using perl to > python (this is not volunteering to rewrite it all, though if we had > consensus for such a change I might well end up doing it for the math/ and > conform/ pieces). Can we assume that Python 3 is available? I spent some time on writing awk code where I would have preferred Python because I assumed that both Perl and Python were optional, and that the actual build and most testing should not require anything but the core build tools and awk.
On Wed, 18 Jul 2018, Florian Weimer wrote: > * Joseph Myers: > > > I support the idea of moving the various functionality using perl to > > python (this is not volunteering to rewrite it all, though if we had > > consensus for such a change I might well end up doing it for the math/ and > > conform/ pieces). > > Can we assume that Python 3 is available? My assumption is that if we require Python for the build, it would allow at least any non-EOL version, so 2.7 or 3.4 or later (but as of 2020-01-01, everything before 3.5 will be EOL). The existing configure test makes no version checks (and makefile code can't readily express a condition for a particular test etc. on any more restricted choice of version), and install.texi says "Python 2.7.6/3.4.3 or later" for the optional uses; https://sourceware.org/glibc/wiki/Style_and_Conventions#Code_formatting_in_python_sources says "Require python-2.7, but be compatible with python-3.2+". Scripts not used directly from normal build / test, only for other purposes in development, of course already often require Python 3 (all of the unicode-gen code, build-many-glibcs.py and list-fixed-bugs.py do so, and quite likely other such code). It's only code that might end up used by "make" and "make check" for which greater portability may be a concern.
diff --git a/conform/conformtest.pl b/conform/conformtest.pl index cb500f0e76..a4ef756105 100644 --- a/conform/conformtest.pl +++ b/conform/conformtest.pl @@ -367,7 +367,7 @@ while ($#headers >= 0) { s/^optional-//; $optional = 1; } - if (/^element *({([^}]*)}|([^{ ]*)) *({([^}]*)}|([^{ ]*)) *([A-Za-z0-9_]*) *(.*)/) { + if (/^element *(\{([^}]*)\}|([^{ ]*)) *(\{([^}]*)\}|([^{ ]*)) *([A-Za-z0-9_]*) *(.*)/) { my($struct) = "$2$3"; my($type) = "$5$6"; my($member) = "$7"; @@ -556,7 +556,7 @@ while ($#headers >= 0) { "Symbol \"$symbol\" has not the right value.", $res, $xfail); } - } elsif (/^type *({([^}]*)|([a-zA-Z0-9_]*))/) { + } elsif (/^type *(\{([^}]*)|([a-zA-Z0-9_]*))/) { my($type) = "$2$3"; my($maybe_opaque) = 0; @@ -586,7 +586,7 @@ while ($#headers >= 0) { ? "NOT AVAILABLE" : "Type \"$type\" not available."), $missing, $optional, $xfail); - } elsif (/^tag *({([^}]*)|([a-zA-Z0-9_]*))/) { + } elsif (/^tag *(\{([^}]*)|([a-zA-Z0-9_]*))/) { my($type) = "$2$3"; # Remember that this name is allowed. @@ -607,7 +607,7 @@ while ($#headers >= 0) { compiletest ($fnamebase, "Testing for type $type", "Type \"$type\" not available.", $missing, 0, $xfail); - } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) [(][*]([a-zA-Z0-9_]*) ([(].*[)])/) { + } elsif (/^function *(\{([^}]*)\}|([a-zA-Z0-9_]*)) [(][*]([a-zA-Z0-9_]*) ([(].*[)])/) { my($rettype) = "$2$3"; my($fname) = "$4"; my($args) = "$5"; @@ -644,7 +644,7 @@ while ($#headers >= 0) { "Function \"$fname\" has incorrect type.", $res, 0, $xfail); } - } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { + } elsif (/^function *(\{([^}]*)\}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { my($rettype) = "$2$3"; my($fname) = "$4"; my($args) = "$5"; @@ -681,7 +681,7 @@ while ($#headers >= 0) { "Function \"$fname\" has incorrect type.", $res, 0, $xfail); } - } elsif (/^variable *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) *(.*)/) { + } elsif (/^variable *(\{([^}]*)\}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) *(.*)/) { my($type) = "$2$3"; my($vname) = "$4"; my($rest) = "$5"; @@ -713,7 +713,7 @@ while ($#headers >= 0) { compiletest ($fnamebase, "Test for type of variable $fname", "Variable \"$vname\" has incorrect type.", $res, 0, $xfail); - } elsif (/^macro-function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { + } elsif (/^macro-function *(\{([^}]*)\}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { my($rettype) = "$2$3"; my($fname) = "$4"; my($args) = "$5"; @@ -812,11 +812,11 @@ while ($#headers >= 0) { s/^xfail(\[([^\]]*)\])?-//; s/^optional-//; - if (/^element *({([^}]*)}|([^ ]*)) *({([^}]*)}|([^ ]*)) *([A-Za-z0-9_]*) *(.*)/) { + if (/^element *(\{([^}]*)\}|([^ ]*)) *(\{([^}]*)\}|([^ ]*)) *([A-Za-z0-9_]*) *(.*)/) { push @allow, $7; } elsif (/^(macro|constant|macro-constant|macro-int-constant) +([a-zA-Z0-9_]*) *(?:{([^}]*)} *)?(?:([>=<!]+) ([A-Za-z0-9_-]*))?/) { push @allow, $2; - } elsif (/^(type|tag) *({([^}]*)|([a-zA-Z0-9_]*))/) { + } elsif (/^(type|tag) *(\{([^}]*)|([a-zA-Z0-9_]*))/) { my($type) = "$3$4"; # Remember that this name is allowed. @@ -827,13 +827,13 @@ while ($#headers >= 0) { } else { push @allow, $type; } - } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) [(][*]([a-zA-Z0-9_]*) ([(].*[)])/) { + } elsif (/^function *(\{([^}]*)\}|([a-zA-Z0-9_]*)) [(][*]([a-zA-Z0-9_]*) ([(].*[)])/) { push @allow, $4; - } elsif (/^function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { + } elsif (/^function *(\{([^}]*)\}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { push @allow, $4; - } elsif (/^variable *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*)/) { + } elsif (/^variable *(\{([^}]*)\}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*)/) { push @allow, $4; - } elsif (/^macro-function *({([^}]*)}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { + } elsif (/^macro-function *(\{([^}]*)\}|([a-zA-Z0-9_]*)) ([a-zA-Z0-9_]*) ([(].*[)])/) { push @allow, $4; } elsif (/^symbol *([a-zA-Z0-9_]*) *([A-Za-z0-9_-]*)?/) { push @allow, $1;