perl-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Randy Kobes <ra...@theoryx5.uwinnipeg.ca>
Subject Re: [mp2] apache/subprocess on Win32
Date Thu, 05 Jun 2003 06:44:23 GMT
On Wed, 4 Jun 2003, Stas Bekman wrote:

> Randy Kobes wrote:
> > Hi,
> >    On Win32, the apache/subprocess tests fail on Win32.
> > This is due to the following: currently, the tests do
> > something like
> >    @argv = qw(potentially something);
> >    $command = catfile $target_dir, "some_script.pl";
> >    Apache::SubProcess::spawn_proc_prog($r, $command, \@argv);
> > The problem on Win32 is that $command isn't associated with Perl.
> > To fix this, one could do one of two things.
> >
> > - create a "some_script.bat" with pl2bat, use
> >    $command = catfile $target_dir, "some_script.bat";
> > and insert a
> >    $r->subprocess_env->set(PATH => $Config{bin});
> > before invoking the script.
> >
> > - use
> >     $command = $Config{perlpath}; # or perhaps better $^X
> >     @list = ("some_script.pl", @argv);
> >     Apache::SubProcess::spawn_proc_prog($r, $command, \@list);
> > (the potentially nicer looking
> >     $command = "$Config{perlpath} some_script.pl";
> >     Apache::SubProcess::spawn_proc_prog($r, $command, \@argv);
> > doesn't work - I think it interprets $command as one single
> > command - Win32 is famous for problems with quoting command-line
> > things).
> >
> > Either of the above works - does anyone have a strong
> > preference one way or another?
>
> I prefer 2nd, since it doesn't force us to modify the filename.
> However I'd check whether $Config{perlpath} works everywhere.
> Perhaps check perl test suite to see what it uses? I remember
> there was a discussion of may be using $^X. or both.

Would you believe that $^X is reported as Apache.exe?

>
> otherwise +1
>
> > Incidentally, for both, subtests 3 and 4 need
> > some massaging for line endings - either have
> >    my $value = "some text\r\n";
> > or use
> >    $output =~ s!\r!!;
> > Although, with perlio the :crlf filter would be
> > available, which would be neater ...
>
> what about mac? there is no \r there. I guess we need to do what CGI.pm does
> or is there a standard module that defines $CRLF?
>
> In any case we could probably always write "\r\n" (e.g. "some text\r\n") and
> then after reading the output do:
>
> s/[\r\n]{1,2}/\r\n/;
>
> and only then compare. Will that work?

Yes, it does - thanks. Here's a diff that enables all the
apache/subprocess tests to pass on Win32 (I haven't tested
it on Unix):

==========================================================
Index: subprocess.pm
===================================================================
RCS file: /home/cvs/modperl-2.0/t/response/TestApache/subprocess.pm,v
retrieving revision 1.13
diff -u -r1.13 subprocess.pm
--- subprocess.pm	8 Apr 2003 02:05:34 -0000	1.13
+++ subprocess.pm	5 Jun 2003 06:51:32 -0000
@@ -5,6 +5,7 @@

 use Apache::Test;
 use Apache::TestUtil;
+require Apache::TestConfig;

 use File::Spec::Functions qw(catfile catdir);
 use IO::Select ();
@@ -44,11 +45,16 @@

     my $target_dir = catfile $vars->{documentroot}, "util";

+    my $perl = catfile $Config{bin},
+        (Apache::TestConfig::WIN32 ? 'perl.exe' : 'perl');
+
     {
         # test: passing argv + scalar context
         my $command = catfile $target_dir, "argv.pl";
         my @argv = qw(foo bar);
-        my $out_fh = Apache::SubProcess::spawn_proc_prog($r, $command, \@argv);
+        my $out_fh = Apache::TestConfig::WIN32 ?
+            Apache::SubProcess::spawn_proc_prog($r, $perl, [$command, @argv]) :
+                  Apache::SubProcess::spawn_proc_prog($r, $command, \@argv);
         my $output = read_data($out_fh);
         ok t_cmp(\@argv,
                  [split / /, $output],
@@ -61,7 +67,9 @@
         my $command = catfile $target_dir, "env.pl";
         my $value = "my cool proc";
         $r->subprocess_env->set(SubProcess => $value);
-        my $out_fh = Apache::SubProcess::spawn_proc_prog($r, $command);
+        my $out_fh = Apache::TestConfig::WIN32 ?
+            Apache::SubProcess::spawn_proc_prog($r, $perl, [$command]) :
+                  Apache::SubProcess::spawn_proc_prog($r, $command);
         my $output = read_data($out_fh);
         ok t_cmp($value,
                  $output,
@@ -72,11 +80,12 @@
     {
         # test: subproc's stdin -> stdout + list context
         my $command = catfile $target_dir, "in_out.pl";
-        my $value = "my cool proc\n"; # must have \n for <IN>
-        my ($in_fh, $out_fh, $err_fh) =
-            Apache::SubProcess::spawn_proc_prog($r, $command);
+        my $value = "my cool proc\r\n"; # must have \n for <IN>
+        my ($in_fh, $out_fh, $err_fh) = Apache::TestConfig::WIN32 ?
+            Apache::SubProcess::spawn_proc_prog($r, $perl, [$command]) :
+                  Apache::SubProcess::spawn_proc_prog($r, $command);
         print $in_fh $value;
-        my $output = read_data($out_fh);
+        (my $output = read_data($out_fh)) =~ s/[\r\n]{1,2}/\r\n/;
         ok t_cmp($value,
                  $output,
                  "testing subproc's stdin -> stdout + list context"
@@ -86,11 +95,12 @@
     {
         # test: subproc's stdin -> stderr + list context
         my $command = catfile $target_dir, "in_err.pl";
-        my $value = "my stderr\n"; # must have \n for <IN>
-        my ($in_fh, $out_fh, $err_fh) =
-            Apache::SubProcess::spawn_proc_prog($r, $command);
+        my $value = "my stderr\r\n"; # must have \n for <IN>
+        my ($in_fh, $out_fh, $err_fh) = Apache::TestConfig::WIN32 ?
+            Apache::SubProcess::spawn_proc_prog($r, $perl, [$command]) :
+                  Apache::SubProcess::spawn_proc_prog($r, $command);
         print $in_fh $value;
-        my $output = read_data($err_fh);
+        (my $output = read_data($err_fh)) =~ s/[\r\n]{1,2}/\r\n/;
         ok t_cmp($value,
                  $output,
                  "testing subproc's stdin -> stderr + list context"
=========================================================================

-- 
best regards,
randy

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Mime
View raw message