X-Git-Url: https://git.donarmstrong.com/?p=debhelper.git;a=blobdiff_plain;f=dh_installdeb;h=def76d16cbf1329952d3133c5cbe799c6490e51e;hp=a97fc00943f88688a9e2aeb3eb4967ece23cd896;hb=fb8f18f4a98669c3b85e1bd7920fbabfc00b886e;hpb=86f2aaedb73761e58b50f0f8bcc608e49204407c diff --git a/dh_installdeb b/dh_installdeb index a97fc00..def76d1 100755 --- a/dh_installdeb +++ b/dh_installdeb @@ -11,90 +11,126 @@ use Debian::Debhelper::Dh_Lib; =head1 SYNOPSIS - dh_installdeb [debhelper options] +B [S>] =head1 DESCRIPTION -dh_installdeb is a debhelper program that is responsible for installing -files into the DEBIAN directories in package build directories with the +B is a debhelper program that is responsible for installing +files into the F directories in package build directories with the correct permissions. -dh_installdeb automatically installs the following files from debian/ into -the DEBIAN directory: - package.postinst - package.preinst - package.postrm - package.prerm - package.shlibs - package.conffiles - -The postinst, preinst, postrm, and prerm are handled specially: If a -corresponding file named debian/script.debhelper exists, the contents of that -file are merged into the script as follows: If the script exists, then -anywhere in it that "#DEBHELPER#" appears, the text of the .debhelper file is -inserted. If the script does not exist, then a script is generated from -the .debhelper file. The .debhelper files are created by other debhelper -programs, such as L, and are shell script fragments. - -If DH_COMPAT is set to 3 or higher, all files in the etc/ directory in a +=head1 FILES + +=over 4 + +=item I.postinst + +=item I.preinst + +=item I.postrm + +=item I.prerm + +These maintainer scripts are installed into the F directory. + +Inside the scripts, the token B<#DEBHELPER#> is replaced with +shell script snippets generated by other debhelper commands. + +=item I.triggers + +=item I.shlibs + +These control files are installed into the F directory. + +=item I.conffiles + +This control file will be installed into the F directory. + +In v3 compatibility mode and higher, all files in the F directory in a package will automatically be flagged as conffiles by this program, so -there is no need to list them manually in package.conffiles. +there is no need to list them manually here. + +=item I.maintscript + +Lines in this file correspond to L commands and +parameters. Any shell metacharacters will be escaped, so arbitrary shell +code cannot be inserted here. For example, a line such as C will insert maintainer script snippets +into all maintainer scripts sufficient to move that conffile. + +A versioned Pre-Dependency on dpkg is needed to use +L. An appropriate Pre-Dependency is +set in ${misc:Pre-Depends} ; you should make sure to put that token into +an appropriate place in your debian/control file. + +=back =cut init(); +# dpkg-maintscript-helper commands with their associated dpkg pre-dependency +# versions. +my %maintscript_predeps = ( + "rm_conffile" => "1.15.7.2", + "mv_conffile" => "1.15.7.2", +); + foreach my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); - my $ext=pkgext($package); if (! -d "$tmp/DEBIAN") { doit("install","-o",0,"-g",0,"-d","$tmp/DEBIAN"); } - # Install debian install scripts. - # If any .debhelper files exist, add them into the scripts. - foreach my $file (qw{postinst preinst prerm postrm}) { - my $f=pkgfile($package,$file); - if ($f) { - if (-f "debian/$ext$file.debhelper") { - # Add this into the script, where it has - # #DEBHELPER# - # TODO: do internally, no perl fork? - complex_doit("perl -pe 's~#DEBHELPER#~qx{cat debian/$ext$file.debhelper}~eg' < $f > $tmp/DEBIAN/$file"); - } - else { - # Just get rid of any #DEBHELPER# in the - # script. - complex_doit("sed s/#DEBHELPER#// < $f > $tmp/DEBIAN/$file"); + if (is_udeb($package)) { + # For udebs, only do the postinst, and no #DEBHELPER#. + # Udebs also support menutest and isinstallable scripts. + foreach my $script (qw{postinst menutest isinstallable}) { + my $f=pkgfile($package,$script); + if ($f) { + doit("install", "-o", 0, "-g", 0, "-m", 755, + $f, "$tmp/DEBIAN/$script"); } - doit("chown","0.0","$tmp/DEBIAN/$file"); - doit("chmod",755,"$tmp/DEBIAN/$file"); } - else { - # Auto-generate script header and add .debhelper - # content to it. - if (-f "debian/$ext$file.debhelper") { - complex_doit("echo '#!/bin/sh -e' > $tmp/DEBIAN/$file"); - complex_doit("cat debian/$ext$file.debhelper >> $tmp/DEBIAN/$file"); - doit("chown","0.0","$tmp/DEBIAN/$file"); - doit("chmod",755,"$tmp/DEBIAN/$file"); + next; + } + + my $maintscriptfile=pkgfile($package, "maintscript"); + if ($maintscriptfile) { + foreach my $line (filedoublearray($maintscriptfile)) { + my $cmd=$line->[0]; + error("unknown dpkg-maintscript-helper command: $cmd") + unless exists $maintscript_predeps{$cmd}; + addsubstvar($package, "misc:Pre-Depends", "dpkg", + ">= $maintscript_predeps{$cmd}"); + my $params=escape_shell(@$line); + foreach my $script (qw{postinst preinst prerm postrm}) { + autoscript($package, $script, "maintscript-helper", + "s!#PARAMS#!$params!g"); } } } - # Install non-executable files - foreach my $file (qw{shlibs conffiles}) { - my $f=pkgfile($package,$file); - if ($f) { - doit("install","-o",0,"-g",0,"-m",644,"-p",$f,"$tmp/DEBIAN/$file"); + # Install debian scripts. + foreach my $script (qw{postinst preinst prerm postrm}) { + debhelper_script_subst($package, $script); + } + + if (! is_udeb($package)) { + # Install non-executable files + foreach my $file (qw{shlibs conffiles triggers}) { + my $f=pkgfile($package,$file); + if ($f) { + doit("install","-o",0,"-g",0,"-m",644,"-p",$f,"$tmp/DEBIAN/$file"); + } } } # Automatic conffiles registration: If it is in /etc, it is a # conffile. - if (! compat(2) && -d "$tmp/etc") { - complex_doit("find $tmp/etc -type f |sed 's~^$tmp~~' >> $tmp/DEBIAN/conffiles"); + if (! compat(2) && -d "$tmp/etc" && ! is_udeb($package)) { + complex_doit("find $tmp/etc -type f -printf '/etc/%P\n' >> $tmp/DEBIAN/conffiles"); # Anything found? if (-z "$tmp/DEBIAN/conffiles") { doit("rm", "-f", "$tmp/DEBIAN/conffiles"); @@ -107,7 +143,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) { =head1 SEE ALSO -L +L This program is a part of debhelper.