diff --git a/.gitignore b/.gitignore index 6dd6f65..c6389ad 100644 --- a/.gitignore +++ b/.gitignore @@ -9,12 +9,10 @@ /temp.* # ignore result drectory created by fedpkg mockbuild /results_cppad/ -# directories used like git cache +# directory used like git cache /new/ /new.*/ # --------------------------------------------------------------------------- # # Most recent upstrem source -/CppAD-20240000.3.tar.gz -/CppAD-20250000.0.tar.gz -/CppAD-20260000.0.tar.gz +/CppAD-20230000.0.tar.gz diff --git a/cppad.spec b/cppad.spec index b3b1612..f3f34d5 100644 --- a/cppad.spec +++ b/cppad.spec @@ -2,54 +2,43 @@ # ---------------------------------------------------------------------------- # Preamble # ---------------------------------------------------------------------------- -# fedpkg lint: W: no-documentation -# The %%doc directive below installs COPYING and uw_copy_040507.html -# as part of the main package, so this warning should not be generated; see -# https://fedoraproject.org/wiki/Common_Rpmlint_issues#no-documentation -# 'This would be rare as most packages should have some license text, -# a changelog or other information that is better placed in the main package -# instead of a -doc subpackage.' -# -# year -# The year corresponding to this version -%define year 2026 -# -# soversion -# fedora uses its own soversion number for cppad_lib where -# 1.0 corresponds to year 2020 -%define soversion %[ %year - 2019 ] +# fedpkg lint: W: files-duplicate: +# the files user_guide.html index.html in directory /usr/share/doc/cppad +# are the same. This is because a redirect from index.hml to user_guide.html +# will not reload when user_guide.html changes. # +# fedora uses its own soversion number for cppad_lib +# 4.0 corresponds to version 20230000 +%define soversion 4.0 + # This is really an out of soruce build because the source is in the -# CppAD-%%{version} sub-directory of the source. The fedora macros are -# confused and need this defined true. +# CppAD-%%{version} sub-directory. The fedora macros are confused and need +# this defined true. %define __cmake_in_source_build 1 # ---------------------------------------------------------------------------- # Fedora Release starts with 1; see # https://docs.fedoraproject.org/en-US/packaging-guidelines/Versioning/ Name: cppad -Version: %{year}0000.0 +Version: 20230000.0 Release: 1%{?dist} Summary: C++ Algorithmic Differentiation (AD), %{name}-devel and %{name}-doc # -License: EPL-2.0 OR GPL-2.0-or-later +License: EPL-2.0 or GPLv2+ URL: https://github.com/coin-or/CppAD Source: %{url}/archive/%{version}/CppAD-%{version}.tar.gz # BuildRequires: gcc BuildRequires: gcc-c++ -BuildRequires: cmake >= 3.10 +BuildRequires: cmake >= 3.0 BuildRequires: make -BuildRequires: python-xrst >= 2025.0 -BuildRequires: python-sphinx_rtd_theme -BuildRequires: python-tomli -BuildRequires: python-sphinx-copybutton -BuildRequires: python-pyspellchecker -BuildRequires: python-furo - +BuildRequires: python-xrst +# python-xrst should auotmatically require python-toml +BuildRequires: python-toml %description -C++ Algorithmic Differentiation (AD) include and library files. +C++ Algorithmic Differentiation (AD) library file libcppad_lib.so; +see %{name}-devel and %{name}-doc. # --------------------------------------------------------------------------- %package devel @@ -68,36 +57,93 @@ Given a C++ algorithm that computes function values, %{name} generates an algorithm that computes its derivative values. A brief introduction to Algorithmic Differentiation (AD) can be found at http://en.wikipedia.org/wiki/Automatic_differentiation -The documentation for the %{year} version - https://cppad.readthedocs.io/stable-%{year} -The documentation for the most recent version of %{name} can be found at - https://cppad.readthedocs.io/latest +See the package %{name}-doc for documentation of this version of %{name}. + +# ---------------------------------------------------------------------------- +%package doc +Summary: Documentation for %{name}-devel +BuildArch: noarch + +%description doc +The %{name}-doc package installs the HTML documentation for this version +of %{name}-devel in + %{_docdir}/%{name} +The documentation, for the most recent version of %{name}, can be found at + https://cppad.readthedocs.io + # ----------------------------------------------------------------------------- # prep # ----------------------------------------------------------------------------- %prep # # Create an empty directory named cppad-%%{version}, -# changed into that directory and unpack Source. +# changed into that directory and unpack Source0 and Source1. %setup -q -c # # xrst.toml -# This is not a git repository so suppress the warning that could not double -# check that all the files with xrst commands were included. +echo '' >> CppAD-%{version}/xrst.toml +echo '[spell_package]' >> CppAD-%{version}/xrst.toml +echo 'data = "pyenchant"' >> CppAD-%{version}/xrst.toml echo '' >> CppAD-%{version}/xrst.toml echo '[input_files]' >> CppAD-%{version}/xrst.toml echo 'data = [ ]' >> CppAD-%{version}/xrst.toml # -# COPYING, uw_copy_040507.html -cp CppAD-%{version}/COPYING COPYING -cp CppAD-%{version}/uw_copy_040507.html uw_copy_040507.html +# CppAD-%%{version}/build/html +mkdir CppAD-%{version}/build +# There is a bug in the version of python3-pygments used by fedora 37. +# The code below checks if that is the only warning printed. +# This is not necessary with fedora 38 or later. +xrst --version +if xrst \ + --config_file CppAD-%{version}/xrst.toml \ + --local_toc \ + --target html \ + --html_theme sphinx_rtd_theme \ + --index_page_name user_guide \ + --group_list default app \ + --suppress_spell_warnings 2> xrst.err +then + echo 'xrst: OK' +else + sed -i xrst.err \ + -e '/WARNING: Could not lex literal_block as "cpp"/d' \ + -e '/Warning: see system command message above./d' \ + -e '/xrst: See warnings above/d' \ + -e '/^ *$/d' + if [ -s xrst.err ] + then + cat xrst.err + exit 1 + fi +fi # -# cppad_lib/CMakeLists.txt +# remove hidden files not needed for viewing documentation +rm CppAD-%{version}/build/html/.buildinfo +rm -r CppAD-%{version}/build/html/.doctrees + +# +# COPYING, uw_copy_040507.html +mv CppAD-%{version}/COPYING COPYING +mv CppAD-%{version}/uw_copy_040507.html uw_copy_040507.html +# ---------------------------------------------------------------------------- # cppad_lib: replace soversion number and ensure build type is release sed -i.bak CppAD-%{version}/cppad_lib/CMakeLists.txt \ -e "s|print_variable(soversion)|SET(soversion %{soversion} )\n&|" \ -e "s|\${cppad_debug_which}|debug_none|" # +# configure.hpp.in: Make sure CPPAD_DEBUG_AND_RELEASE is defined +# so we can use cppad_lib with both debug and release builds. +sed -i.bak CppAD-%{version}/include/cppad/configure.hpp.in \ + -e 's|# define CPPAD_CONFIGURE_HPP|&\n# define CPPAD_DEBUG_AND_RELEASE|' +# +# set_compile_flags.cmake: remove conditional def of CPPAD_DEBUG_AND_RELEASE +sed -i.bak CppAD-%{version}/cmake/set_compile_flags.cmake \ + -e 's|-DCPPAD_DEBUG_AND_RELEASE||' +# +# test_more/debug_rel/CMakeLists.txt: remove def of CPPAD_DEBUG_AND_RELEASE +sed -i.bak CppAD-%{version}/test_more/debug_rel/CMakeLists.txt \ + -e 's|-DCPPAD_DEBUG_AND_RELEASE||' +# ---------------------------------------------------------------------------- # Print machine epsilon before any other testing cat << EOF > temp.cpp # include @@ -117,14 +163,29 @@ g++ -std=c++11 temp.cpp -o temp ./temp > temp.out cat temp.out # ---------------------------------------------------------------------------- +# Comment out test of to_string long double on ppc64le arch. Understanding why +# it is failing will have to wait until there is a fedora 36 ppc64le test machine. +if [ "%{_arch}" == 'ppc64le' ] +then + sed -i.bak CppAD-%{version}/example/utility/to_string.cpp \ + -e 's|ok *&= *floating();|// &|' +fi +# ----------------------------------------------------------------------------- # build # ----------------------------------------------------------------------------- %build # -# 1. The debug_all is overridden for cppad_lib by the edit of +# 1. Cannot use %%{_includedir}, %%{_libdir}, %%{_datadir}, %%{_docdir} +# because they are absolute paths. Relative values would be more flexible +# because they can be combined with %%{_prefix} to get absolute values. +# +# 2. The last argument to the cmake command is the directory created using +# the souce code tarball. +# +# 3. The debug_all is overridden for cppad_lib by the edit of # cppad_lib/CMakeLists.txt above # -# 2. The gnu c++ compiler seems to be generating an incorrect warning about +# 4. The gnu c++ compiler seems to be generating an incorrect warning about # array bounds in thread_alloc.hpp. Use -Wno-array-bounds to suppress it. # # cppad_cxx_flags @@ -147,7 +208,7 @@ cppad_cxx_flags=\ %cmake \ -S CppAD-%{version} \ -B . \ - \ + \ -D CMAKE_VERBOSE_MAKEFILE=0 \ -G 'Unix Makefiles' \ \ @@ -158,14 +219,10 @@ cppad_cxx_flags=\ -D cmake_install_libdirs=%{_lib} \ \ -D cmake_install_datadir=share \ - -D cmake_install_docdir='NOTFOUND' \ - \ - -D include_doc=true \ - -D cmake_defined_ok=false \ - -D cppad_static_lib=false \ - -D cppad_debug_and_release=true \ + -D cmake_install_docdir=share/doc \ \ -D include_adolc=false \ + -D include_eigen=false \ -D include_ipopt=false \ -D include_cppadcg=false \ \ @@ -178,7 +235,7 @@ cppad_cxx_flags=\ -D cppad_testvector=cppad \ -D cppad_max_num_threads=64 \ -D cppad_tape_id_type=size_t \ - -D cppad_tape_addr_type='unsigned int' \ + -D cppad_tape_addr_type=size_t \ -D cppad_debug_which='debug_all' # # see https://docs.fedoraproject.org/en-US/packaging-guidelines/ @@ -196,114 +253,34 @@ cppad_cxx_flags=\ %files %{_libdir}/libcppad_lib.so.%{soversion} -# These documentation files come from the source code tarball -%doc COPYING uw_copy_040507.html - - %files devel %{_includedir}/%{name} %{_datadir}/pkgconfig/%{name}.pc %{_libdir}/pkgconfig/%{name}.pc %{_libdir}/libcppad_lib.so +# These documentation files come from the source code tarball +%doc COPYING uw_copy_040507.html + +%files doc +# These documentation files are build by the xrst command above +%{_docdir}/%{name} + # ----------------------------------------------------------------------------- # Check # ----------------------------------------------------------------------------- -# +# use the installed include files to compile and run the tests %check -# -# Test installed version of CppAD -g++ CppAD-%{version}/example/get_started/get_started.cpp \ - -I %{buildroot}/%{_includedir} \ - -Wl,-rpath,%{buildroot}/%{_libdir} \ - %{buildroot}/%{_libdir}/libcppad_lib.so \ - -o get_started -./get_started -# -# Test building documentation -make %{?_smp_mflags} doc_user -# -# Run the all the standard CppAD tests. make %{?_smp_mflags} check # ---------------------------------------------------------------------------- -# +# %%clean # Use %%clean with no arguments to surpress the cleanup of BUILDROOT # This enables one to check that the necessary files are installed. -%%clean # ---------------------------------------------------------------------------- %changelog -* Mon Jan 05 2026 Brad Bell - 20260000.0-1 -- New upstream source cppad-20260000.0. - -* Wed Jul 23 2025 Fedora Release Engineering - 20250000.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Wed Feb 05 2025 - 20250000.0-4 -- python-toml is deprecated, so current xrst-python uses python-tomli instead - -* Sun Jan 19 2025 Brad Bell - 20250000.0-3 -- 1. Add the year macro and use it to define soversion and Version. -- 2. Remove the cppad-doc subpackage because documantion for this stable - version is not available at https://cppad.readthedocs.io/stable-2025/ . -- 3. Change include_doc=true, cmake_install_docdir=NOTFOUND, and add - make doc_user to test building, but not installing, user documentation. -- 4. The ppc64le arch has been fixed and now the CppAD to_string test pass - for long double (so we do not need to skip that test). -- 5. Use get_started.cpp to test the installed version of CppAD. - -* Sat Jan 18 2025 Brad Bell - 20250000.0-2 -- This fixes two bugs and will not be necessary -- once the upstream source advances to 20250000.1. - -* Thu Jan 16 2025 Fedora Release Engineering - 20250000.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Tue Jan 14 2025 Brad Bell - 20250000.0-1 -- New upstream source cppad-20250000.0. - -* Wed Jul 17 2024 Fedora Release Engineering - 20240000.3-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Fri Mar 01 2024 Brad Bell - 20240000.3-2 -- This fixes a bug in fun2val.hpp. This change will not be necessary -- once the upstream source advances to 20240000.4. - -* Sat Feb 17 2024 Brad Bell - 20240000.3-1 -- This fixes a long standing bug; see the heading 02-14 on -- https://cppad.readthedocs.io/latest/whats_new_24.html - -* Wed Jan 24 2024 Fedora Release Engineering - 20240000.2-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jan 19 2024 Fedora Release Engineering - 20240000.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Wed Jan 17 2024 Brad Bell - 20240000.2-1 -- Upstream moved i386 special cases into cmake script. -- Checking that other upstream changes do not affect Fedora install. - -* Tue Jan 09 2024 Brad Bell - 20240000.1-1 -- thread_alloc.hpp: i386 i686: fix allignment for doubles -- op_hash_table: i386 i686: avoid second specialization of is_pod for same type. -- xrst.toml: add comment about why we are adding to this file. -- xrst command: speed up parallel build by settting number_jobs. - - -* Mon Jan 08 2024 Brad Bell - 20240000.1-1 -- Upstream fix of bug found by build on buildvm-x86-16.iad2.fedoraproject.org - -* Sat Jan 06 2024 Brad Bell - 20240000.0-1 -- New upstream source cppad-20240000.0. -- require python-xrst >= 2024.0 -- xrst.toml: no need to change to pyenchant because pyspellchecker avaialble -- upstream source changed CPPAD_DEBUG_AND_RELEASE to a cmake argument - -* Mon Dec 25 2023 Brad Bell - 20230000.0-3 -- migrated to SPDX license -- move %%doc directive before subpackages (becasue it is in main package) - -* Wed Jul 19 2023 Fedora Release Engineering - 20230000.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild +* Sun Feb 19 2023 Brad Bell - 20230000.0-1 +- Check the xrst stderr output to make sure it only contains warning +- for bug in the version of python3-pygments on fedora 37. * Sun Jan 29 2023 Brad Bell - 20230000.0-1 - Move libcppad_lib.so to main package (fixes a fedpkg lint error). diff --git a/get_tarball.sh b/get_tarball.sh deleted file mode 100755 index daf2942..0000000 --- a/get_tarball.sh +++ /dev/null @@ -1,16 +0,0 @@ -# /usr/bin/env bash -set -e -u -# -version=$(sed -n cppad.spec -e '/^Version:/p' | sed -e 's|^Version: *||') -url=$(sed -n cppad.spec -e '/^URL:/p' | sed -e 's|^URL: *||') -local_tarball="CppAD-${version}.tar.gz" -remote_tarball="$url/archive/$version/$local_tarball" -if [ -e "$local_tarball" ] -then - echo "get_tarball.sh: $local_tarball already exists" - exit 1 -fi -wget $tarball -# -echo 'get_tarball.sh: OK' -exit 0 diff --git a/sources b/sources index 8f40433..d6257f0 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (CppAD-20260000.0.tar.gz) = abe9dd9a971f8d154990d54c1f798c8cab6bf90d016bb288efbcb23a14331897762610295658eec04fb50e5c13b05f4bb6b50a4647d6f0468eb94833dc3400d2 +SHA512 (CppAD-20230000.0.tar.gz) = 9ed852894ab8eb1ca16a4599144293b08ca4cd9ca00e4a0585c8fea387c4a02143e065bc2c5d91dbe33ce5773aefb5ba74a6211b18827d22af70cb553d1051de