On Wed, Mar/11/2009 03:47:22PM, Jeff Squyres wrote: > Thanks for your patience! Yes, this looks good to me with one minor nit: > >> + if(($sys_type == "Cygwin" || $sys_type == "Msys") && >> + $config->{compiler_name} == "microsoft") { > > should be > >> + if(($sys_type eq "Cygwin" || $sys_type eq "Msys") && >> + $config->{compiler_name} eq "microsoft") { > > Josh / Ethan -- got any comments for Shiqing?
I just noticed last night's CYGWIN results. Nice! Should a regexp (see below) be used in case the sys_type comes back as, e.g., "cygwin", "CYGWIN", "cygwin-2.0", etc.? $sys_type =~ /cygwin/i Other than that, it looks good to me. -Ethan > > > > > On Mar 11, 2009, at 2:58 PM, Shiqing Fan wrote: > >> Hi Jeff, >> >> >> Sorry for the carelessness. This time it looks better? :-) >> >> >> Thanks, >> Shiqing >> > >> > Can you double check your cr / cr/lf settings? It looks like you're >> > committing in the windows format -- can you convert and commit in the >> > unix format? That way, it wouldn't look like the entire >> > GNU_Install.pm file is being replaced, for example. >> > >> > I forgot to mention in my last mail -- since cmake *only* works on >> > Windows and our Autotools system *doesn't* work on Windows, I retract >> > my earlier statement: don't bother with an ompi_cmake parameter in the >> > .ini file. Just have OMPI.pm figure out if you're on cygwin or mingw >> > and call the right back-end building function. >> > >> > Also, in Do_Step.pm, you might want to remove the "_" prefix from the >> > sub names. "_" as a prefix in perl is meant to imply that it's a >> > private variable/method. >> > >> > Finally, in Do_Step.pm, do you have two _do_step() functions? >> > >> >> Index: lib/Filesys/DiskFree.pm >> =================================================================== >> --- lib/Filesys/DiskFree.pm (revision 1271) >> +++ lib/Filesys/DiskFree.pm (working copy) >> @@ -29,6 +29,16 @@ >> 'inodes' => "df -Pi", >> 'format' => "linuxish", >> }, >> + 'cygwin' => { >> + 'blocks' => "df -P", >> + 'inodes' => "df -Pi", >> + 'format' => "linuxish", >> + }, >> + 'msys' => { >> + 'blocks' => "df -P", >> + 'inodes' => "df -Pi", >> + 'format' => "linuxish", >> + }, >> 'solaris' => { >> 'blocks' => "df -k", >> 'inodes' => "df -k -o i -F ufs", >> Index: lib/MTT/Common/Cmake.pm >> =================================================================== >> --- lib/MTT/Common/Cmake.pm (revision 0) >> +++ lib/MTT/Common/Cmake.pm (revision 0) >> @@ -0,0 +1,77 @@ >> +#!/usr/bin/env perl >> +# >> +# Copyright (c) 2005-2006 The Trustees of Indiana University. >> +# All rights reserved. >> +# Copyright (c) 2006-2008 Cisco Systems, Inc. All rights reserved. >> +# Copyright (c) 2007-2008 Sun Microsystems, Inc. All rights reserved. >> +# Copyright (c) 2009 High Performance Computing Center Stuttgart, >> +# University of Stuttgart. All rights reserved. >> +# $COPYRIGHT$ >> +# >> +# Additional copyrights may follow >> +# >> +# $HEADER$ >> +# >> + >> +package MTT::Common::Cmake; >> +my $package = ModuleName(__PACKAGE__); >> + >> +use strict; >> +use MTT::Messages; >> +use MTT::Values; >> +use MTT::Common::Do_step; >> + >> +#-------------------------------------------------------------------------- >> + >> +# Do the following steps: >> +# [ ] cmake -G "generator" -D configure_arguments source_path >> +# [ ] devenv OpenMPI.sln /build >> +sub Install { >> + my ($config) = @_; >> + >> + my $x; >> + my $result_stdout; >> + my $result_stderr; >> + >> + # Prepare $ret >> + my $ret; >> + $ret->{test_result} = MTT::Values::FAIL; >> + $ret->{exit_status} = 0; >> + >> + # On windows, do the following steps: >> + >> + # prepare the windows style prefix. >> + # replace '/cygdrive/x/' with 'x:/' >> + my $win_prefix = substr ($config->{installdir},10,1) . ":" . substr >> ($config->{installdir},11); >> + >> + # generate Visual Studio solution files >> + # use 'script' to redirect MS command output >> + $x = MTT::Common::Do_step::do_step($config, >> + "script -a -c \"cmake >> $config->{configure_arguments} -D CMAKE_INSTALL_PREFIX:PATH=$win_prefix >> .\" -f temp.txt", >> + $config->{merge_stdout_stderr}); >> + >> + # Overlapping keys in $x override $ret >> + %$ret = (%$ret, %$x); >> + return $ret if (!MTT::DoCommand::wsuccess($ret->{exit_status})); >> + >> + # compile the whole solution >> + $x = MTT::Common::Do_step::do_step($config, "script -a -c >> \"devenv.com *.sln /build debug\" -f temp.txt", >> + $config->{merge_stdout_stderr}); >> + %$ret = (%$ret, %$x); >> + return $ret if (!MTT::DoCommand::wsuccess($ret->{exit_status})); >> + >> + # install to the prefix dir >> + $x = MTT::Common::Do_step::do_step($config, "script -a -c >> \"devenv.com *.sln /project INSTALL.vcproj /build\" -f temp.txt", >> + $config->{merge_stdout_stderr}); >> + %$ret = (%$ret, %$x); >> + return $ret if (!MTT::DoCommand::wsuccess($ret->{exit_status})); >> + >> + # All done! >> + $ret->{test_result} = MTT::Values::PASS; >> + $ret->{result_message} = "Success"; >> + Debug("Build was a success\n"); >> + >> + return $ret; >> +} >> + >> +1; >> Index: lib/MTT/Common/Do_step.pm >> =================================================================== >> --- lib/MTT/Common/Do_step.pm (revision 0) >> +++ lib/MTT/Common/Do_step.pm (revision 0) >> @@ -0,0 +1,139 @@ >> +#!/usr/bin/env perl >> +# >> +# Copyright (c) 2005-2006 The Trustees of Indiana University. >> +# All rights reserved. >> +# Copyright (c) 2006-2008 Cisco Systems, Inc. All rights reserved. >> +# Copyright (c) 2007-2008 Sun Microsystems, Inc. All rights reserved. >> +# Copyright (c) 2009 High Performance Computing Center Stuttgart, >> +# University of Stuttgart. All rights reserved. >> +# $COPYRIGHT$ >> +# >> +# Additional copyrights may follow >> +# >> +# $HEADER$ >> +# >> + >> +package MTT::Common::Do_step; >> + >> +use strict; >> +use Data::Dumper; >> +use MTT::DoCommand; >> +use MTT::Messages; >> +use MTT::FindProgram; >> +use MTT::Values; >> +use MTT::Files; >> + >> +sub do_step { >> + my ($config, $cmd, $mss, $dir) = @_; >> + >> + # Prepare return value. Start with an empty, but defined hash >> + my $ret = {}; >> + my $result_stdout; >> + my $result_stderr; >> + >> + # As long as this pattern is emitted during the step, keep >> + # attempting to re-start the step ("restart_attempts" times) >> + my $restart_on_pattern; >> + my $restart_attempts_max = 500; >> + my $restart_attempts = 0; >> + if (defined($config->{restart_on_pattern})) { >> + $restart_on_pattern = $config->{restart_on_pattern}; >> + } else { >> + $restart_attempts_max = -1; >> + } >> + >> + # Hash keys and INI params do not contain spaces. Change them to >> underscores. >> + my $hash_key = $cmd; >> + $hash_key =~ s/ /_/g; >> + >> + # Optional path for program >> + if (defined($dir)) { >> + $cmd = "$dir/$cmd"; >> + } >> + >> + my $arguments_key = "${hash_key}_arguments"; >> + my $stdout_key = "${hash_key}_stdout"; >> + my $stderr_key = "${hash_key}_stderr"; >> + my $skip_key = "skip_${hash_key}"; >> + my $before_cmd_key = "before_${hash_key}"; >> + my $after_cmd_key = "after_${hash_key}"; >> + >> + if (defined($config->{$before_cmd_key})) { >> + _run_step($config->{$before_cmd_key}, $before_cmd_key); >> + } >> + >> + if (!$config->{$skip_key}) { >> + >> + my $i = 0; >> + do { >> + Debug("Restarting $cmd (restart attempt #$i\n") if ($i++ gt >> 0); >> + $ret = MTT::DoCommand::Cmd($mss, >> + "$cmd $config->{$arguments_key}", -1, >> + $config->{stdout_save_lines}, >> + $config->{stderr_save_lines}); >> + >> + # Add header line to stdout >> + if (defined($ret->{result_stdout}) && >> + $ret->{result_stdout} !~ /^\s*$/) { >> + $result_stdout = "--- $cmd $config->{$arguments_key} >> result_stdout"; >> + $result_stdout .= "/result_stderr" >> + if ($mss); >> + $result_stdout .= " ---\n$ret->{result_stdout}"; >> + } >> + >> + # Add header line to stderr >> + if (!$mss && defined($ret->{result_stderr}) && >> + $ret->{result_stderr} !~ /^\s*$/) { >> + $result_stderr = "--- $cmd $config->{$arguments_key} >> result_stderr ---\n$ret->{result_stderr}"; >> + } >> + >> + # Repeat *only* if $restart_on_pattern is defined >> + } while (!MTT::DoCommand::wsuccess($ret->{exit_status}) and >> + (defined($restart_on_pattern) && >> + ($ret->{result_stderr} =~ /$restart_on_pattern/i or >> + $ret->{result_stdout} =~ /$restart_on_pattern/i) and >> + $restart_attempts++ < $restart_attempts_max)); >> + >> + # If fail, save the results in {result_stdout} and >> + # {result_stderr}. >> + if (!MTT::DoCommand::wsuccess($ret->{exit_status})) { >> + $ret->{result_message} = "\"$cmd $config->{$arguments_key}\" >> failed -- skipping this build."; >> + # Put the output of the failure into $ret so that it gets >> + # reported >> + $ret->{result_stdout} = $result_stdout >> + if (defined($result_stdout)); >> + $ret->{result_stderr} = $result_stderr >> + if (!$mss && defined($result_stderr)); >> + $ret->{exit_status} = $ret->{exit_status}; >> + $ret->{fail} = 1; >> + } >> + >> + # If succeed, keep the stdout/stderr in their respective hash >> + # keys for this step. >> + else { >> + if (defined($result_stdout)) { >> + delete $ret->{result_stdout}; >> + $ret->{$stdout_key} = $result_stdout; >> + } >> + if (!$mss && defined($result_stderr)) { >> + delete $ret->{result_stderr}; >> + $ret->{$stderr_key} = $result_stderr; >> + } >> + } >> + } else { >> + Debug("Skippping '$cmd' step.\n"); >> + } >> + >> + if (defined($config->{$after_cmd_key})) { >> + _run_step($config->{$after_cmd_key}, $after_cmd_key); >> + } >> + >> + return $ret; >> +} >> + >> +sub _run_step { >> + my ($cmd, $step) = @_; >> + return MTT::DoCommand::RunStep(1, $cmd, 30, undef, undef, $step); >> +} >> + >> +1; >> Index: lib/MTT/Common/GNU_Install.pm >> =================================================================== >> --- lib/MTT/Common/GNU_Install.pm (revision 1271) >> +++ lib/MTT/Common/GNU_Install.pm (working copy) >> @@ -4,6 +4,8 @@ >> # All rights reserved. >> # Copyright (c) 2006-2008 Cisco Systems, Inc. All rights reserved. >> # Copyright (c) 2007-2008 Sun Microsystems, Inc. All rights reserved. >> +# Copyright (c) 2009 High Performance Computing Center Stuttgart, >> +# University of Stuttgart. All rights reserved. >> # $COPYRIGHT$ >> # >> # Additional copyrights may follow >> @@ -15,12 +17,9 @@ >> my $package = ModuleName(__PACKAGE__); >> >> use strict; >> -use Data::Dumper; >> -use MTT::DoCommand; >> use MTT::Messages; >> -use MTT::FindProgram; >> use MTT::Values; >> -use MTT::Files; >> +use MTT::Common::Do_step; >> >> #-------------------------------------------------------------------------- >> >> @@ -59,7 +58,7 @@ >> $config->{skip_make_check} = 1; >> } >> >> - $x = _do_step($config, "configure", >> + $x = MTT::Common::Do_step::do_step($config, "configure", >> $config->{merge_stdout_stderr}, $config->{configdir}); >> >> # Overlapping keys in $x override $ret >> @@ -67,10 +66,10 @@ >> return $ret if (!MTT::DoCommand::wsuccess($ret->{exit_status})); >> >> # "make clean" can fail for all we care >> - $x = _do_step($config, "make clean", 1); >> + $x = MTT::Common::Do_step::do_step($config, "make clean", 1); >> %$ret = (%$ret, %$x); >> >> - $x = _do_step($config, "make all", $config->{merge_stdout_stderr}); >> + $x = MTT::Common::Do_step::do_step($config, "make all", >> $config->{merge_stdout_stderr}); >> %$ret = (%$ret, %$x); >> return $ret if (!MTT::DoCommand::wsuccess($ret->{exit_status})); >> >> @@ -95,12 +94,12 @@ >> $ENV{LD_LIBRARY_PATH} = "$config->{libdir}"; >> } >> >> - $x = _do_step($config, "make check", 1); >> + $x = MTT::Common::Do_step::do_step($config, "make check", 1); >> %$ret = (%$ret, %$x); >> return $ret if (!MTT::DoCommand::wsuccess($ret->{exit_status})); >> %ENV = %ENV_SAVE; >> >> - $x = _do_step($config, "make install", 1); >> + $x = MTT::Common::Do_step::do_step($config, "make install", 1); >> %$ret = (%$ret, %$x); >> return $ret if (!MTT::DoCommand::wsuccess($ret->{exit_status})); >> >> @@ -112,117 +111,4 @@ >> return $ret; >> } >> >> -sub _do_step { >> - my ($config, $cmd, $mss, $dir) = @_; >> - >> - # Prepare return value. Start with an empty, but defined hash >> - my $ret = {}; >> - my $result_stdout; >> - my $result_stderr; >> - >> - # As long as this pattern is emitted during the step, keep >> - # attempting to re-start the step ("restart_attempts" times) >> - my $restart_on_pattern; >> - my $restart_attempts_max = 500; >> - my $restart_attempts = 0; >> - if (defined($config->{restart_on_pattern})) { >> - $restart_on_pattern = $config->{restart_on_pattern}; >> - } else { >> - $restart_attempts_max = -1; >> - } >> - >> - # Hash keys and INI params do not contain spaces. Change them to >> underscores. >> - my $hash_key = $cmd; >> - $hash_key =~ s/ /_/g; >> - >> - # Optional path for program >> - if (defined($dir)) { >> - $cmd = "$dir/$cmd"; >> - } >> - >> - my $arguments_key = "${hash_key}_arguments"; >> - my $stdout_key = "${hash_key}_stdout"; >> - my $stderr_key = "${hash_key}_stderr"; >> - my $skip_key = "skip_${hash_key}"; >> - my $before_cmd_key = "before_${hash_key}"; >> - my $after_cmd_key = "after_${hash_key}"; >> - >> - if (defined($config->{$before_cmd_key})) { >> - _run_step($config->{$before_cmd_key}, $before_cmd_key); >> - } >> - >> - if (!$config->{$skip_key}) { >> - >> - my $i = 0; >> - do { >> - Debug("Restarting $cmd (restart attempt #$i\n") if ($i++ gt >> 0); >> - $ret = MTT::DoCommand::Cmd($mss, >> - "$cmd $config->{$arguments_key}", -1, >> - $config->{stdout_save_lines}, >> - $config->{stderr_save_lines}); >> - >> - # Add header line to stdout >> - if (defined($ret->{result_stdout}) && >> - $ret->{result_stdout} !~ /^\s*$/) { >> - $result_stdout = "--- $cmd $config->{$arguments_key} >> result_stdout"; >> - $result_stdout .= "/result_stderr" >> - if ($mss); >> - $result_stdout .= " ---\n$ret->{result_stdout}"; >> - } >> - >> - # Add header line to stderr >> - if (!$mss && defined($ret->{result_stderr}) && >> - $ret->{result_stderr} !~ /^\s*$/) { >> - $result_stderr = "--- $cmd $config->{$arguments_key} >> result_stderr ---\n$ret->{result_stderr}"; >> - } >> - >> - # Repeat *only* if $restart_on_pattern is defined >> - } while (!MTT::DoCommand::wsuccess($ret->{exit_status}) and >> - (defined($restart_on_pattern) && >> - ($ret->{result_stderr} =~ /$restart_on_pattern/i or >> - $ret->{result_stdout} =~ /$restart_on_pattern/i) and >> - $restart_attempts++ < $restart_attempts_max)); >> - >> - # If fail, save the results in {result_stdout} and >> - # {result_stderr}. >> - if (!MTT::DoCommand::wsuccess($ret->{exit_status})) { >> - $ret->{result_message} = "\"$cmd $config->{$arguments_key}\" >> failed -- skipping this build."; >> - # Put the output of the failure into $ret so that it gets >> - # reported >> - $ret->{result_stdout} = $result_stdout >> - if (defined($result_stdout)); >> - $ret->{result_stderr} = $result_stderr >> - if (!$mss && defined($result_stderr)); >> - $ret->{exit_status} = $ret->{exit_status}; >> - $ret->{fail} = 1; >> - } >> - >> - # If succeed, keep the stdout/stderr in their respective hash >> - # keys for this step. >> - else { >> - if (defined($result_stdout)) { >> - delete $ret->{result_stdout}; >> - $ret->{$stdout_key} = $result_stdout; >> - } >> - if (!$mss && defined($result_stderr)) { >> - delete $ret->{result_stderr}; >> - $ret->{$stderr_key} = $result_stderr; >> - } >> - } >> - } else { >> - Debug("Skippping '$cmd' step.\n"); >> - } >> - >> - if (defined($config->{$after_cmd_key})) { >> - _run_step($config->{$after_cmd_key}, $after_cmd_key); >> - } >> - >> - return $ret; >> -} >> - >> -sub _run_step { >> - my ($cmd, $step) = @_; >> - return MTT::DoCommand::RunStep(1, $cmd, 30, undef, undef, $step); >> -} >> - >> 1; >> Index: lib/MTT/Defaults.pm >> =================================================================== >> --- lib/MTT/Defaults.pm (revision 1271) >> +++ lib/MTT/Defaults.pm (working copy) >> @@ -3,6 +3,8 @@ >> # Copyright (c) 2005-2006 The Trustees of Indiana University. >> # All rights reserved. >> # Copyright (c) 2006-2007 Cisco Systems, Inc. All rights reserved. >> +# Copyright (c) 2009 High Performance Computing Center Stuttgart, >> +# University of Stuttgart. All rights reserved. >> # $COPYRIGHT$ >> # >> # Additional copyrights may follow >> @@ -39,7 +41,7 @@ >> }, >> >> known_compiler_names => [ "gnu", "pgi", "ibm", "intel", "kai", >> "absoft", >> - "pathscale", "sun", "none", "unknown" ], >> + "pathscale", "sun", "microsoft", "none", >> "unknown" ], >> known_resource_manager_names => [ "slurm", "tm", "loadleveler", >> "n1ge", >> "alps", "none", "unknown" ], >> known_network_names => [ "tcp", "udp", "ethernet", "gm", "mx", >> "verbs", >> Index: lib/MTT/MPI/Install/OMPI.pm >> =================================================================== >> --- lib/MTT/MPI/Install/OMPI.pm (revision 1271) >> +++ lib/MTT/MPI/Install/OMPI.pm (working copy) >> @@ -3,6 +3,8 @@ >> # Copyright (c) 2005-2006 The Trustees of Indiana University. >> # All rights reserved. >> # Copyright (c) 2006-2008 Cisco Systems, Inc. All rights reserved. >> +# Copyright (c) 2009 High Performance Computing Center Stuttgart, >> +# University of Stuttgart. All rights reserved. >> # $COPYRIGHT$ >> # >> # Additional copyrights may follow >> @@ -20,6 +22,7 @@ >> use MTT::Values; >> use MTT::Files; >> use MTT::Common::GNU_Install; >> +use MTT::Common::Cmake; >> use MTT::Values::Functions::MPI::OMPI; >> >> #-------------------------------------------------------------------------- >> @@ -86,7 +89,16 @@ >> stderr_save_lines => $config->{stderr_save_lines}, >> merge_stdout_stderr => $config->{merge_stdout_stderr}, >> }; >> - my $install = MTT::Common::GNU_Install::Install($gnu); >> + >> + my $install; >> + my $sys_type=`uname -o`; >> + if(($sys_type == "Cygwin" || $sys_type == "Msys") && >> + $config->{compiler_name} == "microsoft") { >> + $install = MTT::Common::Cmake::Install($gnu); >> + } else { >> + $install = MTT::Common::GNU_Install::Install($gnu); >> + } >> + >> foreach my $k (keys(%{$install})) { >> $ret->{$k} = $install->{$k}; >> } > > > -- > Jeff Squyres > Cisco Systems > > _______________________________________________ > mtt-devel mailing list > mtt-de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/mtt-devel