%global fsldir %{_prefix}/lib/fsl %global srcname fsl_sub Name: fsl-sub Version: 2.11.0 Release: 3%{?dist} Summary: FSL job submission wrapper for clusters and single machines License: Apache-2.0 URL: https://git.fmrib.ox.ac.uk/fsl/fsl_sub # Upstream's own sdist. The GitLab archive (%%{url}/-/archive/...) is the # same tree, but git.fmrib.ox.ac.uk has not answered HTTPS since mid-October # 2026; PyPI carries every release of this package. Source0: %{pypi_source %{srcname}} BuildArch: noarch BuildRequires: python3-devel BuildRequires: pyproject-rpm-macros # NO Requires: fsl-base. fsl_sub is a generic job submitter -- its only runtime # dependency is ruamel.yaml, and its built-in local runner parallelises across # cores with no scheduler and no FSL. The dependency was here only because this # package drops symlinks into %%{fsldir}/bin, a directory fsl-base owns; it is # replaced below by owning those directories here too, which rpm allows for # %%dir entries. Morgan 2026-09-28: the point of keeping fsl_sub is batching jobs # on a multicore machine, and requiring the whole of FSL to do that defeated it. # # The Slurm and Grid Engine back ends are separate upstream components. Without # one, fsl_sub runs jobs on the local machine, which is what it does by default # and what most installations want. Suggests: fsl-sub-plugin-slurm %description fsl_sub is the layer FSL's own scripts call to run work: it submits to a cluster when a scheduler plugin is configured, and runs jobs locally, in parallel, when none is. Many FSL pipelines invoke it unconditionally, so without it those scripts fail rather than falling back. Job submission back ends ship as separate packages. This package alone gives the built-in local runner. %prep %autosetup -p1 -n %{srcname}-%{version} # A release tarball carries no .git for setuptools-scm to read a version from. %global _scm_env SETUPTOOLS_SCM_PRETEND_VERSION=%{version} %generate_buildrequires export %{_scm_env} %pyproject_buildrequires %build export %{_scm_env} %pyproject_wheel %install export %{_scm_env} %pyproject_install %pyproject_save_files -l fsl_sub # FSL's scripts call $FSLDIR/bin/fsl_sub by path, not through PATH. mkdir -p %{buildroot}%{fsldir}/bin for _s in fsl_sub fsl_sub_config fsl_sub_report fsl_sub_plugin fsl_sub_update; do ln -sr %{buildroot}%{_bindir}/${_s} %{buildroot}%{fsldir}/bin/${_s} done %check # The bundled tests import pytest, which a packaging build does not need. %pyproject_check_import -e 'fsl_sub.tests*' # Running a trivial job through the local runner is the only check that proves # the thing it exists for works; --help would pass on a broken config parser. export PATH=%{buildroot}%{_bindir}:$PATH export PYTHONPATH=%{buildroot}%{python3_sitelib} %{buildroot}%{_bindir}/fsl_sub_config shell > /dev/null %{buildroot}%{_bindir}/fsl_sub --help > /dev/null %files -f %{pyproject_files} %doc README.md CHANGES.md CONFIGURATION.md # Owned here as well as by fsl-base, so this package installs on a machine with # no FSL. Two packages owning the same %%dir is legal and intended. %dir %{fsldir} %dir %{fsldir}/bin %{_bindir}/fsl_sub %{_bindir}/fsl_sub_config %{_bindir}/fsl_sub_report %{_bindir}/fsl_sub_plugin %{_bindir}/fsl_sub_update %{fsldir}/bin/fsl_sub %{fsldir}/bin/fsl_sub_config %{fsldir}/bin/fsl_sub_report %{fsldir}/bin/fsl_sub_plugin %{fsldir}/bin/fsl_sub_update %changelog * Thu Oct 22 2026 Morgan Hough - 2.11.0-3 - Source0 from PyPI (fsl_sub-2.11.0.tar.gz, upstream's sdist of the same release) instead of the git.fmrib.ox.ac.uk archive, which has been unreachable over HTTPS since about 2026-10-15 and failed every Copr SRPM build of this package. Same tree, plus the egg-info setuptools writes. * Mon Sep 28 2026 Morgan Hough - 2.11.0-2 - Installable without FSL. Morgan's reason for keeping this package is batching jobs across the cores of one machine, and `Requires: fsl-base` meant you could not do that without pulling the whole FSL stack -- including the FSL-licensed parts -- for a wrapper whose only real dependency is ruamel.yaml. - The dependency was never functional. It was here because %%install drops five symlinks into %%{fsldir}/bin for FSL's own scripts, and fsl-base owns that directory. Fixed by owning %%{fsldir} and %%{fsldir}/bin here as well; two packages owning the same %%dir is legal, and the symlinks stay exactly where FSL expects them when FSL is present. - Licence re-checked first-hand on 2026-09-28 while sorting the stack: upstream ships a LICENSE carrying the Apache-2.0 notice, "Copyright 2018-2026 University of Oxford". This is genuinely not FSL-licensed, and with this release it no longer depends on anything that is. * Sun Sep 27 2026 Morgan Hough - 2.11.0-1 - Initial package: fsl_sub at the version the FSL 6.0.7.23 manifest pins, Apache-2.0. FSL pipelines call it unconditionally, so its absence made those scripts fail rather than fall back to running locally. - Its only dependency, ruamel.yaml, is in Fedora. - fsl_sub_plugin and fsl_sub_update install plugins and updates with pip into an FSL tree. They are shipped because they are part of the tool's interface, but scheduler back ends should come from packages -- fsl-sub-plugin-slurm and fsl-sub-plugin-sge are separate manifest components.