Skip to content

Commit 390e362

Browse files
committed
openmpi.spec: updates for v5.0.0
- Default all 3rd-party packages to be "external". It is strognly recomended that the RPM only contain Open MPI, not the embedded 3rd-party packages. This behavior can be overridden via the configure_options rpmbuild macros. - Copy all the Sphinx-generated HTML files to pkgdocdir/html. These are not normally installed, but it's probably worth it for the RPM. - Remove no-longer-existing INSTALL file. This file was removed as part of the conversion to RST-based documentation. - Tighten up files listings for the individual RPMs. - Convert -docs sub-package to exclusively use mandir and pkgdocdir (instead of docs.files). We already excluded mandir because rpmbuild may have renamed all the man pages after compressing them (so we didn't necessarily know the correct filenames). We also explicitly list pkgdocdir so that it picks up the entire tree of files and also removes the entire tree (including directories) when the RPM is removed. - Remove some stale F77 and VT references. - Fix some minor typos. - Fix a few "file listed twice" warnings and clean up lists of files included in the runtime and devel sub-project RPMs. Signed-off-by: Jeff Squyres <[email protected]> squashme Signed-off-by: Jeff Squyres <[email protected]>
1 parent 3c95815 commit 390e362

File tree

3 files changed

+92
-80
lines changed

3 files changed

+92
-80
lines changed

contrib/dist/linux/README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ Please, do NOT set the same settings with parameters and config vars.
6161
* `-c parameter`:
6262
Add custom configure parameter.
6363

64+
**NOTE:** As of Open MPI v5.0.x, there are default configure
65+
options for `--with-FOO=external` for all the 3rd party packages
66+
(libevent, hwloc, pmix, prrte). This makes a pure Open MPI RPM,
67+
not an RPM that includes those 3rd party packages. If you specify
68+
`-c`, if you want to preserve the default options, you will need to
69+
include those in the parameter value.
70+
6471
* `-r parameter`:
6572
Add custom RPM build parameter.
6673

contrib/dist/linux/buildrpm.sh

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@ unpack_spec=0
8585
# "normal" names.
8686
#export CC=gcc
8787
#export CXX=g++
88-
#export F77=f77
8988
#export FC=
9089

9190
# Note that this script can build one or all of the following RPMs:
@@ -353,7 +352,6 @@ cat <<EOF
353352
--> Hard-wired for compilers:
354353
CC = $CC
355354
CXX = $CXX
356-
F77 = $F77
357355
FC = $FC
358356
EOF
359357

@@ -391,9 +389,6 @@ fi
391389
if test "$CXX" != ""; then
392390
configure_options="$configure_options CXX=$CXX"
393391
fi
394-
if test "$F77" != ""; then
395-
configure_options="$configure_options F77=$F77"
396-
fi
397392
if test "$FC" != ""; then
398393
configure_options="$configure_options FC=$FC"
399394
fi
@@ -446,6 +441,8 @@ fi
446441
if test "$build_multiple" = "yes"; then
447442
echo "--> Building the multiple Open MPI RPM"
448443
cmd="$rpm_cmd -bb $rpmbuild_options --define 'build_all_in_one_rpm 0'"
444+
# JMS
445+
cmd="$cmd --define 'mflags -j12'"
449446
if test "$configure_options" != ""; then
450447
cmd="$cmd --define 'configure_options $configure_options'"
451448
fi
@@ -471,7 +468,7 @@ cat <<EOF
471468
==== FINISHED BUILDING Open MPI RPM ====
472469
------------------------------------------------------------------------------
473470
A copy of the tarball is located in: $rpmtopdir/SOURCES/
474-
The completed rpms are located in: $rpmtopdir/RPMS/i<something>86/
471+
The completed rpms are located in: $rpmtopdir/RPMS/
475472
The sources rpms are located in: $rpmtopdir/SRPMS/
476473
The spec files are located in: $rpmtopdir/SPECS/
477474
------------------------------------------------------------------------------

contrib/dist/linux/openmpi.spec

Lines changed: 82 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
# University of Stuttgart. All rights reserved.
1010
# Copyright (c) 2004-2005 The Regents of the University of California.
1111
# All rights reserved.
12-
# Copyright (c) 2006-2020 Cisco Systems, Inc. All rights reserved.
12+
# Copyright (c) 2006-2022 Cisco Systems, Inc. All rights reserved.
1313
# Copyright (c) 2013 Mellanox Technologies, Inc.
1414
# All rights reserved.
1515
# Copyright (c) 2015 Research Organization for Information Science
@@ -43,11 +43,6 @@
4343
#
4444
# shell$ rpmbuild ... --define 'install_in_opt 1' ...
4545
#
46-
# Or (a multi-token example):
47-
#
48-
# shell$ rpmbuild ... \
49-
# --define 'configure_options CFLAGS=-g --with-openib=/usr/local/ofed' ...
50-
#
5146
#############################################################################
5247

