diff options
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/usr.bin/perl/utils/perlivp.PL | 181 |
1 files changed, 106 insertions, 75 deletions
diff --git a/gnu/usr.bin/perl/utils/perlivp.PL b/gnu/usr.bin/perl/utils/perlivp.PL index c2f0a11f155..fd58e878248 100644 --- a/gnu/usr.bin/perl/utils/perlivp.PL +++ b/gnu/usr.bin/perl/utils/perlivp.PL @@ -33,12 +33,13 @@ $Config{'startperl'} if \$running_under_some_shell; !GROK!THIS! -print OUT "\n# perlivp $^V\n"; - # In the following, perl variables are not expanded during extraction. print OUT <<'!NO!SUBS!'; +# perlivp V 0.02 + + sub usage { warn "@_\n" if @_; print << " EOUSAGE"; @@ -65,8 +66,8 @@ while ($ARGV[0] =~ /^-/) { usage() if '?' =~ /\Q$flag/; usage() if 'h' =~ /\Q$flag/; usage() if 'H' =~ /\Q$flag/; - usage("unknown flag: '$flag'") unless 'HhPpVv' =~ /\Q$flag/; - warn "$0: '$flag' flag already set\n" if $opt{$flag}++; + usage("unknown flag: `$flag'") unless 'HhPpVv' =~ /\Q$flag/; + warn "$0: `$flag' flag already set\n" if $opt{$flag}++; } shift; } @@ -80,10 +81,12 @@ my $tests_total = 0; !NO!SUBS! -# We cannot merely check the variable '$^X' in general since on many +# We cannot merely check the variable `$^X' in general since on many # Unixes it is the basename rather than the full path to the perl binary. my $perlpath = ''; if (defined($Config{'perlpath'})) { $perlpath = $Config{'perlpath'}; } +# Of course some platforms are distinct... +if ($^O eq 'VMS') { $perlpath = $^X; } # The useithreads Config variable plays a role in whether or not # threads and threads/shared work when C<use>d. They apparently always @@ -98,78 +101,68 @@ my \$useithreads = '$useithreads'; print OUT <<'!NO!SUBS!'; -print "## Checking Perl binary via variable '\$perlpath' = $perlpath.\n" if $opt{'p'}; - -my $label = 'Executable perl binary'; +print "## Checking Perl binary via variable `\$perlpath' = $perlpath.\n" if $opt{'p'}; if (-x $perlpath) { - print "## Perl binary '$perlpath' appears executable.\n" if $opt{'v'}; - print "ok 1 $label\n"; + print "## Perl binary `$perlpath' appears executable.\n" if $opt{'v'}; + print "ok 1\n"; $pass__total++; } else { - print "# Perl binary '$perlpath' does not appear executable.\n"; - print "not ok 1 $label\n"; + print "# Perl binary `$perlpath' does not appear executable.\n"; + print "not ok 1\n"; $error_total++; } $tests_total++; -print "## Checking Perl version via variable '\$]'.\n" if $opt{'p'}; +print "## Checking Perl version via variable `\$]'.\n" if $opt{'p'}; !NO!SUBS! print OUT <<"!GROK!THIS!"; -my \$ivp_VERSION = "$]"; +my \$ivp_VERSION = $]; !GROK!THIS! print OUT <<'!NO!SUBS!'; - -$label = 'Perl version correct'; -if ($ivp_VERSION eq $]) { - print "## Perl version '$]' appears installed as expected.\n" if $opt{'v'}; - print "ok 2 $label\n"; +if ($ivp_VERSION == $]) { + print "## Perl version `$]' appears installed as expected.\n" if $opt{'v'}; + print "ok 2\n"; $pass__total++; } else { - print "# Perl version '$]' installed, expected $ivp_VERSION.\n"; - print "not ok 2 $label\n"; + print "# Perl version `$]' installed, expected $ivp_VERSION.\n"; + print "not ok 2\n"; $error_total++; } $tests_total++; -# We have the right perl and version, so now reset @INC so we ignore -# PERL5LIB and '.' -{ - local $ENV{PERL5LIB}; - my $perl_V = qx($perlpath -V); - $perl_V =~ s{.*\@INC:\n}{}ms; - @INC = grep { length && $_ ne '.' } split ' ', $perl_V; -} -print "## Checking roots of the Perl library directory tree via variable '\@INC'.\n" if $opt{'p'}; +print "## Checking roots of the Perl library directory tree via variable `\@INC'.\n" if $opt{'p'}; my $INC_total = 0; my $INC_there = 0; foreach (@INC) { next if $_ eq '.'; # skip -d test here + if ($^O eq 'MacOS') { + next if $_ eq ':'; # skip -d test here + next if $_ eq 'Dev:Pseudo:'; # why is this in @INC? + } if (-d $_) { - print "## Perl \@INC directory '$_' exists.\n" if $opt{'v'}; + print "## Perl \@INC directory `$_' exists.\n" if $opt{'v'}; $INC_there++; } else { - print "# Perl \@INC directory '$_' does not appear to exist.\n"; + print "# Perl \@INC directory `$_' does not appear to exist.\n"; } $INC_total++; } - -$label = '@INC directoreis exist'; if ($INC_total == $INC_there) { - print "ok 3 $label\n"; + print "ok 3\n"; $pass__total++; } else { - print "not ok 3 $label\n"; + print "not ok 3\n"; $error_total++; } $tests_total++; @@ -184,21 +177,20 @@ foreach (qw(Config.pm ExtUtils/Installed.pm)) { $needed_total++; eval "require \"$_\";"; if (!$@) { - print "## Module '$_' appears to be installed.\n" if $opt{'v'}; + print "## Module `$_' appears to be installed.\n" if $opt{'v'}; $needed_there++; } else { - print "# Needed module '$_' does not appear to be properly installed.\n"; + print "# Needed module `$_' does not appear to be properly installed.\n"; } $@ = undef; } -$label = 'Modules needed for rest of perlivp exist'; if ($needed_total == $needed_there) { - print "ok 4 $label\n"; + print "ok 4\n"; $pass__total++; } else { - print "not ok 4 $label\n"; + print "not ok 4\n"; $error_total++; } $tests_total++; @@ -218,27 +210,18 @@ if (defined($Config{'extensions'})) { next if ($_ eq 'threads'); next if ($_ eq 'threads/shared'); } - # that's a distribution name, not a module name - next if $_ eq 'IO/Compress'; - next if $_ eq 'Devel/DProf'; - next if $_ eq 'libnet'; - next if $_ eq 'Locale/Codes'; - next if $_ eq 'podlators'; - next if $_ eq 'perlfaq'; - # test modules - next if $_ eq 'XS/APItest'; - next if $_ eq 'XS/Typemap'; + next if ($_ eq 'Devel/DProf'); # VMS$ perl -e "eval ""require \""Devel/DProf.pm\"";"" print $@" # \NT> perl -e "eval \"require 'Devel/DProf.pm'\"; print $@" # DProf: run perl with -d to use DProf. # Compilation failed in require at (eval 1) line 1. eval " require \"$_.pm\"; "; if (!$@) { - print "## Module '$_' appears to be installed.\n" if $opt{'v'}; + print "## Module `$_' appears to be installed.\n" if $opt{'v'}; $extensions_there++; } else { - print "# Required module '$_' does not appear to be properly installed.\n"; + print "# Required module `$_' does not appear to be properly installed.\n"; $@ = undef; } $extensions_total++; @@ -246,29 +229,28 @@ if (defined($Config{'extensions'})) { # A silly name for a module (that hopefully won't ever exist). # Note that this test serves more as a check of the validity of the - # actual required module tests above. + # actuall required module tests above. my $unnecessary = 'bLuRfle'; if (!grep(/$unnecessary/, @extensions)) { $@ = undef; eval " require \"$unnecessary.pm\"; "; if ($@) { - print "## Unnecessary module '$unnecessary' does not appear to be installed.\n" if $opt{'v'}; + print "## Unnecessary module `$unnecessary' does not appear to be installed.\n" if $opt{'v'}; } else { - print "# Unnecessary module '$unnecessary' appears to be installed.\n"; + print "# Unnecessary module `$unnecessary' appears to be installed.\n"; $extensions_there++; } } $@ = undef; } -$label = 'All (and only) expected extensions installed'; if ($extensions_total == $extensions_there) { - print "ok 5 $label\n"; + print "ok 5\n"; $pass__total++; } else { - print "not ok 5 $label\n"; + print "not ok 5\n"; $error_total++; } $tests_total++; @@ -302,12 +284,6 @@ for (@modules) { $version = undef; @missing = (); @missing = $installed -> validate($_); - - # .bs files are optional - @missing = grep { ! /\.bs$/ } @missing; - # man files are often compressed - @missing = grep { ! ( -s "$_.gz" || -s "$_.bz2" ) } @missing; - if ($#missing >= 0) { print "# file",+($#missing == 0) ? '' : 's'," missing from installation:\n"; print '# ',join(' ',@missing),"\n"; @@ -317,14 +293,64 @@ for (@modules) { } @missing = (); } -$label = 'Module files correctly installed'; if (($installed_total == $installed_there) && ($installed_total == $version_check)) { - print "ok 6 $label\n"; + print "ok 6\n"; $pass__total++; } else { - print "not ok 6 $label\n"; + print "not ok 6\n"; + $error_total++; +} +$tests_total++; + + +print "## Checking installations of *.h -> *.ph header files.\n" if $opt{'p'}; +my $ph_there = 0; +my $var = undef; +my $val = undef; +my $h_file = undef; +# Just about "any" C implementation ought to have a stdio.h (even if +# Config.pm may not list a i_stdio var). +my @ph_files = qw(stdio.ph); +# Add the ones that we know that perl thinks are there: +while (($var, $val) = each %Config) { + if ($var =~ m/i_(.+)/ && $val eq 'define') { + $h_file = $1; + # Some header and symbol names don't match for hysterical raisins. + $h_file = 'arpa/inet' if $h_file eq 'arpainet'; + $h_file = 'netinet/in' if $h_file eq 'niin'; + $h_file = 'netinet/tcp' if $h_file eq 'netinettcp'; + $h_file = 'sys/resource' if $h_file eq 'sysresrc'; + $h_file = 'sys/select' if $h_file eq 'sysselct'; + $h_file = 'sys/security' if $h_file eq 'syssecrt'; + $h_file = 'rpcsvc/dbm' if $h_file eq 'rpcsvcdbm'; + # This ought to distinguish syslog from sys/syslog. + # (NB syslog.ph is heavily used for the DBI pre-requisites). + $h_file =~ s{^sys(\w.+)}{sys/$1} unless $h_file eq 'syslog'; + push(@ph_files, "$h_file.ph"); + } +} +#foreach (qw(stdio.ph syslog.ph)) { +foreach (@ph_files) { + $@ = undef; + eval "require \"$_\";"; + if (!$@) { + print "## Perl header `$_' appears to be installed.\n" if $opt{'v'}; + $ph_there++; + } + else { + print "# Perl header `$_' does not appear to be properly installed.\n"; + } + $@ = undef; +} + +if (scalar(@ph_files) == $ph_there) { + print "ok 7\n"; + $pass__total++; +} +else { + print "not ok 7\n"; $error_total++; } $tests_total++; @@ -346,7 +372,7 @@ if ($error_total == 0 && $tests_total) { =head1 NAME -perlivp - Perl Installation Verification Procedure +B<perlivp> - Perl Installation Verification Procedure =head1 SYNOPSIS @@ -392,35 +418,35 @@ or not -v is thrown. =over 4 -=item * print "# Perl binary '$perlpath' does not appear executable.\n"; +=item * print "# Perl binary `$perlpath' does not appear executable.\n"; Likely to occur for a perl binary that was not properly installed. Correct by conducting a proper installation. -=item * print "# Perl version '$]' installed, expected $ivp_VERSION.\n"; +=item * print "# Perl version `$]' installed, expected $ivp_VERSION.\n"; Likely to occur for a perl that was not properly installed. Correct by conducting a proper installation. -=item * print "# Perl \@INC directory '$_' does not appear to exist.\n"; +=item * print "# Perl \@INC directory `$_' does not appear to exist.\n"; Likely to occur for a perl library tree that was not properly installed. Correct by conducting a proper installation. -=item * print "# Needed module '$_' does not appear to be properly installed.\n"; +=item * print "# Needed module `$_' does not appear to be properly installed.\n"; One of the two modules that is used by perlivp was not present in the installation. This is a serious error since it adversely affects perlivp's ability to function. You may be able to correct this by performing a proper perl installation. -=item * print "# Required module '$_' does not appear to be properly installed.\n"; +=item * print "# Required module `$_' does not appear to be properly installed.\n"; An attempt to C<eval "require $module"> failed, even though the list of extensions indicated that it should succeed. Correct by conducting a proper installation. -=item * print "# Unnecessary module 'bLuRfle' appears to be installed.\n"; +=item * print "# Unnecessary module `bLuRfle' appears to be installed.\n"; This test not coming out ok could indicate that you have in fact installed a bLuRfle.pm module or that the C<eval " require \"$module_name.pm\"; "> @@ -433,6 +459,11 @@ One or more files turned up missing according to a run of C<ExtUtils::Installed -E<gt> validate()> over your installation. Correct by conducting a proper installation. +=item * print "# Perl header `$_' does not appear to be properly installed.\n"; + +Correct by running B<h2ph> over your system's C header files. If necessary, +edit the resulting *.ph files to eliminate perl syntax errors. + =back For further information on how to conduct a proper installation consult the |