Tuesday 6th September 2011

Fedora Project

  • Updated perl-Class-Load to 0.08 in Rawhide; I'd forgotten to do this when I updated my local package back in mid-August:

    • The previous version was missing a prereq declaration for Data::OptList (CPAN RT#70285)

  • This was mainly a packaging update, with lots of changes:
    • This release by DROLSKY -> update source URL

    • Package new documentation: LICENSE and README

    • Add build requirements for new release tests and run them:
      • perl(Pod::Coverage::Moose)

      • perl(Test::CPAN::Changes)

      • perl(Test::EOL)

      • perl(Test::NoTabs)

      • perl(Test::Pod)

      • perl(Test::Pod::Coverage)

      • perl(Test::Requires)

      • perl(Test::Spelling) and aspell-en

    • Add patch for building with ExtUtils::MakeMaker < 6.30 if necessary

    • Add patch for building with Test::More < 0.88 if necessary

    • Add patch for building without Test::Requires if necessary

    • Add patch for fixing the spell checker word list
    • Don't try to run the POD Coverage test if we don't have Pod::Coverage::Moose (e.g. in EPEL)

  • Updated perl-Package-Stash-XS to 0.25 in F-16, Rawhide and EPEL-6:

    • Invalid package names (for instance, Foo:Bar) are not allowed

    • Invalid stash entry names (anything containing ::) are not allowed

  • Updated perl-Package-Stash to 0.32 in F-16, Rawhide and EPEL-6:

    • Bring the behaviour of has_symbol for non-existent scalars into line with the XS version

    • Invalid package names (for instance, Foo:Bar) are not allowed

    • Invalid stash entry names (anything containing ::) are not allowed

  • I bumped the perl(Package::Stash::XS) version requirement to 0.24 for consistency

Local Packages

  • Updated perl-Class-Load to 0.09, adding new dependencies perl(Package::Stash) ≥ 0.32 and perl(Try::Tiny):

    • Fix is_class_loaded to ignore $ISA (but still look for @ISA) when trying to determine whether a class is loaded

    • Lots of internals clean-up
  • Unfortunately the internals clean-up resulted in breakage with perl < 5.14, so later in the day came...

  • Updated perl-Class-Load to 0.10:

    • Make sure the $@ localization doesn't hide errors - invalid module name errors were being suppressed on perls before 5.14

  • The new requirement of perl(Package::Stash) meant that I could no longer build Class::Load for perl 5.8.0 so I branched the perl-Class-Load 0.08 package to use with those really ancient distros that I must get round to end-of-lifeing soon

  • Updated perl-DateTime-TimeZone to 1.36:

    • This release is based on version 2011i of the Olson database
    • New zone for South Sudan (Africa/Juba)

    • Changes for Samoa, Kaliningrad (Russia), Alaska, Hawaii, Newfoundland/Labrador (Canada) and Resolute Bay
  • Updated perl-Package-Stash to 0.32 as per the Fedora version

  • Updated perl-Package-Stash-XS to 0.25 as per the Fedora version; there had been a 0.24 release earlier in the day but it failed to build on older releases:

  • XS.xs:810:44: error: macro "pregcomp" requires 3 arguments, but only 2 given
    XS.xs: In function 'boot_Package__Stash__XS':
    XS.xs:810: error: 'pregcomp' undeclared (first use in this function)
    XS.xs:810: error: (Each undeclared identifier is reported only once
    XS.xs:810: error: for each function it appears in.)
    make: *** [XS.o] Error 1
  • The first port of call for such compatibility issues is usually Devel::PPPort, which can generate a ppport.h file to work around API changes between releases. However, it can only do so much, and it can't do anything to help with the offending pregcomp prior to perl 5.9.5, when the previous 3-argument pregcomp was replaced with a new 2-argument form. I looked around for examples of other modules handling this issue and the one that stood out was Tk, though the code there was rather more complex than what was needed here, a simple regexp compilation in XS with no special flags. In the end I found what I was looking for in Devel-RegExp and came up with this patch, which seemed to fix the problem (at least the test suite passed):

  • API for pregcomp changed from 3-args to 2-args in 5.9.5, and
    ppport.h can't automagically fix that for us.
    --- Package-Stash-XS-0.24/XS.xs
    +++ Package-Stash-XS-0.24/XS.xs
    @@ -804,10 +804,18 @@
    +        const char *vmre = "\\A[0-9A-Z_a-z]+(?:::[0-9A-Z_a-z]+)*\\z";
    +#if (PERL_VERSION < 9) || ((PERL_VERSION == 9) && (PERL_SUBVERSION < 5))
    +        PMOP fakepmop;
    +        fakepmop.op_pmflags = 0;
    +        valid_module_regex = pregcomp(vmre, vmre + strlen(vmre), &fakepmop);
             SV *re;
    -        re = newSVpv("\\A[0-9A-Z_a-z]+(?:::[0-9A-Z_a-z]+)*\\z", 0);
    +        re = newSVpv(vmre, 0);
             valid_module_regex = pregcomp(re, 0);
             name_key = newSVpvs("name");
             PERL_HASH(name_hash, "name", 4);
  • I sent the patch upstream (CPAN RT#70762) and version 0.25 was released with the patch included shortly thereafter.

  • Updated perl-XML-LibXML to 1.87:

    • Fix t/49callbacks_returning_undef.t to not read /etc/passwd, which may not be valid XML; instead, we're reading a local file while using URI::file (assuming it exists - else we skip_all)

    • I added perl(URI::file) as a build requirement for this test, and found that it failed on older distributions:

    • t/48_rt55000........................ok
      t/49callbacks_returning_undef.......file:///etc/xml/catalog:1: parser error : Document is empty
      file:///etc/xml/catalog:1: parser error : Start tag expected, '<' not found
              Test returned status 255 (wstat 65280, 0xff00)
      # Looks like your test died before it could output anything.
      Scalar found where operator expected at (eval 152) line 1, near "'int'  $__val"
              (Missing operator before   $__val?)
      DIED. FAILED test 1
              Failed 1/1 tests, 0.00% okay
              all skipped: optional (set THREAD_TEST=1 to run these tests)
      Failed 1/51 test scripts, 98.04% okay. 1/2328 subtests failed, 99.96% okay.
      Failed Test                     Stat Wstat Total Fail  Failed  List of Failed
      t/49callbacks_returning_undef.t  255 65280     1    2 200.00%  1
      2 tests skipped.
      make: *** [test_dynamic] Error 255
    • I managed to track this down to changes in the URI module between 1.30 (which failed) and 1.35 (which did not), though I didn't bother working out exactly which change fixed the problem; I added perl(URI::file) ≥ 1.35 as a build requirement just for those distributions that could provide it, though I could at some point roll a local package to make it usable everywhere