# New Ticket Created by  Reini Urban 
# Please include the string:  [perl #58852]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=58852 >


Enhance tools/install/smoke.pl to test already installed parrot by using 
%PConfig and a DESTDIR arg for a temporary installation.

Attached patch is r31113 in the branch cygwin070patches.

   parrot in bin

     % cd /usr/local/parrot-$version
     % perl tools/install/smoke.pl -Ilib

   parrot in .

     % perl tools/install/smoke.pl --bindir=.

   test installation in DESTDIR:

     % cd /usr/src/parrot
     % mkdir .inst
     % make install DESTDIR=.inst
     % perl tools/install/smoke.pl DESTDIR=.inst

Options:
-I libdir

Add libdir to the libpath to find Parrot::Config

--bindir=/usr/bin

Override Parrot::Config bindir

--libdir=/usr/lib

Override Parrot::Config libdir

--prefix=/usr

Override Parrot::Config prefix and adjust
libdir and bindir accordingly.

DESTDIR=instpath

Use the temp. installation in instpath.

-- 
Reini Urban
http://phpwiki.org/  http://murbreak.at/
Index: tools/install/smoke.pl
===================================================================
--- tools/install/smoke.pl	(revision 31112)
+++ tools/install/smoke.pl	(working copy)
@@ -4,6 +4,10 @@
 
 use strict;
 use warnings;
+use 5.008;
+use Getopt::Long;
+use lib qw( lib );
+use vars qw( %PConfig );
 
 use Test::More tests => 29;
 
@@ -13,39 +17,116 @@
 
 =head1 SYNOPSIS
 
+  parrot in bin
+
     % cd /usr/local/parrot-$version
-    % perl tools/install/smoke.pl
+    % perl tools/install/smoke.pl -Ilib
 
+  parrot in .
+
+    % perl tools/install/smoke.pl --bindir=.
+
+  test installation in DESTDIR:
+
+    % cd /usr/src/parrot
+    % mkdir .inst
+    % make install DESTDIR=.inst
+    % perl tools/install/smoke.pl DESTDIR=.inst
+
+
 =head1 DESCRIPTION
 
 Checks that most of things run (or just start) into the install directory,
-try to detect missing part.
+try to detect missing parts.
 
+=head1 OPTIONS
+
+=over
+
+=item -I libdir
+
+Add libdir to the libpath to find Parrot::Config
+
+=item --bindir=/usr/bin
+
+Override Parrot::Config bindir
+
+=item --libdir=/usr/lib
+
+Override Parrot::Config libdir
+
+=item --prefix=/usr
+
+Override Parrot::Config prefix and adjust
+libdir and bindir accordingly.
+
+=item DESTDIR=instpath
+
+Use the temp. installation in instpath.
+
+=back
+
 =cut
 
+my (@libdirs, $prefix, $bindir, $libdir, $DESTDIR);
+my $opts = GetOptions( 'I=s'       => [EMAIL PROTECTED],
+                       'prefix=s'  => \$prefix,
+                       'bindir=s'  => \$bindir,
+                       'libdir=s'  => \$libdir,
+                       'DESTDIR=s' => \$DESTDIR,
+                     );
+if (@libdirs) {
+    push @INC, @libdirs;
+}
+require Parrot::Config;
+Parrot::Config->import;
+require Parrot::Test;
+
+$bindir = $PConfig{bindir} unless $bindir;
+$libdir = $PConfig{libdir} unless $libdir;
+if ($prefix) {
+    $bindir = $prefix . "/bin";
+    $libdir = $prefix . "/lib";
+}
+# Check for DESTDIR arg and adjust the path
+if (@ARGV and $ARGV[0] =~ /^DESTDIR/) {
+    if ($ARGV[0] =~ /^DESTDIR=(\S+)/) {
+        $DESTDIR = $1;
+    } else {
+        $DESTDIR = $ARGV[1];
+    }
+}
+if ($DESTDIR) {
+    my $envsep = $^O eq 'MSWin32' ? ';' : ':';
+    $ENV{PATH} = $DESTDIR.$bindir.$envsep.$ENV{PATH};
+    $bindir = $DESTDIR . $bindir;
+    $libdir = $DESTDIR . $libdir;
+}
+
 use File::Spec::Functions;
 
 my $filename;
 my $exe;
 my $out;
 my $FH;
-my $parrot = catfile('bin', 'parrot');
+my $parrot = catfile($bindir, 'parrot');
 
 #
 # parrot executable
 #
+-x $parrot or die "$parrot does not exist\n";
 
-$exe = catfile('bin', 'pbc_merge');
+$exe = catfile($bindir, 'pbc_merge');
 $out = `$exe`;
 ok($out =~ /^pbc_merge/, "check pbc_merge");
 
-$exe = catfile('bin', 'pdump');
+$exe = catfile($bindir, 'pdump');
 $out = `$exe`;
 ok($out =~ /^pdump/, "check pdump");
 
 ok(system("$parrot -V") == 0, "display parrot version");
 
-$exe = catfile('bin', 'perl6');
+$exe = catfile($bindir, 'perl6');
 $out = `$exe -v`;
 ok($out =~ /Rakudo/, "check rakudo");
 
@@ -58,10 +139,11 @@
         or die "Can't open $filename ($!).\n";
 print $FH "token TOP { \\s* }\n";
 close $FH;
-$out = `$parrot lib/parrot/library/PGE/Perl6Grammar.pir $filename`;
+$out = `$parrot $libdir/parrot/library/PGE/Perl6Grammar.pir $filename`;
 ok($out =~ /^\n## <::TOP>/, "check PGE");
 unlink($filename);
 
+# compilers/tge is typically not installed
 $filename = 'test.tg';
 open $FH, '>', $filename
         or die "Can't open $filename ($!).\n";
@@ -71,6 +153,7 @@
 ok($out =~ /^\n\.sub '_ROOT_past'/, "check TGE");
 unlink($filename);
 
+# compilers/nqp is typically not installed
 $filename = 'test.nqp';
 open $FH, '>', $filename
         or die "Can't open $filename ($!).\n";
@@ -129,7 +212,7 @@
         or die "Can't open $filename ($!).\n";
 print $FH "H";
 close $FH;
-$out = `$parrot languages/HQ9Plus/HQ9Plus.pbc $filename`;
+$out = `$parrot languages/hq9plus/hq9plus.pbc $filename`;
 ok($out eq "Hello, world!\n", "check HQ9Plus");
 unlink($filename);
 

Reply via email to