gnu: doxygen: Fix build for the Hurd.

* gnu/packages/patches/doxygen-hurd.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/documentation.scm (doxygen)[arguments]: When building for the
Hurd, add new phase 'apply-patch' and use it.
This commit is contained in:
Janneke Nieuwenhuizen 2023-06-13 07:18:26 +02:00
parent 6f15b4204f
commit d3a1684c8a
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273
3 changed files with 42 additions and 1 deletions

View file

@ -1065,6 +1065,7 @@ dist_patch_DATA = \
%D%/packages/patches/doc++-segfault-fix.patch \ %D%/packages/patches/doc++-segfault-fix.patch \
%D%/packages/patches/dovecot-opensslv3.patch \ %D%/packages/patches/dovecot-opensslv3.patch \
%D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch \ %D%/packages/patches/dovecot-trees-support-dovecot-2.3.patch \
%D%/packages/patches/doxygen-hurd.patch \
%D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch \ %D%/packages/patches/dstat-fix-crash-when-specifying-delay.patch \
%D%/packages/patches/dstat-skip-devices-without-io.patch \ %D%/packages/patches/dstat-skip-devices-without-io.patch \
%D%/packages/patches/dune-common-skip-failing-tests.patch \ %D%/packages/patches/dune-common-skip-failing-tests.patch \

View file

@ -12,6 +12,7 @@
;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de> ;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
;;; Copyright © 2021, 2022 Marius Bakke <marius@gnu.org> ;;; Copyright © 2021, 2022 Marius Bakke <marius@gnu.org>
;;; Copyright © 2022 Maxim Cournoyer <maxim.counoyer@gmail.com> ;;; Copyright © 2022 Maxim Cournoyer <maxim.counoyer@gmail.com>
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -40,6 +41,7 @@ (define-module (gnu packages documentation)
#:use-module (guix build-system python) #:use-module (guix build-system python)
#:use-module (guix build-system qt) #:use-module (guix build-system qt)
#:use-module (guix deprecation) #:use-module (guix deprecation)
#:use-module (guix utils)
#:use-module (gnu packages) #:use-module (gnu packages)
#:use-module (gnu packages autotools) #:use-module (gnu packages autotools)
#:use-module (gnu packages backup) #:use-module (gnu packages backup)
@ -224,7 +226,15 @@ (define-public doxygen
(let ((/bin/sh (search-input-file inputs "/bin/sh"))) (let ((/bin/sh (search-input-file inputs "/bin/sh")))
(substitute* "src/portable.cpp" (substitute* "src/portable.cpp"
(("/bin/sh") (("/bin/sh")
/bin/sh)))))))) /bin/sh)))))
#$@(if (target-hurd?)
#~((add-after 'unpack 'apply-patch
(lambda _
(let ((patch-file
#$(local-file
(search-patch "doxygen-hurd.patch"))))
(invoke "patch" "--force" "-p1" "-i" patch-file)))))
#~()))))
(synopsis "Generate documentation from annotated sources") (synopsis "Generate documentation from annotated sources")
(description "Doxygen is the de facto standard tool for generating (description "Doxygen is the de facto standard tool for generating
documentation from annotated C++ sources, but it also supports other popular documentation from annotated C++ sources, but it also supports other popular

View file

@ -0,0 +1,30 @@
Upstream status: Adapted from upstream.
From d3d968e5835f449d7ea715f45160db81ea906303 Mon Sep 17 00:00:00 2001
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Tue, 16 Aug 2022 20:29:54 +0200
Subject: [PATCH] Fix build on GNU/Hurd
There is no path length limitation there, even via pathconf. But glibc
provides a getcwd function that allocates the buffer dynamically so we can
just leverage that.
---
include/ghc/filesystem.hpp | 7 +++++++
1 file changed, 7 insertions(+)
--- a/filesystem/filesystem.hpp.orig 2022-08-11 22:14:32.000000000 +0200
+++ b/filesystem/filesystem.hpp 2023-06-13 07:26:25.310000000 +0200
@@ -4081,6 +4081,13 @@
return path();
}
return path(std::wstring(buffer.get()), path::native_format);
+#elif defined(__GLIBC__)
+ std::unique_ptr<char, decltype(&std::free)> buffer { ::getcwd(NULL, 0), std::free };
+ if (buffer == nullptr) {
+ ec = detail::make_system_error();
+ return path();
+ }
+ return path(buffer.get());
#else
size_t pathlen = static_cast<size_t>(std::max(int(::pathconf(".", _PC_PATH_MAX)), int(PATH_MAX)));
std::unique_ptr<char[]> buffer(new char[pathlen + 1]);