diff --git a/.gitignore b/.gitignore index a8ffb4e..6dd6f65 100644 --- a/.gitignore +++ b/.gitignore @@ -5,16 +5,16 @@ # ignore log files created by fedpkg local /*.log # temporary files -/junk -/junk.* +/temp +/temp.* # ignore result drectory created by fedpkg mockbuild /results_cppad/ -# directory used like git cache +# directories used like git cache /new/ /new.*/ # --------------------------------------------------------------------------- -# source code tarball that creates CppAD-20210000.3 -/20210000.3.tar.gz # -# documentation tarball that creates CppAD-20210000.doc -/20210000.doc.tar.gz +# Most recent upstrem source +/CppAD-20240000.3.tar.gz +/CppAD-20250000.0.tar.gz +/CppAD-20260000.0.tar.gz diff --git a/cppad.spec b/cppad.spec index fd2bee1..b3b1612 100644 --- a/cppad.spec +++ b/cppad.spec @@ -2,34 +2,54 @@ # ---------------------------------------------------------------------------- # Preamble # ---------------------------------------------------------------------------- -# yyyy is year, mm is month, dd is day, corresponding to this version. -# The %%{version} macro includes a bug fix number at end that starts at zero. -%define yyyymmdd 20210000 +# 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.' # -# fedora uses its own soversion number for cppad_lib -%define soversion 2.0 +# 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 ] +# +# 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. +%define __cmake_in_source_build 1 +# ---------------------------------------------------------------------------- # Fedora Release starts with 1; see -# https://fedoraproject.org/wiki/Packaging:Versioning -Name: cppad -Version: %{yyyymmdd}.3 -Release: 2%{?dist} +# https://docs.fedoraproject.org/en-US/packaging-guidelines/Versioning/ +Name: cppad +Version: %{year}0000.0 +Release: 1%{?dist} Summary: C++ Algorithmic Differentiation (AD), %{name}-devel and %{name}-doc - -License: EPL-2.0 or GPLv2+ -URL: http://coin-or.github.io/CppAD -Source1: https://github.com/coin-or/CppAD/archive/%{version}.tar.gz -Source2: https://github.com/coin-or/CppAD/archive/%{yyyymmdd}.doc.tar.gz -BuildRequires: gcc -BuildRequires: gcc-c++ -BuildRequires: cmake >= 2.8 +# +License: EPL-2.0 OR GPL-2.0-or-later +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: make +BuildRequires: python-xrst >= 2025.0 +BuildRequires: python-sphinx_rtd_theme +BuildRequires: python-tomli +BuildRequires: python-sphinx-copybutton +BuildRequires: python-pyspellchecker +BuildRequires: python-furo -# Starting with f33, need to define this macro to build in source directory -%define __cmake_in_source_build 1 %description -C++ Algorithmic Differentiation (AD), see %{name}-devel, %{name}-doc. +C++ Algorithmic Differentiation (AD) include and library files. # --------------------------------------------------------------------------- %package devel @@ -48,91 +68,86 @@ 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 -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 - http://coin-or.github.io/CppAD - -# ----------------------------------------------------------------------------- -# The user can compile with or without debugging using this library, -# because the prep seciton ensures CPPAD_DEBUG_AND_RELEASE is defined. -# The cppad_lib library has gotten larger, so we include a debug version. -%debug_package - +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 # ----------------------------------------------------------------------------- # prep # ----------------------------------------------------------------------------- %prep # -# This source code tarball creates CppAD-%%{version} -rm -rf CppAD-%{version} -tar -xzf %{_topdir}/SOURCES/%{version}.tar.gz +# Create an empty directory named cppad-%%{version}, +# changed into that directory and unpack Source. +%setup -q -c # -# This documentation tarball creates CppAD-%%{yyymmdd}.doc -rm -rf CppAD-%{yyyymmdd}.doc -tar -xzf %{_topdir}/SOURCES/%{yyyymmdd}.doc.tar.gz +# 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 '[input_files]' >> CppAD-%{version}/xrst.toml +echo 'data = [ ]' >> CppAD-%{version}/xrst.toml # -# move the documentaion to the build directory -mv CppAD-%{yyyymmdd}.doc/doc CppAD-%{version}/doc -mv CppAD-%{version}/COPYING COPYING -mv CppAD-%{version}/uw_copy_040507.html uw_copy_040507.html -# -# Patch corresponding to bug fix in unstream source 20210000.4 -cp CppAD-%{version}/include/cppad/core/abs_normal_fun.hpp \ - CppAD-%{version}/include/cppad/core/abs_normal_fun.bak -for uu in vp pv vv -do - sed -i CppAD-%{version}/include/cppad/core/abs_normal_fun.hpp \ - -e "/ Zmul${uu}Op/N" \ - -e "/ Zmul${uu}Op/s|\n *CPPAD_ASSERT_NARG_NRES(op, 2, 1);||" -done -sed -i CppAD-%{version}/include/cppad/core/abs_normal_fun.hpp \ - -e 's|^\( *\)case ZmulvvOp:|\1case PowvvOp:\n&|' +# COPYING, uw_copy_040507.html +cp CppAD-%{version}/COPYING COPYING +cp CppAD-%{version}/uw_copy_040507.html uw_copy_040507.html # +# cppad_lib/CMakeLists.txt # 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 +# include +template void print_epsilon(const char* type_name) +{ Float epsilon = std::numeric_limits::epsilon(); + std::cout << type_name << " epsilon = " << epsilon << "\n"; +} +int main(void) +{ print_epsilon("float"); + print_epsilon("double"); + print_epsilon("long double"); + return 0; +} +EOF +g++ -std=c++11 temp.cpp -o temp +./temp > temp.out +cat temp.out +# ---------------------------------------------------------------------------- # build # ----------------------------------------------------------------------------- %build # -# 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 by for cppad_lib by the edit of +# 1. The debug_all is overridden for cppad_lib by the edit of # cppad_lib/CMakeLists.txt above -cppad_cxx_flags='-Wall -pedantic-errors -std=c++11 -Wshadow -Wconversion' +# +# 2. 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 +# extra C++ compiler flags +cppad_cxx_flags=\ +'-Wall -pedantic-errors -std=c++11 -Wshadow -Wconversion -Wno-array-bounds' +# +# CMake Warning: +# Manually-specified variables were not used by the project: +# CMAKE_C_FLAGS_RELEASE +# CMAKE_Fortran_FLAGS_RELEASE +# CMAKE_INSTALL_DO_STRIP +# INCLUDE_INSTALL_DIR +# LIB_INSTALL_DIR +# LIB_SUFFIX +# SHARE_INSTALL_PREFIX +# SYSCONF_INSTALL_DIR +# %cmake --version %cmake \ + -S CppAD-%{version} \ + -B . \ + \ -D CMAKE_VERBOSE_MAKEFILE=0 \ -G 'Unix Makefiles' \ \ @@ -143,58 +158,227 @@ cppad_cxx_flags='-Wall -pedantic-errors -std=c++11 -Wshadow -Wconversion' -D cmake_install_libdirs=%{_lib} \ \ -D cmake_install_datadir=share \ - -D cmake_install_docdir=share/doc \ + -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 include_adolc=false \ - -D include_eigen=false \ -D include_ipopt=false \ -D include_cppadcg=false \ \ - -D colpack_prefix='' \ - -D fadbad_prefix='' \ - -D sacado_prefix='' \ + -D colpack_prefix='NOTFOUND' \ + -D fadbad_prefix='NOTFOUND' \ + -D sacado_prefix='NOTFOUND' \ \ -D cppad_cxx_flags="$cppad_cxx_flags" \ -D cppad_profile_flag='' \ - -D cppad_test_vector=cppad \ - -D cppad_max_num_theads=64 \ + -D cppad_testvector=cppad \ + -D cppad_max_num_threads=64 \ -D cppad_tape_id_type=size_t \ - -D cppad_tape_addr_type=size_t \ - -D cppad_debug_which='debug_all' \ - CppAD-%{version} + -D cppad_tape_addr_type='unsigned int' \ + -D cppad_debug_which='debug_all' # -make %{?_smp_mflags} +# see https://docs.fedoraproject.org/en-US/packaging-guidelines/ +# parallel_make +%make_build # ----------------------------------------------------------------------------- # Install # ----------------------------------------------------------------------------- %install -rm -rf %{buildroot} -make install DESTDIR=%{buildroot} +# https://docs.fedoraproject.org/en-US/packaging-guidelines/ +# why_the_makeinstall_macro_should_not_be_used +%make_install + +%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 -%{_libdir}/libcppad_lib.so.%{soversion} - -# These documentation files come from the source code tarball -%doc COPYING uw_copy_040507.html - -%files doc -# These documentation files come from the docukentation tarball -%{_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 - +# ---------------------------------------------------------------------------- +# +# 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 Jan 29 2023 Brad Bell - 20230000.0-1 +- Move libcppad_lib.so to main package (fixes a fedpkg lint error). +- Fix comment about where doc files come from. +- Move %%define __cmake_in_source_build to top of spec file. +- Add discussion of fedpkg lint files-duplicate warning. + +* Sat Jan 28 2023 Brad Bell - 20230000.0-1 +- Advance upstream source to 2023. +- Add python-xrst to BuildRequires so can buile documentation. +- Remove Source1, change Source0 -> Source, and make definition so tarball + has the same name as the directory it creates. +- Change URL from documentation to git repo so can use in Source definition. +- Change some cmake definitions from empty string to NOTFOUND. +- Explicity specify the source directory (-S) and binary (-B) in camke comamnd. +- Add comments about __cmake_in_source_build confusion +- Update comments about cmake settings and warnings + +* Thu Jan 19 2023 Fedora Release Engineering - 20220000.4-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jul 20 2022 Fedora Release Engineering - 20220000.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Sat May 21 2022 Brad Bell - 20220000.4-1 +- Advance to upstream 20220000.4. Main motivation for this is to make + cppad_eigen.hpp work with Eigen 3.4.0. + +* Mon Feb 14 2022 Brad Bell - 20220000.1-1 +- Not necessary to advance to 20220000.2 because Fedora build is getting + correct result for cppad.pc. + +* Wed Feb 02 2022 Brad Bell - 20220000.1-1 +- Try commenting out to_string test of long double on ppc56le arch. + This problem does not reproduce on ppc64le-test.fedorainfracloud.org. + +* Tue Feb 01 2022 Brad Bell - 20220000.1-1 +- Modify to_string.cpp patch to print out more information on failure. +- Add simple program to print machine epsilon before any other testing. + +* Mon Jan 31 2022 Brad Bell - 20220000.1-1 +- Fix following long standing typos in cmake command: +- 1. cppad_test_vector -> cppad_testvector +- 2. cppad_max_num_theads -> cppad_max_num_threads +- Temporary change to debug ppc64le build failure: replace to_string.cpp +- Replace temporary change by a patch to example/utility/to_string.cpp + +* Mon Jan 24 2022 Brad Bell - 20220000.1-1 +- Advance to upstream source 20220000.1 +- Add -Wno-array-bounds to compiler flags (see remarks about this flag) + +* Wed Jan 19 2022 Fedora Release Engineering - 20210000.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Aug 02 2021 Brad Bell - 20210000.7-1 +- Advance to upstream source 20210000.7 + +* Wed Jul 21 2021 Fedora Release Engineering - 20210000.5-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Sun Mar 07 2021 Brad Bell - 20210000.5-2 +- Remove %%debug_package (not necessary to create debug info). +- Use %%setup to unpack tarballs (sets premissions properly). +- Add comments about using %%clean to check BUILDROOT. + +* Sun Feb 28 2021 Brad Bell - 20210000.5-1 +- Advance to upstream source 20210000.5 +- Remove patches that are no longer necessary. +- Change: Source1, Source2 -> Source0, Source1. +- Change: make %%{?_smp_mflags} -> %%make_build +- Change: make install DESTDIR=%%{buildroot} -> %%make_install. + +* Thu Feb 18 2021 Brad Bell - 20210000.3-3 +- Patch corresponding to bug fix in upstream source 20210000.5 + * Tue Feb 02 2021 Brad Bell - 20210000.3-2 - Patch corresponding to bug fix in upstream source 20210000.4 diff --git a/get_tarball.sh b/get_tarball.sh new file mode 100755 index 0000000..daf2942 --- /dev/null +++ b/get_tarball.sh @@ -0,0 +1,16 @@ +# /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 c6d93b4..8f40433 100644 --- a/sources +++ b/sources @@ -1,2 +1 @@ -SHA512 (20210000.3.tar.gz) = fd6ab2610b8cc62c477622728992d348d0d4acde2e66f4e2d14847697832eb5a84bf2db480731fea57974b994bfe9d3b549336be82c745681ddfec65600ab3e2 -SHA512 (20210000.doc.tar.gz) = 4e7be2b01d6b2d1bd3862a3260176806432893403bc3ba98bbdaad4a701abb64d9f47ccb408fe5e6e8360b4642a65395865274aea184a36aed7baa15d1ee6560 +SHA512 (CppAD-20260000.0.tar.gz) = abe9dd9a971f8d154990d54c1f798c8cab6bf90d016bb288efbcb23a14331897762610295658eec04fb50e5c13b05f4bb6b50a4647d6f0468eb94833dc3400d2