You are viewing a plain text version of this content. The canonical link for it is here.
Posted to test-dev@httpd.apache.org by "Christopher H. Laco" <ch...@hotmail.com> on 2004/02/03 17:08:00 UTC

Apache::TestMM::generate_script vs. Win32 Paths

I've installed Apache::Test 1.07 on ActiveState perl 5.6.1 build 630 and am 
trying to make test scripts for a pile of pages in a package I'm workin on.

If I pass in an -httpd path that has spaces in the path, it fails.

    use ExtUtils::MakeMaker;
    use Apache::TestMM qw(test clean);

    push @ARGV, '-httpd', 'C:\Program Files\Apache Group\Apache\Apache.exe';
    Apache::TestMM::filter_args();
    Apache::TestMM::generate_script();

    WriteMakefile(
        NAME         => 'SRE::Apache',
        VERSION_FROM => 'lib/SRE/Apache.pm', # finds $VERSION
        AUTHOR       => 'A. U. Thor (a.u.thor@a.galaxy.far.far.away)'
    );

yields:

    C:\SRE\Apache>perl Makefile.PL
        generating script t/TEST
    Checking if your kit is complete...
    Looks good
    Writing Makefile for SRE::Apache

    C:\SRE\Apache>nmake test
    cp lib/SRE/Apache.pm blib\lib\SRE\Apache.pm
            C:\devkit\perl\bin\perl.exe -Iblib\arch -Iblib\lib  t/TEST 
-clean
    C:/Program -l failed: Bad file descriptor at 
C:/devkit/perl/site/lib/Apache/TestConfig.pm line 878.
    NMAKE : fatal error U1077: 'C:\devkit\perl\bin\perl.exe' : return code 
'0x9'
    Stop.


Now, normally I would argue that spaces in paths are just plain old 
dangerious, especially on Win32.
However, C:\Program Files\Apache Group\Apache\ is the default install path 
for the Apache Win32 binary packages.

Of course, changing the location of the Apache install to:

    push @ARGV, '-httpd', 'C:\devkit\Apache\Apache.exe';

works just dandy. :-) In one instance, althout I can't reproduce it, I got 
past the first error only to be caught up but this output:

    C:\Program -d C:\Program -f C:\Program -DAPACHE1 -DPERL_USEITHREADS

Is this an Apache::Test problem, or possible an nmake issue?

Thanks,
-=Chris

_________________________________________________________________
Check out the coupons and bargains on MSN Offers! 
http://shopping.msn.com/softcontent/softcontent.aspx?scmId=1418


Re: Apache::TestMM::generate_script vs. Win32 Paths

