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-config.1 b/lhapdf-config.1 deleted file mode 100644 index e0f63d2..0000000 --- a/lhapdf-config.1 +++ /dev/null @@ -1,40 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.39.4. -.TH LHAPDF-CONFIG "1" "May 2011" "lhapdf-config" "User Commands" -.SH NAME -lhapdf-config \- script to get version number and compiler flags of the installed LHAPDF library -.SH SYNOPSIS -.B lhapdf-config -[[\fI--help|-h\fR] \fI| \fR[\fI--prefix\fR] \fI| \fR[\fI--pdfsets-path\fR]] -.SH DESCRIPTION -\fIlhapdf-config\fP is a tool that is used to configure to determine -the compiler and linker flags that should be used to compile -and link programs that use \fILHAPDF\fP. -.SH OPTIONS -.TP -\fB\-\-help\fR | \fB\-h\fR -: show this help message -.TP -\fB\-\-prefix\fR -: show the installation prefix (cf. autoconf) -.TP -\fB\-\-incdir\fR -: show the path to the LHAPDF header directory (for C++ interface) -.TP -\fB\-\-libdir\fR -: show the path to the LHAPDF library directory -.TP -\fB\-\-datadir\fR -: show the path to the LHAPDF installed data directory -.HP -\fB\-\-pdfsets\-path\fR : show the path to the directory containing the PDF set data files -.TP -\fB\-\-cppflags\fR -: get compiler flags for use with the C preprocessor stage of C++ compilation -.TP -\fB\-\-ldflags\fR -: get compiler flags for use with the linker stage of any compilation -.TP -\fB\-\-version\fR -: returns LHAPDF release version number -.SH AUTHOR -This manual page was written by Lifeng Sun for the Debian system (but may be used by others). diff --git a/lhapdf-fix-lhapdf-config.patch b/lhapdf-fix-lhapdf-config.patch deleted file mode 100644 index 09b5ee6..0000000 --- a/lhapdf-fix-lhapdf-config.patch +++ /dev/null @@ -1,13 +0,0 @@ -Fix the package name in lhapdf-config. - ---- a/bin/lhapdf-config.in -+++ b/bin/lhapdf-config.in -@@ -22,7 +22,7 @@ - echo " --cppflags : get compiler flags for use with the C preprocessor stage of C++ compilation" - echo " --ldflags : get compiler flags for use with the linker stage of any compilation" - echo -- echo " --version : returns Rivet release version number" -+ echo " --version : returns LHAPDF release version number" - fi - - OUT="" diff --git a/lhapdf-fix-test-environment.patch b/lhapdf-fix-test-environment.patch deleted file mode 100644 index 8287201..0000000 --- a/lhapdf-fix-test-environment.patch +++ /dev/null @@ -1,44 +0,0 @@ -Fix test environment. - ---- a/octave/Makefile.am -+++ b/octave/Makefile.am -@@ -5,5 +5,5 @@ - lhapdf.oct: wrapoctave.cc - $(MKOCTFILE) -I$(top_srcdir)/include -v -g -o lhapdf.oct wrapoctave.cc -L$(top_builddir)/lib -L$(top_builddir)/lib/.libs -lLHAPDF - --TESTS_ENVIRONMENT = LHAPATH=$(top_srcdir)/PDFsets $(OCTAVE) -+TESTS_ENVIRONMENT = LHAPATH=$(top_srcdir)/PDFsets LD_LIBRARY_PATH="$(top_builddir)/lib/.libs$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}" $(OCTAVE) - TESTS = $(srcdir)/lhapdf-octave-example1.m ---- a/octave/Makefile.in -+++ b/octave/Makefile.in -@@ -195,7 +195,7 @@ - top_srcdir = @top_srcdir@ - EXTRA_DIST = lhapdf-octave-example1.m wrapoctave.cc - pkgdata_DATA = lhapdf.oct --TESTS_ENVIRONMENT = LHAPATH=$(top_srcdir)/PDFsets $(OCTAVE) -+TESTS_ENVIRONMENT = LHAPATH=$(top_srcdir)/PDFsets LD_LIBRARY_PATH="$(top_builddir)/lib/.libs$${LD_LIBRARY_PATH:+:$$LD_LIBRARY_PATH}" $(OCTAVE) - TESTS = $(srcdir)/lhapdf-octave-example1.m - all: all-am - ---- a/examples/Makefile.am -+++ b/examples/Makefile.am -@@ -12,7 +12,7 @@ - lhapdf_example9_SOURCES = Example9.f - lhapdf_example10_SOURCES = Example10.f - --#TESTS_ENVIRONMENT = LHAPATH=$(top_srcdir)/PDFsets -+TESTS_ENVIRONMENT = LHAPATH=$(top_srcdir)/PDFsets - TESTS = lhapdf-example1 - # lhapdf-example2 lhapdf-example3 - -diff -ur lhapdf-5.8.8.orig/examples/Makefile.in lhapdf-5.8.8/examples/Makefile.in ---- a/examples/Makefile.in -+++ b/examples/Makefile.in -@@ -37,6 +37,7 @@ - lhapdf-example8$(EXEEXT) lhapdf-example9$(EXEEXT) \ - lhapdf-example10$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) - TESTS = lhapdf-example1$(EXEEXT) $(am__EXEEXT_3) $(am__EXEEXT_4) -+TESTS_ENVIRONMENT = LHAPATH=$(top_srcdir)/PDFsets - @ENABLE_LHAGLUE_TRUE@am__append_1 = lhapdf-example4 lhapdf-example5 lhapdf-example6 - @ENABLE_LHAGLUE_TRUE@am__append_2 = lhapdf-example4 - @ENABLE_CCWRAP_TRUE@am__append_3 = lhapdf-cctest1 lhapdf-cctest2 lhapdf-cctest3 lhapdf-cctest4 lhapdf-cctest5 diff --git a/lhapdf-fix-typo.patch b/lhapdf-fix-typo.patch deleted file mode 100644 index 71eb447..0000000 --- a/lhapdf-fix-typo.patch +++ /dev/null @@ -1,13 +0,0 @@ -Fix typo: AVAIABLE->AVAILABLE. - ---- a/src/wrapevolve.F -+++ b/src/wrapevolve.F -@@ -315,7 +315,7 @@ - if(index(setpath,'NNPDF').gt.0) then - if(nset.gt.1) then - if((index(setpath,'1000.').gt.0.and.nnpdf.gt.0).or.(index(setpath,'100.').gt.0.and.nnpdf1000.gt.0)) then -- print *,'LHAPDF ERROR: MULTISET-INITIALIZATION with NNPDF 1000 sets IS NOT AVAIABLE (AT THE MOMENT)!' -+ print *,'LHAPDF ERROR: MULTISET-INITIALIZATION with NNPDF 1000 sets IS NOT AVAILABLE (AT THE MOMENT)!' - STOP - endif - endif diff --git a/lhapdf-getdata.1 b/lhapdf-getdata.1 deleted file mode 100644 index aaec653..0000000 --- a/lhapdf-getdata.1 +++ /dev/null @@ -1,64 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.39.4. -.TH LHAPDF-GETDATA "1" "May 2011" "lhapdf-getdata" "User Commands" -.SH NAME -lhapdf-getdata \- Get PDF sets from the LHAPDF repository -.SH SYNOPSIS -.B lhapdf-getdata -[\fI--main\fR] [\fI--all\fR] [\fI--repo=URL\fR] [\fI--dest=DEST\fR] [\fI--dryrun\fR] - [ ...] -.SH DESCRIPTION -.IP -.PP -Grab PDF grid and param files from the LHAPDF repository and install -them into the local LHAPDF data directory. -.SH OPTIONS -.TP -\fB\-h\fR, \fB\-\-help\fR -show this help message and exit -.TP -\fB\-\-repo\fR=\fIURL\fR -Base URL of online sets repository -(http://www.hepforge.org/archive/lhapdf/pdfsets/current) -.TP -\fB\-\-dest\fR=\fIDEST\fR -PDF sets directory to install to (/usr/share/lhapdf/PDFsets) -.TP -\fB\-\-all\fR -Get ALL sets (this will be hundreds of megabytes... be -careful!) -.TP -\fB\-\-list\fR -Just list available files -.TP -\fB\-\-force\fR -Overwrite existing files -.TP -\fB\-\-dryrun\fR -Don't actually do any downloading -.TP -\fB\-Q\fR, \fB\-\-quiet\fR -Suppress normal messages -.TP -\fB\-V\fR, \fB\-\-verbose\fR -Add extra debug messages -.SH EXAMPLES -.TP -Show all available sets: -lhapdf\-getdata \fB\-\-list\fR -.TP -Get all NNPDF PDFs with pattern matching: -lhapdf\-getdata NNPDF -.TP -Get CTEQ6L1, CTEQ66, MRST\-S LO* and LO** PDFs with pattern matching: -lhapdf\-getdata CTEQ6ll CTEQ66 lomod MCal -.TP -Get MSTW2008 68% confidence PDF by full name: -lhapdf\-getdata MSTW2008lo68cl.LHgrid -.TP -See how much downloading would be involved in getting all PDF sets: -lhapdf\-getdata \fB\-\-all\fR \fB\-\-dryrun\fR -.TP -I'm hardcore, give me the whole collection: -lhapdf\-getdata \fB\-\-all\fR -.SH AUTHOR -This manual page was written by Lifeng Sun for the Debian system (but may be used by others). diff --git a/lhapdf-lhacontrol.patch b/lhapdf-lhacontrol.patch deleted file mode 100644 index cc4d0f2..0000000 --- a/lhapdf-lhacontrol.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -ur lhapdf-5.9.1.orig/examples/Example6.f lhapdf-5.9.1/examples/Example6.f ---- lhapdf-5.9.1.orig/examples/Example6.f 2008-10-21 13:09:33.000000000 +0200 -+++ lhapdf-5.9.1/examples/Example6.f 2015-03-07 06:15:27.094311950 +0100 -@@ -10,7 +10,8 @@ - data inset/20200,20201,231/ - character*20 lhaparm(20) - double precision lhavalue(20) -- common/lhacontrol/lhaparm,lhavalue -+ character*20 commoninitflag -+ common/lhacontrol/lhaparm,lhavalue,commoninitflag - common/W50513/xmin,xmax,q2min,q2max - !open(7,file='/home/whalley/lhapdf/lhanames') - parm(1)='DEFAULT' diff --git a/lhapdf-path-max.patch b/lhapdf-path-max.patch deleted file mode 100644 index b209dc9..0000000 --- a/lhapdf-path-max.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/src/binreloc.c -+++ b/src/binreloc.c -@@ -24,6 +24,10 @@ - #include - #include "binreloc.h" - -+#ifndef PATH_MAX -+#define PATH_MAX 4096 -+#endif -+ - #ifdef __cplusplus - extern "C" { - #endif /* __cplusplus */ diff --git a/lhapdf-query.1 b/lhapdf-query.1 deleted file mode 100644 index 43a09c5..0000000 --- a/lhapdf-query.1 +++ /dev/null @@ -1,25 +0,0 @@ -.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.39.4. -.TH LHAPDF-QUERY "1" "May 2011" "lhapdf-query" "User Commands" -.SH NAME -lhapdf-query \- Query PDF values from LHAPDF -.SH SYNOPSIS -.B lhapdf-query -[cmd] [setname|num] [memnum] x Q [flavourID] -.SH DESCRIPTION -.PP -Retrieve PDF values from LHAPDF, given a set name, member number -and values for x and Q. This will return a list of xf(x,Q2) values -for each parton; specifying a parton name on the command line will -return the single appropriate xf(x,Q2) value for that flavour. -.SH OPTIONS -.TP -\fB\-h\fR, \fB\-\-help\fR -Show this help message and exit -.TP -\fB\-Q\fR, \fB\-\-quiet\fR -Suppress normal messages -.TP -\fB\-V\fR, \fB\-\-verbose\fR -Add extra debug messages -.SH AUTHOR -This manual page was written by Lifeng Sun for the Debian system (but may be used by others). diff --git a/lhapdf.spec b/lhapdf.spec index 3bc9c2e..69013a3 100644 --- a/lhapdf.spec +++ b/lhapdf.spec @@ -1,238 +1,351 @@ -%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")} - Name: lhapdf -Version: 5.9.1 -Release: 14%{?dist} +Version: 6.5.6 +Release: 6%{?dist} Summary: Les Houches Accord PDF Interface -Group: System Environment/Libraries -License: GPLv2+ -URL: http://lhapdf.hepforge.org/ -Source0: http://www.hepforge.org/archive/lhapdf/%{name}-%{version}.tar.gz -# Minimal set of PDFs (needed to run make check) -Source1: http://www.hepforge.org/archive/lhapdf/pdfsets/%{version}/cteq5l.LHgrid -Source2: http://www.hepforge.org/archive/lhapdf/pdfsets/%{version}/cteq6ll.LHpdf -Source3: http://www.hepforge.org/archive/lhapdf/pdfsets/%{version}/cteq61.LHgrid -Source4: http://www.hepforge.org/archive/lhapdf/pdfsets/%{version}/CT10.LHgrid -Source5: http://www.hepforge.org/archive/lhapdf/pdfsets/%{version}/GRV98nlo.LHgrid -Source6: http://www.hepforge.org/archive/lhapdf/pdfsets/%{version}/MRST2001nlo.LHgrid -# Man pages (from the Debian package) -Source7: %{name}-config.1 -Source8: %{name}-getdata.1 -Source9: %{name}-query.1 -# Patches (from the Debian package) -Patch0: %{name}-fix-lhapdf-config.patch -Patch1: %{name}-fix-test-environment.patch -Patch2: %{name}-fix-typo.patch -Patch3: %{name}-path-max.patch -Patch4: %{name}-lhacontrol.patch +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 -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -BuildRequires: octave-devel -BuildRequires: ncurses-devel -BuildRequires: python-devel -BuildRequires: gcc-gfortran -BuildRequires: swig +BuildRequires: make +BuildRequires: gcc-c++ +BuildRequires: yaml-cpp-devel +BuildRequires: python3-Cython +BuildRequires: python3-devel BuildRequires: doxygen -BuildRequires: tex(latex) -BuildRequires: ghostscript + +# Obsolete LHAPDF5 packages not provided by LHAPDF6 +Obsoletes: octave-lhapdf < 6 +Obsoletes: lhapdf-pdfsets-minimal < 6 %description -LHAPDF provides a unified and easy to use interface to modern PDF -sets. It is designed to work not only with individual PDF sets but -also with the more recent multiple "error" sets. It can be viewed as -the successor to PDFLIB, incorporating many of the older sets found in -the latter, including pion and photon PDFs. In LHAPDF the computer -code and input parameters/grids are separated thus allowing more easy -updating and no limit to the expansion possibilities. +LHAPDF is a general purpose C++ interpolator, used for evaluating PDFs +from discretized data files. Previous versions of LHAPDF were written +in Fortran 77/90 and are documented at http://lhapdf.hepforge.org/lhapdf5/. + +LHAPDF6 vastly reduces the memory overhead of the Fortran LHAPDF (from +gigabytes to megabytes!), entirely removes restrictions on numbers of +concurrent PDFs, allows access to single PDF members without needing +to load whole sets, and separates a new standardized PDF data format +from the code library so that new PDF sets may be created and released +easier and faster. The C++ LHAPDF6 also permits arbitrary parton +contents via the standard PDG ID code scheme, is computationally more +efficient (particularly if only one or two flavors are required at +each phase space point, as in PDF reweighting), and uses a flexible +metadata system which fixes many fundamental metadata and concurrency +bugs in LHAPDF5. + +Compatibility routines are provided as standard for existing C++ and +Fortran codes using the LHAPDF5 and PDFLIB legacy interfaces, so you +can keep using your existing codes. But the new interface is much more +powerful and pleasant to work with, so we think you'll want to switch +once you've used it! + +LHAPDF6 is documented in more detail in http://arxiv.org/abs/1412.7420 %package devel Summary: Les Houches Accord PDF Interface - development files -Group: Development/Libraries Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: yaml-cpp-devel %description devel This package provides development files of LHAPDF, including C++ bindings. -%global octpkg %{name} -%{!?octave_api: %global octave_api %(octave-config -p API_VERSION || echo 0)} -%{!?octpkgdir: %global octpkgdir %{_datadir}/octave/packages/%{octpkg}-%{version}} -%{!?octpkglibdir: %global octpkglibdir %{_libexecdir}/octave/packages/%{octpkg}-%{version}} -%{!?octave_cmd: %global octave_cmd() octave -H -q --no-site-file --eval "%*";} - -%package -n octave-%{name} -Summary: Les Houches Accord PDF Interface - Octave module -Group: Applications/Engineering -Requires: %{name}%{?_isa} = %{version}-%{release} -Requires: octave(api) = %{octave_api} -Requires(post): octave -Requires(postun): octave - -%description -n octave-%{name} -This package provides Octave bindings for LHAPDF. - -%package -n python-%{name} -Summary: Les Houches Accord PDF Interface - Python module -Group: Applications/Engineering +%package -n python3-%{name} +Summary: Les Houches Accord PDF Interface - Python 3 module +%py_provides python3-%{name} Requires: %{name}%{?_isa} = %{version}-%{release} -%description -n python-%{name} -This package provides Python bindings for LHAPDF. - -%package pdfsets-minimal -Summary: Les Houches Accord PDF Interface - PDF sets -Group: Applications/Engineering -%if %{?fedora}%{!?fedora:0} >= 10 || %{?rhel}%{!?rhel:0} >= 6 -BuildArch: noarch -%endif -Requires: %{name} = %{version}-%{release} - -%description pdfsets-minimal -This package provides a minimal PDF sets required by the test suites. -Note: the python-lhapdf package provides the lhapdf-getdata script to -download other PDF sets. +%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 +the command line. It accepts commands "list", "update", "install" and +"upgrade". Please run "lhapdf help" for full usage instructions. %package doc Summary: Les Houches Accord PDF Interface - documentation -Group: Documentation -%if %{?fedora}%{!?fedora:0} >= 10 || %{?rhel}%{!?rhel:0} >= 6 BuildArch: noarch -%endif %description doc -This package provides documentation of C++ bindings for LHAPDF. +This package provides API documentation and examples for LHAPDF. %prep -%setup -q -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -mkdir PDFsets -install -m 644 -p %SOURCE1 PDFsets -install -m 644 -p %SOURCE2 PDFsets -install -m 644 -p %SOURCE3 PDFsets -install -m 644 -p %SOURCE4 PDFsets -install -m 644 -p %SOURCE5 PDFsets -install -m 644 -p %SOURCE6 PDFsets +%setup -q -n LHAPDF-%{version} +%patch -P0 -p1 +%patch -P1 -p1 -sed 's!/usr/bin/env python!/usr/bin/python!' -i bin/lhapdf-* examples/*.py +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 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 -%if %{?fedora}%{!?fedora:0} >= 7 || %{?rhel}%{!?rhel:0} >= 6 -# Remove bundled swig generated sources -rm pyext/lhapdf_wrap.cc -rm pyext/lhapdf.py +%build +%configure \ + --disable-static \ + --with-yaml-cpp \ + --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 -%build -%configure --disable-static --enable-octave +%make_build -# Reduce overlinking -sed 's!CC \(.*-shared\) !CC \\\${wl}--as-needed \1 !' -i libtool - -make %{?_smp_mflags} +# Build doxygen documentation +%make_build doxy %install -rm -rf %{buildroot} -make install DESTDIR=%{buildroot} +%make_install -mkdir -p %{buildroot}%{_mandir}/man1 -install -m 644 -p %SOURCE7 %{buildroot}%{_mandir}/man1 -install -m 644 -p %SOURCE8 %{buildroot}%{_mandir}/man1 -install -m 644 -p %SOURCE9 %{buildroot}%{_mandir}/man1 - -rm %{buildroot}%{_libdir}/libLHAPDF.la -rm %{buildroot}%{_datadir}/%{name}/doc/html - -APIDIR=$(octave-config -p CANONICAL_HOST_TYPE)-$(octave-config -p API_VERSION) -mkdir -p %{buildroot}%{octpkglibdir}/${APIDIR} -mv %{buildroot}%{_datadir}/%{name}/%{name}.oct \ - %{buildroot}%{octpkglibdir}/${APIDIR}/%{name}.oct -chmod 755 %{buildroot}%{octpkglibdir}/${APIDIR}/%{name}.oct -mkdir -p %{buildroot}%{octpkgdir}/packinfo -install -m 644 -p COPYING %{buildroot}%{octpkgdir}/packinfo/COPYING -cat << EOF > %{buildroot}%{octpkgdir}/packinfo/DESCRIPTION +mkdir %{buildroot}%{python3_sitearch}/%{name}-%{version}.dist-info +cat << EOF > %{buildroot}%{python3_sitearch}/%{name}-%{version}.dist-info/METADATA Name: %{name} Version: %{version} -Date: `date -I` -Author: W Giele , Mike R Whalley -Maintainer: W Giele , Mike R Whalley -Title: Les Houches Accord PDF Interface -Description: LHAPDF provides a unified and easy to use interface to - modern PDF sets. It is designed to work not only with individual PDF - sets but also with the more recent multiple "error" sets. It can be - viewed as the successor to PDFLIB, incorporating many of the older sets - found in the latter, including pion and photon PDFs. In LHAPDF the - computer code and input parameters/grids are separated thus allowing - more easy updating and no limit to the expansion possibilities. EOF -sed '2a pkg load lhapdf' octave/lhapdf-octave-example1.m \ - > lhapdf-octave-example1.m - -mkdir -p %{buildroot}%{_datadir}/%{name}/PDFsets -install -m 644 -p PDFsets/* %{buildroot}%{_datadir}/%{name}/PDFsets +rm %{buildroot}%{_libdir}/libLHAPDF.la +find %{buildroot}%{_pkgdocdir}/examples -type f -a '!' -name '*.*' -delete %check -%ifnarch s390 %{arm} -GNUTERM=dumb make check -%endif - -%clean -rm -rf %{buildroot} - -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig - -%post -n octave-%{name} -%octave_cmd pkg rebuild - -%postun -n octave-%{name} -%octave_cmd pkg rebuild +# 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 -%{_libdir}/libLHAPDF.so.* -%doc AUTHORS ChangeLog COPYING README TODO +%{_libdir}/libLHAPDF-%{version}.so +%{_datadir}/LHAPDF +%doc AUTHORS ChangeLog +%license COPYING %files devel -%{_bindir}/lhapdf-config -%{_mandir}/man1/lhapdf-config.1* +%{_bindir}/%{name}-config %{_includedir}/LHAPDF %{_libdir}/libLHAPDF.so -%doc examples/CC*.cc examples/Example*.f +%{_libdir}/pkgconfig/%{name}.pc -%files -n octave-%{name} -%{octpkglibdir} -%{octpkgdir} -%doc lhapdf-octave-example1.m - -%files -n python-%{name} -%{_bindir}/lhapdf-getdata -%{_bindir}/lhapdf-query -%{_mandir}/man1/lhapdf-getdata.1* -%{_mandir}/man1/lhapdf-query.1* -%{python_sitearch}/* -%doc examples/pdf-*.py - -%files pdfsets-minimal -%dir %{_datadir}/%{name} -%{_datadir}/%{name}/PDFsets -%{_datadir}/%{name}/PDFsets.index +%files -n python3-%{name} +%{_bindir}/%{name} +%{python3_sitearch}/%{name}-%{version}.dist-info +%{python3_sitearch}/%{name} %files doc -%doc ccwrap/doxy/html COPYING +%doc %{_pkgdocdir}/doxygen +%doc %{_pkgdocdir}/examples +%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 +- Unbundle yaml-cpp, using new configure option --with-yaml-cpp +- EPEL 7 EOL specfile cleanup + +* Thu Jul 18 2024 Fedora Release Engineering - 6.5.4-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jun 07 2024 Python Maint - 6.5.4-7 +- Rebuilt for Python 3.13 + +* Mon Jun 03 2024 Mattias Ellert - 6.5.4-6 +- Eliminate use of obsolete patchN syntax + +* Thu Jan 25 2024 Fedora Release Engineering - 6.5.4-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 6.5.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Jul 20 2023 Fedora Release Engineering - 6.5.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jun 13 2023 Python Maint - 6.5.4-2 +- Rebuilt for Python 3.12 + +* Mon Mar 13 2023 Mattias Ellert - 6.5.4-1 +- Update to version 6.5.4 + +* Thu Jan 19 2023 Fedora Release Engineering - 6.4.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Jul 21 2022 Fedora Release Engineering - 6.4.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jun 13 2022 Python Maint - 6.4.0-3 +- Rebuilt for Python 3.11 + +* Thu Jan 20 2022 Fedora Release Engineering - 6.4.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Sun Dec 19 2021 Mattias Ellert - 6.4.0-1 +- Update to version 6.4.0 + +* Thu Jul 22 2021 Fedora Release Engineering - 6.3.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 6.3.0-3 +- Rebuilt for Python 3.10 + +* Tue Jan 26 2021 Fedora Release Engineering - 6.3.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Sun Aug 23 2020 Mattias Ellert - 6.3.0-1 +- Update to version 6.3.0 +- Drop patch lhapdf-cython-configure.patch (previously backported) + +* Tue Jul 28 2020 Fedora Release Engineering - 6.2.1-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue May 26 2020 Miro Hrončok - 6.2.1-10 +- Rebuilt for Python 3.9 + +* Wed Jan 29 2020 Fedora Release Engineering - 6.2.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Mon Aug 19 2019 Miro Hrončok - 6.2.1-8 +- Rebuilt for Python 3.8 + +* Thu Jul 25 2019 Fedora Release Engineering - 6.2.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Mar 07 2019 Troy Dawson - 6.2.1-6 +- Rebuilt to change main python from 3.4 to 3.6 + +* Fri Feb 01 2019 Fedora Release Engineering - 6.2.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Sat Nov 10 2018 Mattias Ellert - 6.2.1-5 +- Drop Python 2 bindings for Fedora 29+ +- Make Cython checking script usable with Python3 (backport) +- Add Python 3.6 package for EPEL 7 + +* Tue Jul 31 2018 Florian Weimer - 6.2.1-4 +- Rebuild with fixed binutils + +* Sun Jul 29 2018 Mattias Ellert - 6.2.1-3 +- Move lhapdf script to python3 package for Fedora 29+ + +* Fri Jul 13 2018 Fedora Release Engineering - 6.2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed Jul 04 2018 Mattias Ellert - 6.2.1-1 +- Update to version 6.2.1 +- Change license tag from GPLv2+ to GPLv3+ +- Add Python 3 bindings +- Drop packages not provided by LHAPDF6: octave-lhapdf, lhapdf-pdfsets-minimal + +* Wed Feb 07 2018 Mattias Ellert - 5.9.1-23 +- Compile with -std=legacy when using gfortran >= 8 + +* Thu Aug 10 2017 Mattias Ellert - 5.9.1-22 +- Rename python package +- EPEL 5 End-Of-Life specfile clean-up + - Remove Group and BuildRoot tags + - Don't clear the buildroot in the install section + - Remove the clean section + - Remove octave packaging macro definitions + +* Thu Aug 03 2017 Fedora Release Engineering - 5.9.1-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 5.9.1-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon May 15 2017 Fedora Release Engineering - 5.9.1-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_27_Mass_Rebuild + +* Wed Feb 08 2017 Kalev Lember - 5.9.1-18 +- Rebuilt for libgfortran soname bump + +* Wed Dec 07 2016 Orion Poplawski - 5.9.1-17 +- Rebuild for octave 4.2 + +* Tue Jul 19 2016 Fedora Release Engineering - 5.9.1-16 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Wed Feb 17 2016 Mattias Ellert - 5.9.1-15 +- Disable octave support for EPEL 6 ppc64 - octave no longer available + * Mon Feb 08 2016 Mattias Ellert - 5.9.1-14 - Disable tests on arm * Thu Feb 04 2016 Fedora Release Engineering - 5.9.1-13 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild -* Mon Jul 6 2015 Orion Poplawski - 5.9.1-12 +* Mon Jul 06 2015 Orion Poplawski - 5.9.1-12 - Rebuild for octave 4.0 * Wed Jun 17 2015 Fedora Release Engineering - 5.9.1-11 diff --git a/sources b/sources index e589fa6..70e3f3b 100644 --- a/sources +++ b/sources @@ -1,7 +1,4 @@ -5260c1979355243f6584c16a5f19bfd1 lhapdf-5.9.1.tar.gz -b592db3245a875f1a2ab5b0be0e06b5b cteq5l.LHgrid -330dc600f0ee7f9b5fa8051eef732930 cteq6ll.LHpdf -f85b82894b43df936fa395465ba155c4 cteq61.LHgrid -49276a39307a609d446722302915b09a CT10.LHgrid -4b93c4101fa8f162ae744da3b3fce031 GRV98nlo.LHgrid -a5121e3ab1912a4a72e85889ba5e9234 MRST2001nlo.LHgrid +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)