# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
# $Id: Portfile 108127 2013-07-13 16:40:58Z larryv@macports.org $

PortSystem 1.0

name			openmpi
version			1.7.2
set branch		[join [lrange [split ${version} .] 0 1] .]
categories		science parallel net
platforms		darwin
license			BSD
maintainers		mww openmaintainer
description		A High Performance Message Passing Library
long_description	Open MPI is a project combining technologies and resources \
			from several other projects (FT-MPI, LA-MPI, LAM/MPI, and \
			PACX-MPI) in order to build the best MPI library available. A \
			completely new MPI-2 compliant implementation, Open MPI offers \
			advantages for system and software vendors, application developers \
			and computer science researchers.

homepage		http://www.open-mpi.org/
set subdir		ompi/v${branch}/downloads/
master_sites		http://www.open-mpi.org/software/${subdir} \
			http://www.open-mpi.de/software/${subdir} \
			http://icl.cs.utk.edu/open-mpi/${subdir}
# keep md5 & sha1 checksums as they are published on http://www.open-mpi.org/software/ompi/v1.7/
checksums           md5     b897b92100bd13b367e651df483421d5 \
                    sha1    89676c1171784b1c26e1598caf88e87f897f6653 \
                    rmd160  ab20fb0a9a4adf23267e5f7b998c23e2ce397e93 \
                    sha256  82a1c477dcadad2032ab24d9be9e39c1042865965841911f072c49aa3544fd85

use_bzip2		yes

pre-extract { file mkdir ${workpath}/build }

# https://trac.macports.org/ticket/39089
compiler.blacklist	gcc-4.0

configure.dir	${workpath}/build
configure.cmd	${worksrcpath}/configure
configure.args	--disable-mpi-f77 --disable-mpi-f90 \
		--sysconfdir=${prefix}/etc/${name} \
		--includedir=${prefix}/include/${name} \
		--bindir=${prefix}/lib/${name}/bin \
		--mandir=${prefix}/share/man

if {${configure.compiler} == "llvm-gcc-4.2"} {
    configure.compiler clang
}

build.dir	${configure.dir}

destroot.dir	${build.dir}
set wrappers	{mpicc mpicxx mpic++}
post-destroot {
	foreach bin {mpirun mpiexec} {
		system -W ${destroot}${prefix}/bin \
			"ln -sf ${prefix}/lib/${name}/bin/orterun open${bin}"
	}
	foreach bin ${wrappers} {
		system -W ${destroot}${prefix}/bin \
			"ln -sf ${prefix}/lib/${name}/bin/opal_wrapper open${bin}"
		system -W ${destroot}${prefix}/share/${name} \
			"ln -sf ${prefix}/share/${name}/${bin}-wrapper-data.txt \
			open${bin}-wrapper-data.txt"
	}
}

conflicts       mpich mpich2 mpich3 lammpi mpich-devel mpich3-devel

variant threads description {enable threads for MPI applications} {
	configure.args-append --enable-mpi-thread-multiple
}

variant valgrind description {enable valgrind support} {
	depends_lib-append    path:${prefix}/lib/pkgconfig/valgrind.pc:valgrind
	configure.args-append --enable-debug --enable-memchecker --with-valgrind=${prefix}
}

variant gcc43 description {build openmpif77 and openmpif90 using gcc43} conflicts gcc44 gcc45 gcc46 gcc47 gcc48 g95 {
	configure.args-delete --disable-mpi-f77 --disable-mpi-f90
	configure.args-append --enable-mpi-f77 --enable-mpi-f90
	configure.f77	      ${prefix}/bin/gfortran-mp-4.3
	configure.fc	      ${prefix}/bin/gfortran-mp-4.3
	depends_lib-append    port:gcc43
	lappend wrappers mpif77 mpif90
}

variant gcc44 description {build openmpif77 and openmpif90 using gcc44} conflicts gcc43 gcc45 gcc46 gcc47 gcc48 g95 {
	configure.args-delete --disable-mpi-f77 --disable-mpi-f90
	configure.args-append --enable-mpi-f77 --enable-mpi-f90
	configure.f77	      ${prefix}/bin/gfortran-mp-4.4
	configure.fc	      ${prefix}/bin/gfortran-mp-4.4
	depends_lib-append    port:gcc44
	lappend wrappers mpif77 mpif90
}

variant gcc45 description {build openmpif77 and openmpif90 using gcc45} conflicts gcc43 gcc44 gcc46 gcc47 gcc48 g95 {
	configure.args-delete --disable-mpi-f77 --disable-mpi-f90
	configure.args-append --enable-mpi-f77 --enable-mpi-f90
	configure.f77	      ${prefix}/bin/gfortran-mp-4.5
	configure.fc	      ${prefix}/bin/gfortran-mp-4.5
	depends_lib-append    port:gcc45
	lappend wrappers mpif77 mpif90
}

variant gcc46 description {build openmpif77 and openmpif90 using gcc46} conflicts gcc43 gcc44 gcc45 gcc47 gcc48 g95 {
	configure.args-delete --disable-mpi-f77 --disable-mpi-f90
	configure.args-append --enable-mpi-f77 --enable-mpi-f90
	configure.f77	      ${prefix}/bin/gfortran-mp-4.6
	configure.fc	      ${prefix}/bin/gfortran-mp-4.6
	depends_lib-append    port:gcc46
	lappend wrappers mpif77 mpif90
}

variant gcc47 description {build openmpif77 and openmpif90 using gcc47} conflicts gcc43 gcc44 gcc45 gcc46 gcc48 g95 {
	configure.args-delete --disable-mpi-f77 --disable-mpi-f90
	configure.args-append --enable-mpi-f77 --enable-mpi-f90
	configure.f77	      ${prefix}/bin/gfortran-mp-4.7
	configure.fc	      ${prefix}/bin/gfortran-mp-4.7
	depends_lib-append    port:gcc47
	lappend wrappers mpif77 mpif90
}

variant gcc48 description {build openmpif77 and openmpif90 using gcc48} conflicts gcc43 gcc44 gcc45 gcc46 gcc47 g95 {
	configure.args-delete --disable-mpi-f77 --disable-mpi-f90
	configure.args-append --enable-mpi-f77 --enable-mpi-f90
	configure.f77	      ${prefix}/bin/gfortran-mp-4.8
	configure.fc	      ${prefix}/bin/gfortran-mp-4.8
	depends_lib-append    port:gcc48
	lappend wrappers mpif77 mpif90
}

variant g95 description {build openmpif77 and openmpif90 using g95} conflicts gcc43 gcc44 gcc45 gcc46 gcc47 gcc48 {
	configure.args-delete --disable-mpi-f77 --disable-mpi-f90
	configure.args-append --enable-mpi-f77 --enable-mpi-f90
	configure.f77	      ${prefix}/bin/g95
	configure.fc	      ${prefix}/bin/g95
	depends_lib-append    port:g95
	lappend wrappers mpif77 mpif90
}

# dependents like netcdf need some form of fortran
if {![variant_isset gcc43] && ![variant_isset gcc44] && ![variant_isset gcc45] && ![variant_isset gcc46] && ![variant_isset gcc48] && ![variant_isset g95]} {
    default_variants +gcc47
}

livecheck.type	regex
livecheck.url	http://www.open-mpi.org/software/ompi/v1.7/
livecheck.regex	openmpi-(\[0-9\.\]+).tar.bz2

universal_variant no

# remove -arch from ldflags, ticket #22833
configure.ld_archflags
# avoid building against older installed version, ticket #23864
configure.cppflags-delete -I${prefix}/include
configure.ldflags-delete -L${prefix}/lib

configure.ccache no