5348
# Define this if you want to make this SRPM build in
@@ -58,6 +53,19 @@
5853
# type: bool (0/1)
5954
%{!?install_in_opt: %define install_in_opt 0}
6055

56+
# This specfile expects to find all required 3rd party packages
57+
# (Libevent, Hwloc, PMIx, PRRTE) externally, and will not use the
58+
# internal/embedded copies of these packages. This behavior is
59+
# strongly recomended for packagers. However, if you want to override
60+
# this behavior, change the definition below to 0.
61+
#
62+
# NOTE: This option will cause "--with-libevent=external
63+
# --with-hwloc=external --with-pmix=external --with-prrte=external" to
64+
# be added to the arguments to configure. If you wish to use different
65+
# CLI options, set this value to 0 and set configure_options to the
66+
# CLI options you want.
67+
%{!?all_external_3rd_party: %define all_external_3rd_party 1}
68+
6169
# Define this if you want this RPM to install environment setup
6270
# shell scripts.
6371
# type: bool (0/1)
@@ -138,22 +146,24 @@
138146

139147
# On some platforms, Open MPI/SHMEM just flat-out doesn't work with
140148
# -D_FORTIFY_SOURCE (e.g., some users have reported that there are
141-
# problems on ioa64 platforms). In this case, just turn it off
149+
# problems on ia64 platforms). In this case, just turn it off
142150
# (meaning: this specfile will strip out that flag from the
143151
# OS-provided compiler flags). We already strip out _FORTIFY_SOURCE
144152
# for non-GCC compilers; setting this option to 0 will *always* strip
145153
# it out, even if you're using GCC.
146154
# type: bool (0/1)
147155
%{!?allow_fortify_source: %define allow_fortify_source 1}
148156

149-
# Select md5 packing algorithm, that src.rpm created on one distro can be read on another.
157+
# Select md5 packing algorithm, that src.rpm created on one distro can
158+
# be read on another.
150159
%global _binary_filedigest_algorithm 1
151160
%global _source_filedigest_algorithm 1
152161

153162
# Define this to 1 if you want to keep libtool achive files
154163
# Default is 0 (remove *.la files)
155164
# type: bool (0/1)
156165
%{!?install_libtool_archive: %define install_libtool_archive 0}
166+
157167
#############################################################################
158168
#
159169
# Configuration Logic
@@ -177,15 +187,22 @@
177187
# Per advice from Doug Ledford at Red Hat, docdir is supposed to be in
178188
# a fixed location. But if you're installing a package in /opt, all
179189
# bets are off. So feel free to install it anywhere in your tree. He
180-
# suggests $prefix/doc.
181-
%define _defaultdocdir /opt/%{name}/%{version}/doc
190+
# suggests $prefix/doc, but the GNU Autotools these days default to
191+
# $prefix/share/doc.
192+
%define _defaultdocdir /opt/%{name}/%{version}/share/doc
182193

183194
# Also put the modulefile in /opt (unless the user already specified
184195
# where they want it to go -- the modulefile is a bit different in
185196
# that the user may want it outside of /opt).
186197
%{!?modulefile_path: %define modulefile_path /opt/%{name}/%{version}/share/openmpi/modulefiles}
187198
%endif
188199

200+
%if %{all_external_3rd_party}
201+
%define _configure_3rd_party --with-libevent=external --with-hwloc=external --with-pmix=external --with-prrte=external
202+
%else
203+
%define _configure_3rd_party %{nil}
204+
%endif
205+
189206
# Now that we have processed install_in_opt, we can see if
190207
# modulefile_path was not set. If it was not, then set it to a
191208
# default value.
@@ -212,6 +229,7 @@
212229
%define __check_files %{nil}
213230
%endif
214231

232+
# Set this to any options you want to pass in to configure.
215233
%{!?configure_options: %define configure_options %{nil}}
216234

