Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: perl 5.14.0-RC1 is available for testing!

by Anonymous Monk
on Apr 21, 2011 at 04:48 UTC ( #900468=note: print w/replies, xml ) Need Help??


in reply to perl 5.14.0-RC1 is available for testing!

Mostly runs ok
Test Summary Report ------------------- op/taint.t (Wstat +: 0 Tests: 774 Failed: 2) Failed tests: 1, 391 porting/buildtoc.t (Wstat +: 0 Tests: 5 Failed: 4) Failed tests: 2-5 Parse errors: Bad plan. You planned 8 tests but ran 5. porting/regen.t (Wstat +: 0 Tests: 26 Failed: 20) Failed tests: 7-26 ../cpan/Module-Build/t/ppm.t (Wstat +: 512 Tests: 12 Failed: 2) Failed tests: 6-7 Non-zero exit status: 2 ../cpan/Win32/t/Names.t (Wstat +: 256 Tests: 16 Failed: 1) Failed test: 14 Non-zero exit status: 1 ../cpan/podlators/t/text-encoding.t (Wstat +: 65280 Tests: 1 Failed: 0) Non-zero exit status: 255 Parse errors: Bad plan. You planned 7 tests but ran 1. Files=2092, Tests=464222, 4177 wallclock secs (74.67 usr + 3.56 sys = + 78.23 CPU) Result: FAIL

I built perl with gcc 4.5.2, but forgot to add

CFLAGS=-static-libgcc
, so perl.exe/perl514.dll needs libgcc_s_dw2-1.dll, but op/taint modifies $ENV{PATH} so when it uses $Invoke_Perl, it can't find libgcc_s_dw2-1.dll
$ perl harness op/taint.t op/taint.t .. # Failed at op/taint.t line 160 op/taint.t .. 1/774 # got "" # expected "1\n" # Failed at op/taint.t line 980 # got "13568" # expected "0" op/taint.t .. Failed 2/774 subtests (less 46 skipped subtests: 726 okay) Test Summary Report ------------------- op/taint.t (Wstat: 0 Tests: 774 Failed: 2) Failed tests: 1, 391 Files=1, Tests=774, 3 wallclock secs ( 0.31 usr + 0.00 sys = 0.31 C +PU) Result: FAIL

No clue about porting/buildtoc.t

$ perl harness -v porting/buildtoc.t porting/buildtoc.t .. pod/buildtoc: unix contains no copy rules at pod +/buildtoc line 612 main::verify_contiguous('unix', 'case $PERL_CONFIG_SH in\x{d}\ +x{a}\'\')\x{d}\x{a}\x{9}if test -f config.sh\x{d}\x{a}\x{9}\x{9}then. +..', 'copy rules') called at pod/buildtoc line 719 main::do_unix('unix', 'case $PERL_CONFIG_SH in\x{d}\x{a}\'\')\ +x{d}\x{a}\x{9}if test -f config.sh\x{d}\x{a}\x{9}\x{9}then...') calle +d at pod/buildtoc line 750 1..8 ok 1 not ok 2 # ...*snip*...win32\makefile.mk is up to date not ok 3 # ...*snip*...pod\perl.pod is up to date not ok 4 # ...*snip*...win32\Makefile is up to date not ok 5 # ...*snip*...MANIFEST is up to date Failed 7/8 subtests Test Summary Report ------------------- porting/buildtoc.t (Wstat: 0 Tests: 5 Failed: 4) Failed tests: 2-5 Parse errors: Bad plan. You planned 8 tests but ran 5. Files=1, Tests=5, 1 wallclock secs ( 0.03 usr + 0.00 sys = 0.03 CPU +) Result: FAIL

../cpan/Win32/t/Names.t assumes LoginName is longer than one character, win32 doesn't impose such a limit, don't see why a test would :)

$ perl harness ../cpan/Win32/t/Names.t ../cpan/Win32/t/Names.t .. 1/16 # Failed test ' - checking returned login name' # at t/Names.t line 51. # '1' # > # '1' # Looks like you failed 1 test of 16. ../cpan/Win32/t/Names.t .. Dubious, test returned 1 (wstat 256, 0x100) Failed 1/16 subtests (less 2 skipped subtests: 13 okay) Test Summary Report ------------------- ../cpan/Win32/t/Names.t (Wstat: 256 Tests: 16 Failed: 1) Failed test: 14 Non-zero exit status: 1 Files=1, Tests=16, 0 wallclock secs ( 0.00 usr + 0.00 sys = 0.00 CP +U) Result: FAIL

No clue about ../cpan/podlators/t/text-encoding.t, it seems to work outside core

$ perl harness -v ../cpan/podlators/t/text-encoding.t ../cpan/podlators/t/text-encoding.t .. 1..7 ok 1 - use Pod::Text; # Looks like you planned 7 tests but ran 1. Dubious, test returned 255 (wstat 65280, 0xff00) Failed 6/7 subtests Test Summary Report ------------------- ../cpan/podlators/t/text-encoding.t (Wstat: 65280 Tests: 1 Failed: 0) Non-zero exit status: 255 Parse errors: Bad plan. You planned 7 tests but ran 1. Files=1, Tests=1, 0 wallclock secs ( 0.02 usr + 0.00 sys = 0.02 CPU +) Result: FAIL