Posted by Stas Bekman <st...@stason.org>.
Randy Kobes wrote:
> On Wed, 18 Feb 2004, Stas Bekman wrote:
> 
> 
>>Randy Kobes wrote:
>>Thanks for testing, Randy
>>
>>
>>>>+        for my $key (keys %conf_opts) {
>>>>+            next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
>>>>+            $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
> 
> [ ... ]
> 
>>ay, that's so incredibly <place your favorite swear word
>>here>. there is no a core function that will take any
>>given path and return a usable path?
>>
>>do you need to run this transform only if /\s/? What about
>>long names (>8.3), don't they have short names too?
> 
> 
> Yes, they do have short names. And it is a pain ... I should
> have expanded - Win32::GetShortPathName() will return a
> usable path if the file/directory physically exists - if a
> conversion to 8.3 components is needed, then that is done,
> otherwise, the original is returned. However, at this stage
> I don't think (?) we can assume the file/directory yet
> exists, at least for all the ones that this is being applied
> to, so calling Win32::GetShortPathName on them will cause
> the given values to be lost if they don't yet exist.

Why not? All these arguments should be existing. (I think sans -libmodperl 
which may not exist)

> So, actually, I take that back about applying
> Win32::GetSHortPathName($f) only if $f =~ /\s/, as that
> was a red herring - doing it like
> 
> for my $key (keys %conf_opts) {
>     next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
>     next unless -e $conf_opts{$key};
>     $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
> 
> should be OK when the entry (physically) exists, whether
> that's a short or long name, and if it doesn't exist,
> presumably it will either be created or tested for later.
> One might have to do a Win32::GetShortPathName() if such an
> entry does get created later on, but we could wait and see.

cool. In any case, please take the ownership of the patch I posted and once 
you guys are happy with it, please go ahead and commit it. Otherwise it's a 
broken phone. Thanks.

>>For god's sake, can someone patch File::Spec to handle
>>that win32 ridicule?  Just think how much time every
>>project wastes to deal with the same issues, again and
>>again if they need to work with win32... not talking about
>>making the source code cluttered with unneeded noise.
>>that's just disgusting.
>>
>>Shouldn't canonfile() know how to deal with this
>>GetShortPathName thingy?
> 
> I guess it could, but that would involve somewhat of a
> departure from the philosophy of File::Spec. File::Spec can
> handle any combination of files/directories, whether or not
> they actually exist on the system, whereas things like
> Win32::GetShortPathName() only makes sense for
> files/directories that physically exist. So incorporating
> the short path name stuff in File::Spec would lead to a
> branch in what gets returned, depending on whether or not
> the entry physically exists.

before you implement this ;) what would you expect canonfile to do under 
win32? is GetShortPathName is the thing you'd expect? As it will always work?

BTW, does it make sure that two similar long names will never collapse into 
one short name? Meaning that the short name is not deterministic but depends 
on other the existence of other files with similar names? If it was 
deterministic, you could go and create the non-existing file, get its short 
name and delete the file, no?

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

Re: Apache::TestMM::generate_script vs. Win32 Paths

Posted by Randy Kobes <ra...@theoryx5.uwinnipeg.ca>.
On Wed, 18 Feb 2004, Stas Bekman wrote:

> Randy Kobes wrote:
> Thanks for testing, Randy
>
> >>+        for my $key (keys %conf_opts) {
> >>+            next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
> >>+            $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
[ ... ]
>
> ay, that's so incredibly <place your favorite swear word
> here>. there is no a core function that will take any
> given path and return a usable path?
>
> do you need to run this transform only if /\s/? What about
> long names (>8.3), don't they have short names too?

Yes, they do have short names. And it is a pain ... I should
have expanded - Win32::GetShortPathName() will return a
usable path if the file/directory physically exists - if a
conversion to 8.3 components is needed, then that is done,
otherwise, the original is returned. However, at this stage
I don't think (?) we can assume the file/directory yet
exists, at least for all the ones that this is being applied
to, so calling Win32::GetShortPathName on them will cause
the given values to be lost if they don't yet exist.

So, actually, I take that back about applying
Win32::GetSHortPathName($f) only if $f =~ /\s/, as that
was a red herring - doing it like

for my $key (keys %conf_opts) {
    next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
    next unless -e $conf_opts{$key};
    $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});

should be OK when the entry (physically) exists, whether
that's a short or long name, and if it doesn't exist,
presumably it will either be created or tested for later.
One might have to do a Win32::GetShortPathName() if such an
entry does get created later on, but we could wait and see.

> For god's sake, can someone patch File::Spec to handle
> that win32 ridicule?  Just think how much time every
> project wastes to deal with the same issues, again and
> again if they need to work with win32... not talking about
> making the source code cluttered with unneeded noise.
> that's just disgusting.
>
> Shouldn't canonfile() know how to deal with this
> GetShortPathName thingy?

I guess it could, but that would involve somewhat of a
departure from the philosophy of File::Spec. File::Spec can
handle any combination of files/directories, whether or not
they actually exist on the system, whereas things like
Win32::GetShortPathName() only makes sense for
files/directories that physically exist. So incorporating
the short path name stuff in File::Spec would lead to a
branch in what gets returned, depending on whether or not
the entry physically exists.

> /of course none of these "flattering" comments are
> directed at Randy and other brave and helpful folks ;)/

:)

-- 
best regards,
randy

Re: Apache::TestMM::generate_script vs. Win32 Paths

Posted by Stas Bekman <st...@stason.org>.
Randy Kobes wrote:
Thanks for testing, Randy

>>+        for my $key (keys %conf_opts) {
>>+            next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
>>+            $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
> 
>                                   ^^^^^^^^^^^^^^^^^^^^^^^
> I think if one calls Win32::GetShortPathName
> on something that has no short path name, then
> nothing is returned. For example,
> ======================================================
> use strict;
> use warnings;
> for ('C:\Program Files', 'C:\ProgramFiles') {
>     my $x = Win32::GetShortPathName($_);
>     if ($x) {
>         print "$_ has a short name of $x\n";
>     }
>     else {
>         print "$_ has no short name\n";
>     }
> }
> =======================================================
> prints
> =======================================================
> C:\Program Files has a short name of C:\PROGRA~1
> C:\ProgramFiles has no short name
> ========================================================
> 
> Thus, the above should probably include
> 
> 
>>+        for my $key (keys %conf_opts) {
>>+            next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
>>+ +          next unless $conf_opts{$key} =~ / /;
>>+            $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});

