diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0059afc
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/openmpi-4.0.2.tar.bz2
diff --git a/.openmpi.metadata b/.openmpi.metadata
new file mode 100644
index 0000000..4f22582
--- /dev/null
+++ b/.openmpi.metadata
@@ -0,0 +1 @@
+32ce3761288575fb8e4f6296c9105c3a25cf3235 SOURCES/openmpi-4.0.2.tar.bz2
diff --git a/SOURCES/macros.openmpi b/SOURCES/macros.openmpi
new file mode 100644
index 0000000..05e613f
--- /dev/null
+++ b/SOURCES/macros.openmpi
@@ -0,0 +1,6 @@
+%_openmpi_load \
+ . /etc/profile.d/modules.sh; \
+ module load mpi/openmpi-%{_arch};
+%_openmpi_unload \
+ . /etc/profile.d/modules.sh; \
+ module unload mpi/openmpi-%{_arch};
diff --git a/SOURCES/openmpi.module.in b/SOURCES/openmpi.module.in
new file mode 100644
index 0000000..6885013
--- /dev/null
+++ b/SOURCES/openmpi.module.in
@@ -0,0 +1,21 @@
+#%Module 1.0
+#
+#  OpenMPI module for use with 'environment-modules' package:
+#
+conflict		mpi
+prepend-path 		PATH 		@LIBDIR@/bin
+prepend-path 		LD_LIBRARY_PATH @LIBDIR@/lib
+prepend-path 		PKG_CONFIG_PATH	@LIBDIR@/lib/pkgconfig
+prepend-path		MANPATH		@MANDIR@
+setenv 			MPI_BIN		@LIBDIR@/bin
+setenv			MPI_SYSCONFIG	@ETCDIR@
+setenv			MPI_FORTRAN_MOD_DIR	@FMODDIR@
+setenv			MPI_INCLUDE	@INCDIR@
+setenv	 		MPI_LIB		@LIBDIR@/lib
+setenv			MPI_MAN		@MANDIR@
+setenv			MPI_PYTHON_SITEARCH	@PYSITEARCH@
+setenv			MPI_PYTHON2_SITEARCH	@PYSITEARCH@
+setenv			MPI_PYTHON3_SITEARCH	@PYSITEARCH@
+setenv			MPI_COMPILER	@COMPILER@
+setenv			MPI_SUFFIX	@SUFFIX@
+setenv	 		MPI_HOME	@LIBDIR@
diff --git a/SOURCES/openmpi.pth.py3 b/SOURCES/openmpi.pth.py3
new file mode 100644
index 0000000..ced8c64
--- /dev/null
+++ b/SOURCES/openmpi.pth.py3
@@ -0,0 +1 @@
+import sys, os; s = os.getenv('MPI_PYTHON3_SITEARCH'); s and (s in sys.path or sys.path.append(s))
diff --git a/SPECS/openmpi.spec b/SPECS/openmpi.spec
new file mode 100644
index 0000000..dd8d093
--- /dev/null
+++ b/SPECS/openmpi.spec
@@ -0,0 +1,381 @@
+%global _hardened_build 1
+# We only compile with gcc, but other people may want other compilers.
+# Set the compiler here.
+%global opt_cc gcc
+# Optional CFLAGS to use with the specific compiler...gcc doesn't need any,
+# so uncomment and define to use
+#global opt_cflags
+%global opt_cxx g++
+#global opt_cxxflags
+%global opt_f77 gfortran
+#global opt_fflags
+%global opt_fc gfortran
+#global opt_fcflags
+
+
+# Optional name suffix to use...we leave it off when compiling with gcc, but
+# for other compiled versions to install side by side, it will need a
+# suffix in order to keep the names from conflicting.
+#global _cc_name_suffix -gcc
+
+%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d)
+
+Name:			openmpi%{?_cc_name_suffix}
+Version:		4.0.2
+Release:		2%{?dist}
+Summary:		Open Message Passing Interface
+Group:			Development/Libraries
+License:		BSD and MIT and Romio
+URL:			http://www.open-mpi.org/
+
+# We can't use %%{name} here because of _cc_name_suffix
+Source0:		https://www.open-mpi.org/software/ompi/v4.0/downloads/openmpi-%{version}.tar.bz2
+Source1:		openmpi.module.in
+Source2:		openmpi.pth.py3
+Source3:		macros.openmpi
+
+BuildRequires:		gcc-gfortran, gcc-c++
+%ifnarch s390 s390x
+BuildRequires:		valgrind-devel
+%endif
+%ifnarch s390 s390x i686
+BuildRequires:		ucx-devel
+%endif
+%ifnarch s390 s390x %{arm}
+BuildRequires:		libibverbs-devel >= 1.1.3, opensm-devel >= 3.3.22
+BuildRequires:		librdmacm-devel rdma-core-devel
+%endif
+# Doesn't compile:
+# vt_dyn.cc:958:28: error: 'class BPatch_basicBlockLoop' has no member named 'getLoopHead'
+#                      loop->getLoopHead()->getStartAddress(), loop_stmts );
+#BuildRequires:		dyninst-devel
+BuildRequires:		hwloc-devel
+# So configure can find lstopo
+BuildRequires:		hwloc-gui
+BuildRequires:		java-devel
+%ifnarch s390 s390x
+BuildRequires:		libfabric-devel
+BuildRequires:		papi-devel
+%endif
+BuildRequires:		perl-generators
+BuildRequires:		perl(Getopt::Long)
+BuildRequires:		pmix-devel
+%ifarch x86_64
+BuildRequires:          libpsm2-devel
+%endif
+BuildRequires:		torque-devel
+BuildRequires:		zlib-devel
+BuildRequires:		rpm-mpi-hooks
+BuildRequires:		libevent-devel >= 2.0.22
+
+Provides:		mpi
+Requires:		environment(modules)
+# openmpi currently requires ssh to run
+# https://svn.open-mpi.org/trac/ompi/ticket/4228
+Requires:		openssh-clients
+Requires:		libevent >= 2.0.22
+
+# Private openmpi libraries
+%global __provides_exclude_from %{_libdir}/openmpi/lib/(lib(mca|ompi|open-(pal|rte|trace))|openmpi/).*.so
+%global __requires_exclude lib(mca|ompi|open-(pal|rte|trace)|vt).*
+
+%description
+Open MPI is an open source, freely available implementation of both the
+MPI-1 and MPI-2 standards, 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. For more information, see http://www.open-mpi.org/ .
+
+%package devel
+Summary:	Development files for openmpi
+Group:		Development/Libraries
+Requires:	%{name} = %{version}-%{release}, gcc-gfortran
+Provides:	mpi-devel
+Requires:	rpm-mpi-hooks
+
+%description devel
+Contains development headers and libraries for openmpi.
+
+%package java
+Summary:	Java library
+Group:		Development/Libraries
+Requires:	%{name} = %{version}-%{release}
+Requires:	java-headless
+
+%description java
+OpenMPI Java library.
+
+%package java-devel
+Summary:	Java development files for openmpi
+Group:		Development/Libraries
+Requires:	%{name}-java = %{version}-%{release}
+Requires:	java-devel
+
+%description java-devel
+Contains development wrapper for compiling Java with openmpi.
+
+# We set this to for convenience, since this is the unique dir we use for this
+# particular package, version, compiler
+%global namearch openmpi-%{_arch}%{?_cc_name_suffix}
+
+%package -n python3-openmpi
+Summary:	OpenMPI support for Python 3
+Group:		Development/Libraries
+BuildRequires:	python3-devel
+Requires:	%{name} = %{version}-%{release}
+Provides:	python-openmpi
+
+%description -n python3-openmpi
+OpenMPI support for Python 3.
+
+
+%prep
+%setup -q -n openmpi-%{version}
+
+%build
+%set_build_flags
+./configure --prefix=%{_libdir}/%{name} \
+	--mandir=%{_mandir}/%{namearch} \
+	--includedir=%{_includedir}/%{namearch} \
+	--sysconfdir=%{_sysconfdir}/%{namearch} \
+	--disable-silent-rules \
+	--enable-builtin-atomics \
+	--enable-mpi-thread-multiple \
+%ifnarch %{power64}
+	--enable-mpi-cxx \
+%endif
+	--enable-mpi-java \
+	--enable-mpi-fortran=all \
+	--enable-cxx-exceptions \
+	--with-sge \
+%ifnarch s390 s390x
+	--with-valgrind \
+	--enable-memchecker \
+%endif
+%ifnarch s390 s390x i686
+	--with-ucx \
+	--with-ucx-libdir=%{_libdir} \
+%endif
+	--with-hwloc=external \
+	--with-pmix=external \
+	--with-libevent=external \
+	CC=%{opt_cc} CXX=%{opt_cxx} FC=%{opt_fc} \
+	LDFLAGS="%{build_ldflags}" \
+	CFLAGS="%{?opt_cflags}%{!?opt_cflags:$RPM_OPT_FLAGS}" \
+	CXXFLAGS="%{?opt_cxxflags}%{!?opt_cxxflags:$RPM_OPT_FLAGS}" \
+	FCFLAGS="%{?opt_fcflags}%{!?opt_fcflags:$RPM_OPT_FLAGS}" \
+	--with-contrib-vt-flags='CXXFLAGS="-I%{_includedir}/dyninst -L%{_libdir}/dyninst"'
+
+make %{?_smp_mflags} V=1
+
+%install
+make install DESTDIR=%{buildroot}
+find %{buildroot}%{_libdir}/%{name}/lib -name \*.la | xargs rm
+find %{buildroot}%{_mandir}/%{namearch} -type f | xargs gzip -9
+ln -s mpicc.1.gz %{buildroot}%{_mandir}/%{namearch}/man1/mpiCC.1.gz
+# Remove dangling symlink
+rm %{buildroot}%{_mandir}/%{namearch}/man1/mpiCC.1
+mkdir %{buildroot}%{_mandir}/%{namearch}/man{2,4,5,6,8,9,n}
+
+# Make the environment-modules file
+mkdir -p %{buildroot}%{_sysconfdir}/modulefiles/mpi
+# Since we're doing our own substitution here, use our own definitions.
+sed 's#@LIBDIR@#%{_libdir}/%{name}#;
+     s#@ETCDIR@#%{_sysconfdir}/%{namearch}#;
+     s#@FMODDIR@#%{_fmoddir}/%{name}#;
+     s#@INCDIR@#%{_includedir}/%{namearch}#;
+     s#@MANDIR@#%{_mandir}/%{namearch}#;
+     s#@PYSITEARCH@#%{python3_sitearch}/%{name}#;
+     s#@COMPILER@#openmpi-%{_arch}%{?_cc_name_suffix}#;
+     s#@SUFFIX@#%{?_cc_name_suffix}_openmpi#' \
+     <%{SOURCE1} \
+     >%{buildroot}%{_sysconfdir}/modulefiles/mpi/%{namearch}
+
+# make the rpm config file
+install -Dpm 644 %{SOURCE3} %{buildroot}/%{macrosdir}/macros.%{namearch}
+
+# Link the fortran module to proper location
+mkdir -p %{buildroot}%{_fmoddir}/%{name}
+for mod in %{buildroot}%{_libdir}/%{name}/lib/*.mod
+do
+  modname=$(basename $mod)
+  ln -s ../../../%{name}/lib/${modname} %{buildroot}/%{_fmoddir}/%{name}/
+done
+
+# Link the pkgconfig files into the main namespace as well
+mkdir -p %{buildroot}%{_libdir}/pkgconfig
+cd %{buildroot}%{_libdir}/pkgconfig
+ln -s ../%{name}/lib/pkgconfig/*.pc .
+cd -
+
+# Remove extraneous wrapper link libraries (bug 814798)
+sed -i -e s/-ldl// -e s/-lhwloc// \
+  %{buildroot}%{_libdir}/%{name}/share/openmpi/*-wrapper-data.txt
+
+# install .pth files
+mkdir -p %{buildroot}/%{python3_sitearch}/%{name}
+install -pDm0644 %{SOURCE2} %{buildroot}/%{python3_sitearch}/openmpi.pth
+
+%check
+make check
+
+%files
+%license LICENSE
+%dir %{_libdir}/%{name}
+%dir %{_sysconfdir}/%{namearch}
+%dir %{_libdir}/%{name}/bin
+%dir %{_libdir}/%{name}/lib
+%dir %{_libdir}/%{name}/lib/openmpi
+%dir %{_mandir}/%{namearch}
+%dir %{_mandir}/%{namearch}/man*
+%config(noreplace) %{_sysconfdir}/%{namearch}/*
+%{_libdir}/%{name}/bin/*.pl
+%{_libdir}/%{name}/bin/mpi[er]*
+%{_libdir}/%{name}/bin/ompi*
+%{_libdir}/%{name}/bin/orte[-dr_]*
+%ifnarch s390 s390x i686
+%{_libdir}/%{name}/bin/osh*
+%{_libdir}/%{name}/bin/shmem*
+%endif
+%{_libdir}/%{name}/lib/*.so.*
+%{_mandir}/%{namearch}/man1/*
+%{_mandir}/%{namearch}/man7/*
+%{_libdir}/%{name}/lib/openmpi/*
+%{_sysconfdir}/modulefiles/mpi/
+%dir %{_libdir}/%{name}/share
+%dir %{_libdir}/%{name}/share/openmpi
+%{_libdir}/%{name}/share/openmpi/amca-param-sets
+%{_libdir}/%{name}/share/openmpi/help*.txt
+%ifnarch s390 %{arm}
+%{_libdir}/%{name}/share/openmpi/mca-btl-openib-device-params.ini
+%endif
+
+
+%files devel
+%dir %{_includedir}/%{namearch}
+%{_libdir}/%{name}/bin/mpi[cCf]*
+%{_libdir}/%{name}/bin/opal_*
+%{_libdir}/%{name}/bin/orte[cCf]*
+%{_includedir}/%{namearch}/*
+%{_fmoddir}/%{name}/
+%{_libdir}/%{name}/lib/*.so
+%{_libdir}/%{name}/lib/*.mod
+%{_libdir}/%{name}/lib/pkgconfig/
+%{_libdir}/pkgconfig/*.pc
+%{_mandir}/%{namearch}/man1/mpi[cCf]*
+%{_mandir}/%{namearch}/man1/opal_*
+%{_mandir}/%{namearch}/man3/*
+%{_libdir}/%{name}/share/openmpi/openmpi-valgrind.supp
+%{_libdir}/%{name}/share/openmpi/*-wrapper-data.txt
+%{macrosdir}/macros.%{namearch}
+
+%files java
+%{_libdir}/%{name}/lib/mpi.jar
+
+%files java-devel
+%{_libdir}/%{name}/bin/mpijavac
+%{_libdir}/%{name}/bin/mpijavac.pl
+# Currently this only contaings openmpi/javadoc
+%{_libdir}/%{name}/share/doc/
+%{_mandir}/%{namearch}/man1/mpijavac.1.gz
+
+%files -n python3-openmpi
+%dir %{python3_sitearch}/%{name}
+%{python3_sitearch}/openmpi.pth
+
+
+%changelog
+* Sun Jan 19 2020 Honggang Li <honli@redhat.com> - 4.0.2-2
+- Rebuild against ucx-1.6
+- Resolves: rhbz#1791483
+
+* Wed Oct 16 2019 Jarod Wilson <jarod@redhat.com> - 4.0.2-1
+- Update to upstream v4.0.2 release
+- Resolves: rhbz#1725631
+
+* Thu Aug 01 2019 Jarod Wilson <jarod@redhat.com> - 4.0.1-3
+- Actually enable UCX support
+- Resolves: rhbz#1642942
+
+* Wed Jun 19 2019 Jarod Wilson <jarod@redhat.com> - 4.0.1-2
+- Bump and rebuild for newer opensm
+- Resolves: rhbz#1717289
+
+* Mon Apr 29 2019 Jarod Wilson <jarod@redhat.com> - 4.0.1-1
+- Update to upstream v4.0.1 release
+- Resolves: rhbz#1660623
+
+* Tue Sep 25 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-5
+- Update BR: opensm-devel min version and rebuild against opensm 3.3.21
+- Resolves: rhbz#1630653
+
+* Mon Sep 24 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-4
+- Further tweaks to compile/linker flag usage
+- Related: rhbz#1624157
+- Move modulefiles under /etc like our other suppored mpi providers
+- Resolves: rhbz#1632399
+
+* Tue Sep 18 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-3
+- Undo stripping/ignoring of distro-provided optimization flags
+- Related: rhbz#1624157
+
+* Wed Sep 12 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-2
+- Additional tweaks to module paths, fix openmpi-devel R
+- Related: rhbz#1623441
+
+* Wed Sep 12 2018 Jarod Wilson <jarod@redhat.com> - 3.1.2-1
+- Update to upstream 3.1.2 bug fix release
+- Fix some paths in module file, strip out python2 bits
+- Related: rhbz#1623441
+
+* Thu Aug 30 2018 Jarod Wilson <jarod@redhat.com> - 3.1.1-2
+- Bump and rebuild for autogen rpmbuild library dependency fixes
+- Related: rhbz#1623441
+
+* Mon Jul 02 2018 Jarod Wilson <jarod@redhat.com> - 3.1.1-1
+- Update to upstream 3.1.1 bug fix release
+- Drop BR: on deprecated infinipath-psm
+
+* Thu May 31 2018 Jarod Wilson <jarod@redhat.com> - 3.1.0-1
+- Update to upstream 3.1.0 release
+- Use external pmix and libevent
+
+* Thu May 17 2018 Charalampos Stratakis <cstratak@redhat.com> - 2.1.1-11
+- Do not build the python2 subpackage on EL > 7
+
+* Wed May 09 2018 Troy Dawson <tdawson@redhat.com> - 2.1.1-10
+- Build with rdma-core-devel instead of libibcm-devel
+
+* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 2.1.1-9
+- Escape macros in %%changelog
+
+* Mon Feb 05 2018 Orion Poplawski <orion@cora.nwra.com> - 2.1.1-8
+- Rebuild for rdma-core 16.2
+
+* Wed Jan 31 2018 Christoph Junghans <junghans@votca.org> - 2.1.1-7
+- Rebuild for gfortran-8
+
+* Fri Jan 12 2018 Iryna Shcherbina <ishcherb@redhat.com> - 2.1.1-6
+- Update Python 2 dependency declarations to new packaging standards
+  (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3)
+
+* Wed Aug 23 2017 Adam Williamson <awilliam@redhat.com> - 2.1.1-5
+- Disable RDMA support on 32-bit ARM (#1484155)
+- Disable hanging opal_fifo test on ppc64le (gh #2526 / #2966)
+
+* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.1.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
+* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 2.1.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Wed Jul 19 2017 Orion Poplawski <orion@cora.nwra.com> - 2.1.1-2
+- Provide pkgconfig files in the main namespace as well (1471512)
+
+* Fri May 12 2017 Orion Poplawski <orion@cora.nwra.com> - 2.1.1-1
+- Update to 2.1.1
+
+* Thu May 4 2017 Orion Poplawski <orion@cora.nwra.com> - 2.1.0-1
+- Update to 2.1.0