As for ../cpan/Module-Build/t/ppm.t, typical win32 nonsense

... t/ppm.t: error opening directory D: No such file or directory
but frankly I don't let Module::Build make docs for me, I don't have any docs at all :)

Here is how I compiled v5.14.0-RC1

git checkout . git clean -xdf git checkout v5.14.0-RC1 perl -pi.orig -e " s!^#INST_VER!INST_VER! " win32/makefile.mk perl -pi.orig -e " s!^#INST_ARCH!INST_ARCH! " win32/makefile.mk perl -pi.orig -e " s!^#INST_VER!INST_VER! " win32/Makefile perl -pi.orig -e " s!^#INST_ARCH!INST_ARCH! " win32/Makefile perl -pi.orig -e " s!^USE_SITECUST\s*=.*$!USE_SITECUST *= undef! " win +32/makefile.mk perl -pi.orig -e " s!^USE_SITECUST\s*=.*$!USE_SITECUST = undef! " win3 +2/Makefile perl -pi.orig -e " s!^(LIBC\s+=\s+-lmsvcrt)!#$1! " win32/makefile.mk perl -pi.orig -e "s!^#EMAIL\s[^=].*$!EMAIL *= username\@localhost\ncf_ +by=username\ncf_email=username\@localhost!" win32/makefile.mk perl -pi.orig -e "s!^#EMAIL\s[^=].*$!EMAIL = username\@localhost\ncf_b +y=username\ncf_email=username\@localhost!" win32/Makefile perl -pi.orig -e "s!^\s+cf_email=\$\(EMAIL\)\s+~\s+\\$!\t\tcf_email=us +ername\@localhost\t\t~\t\\\n\t\tcf_by=username\t\t~\t\\!" win32/makef +ile.mk perl -pi.orig -e "s!^\s+\x22cf_email=\$\(EMAIL\)\x22\s+\\$!\t\t\x22cf_ +email=username\@localhost\x22\t\t\t\\\n\t\t\x22cf_by=username\x22\t\t +\t\\!" win32/Makefile perl -pi.orig -e "BEGIN{@ARGV=glob'win32/config.*'; } s!^((?:html(?:1d +ir(?:exp)?|3dir(?:exp)?)|install(?:html(?:help|[13])?|sitehtml[13]|ve +ndorhtml[13])dir|sitehtml(?:1dir(?:exp)?|3dir(?:exp)?)|vendorhtml(?:1 +dir(?:exp)?|3dir(?:exp)?)))=.*$!$1=''!" perl -pi.orig -e "BEGIN{@ARGV=glob'win32/config.*'; } s!^((?:install(? +:man[13]|siteman[13]|vendorman[13])dir|man(?:1(?:dir(?:exp)?|ext)|3(? +:dir(?:exp)?|ext))|s(?:iteman(?:1dir(?:exp)?|3dir(?:exp)?)|ysman)|ven +dorman(?:1dir(?:exp)?|3dir(?:exp)?)))=.*$!$1=''!" perl -pi.orig -e "s!^(\s+)perl (\$OPT.*)$!$1\$Config{perlpath} $2!" wi +n32/bin/pl2bat.pl perl -pi.orig -e "BEGIN{@ARGV=glob'win32/config.*'; } s!^sitescript=.* +$!sitescript='~INST_TOP~\\site~INST_VER~\\bin'!" perl -pi.orig -e "BEGIN{@ARGV=glob'win32/config.*'; } s!^installsitesc +ript=.*$!installsitescript='~INST_TOP~\\site~INST_VER~\\bin'!" del win32\bin\pl2bat.pl.orig del win32\*.orig

