aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCharlie Sharpsteen2012-07-06 11:47:45 -0800
committerCharlie Sharpsteen2012-07-28 09:12:44 -0700
commit98d69d9efc300cd6ba50af1bf33da2f27dca0cdb (patch)
tree8c21f8dd1021a244bffaa2fbe1b858fd275bcf11
parentdcd06ecf88b460e4963c5d50df1a2889636551fc (diff)
downloadhomebrew-98d69d9efc300cd6ba50af1bf33da2f27dca0cdb.tar.bz2
dependencies.rb: Add MPI compiler Requirement
All versions of OS X prior to Lion shipped with some version of Open-MPI, but without working compiler wrappers for Fortran. Homebrew currently has two formulae that can supply this software: open-mpi and mpich2. This commit adds a `MPIDependency` Requirement that can be passed one of four values when constructed: :cc, :cxx, :f90, :f77 This will ensure the `mpi<value>` compiler is available and working. For example, if `depends_on MPIDependency.new(:cc, :f90)` is used, the Requirement will search for working `mpicc` and `mpif90` wrappers. If the required wrappers cannot be found, an error message will be displayed that prompts the user to install one of the Homebrew formulae that provides MPI. For each language passed to a MPIDependency Requirement, environment variables be will set that point to the compilers. Signed-off-by: Charlie Sharpsteen <source@sharpsteen.net>
-rw-r--r--Library/Homebrew/dependencies.rb83
1 files changed, 83 insertions, 0 deletions
diff --git a/Library/Homebrew/dependencies.rb b/Library/Homebrew/dependencies.rb
index 43596ad6c..de9ed9207 100644
--- a/Library/Homebrew/dependencies.rb
+++ b/Library/Homebrew/dependencies.rb
@@ -204,3 +204,86 @@ class X11Dependency < Requirement
end
end
+
+
+class MPIDependency < Requirement
+
+ attr_reader :lang_list
+
+ def initialize *lang_list
+ @lang_list = lang_list
+ @non_functional = []
+ @unknown_langs = []
+ end
+
+ def fatal?; true; end
+
+ def mpi_wrapper_works? compiler
+ compiler = which compiler
+ return false if compiler.nil? or not compiler.executable?
+
+ # Some wrappers are non-functional and will return a non-zero exit code
+ # when invoked for version info.
+ #
+ # NOTE: A better test may be to do a small test compilation a la autotools.
+ quiet_system compiler, '--version'
+ end
+
+ def satisfied?
+ @lang_list.each do |lang|
+ case lang
+ when :cc, :cxx, :f90, :f77
+ compiler = 'mpi' + lang.to_s
+ @non_functional << compiler unless mpi_wrapper_works? compiler
+ else
+ @unknown_langs << lang.to_s
+ end
+ end
+
+ @unknown_langs.empty? and @non_functional.empty?
+ end
+
+ def modify_build_environment
+ # Set environment variables to help configure scripts find MPI compilers.
+ # Variable names taken from:
+ #
+ # http://www.gnu.org/software/autoconf-archive/ax_mpi.html
+ lang_list.each do |lang|
+ compiler = 'mpi' + lang.to_s
+ mpi_path = which compiler
+
+ # Fortran 90 environment var has a different name
+ compiler = 'MPIFC' if lang == :f90
+ ENV[compiler.upcase] = mpi_path
+ end
+ end
+
+ def message
+ if not @unknown_langs.empty?
+ <<-EOS.undent
+ There is no MPI compiler wrapper for:
+
+ #{@unknown_langs.join ', '}
+
+ The following values are valid arguments to `MPIDependency.new`:
+
+ :cc, :cxx, :f90, :f77
+ EOS
+ else
+ <<-EOS.undent
+ Homebrew could not locate working copies of the following MPI compiler
+ wrappers:
+
+ #{@non_functional.join ', '}
+
+ If you have a MPI installation, please ensure the bin folder is on your
+ PATH and that all the wrappers are functional. Otherwise, a MPI
+ installation can be obtained from homebrew by *picking one* of the
+ following formulae:
+
+ open-mpi, mpich2
+ EOS
+ end
+ end
+
+end