217235
%if !%{use_default_rpm_opt_flags}
@@ -245,6 +263,12 @@ BuildRoot: /var/tmp/%{name}-%{version}-%{release}-root
245263
%if %{disable_auto_requires}
246264
AutoReq: no
247265
%endif
266+
%if %{all_external_3rd_party}
267+
# If we require all external 3rd party packages, then assume the use
268+
# of the OS Libevent and Hwloc packages.
269+
BuildRequires: libevent-devel hwloc-devel
270+
Requires: libevent hwloc
271+
%endif
248272
%if %{install_modulefile}
249273
Requires: %{modules_rpm_name}
250274
%endif
@@ -284,6 +308,12 @@ Provides: openmpi-runtime = %{version}
284308
%if %{disable_auto_requires}
285309
AutoReq: no
286310
%endif
311+
%if %{all_external_3rd_party}
312+
# If we require all external 3rd party packages, then assume the use
313+
# of the OS Libevent and Hwloc packages.
314+
BuildRequires: libevent-devel hwloc-devel
315+
Requires: libevent hwloc
316+
%endif
287317
%if %{install_modulefile}
288318
Requires: %{modules_rpm_name}
289319
%endif
@@ -465,7 +495,7 @@ CXXFLAGS="%{?cxxflags:%{cxxflags}}%{!?cxxflags:$RPM_OPT_FLAGS}"
465495
FCFLAGS="%{?fcflags:%{fcflags}}%{!?fcflags:$RPM_OPT_FLAGS}"
466496
export CFLAGS CXXFLAGS FCFLAGS
467497

468-
%configure %{configure_options}
498+
%configure %{configure_options} %{_configure_3rd_party}
469499
%{__make} %{?mflags}
470500

471501

@@ -595,63 +625,34 @@ EOF
595625
# always gives a 0 exit status.
596626

597627
# First, find all the files
598-
rm -f all.files runtime.files remaining.files devel.files docs.files
628+
rm -f all.files runtime.files remaining.files devel.files
599629
find $RPM_BUILD_ROOT -type f -o -type l | \
600630
sed -e "s@$RPM_BUILD_ROOT@@" \
601631
> all.files | /bin/true
602632

603633
# Runtime files. This should generally be library files and some
604634
# executables (no man pages, no doc files, no header files). Do *not*
605635
# include wrapper compilers.
606-
cat all.files | egrep '/lib/|/lib64/|/lib32/|/bin/|/etc/|/help-' > tmp.files | /bin/true
636+
cat all.files | \
637+
egrep '/lib/|/lib64/|/lib32/|/bin/|/etc/|/help-' \
638+
> tmp.files | /bin/true
607639
# Snip out a bunch of executables (e.g., wrapper compilers, pkgconfig
608-
# files, .la and .a files)
609-
egrep -vi 'mpic|mpif|ortec|f77|f90|pkgconfig|\.la$|\.a$' tmp.files > runtime.files | /bin/true
640+
# files, .la and .a files) and docs
641+
egrep -vi 'bin/mpic|bin/mpif|bin/mpif77|bin/mpif90|pkgconfig|wrapper|\.mod$|\.la$|\.a$' tmp.files > runtime.files | /bin/true
642+
610643
rm -f tmp.files
611644

612645
# Now take the runtime files out of all.files so that we don't get
613646
# duplicates.
614647
grep -v -f runtime.files all.files > remaining.files
615648

616-
# Devel files, potentially including VT files. Basically -- just
617-
# exclude the man pages and doc files.
649+
# Devel files. Basically -- just exclude the man pages and doc files.
618650
cat remaining.files | \
619651
egrep -v '/man/|/doc/' \
620652
> devel.files | /bin/true
621653

622-
# Now take those files out of reaming.files so that we don't get
623-
# duplicates.
624-
grep -v -f devel.files remaining.files > docs.files
625-
626-
#################################################
627-
628-
# Now that we have a final list of files for each of the runtime,
629-
# devel, and docs RPMs, snip even a few more files out of those lists
630-
# because for directories that are wholly in only one RPM, we just
631-
# list that directory in the file lists below, and RPM will pick up
632-
# all files in that tree. We therefore don't want to list any files
633-
# in those trees in our *.files file lists. Additionally, the man
634-
# pages may get compressed by rpmbuild after this "install" step, so we
635-
# might not even have their final filenames, anyway.
636-
637-
# runtime sub package
638-
%if !%{sysconfdir_in_prefix}
639-
grep -v %{_sysconfdir} runtime.files > tmp.files | /bin/true
640-
mv tmp.files runtime.files
641654
%endif
642-
grep -v %{_pkgdatadir} runtime.files > tmp.files | /bin/true
643-
mv tmp.files runtime.files
644-
645-
# devel sub package
646-
grep -v %{_includedir} devel.files > tmp.files | /bin/true
647-
mv tmp.files devel.files
648-
649-
# docs sub package
650-
grep -v %{_mandir} docs.files > tmp.files | /bin/true
651-
mv tmp.files docs.files
652-
653-
%endif
654-
# End of build_all_in_one_rpm
655+
# End of !build_all_in_one_rpm
655656

