Source: texinfo Version: 5.9.96.dfsg.1-1 Severity: wishlist Tags: patch User: reproducible-bui...@lists.alioth.debian.org Usertags: toolchain X-Debbugs-Cc: reproducible-bui...@lists.alioth.debian.org
Hi, While working on the "reproducible builds" effort [1], we have noticed that texinfo generates indices in a non-deterministic order. This appears to happen because the index sort is not stable with respect to the line number, resulting in output non-determinstically changing from: * Entry (line 1) * Entry (line 2) and * Entry (line 2) * Entry (line 1) .. when the entry is the same string. The attached patch adds the line number to the sort comparator. Once applied, (some) packages using texinfo can be built reproducibly in our reproducible toolchain. [1]: https://wiki.debian.org/ReproducibleBuilds Regards, -- ,''`. : :' : Chris Lamb `. `'` la...@debian.org / chris-lamb.co.uk `-
diff --git a/tp/Texinfo/Structuring.pm b/tp/Texinfo/Structuring.pm index 6ed1be2..c2ec017 100644 --- a/tp/Texinfo/Structuring.pm +++ b/tp/Texinfo/Structuring.pm @@ -1984,6 +1984,9 @@ sub _sort_index_entries($$) if ($res == 0) { $res = ($key1->{'number'} <=> $key2->{'number'}); } + if ($res == 0) { + $res = ($key1->{'line_nr'} <=> $key2->{'line_nr'}); + } return $res; } @@ -2016,6 +2019,7 @@ sub _do_index_keys($$$) foreach my $index_name (keys(%$index_entries)) { foreach my $entry (@{$index_entries->{$index_name}}) { $entry->{'in_code'} = $index_names->{$entry->{'index_name'}}->{'in_code'}; + $entry->{'line_nr'} = $entry->{'command'}->{'line_nr'}->{'line_nr'}; $options->{'code'} = $entry->{'in_code'}; $entry->{'key'} = Texinfo::Convert::Text::convert( {'contents' => $entry->{'content'}}, $options);