diff --git a/.gitignore b/.gitignore
index 0d9d63e..a007b45 100644
--- a/.gitignore
+++ b/.gitignore
@@ -60,3 +60,12 @@ doxygen-1.7.1.src.tar.gz
/doxygen-1.9.5.src.tar.gz
/doxygen-1.9.6.src.tar.gz
/doxygen-1.9.7.src.tar.gz
+/doxygen-1.9.8.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.9.7-unicode-test.ptch b/doxygen-1.9.7-unicode-test.ptch
deleted file mode 100644
index 1d390b8..0000000
--- a/doxygen-1.9.7-unicode-test.ptch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff -Nur doxygen-1.9.7-bug/doc_internal/releases.md doxygen-1.9.7/doc_internal/releases.md
---- doxygen-1.9.7-bug/doc_internal/releases.md 2023-05-18 20:19:49.000000000 +0200
-+++ doxygen-1.9.7/doc_internal/releases.md 2023-05-18 21:16:40.000000000 +0200
-@@ -2,7 +2,7 @@
-
- The following table gives an overview of the doxygen releases with together with the release dates.
-
--- Release 1.9.7 18-05-2022
-+- Release 1.9.7 18-05-2023
- - Release 1.9.6 27-12-2022
- - Release 1.9.5 26-08-2022
- - Release 1.9.4 05-05-2022
-diff -Nur "doxygen-1.9.7-bug/testing/061_U\314\201nicod\342\202\254_file.cpp" "doxygen-1.9.7/testing/061_U\314\201nicod\342\202\254_file.cpp"
---- "doxygen-1.9.7-bug/testing/061_U\314\201nicod\342\202\254_file.cpp" 2023-01-02 20:08:23.760982526 +0100
-+++ "doxygen-1.9.7/testing/061_U\314\201nicod\342\202\254_file.cpp" 1970-01-01 01:00:00.000000000 +0100
-@@ -1,7 +0,0 @@
--// objective: test a file with unicode characters in the name
--// check: 061___xC3_x9Anicod_xE2_x82_xAC__file_8cpp.xml
--
--class Test
--{
--};
--
-diff -Nur "doxygen-1.9.7-bug/testing/061_\303\232nicod\342\202\254_file.cpp" "doxygen-1.9.7/testing/061_\303\232nicod\342\202\254_file.cpp"
---- "doxygen-1.9.7-bug/testing/061_\303\232nicod\342\202\254_file.cpp" 1970-01-01 01:00:00.000000000 +0100
-+++ "doxygen-1.9.7/testing/061_\303\232nicod\342\202\254_file.cpp" 2023-01-02 20:08:23.000000000 +0100
-@@ -0,0 +1,7 @@
-+// objective: test a file with unicode characters in the name
-+// check: 061___xC3_x9Anicod_xE2_x82_xAC__file_8cpp.xml
-+
-+class Test
-+{
-+};
-+
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 5082474..7818615 100644
--- a/doxygen.spec
+++ b/doxygen.spec
@@ -1,33 +1,42 @@
%if 0%{?fedora}
%global xapian_core_support ON
-%global clang_support ON
%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.9.7
-Release: 3%{?dist}
+Version: 1.15.0
+Release: 1%{?dist}
# No version is specified.
-License: GPL-1.0-or-later
+License: GPL-2.0-or-later
Url: https://github.com/doxygen
-Source0: https://sourceforge.net/projects/doxygen/files/rel-%{version}/%{name}-%{version}.src.tar.gz
+Source0: https://www.doxygen.nl/files/%{name}-%{version}.src.tar.gz
# this icon is part of kdesdk
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 patches
-Patch0: doxygen-1.9.7-unicode-test.ptch
+# upstream fixes
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,89 @@ 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
+
+* Wed Aug 07 2024 Than Ngo - 2:1.12.0-1
+- update to 1.12.0
+
+* Wed Jul 17 2024 Fedora Release Engineering - 2:1.11.0-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
+
+* Fri Jun 14 2024 Than Ngo - 2:1.11.0-4
+- fixed rhbz#2292250, update license
+
+* Fri May 31 2024 Than Ngo - 2:1.11.0-3
+- removed workaround for debuginfo
+
+* Wed May 29 2024 Than Ngo - 2:1.11.0-2
+- fixed rhbz#2283362, fix buffer overflow
+
+* Tue May 21 2024 Than Ngo - 2:1.11.0-1
+- update to 1.11.0
+
+* Wed Jan 24 2024 Fedora Release Engineering - 2:1.10.0-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
+
+* Fri Jan 19 2024 Than Ngo - 2:1.10.0-2
+- don't use clang to build doxygen as workaround for a bug in gcc-14
+
+* Tue Dec 26 2023 Than Ngo - 1.10.0-1
+- bz#2255826, update to 1.10
+
+* Mon Sep 11 2023 Than Ngo - 1.9.8-1
+- fix bz#2235035, update to 1.9.8
+
* Wed Jul 19 2023 Fedora Release Engineering - 2:1.9.7-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
diff --git a/sources b/sources
index 590824a..7883325 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
SHA512 (doxywizard-icons.tar.xz) = 865a86d7535e64ad92e36ba1f901d51cd6b603e762e5c68761a45bc1f965a36e6a6c8d29468ecb2ec799f0add2347537723832aff6660c76af453f80a0a370ad
-SHA512 (doxygen-1.9.7.src.tar.gz) = 618ff58aa6f0a2eb89f95b570995ea3ebbcda64f502cabcecd9be2967abffb56d0d6747de0c06df422705919757e6af9c6e5a56ca603b1ddf7a09a7ee79b1803
+SHA512 (doxygen-1.15.0.src.tar.gz) = e53cc8da6cf1fe3ca3b3637647ed6afa28365351eac81d010f6691d939df5e449b3d898a6f695dd850d12659dfd7018fc864071b30fbca5dd196dc094ec4371e