This file is indexed.

/usr/bin/dh_strip_nondeterminism is in dh-strip-nondeterminism 0.040-1.1~build1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/perl -w

=head1 NAME

dh_strip_nondeterminism - strip uninteresting, nondeterministic information from files

=cut

use strict;
use B;
use File::Find;
use Debian::Debhelper::Dh_Lib;
use File::StripNondeterminism;
use Date::Parse;

=head1 SYNOPSIS

B<dh_strip_nondeterminism> [S<I<debhelper options>>] [B<-X>I<item>]

=head1 DESCRIPTION

B<dh_strip_nondeterminism> is a debhelper program that is responsible
for stripping uninteresting, nondeterministic information, such as
timestamps, from compiled files so that the build is reproducible.

This program examines your package build directories and works out what
to strip on its own. It uses L<file(1)> and filenames to figure out what
files should have nondeterminism stripped from them.  In general it
seems to make very good guesses, and will do the right thing in almost
all cases.

=head1 OPTIONS

=over 4

=item B<-X>I<item>, B<--exclude=>I<item>

Exclude files that contain I<item> anywhere in their filename from being
stripped. You may use this option multiple times to build up a list of
things to exclude.

=back

=cut

init();

my @nondeterministic_files;

sub testfile {
	return if -l $_ or -d $_; # Skip directories and symlinks always.

	# See if we were asked to exclude this file.
	# Note that we have to test on the full filename, including directory.
	my $fn="$File::Find::dir/$_";
	foreach my $f (@{$dh{EXCLUDE}}) {
		return if ($fn=~m/\Q$f\E/);
	}

	my $normalizer = File::StripNondeterminism::get_normalizer_for_file($_);
	if ($normalizer) {
		push @nondeterministic_files, [$fn, $normalizer];
	}
}

sub handler_name {
	eval {
		my $obj = B::svref_2object(shift());
		return $obj->GV->STASH->NAME;
	} || "unknown handler";
}

File::StripNondeterminism::init();

foreach my $package (@{$dh{DOPACKAGES}}) {
	my $tmp=tmpdir($package);

	next if not -d $tmp;

	@nondeterministic_files=();
	find(\&testfile,$tmp);
	next unless @nondeterministic_files;

	$File::StripNondeterminism::canonical_time
	  = eval { get_source_date_epoch() };
	if (not defined $File::StripNondeterminism::canonical_time) {
		# Hack for old versions of debhelper
		isnative($package); # Sets $dh{DATE} as a side-effect
		$File::StripNondeterminism::canonical_time = str2time($dh{DATE});
	}

	verbose_print("Using $File::StripNondeterminism::canonical_time as canonical time");

	foreach (@nondeterministic_files) {
		my ($path, $normalize) = @$_;
		verbose_print("Normalizing $path using " . handler_name($normalize));
		eval { $normalize->($path) or nonquiet_print("Normalized $path"); 1; }
		  or error("$path: $@");
	}
}

=head1 SEE ALSO

L<debhelper(7)>

This program is a part of debhelper.

=head1 AUTHORS

Andrew Ayer <agwa@andrewayer.name>
Chris Lamb <lamby@debian.org>

=cut