%global debug_package %{nil} # LLVM JIT version. RoadRunner 2.9.2's codegen uses typed-pointer IR, so it must # stay on an LLVM that still defaults to typed pointers (<= 14; 15+ forces opaque # pointers and would break ModelDataIRBuilder). Rawhide (f45+) retired llvm13, so # target the next-oldest available compat there: llvm14 (the code's >=13 guards # also cover 14). F44 keeps the proven llvm13. %if 0%{?fedora} >= 45 %global llvmver 14 %else %global llvmver 13 %endif Name: libroadrunner Version: 2.11.0 Release: 2%{?dist} Summary: High-performance SBML simulation library (LLVM-JIT), no-NLEQ build # RoadRunner is Apache-2.0. Bundled header-only deps: parallel-hashmap (Apache-2.0), # thread-pool (MIT). NLEQ (non-free) is removed in this build (see the transform). License: Apache-2.0 AND MIT URL: https://github.com/sys-bio/roadrunner # Canonical upstream tag archive. It unpacks as roadrunner-%%{version}/ (the repo # is sys-bio/roadrunner); %%autosetup names that below rather than the old # hand-repacked libroadrunner-%%{version}/ tarball this used to be fed # out-of-band, so an SCM build can fetch its own source. Source0: %{url}/archive/refs/tags/v%{version}/libroadrunner-%{version}.tar.gz # Fedora-clean transform: drop superbuild deps prefix + NLEQ (non-free) + clapack, # use system libSBML/SUNDIALS/POCO/LLVM-13/rr-libstruct, global-namespace libSBML. Source1: libroadrunner-fedora-transform.sh # Functional check for the Python wrapper, which upstream's ctest suite does not # cover at all. See %%check. Source2: libroadrunner-smoke.py # The test suite does not compile against a libsbml built without the distrib # package -- which is Fedora's. In TestModelFactory(), the closing brace of a # DISTRIB-only `else if` sits OUTSIDE the #endif, so with DISTRIB off the # preprocessor leaves `}` followed by `} else {`: # test/TestModelFactory.cpp:3255:7: error: expected unqualified-id before 'else' # Moving the brace inside the #endif compiles both ways; verified with a # reduced 9-line reproducer under -DD=0 and -DD=1. Patch1: libroadrunner-2.11.0-tests-distrib-braces.patch BuildRequires: gcc-c++ # 2.11.0 asks find_package(ZLIB CONFIG REQUIRED COMPONENTS static) and links # ZLIB::ZLIBSTATIC; Fedora's zlib-ng config reports ZLIB_FOUND false without # /usr/lib64/libz.a, which only the -static subpackage ships. BuildRequires: zlib-ng-compat-static BuildRequires: cmake BuildRequires: ninja-build BuildRequires: swig BuildRequires: python3-devel BuildRequires: python3-numpy # For the python_tests_* ctest targets, which all reported # "No module named pytest" in build 11018885. BuildRequires: python3-pytest # For the BioModels layer of %%check (see there). BuildRequires: sbml-test-corpus BuildRequires: python3-libsbml # LLVM JIT: llvm13 on F44 (proven), llvm14 on rawhide (llvm13 was retired there). # See the %%global llvmver block above for the typed-pointer rationale. BuildRequires: llvm%{llvmver}-devel BuildRequires: libsbml-devel # source/SundialsLogger.cpp: #error unless SUNDIALS >= 7.8.0 (it uses # SUNLogger_SetQueueAndFlushMsgFns). Fedora 44 has 7.6.0, so f44 stays on 2.10.0; # f45 and rawhide have 7.9.0. BuildRequires: sundials-devel >= 7.8.0 BuildRequires: poco-devel BuildRequires: expat-devel BuildRequires: zlib-ng-compat-static BuildRequires: ncurses-devel BuildRequires: f2c BuildRequires: lapack-devel BuildRequires: blas-devel BuildRequires: rr-libstruct-devel BuildRequires: chrpath Provides: bundled(parallel-hashmap) Provides: bundled(thread-pool) %description libRoadRunner is a high-performance SBML simulation library that JIT-compiles models through LLVM. This Fedora build links system libraries (libSBML, SUNDIALS, POCO, LLVM %{llvmver}, rr-libstruct) instead of the upstream superbuild, and omits the non-free NLEQ steady-state solvers (the free Newton and Newton-linesearch solvers remain). Time-course integration uses CVODE. %package -n python3-roadrunner Summary: Python bindings for libRoadRunner Requires: libsbml Requires: python3-numpy # This module is built by CMake, not the pyproject macros, so nothing generates # the python3dist() virtual provides. Without them a consumer's # %%pyproject_buildrequires asks for python3dist(libroadrunner) and fails to # resolve even though the module is installed and new enough -- which is exactly # what blocks packaging tellurium. Note the name: the PyPI DISTRIBUTION is # "libroadrunner" while the importable MODULE is "roadrunner". Both the plain and # the interpreter-versioned forms are needed; %%pyproject_buildrequires emits the # versioned one. Provides: python3dist(libroadrunner) = %{version} Provides: python%{python3_version}dist(libroadrunner) = %{version} %description -n python3-roadrunner Python bindings for libRoadRunner — load and simulate SBML models from Python. Used by CompuCell3D's network solvers for sub-cellular reaction kinetics. %package devel Summary: Development files for libRoadRunner Requires: %{name}%{?_isa} = %{version}-%{release} %description devel Headers and C API for building against libRoadRunner. %prep %autosetup -p1 -n roadrunner-%{version} # Apply the Fedora-clean / no-NLEQ / system-libs / global-libSBML transform. bash %{SOURCE1} . # 2.11.0 asks for COMPONENTS static, a component Fedora's zlib-config.cmake never # defines (its check_required_components() then sets ZLIB_FOUND false). 2.10.0 did # not ask, and the ZLIB::ZLIBSTATIC target it goes on to use is provided anyway # once zlib-ng-compat-static puts libz.a in place. grep -qF 'find_package(ZLIB CONFIG REQUIRED COMPONENTS static)' CMakeLists.txt || { echo "ZLIB find_package not as expected" >&2; exit 1; } sed -i 's/find_package(ZLIB CONFIG REQUIRED COMPONENTS static)/find_package(ZLIB CONFIG REQUIRED)/' CMakeLists.txt # LLVM 14 (rawhide) trimmed transitive includes: the legacy-pass InstCombine.h no # longer pulls in Pass.h, so FunctionPass/AnalysisUsage are undeclared. Inject # Pass.h before it. Idempotent/harmless on llvm13 (F44). sed -i '\#include "llvm/Transforms/InstCombine/InstCombine.h"#i #include ' \ source/llvm/LLVMIncludes.h %if 0%{?fedora} >= 45 # LLVM 14 moved TargetRegistry.h from llvm/Support/ to llvm/MC/. sed -i 's#llvm/Support/TargetRegistry.h#llvm/MC/TargetRegistry.h#' \ source/llvm/Jit.cpp source/llvm/ModelGeneratorContext.cpp source/llvm/ModelResources.cpp %endif %build export LLVM_DIR=%{_libdir}/llvm%{llvmver} %cmake -GNinja \ -DCMAKE_BUILD_TYPE=Release \ -DRR_DEPENDENCIES_INSTALL_PREFIX=/usr \ -DLLVM_INSTALL_PREFIX=%{_libdir}/llvm%{llvmver} \ -DBUILD_PYTHON=ON \ -DBUILD_LLVM=ON \ -DBUILD_RR_CAPI=ON \ -DBUILD_TESTS=ON %cmake_build %install # RoadRunner's build tree lays the artifacts out under /lib; install them # into the Fedora locations directly (its own install rules assume the prefix tree). b=%{__cmake_builddir} install -d %{buildroot}%{_libdir} %{buildroot}%{python3_sitearch} cp -a "$b"/lib/libroadrunner.so* %{buildroot}%{_libdir}/ cp -a "$b"/lib/libroadrunner_c_api.so* %{buildroot}%{_libdir}/ 2>/dev/null || : cp -a "$b"/lib/site-packages/roadrunner %{buildroot}%{python3_sitearch}/ # headers install -d %{buildroot}%{_includedir}/rr cp -a source/*.h %{buildroot}%{_includedir}/rr/ 2>/dev/null || : # strip build-tree RPATHs; the python ext finds libroadrunner.so via %{_libdir} find %{buildroot} -name '*.so' -o -name '*.so.*' | xargs -r chrpath --delete 2>/dev/null || : %check # Upstream's own suite, now that BUILD_TESTS is ON. 39 registered ctest targets # across c_api_core, cxx_api_tests, llvm_tests, sundials-tests, model_editing, # sbml_features, serialization and the SBML Test Suite semantic cases. The suite # data is vendored in the release tarball (test/sbml-test-suite/semantic, 1824 # model directories, 73 MB), so this runs offline. # # Worth having for this package specifically: roadrunner JITs model equations # through LLVM, so "it compiled" says very little about whether it integrates # correctly, and the llvm13/14 pin makes that the most fragile part of the build. # -j1 is load-bearing: this suite is not parallel-safe. ModelEditingTests (and # the same pattern elsewhere) share ONE output directory -- # ModelEditingTests() : modelEditingTestOutputDir = rrTestDir_ / "modelEditingTestOutputDir" # ~ModelEditingTests() : fs::remove_all(modelEditingTestOutputDir) # -- so every test's destructor deletes the directory the other concurrent tests # are still writing into, and they fail with "Failed writing sbml to file". Under # %%ctest's default -j$RPM_BUILD_NCPUS that produced 67 of 120 ModelEditingTests # failing in build 11019374 while neighbours like REMOVE_RATE_RULE_3 passed -- # the signature of interference rather than a defect. %%ctest puts its own -j # first, so this -j1 is appended after it and wins. # # Excluded, each for a reason this build cannot change: # - NLEQ: nleq1/nleq2 are non-free and removed by the transform, so the default # steady-state solver is KINSOL's Newton. Tests that ask for nleq by name, # count four registered solvers, or carry reference steady states that only # NLEQ2 reaches. Reproduced on x86_64 with the installed package: Newton # stalls on Test_2 (residual 0.57, reported only as a warning) and lands on # the trivial fixed point for Set_Kinetic_Law1, Remove_Rules1, # Remove_Parameter1 and Add_Reactions2; presimulation and approximation are # already on by default and do not help. Python twins are skipped in the # transform with unittest.skip so they show as skipped, not absent. # - jacobian_1: the system LAPACK returns the eigenvalues in a different order # from the reference file (same values, swapped), so the ordered comparison # fails. Covered by the eigenvalue checks the SBML Test Suite cases do pass. # - distrib: Fedora's libsbml is built without the distrib package, so the # stochastic SBML Test Suite cases and the SetSeed tests cannot load # ("unknown distrib csymbol"). # - rrplugins: not built here; AutoPluginTest imports it. # - PythonTests: the aggregate runner of the same files ctest already runs one # by one, excluded so nothing is counted twice. # - LOAD_VALID_FILE: loads a saved state committed by upstream, which names # nleq2 as its steady-state solver ("No such solver called nleq2" on # x86_64); on aarch64 it fails earlier still, because the file was written # on an x86_64 builder and its JIT object code cannot relocate ("LLVM # ERROR: Relocation type not implemented yet!"). FromFile, which saves and # reloads its own state, runs on both. RR_CTEST_EXCLUDE='^python_tests_(AutoPluginTest|RRTests|RunStochasticTestSuite)$' RR_CTEST_EXCLUDE+='|^PythonTests$' RR_CTEST_EXCLUDE+='|^CApiRRTests\.(TestTest_2|Testjacobian_1)$' RR_CTEST_EXCLUDE+='|^ModelAnalysisTests\.SetSeed_' RR_CTEST_EXCLUDE+='|^AutomaticMoietyAnalysisTests\.NeededOffOff$' RR_CTEST_EXCLUDE+='|^RoadRunnerAPITestsWith(MC|LL)Jit\.(getSteadyStateValues|getSteadyStateSolver|getExistingSteadyStateSolverNames|getRegisteredSteadyStateSolverNames|setSteadyStateSolver|steadyStateSolverExistsWhen)' RR_CTEST_EXCLUDE+='|^StateSavingTests\.LOAD_VALID_FILE$' %ctest -j1 --timeout 1800 -E "$RR_CTEST_EXCLUDE" # The Python wrapper is outside ctest entirely. Import it, integrate a decay # model against its analytic solution, and report on the listener API. PYTHONPATH=%{buildroot}%{python3_sitearch} \ LD_LIBRARY_PATH=%{buildroot}%{_libdir} \ python3 %{SOURCE2} # Real published models, from the sbml-test-corpus package: twelve CC0 # BioModels. Every one must load and integrate; roadrunner's own SBML export # must round-trip to identical trajectories; libsbml's L2->L3V2 conversion must # simulate identically (the curated corpus is Level 2, so this is the Level 3 # coverage); and four models with known biology must show it -- the Elowitz # repressilator, Goldbeter's mitotic oscillator and Kholodenko's MAPK cascade # oscillate, Teusink's glycolysis reaches a steady state with G6P near 1 mM. # The verdict is taken from the marker line, not the pipeline's exit status. PYTHONPATH=%{buildroot}%{python3_sitearch} \ LD_LIBRARY_PATH=%{buildroot}%{_libdir} \ %{python3} %{_datadir}/sbml-test-corpus/sbml-stack-check.py \ --corpus %{_datadir}/sbml-test-corpus --layer roadrunner | tee sbml-stack.out grep -q '^\[SBML-STACK\] PASS' sbml-stack.out %files %license LICENSE.txt # Upstream sets no SOVERSION, so the libraries are unversioned. %{_libdir}/libroadrunner.so %{_libdir}/libroadrunner_c_api.so %files -n python3-roadrunner %{python3_sitearch}/roadrunner/ %files devel %{_includedir}/rr/ %changelog * Tue Oct 27 2026 Morgan Hough - 2.11.0-2 - Build 11200084 (-1) failed two ways. f44: SUNDIALS 7.6.0 is below the 7.8.0 that SundialsLogger.cpp requires, so f44 stays on 2.10.0 and the BuildRequires now says >= 7.8.0. f45/rawhide (SUNDIALS 7.9.0): the library built, but the new test/sbml_features/unsupported_packages.cpp failed five times with "reference to 'SBMLReader' is ambiguous". Fedora's libSBML is in the global namespace, so under `using namespace rr` a bare SBMLReader matches both ::SBMLReader and rr::SBMLReader. The transform (Source1) now qualifies those calls as rr::SBMLReader::read. Reproduced with -fsyntax-only on f45: the old transform gives the same five errors, the new one compiles. - Restore the two ZLIB fixes that -1 was built with but that were never committed (recovered from the 11200084 SRPM); without them 11216864 stopped at configure. * Fri Oct 23 2026 Morgan Hough - 2.11.0-1 - Update to 2.11.0 (upstream v2.11.0, 2026-10-21). Upstream took the Python C-API patch ("Sent upstream; drop this when they take it"): the listener headers no longer call PyString_*/PyInt_*, so Patch0 is dropped. 2.11.0 also releases for Python 3.15 and uses the latest SWIG. - The tests-distrib-braces patch still applies and is renamed to 2.11.0. - BuildRequires zlib-ng-compat-static: 2.11.0 added COMPONENTS static to its ZLIB find_package; -1 failed at configure on every chroot (ZLIB_FOUND FALSE). - The Fedora-clean transform ran clean on the 2.11.0 tree (NLEQ removal and system libraries). Not yet built; the remote build and %%check decide. - Behaviour changes upstream lists: the absolute-tolerance vector is scaled from the initial values; CVODE warnings are off by default; init(x) may be set on a symbol that has an initial assignment; RK45, event-trigger tolerance and conserved-moiety steady-state fixes. - Drop COMPONENTS static from the ZLIB find_package in %%prep: Fedora's zlib config defines no such component, so the BuildRequires alone did not fix it. * Wed Sep 23 2026 Morgan Hough - 2.10.0-11 - -10 left one failure per chroot (builds 11026435-41): LOAD_VALID_FILE fails on x86_64 too, because upstream's committed saved state names nleq2 as its solver, so it is excluded on every arch, not only aarch64. And with the NLEQ import gone test_python_api.py finally ran: 140 pass, 40 skipped, and on aarch64 alone test_items misses a 1e-6 delta by 1.3e-6 against a five-decimal literal; the transform widens it to 1e-5. * Wed Sep 23 2026 Morgan Hough - 2.10.0-10 - First full run of the upstream suite at -j1 (builds 11023090/11023093, fedora-44/45-aarch64): 34 of 3352 fail, identically on both, and none is the parallelism signature from -9. All 34 are consequences of this build (no NLEQ, Fedora libsbml without distrib, no rrplugins) or of the platform (an x86_64 saved-state file on aarch64). Excluded with a reason each in %%check; the Python twins are skipped in the transform with unittest.skip, after dropping the NLEQ imports that were losing test_python_api.py whole. - Finding worth knowing, reproduced on x86_64 with the installed package: with NLEQ2 gone the default Newton steady-state solver stalls on upstream's Test_2 (residual 0.57, warning only) and converges to the trivial fixed point on four other reference models. Presimulation and approximation are already on by default. Users doing steady-state work should check the returned residual. * Tue Sep 22 2026 Morgan Hough - 2.10.0-9 - %%check gains the BioModels layer from sbml-test-corpus: twelve curated CC0 models must load and integrate, survive roadrunner's own SBML export round-trip and libsbml's L2->L3V2 conversion with identical trajectories, and four with known biology must show it (repressilator, Goldbeter 1991 and Kholodenko 2000 oscillate; Teusink 2000 glycolysis reaches steady state). These are the published models users actually run, as opposed to the synthetic SBML Test Suite cases, and they pass 40/40 against 2.10.0. * Tue Sep 22 2026 Morgan Hough - 2.10.0-8 - Run ctest serially. Build 11019374 reported "96% tests passed, 119 tests failed out of 3352", and triaging the largest family showed the failures are not roadrunner defects and not our transform: they are my own %%check parallelism. ModelEditingTests share a single output directory and the fixture destructor does fs::remove_all() on it, so with -j4 a finishing test deletes the directory its concurrent neighbours are still writing to. The failure text is "Failed writing sbml to file", never a wrong simulation result, and REMOVE_RATE_RULE_3 passed while _1, _2 and _4 failed -- interference, not breakage. 67 of 120 ModelEditingTests failed that way. - The SBML Test Suite semantic cases were unaffected throughout: 1824 run, 0 failed, which is the conformance result that matters for this package. * Mon Sep 21 2026 Morgan Hough - 2.10.0-7 - python3-roadrunner now declares python3dist(libroadrunner) and python3.Ndist(libroadrunner). The module is built by CMake, so the pyproject macros generate no dist provides, and a consumer's %%pyproject_buildrequires asks for python3dist(libroadrunner) and fails to resolve even with the module installed and new enough. That is what blocks packaging tellurium, which needs libroadrunner >= 2.8. The PyPI distribution is "libroadrunner" while the importable module is "roadrunner", so the provide must use the former. - BuildRequires python3-pytest: all 14 python_tests_* ctest targets in build 11018885 failed with "No module named pytest". * Mon Sep 21 2026 Morgan Hough - 2.10.0-6 - Transform: drop the NLEQ-dependent tests. Fedora has no NLEQ library, so the transform already strips those solvers from source/; with BUILD_TESTS=ON the test tree still instantiated them and the link failed (build 11018829, 845 s, "undefined reference to rr::NLEQ1Solver::NLEQ1Solver" and "vtable for rr::NLEQ1Solver"). Removes the two NLEQ*IntegrationTests executables and the single NLEQ test case in PresimulationDecoratorTests, each guarded by a grep so an upstream rename fails the build rather than silently skipping the edit. - Checked the rest of the test tree for other features the transform removes: clapack/CLAPACK have no test references at all, and rr-libstruct resolves from the system package, so NLEQ was the last one of this kind. * Mon Sep 21 2026 Morgan Hough - 2.10.0-5 - Extend the Fedora-clean transform (Source1) to the test tree. Build 11018796 failed with 11 errors at test/test_util.cpp:15, "'libsbml' has not been declared" -- and this one is ours, not upstream's. Fedora's libsbml is built with a GLOBAL namespace, which the transform already handles by rewriting libsbml:: -> ::, dropping using-namespace and unwrapping namespace-libsbml blocks; it just did that for source/ only. With BUILD_TESTS=ON the test tree compiles against the same headers and needs the same treatment. source/ had 507 occurrences rewritten to 0 while test/ kept its own, which is exactly the asymmetry the failure showed. * Mon Sep 21 2026 Morgan Hough - 2.10.0-4 - Fix the test suite against a libsbml without the distrib package (Patch1), which is what 2.10.0-3 tripped over the moment BUILD_TESTS went on: build 11018780 died in %%build at test/TestModelFactory.cpp:3255 "expected unqualified-id before 'else'". - Upstream's bug, not our transform: the pristine and transformed trees are byte-identical at that line. In TestModelFactory() the closing brace of a `#if LIBSBML_HAS_PACKAGE_DISTRIB` `else if` branch is placed after the `#endif`, so the file only compiles when distrib is enabled. Fedora's libsbml does not define LIBSBML_HAS_PACKAGE_DISTRIB, so for us it never can. Three other DISTRIB sites in the same file are correctly formed; only this one straddles. Confirmed with a 9-line reproducer: upstream's form fails under -DD=0 and compiles under -DD=1, the patched form compiles under both. * Mon Sep 21 2026 Morgan Hough - 2.10.0-3 - Build and run upstream's test suite: -DBUILD_TESTS=ON plus a %%check that runs ctest (39 targets, including the SBML Test Suite semantic cases -- 1824 models vendored in the tarball, so offline). This package had no %%check at all, which is thin for the engine under the SBML stack: roadrunner JITs model equations through LLVM, so compiling proves very little about whether it integrates correctly, and the llvm13/14 pin makes exactly that part fragile. - Add libroadrunner-smoke.py (Source2) for the Python wrapper, which upstream's ctest does not cover. It imports the module and integrates dS/dt = -kS, checking S(4) against 10*exp(-2) to 0.1%%. Verified against the packaged 2.10.0-1 on f44: 10.000 -> 1.3534 vs analytic 1.3534. - The smoke script reports rather than asserts one thing. Registering an integrator listener -- the code path Patch0 fixes -- is impossible from Python in this build: `Integrator.setListener()` raises "argument 2 of type 'rr::PyIntegratorListenerPtr const &'" for a PyIntegratorListener, which is the exact sequence upstream documents in examples/events/events.py. That is a separate pre-existing bug, reproduced on 2.10.0-1 before Patch0 existed, so there is currently no way to reach the patched path from Python. * Mon Sep 21 2026 Morgan Hough - 2.10.0-2 - Fix the f45/rawhide build: port the Python wrappers off the Python-2 C-API (Patch0). PyString_*/PyInt_* have not existed since Python 3.0; they resolved only through compatibility #defines that SWIG emitted in the generated wrapper preamble, which SWIG 4.5.0 removed. f44 has swig 4.4.1 and still builds; f45 has 4.5.0 and rawhide 4.5.1, and both failed with 25 errors across PyEventListener.h, PyIntegratorListener.h and the generated wrapper. - The patch also removes a latent crash rather than just restoring the names: SWIG defined PyString_AsString as PyBytes_AsString, and all four call sites pass PyObject_Str() output, which is a str, not bytes. PyBytes_AsString on a str returns NULL and sets TypeError, so the event/integrator listener error paths concatenated a NULL into std::string. Now PyUnicode_AsUTF8. - 27 lines across 4 files: PyEventListener.h, PyIntegratorListener.h, roadrunner.i and the vendored include/numpy.i. include/rr_numpy.i has the same defect but is referenced by nothing and is left alone. - %%autosetup gains -p1. Without it rpmbuild invoked patch with no strip level and every hunk was skipped as "No file to patch"; this spec had carried no patches before, so the omission had never mattered. * Tue Sep 15 2026 Morgan Hough - 2.10.0-1 - Update to 2.10.0 (upstream v2.10.0, 2026-08-05). The Fedora-clean transform (Source1) applies unchanged to the new tree — verified before bumping, since most of its steps are bare `sed`s that silently no-op if an anchor moves: the clapack/nleq find_package lines, the NLEQ solver sources and registrations, the clapack->system lapack/blas mapping, the libSBML imported-target swap and the global-namespace requalify all still take (0 `libsbml::` qualifiers and 0 NLEQ references left afterwards). - The llvm%%{llvmver} pin stays: 2.10.0's codegen still calls getPointerElementType(), so it needs an LLVM that defaults to typed pointers. * Sat Jun 27 2026 Morgan Hough - 2.9.2-2 - Build on rawhide (f45+) against llvm14 (llvm13 compat retired there); F44 stays on llvm13. RoadRunner's >=13 codegen guards cover 14, and 14 still defaults to typed pointers (15+ opaque pointers would break the IR builder). No longer F44-only. * Thu Jun 18 2026 Morgan Hough - 2.9.2-1 - Initial package: libRoadRunner 2.9.2, Fedora-clean no-NLEQ build. - Links system libSBML/SUNDIALS-7/POCO/LLVM-13/rr-libstruct (no superbuild); removes the non-free NLEQ solvers (Newton/Newton-linesearch retained); adapts to Fedora's global-namespace libSBML. Validated: SBML CVODE time-course.