ay, that's so incredibly <place your favorite swear word here>. there is no a 
core function that will take any given path and return a usable path?

do you need to run this transform only if /\s/? What about long names (>8.3), 
don't they have short names too?

For god's sake, can someone patch File::Spec to handle that win32 ridicule? 
Just think how much time every project wastes to deal with the same issues, 
again and again if they need to work with win32... not talking about making 
the source code cluttered with unneeded noise. that's just disgusting.

Shouldn't canonfile() know how to deal with this GetShortPathName thingy?

/of course none of these "flattering" comments are directed at Randy and other 
brave and helpful folks ;)/

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

Re: in-place edit in TestRun.pm

Posted by Randy Kobes <ra...@theoryx5.uwinnipeg.ca>.
On Wed, 10 Mar 2004, Stas Bekman wrote:

> Randy Kobes wrote:
> > Hi,
> >    A recent change in Apache-Test/lib/Apache/TestRun.pm
> > involves an in-place edit, at around line 765:
[ .. ]
> > Unfortunately, Win32 can't do such in-place edits:
[ ... ]
> why not doing:
>
>     local $^I = ".bak"; # windows can't do inplace edit
>     local @ARGV = $config_file;
>      while( <> ) {
>          s/old/new/;
>          print;
>      }
>      unlink "$config_file.bak";
>
> much simpler.

Very true ... I'll make that change - thanks!

-- 
best regards,
randy

Re: in-place edit in TestRun.pm

Posted by Stas Bekman <st...@stason.org>.
Randy Kobes wrote:
> Hi,
>    A recent change in Apache-Test/lib/Apache/TestRun.pm
> involves an in-place edit, at around line 765:
>     local @ARGV = $config_file;
>     while( <> ) {
>         s/old/new/;
>         print;
>     }
> Unfortunately, Win32 can't do such in-place edits:
> for example,
>    perl -spi -e 's#old#new#' file.txt
> won't work, but
>    perl -spi.bak -e 's#old#new#' file.txt
> will. 

