#!/usr/bin/perl =head1 NAME dh_gencontrol - generate and install control file =cut use strict; use warnings; use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS B [S>] [S I>] =head1 DESCRIPTION B is a debhelper program that is responsible for generating control files, and installing them into the I directory with the proper permissions. This program is merely a wrapper around L, which calls it once for each package being acted on (plus related ddebs), and passes in some additional useful flags. B that if you use B, you must also use L to build the packages. Otherwise, your build may fail to build as B (via L) declares which packages are built. As debhelper automatically generates ddebs, it some times adds additional packages, which will be built by L. =head1 OPTIONS =over 4 =item B<--> I Pass I to L. =item B<-u>I, B<--dpkg-gencontrol-params=>I This is another way to pass I to L. It is deprecated; use B<--> instead. =back =cut init(options => { "dpkg-gencontrol-params=s", => \$dh{U_PARAMS}, }); my $src_pkg; foreach my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); my $ext=pkgext($package); my $ddeb_info_dir = "debian/.debhelper/${package}"; my $ddeb_tmp = "${ddeb_info_dir}/ddeb-root"; my $substvars="debian/${ext}substvars"; my $changelog=pkgfile($package,'changelog'); if (! $changelog) { $changelog='debian/changelog'; } if ( ! -d "$tmp/DEBIAN" ) { install_dir("$tmp/DEBIAN"); } # avoid gratuitous warning if (! -e $substvars || system("grep -q '^misc:Depends=' $substvars") != 0) { complex_doit("echo misc:Depends= >> $substvars"); } # avoid (another) gratuitous warning if (! -e $substvars || system("grep -q '^misc:Pre-Depends=' $substvars") != 0) { complex_doit("echo misc:Pre-Depends= >> $substvars"); } if ( -d $ddeb_tmp) { my $multiarch = package_multiarch($package); my $replaces = read_ddeb_migration($ddeb_info_dir); $src_pkg = sourcepackage() if not defined($src_pkg); # Remove and override more or less every standard field. my @ddeb_options = (qw( -UPre-Depends -URecommends -USuggests -UEnhances -UProvides -UEssential -UConflicts -DPriority=extra -DSection=debugsym ), "-DPackage=${package}-dbgsym", "-DDepends=${package} (= \${binary:Version})", "-DDescription=Debug symbols for ${package}", "-DSource=${src_pkg}", ); # Disable multi-arch unless the original package is an # multi-arch: same package. In all other cases, we do not # need a multi-arch value. if ($multiarch ne 'same') { push(@ddeb_options, '-UMulti-Arch'); } # If the ddeb is replacing an existing -dbg package, then # declare the necessary Breaks + Replaces. Otherwise, clear # the fields. if ($replaces) { push(@ddeb_options, "-DReplaces=${replaces}", "-DBreaks=${replaces}"); } else { push(@ddeb_options, '-UReplaces', '-UBreaks'); } if ( ! -d "${ddeb_tmp}/DEBIAN" ) { install_dir("${ddeb_tmp}/DEBIAN"); } doit("dpkg-gencontrol", "-p${package}", "-l$changelog", "-T$substvars", "-P${ddeb_tmp}",@{$dh{U_PARAMS}}, @ddeb_options); doit("chmod","0644","${ddeb_tmp}/DEBIAN/control"); doit("chown","0:0","${ddeb_tmp}/DEBIAN/control"); } # Generate and install control file. doit("dpkg-gencontrol", "-p$package", "-l$changelog", "-T$substvars", "-P$tmp",@{$dh{U_PARAMS}}); # This chmod is only necessary if the user sets the umask to # something odd. doit("chmod","0644","$tmp/DEBIAN/control"); doit("chown","0:0","$tmp/DEBIAN/control"); } sub read_ddeb_migration { my ($ddeb_info_dir) = @_; my $ddeb_migration = "${ddeb_info_dir}/ddeb-migration"; my $result; if (-f $ddeb_migration) { open(my $fd, '<', $ddeb_migration) or error("open $ddeb_migration failed: $!"); chomp($result = <$fd>); close($fd); } return $result; } =head1 SEE ALSO L This program is a part of debhelper. =head1 AUTHOR Joey Hess =cut # Local Variables: # indent-tabs-mode: t # tab-width: 4 # cperl-indent-level: 4 # End: