Patrice Dumas <pertu...@free.fr> writes:

> On Sat, Nov 04, 2023 at 02:39:32PM +0100, Arsen Arsenović wrote:
>> Afternoon,
>> 
>> Following changes in Texinfo 7.1 (uncertain which commit - haven't
>> bisected) FFmpeg documentation no longer builds.  This is due to an init
>> file (attached).  The following is a minimum reproducer:
>> 
>>   makeinfo --init-file=t2h.pm -o /dev/null /dev/null
>> 
>> The result:
>> 
>>   makeinfo: error parsing t2h.pm: Undefined subroutine
>>   &Texinfo::Config::set_from_init_file called at t2h.pm line 24.
>
> When I try to run it from within the texinfo-7.1 sources, I get another
> error.  My guess is that the modules that is loaded corresponds to an
> older version which did not have set_from_init_file, or where
> set_from_init_file was called something else.
>
>
> The error I get is:
>
> ~/src/texinfo-7.1/tp$ ./texi2any.pl --init-file=t2h.pm -o /dev/null /dev/null
> texi2any: error parsing ./t2h.pm: Undefined subroutine 
> &Texinfo::Config::get_conf called at ./t2h.pm line 130.
>
> That's because since some versions, it is texinfo_get_conf that should
> be used when directly called (not from a converter).  From within the
> sources, when called as texi2any.pl, +dev is prepended, so here is how I
> made it work:
>
> my $texinfo_version = texinfo_get_conf('PACKAGE_VERSION');
> $texinfo_version =~ s/\+dev$//;
> # determine if texinfo is at least version 6.8
> my $program_version_num = version->declare($texinfo_version)->numify;

Oh, interesting.  On my system, I'm using texinfo built from master, and
it completely lacks PACKAGE_VERSION!  (if I rebuild from releases/7.1,
it's present).  It looks like it got removed in
6a1a78b941a832033b8939ab4cdce1646dd56904.

Seems that relatively many things changed between 6.x and 7.0.  The
following patch managed to get t2h.pm to parse and work correctly
(presumably):

From b5deb61cc257a1b0290f63d446abc29081a9834a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Arsen=20Arsenovi=C4=87?= <ar...@aarsen.me>
Date: Sun, 5 Nov 2023 11:44:46 +0100
Subject: [PATCH] t2h.pm: fix on texinfo >=7.0

Done with a help from Patrice Dumas <pertu...@free.fr>.  Thanks!
---
 doc/t2h.pm | 61 ++++++++++++++++++++++++++++++++++++++----------------
 1 file changed, 43 insertions(+), 18 deletions(-)

diff --git a/doc/t2h.pm b/doc/t2h.pm
index d07d974286..04a8b1ab30 100644
--- a/doc/t2h.pm
+++ b/doc/t2h.pm
@@ -21,7 +21,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
 # no navigation elements
-set_from_init_file('HEADERS', 0);
+texinfo_set_from_init_file('HEADERS', 0);
 
 sub ffmpeg_heading_command($$$$$)
 {
@@ -126,23 +126,35 @@ foreach my $command (keys(%Texinfo::Common::sectioning_commands), 'node') {
     texinfo_register_command_formatting($command, \&ffmpeg_heading_command);
 }
 
+my $texinfo_version = texinfo_get_conf('PACKAGE_VERSION')
+  || texinfo_get_conf('PACKAGE_VERSION_OPTION');
+$texinfo_version =~ s/(\+?dev)*$//;
 # determine if texinfo is at least version 6.8
-my $program_version_num = version->declare(get_conf('PACKAGE_VERSION'))->numify;
+my $program_version_num = version->declare($texinfo_version)->numify;
 my $program_version_6_8 = $program_version_num >= 6.008000;
+my $program_version_7_0 = $program_version_num >= 7.000000;
 
 # print the TOC where @contents is used
 if ($program_version_6_8) {
-    set_from_init_file('CONTENTS_OUTPUT_LOCATION', 'inline');
+    texinfo_set_from_init_file('CONTENTS_OUTPUT_LOCATION', 'inline');
 } else {
-    set_from_init_file('INLINE_CONTENTS', 1);
+    texinfo_set_from_init_file('INLINE_CONTENTS', 1);
 }
 
 # make chapters <h2>
-set_from_init_file('CHAPTER_HEADER_LEVEL', 2);
+texinfo_set_from_init_file('CHAPTER_HEADER_LEVEL', 2);
 
 # Do not add <hr>
-set_from_init_file('DEFAULT_RULE', '');
-set_from_init_file('BIG_RULE', '');
+texinfo_set_from_init_file('DEFAULT_RULE', '');
+texinfo_set_from_init_file('BIG_RULE', '');
+
+sub ffmpeg_file_header_info($$)
+{
+  my $self = shift;
+  my $command = shift;
+  return $self->_file_header_information($command) if $program_version_7_0;
+  reutrn $self->_file_header_informations($command);
+}
 
 # Customized file beginning
 sub ffmpeg_begin_file($$$)
@@ -159,7 +171,7 @@ sub ffmpeg_begin_file($$$)
     my ($title, $description, $encoding, $date, $css_lines,
         $doctype, $bodytext, $copying_comment, $after_body_open,
         $extra_head, $program_and_version, $program_homepage,
-        $program, $generator) = $self->_file_header_informations($command);
+        $program, $generator) = ffmpeg_file_header_info($self, $command);
 
     my $links = $self->_get_links ($filename, $element);
 
@@ -201,9 +213,9 @@ if ($program_version_6_8) {
 sub ffmpeg_program_string($)
 {
   my $self = shift;
-  if (defined($self->get_conf('PROGRAM'))
-      and $self->get_conf('PROGRAM') ne ''
-      and defined($self->get_conf('PACKAGE_URL'))) {
+  if (defined(texinfo_get_conf('PROGRAM'))
+      and texinfo_get_conf('PROGRAM') ne ''
+      and defined(texinfo_get_conf('PACKAGE_URL'))) {
     return $self->convert_tree(
       $self->gdt('This document was generated using @uref{{program_homepage}, @emph{{program}}}.',
          { 'program_homepage' => $self->get_conf('PACKAGE_URL'),
@@ -223,7 +235,7 @@ if ($program_version_6_8) {
 sub ffmpeg_end_file($)
 {
     my $self = shift;
-    my $program_string = &{$self->{'format_program_string'}}($self);
+    my $program_string = &{$self->formatting_function('format_program_string')}($self);
     my $program_text = <<EOT;
       <p style="font-size: small;">
         $program_string
@@ -244,7 +256,7 @@ if ($program_version_6_8) {
 
 # Dummy title command
 # Ignore title. Title is handled through ffmpeg_begin_file().
-set_from_init_file('USE_TITLEPAGE_FOR_TITLE', 1);
+texinfo_set_from_init_file('USE_TITLEPAGE_FOR_TITLE', 1);
 sub ffmpeg_title($$$$)
 {
     return '';
@@ -253,6 +265,19 @@ sub ffmpeg_title($$$$)
 texinfo_register_command_formatting('titlefont',
                                     \&ffmpeg_title);
 
+# html_attribute_class compat code
+sub ffmpeg_class($$@)
+{
+    my $self = shift;
+    my $element = shift;
+    my @classes = shift;
+    if ($program_version_7_0) {
+        return $self->html_attribute_class($element, \@classes);
+    } else {
+        return $self->_attribute_class($element, join(' ', @classes));
+    }
+}
+
 # Customized float command. Part of code borrowed from GNU Texinfo.
 sub ffmpeg_float($$$$$)
 {
@@ -262,8 +287,8 @@ sub ffmpeg_float($$$$$)
     my $args = shift;
     my $content = shift;
 
-    my ($caption, $prepended) = Texinfo::Common::float_name_caption($self,
-                                                                $command);
+    my ($caption, $prepended) = Texinfo::Convert::Converter::float_name_caption($self,
+                                                                                $command);
     my $caption_text = '';
     my $prepended_text;
     my $prepended_save = '';
@@ -335,8 +360,8 @@ sub ffmpeg_float($$$$$)
             $caption->{'args'}->[0], 'float caption');
     }
     if ($prepended_text.$caption_text ne '') {
-        $prepended_text = $self->_attribute_class('div','float-caption'). '>'
-                . $prepended_text;
+        $prepended_text = ffmpeg_class($self, 'div', ['float-caption']). '>'
+            . $prepended_text;
         $caption_text .= '</div>';
     }
     my $html_class = '';
@@ -349,7 +374,7 @@ sub ffmpeg_float($$$$$)
         $prepended_text = '';
         $caption_text   = '';
     }
-    return $self->_attribute_class('div', $html_class). '>' . "\n" .
+    return ffmpeg_class($self, 'div', [$html_class]). '>' . "\n" .
         $prepended_text . $caption_text . $content . '</div>';
 }
 
-- 
2.42.1

Does this patch seem reasonable to you?

Thanks, have a lovely day.
-- 
Arsen Arsenović

Attachment: signature.asc
Description: PGP signature

Reply via email to