From 362edef39a7b74e224c7823d008853424ef5b864623e1c3d1d224fe27001261e Mon Sep 17 00:00:00 2001 From: Nicolas Morey Date: Sat, 7 Sep 2024 05:44:47 +0000 Subject: [PATCH] - Add Cast-function-pointer-types-so-they-can-be-compared-without-warnings.patch to fix compilation issues with GCC >= 14 - Add workaround a missing bash function definition OBS-URL: https://build.opensuse.org/package/show/science:HPC/mpibash?expand=0&rev=15 --- .gitattributes | 23 +++++ .gitignore | 1 + ...hey-can-be-compared-without-warnings.patch | 49 +++++++++++ ...t-with-newer-MPI_Comm_set_errhandler.patch | 21 +++++ mpibash-1.3.tar.gz | 3 + mpibash.changes | 47 ++++++++++ mpibash.spec | 85 +++++++++++++++++++ 7 files changed, 229 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 Cast-function-pointer-types-so-they-can-be-compared-without-warnings.patch create mode 100644 Replace-deprecated-MPI_Errhandler_set-with-newer-MPI_Comm_set_errhandler.patch create mode 100644 mpibash-1.3.tar.gz create mode 100644 mpibash.changes create mode 100644 mpibash.spec diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/Cast-function-pointer-types-so-they-can-be-compared-without-warnings.patch b/Cast-function-pointer-types-so-they-can-be-compared-without-warnings.patch new file mode 100644 index 0000000..e78e1b8 --- /dev/null +++ b/Cast-function-pointer-types-so-they-can-be-compared-without-warnings.patch @@ -0,0 +1,49 @@ +commit 4ae8e1670ea5495275bcf873cb2513302e56702a +Author: Scott Pakin +Date: Wed Feb 19 13:38:08 2020 -0700 + + Cast function pointer types so they can be compared without warnings + +diff --git src/coll.c src/coll.c +index 0ee5964fdd6a..890896a20b72 100644 +--- src/coll.c ++++ src/coll.c +@@ -122,7 +122,7 @@ static char *mpi_bcast_doc[] = { + DEFINE_BUILTIN(mpi_bcast, "mpi_bcast [message] name"); + + /* Define a reduction-type function (allreduce, scan, exscan, etc.). */ +-typedef int (*reduction_func_t)(void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm); ++typedef int (*reduction_func_t)(const void *, void *, int, MPI_Datatype, MPI_Op, MPI_Comm); + + /* Parse an operation name into an MPI_Op. Return 1 on success, 0 on + * failure. */ +@@ -213,25 +213,25 @@ reduction_like (WORD_LIST *list, char *funcname, reduction_func_t func) + /* Parse the target variable, which must not be read-only. */ + YES_ARGS(list); + varname = list->word->word; +- if (mpibash_rank != 0 || func != MPI_Exscan) ++ if (mpibash_rank != 0 || (void *)func != (void *)MPI_Exscan) + REQUIRE_WRITABLE(varname); + list = list->next; + no_args(list); + + /* Perform the reduction operation. Bind the given array variable + * to the result and, for minloc/maxloc, the associated rank. */ +- if (mpibash_rank != 0 || func != MPI_Exscan) { ++ if (mpibash_rank != 0 || (void *)func != (void *)MPI_Exscan) { + bind_array_variable(varname, 0, "", 0); + bind_array_variable(varname, 1, "", 0); + } + if (operation == MPI_MINLOC || operation == MPI_MAXLOC) { + MPI_TRY(func(&number, &result, 1, MPI_LONG_INT, operation, MPI_COMM_WORLD)); +- if (mpibash_rank != 0 || func != MPI_Exscan) ++ if (mpibash_rank != 0 || (void *)func != (void *)MPI_Exscan) + mpibash_bind_array_variable_number(varname, 1, result.rank, 0); + } + else + MPI_TRY(func(&number.value, &result.value, 1, MPI_LONG, operation, MPI_COMM_WORLD)); +- if (mpibash_rank != 0 || func != MPI_Exscan) ++ if (mpibash_rank != 0 || (void *)func != (void *)MPI_Exscan) + mpibash_bind_array_variable_number(varname, 0, result.value, 0); + return EXECUTION_SUCCESS; + } diff --git a/Replace-deprecated-MPI_Errhandler_set-with-newer-MPI_Comm_set_errhandler.patch b/Replace-deprecated-MPI_Errhandler_set-with-newer-MPI_Comm_set_errhandler.patch new file mode 100644 index 0000000..7e992a2 --- /dev/null +++ b/Replace-deprecated-MPI_Errhandler_set-with-newer-MPI_Comm_set_errhandler.patch @@ -0,0 +1,21 @@ +commit 16a19ee4c568047fb03581b23b4fcb273a615474 +Author: Scott Pakin +Date: Wed Feb 19 13:43:40 2020 -0700 + + Replace deprecated MPI_Errhandler_set with newer MPI_Comm_set_errhandler + + Resolves #17. + +diff --git src/init.c src/init.c +index cd070a785c41..46b1127e538d 100644 +--- src/init.c ++++ src/init.c +@@ -77,7 +77,7 @@ mpi_init_builtin (WORD_LIST *list) + + /* Make MPI errors return instead of crash. Also, store our rank + * and number of ranks. */ +- MPI_Errhandler_set (MPI_COMM_WORLD, MPI_ERRORS_RETURN); ++ MPI_Comm_set_errhandler (MPI_COMM_WORLD, MPI_ERRORS_RETURN); + MPI_Comm_rank (MPI_COMM_WORLD, &mpibash_rank); + MPI_Comm_size (MPI_COMM_WORLD, &mpibash_num_ranks); + diff --git a/mpibash-1.3.tar.gz b/mpibash-1.3.tar.gz new file mode 100644 index 0000000..138d746 --- /dev/null +++ b/mpibash-1.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab39dcc0eadce765abaf685e73d38f4351e3229fdb4302aee4b9e6e70d431d99 +size 369803 diff --git a/mpibash.changes b/mpibash.changes new file mode 100644 index 0000000..5049fe1 --- /dev/null +++ b/mpibash.changes @@ -0,0 +1,47 @@ +------------------------------------------------------------------- +Thu Sep 5 13:29:03 UTC 2024 - Nicolas Morey + +- Add Cast-function-pointer-types-so-they-can-be-compared-without-warnings.patch + to fix compilation issues with GCC >= 14 +- Add workaround a missing bash function definition +------------------------------------------------------------------- +Fri Feb 23 07:42:42 UTC 2024 - pgajdos@suse.com + +- Use %autosetup macro. Allows to eliminate the usage of deprecated + %patchN + +------------------------------------------------------------------- +Tue May 4 15:06:22 UTC 2021 - Nicolas Morey-Chaisemartin + +- Add Replace-deprecated-MPI_Errhandler_set-with-newer-MPI_Comm_set_errhandler.patch + to fix compilation with openmpi4 + +------------------------------------------------------------------- +Mon May 27 08:37:37 UTC 2019 - Nicolas Morey-Chaisemartin + +- Always use the default openmpi + +------------------------------------------------------------------- +Wed Nov 22 23:26:48 UTC 2017 - junghans@votca.org + +- Version bump to v1.3 + * drop 8.patch - got merge upstream + * "This release includes a few bug fixes, a few improvements to + the build process, and some extra information added to the + documentation." + +------------------------------------------------------------------- +Tue Nov 14 02:02:24 UTC 2017 - jengelh@inai.de + +- Ensure neutrality of description. Trim it subpackages. + +------------------------------------------------------------------- +Fri Nov 10 16:09:11 UTC 2017 - junghans@votca.org + +- added 8.patch - circle_init_builtin: fix return value + +------------------------------------------------------------------- +Fri Nov 10 15:41:49 UTC 2017 - junghans@votca.org + +- initial add of v1.2 + diff --git a/mpibash.spec b/mpibash.spec new file mode 100644 index 0000000..42b4298 --- /dev/null +++ b/mpibash.spec @@ -0,0 +1,85 @@ +# +# spec file for package mpibash +# +# Copyright (c) 2024 SUSE LLC +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +Name: mpibash +Version: 1.3 +Release: 0 +Summary: Parallel scripting right from the Bourne-Again Shell +License: GPL-3.0-or-later +Group: Productivity/Networking/Other +URL: https://github.com/lanl/MPI-Bash +Source0: https://github.com/lanl/MPI-Bash/releases/download/v%{version}/mpibash-%{version}.tar.gz +Patch0: Replace-deprecated-MPI_Errhandler_set-with-newer-MPI_Comm_set_errhandler.patch +Patch1: Cast-function-pointer-types-so-they-can-be-compared-without-warnings.patch +BuildRequires: bash-devel >= 4.4 +BuildRequires: libcircle-devel +BuildRequires: openmpi-macros-devel +%openmpi_requires +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +MPI-Bash makes it possible to parallelize Bash scripts which run a set of +Linux commands independently over a large number of input files. +Because MPI-Bash includes various MPI functions for data transfer and +synchronization, it is not limited to parallel workloads +but can incorporate phased operations (i.e. all workers must finish +operation X before any worker is allowed to begin operation Y). + +%package examples +Summary: Example Scripts for %{name} +Group: Productivity/Scientific/Chemistry +Requires: %{name} = %{version} + +%description examples +MPI-Bash makes it possible to parallelize Bash scripts which run a set of +Linux commands independently over a large number of input files. + +This package contains example scripts for mpibash. + +%prep +%autosetup -p0 + +%build +%setup_openmpi +# This is to avoid an issue with execute_shell_function which is declared in +# /usr/include/bash/execute_cmd.h but it does not exists for "older" bash +# versions. Once updatig to v1.4 (which will require this header), this flag should +# be dropped +export CFLAGS="-Wno-implicit-function-declaration" +%configure --docdir=%{_docdir}/%{name} --with-plugindir=%{_libdir}/%{name}/ CC=mpicc +%make_build + +%install +%make_install +# Fix shebang +sed -i '1s@/usr/bin/env bash@/bin/bash@' %{buildroot}/%{_bindir}/mpibash +sed -i '1s@env mpibash@mpibash@' %{buildroot}/%{_docdir}/%{name}/examples/* %{buildroot}/%{_bindir}/m* + +%files +%defattr(-,root,root,-) +%{_bindir}/m* +%{_libdir}/%{name}/ +%{_mandir}/man1/m* +%{_docdir}/%{name} +%exclude %{_docdir}/%{name}/examples + +%files examples +%defattr(-,root,root,-) +%{_docdir}/%{name}/examples + +%changelog