develooper Front page | perl.perl5.porters | Postings from August 2001

[PATCH: perl@11564] introducing perlivp

Thread Next
From:
Prymmer/Kahn
Date:
August 5, 2001 22:00
Subject:
[PATCH: perl@11564] introducing perlivp
Message ID:
Pine.BSF.4.21.0108052155110.7110-100000@shell8.ba.best.com


Greetings,

The enclosed patch introduces an initial implementation of an installation
verification procedure to perl@11564.

The tests performed emphasize tests of `make install` file system layout
and have been tried out on Unix, VMS, and Win32.  This new perlivp utility
does not (yet) attempt to re-use the tests in t/*/*.t in any way, although 
there is currently a plan for a separate B<makeivp> program that will 
eventually "help" with that task (should it be deemed worth pursuing: it 
may impose format constraints on writing tests).

There are currently only a total of seven tests performed by this
B<perlivp> but they are intended to spot common mis-installation errors
and perhaps diagnose how to deal with the errors.  I have seen a few unix
vendors supply perls that were misinstalled in that the perl binary's idea
of @INC did not correspond to the place in the file system where the perl
*.pm tree was installed e.g..  The tests are intended to not make too much 
actual use of an installed lib tree since B<perlivp> is supposed to help 
spot and diagnose broken @INC trees (it does 
B<use Config; use ExtUtils::Installed;> though).  The tests are roughly:

1. does $Config{perlpath} point to a file that is -x executable?

2. does the current running $] version correspond to the $] version
   that was used during the perlivp.PL -> perlivp extraction.  This
   ought to spot problems with people attempting to run:

     /some/path/to/perl5.005_03 /usr/local/bin/perlivp

3. Does each element of @INC exist in the -d sense?  This will turn up
   folks who have not run `make install` on Unix or VMS.  Unfortunately
   this test seems to pass with a win32 build where `nmake install` has
   not yet been run - owing to the dynamic way in which @INC is constructed
   in the win32 port.  I'd appreciate hearing if this test is ok with 
   AFS, depot, symlink trees, etc. types of funny file system shenanigans.

4. Does $Config{extensions} list a bunch of modules that can be "tested"
   with C<eval " require \"$ext_name.pm\"; ";>?  This ought to spot
   trouble with installperl and/or with a port's config.sh -> Config.pm
   file(s).  Note that it proved necessary to skip C<require "Devel/Dprof.pm";>
   since that module is un-requirable (BTW should this be considered a bug in 
   the current Devel/Dprof.pm?).

5. Does C<eval " require \"bLuRfle.pm\"; ";> "fail"?  This ought to spot
   problems with the methodology employed in test 4 provided that the
   perladmin person has not in fact installed a bLuRfle.pm module.

6. Do all the modules pointed to by ExtUtils::Installed->modules()
   pass a ->version() and a ->validate() check?  One might regard this
   as a test of ExtUtils::Installed, or of the port of MakeMaker and 
   the ports generated .packlist files etc.  This particular test turned 
   up the missing libnetcfg.bat and xsubpp.bat files from the win32 build
   recently hence it has already proven valuable.  This is also the test 
   that will automatically scale with the more CPAN modules and extensions 
   that be added later by the perladmin (very nice but really Alan Burlison
   deserves the credit for doing the hard ground work).

7. Does a test of C<eval " require \"$perl_header\"; ";> run ok with
   all of the system header files that Configure (and config.sh -> Config.pm)
   know about?  This test will not pass until after h2ph is run over all
   system headers and any perl syntax errors in the generated *.ph files
   is hand edited.  Oddly I cannot file a sys/filio.h in my Win32 MS VC 5
   include directory but the win32/config_vc.h file mentions that I ought
   to have C<i_sysfilio='define'> so I still think there is a config error
   here.

That is all so far (more makeivp stuff will come with a later patch).

A recommended way to test the new perlivp, at least on unix, would be
to Configure a build of perl so as to install it in an out of the
way place by specifying the prefix.  E.g. /tmp/perl_install like so:

   sh Configure -Dusedevl -Dprefix=/tmp/perl_install -des

(on Win32 you'd have to edit the win32/Makefile or win32/makefile.mk, on VMS 
use C<@configure "-Dprefix=disk1:[perl_install.]").

  make
  make test

at this point utils/perlivp will be extracted ([.utils]perlivp.com on VMS, 
utils\perlivp.bat on win32).  You could verify that not all the tests pass 
at this point with:

  ./perl -Ilib utils/perlivp

Now comes time to run install and to run h2ph:

  make install
  cd /usr/include
  /tmp/perl_install/bin/h2hp *.h sys/*.h

Now perlivp ought to pass all tests:

  /tmp/perl_install/bin/perlivp

After application of this patch I hope to finish up work on a B<makeivp>
build script that will at the least take a copy of everything in t/* and make 
a copy in a new build directory ivp/t/*, with special care being taken to 
# comment out any @INC assignment statements in an effort to make the 
t/*/*.t tests slightly more file system portable.  That ivp directory could
then be archived using a platform's favorite archiver (there are ports of
tar and gzip for most of the major perl platforms, though perhaps windows
folks might prefer to zip up the ivp/* dir, VMS folks might prefer to 
BACKUP the [.ivp] tree etc.).  At any rate while B<makeivp> is being readied 
for prime time might be a good time to discusss a few points such as: should 
we have provision for installing the ivp/* dir tree next to the perl 
installation?  Should we then alter the B<perlivp> procedure to run the 
ivp/t/TEST harness?  etc.

Files affected by this patch (which does not include B<makeivp> are:

  MANIFEST                  Add mention of new utils/perlivp.PL file
  utils.lst                 mention utils/perlivp
  utils/Makefile            add perlivp.PL -> perlivp extraction
  utils/perlivp.PL          New file
  vms/descrip_mms.template  add perlivp.PL -> perlivp.com extraction
  win32/Makefile            add to UTILS macro so pl2bat gets run
  win32/makefile.mk         add to UTILS macro so pl2bat gets run

Note that in the plaintext diff that I include below the lines added to
these latter two win32 specific Makefiles did come equipped with ^M chars
at the end of each line.  Unfortunately under this MUA I am not sure if
they are preserved hence caution may be required.

Files left untouched by this patch, despite their suggestive names
that indicate that perhaps I ought to have modified them, may 
(or may not?) include:

 mint/Makefile               MiNT port
 NetWare/Makefile            Netware port
 vmesa/Makefile              VM/ESA Makefile
 vos/Makefile                A helper for maintaining the config.*.* in UNIX

I would appreciate it if those port's champions might glance into a new
utils/*.PL file and whether or not their Makefile's might need a
corresponding update, or will the update to utils/Makefile
suffice.  Thank you.

Peter Prymmer

diff -ruN perl_11564_orig/MANIFEST perl_11564/MANIFEST
--- perl_11564_orig/MANIFEST	Sun Aug  5 20:58:50 2001
+++ perl_11564/MANIFEST	Sun Aug  5 21:48:36 2001
@@ -2151,6 +2151,7 @@
 utils/perlbug.PL		A simple tool to submit a bug report
 utils/perlcc.PL			Front-end for compiler
 utils/perldoc.PL		A simple tool to find & display perl's documentation
+utils/perlivp.PL		installation verification procedure
 utils/pl2pm.PL			A pl to pm translator
 utils/splain.PL			Stand-alone version of diagnostics.pm
 uts/sprintf_wrap.c		sprintf wrapper for UTS
diff -ruN perl_11564_orig/utils/Makefile perl_11564/utils/Makefile
--- perl_11564_orig/utils/Makefile	Sun Aug  5 20:59:20 2001
+++ perl_11564/utils/Makefile	Sun Aug  5 21:49:52 2001
@@ -5,9 +5,9 @@
 # Files to be built with variable substitution after miniperl is
 # available.  Dependencies handled manually below (for now).
 
-pl = c2ph.PL h2ph.PL h2xs.PL perlbug.PL perldoc.PL pl2pm.PL splain.PL perlcc.PL dprofpp.PL libnetcfg.PL
-plextract  = c2ph h2ph h2xs perlbug perldoc pl2pm splain perlcc dprofpp libnetcfg
-plextractexe  = ./c2ph ./h2ph ./h2xs ./perlbug ./perldoc ./pl2pm ./splain ./perlcc ./dprofpp ./libnetcfg
+pl = c2ph.PL h2ph.PL h2xs.PL perlbug.PL perldoc.PL perlivp.PL pl2pm.PL splain.PL perlcc.PL dprofpp.PL libnetcfg.PL
+plextract  = c2ph h2ph h2xs perlbug perldoc perlivp pl2pm splain perlcc dprofpp libnetcfg
+plextractexe  = ./c2ph ./h2ph ./h2xs ./perlbug ./perldoc ./perlivp ./pl2pm ./splain ./perlcc ./dprofpp ./libnetcfg
 
 all: $(plextract) 
 
@@ -17,6 +17,7 @@
 	$(REALPERL) -I../lib perlcc -I .. -L .. h2xs -o h2xs.exe -v 10 -log ../compilelog;
 	$(REALPERL) -I../lib perlcc -I .. -L .. perlbug -o perlbug.exe -v 10 -log ../compilelog;
 	$(REALPERL) -I../lib perlcc -I .. -L .. perldoc -o perldoc.exe -v 10 -log ../compilelog;
+	$(REALPERL) -I../lib perlcc -I .. -L .. perlivp -o perlivp.exe -v 10 -log ../compilelog;
 	$(REALPERL) -I../lib perlcc -I .. -L .. pl2pm -o pl2pm.exe -v 10 -log ../compilelog;
 	$(REALPERL) -I../lib perlcc -I .. -L .. splain -o splain.exe -v 10 -log ../compilelog;
 	$(REALPERL) -I../lib perlcc -I .. -L .. perlcc -I .. -L .. -o perlcc.exe -v 10 -log ../compilelog;
@@ -35,6 +36,8 @@
 perlbug:	perlbug.PL ../config.sh ../patchlevel.h
 
 perldoc:	perldoc.PL ../config.sh
+
+perlivp:	perlivp.PL ../config.sh
 
 pl2pm:		pl2pm.PL ../config.sh
 
diff -ruN perl_11564_orig/utils/perlivp.PL perl_11564/utils/perlivp.PL
--- perl_11564_orig/utils/perlivp.PL	Wed Dec 31 16:00:00 1969
+++ perl_11564/utils/perlivp.PL	Sun Aug  5 21:50:41 2001
@@ -0,0 +1,466 @@
+#!/usr/local/bin/perl
+
+use Config;
+use File::Basename;
+use Cwd;
+
+# List explicitly here the variables you want Configure to
+# generate.  Metaconfig only looks for shell variables, so you
+# have to mention them as if they were shell variables, not
+# %Config entries:
+#  $startperl
+#  $perlpath
+#  $eunicefix
+
+# This forces PL files to create target in same directory as PL file.
+# This is so that make depend always knows where to find PL derivatives.
+$origdir = cwd;
+chdir dirname($0);
+$file = basename($0, '.PL');
+$file .= '.com' if $^O eq 'VMS';
+
+# Create output file.
+open OUT,">$file" or die "Can't create $file: $!";
+
+print "Extracting $file (with variable substitutions)\n";
+
+# In this section, perl variables will be expanded during extraction.
+# You can use $Config{...} to use Configure variables.
+
+print OUT <<"!GROK!THIS!";
+$Config{'startperl'}
+    eval 'exec $Config{'perlpath'} -S \$0 \${1+"\$@"}'
+        if \$running_under_some_shell;
+!GROK!THIS!
+
+# In the following, perl variables are not expanded during extraction.
+
+print OUT <<'!NO!SUBS!';
+
+# perlivp V 0.01
+
+
+sub usage {
+    warn "@_\n" if @_;
+    print << "    EOUSAGE";
+Usage:
+
+    $0 [-p] [-v] | [-h]
+
+    -p Print a preface before each test telling what it will test.
+    -v Verbose mode in which extra information about test results
+       is printed.  Test failures always print out some extra information
+       regardless of whether or not this switch is set.
+    -h Prints this help message.
+    EOUSAGE
+    exit;
+}
+
+use vars (%opt); # allow testing with older versions (do not use our)
+
+@opt{ qw/? H h P p V v/ } = qw(0 0 0 0 0 0 0);
+
+while ($ARGV[0] =~ /^-/) {
+    $ARGV[0] =~ s/^-//; 
+    for my $flag (split(//,$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}++;
+    } 
+    shift;
+}
+
+$opt{p}++ if $opt{P};
+$opt{v}++ if $opt{V};
+
+my $pass__total = 0;
+my $error_total = 0;
+my $tests_total = 0;
+
+!NO!SUBS!
+
+# 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; }
+
+print OUT <<"!GROK!THIS!";
+my \$perlpath = '$perlpath';
+!GROK!THIS!
+
+print OUT <<'!NO!SUBS!';
+
+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\n";
+    $pass__total++;
+}
+else {
+    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'};
+
+!NO!SUBS!
+
+print OUT <<"!GROK!THIS!";
+my \$ivp_VERSION = $];
+
+!GROK!THIS!
+print OUT <<'!NO!SUBS!';
+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\n";
+    $error_total++;
+}
+$tests_total++;
+
+
+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'};
+        $INC_there++;
+    }
+    else {
+        print "# Perl \@INC directory `$_' does not appear to exist.\n";
+    }
+    $INC_total++;
+}
+if ($INC_total == $INC_there) {
+    print "ok 3\n";
+    $pass__total++;
+}
+else {
+    print "not ok 3\n";
+    $error_total++;
+}
+$tests_total++;
+
+
+print "## Checking installations of modules necessary for ivp.\n" if $opt{'p'};
+
+my $needed_total = 0;
+my $needed_there = 0;
+foreach (qw(Config.pm ExtUtils/Installed.pm)) {
+    $@ = undef;
+    $needed_total++;
+    eval "require \"$_\";";
+    if (!$@) {
+        print "## Module `$_' appears to be installed.\n" if $opt{'v'};
+        $needed_there++;
+    }
+    else {
+        print "# Needed module `$_' does not appear to be properly installed.\n";
+    }
+    $@ = undef;
+}
+if ($needed_total == $needed_there) {
+    print "ok 4\n";
+    $pass__total++;
+}
+else {
+    print "not ok 4\n";
+    $error_total++;
+}
+$tests_total++;
+
+
+print "## Checking installations of extensions built with perl.\n" if $opt{'p'};
+
+use Config;
+
+my $extensions_total = 0;
+my $extensions_there = 0;
+if (defined($Config{'extensions'})) {
+    my @extensions = split(/\s+/,$Config{'extensions'});
+    foreach (@extensions) {
+        next if ($_ eq '');
+        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'};
+            $extensions_there++;
+        }
+        else {
+            print "# Required module `$_' does not appear to be properly installed.\n";
+            $@ = undef;
+        }
+        $extensions_total++;
+    }
+
+    # 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
+    # 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'};
+        }
+        else {
+            print "# Unnecessary module `$unnecessary' appears to be installed.\n";
+            $extensions_there++;
+        }
+    }
+    $@ = undef;
+}
+if ($extensions_total == $extensions_there) {
+    print "ok 5\n";
+    $pass__total++;
+}
+else {
+    print "not ok 5\n";
+    $error_total++;
+}
+$tests_total++;
+
+
+print "## Checking installations of later additional extensions.\n" if $opt{'p'};
+
+use ExtUtils::Installed;
+
+my $installed_total = 0;
+my $installed_there = 0;
+my $version_check = 0;
+my $installed = ExtUtils::Installed -> new();
+my @modules = $installed -> modules();
+my @missing = ();
+my $version = undef;
+for (@modules) {
+    $installed_total++;
+    # Consider it there if it contains one or more files,
+    # and has zero missing files,
+    # and has a defined version
+    $version = undef;
+    $version = $installed -> version($_);
+    if ($version) {
+        print "## $_; $version\n" if $opt{'v'};
+        $version_check++;
+    }
+    else {
+        print "# $_; NO VERSION\n" if $opt{'v'};
+    }
+    $version = undef;
+    @missing = ();
+    @missing = $installed -> validate($_);
+    if ($#missing >= 0) {
+        print "# file",+($#missing == 0) ? '' : 's'," missing from installation:\n";
+        print '# ',join(' ',@missing),"\n";
+    }
+    elsif ($#missing == -1) {
+        $installed_there++;
+    }
+    @missing = ();
+}
+if (($installed_total == $installed_there) && 
+    ($installed_total == $version_check)) {
+    print "ok 6\n";
+    $pass__total++;
+}
+else {
+    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;
+        # This ought to distinguish syslog from sys/syslog.
+        # (NB syslog.ph is heavily used for the DBI pre-requisites).
+        $h_file =~ s{^sys(.+)}{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++;
+
+# Final report (rather than feed ousrselves to Test::Harness::runtests()
+# we simply format some output on our own to keep things simple and
+# easier to "fix" - at least for now.
+
+if ($error_total == 0 && $tests_total) {
+    print "All tests successful.\n";
+} elsif ($tests_total==0){
+        die "FAILED--no tests were run for some reason.\n";
+} else {
+    my $rate = 0.0;
+    if ($tests_total > 0) { $rate = sprintf "%.2f", 100.0 * ($pass__total / $tests_total); }
+    printf " %d/%d subtests failed, %.2f%% okay.\n",
+                              $error_total, $tests_total, $rate;
+}
+
+=head1 NAME
+
+B<perlivp> - Perl Installation Verification Procedure
+
+=head1 SYNOPSIS
+
+B<perlivp> [B<-p>] [B<-v>] [B<-h>]
+
+=head1 DESCRIPTION
+
+The B<perlivp> program is set up at Perl source code build time to test the
+Perl version it was built under.  It can be used after running:
+
+    make install
+
+(or your platform's equivalent procedure) to verify that B<perl> and its
+libraries have been installed correctly.  A correct installation is verified
+by output that looks like:
+
+    ok 1
+    ok 2
+
+etc.
+
+=head1 OPTIONS
+
+=over 5
+
+=item B<-h> help
+
+Prints out a brief help message.
+
+=item B<-p> print preface
+
+Gives a description of each test prior to performing it.
+
+=item B<-v> verbose
+
+Gives more detailed information about each test, after it has been performed.
+Note that any failed tests ought to print out some extra information whether
+or not -v is thrown.
+
+=back
+
+=head1 DIAGNOSTICS
+
+=over 4
+
+=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";
+
+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";
+
+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";
+
+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";
+
+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";
+
+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\"; ">
+test may give misleading results with your installation of perl.  If yours
+is the latter case then please let the author know.
+
+=item * print "# file",+($#missing == 0) ? '' : 's'," missing from installation:\n";
+
+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 
+INSTALL file that comes with the perl source and the README file for your 
+platform.
+
+=head1 AUTHOR
+
+Peter Prymmer
+
+=cut
+
+!NO!SUBS!
+
+close OUT or die "Can't close $file: $!";
+chmod 0755, $file or die "Can't reset permissions for $file: $!\n";
+exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':';
+chdir $origdir;
+
diff -ruN perl_11564_orig/vms/descrip_mms.template perl_11564/vms/descrip_mms.template
--- perl_11564_orig/vms/descrip_mms.template	Sun Aug  5 21:00:52 2001
+++ perl_11564/vms/descrip_mms.template	Sun Aug  5 21:51:33 2001
@@ -328,7 +328,7 @@
 LIBPREREQ = $(ARCHDIR)Config.pm [.lib.VMS]Filespec.pm [.lib]DynaLoader.pm [.lib]XSLoader.pm [.lib]lib.pm [.lib]vmsish.pm [.lib.ExtUtils]XSSymSet.pm $(ARCHDIR)vmspipe.com [.lib]re.pm
 
 utils1 = [.lib.pod]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com [.utils]h2xs.com [.lib]perlbug.com [.lib]perlcc.com [.utils]dprofpp.com
-utils2 = [.lib]splain.com [.utils]pl2pm.com
+utils2 = [.utils]perlivp.com [.lib]splain.com [.utils]pl2pm.com
 
 .ifdef NOX2P
 all : base extras archcorefiles preplibrary perlpods
@@ -511,6 +511,9 @@
 [.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c $(ARCHDIR)Config.pm
 	$(MINIPERL) $(MMS$SOURCE) >$(MMS$TARGET)
 
+[.utils]perlivp.com : [.utils]perlivp.PL $(ARCHDIR)Config.pm
+	$(MINIPERL) $(MMS$SOURCE)
+
 [.utils]c2ph.com : [.utils]c2ph.PL $(ARCHDIR)Config.pm
 	$(MINIPERL) $(MMS$SOURCE)
 
@@ -1317,6 +1320,7 @@
 	- If F$Search("[.lib.ExtUtils]XSSymSet.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]XSSymSet.pm;*
 	- If F$Search("[.lib.pod]*.pod").nes."" Then Delete/NoConfirm/Log [.lib.pod]*.pod;*
 	- If F$Search("[.lib.pod]perldoc.com").nes."" Then Delete/NoConfirm/Log [.lib.pod]perldoc.com;*
+	- If F$Search("[.utils]perlivp.com").nes."" Then Delete/NoConfirm/Log [.utils]perlivp.com;*
 	- If F$Search("[.lib.pod]pod2*.com").nes."" Then Delete/NoConfirm/Log [.lib.pod]pod2*.com;*
 	- If F$Search("[.t.lib]vms*.t").nes."" Then Delete/NoConfirm/Log [.t.lib]vms*.t;*
 	- If F$Search("[...]*$(E)").nes."" Then Delete/NoConfirm/Log [...]*$(E);*
diff -ruN perl_11564_orig/win32/Makefile perl_11564/win32/Makefile
--- perl_11564_orig/win32/Makefile	Sun Aug  5 20:59:46 2001
+++ perl_11564/win32/Makefile	Sun Aug  5 21:02:42 2001
@@ -457,6 +457,7 @@
 		..\utils\h2xs		\
 		..\utils\perldoc	\
 		..\utils\perlcc		\
+		..\utils\perlivp	\
 		..\utils\libnetcfg	\
 		..\pod\checkpods	\
 		..\pod\pod2html		\
@@ -1032,7 +1033,7 @@
 	    perlwin32.pod pod2html pod2latex pod2man pod2text pod2usage \
 	    podchecker podselect
 	cd ..\utils
-	-del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc dprofpp
+	-del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc perlivp dprofpp
 	-del /f *.bat
 	cd ..\win32
 	cd ..\x2p
diff -ruN perl_11564_orig/win32/makefile.mk perl_11564/win32/makefile.mk
--- perl_11564_orig/win32/makefile.mk	Sun Aug  5 21:00:02 2001
+++ perl_11564/win32/makefile.mk	Sun Aug  5 21:02:12 2001
@@ -593,6 +593,7 @@
 		..\utils\h2xs		\
 		..\utils\perldoc	\
 		..\utils\perlcc		\
+		..\utils\perlivp	\
 		..\utils\libnetcfg	\
 		..\pod\checkpods	\
 		..\pod\pod2html		\
@@ -1169,7 +1170,7 @@
 	    perlwin32.pod pod2html pod2latex pod2man pod2text pod2usage \
 	    podchecker podselect
 	-cd ..\utils && del /f h2ph splain perlbug pl2pm c2ph h2xs perldoc \
-	    dprofpp *.bat
+	    perlivp dprofpp *.bat
 	-cd ..\x2p && del /f find2perl s2p *.bat
 	-del /f ..\config.sh ..\splittree.pl perlmain.c dlutils.c config.h.new
 	-del /f $(CONFIGPM)
End of Patch.






Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About