summaryrefslogtreecommitdiff
path: root/dh_installdirs
blob: 8d33b10e5f3d71501e0fc0a337d8008af3b4412a (plain)
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/perl

=head1 NAME

dh_installdirs - create subdirectories in package build directories

=cut

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

our $VERSION = DH_BUILTIN_VERSION;

=head1 SYNOPSIS

B<dh_installdirs> [S<I<debhelper options>>] [B<-A>] [B<--sourcedir=>I<dir>] [B<--create-in-sourcedir>] [S<I<dir> ...>]

=head1 DESCRIPTION

B<dh_installdirs> is a debhelper program that is responsible for creating
subdirectories in package build directories.

Many packages can get away with omitting the call to B<dh_installdirs>
completely.  Notably, other B<dh_*> commands are expected to create
directories as needed.

=head1 FILES

=over 4

=item debian/I<package>.dirs

Lists directories to be created in I<package>.

Generally, there is no need to list directories created by the
upstream build system or directories needed by other B<debhelper>
commands.

Supports substitution variables in compat 13 and later as
documented in L<debhelper(7)>.

=back

=head1 OPTIONS

=over 4

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

Create any directories specified by command line parameters in ALL packages
acted on, not just the first.

=item B<--create-in-sourcedir>, B<--no-create-in-sourcedir>

Whether to create the specified directories in the source directory
(usually F<debian/tmp>) I<in addition to> in the package build directory
(usually F<< debian/I<package> >>).

The default is B<--no-create-in-sourcedir>.

=item B<--sourcedir=>I<dir>

Consider I<dir> the source directory for the packages acted on instead
of the default (which is usually F<debian/tmp>).

Please note that this option is dependent on the
B<--create-in-sourcedir> option (when B<--no-create-in-sourcedir> is
in effect, this option does nothing in B<dh_installdirs>).

=item I<dir> ...

Create these directories in the package build directory of the first
package acted on. (Or in all packages if B<-A> is specified.)

=back

=cut

my $create_in_sourcedir = 0;

init(options => {
	'sourcedir=s' => \$dh{SOURCEDIR},
	'create-in-sourcedir!' => \$create_in_sourcedir,
});

# PROMISE: DH NOOP WITHOUT dirs cli-options()

foreach my $package (@{$dh{DOPACKAGES}}) {
	my $tmp=tmpdir($package);
	my $file=pkgfile($package,"dirs");
	my $srcdir = $dh{SOURCEDIR} // default_sourcedir($package);

	install_dir($tmp) if compat(10);

	my @dirs;

	if ($file) {
		@dirs=filearray($file)
	}

	if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
		push @dirs, @ARGV;
	}	

	if (@dirs) {
		# Stick the $tmp onto the front of all the dirs.
		# This is necessary, for 2 reasons, one to make them 
		# be in the right directory, but more importantly, it 
		# protects against the danger of absolute dirs being
		# specified.
		my @make_dirs;
		push(@make_dirs, map {
				my $dir = "$tmp/$_";
				$dir =~ tr:/:/:s; # just beautification.
				$dir;
			} @dirs);
		if ($create_in_sourcedir) {
			push(@make_dirs, map {
					my $dir = "${srcdir}/$_";
					$dir =~ tr:/:/:s; # just beautification.
					$dir;
				} @dirs);
		}

		# Create dirs.
		install_dir(@make_dirs);
	}
}

=head1 SEE ALSO

L<debhelper(7)>

This program is a part of debhelper.

=head1 AUTHOR

Joey Hess <joeyh@debian.org>

=cut