https://gitlab.kitware.com/vtk/vtk/merge_requests/5633 https://gitlab.kitware.com/vtk/vtk/merge_requests/5634 Index: VTK-8.2.0/Utilities/Doxygen/doc_codematch.pl =================================================================== --- VTK-8.2.0.orig/Utilities/Doxygen/doc_codematch.pl +++ VTK-8.2.0/Utilities/Doxygen/doc_codematch.pl @@ -249,7 +249,7 @@ foreach my $source (@files) { my $preamble = " \@par " . $args{"label"} . ":\n"; my $doc = $preamble . - " " . join(" ", keys %{$class2matches{$class}}) . "\n"; + " " . join(" ", sort keys %{$class2matches{$class}}) . "\n"; if ($block !~ s/($preamble.+?)(\s*\@par|\z)/$doc$2/gms) { $block .= "\n$doc"; @@ -282,7 +282,7 @@ my $header; my (@summary, @credits); push @summary, - " - $nb_files implementation file(s) returning " . scalar (keys %allmatches) . " word(s) for " . scalar (keys %allclasses) . " classe(es) on " . localtime(), + " - $nb_files implementation file(s) returning " . scalar (keys %allmatches) . " word(s) for " . scalar (keys %allclasses) . " classe(es) on " . gmtime($ENV{SOURCE_DATE_EPOCH}||time), " - $nb_replaced_files file(s) updated"; push @credits, Index: VTK-8.2.0/Utilities/Doxygen/doc_index.pl =================================================================== --- VTK-8.2.0.orig/Utilities/Doxygen/doc_index.pl +++ VTK-8.2.0/Utilities/Doxygen/doc_index.pl @@ -213,7 +213,7 @@ foreach my $source (@files) { } } -my @words = keys %index; +my @words = sort keys %index; print " => ", scalar @words, " word(s) grabbed in $nb_files file(s) in ", time() - $intermediate_time, " s.\n"; # ------------------------------------------------------------------------- @@ -243,7 +243,7 @@ print "Grouping...\n"; sub transfer_keys { my ($rfrom, $rto) = @_; - foreach my $key (keys %$rfrom) { + foreach my $key (sort keys %$rfrom) { $rto->{$key} += $rfrom->{$key}; } } @@ -350,7 +350,7 @@ foreach my $word (@words) { # with these extensions that were not found and build a list of similar # "words" by concatenating both. - my @verbs = keys %verbs; + my @verbs = sort keys %verbs; if (@verbs) { my %try = ("" => 1, "e" => 1, @@ -397,7 +397,7 @@ print " => $nb_grouped word(s) grouped.\ print "Normalizing...\n"; -@words = keys %index; +@words = sort keys %index; foreach my $word (@words) { my $lcw = lc $word; @@ -413,7 +413,7 @@ foreach my $word (@words) { # Normalize group to lowercase if (exists $group{$word}) { - foreach my $gword (keys %{$group{$word}}) { + foreach my $gword (sort keys %{$group{$word}}) { my $lcgw = lc $gword; if ($gword ne uc($gword) && $gword ne $lcgw) { $group{$word}{$lcgw} = $group{$word}{$gword}; @@ -441,7 +441,7 @@ my (@summary, @credits); push @summary, " - $nb_files file(s) indexed by " . scalar @words . " word(s) on " . - localtime(), + gmtime($ENV{SOURCE_DATE_EPOCH}||time), " - max limit is " . $args{"limit"} . " xref(s) per word"; push @credits, Index: VTK-8.2.0/Utilities/Doxygen/doc_class2example.pl =================================================================== --- VTK-8.2.0.orig/Utilities/Doxygen/doc_class2example.pl +++ VTK-8.2.0/Utilities/Doxygen/doc_class2example.pl @@ -171,7 +171,7 @@ sub unique { foreach my $item (@$ref) { $uniques{$item}++; } - return keys %uniques; + return sort keys %uniques; } sub parse { @@ -506,7 +506,7 @@ my (@summary, @credits, @legend); push @summary, " - " . scalar @words . " class(es) in " . - scalar @parsable . " file(s) from directories matching \@c " . $args{"dirmatch"} . " on " . localtime(); + scalar @parsable . " file(s) from directories matching \@c " . $args{"dirmatch"} . " on " . gmtime($ENV{SOURCE_DATE_EPOCH}||time); push @summary, " - " . scalar @parsers . " parser(s) : [" . join(", ", @parsers) . "]"; Index: VTK-8.2.0/Utilities/Doxygen/doc_contributors.pl =================================================================== --- VTK-8.2.0.orig/Utilities/Doxygen/doc_contributors.pl +++ VTK-8.2.0/Utilities/Doxygen/doc_contributors.pl @@ -462,7 +462,7 @@ my $nb_removed = 0; foreach my $signature (sort { (scalar keys %{$log_revision_by_signature_file{$b}}) <=> (scalar keys %{$log_revision_by_signature_file{$a}}) } keys %log_revision_by_signature_file) { - my @files = keys %{$log_revision_by_signature_file{$signature}}; + my @files = sort keys %{$log_revision_by_signature_file{$signature}}; if (scalar @files > $args{"massive"}) { print " >> Removed: (" . scalar @files . ")\n " . @@ -521,7 +521,7 @@ $intermediate_time = time(); # Browse each file, each revision and use contribution -foreach my $file_name (keys %files_visited) { +foreach my $file_name (sort keys %files_visited) { # Check if file is part of a class group @@ -533,7 +533,7 @@ foreach my $file_name (keys %files_visit $classes{$class_name}{'creators'}{$log_by_file_revision{$file_name}{'1.1'}{'author'}} = 1; } - foreach my $revision (keys %{$log_by_file_revision{$file_name}}) { + foreach my $revision (sort keys %{$log_by_file_revision{$file_name}}) { my $author = $log_by_file_revision{$file_name}{$revision}{'author'}; @@ -603,7 +603,7 @@ while (@classes_names) { # Find the class header name my $source_header_name = undef; - foreach my $file_name (keys %{$classes{$class_name}{'files'}}) { + foreach my $file_name (sort keys %{$classes{$class_name}{'files'}}) { if ($file_name =~ m/\.h$/) { $source_header_name = $file_name; last; @@ -682,7 +682,7 @@ while (@classes_names) { if (exists $args{"cvsweb"}) { $doc .= "\n \@par CVS logs (CVSweb):\n"; - foreach my $file (keys %{$classes{$class_name}{'files'}}) { + foreach my $file (sort keys %{$classes{$class_name}{'files'}}) { my $shortname = get_short_relative_name($file, $args{"relativeto"}); my ($base, $dir, $ext) = fileparse($shortname, '\..*'); $doc .= ' - @htmlonly