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-us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/mtt-users
_______________________________________________
mtt-users mailing list
mtt-us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/mtt-users
--
Jeff Squyres
Server Virtualization Business Unit
Cisco Systems