#!/scratchbox/tools/bin/perl -w

=head1 NAME

dh_bugfiles - install bug reporting customization files into package build directories

=cut

use strict;
use Debian::Debhelper::Dh_Lib;

=head1 SYNOPSIS

B<dh_bugfiles> [B<-A>] [S<I<debhelper options>>]

=head1 DESCRIPTION

dh_bugfiles is a debhelper program that is responsible for installing
bug reporting customization files (bug scripts and/or bug control files
and/or presubj files) into package build directories.

=head1 FILES

=over 4

=item debian/I<package>.bug-script

This is the script to be run by the bug reporting program for generating a bug
report template. This file is installed as F<usr/share/bug/package> in the
package build directory if no other types of bug reporting customization
files are going to be installed for the package in question. Otherwise,
this file is installed as F<usr/share/bug/package/script>. Finally, the
installed script is given execute permissions.

=item debian/I<package>.bug-control

It is the bug control file containing some directions for the bug reporting
tool. This file is installed as F<usr/share/bug/package/control> in the
package build directory.

=item debian/I<package>.bug-presubj

The contents of this file are displayed to the user by the bug reporting
tool before allowing the user to write a bug report on the package to the
Debian Bug Tracking System. This file is installed as
F<usr/share/bug/package/presubj> in the package build directory.

=back

=head1 OPTIONS

=over 4

=item B<-A>, B<--all>

Install debian/bug-* files to ALL packages acted on when respective
debian/package.bug-* files do not exist. Normally, debian/bug-* will
be installed to the first package only.

=back

=cut

init();

# Types of bug files this debhelper program handles.
# Hash value is the name of the pkgfile of the respective
# type.
my %bugfile_types = (
	"script" => "bug-script",
	"control" => "bug-control",
	"presubj" => "bug-presubj",
);

foreach my $package (@{$dh{DOPACKAGES}}) {
	next if is_udeb($package);

	my $tmp=tmpdir($package);
	my $dir="$tmp/usr/share/bug/$package";
	
	# Gather information which bug files are available for the
	# package in question
	my %bugfiles=();
	while (my ($type, $pkgfilename) = each(%bugfile_types)) {
		my $file=pkgfile($package,$pkgfilename);
		if ($file) {
			$bugfiles{$type}=$file;
		} elsif (-f "debian/$pkgfilename" && $dh{PARAMS_ALL}) {
			$bugfiles{$type}="debian/$pkgfilename";
		}
	}
	
	# If there is only a bug script to install, install it as
	# usr/share/bug/$package (unless this path is a directory)
	if (! -d $dir && scalar(keys(%bugfiles)) == 1 && exists $bugfiles{script}) {
		doit("install","-D","-p","-m755",$bugfiles{script},$dir);
	}
	elsif (scalar(keys(%bugfiles)) > 0) {
		if (-f $dir) {
			# Move usr/share/bug/$package to usr/share/bug/$package/script
			doit("mv", $dir, "${dir}.tmp");
			doit("install","-d",$dir);
			doit("mv", "${dir}.tmp", "$dir/script");
		}
		elsif (! -d $dir) {
			doit("install","-d",$dir);
		}
		while (my ($type, $srcfile) = each(%bugfiles)) {
			doit("install","-p","-m644",$srcfile, "$dir/$type");
		}
	}
	
	# Ensure that the bug script is executable
	if (-f $dir) {
		chmod 0755, $dir;
	}
	elsif (-f "$dir/script") {
		chmod 0755, "$dir/script";
	}
}

=head1 SEE ALSO

F</usr/share/doc/reportbug/README.developers.gz>

L<debhelper(1)>

This program is a part of debhelper.

=head1 AUTHOR

Modestas Vainius <modestas@vainius.eu>

=cut