Replies are listed 'Best First'.
Re^2: perl 5.14.0-RC1 is available for testing!
by syphilis (Archbishop) on Apr 21, 2011 at 09:48 UTC
    perl.exe/perl514.dll needs libgcc_s_dw2-1.dll, but op/taint modifies $ENV{PATH} so when it uses $Invoke_Perl, it can't find libgcc_s_dw2-1.dll

    This section of makefile.mk is supposed to deal with that issue:
    # # If building with gcc-4.x.x (or x86_64-w64-mingw32-gcc-4.x.x), then # uncomment the following assignment to GCC_4XX, make sure that CCHOM +E # has been set correctly above, and uncomment the appropriate # GCCHELPERDLL line. # The name of the dll can change, depending upon which vendor has supp +lied # your 4.x.x compiler, and upon the values of "x". # (The dll will be in your mingw/bin folder, so check there if you're # unsure about the correct name.) # Without these corrections, the op/taint.t test script will fail. # #GCC_4XX *= define #GCCHELPERDLL *= $(CCHOME)\bin\libgcc_s_sjlj-1.dll #GCCHELPERDLL *= $(CCHOME)\bin\libgcc_s_dw2-1.dll #GCCHELPERDLL *= $(CCHOME)\bin\libgcc_s_1.dll
    Not sure how that fits in with your method of building. I've only ever built perl with gcc by running dmake -f makefile.mk

    With my mingw port of gcc-3.4.5 I'm finding that porting/buildtoc.t fails test 2. All other tests pass.
    With my mingw64 port of gcc-4.6.0, I'm finding that the tests hang when 19_CPANPLUS-Dist.t is run, so I don't get to find out what failures there are.

    Cheers,
    Rob
      AHA, typical dumb makefile and I forgot to grep :)

      That makefile is really really unreadable (someone should indent it, rewrite it)

      I shouldn't need to know anything about this :) The GCC_4XX way should be automatic one way or another, something like

      .IF "$(CCTYPE)" == "GCC" GCC_VERSION *= $(shell gcc -dumpversion) GCC_MAJOR_VERSION *= $(GCC_VERSION:b:b) .IF "$(GCC_MAJOR_VERSION)" == "4" GCC_4XX *= define .ENDIF .ENDIF
      Or my way (untested)
      .IF "$(CCTYPE)" == "GCC" GCC_VERSION *= $(shell gcc -dumpversion) GCC_MAJOR_VERSION *= $(GCC_VERSION:b:b) .IF "$(GCC_MAJOR_VERSION)" == "4" CFLAGS +=-static-libgcc LIBC += -static-libgcc .ENDIF .ENDIF
      Checking my make commands, a test makefile.mk
      CCTYPE *= GCC .IF "$(CCTYPE)" == "GCC" GCC_VERSION *= $(shell gcc -dumpversion) GCC_MAJOR_VERSION *= $(GCC_VERSION:b:b) .IF "$(GCC_MAJOR_VERSION)" == "4" CFLAGS += -static-libgcc LIBC += -static-libgcc GCC_4XX *= define .ENDIF .ENDIF __echo_GCC: @echo GCC_VERSION $(GCC_VERSION) @echo GCC_MAJOR_VERSION $(GCC_MAJOR_VERSION) @echo GCC_4XX $(GCC_4XX) @echo CFLAGS $(CFLAGS) @echo LIBC $(LIBC) $(NOOP)
      how it runs (output)
      $ dmake -f makefile.mk dmake: Executing shell macro: gcc -dumpversion dmake: Executing shell macro: gcc -dumpversion GCC_VERSION 4.5.2 dmake: Executing shell macro: gcc -dumpversion GCC_MAJOR_VERSION 4 GCC_4XX define CFLAGS -static-libgcc LIBC -static-libgcc

      Not sure how that fits in with your method of building. I've only ever built perl with gcc by running dmake -f makefile.mk

      Yup, thats what I do, the -f makefile.mk isn't mandatory since that is the default

        You know, I wrote a little program to use objdump to find out what dlls are linked to perl.exe/perl514.dll , to copy them to t directory

        I tested it, it worked, and then I dawned me how stupid I find this :)

        The whole thing should be replaced with

        .IF "$(CCTYPE)" == "GCC" $(XCOPY) $(CCHOME)\bin\* ..\t\$(NULL) .ENDIF
        Since the dll's in ..\t\ aren't used for anything else and they're deleted during dmake clean

        KISS

        .IF "$(CCTYPE)" == "GCC" GCC_VERSION *= $(shell gcc -dumpversion) GCC_MAJOR_VERSION *= $(GCC_VERSION:b:b) .IF "$(GCC_MAJOR_VERSION)" == "4" GCC_4XX *= define .ENDIF .ENDIF
        If that works, it would be an improvement.
        One problem with it is that it's not guaranteed that the C compiler is called 'gcc'. With the mingw64 compiler that I use it's called 'x86_64-w64-mingw32-gcc' - and  gcc -dumpversion would simply return something like 'gcc' is not recognized as an internal or external command, operable program or batch file.

        I guess, however, there might also be a way to cater for that possibility.

        Cheers,
        Rob
Re^2: perl 5.14.0-RC1 is available for testing!
by Anonymous Monk on Jul 22, 2011 at 08:11 UTC
    Now I use -static-libgcc AND -static-libstdc++, don't even have to think about op/taint.t and that GCC_4XX stuff :)
    perl -pi.orig -e " s!^(LINK_FLAGS\s*=)!$1 -static-libgcc -static-libst +dc++ !" win32/Makefile win32/makefile.mk
      Now I use -static-libgcc AND -static-libstdc++, don't even have to think about op/taint.t and that GCC_4XX stuff

      Nor do you have to think about them with perl-5.15 or higher .... even if you *don't* do the "-static" thing :-)

      Cheers,
      Rob
        The benefits of the static also go towards pp/PAR working without a libstdc++-6.dll || libgcc_s_dw2-1.dll ... in the PATH without having to do a special compile of either PAR or Compress...

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://900468]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others musing on the Monastery: (7)
As of 2023-12-01 16:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?