Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .distro/.fmf/version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
6 changes: 6 additions & 0 deletions .distro/plans/full.fmf
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
summary: Test the bundled ctests
discover+:
how: fmf
path: test-suite
execute:
how: tmt
9 changes: 9 additions & 0 deletions .distro/plans/main.fmf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
discover:
how: fmf

adjust+:
# Cannot use initiator: fedora-ci reliably yet
when: initiator is not defined or initiator != packit
discover+:
dist-git-source: true
dist-git-extract: wannier90-*/
Empty file added .distro/wannier90.rpmlintrc
Empty file.
159 changes: 159 additions & 0 deletions .distro/wannier90.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
Name: wannier90
Summary: Maximally-Localised Generalised Wannier Functions Code
Version: 0.0.0
Release: %autorelease
License: GPL-2.0-only
URL: https://www.wannier.org/

Source: https://github.com/wannier-developers/wannier90/archive/refs/tags/v%{version}.tar.gz

BuildRequires: ninja-build
BuildRequires: cmake
BuildRequires: gcc-fortran
BuildRequires: flexiblas-devel
# Required for testing
BuildRequires: gcc-c++
BuildRequires: python3

%global _description %{expand:
Maximally-Localised Generalised Wannier Functions Code.}

%description
%{_description}

%package devel
Summary: Development files for wannier90
Requires: wannier90%{?_isa} = %{version}-%{release}

%description devel
This package contains the development files for the wannier90 library.

%package openmpi
Summary: Maximally-Localised Generalised Wannier Functions Code - OpenMPI version
BuildRequires: openmpi-devel

%description openmpi
%{_description}

This package contains the OpenMPI parallel version.

%package openmpi-devel
Summary: Development files for wannier90 - OpenMPI version
Requires: wannier90-openmpi%{?_isa} = %{version}-%{release}

%description openmpi-devel
This package contains the development files for the wannier90 (OpenMPI) library.

%package mpich
Summary: Maximally-Localised Generalised Wannier Functions Code - MPICH version
BuildRequires: mpich-devel

%description mpich
%{_description}

This package contains the MPICH parallel version.

%package mpich-devel
Summary: Development files for wannier90 - MPICH version
Requires: wannier90-mpich%{?_isa} = %{version}-%{release}

%description mpich-devel
This package contains the development files for the wannier90 (MPICH) library.


%prep
%autosetup -n wannier90-%{version}

# $MPI_SUFFIX will be evaluated in the loops below, set by mpi modules
%global _vpath_builddir %{_vendor}-%{_target_os}-build${MPI_SUFFIX:-_serial}
# We are running the module load/unload manually until there is a macro-like way to expand this
. /etc/profile.d/modules.sh


%build
cmake_common_args=(
"-G Ninja"
"-DWANNIER90_SHARED_LIBS=ON"
"-DWANNIER90_TEST=ON"
)
for mpi in '' mpich openmpi ; do
if [ -n "$mpi" ]; then
module load mpi/${mpi}-%{_arch}
cmake_mpi_args=(
"-DCMAKE_INSTALL_PREFIX=${MPI_HOME}"
"-DWANNIER90_MPI=ON"
"-DCMAKE_INSTALL_MODULEDIR=${MPI_FORTRAN_MOD_DIR}"
"-DCMAKE_INSTALL_LIBDIR=lib"
)
else
cmake_mpi_args=(
"-DWANNIER90_MPI=OFF"
"-DCMAKE_INSTALL_MODULEDIR=%{_fmoddir}"
)
fi

%cmake \
${cmake_common_args[@]} \
${cmake_mpi_args[@]}
%cmake_build

[ -n "$mpi" ] && module unload mpi/${mpi}-%{_arch}
done


%install
for mpi in '' mpich openmpi ; do
[ -n "$mpi" ] && module load mpi/${mpi}-%{_arch}
%cmake_install
[ -n "$mpi" ] && module unload mpi/${mpi}-%{_arch}
done


%check
for mpi in '' mpich %{?with_openmpi:openmpi} ; do
[ -n "$mpi" ] && module load mpi/${mpi}-%{_arch}
%ctest
[ -n "$mpi" ] && module unload mpi/${mpi}-%{_arch}
done


%files
%doc README.rst
%license LICENSE
%{_libdir}/libwannier90.so.*
%{_bindir}/wannier90.x
%{_bindir}/postw90.x

