Commit 5bbc49a5c9 for openssl.org

commit 5bbc49a5c9107f40026a320364df9d9a9e5fef37
Author: Enji Cooper <yaneurabeya@gmail.com>
Date:   Thu Sep 4 21:27:29 2025 -0700

    Add mandoc output support for manpages

    This change modifies the Makefile generator to support mandoc format
    manpages, in lieu of \*roff format manpages.

    After this commit the user has the ability of specifying the manpage
    format to the `--manpage-format` flag. The 2 supported manpage formats
    as of writing are "mdoc" and "roff" and the default remains the "roff"
    format for legacy and portability reasons.

    The mandoc format requires pod2mdoc to be installed, whereas the roff
    output format requires pod2man to be installed. The former requires an
    additional utility be installed, whereas the latter uses pod2man, a
    utility that has been present with perl distributions for well over a
    decade.

    mandoc format support is being added as it is an easier/arguably more
    structured manpage format to parse, making it easier for downstream
    consumers like FreeBSD to implement OS-specific build support, as the
    minimum dependencies for the OpenSSL build process are more involved
    than the tools available for the FreeBSD OS bootstrapping process.

    Signed-off-by: Enji Cooper <yaneurabeya@gmail.com>

    Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
    Reviewed-by: Tomas Mraz <tomas@openssl.foundation>
    MergeDate: Mon Jul 20 09:52:29 2026
    (Merged from https://github.com/openssl/openssl/pull/28450)

diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl
index 0d4ec0f983..6c51e34f7a 100644
--- a/Configurations/unix-Makefile.tmpl
+++ b/Configurations/unix-Makefile.tmpl
@@ -1583,12 +1583,24 @@ EOF
           my $section = $1;
           my $name = uc basename($args{src}, ".$section");
           my $pod = $gen0;
-          return <<"EOF";
+
+          if ($config{manpage_format} eq "mdoc") {
+              return <<"EOF";
+$args{src}: $pod
+	pod2mdoc -n $name -s $section\$(MANSUFFIX) \\
+		 -d \$(RELEASE_DATE) \\
+		 $pod >\$\@
+EOF
+          } elsif ($config{manpage_format} eq "roff") {
+              return <<"EOF";
 $args{src}: $pod
 	pod2man --name=$name --section=$section\$(MANSUFFIX) --center=OpenSSL \\
 		--date=\$(RELEASE_DATE) --release=\$(VERSION) \\
 		$pod >\$\@
 EOF
+          } else {
+              die "Unhandled manpage format: $config{manpage_format}";
+          }
       } elsif (platform->isdef($args{src})) {
           #
           # Linker script-ish generator
diff --git a/Configure b/Configure
index 5ee8597f2e..75f1f6b67b 100755
--- a/Configure
+++ b/Configure
@@ -27,7 +27,7 @@ use OpenSSL::config;
 my $orig_death_handler = $SIG{__DIE__};
 $SIG{__DIE__} = \&death_handler;

-my $usage="Usage: Configure [no-<feature> ...] [enable-<feature> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]thread-pool] [[no-]default-thread-pool] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-egd] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--config=FILE] [--help] os/compiler[:flags]\n";
+my $usage="Usage: Configure [no-<feature> ...] [enable-<feature> ...] [-Dxxx] [-lxxx] [-Lxxx] [-fxxx] [-Kxxx] [no-hw-xxx|no-hw] [[no-]threads] [[no-]thread-pool] [[no-]default-thread-pool] [[no-]shared] [[no-]zlib|zlib-dynamic] [no-asm] [no-egd] [sctp] [386] [--prefix=DIR] [--openssldir=OPENSSLDIR] [--with-xxx[=vvv]] [--config=FILE] [--manpage-format={roff,mdoc}] [--help] os/compiler[:flags]\n";

 my $banner = <<"EOF";

@@ -295,6 +295,7 @@ my $dofile = abs2rel(catfile($srcdir, "util/dofile.pl"));

 my $local_config_envname = 'OPENSSL_LOCAL_CONFIG_DIR';

+$config{manpage_format} = "roff";
 $config{sourcedir} = abs2rel($srcdir, $blddir);
 $config{builddir} = abs2rel($blddir, $blddir);
 # echo -n 'holy hand grenade of antioch' | openssl sha256
@@ -1044,6 +1045,10 @@ while (@argvcopy)
                 {
                 $config{build_type} = "release";
                 }
+        elsif (/^--manpage-format=(mdoc|roff)$/)
+		{
+		$config{manpage_format}="$1";
+		}
         elsif (/^--pgo$/)
                 {
                 $config{build_type} = "pgo";