Hi,
fedpkg clone debhelper cd debhelper fedpkg srpm && mock -r epel-8-x86_64 --no-clean --rebuild debhelper- 13.3.4-1.fc35.src.rpm
I can build the package in _all_ others branches but in epel8 ends with "Initialization of state variables in list context currently forbidden at /builddir/build/BUILD/debhelper- 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near");" "
If I try build version 13 (.0), I can. But 13.1 I can't because it have some "modern" Perl syntax and builds also ends with others strange messages like https://stackoverflow.com/questions/13517270/error-bareword-params-not-allow...
Any clue ?
Thank you
V Wed, May 26, 2021 at 10:30:54AM +0100, Sérgio Basto napsal(a):
fedpkg clone debhelper cd debhelper fedpkg srpm && mock -r epel-8-x86_64 --no-clean --rebuild debhelper- 13.3.4-1.fc35.src.rpm
I can build the package in _all_ others branches but
In epel7 too?
in epel8 ends with "Initialization of state variables in list context currently forbidden at /builddir/build/BUILD/debhelper- 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near");" "
perl has a "splain" tool which explains the compiler errors and warnings:
$ splain /usr/bin/splain: Reading from STDIN Initialization of state variables in list context currently forbidden at /home/test/fedora/debhelper/debhelper-13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near ");" Initialization of state variables in list context currently forbidden at /home/test/fedora/debhelper/debhelper-13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near ");" (#1) (F) state only permits initializing a single scalar variable, in scalar context. So state $a = 42 is allowed, but not state ($a) = 42. To apply state semantics to a hash or array, store a hash or array reference in a scalar variable.
What do we have at the line 2021?:
state %rrr = map { $_ => 1 } split(' ', $rrr_env);
That's it. perl 5.26.3 does not support "state" declaration for hashes (%err). Here is a one-line reproducer:
$ perl -e 'use v5.24; sub foo {state %rrr = map { $_ => 1 } split(q{ }, q{});}' Initialization of state variables in list context currently forbidden at -e line 1, near ");" Execution of -e aborted due to compilation errors.
Which can be reduced to:
$ perl -e 'use v5.24; state %rrr = ();' Initialization of state variables in list context currently forbidden at -e line 1, near ");" Execution of -e aborted due to compilation errors.
Please note that the "use v5.24;" statement is taken from debhelper code. It's obviously an upstream bug. The code is not valid syntax for perl 5.24.
The state support for non-scalar types was implemented in Perl 5.28.0 (see "perldoc perl5280delta" command output):
Initialisation of aggregate state variables A persistent lexical array or hash variable can now be initialized, by an expression such as "state @a = qw(x y z)". Initialization of a list of persistent lexical variables is still not possible.
You should reach out depbhelp upstream to correct the "use v5.24;" into "use v5.28;". Or you can ask them to refactor the code to support perl 5.26.
If you insist on using that debhelper version on RHEL-8, you can try switching to perl:5.30 module stream which delivers Perl 5.30.1. But you will have to rebuild most of the dephelper dependencies for the new perl yourself. (Because EPEL support for modules is, ehm, mostly undefined and unhelpful.)
-- Petr
On Wed, 2021-05-26 at 13:00 +0200, Petr Pisar wrote:
V Wed, May 26, 2021 at 10:30:54AM +0100, Sérgio Basto napsal(a):
fedpkg clone debhelper cd debhelper fedpkg srpm && mock -r epel-8-x86_64 --no-clean --rebuild debhelper- 13.3.4-1.fc35.src.rpm
I can build the package in _all_ others branches but
In epel7 too?
Doesn't build at all in epel 7 (1)
From debhelper (13.1) changelog: "Dh_Lib.pm: Require perl v5.24 (available in Debian oldstable) to enable more modern features. "
(1) Perl v5.24.0 required--this is only v5.16.3, stopped at /builddir/build/BUILD/debhelper-13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 9.
in epel8 ends with "Initialization of state variables in list context currently forbidden at /builddir/build/BUILD/debhelper- 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near");" "
perl has a "splain" tool which explains the compiler errors and warnings:
$ splain /usr/bin/splain: Reading from STDIN Initialization of state variables in list context currently forbidden at /home/test/fedora/debhelper/debhelper- 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near ");" Initialization of state variables in list context currently forbidden at /home/test/fedora/debhelper/debhelper- 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near ");" (#1) (F) state only permits initializing a single scalar variable, in scalar context. So state $a = 42 is allowed, but not state ($a) = 42. To apply state semantics to a hash or array, store a hash or array reference in a scalar variable.
What do we have at the line 2021?:
state %rrr = map { $_ => 1 } split(' ', $rrr_env);
That's it. perl 5.26.3 does not support "state" declaration for hashes (%err). Here is a one-line reproducer:
$ perl -e 'use v5.24; sub foo {state %rrr = map { $_ => 1 } split(q{ }, q{});}' Initialization of state variables in list context currently forbidden at -e line 1, near ");" Execution of -e aborted due to compilation errors.
Which can be reduced to:
$ perl -e 'use v5.24; state %rrr = ();' Initialization of state variables in list context currently forbidden at -e line 1, near ");" Execution of -e aborted due to compilation errors.
Please note that the "use v5.24;" statement is taken from debhelper code. It's obviously an upstream bug. The code is not valid syntax for perl 5.24.
The state support for non-scalar types was implemented in Perl 5.28.0 (see "perldoc perl5280delta" command output):
Initialisation of aggregate state variables A persistent lexical array or hash variable can now be initialized, by an expression such as "state @a = qw(x y z)". Initialization of a list of persistent lexical variables is still not possible.
You should reach out depbhelp upstream to correct the "use v5.24;" into "use v5.28;". Or you can ask them to refactor the code to support perl 5.26.
If you insist on using that debhelper version on RHEL-8, you can try switching to perl:5.30 module stream which delivers Perl 5.30.1. But you will have to rebuild most of the dephelper dependencies for the new perl yourself. (Because EPEL support for modules is, ehm, mostly undefined and unhelpful.)
-- Petr
epel-devel mailing list -- epel-devel@lists.fedoraproject.org To unsubscribe send an email to epel-devel-leave@lists.fedoraproject.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/epel-devel@lists.fedoraproject... Do not reply to spam on the list, report it: https://pagure.io/fedora-infrastructure
On Wed, 2021-05-26 at 13:00 +0200, Petr Pisar wrote:
V Wed, May 26, 2021 at 10:30:54AM +0100, Sérgio Basto napsal(a):
fedpkg clone debhelper cd debhelper fedpkg srpm && mock -r epel-8-x86_64 --no-clean --rebuild debhelper- 13.3.4-1.fc35.src.rpm
I can build the package in _all_ others branches but
In epel7 too?
in epel8 ends with "Initialization of state variables in list context currently forbidden at /builddir/build/BUILD/debhelper- 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near");" "
perl has a "splain" tool which explains the compiler errors and warnings:
$ splain /usr/bin/splain: Reading from STDIN Initialization of state variables in list context currently forbidden at /home/test/fedora/debhelper/debhelper- 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near ");" Initialization of state variables in list context currently forbidden at /home/test/fedora/debhelper/debhelper- 13.3.4/lib/Debian/Debhelper/Dh_Lib.pm line 2021, near ");" (#1) (F) state only permits initializing a single scalar variable, in scalar context. So state $a = 42 is allowed, but not state ($a) = 42. To apply state semantics to a hash or array, store a hash or array reference in a scalar variable.
What do we have at the line 2021?:
state %rrr = map { $_ => 1 } split(' ', $rrr_env);
That's it. perl 5.26.3 does not support "state" declaration for hashes (%err). Here is a one-line reproducer:
$ perl -e 'use v5.24; sub foo {state %rrr = map { $_ => 1 } split(q{ }, q{});}' Initialization of state variables in list context currently forbidden at -e line 1, near ");" Execution of -e aborted due to compilation errors.
Which can be reduced to:
$ perl -e 'use v5.24; state %rrr = ();' Initialization of state variables in list context currently forbidden at -e line 1, near ");" Execution of -e aborted due to compilation errors.
Please note that the "use v5.24;" statement is taken from debhelper code. It's obviously an upstream bug. The code is not valid syntax for perl 5.24.
The state support for non-scalar types was implemented in Perl 5.28.0 (see "perldoc perl5280delta" command output):
ok
Initialisation of aggregate state variables A persistent lexical array or hash variable can now be initialized, by an expression such as "state @a = qw(x y z)". Initialization of a list of persistent lexical variables is still not possible.
You should reach out depbhelp upstream to correct the "use v5.24;" into "use v5.28;". Or you can ask them to refactor the code to support perl 5.26.
yes , I will
If you insist on using that debhelper version on RHEL-8, you can try switching to perl:5.30 module stream which delivers Perl 5.30.1. But you will have to rebuild most of the dephelper dependencies for the new perl yourself. (Because EPEL support for modules is, ehm, mostly undefined and unhelpful.)
Many thanks Petr , I will try forward this bug to debhelper developer team . And I will wait for the fixes or reply before do something in epel 8 .
epel-devel@lists.fedoraproject.org