sigh :( shouldn't the perlrun and perlvar manpages state that bug?

> Would something like
>    my $orig = $config_file . '.orig';
>    rename $config_file, $orig or die "...";
>    open(my $rfh, $orig) or die "...";
>    open(my $wfh, '>', $file) or die "...";
>    while(<$rfh>) {
>        s{old}{new}g;
>        print $wfh $_;
>    }
>    close $rfh;
>    close $wfh;
>    unlink $orig;
> be OK?

Sure, will you do it?

But you can't use 'open my $fh', must use Symbol::gensym to support perl < 
5.6. Also please drop () for consistency. Thanks.

But if you say that this works:

   perl -spi.bak

why not doing:

    local $^I = ".bak"; # windows can't do inplace edit
    local @ARGV = $config_file;
     while( <> ) {
         s/old/new/;
         print;
     }
     unlink "$config_file.bak";

much simpler.
__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

Re: in-place edit in TestRun.pm

Posted by Stas Bekman <st...@stason.org>.
Randy Kobes wrote:
> On Thu, 11 Mar 2004, Stas Bekman wrote:
> 
> 
>>Randy Kobes wrote:
>>
>>>Hi,
>>>   A recent change in Apache-Test/lib/Apache/TestRun.pm
>>>involves an in-place edit, at around line 765:
>>>    local @ARGV = $config_file;
>>>    while( <> ) {
>>>        s/old/new/;
>>>        print;
>>>    }
>>>Unfortunately, Win32 can't do such in-place edits:
>>
>>BTW, how did you notice this problem? Did you try to
>>relocate a project to a new directory? Or did it just hit
>>in on the normal run? If the latter, then something is
>>broken.
> 
> 
> It was a bit strange .... I got a fresh checkout, then built
> and ran the tests, which timed out, for the reasons of
> thread limits we were discussing. So I edited httpd.conf,
> and when running perl t/TEST the in-place edit problem
> arose. After applying that patch, the editing was run,
> successfully.

So, it is broken. Can you trace why does it get there? It's supposed to get to 
this rewrite-the-file part only if you have configured the test suite in 
directory /foo and then moved it to /bar and trying to run the test suite 
again. Untill now things were totally broken and you will have to go and 
manually cleanup the autogenerated files in t/conf. This change is supposed to 
gracefully recover. But I guess there are rough edges.

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

in-place edit in TestRun.pm

Posted by Randy Kobes <ra...@theoryx5.uwinnipeg.ca>.
Hi,
   A recent change in Apache-Test/lib/Apache/TestRun.pm
involves an in-place edit, at around line 765:
    local @ARGV = $config_file;
    while( <> ) {
        s/old/new/;
        print;
    }
Unfortunately, Win32 can't do such in-place edits:
for example,
   perl -spi -e 's#old#new#' file.txt
won't work, but
   perl -spi.bak -e 's#old#new#' file.txt
will. Would something like
   my $orig = $config_file . '.orig';
   rename $config_file, $orig or die "...";
   open(my $rfh, $orig) or die "...";
   open(my $wfh, '>', $file) or die "...";
   while(<$rfh>) {
       s{old}{new}g;
       print $wfh $_;
   }
   close $rfh;
   close $wfh;
   unlink $orig;
be OK?

-- 
best regards,
randy

Re: Apache::TestMM::generate_script vs. Win32 Paths

Posted by Randy Kobes <ra...@theoryx5.uwinnipeg.ca>.
On Tue, 17 Feb 2004, Stas Bekman wrote:

> Randy Kobes wrote:
> > On Tue, 3 Feb 2004, Christopher H. Laco wrote:
> >
> >
> >>I've installed Apache::Test 1.07 on ActiveState perl 5.6.1
> >>build 630 and am trying to make test scripts for a pile of
> >>pages in a package I'm workin on.
> >>
> >>If I pass in an -httpd path that has spaces in the path,
> >>it fails.
> >>
> >>    use ExtUtils::MakeMaker;
> >>    use Apache::TestMM qw(test clean);
> >>
> >>    push @ARGV, '-httpd', 'C:\Program Files\Apache Group\Apache\Apache.exe';
> >
> > [ .. ]
> >
> >>Is this an Apache::Test problem, or possible an nmake issue?
> >
> >
> > This case should be handled I'd think on the Apache::Test
> > side. Does
> >    my $exe = 'C:\Program Files\Apache Group\Apache\Apache.exe';
> >    $exe = Win32::GetShortPathName($exe);
> >    push @ARGV, '-httpd', $exe;
> > work? If so, I'll look at seeing where this could be added
> > within Apache::Test.
>
> This patch should probably take care of it. It's untested.

Thanks, Stas - it looks good (applied manually, and
informally tested, as I don't have Perl in a place with
spaces in the directory name). A couple of comments below:

> Index: lib/Apache/TestConfig.pm
> ===================================================================
> RCS file:
> /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
> retrieving revision 1.205
> diff -u -r1.205 TestConfig.pm
> --- lib/Apache/TestConfig.pm	18 Feb 2004 00:30:57 -0000	1.205
> +++ lib/Apache/TestConfig.pm	18 Feb 2004 04:40:21 -0000
> @@ -67,6 +67,16 @@
>      (map { $_ . '_module_name', "$_ module name"} qw(cgi ssl thread access
> auth)),
>   );
>
> +my %filepath_conf_opts = map { $_ => 1 }
> +    qw(top_dir t_dir t_conf t_logs t_conf_file src_dir serverroot
> +       documentroot bindir sbindir httpd apxs httpd_conf perlpod sslca
> +       libmodperl);
> +
> +sub conf_opt_is_a_filepath {
> +    my $opt = shift;
> +    $opt && exists $filepath_conf_opts{$opt};
> +}
> +
>   sub usage {
>       for my $hash (\%Usage) {
>           for (sort keys %$hash){
> Index: lib/Apache/TestRun.pm
> ===================================================================
> RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
> retrieving revision 1.149
> diff -u -r1.149 TestRun.pm
> --- lib/Apache/TestRun.pm	18 Feb 2004 04:09:08 -0000	1.149
> +++ lib/Apache/TestRun.pm	18 Feb 2004 04:40:21 -0000
> @@ -238,6 +238,15 @@
>           push @argv, $val;
>       }
>
> +    # fixup the filepath options on win32 (spaces, short names, etc.)
> +    if (Apache::TestConfig::WIN32) {
> +        require Win32::GetShortPathName;
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The require isn't required, as Win32::GetShortPathName is
a core function.

> +        for my $key (keys %conf_opts) {
> +            next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
> +            $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
                                  ^^^^^^^^^^^^^^^^^^^^^^^
I think if one calls Win32::GetShortPathName
on something that has no short path name, then
nothing is returned. For example,
======================================================
use strict;
use warnings;
for ('C:\Program Files', 'C:\ProgramFiles') {
    my $x = Win32::GetShortPathName($_);
    if ($x) {
        print "$_ has a short name of $x\n";
    }
    else {
        print "$_ has no short name\n";
    }
}
=======================================================
prints
=======================================================
C:\Program Files has a short name of C:\PROGRA~1
C:\ProgramFiles has no short name
========================================================

Thus, the above should probably include

> +        for my $key (keys %conf_opts) {
> +            next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
> + +          next unless $conf_opts{$key} =~ / /;
> +            $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});

-- 
best regards,
randy

Re: Apache::TestMM::generate_script vs. Win32 Paths

Posted by Stas Bekman <st...@stason.org>.
Randy Kobes wrote:
> On Tue, 3 Feb 2004, Christopher H. Laco wrote:
> 
> 
>>I've installed Apache::Test 1.07 on ActiveState perl 5.6.1
>>build 630 and am trying to make test scripts for a pile of
>>pages in a package I'm workin on.
>>
>>If I pass in an -httpd path that has spaces in the path,
>>it fails.
>>
>>    use ExtUtils::MakeMaker;
>>    use Apache::TestMM qw(test clean);
>>
>>    push @ARGV, '-httpd', 'C:\Program Files\Apache Group\Apache\Apache.exe';
> 
> [ .. ]
> 
>>Is this an Apache::Test problem, or possible an nmake issue?
> 
> 
> This case should be handled I'd think on the Apache::Test
> side. Does
>    my $exe = 'C:\Program Files\Apache Group\Apache\Apache.exe';
>    $exe = Win32::GetShortPathName($exe);
>    push @ARGV, '-httpd', $exe;
> work? If so, I'll look at seeing where this could be added
> within Apache::Test.

This patch should probably take care of it. It's untested.

Index: lib/Apache/TestConfig.pm
===================================================================
RCS file: 
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestConfig.pm,v
retrieving revision 1.205
diff -u -r1.205 TestConfig.pm
--- lib/Apache/TestConfig.pm	18 Feb 2004 00:30:57 -0000	1.205
+++ lib/Apache/TestConfig.pm	18 Feb 2004 04:40:21 -0000
@@ -67,6 +67,16 @@
     (map { $_ . '_module_name', "$_ module name"} qw(cgi ssl thread access 
auth)),
  );

+my %filepath_conf_opts = map { $_ => 1 }
+    qw(top_dir t_dir t_conf t_logs t_conf_file src_dir serverroot
+       documentroot bindir sbindir httpd apxs httpd_conf perlpod sslca
+       libmodperl);
+
+sub conf_opt_is_a_filepath {
+    my $opt = shift;
+    $opt && exists $filepath_conf_opts{$opt};
+}
+
  sub usage {
      for my $hash (\%Usage) {
          for (sort keys %$hash){
Index: lib/Apache/TestRun.pm
===================================================================
RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRun.pm,v
retrieving revision 1.149
diff -u -r1.149 TestRun.pm
--- lib/Apache/TestRun.pm	18 Feb 2004 04:09:08 -0000	1.149
+++ lib/Apache/TestRun.pm	18 Feb 2004 04:40:21 -0000
@@ -238,6 +238,15 @@
          push @argv, $val;
      }

+    # fixup the filepath options on win32 (spaces, short names, etc.)
+    if (Apache::TestConfig::WIN32) {
+        require Win32::GetShortPathName;
+        for my $key (keys %conf_opts) {
+            next unless Apache::TestConfig::conf_opt_is_a_filepath($key);
+            $conf_opts{$key} = Win32::GetShortPathName($conf_opts{$key});
+        }
+    }
+
      $opts{req_args} = \%req_args;

      # only test files/dirs if any at all are left in argv

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

Re: Apache::TestMM::generate_script vs. Win32 Paths

Posted by Randy Kobes <ra...@theoryx5.uwinnipeg.ca>.
On Tue, 3 Feb 2004, Christopher H. Laco wrote:

> I've installed Apache::Test 1.07 on ActiveState perl 5.6.1
> build 630 and am trying to make test scripts for a pile of
> pages in a package I'm workin on.
>
> If I pass in an -httpd path that has spaces in the path,
> it fails.
>
>     use ExtUtils::MakeMaker;
>     use Apache::TestMM qw(test clean);
>
>     push @ARGV, '-httpd', 'C:\Program Files\Apache Group\Apache\Apache.exe';
[ .. ]
> Is this an Apache::Test problem, or possible an nmake issue?

This case should be handled I'd think on the Apache::Test
side. Does
   my $exe = 'C:\Program Files\Apache Group\Apache\Apache.exe';
   $exe = Win32::GetShortPathName($exe);
   push @ARGV, '-httpd', $exe;
work? If so, I'll look at seeing where this could be added
within Apache::Test.

-- 
best regards,
randy kobes