%files devel
%{_includedir}/wannier90.hh
%{_libdir}/libwannier90.so
%{_fmoddir}/Wannier90/
%{_libdir}/cmake/Wannier90
%{_libdir}/pkgconfig/wannier90.pc

%files openmpi
%{_libdir}/openmpi/bin/wannier90.x
%{_libdir}/openmpi/bin/postw90.x
%{_libdir}/openmpi/lib/libwannier90.so.*

%files openmpi-devel
%{_libdir}/openmpi/include/wannier90.hh
%{_libdir}/openmpi/lib/libwannier90.so
%{_fmoddir}/openmpi/Wannier90/
%{_libdir}/openmpi/lib/cmake/Wannier90
%{_libdir}/openmpi/lib/pkgconfig/wannier90.pc

%files mpich
%{_libdir}/mpich/bin/wannier90.x
%{_libdir}/mpich/bin/postw90.x
%{_libdir}/mpich/lib/libwannier90.so.*

%files mpich-devel
%{_libdir}/mpich/include/wannier90.hh
%{_libdir}/mpich/lib/libwannier90.so
%{_fmoddir}/mpich/Wannier90/
%{_libdir}/mpich/lib/cmake/Wannier90
%{_libdir}/mpich/lib/pkgconfig/wannier90.pc

%changelog
%autochangelog
66 changes: 66 additions & 0 deletions .packit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
specfile_path: .distro/wannier90.spec
files_to_sync:
- src: .distro/
dest: ./
delete: true
filters:
- "protect .git*"
- "protect sources"
- "protect changelog"
- "protect gating.yaml"
# Temporary workaround until
# https://github.com/packit/packit/pull/2573
- "- wannier90.spec"
- .packit.yaml

upstream_package_name: wannier90
downstream_package_name: wannier90
upstream_tag_template: v{version}

targets:
- fedora-all-x86_64
- fedora-all-aarch64

_:
# Job templates
- &build-in-packit
job: copr_build
- &build-in-lecris
<<: *build-in-packit
owner: lecris
- &tests-downstream
job: tests
fmf_path: .distro
identifier: downstream

jobs:
# Upstream jobs
- <<: *build-in-lecris
trigger: release
project: release
- <<: *tests-downstream
trigger: release
- <<: *build-in-lecris
trigger: commit
branch: main
project: nightly
- <<: *tests-downstream
trigger: commit
branch: main
- <<: *build-in-packit
trigger: pull_request
- <<: *tests-downstream
trigger: pull_request
# Downstream jobs
- job: propose_downstream
trigger: release
dist_git_branches:
- fedora-rawhide
- job: koji_build
trigger: commit
dist_git_branches:
- fedora-all
- job: bodhi_update
trigger: commit
dist_git_branches:
- fedora-branched
1 change: 1 addition & 0 deletions test-suite/.fmf/version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
26 changes: 26 additions & 0 deletions test-suite/ctest.fmf
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
tag: [ cmake ]
require:
- cmake
- rsync
- gcc
- gcc-c++
- gcc-fortran
- pkgconf
- git
# For test-suite
- bzip2
# For testing FetchContent
- flexiblas-devel
framework: beakerlib
path: /
test: ./ctest.sh

/serial:
environment:
MPI_VARIANT: serial
/OpenMPI:
environment:
MPI_VARIANT: openmpi
/MPICH:
environment:
MPI_VARIANT: mpich
26 changes: 26 additions & 0 deletions test-suite/ctest.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/bin/bash
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# shellcheck disable=all
source /usr/share/beakerlib/beakerlib.sh || exit 1

rlJournalStart
rlPhaseStartSetup
rlRun "tmp=\$(mktemp -d)" 0 "Create tmp directory"
rlRun "rsync -rL ./ $tmp" 0 "Copy test-suite project"
rlRun "pushd $tmp"
rlRun "set -o pipefail"
[[ -z "${MPI_VARIANT}" ]] && rlDie "MPI_VARIANT was not provided"
rlPhaseEnd

rlPhaseStartTest
[[ "${MPI_VARIANT}" != "serial" ]] && rlRun "module load mpi/${MPI_VARIANT}" 0 "Load MPI"
rlRun "cmake -B ./build" 0 "CMake configure"
rlRun "cmake --build ./build" 0 "CMake build"
rlRun "ctest --test-dir ./build --output-on-failure" 0 "Run CTest"
rlPhaseEnd

rlPhaseStartCleanup
rlRun "popd"
rlRun "rm -r $tmp" 0 "Remove tmp directory"
rlPhaseEnd
rlJournalEnd
Loading