From: Jeff Squyres (jsquyres_at_[hidden])
Date: 2006-11-02 15:41:16


I haven't thought about this too deeply recently, but I have a dim
recollection that an approach like this will break places (e.g.,
nested funclets?). I spent a lot of time thinking about this when
writing the MPI Details section in the current .ini file template,
but I unfortunately don't remember all the details...

Look at the quoting in the MPI Details section for an example.

On Nov 2, 2006, at 2:56 PM, Ethan Mallove wrote:

> Not sure if this is the best tack, but the below patch seems
> to do the trick. What was happening was eval would barf when
> it got the unquoted /foo/bar. Wrap the string in ""'s and
> the error goes away. This snippet illustrates the problem:
>
> $ perl -e 'eval "\"/foo/bar\"";'
> $ perl -e 'eval "/foo/bar";'
> Bareword found where operator expected at (eval 1) line 1,
> near "/foo/bar"
> (Missing operator before bar?)
>
>
> Index: /workspace/em162155/hpc/mtt/schema2/trunk/lib/MTT/Values.pm
> ===================================================================
> --- /workspace/em162155/hpc/mtt/schema2/trunk/lib/MTT/Values.pm
> (revision 410)
> +++ /workspace/em162155/hpc/mtt/schema2/trunk/lib/MTT/Values.pm
> (working copy)
> @@ -46,7 +46,7 @@
> # If we get a string back, just handle it.
> if (ref($ret) eq "") {
> # Substitute in the $ret in place of the &function(...)
> - $str =~ s/(\&\w+\([^&\(]*?\))/$ret/;
> + $str =~ s/(\&\w+\([^&\(]*?\))/"$ret"/;
> Debug("String now: $str\n");
>
> # Now loop around and see if there are any more
> @@ -92,7 +92,14 @@
> return \@ret;
> }
>
> -# Debug("No more functions left; final: $str\n");
> + Debug("No more functions left; final: $str\n");
> + return trim_quotes($str);
> +}
> +
> +# Trim leading/trailing quotes
> +sub trim_quotes {
> + my ($str) = @_;
> + $str =~ s/^\"+|\"+$//g;
> return $str;
> }
>
> -Ethan
>
>
> On Thu, Nov/02/2006 02:18:06PM, Ethan Mallove wrote:
>> I need to compile a testsuite like this:
>>
>> shell_build_command = &join("configure --with-lib-mpi=",
>> &test_prefix(), "gmake")
>>
>> But MTT errors out with:
>>
>> Building Shell
>> Evaluating: &join("configure --with-lib-mpi=", &test_prefix(),
>> "gmake")
>> Got name: test_prefix
>> Got args:
>> _do: $ret = MTT::Values::Functions::test_prefix()
>> &test_prefix returning: my_mpi/install/dir
>> String now: &join("configure --with-lib-mpi=", my_mpi/install/dir,
>> "gmake")
>> Got name: join
>> Got args: "configure --with-lib-mpi=", my_mpi/install/dir, "gmake"
>> _do: $ret = MTT::Values::Functions::join("configure --with-lib-
>> mpi=", my_mpi/install/dir, "gmake")
>> Bareword found where operator expected at (eval 33) line 1, near "/
>> opt/mtt"
>> (Missing operator before tt?)
>> Bareword found where operator expected at (eval 33) line 1, near
>> "1.3a1r12364"
>> (Missing operator before a1r12364?)
>> *** ERROR: Module aborted: MTT::Test::Build::Shell:Build: ***
>> ERROR: Could not evaluate: $ret = MTT::Values::Functions::join
>> ("configure --with-lib-mpi=", my_mpi/install/dir, "gmake"): syntax
>> error at (eval 33) line 1, near "/opt/mtt"
>>
>> It looks like EvaluateString does not like the slashes,
>> because something silly like this doesn't give me the syntax
>> error:
>>
>> shell_build_command = &join("configure --with-lib-mpi=", &test_np
>> (), "gmake")
>>
>> Note: Below is a patch to give Build.pm visibility of
>> test_prefix(), though this will also produce the error:
>>
>> &join("configure --with-lib-mpi=", &shell("pwd"), "gmake")
>>
>> -Ethan
>>
>>
>> Index: MTT/Test/Build.pm
>> ===================================================================
>> --- MTT/Test/Build.pm (revision 410)
>> +++ MTT/Test/Build.pm (working copy)
>> @@ -251,6 +251,10 @@
>> }
>> }
>>
>> + # Some test suites require knowledge of where
>> + # the MPI library is at the build stage
>> + $MTT::Test::Run::test_prefix = $mpi_install->{installdir};
>> +
>> # Process setenv, unsetenv, prepend-path, and append-path -- for
>> # both the MPI that we're building with and the section of
>> the ini
>> # file that we're building.
>> _______________________________________________
>> mtt-users mailing list
>> mtt-users_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-users
> _______________________________________________
> mtt-users mailing list
> mtt-users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/mtt-users

-- 
Jeff Squyres
Server Virtualization Business Unit
Cisco Systems