656657
#############################################################################
657658
#
@@ -713,15 +714,15 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT
713714
%{_bindir}/*
714715
%{_includedir}/*
715716
%{_libdir}/*
716-
%{_datadir}
717+
%{_datadir}/*
717718
%else
718719
%{_prefix}
719720
%endif
720721
# If the sysconfdir is not under the prefix, then list it explicitly.
721722
%if !%{sysconfdir_in_prefix}
722723
%{_sysconfdir}
723724
%endif
724-
# If %{install_in_opt}, then we're instaling OMPI to
725+
# If install_in_opt, then we're instaling OMPI to
725726
# /opt/openmpi/<version>. But be sure to also explicitly mention
726727
# /opt/openmpi so that it can be removed by RPM when everything under
727728
# there is also removed.
@@ -737,33 +738,30 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT
737738
%{shell_scripts_path}/%{shell_scripts_basename}.sh
738739
%{shell_scripts_path}/%{shell_scripts_basename}.csh
739740
%endif
740-
%doc README.md INSTALL LICENSE
741+
%doc README.md LICENSE
741742

742743
%else
743744

744745
#
745746
# Sub-package RPMs
746747
#
747-
# Harder than all-in-one. We list the directories specifically so
748-
# that if the RPM creates directories when it is installed, we will
749-
# remove them when the RPM is uninstalled. We also have to use
750-
# specific file lists.
751-
#
748+
# Harder than all-in-one. Explicitly list all the files we want by
749+
# the various *.files we generated above. Only list directories if
750+
# they are not /usr (or assumedly any other location that does not
751+
# already exist).
752752

753753
%files runtime -f runtime.files
754754
%defattr(-, root, root, -)
755-
%if %(test "%{_prefix}" = "/usr" && echo 1 || echo 0)
756-
%{_bindir}/*
757-
%{_libdir}/*
758-
%{_datadir}
759-
%else
760-
%{_prefix}
761-
%endif
755+
%if %(test "%{_prefix}" != "/usr" && echo 1 || echo 0)
756+
%dir %{_prefix}
757+
%dir %{_pkgdatadir}
762758
# If the sysconfdir is not under the prefix, then list it explicitly.
763759
%if !%{sysconfdir_in_prefix}
764-
%{_sysconfdir}
760+
%dir %{_sysconfdir}
761+
%endif
765762
%endif
766-
# If %{install_in_opt}, then we're instaling OMPI to
763+
764+
# If install_in_opt, then we're instaling OMPI to
767765
# /opt/openmpi/<version>. But be sure to also explicitly mention
768766
# /opt/openmpi so that it can be removed by RPM when everything under
769767
# there is also removed. Also list /opt/openmpi/<version>/share so
@@ -781,21 +779,23 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT
781779
%{shell_scripts_path}/%{shell_scripts_basename}.sh
782780
%{shell_scripts_path}/%{shell_scripts_basename}.csh
783781
%endif
784-
%doc README.md INSTALL LICENSE
785-
%{_pkgdatadir}
782+
%doc README.md LICENSE
786783

787784
%files devel -f devel.files
788785
%defattr(-, root, root, -)
789-
%{_includedir}
790786

787+
%files docs
788+
%defattr(-, root, root, -)
791789
# Note that we list the mandir specifically here, because we want all
792790
# files found in that tree, because rpmbuild may have compressed them
793-
# (e.g., foo.1.gz or foo.1.bz2) -- and we therefore don't know the
794-
# exact filenames.
795-
%files docs -f docs.files
796-
%defattr(-, root, root, -)
791+
# after we installed them (e.g., foo.1.gz or foo.1.bz2), and we
792+
# therefore don't know the exact filenames.
797793
%{_mandir}
798794

795+
# Explicitly list the pkgdocdir so that it will be removed when the
796+
# RPM is removed.
797+
%{_pkgdocdir}
798+
799799
%endif
800800

801801

@@ -805,6 +805,15 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT
805805
#
806806
#############################################################################
807807
%changelog
808+
* Mon Apr 04 2022 Jeff Squyres <[email protected]>
809+
- Updates for v5.0.0:
810+
- Default all 3rd-party packages to be "external".
811+
- Remove no-longer-existing INSTALL file.
812+
- Tighten up files listings for the individual RPMs.
813+
- Convert -docs sub-package to exclusively use mandir and pkgdocdir
814+
(instead of docs.files).
815+
- Remove some stale F77 and VT references.
816+
808817
* Tue Mar 28 2017 Jeff Squyres <[email protected]>
809818
- Reverting a decision from a prior changelog entry: if
810819
install_in_opt==1, then even put the modulefile under /opt.
@@ -959,4 +968,3 @@ test "x$RPM_BUILD_ROOT" != "x" && rm -rf $RPM_BUILD_ROOT
959968

960969
* Wed Mar 23 2005 Mezzanine <[email protected]>
961970
- Specfile auto-generated by Mezzanine
962-

0 commit comments

Comments
 (0)