diff --git a/.gitignore b/.gitignore index e3cca27..a007b45 100644 --- a/.gitignore +++ b/.gitignore @@ -64,3 +64,8 @@ doxygen-1.7.1.src.tar.gz /doxygen-1.10.0.src.tar.gz /doxygen-1.11.0.src.tar.gz /doxygen-1.12.0.src.tar.gz +/doxygen-1.13.0.src.tar.gz +/doxygen-1.13.1.src.tar.gz +/doxygen-1.13.2.src.tar.gz +/doxygen-1.14.0.src.tar.gz +/doxygen-1.15.0.src.tar.gz diff --git a/README.rpm-packaging b/README.rpm-packaging new file mode 100644 index 0000000..9f09233 --- /dev/null +++ b/README.rpm-packaging @@ -0,0 +1,36 @@ +# Javascript asset handling for RPM packaging + +RPM packages should unbundle Javascript assets during the RPM build +process. Currently, this process is not fully automated. + +If Doxygen HTML documentation is installed, add + + %{?doxygen_js_requires} + +to the subpackage that contains the HTML documentation. + +If HTML documentation is installed during the %install phase, invoke + + %{doxygen_unbundle_buildroot} + +towards the end of the %install section. It will process Javascript +files under %{_docdir} (/usr/share/doc). If another directory needs +to be processed, use an explicit directory argument: + + %{doxygen_unbundle_buildroot /usr/share/example/doc} + +The path is relative to %{buildroot} or $RPM_BUILD_ROOT. + +If HTML documentation is not installed, but propagated into package +using %doc directives, it is necessary to invoke + + %{doxygen_unbundle} + +after running Doxygen (typically from the %build section). This +unbundles assets found under the current directory. A specific +directory can be processed by passing it as an argument: + + %{doxygen_unbundle example/doc} + +In this case, the path argument is relative to the current directory, +not the buildroot. diff --git a/doxygen-1.12.0-regression-anchors.patch b/doxygen-1.12.0-regression-anchors.patch deleted file mode 100644 index 272df09..0000000 --- a/doxygen-1.12.0-regression-anchors.patch +++ /dev/null @@ -1,30 +0,0 @@ -commit d408967139935bbaeae8d9eac7f0f34877d53d1c -Author: albert-github -Date: Fri Sep 13 16:02:25 2024 +0200 - - issue #11135 The anchors don't work - - Regression on 300f73d9ecd6b010a160e5f8cef14ecbabab950b: - ``` - commit 300f73d9ecd6b010a160e5f8cef14ecbabab950b - - Date: Thu Jul 4 20:41:56 2024 +0200 - - issue #10970 Improvement of end of paragraph detection - ``` - - attribute name is not `idname` but there are 2 attributes possible `id` and `name` - -diff --git a/src/commentscan.l b/src/commentscan.l -index 8520fcb58..767aa440d 100644 ---- a/src/commentscan.l -+++ b/src/commentscan.l -@@ -591,7 +591,7 @@ DETAILEDHTMLOPTEND {ENDCODE} - SUMMARY ("summary"|"SUMMARY") - REMARKS ("remarks"|"REMARKS") - AHTML [aA]{BN}* --ANCHTML ("idname"|"IDNAME")"="("\""{LABELID}"\""|"'"{LABELID}"'"|{LABELID}) -+ANCHTML ("id"|"name"|"ID"|"NAME")"="("\""{LABELID}"\""|"'"{LABELID}"'"|{LABELID}) - BN [ \t\n\r] - BL [ \t\r]*"\n" - B [ \t] diff --git a/doxygen-unbundler b/doxygen-unbundler new file mode 100644 index 0000000..aaf8bed --- /dev/null +++ b/doxygen-unbundler @@ -0,0 +1,69 @@ +#!/usr/bin/bash -e +# Replace Doxygen-generated Javascript files with symblic links. + +set -o pipefail + +jsdir="$1" +buildroot="$2" +subdir="$3" + +if test -z "$jsdir" ; then + echo "error: Javascript directory argument required" 1>&2 + exit 1 +fi + +js_files="$(echo "$jsdir"/doxygen/*.js)" + +if test -z "$buildroot" ; then + # Only absolute links are possible because the final installation + # destination is unknown. + if test -z "$subdir"; then + subdir="." + fi + find "$subdir" -type f -name '*.js' \ + | while read js_file; do + for js_file_ref in $js_files; do + if cmp -s "$js_file_ref" "$js_file"; then + ln -sf "$js_file_ref" "$js_file" + break + fi + done + done +else + # Create relative links. + cd "$buildroot" + abs_buildroot="$(readlink -f .)" + cd "./$subdir" + + # Compute the number of ../ needed to reach the root directory. + prefix="" + while true; do + p="$(readlink -f "${prefix:-.}")" + if test "$p" = "$abs_buildroot"; then + break + elif test "$p" = "/"; then + echo "error: Could not find buildroot directory" 1>&2 + exit 1 + elif test -z "$prefix"; then + prefix=".." + else + prefix="../$prefix" + fi + done + + # Create relative links. + find . -type f -name '*.js' -printf "%d %p\n" \ + | while read depth js_file; do + for js_file_ref in $js_files; do + if cmp -s "$js_file_ref" "$js_file"; then + target_prefix="$prefix" + i=1 + while test "$i" -lt "$depth"; do + target_prefix="../$target_prefix" + i=$(($i + 1)) + done + ln -sf "$target_prefix$js_file_ref" "$js_file" + fi + done + done +fi diff --git a/doxygen.spec b/doxygen.spec index 5e41254..7818615 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -1,18 +1,23 @@ %if 0%{?fedora} %global xapian_core_support ON -%global clang_support OFF %global build_wizard ON +%global system_spdlog ON +%global system_fmt ON %else %global xapian_core_support OFF -%global clang_support OFF %global build_wizard OFF +%global system_spdlog OFF +%global system_fmt OFF %endif +%global build_search %{xapian_core_support} +%global clang_support ON +%global system_sqlite3 ON Summary: A documentation system for C/C++ Name: doxygen Epoch: 2 -Version: 1.12.0 -Release: 2%{?dist} +Version: 1.15.0 +Release: 1%{?dist} # No version is specified. License: GPL-2.0-or-later Url: https://github.com/doxygen @@ -21,13 +26,17 @@ Source0: https://www.doxygen.nl/files/%{name}-%{version}.src.tar.gz Source1: doxywizard.desktop # these icons are part of doxygen and converted from doxywizard.ico Source2: doxywizard-icons.tar.xz +Source3: README.rpm-packaging +Source4: doxygen-unbundler + # upstream fixes -# Markdown links to internal anchors broken -Patch0: doxygen-1.12.0-regression-anchors.patch BuildRequires: %{_bindir}/python3 BuildRequires: perl-interpreter, perl-open BuildRequires: texlive-bibtex +BuildRequires: web-assets-devel +# Building an RPM package typically needs unbundling of Javascript assets. +Requires: (js-doxygen if redhat-rpm-config) %if ! 0%{?_module_build} BuildRequires: tex(dvips) @@ -107,6 +116,25 @@ BuildRequires: clang-devel %else BuildRequires: gcc-c++ gcc %endif +%if "%{system_spdlog}" == "ON" +BuildRequires: spdlog-devel +%else +# SPDLOG_VER* defined in deps/spdlog/include/spdlog/version.h +Provides: bundled(spdlog) = 1.14.1 +%endif +%if "%{system_sqlite3}" == "ON" +BuildRequires: sqlite-devel +%else +# SQLITE_VERSION defined in deps/sqlite3/sqlite3.h +Provides: bundled(sqlite) = 3.42.0 +%endif +%if "%{system_fmt}" == "ON" +BuildRequires: fmt-devel +%else +# deps/fmt/README.md +Provides: bundled(fmt) = 10.2.1 +%endif + Requires: perl-interpreter Requires: graphviz @@ -117,11 +145,19 @@ documentation is extracted directly from the sources. Doxygen can also be configured to extract the code structure from undocumented source files. +%package -n js-doxygen +Summary: Javascript files used by Doxygen +Requires: web-assets-filesystem +BuildArch: noarch +%description -n js-doxygen +Javascript files for use by locally installed Doxygen documentation. + %if "x%{build_wizard}" == "xON" %package doxywizard Summary: A GUI for creating and editing configuration files Requires: %{name} = %{epoch}:%{version}-%{release} -BuildRequires: qt5-qtbase-devel +BuildRequires: qt6-qtbase-devel +BuildRequires: qt6-qtsvg-devel %description doxywizard Doxywizard is a GUI for creating and editing configuration files that @@ -207,35 +243,22 @@ Requires: texlive-epstopdf %prep %autosetup -p1 -a2 -# convert into utf-8 -iconv --from=ISO-8859-1 --to=UTF-8 LANGUAGE.HOWTO > LANGUAGE.HOWTO.new -touch -r LANGUAGE.HOWTO LANGUAGE.HOWTO.new -mv LANGUAGE.HOWTO.new LANGUAGE.HOWTO +cp %{SOURCE3} . %build -%if "x%{build_wizard}" == "xON" %cmake \ - -DPYTHON_EXECUTABLE=%{_bindir}/python3 \ - -Duse_libclang=%{clang_support} \ - -Dbuild_doc=OFF \ - -Dbuild_wizard=ON \ - -Dbuild_xmlparser=ON \ - -Dbuild_search=%{xapian_core_support} \ - -DMAN_INSTALL_DIR=%{_mandir}/man1 \ - -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ - -DBUILD_SHARED_LIBS=OFF \ -%else -%cmake \ - -DPYTHON_EXECUTABLE=%{_bindir}/python3 \ - -Duse_libclang=%{clang_support} \ - -Dbuild_doc=OFF \ - -Dbuild_wizard=OFF \ - -Dbuild_xmlparser=ON \ - -Dbuild_search=OFF \ - -DMAN_INSTALL_DIR=%{_mandir}/man1 \ - -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ - -DBUILD_SHARED_LIBS=OFF \ -%endif + -Dbuild_wizard=%{build_wizard} \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ + -Dbuild_search=%{build_search} \ + -Duse_libclang=%{clang_support} \ + -DMAN_INSTALL_DIR=%{_mandir}/man1 \ + -Dbuild_doc=OFF \ + -DPYTHON_EXECUTABLE=%{_bindir}/python3 \ + -Dbuild_xmlparser=ON \ + -Duse_sys_sqlite3=%{system_sqlite3} \ + -Duse_sys_spdlog=%{system_spdlog} \ + -Duse_sys_fmt=%{system_fmt} %cmake_build %{?_smp_mflags} @@ -266,11 +289,25 @@ rm -f %{buildroot}/%{_mandir}/man1/doxyindexer.1* %{buildroot}/%{_mandir}/man1/d # remove duplicate rm -rf %{buildroot}/%{_docdir}/packages +# Install the asset files. +install -m644 -D --target-directory=%{buildroot}%{_jsdir}/doxygen templates/html/*.js + +# Generate the macros file. Expand version/release/%%_jsdir. +mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d +cat > %{buildroot}%{_rpmconfigdir}/macros.d/macros.doxygen <<'EOF' +%%doxygen_js_requires() Requires: js-doxygen >= %{version}-%{release} +%%doxygen_unbundle_buildroot() %%{_rpmconfigdir}/redhat/doxygen-unbundler "%{_jsdir}" "%%{buildroot}" %%[ %%# == 0 ? "%%{_docdir}" : "%%1"] +%%doxygen_unbundle() %{_rpmconfigdir}/redhat/doxygen-unbundler "%{_jsdir}" "" %%* +EOF + + # Install the unbundler script. +install -m755 -D --target-directory=%{buildroot}%{_rpmconfigdir}/redhat %{SOURCE4} + %check %ctest %files -%doc LANGUAGE.HOWTO README.md +%doc LANGUAGE.HOWTO README.md README.rpm-packaging %license LICENSE %if ! 0%{?_module_build} %if "x%{?xapian_core_support}" == "xON" @@ -284,6 +321,8 @@ rm -rf %{buildroot}/%{_docdir}/packages %{_mandir}/man1/doxyindexer.1* %{_mandir}/man1/doxysearch.1* %endif +%{_rpmconfigdir}/macros.d/macros.doxygen +%{_rpmconfigdir}/redhat/doxygen-unbundler %if "x%{build_wizard}" == "xON" %files doxywizard %{_bindir}/doxywizard @@ -292,12 +331,56 @@ rm -rf %{buildroot}/%{_docdir}/packages %{_datadir}/icons/hicolor/*/apps/doxywizard.png %endif +%files -n js-doxygen +%{_jsdir}/doxygen/* + %if ! 0%{?_module_build} %files latex # intentionally left blank %endif %changelog +* Thu Nov 13 2025 Than Ngo - 2:1.15.0-1 +- Update to 1.15.0 + +* Wed Jul 23 2025 Fedora Release Engineering - 2:1.14.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Wed Jun 25 2025 Than Ngo - 2:1.14.0-3 +- Upstream fix for input buffer overflow + +* Wed May 28 2025 Yaakov Selkowitz - 2:1.14.0-2 +- Use bundled spdlog on RHEL, redux + +* Sun May 25 2025 Than Ngo - 2:1.14.0-1 +- Fix rhbz#2368381, update to 1.14.0 + +* Tue Feb 11 2025 Yaakov Selkowitz - 2:1.13.2-5 +- Use bundled spdlog on RHEL + +* Mon Feb 10 2025 Than Ngo - 2:1.13.2-4 +- built with system sqlite3 and spdlog + +* Sat Feb 08 2025 Than Ngo - 2:1.13.2-3 +- Introduce js-doxygen subpackage and unbundle Javascript during RPM builds +- Use system spdlog and sqlite3 + +* Thu Jan 16 2025 Fedora Release Engineering - 2:1.13.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Mon Jan 13 2025 Than Ngo - 2:1.13.2-1 +- Fix rhbz#2336720, Update to 1.13.2 +- Fix rhbz#2336536, FTBFS in ignition-transport + +* Fri Jan 03 2025 Than Ngo - 2:1.13.1-1 +- Fix rhbz#2335266, Update to 1.13.1 + +* Thu Jan 02 2025 Than Ngo - 2:1.13.0-1 +- Fix rhbz#2334703, Update to 1.13.0 + +* Mon Oct 28 2024 Than Ngo - 2:1.12.0-3 +- Fix rhbz#2295788, Non-reproducible file names in doxygen output + * Mon Oct 28 2024 Than Ngo - 2:1.12.0-2 - Fix rhbz#x2322116, broken markdown links to anchors diff --git a/sources b/sources index b656c32..7883325 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (doxywizard-icons.tar.xz) = 865a86d7535e64ad92e36ba1f901d51cd6b603e762e5c68761a45bc1f965a36e6a6c8d29468ecb2ec799f0add2347537723832aff6660c76af453f80a0a370ad -SHA512 (doxygen-1.12.0.src.tar.gz) = e407e29c5e232e1f8dca291dd2d00b1dd400be709400225339408fad2cd758563b69f290cbd7c0efeb76b1335c4672fb1d6d580b9e6ed570708cf9b7d78951b1 +SHA512 (doxygen-1.15.0.src.tar.gz) = e53cc8da6cf1fe3ca3b3637647ed6afa28365351eac81d010f6691d939df5e449b3d898a6f695dd850d12659dfd7018fc864071b30fbca5dd196dc094ec4371e