diff --git a/0001-Correct-the-lhapdf-config-help-message-to-use-includ.patch b/0001-Correct-the-lhapdf-config-help-message-to-use-includ.patch new file mode 100644 index 0000000..911a430 --- /dev/null +++ b/0001-Correct-the-lhapdf-config-help-message-to-use-includ.patch @@ -0,0 +1,50 @@ +From d49e808ed6c027db3a682a731d74ec3ffa7c6076 Mon Sep 17 00:00:00 2001 +From: Andy Buckley +Date: Mon, 9 Mar 2026 19:33:39 +0000 +Subject: [PATCH] Correct the lhapdf-config help message to use --includedir + rather than --incdir, but also add a backward-compatibility handling for + --incdir if given. Thanks to Mark Sutton. + +--- + ChangeLog | 6 ++++++ + bin/lhapdf-config.in | 3 ++- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index cd35d70..7eabc3f 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,9 @@ ++2026-03-09 Andy Buckley ++ ++ * Correct the lhapdf-config help message to use --includedir ++ rather than --incdir, but also add a backward-compatibility ++ handling for --incdir if given. Thanks to Mark Sutton. ++ + 2026-02-19 Andy Buckley + + * Version 6.5.6 release. +diff --git a/bin/lhapdf-config.in b/bin/lhapdf-config.in +index b62a217..d13b6f1 100644 +--- a/bin/lhapdf-config.in ++++ b/bin/lhapdf-config.in +@@ -13,7 +13,7 @@ Options: + --help | -h : show this help message + + --prefix : show the installation prefix (cf. autoconf) +- --incdir : show the path to the LHAPDF C++ header directory ++ --includedir : show the path to the LHAPDF C++ header directory + --libdir : show the path to the LHAPDF library directory + --datadir : show the path to the LHAPDF data directory + --pythonpath|--pydir : show the path(s) to the directory containing LHAPDF's Python package +@@ -48,6 +48,7 @@ for opt in "$@"; do + --version) echo "@PACKAGE_VERSION@" && exit 0 ;; + --prefix) show_prefix=1 ;; + --includedir) show_incdir=1 ;; ++ --incdir) show_incdir=1 ;; #< TODO: for backward compatibility from 6.5.7, remove eventually + --libdir) show_libdir=1 ;; + --datadir) show_datdir=1 ;; + --pythonpath) show_pypath=1 ;; +-- +2.53.0 + diff --git a/0001-Fix-double-I-in-lhapdf-config-cflags-output.patch b/0001-Fix-double-I-in-lhapdf-config-cflags-output.patch new file mode 100644 index 0000000..f8959a8 --- /dev/null +++ b/0001-Fix-double-I-in-lhapdf-config-cflags-output.patch @@ -0,0 +1,76 @@ +From d4dd6202016754052f7f7f0cfedd3913a08afbbf Mon Sep 17 00:00:00 2001 +From: Mattias Ellert +Date: Fri, 3 Apr 2026 07:45:56 +0200 +Subject: [PATCH] Fix double -I in lhapdf-config --cflags output Don't put + -L/usr/lib and -L/usr/lib64 in build flags Fix pkg-config --define-variable + libdir=/path --libs lhapdf + +--- + ChangeLog | 6 ++++++ + bin/lhapdf-config.in | 2 +- + configure | 9 +++++++-- + lhapdf.pc.in | 4 ++-- + 4 files changed, 16 insertions(+), 5 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 7eabc3f..74f4c7e 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,9 @@ ++2026-04-03 Mattias Ellert ++ ++ * Fix double -I in lhapdf-config --cflags output ++ * Don't put -L/usr/lib and -L/usr/lib64 in build flags ++ * Fix pkg-config --define-variable libdir=/path --libs lhapdf ++ + 2026-03-09 Andy Buckley + + * Correct the lhapdf-config help message to use --includedir +diff --git a/bin/lhapdf-config.in b/bin/lhapdf-config.in +index d13b6f1..4b5afcd 100644 +--- a/bin/lhapdf-config.in ++++ b/bin/lhapdf-config.in +@@ -102,7 +102,7 @@ if [ "$show_iflags" -eq 1 ]; then + ilhapdf="@includedir@" + test -n "$ilhapdf" && OUT="$OUT -I${ilhapdf}" + iyamlcpp="@YAML_CPP_CPPFLAGS@" +- test -n "$iyamlcpp" && OUT="$OUT -I${iyamlcpp}" ++ test -n "$iyamlcpp" && OUT="$OUT ${iyamlcpp}" + fi + if [ "$show_Lflags" -eq 1 ]; then + llhapdf="@libdir@" +diff --git a/configure b/configure +index 7fafae6..d530cd7 100644 +--- a/configure ++++ b/configure +@@ -19972,8 +19972,13 @@ + YAML_CPP_CPPFLAGS="" + YAML_CPP_LDFLAGS="" + if test "x$yaml_cpp_prefix" != "xno"; then +- YAML_CPP_CPPFLAGS="-I$yaml_cpp_prefix/include" +- YAML_CPP_LDFLAGS="-L$yaml_cpp_prefix/lib -L$yaml_cpp_prefix/lib64 -lyaml-cpp" ++ if test "x$yaml_cpp_prefix" = "x/usr"; then ++ YAML_CPP_CPPFLAGS="" ++ YAML_CPP_LDFLAGS="-lyaml-cpp" ++ else ++ YAML_CPP_CPPFLAGS="-I$yaml_cpp_prefix/include" ++ YAML_CPP_LDFLAGS="-L$yaml_cpp_prefix/lib -L$yaml_cpp_prefix/lib64 -lyaml-cpp" ++ fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lyaml-cpp" >&5 + printf %s "checking for main in -lyaml-cpp... " >&6; } + if test ${ac_cv_lib_yaml_cpp_main+y} +diff --git a/lhapdf.pc.in b/lhapdf.pc.in +index 964d0ae..1a7d80a 100644 +--- a/lhapdf.pc.in ++++ b/lhapdf.pc.in +@@ -8,5 +8,5 @@ Name: lhapdf + Description: LHAPDF parton density library + URL: https://lhapdf.hepforge.org + Version: @VERSION@ +-Libs: -L@libdir@ @YAML_CPP_LDFLAGS@ -lLHAPDF +-Cflags: -I@includedir@ @YAML_CPP_CPPFLAGS@ ++Libs: -L${libdir} @YAML_CPP_LDFLAGS@ -lLHAPDF ++Cflags: -I${includedir} @YAML_CPP_CPPFLAGS@ +-- +2.53.0 + diff --git a/lhapdf.spec b/lhapdf.spec index 55c500d..69013a3 100644 --- a/lhapdf.spec +++ b/lhapdf.spec @@ -1,17 +1,28 @@ Name: lhapdf -Version: 6.5.5 -Release: 1%{?dist} +Version: 6.5.6 +Release: 6%{?dist} Summary: Les Houches Accord PDF Interface License: GPL-3.0-only URL: https://lhapdf.hepforge.org/ Source0: https://www.hepforge.org/archive/lhapdf/LHAPDF-%{version}.tar.gz +# PDFs used during testing +Source1: https://lhapdfsets.web.cern.ch/current/CT10nlo.tar.gz +Source2: https://lhapdfsets.web.cern.ch/current/MSTW2008nlo68cl.tar.gz +Source3: https://lhapdfsets.web.cern.ch/current/NNPDF31_lo_as_0130.tar.gz +# Missing file in source tarfile +# See: https://gitlab.com/hepcedar/lhapdf/-/merge_requests/120 +Source4: testunc.py +# https://gitlab.com/hepcedar/lhapdf/-/merge_requests/123 +Patch0: 0001-Correct-the-lhapdf-config-help-message-to-use-includ.patch +# https://gitlab.com/hepcedar/lhapdf/-/merge_requests/124 +Patch1: 0001-Fix-double-I-in-lhapdf-config-cflags-output.patch BuildRequires: make BuildRequires: gcc-c++ BuildRequires: yaml-cpp-devel -BuildRequires: python%{python3_pkgversion}-Cython -BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: python3-Cython +BuildRequires: python3-devel BuildRequires: doxygen # Obsolete LHAPDF5 packages not provided by LHAPDF6 @@ -46,16 +57,17 @@ LHAPDF6 is documented in more detail in http://arxiv.org/abs/1412.7420 %package devel Summary: Les Houches Accord PDF Interface - development files Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: yaml-cpp-devel %description devel This package provides development files of LHAPDF, including C++ bindings. -%package -n python%{python3_pkgversion}-%{name} +%package -n python3-%{name} Summary: Les Houches Accord PDF Interface - Python 3 module -%py_provides python%{python3_pkgversion}-%{name} +%py_provides python3-%{name} Requires: %{name}%{?_isa} = %{version}-%{release} -%description -n python%{python3_pkgversion}-%{name} +%description -n python3-%{name} This package provides Python 3 bindings for LHAPDF. This package also provides a script called "lhapdf" which can be used to query the catalog of PDF sets and to install and update them from @@ -71,15 +83,22 @@ This package provides API documentation and examples for LHAPDF. %prep %setup -q -n LHAPDF-%{version} +%patch -P0 -p1 +%patch -P1 -p1 -# Remove cython generated file -rm wrappers/python/lhapdf.cpp +mkdir tests/SETS +tar -z -x -f %{SOURCE1} -C tests/SETS +tar -z -x -f %{SOURCE2} -C tests/SETS +tar -z -x -f %{SOURCE3} -C tests/SETS + +cp -p %{SOURCE4} tests # Remove bundled yaml-cpp rm -rf src/yamlcpp/ # Fix shebangs -sed 's!/usr/bin/env python!%{__python3}!' -i bin/lhapdf examples/*.py +sed 's!/usr/bin/env python3!%{__python3}!' -i bin/lhapdf +sed 's!/usr/bin/env python!%{__python3}!' -i examples/*.py sed 's!/usr/bin/env bash!/bin/bash!' -i bin/lhapdf-config.in %build @@ -89,6 +108,16 @@ sed 's!/usr/bin/env bash!/bin/bash!' -i bin/lhapdf-config.in --enable-librelease \ --docdir=%{_pkgdocdir} \ PYTHON=%{__python3} + +%if %{?rhel}%{!?rhel:0} == 8 +# cython version on RHEL 8 is too old and generates broken code. +# touch the pregenerated bundled source file to prevent regeneration. +# See: https://gitlab.com/hepcedar/lhapdf/-/merge_requests/122 +touch wrappers/python/lhapdf.cpp +%else +rm wrappers/python/lhapdf.cpp +%endif + %make_build # Build doxygen documentation @@ -107,6 +136,12 @@ rm %{buildroot}%{_libdir}/libLHAPDF.la find %{buildroot}%{_pkgdocdir}/examples -type f -a '!' -name '*.*' -delete %check +# Workaround incomplete test environment +# See: https://gitlab.com/hepcedar/lhapdf/-/merge_requests/121 +cp -p pdfsets.index tests/SETS +cp -p lhapdf.conf tests/SETS +export PYTHONPATH=$PWD/wrappers/python/build +export LD_LIBRARY_PATH=$PWD/src/.libs %make_build check %files @@ -121,7 +156,7 @@ find %{buildroot}%{_pkgdocdir}/examples -type f -a '!' -name '*.*' -delete %{_libdir}/libLHAPDF.so %{_libdir}/pkgconfig/%{name}.pc -%files -n python%{python3_pkgversion}-%{name} +%files -n python3-%{name} %{_bindir}/%{name} %{python3_sitearch}/%{name}-%{version}.dist-info %{python3_sitearch}/%{name} @@ -132,6 +167,47 @@ find %{buildroot}%{_pkgdocdir}/examples -type f -a '!' -name '*.*' -delete %license COPYING %changelog +* Wed Jul 22 2026 Python Maint - 6.5.6-6 +- Rebuilt for Python 3.15.0b4 ABI change + +* Thu Jul 16 2026 Fedora Release Engineering - 6.5.6-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + +* Wed Jun 03 2026 Python Maint - 6.5.6-4 +- Rebuilt for Python 3.15 + +* Fri Apr 03 2026 Mattias Ellert - 6.5.6-3 +- More fixes to lhapdf-config and lhapdf.pc + +* Sat Mar 28 2026 Mattias Ellert - 6.5.6-2 +- Correct the lhapdf-config output (backport from upstream git) + +* Thu Mar 05 2026 Mattias Ellert - 6.5.6-1 +- Update to version 6.5.6 +- Add PDFs used by new tests to the source RPM +- Add test file missing from the source tarfile to the source RPM + +* Fri Jan 16 2026 Fedora Release Engineering - 6.5.5-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Fri Dec 05 2025 Orion Poplawski - 6.5.5-2 +- Rebuild for yaml-cpp 0.8 (epel10) + +* Fri Sep 19 2025 Python Maint - 6.5.5-6 +- Rebuilt for Python 3.14.0rc3 bytecode + +* Fri Aug 15 2025 Python Maint - 6.5.5-5 +- Rebuilt for Python 3.14.0rc2 bytecode + +* Thu Jul 24 2025 Fedora Release Engineering - 6.5.5-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Mon Jun 02 2025 Python Maint - 6.5.5-3 +- Rebuilt for Python 3.14 + +* Fri Jan 17 2025 Fedora Release Engineering - 6.5.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Wed Jan 01 2025 Mattias Ellert - 6.5.5-1 - Update to version 6.5.5 - Drop soname patch, use new configure option --enable-librelease instead diff --git a/sources b/sources index 8d49b49..70e3f3b 100644 --- a/sources +++ b/sources @@ -1 +1,4 @@ -SHA512 (LHAPDF-6.5.5.tar.gz) = 80012d5eab1b09a38d8e65bc45f012125508f8d43d1ffcaa76976970f1a3d36305ad29c620715c676cd3c5d6f8bb4c0b55444c952059a742052d9c8bfd5866ac +SHA512 (LHAPDF-6.5.6.tar.gz) = 03cf1c848b127d76ab6f13b852743827c00ae9312721dcd1fd17a9d9d88fa50e5f004fcf2fa1b23d15a0b2c30515d5f2a5e2bee85e67be5c675864bdc364ca78 +SHA512 (CT10nlo.tar.gz) = 64c1ae32380a8e8ae647bdd79a63bdb252540777f802bebf003d20ec3e7532370601619a85f6fd872f7d0e39e1a1f66ea96fcd4b9179e1f23e27d533906af493 +SHA512 (MSTW2008nlo68cl.tar.gz) = 4bf44b96363c91cb85f298d139b356ed4111c842476f02b44efac18710e4ca168691d0cbb5222839b0d219ccb264e387fc8ac93a689f5d0981fed9478f45749b +SHA512 (NNPDF31_lo_as_0130.tar.gz) = 7f2ef921e8ddd938438978383778c5e7538105c78defe34abfe6212a480da9ccdfedbec30174f0aed18576a3c3fc03866bc22b329667b41f2896dfb3814d9d1a diff --git a/testunc.py b/testunc.py new file mode 100755 index 0000000..4d6b1d2 --- /dev/null +++ b/testunc.py @@ -0,0 +1,45 @@ +#! /usr/bin/env python3 + +import lhapdf +print("Version:", lhapdf.version()) +print() + +#pdfset = lhapdf.getPDFSet("CT10nlo") +pdfset = lhapdf.getPDFSet("NNPDF31_lo_as_0130") +print(pdfset) +print("m_t =", pdfset.get_entry("MTop", 123.4)) +print() + +pdfs = pdfset.mkPDFs() +print() + +xfs_g = [pdfs[k].xfxQ(21, 1e-4, 100.) for k in range(pdfset.size)] +print("Gluon PDFs at x = 0.001, Q = 100 GeV:", xfs_g) +print() + +for alt_ci_method in [True,False]: + print(f"Using alt (asymm) CI calculation = {alt_ci_method}") + u = pdfset.uncertainty(xfs_g, 95., alt_ci_method) + print(u) + print(u.central) + print(" + ", u.errplus) + print(" - ", u.errminus) + print(" +-", u.errsymm) + print() + +#import numpy as np +#for cl in np.linspace(0.0, 1.0, 20): +xfmin, xfmax = min(xfs_g), max(xfs_g) +print("Range =", xfmax - xfmin) +for i in range(11): + cl = i/10 + print(f"CL = {cl:0.2f} -> CI = {pdfset.uncertainty(xfs_g, 100*cl, True).errsymm:0.2f}") +print(f" ... last interval should equal half-range = {(xfmax - xfmin)/2:0.2f}") +print() + +e = pdfset.errorInfo +print(e) +print() + +# pdf = lhapdf.mkPDF("CT10/0") +# print(pdf)