]> git.donarmstrong.com Git - debhelper.git/blob - dh_auto_configure
Merge branch 'master' of ssh://git.debian.org/git/debhelper/debhelper
[debhelper.git] / dh_auto_configure
1 #!/usr/bin/perl -w
2
3 =head1 NAME
4
5 dh_auto_configure - automatically configure a package prior to building
6
7 =cut
8
9 use strict;
10 use Debian::Debhelper::Dh_Lib;
11
12 =head1 SYNOPSIS
13
14 B<dh_auto_configure> [S<I<debhelper options>>] [S<B<--> I<params>>]
15
16 =head1 DESCRIPTION
17
18 dh_auto_configure is a debhelper program that tries to automatically
19 configure a package prior to building. It looks for and runs a ./configure
20 script, Makefile.PL, or Build.PL. A standard set of parameters is
21 determined and passed to the program that is run. If no program to run is
22 found, dh_auto_configure will exit without doing anything.
23
24 This is intended to work for about 90% of packages. If it doesn't work,
25 you're encouraged to skip using dh_auto_configure at all, and just run
26 ./configure or its equivalent manually.
27
28 =head1 OPTIONS
29
30 =over 4
31
32 =item B<--> I<params>
33
34 Pass "params" to the program that is run, after the standard
35 parameters that dh_auto_configure passes. This can be used to supplement
36 or override those parameters. For example:
37
38   dh_auto_configure -- --with-foo --enable-bar
39
40 =back
41
42 =cut
43
44 init();
45
46 sub dpkg_architecture_value {
47         my $var=shift;
48         my $value=`dpkg-architecture -q$var 2>/dev/null` || error("dpkg-architecture failed");
49         chomp $value;
50         return $value;
51 }
52
53 sub sourcepackage {
54         open (CONTROL, 'debian/control') ||
55                 error("cannot read debian/control: $!\n");
56         while (<CONTROL>) {
57                 chomp;
58                 s/\s+$//;
59                 if (/^Source:\s*(.*)/) {
60                         close CONTROL;
61                         return $1;
62                 }
63         }
64
65         close CONTROL;
66         error("could not find Source: line in control file.");
67 }
68
69 if (-x "configure") {
70         # Standard set of options for configure.
71         my @opts;
72         push @opts, "--build=".dpkg_architecture_value("DEB_BUILD_GNU_TYPE");
73         push @opts, "--prefix=/usr";
74         push @opts, "--includedir=\${prefix}/include";
75         push @opts, "--mandir=\${prefix}/share/man";
76         push @opts, "--infodir=\${prefix}/share/info";
77         push @opts, "--sysconfdir=/etc";
78         push @opts, "--localstatedir=/var";
79         push @opts, "--libexecdir=\${prefix}/lib/".sourcepackage();
80         push @opts, "--disable-maintainer-mode";
81         push @opts, "--disable-dependency-tracking";
82         # Provide --host only if different from --build, as recommended in
83         # autotools-dev README.Debian: When provided (even if equal) autotools
84         # 2.52+ switches to cross-compiling mode.
85         if (dpkg_architecture_value("DEB_BUILD_GNU_TYPE") ne dpkg_architecture_value("DEB_HOST_GNU_TYPE")) {
86                 push @opts, "--host=".dpkg_architecture_value("DEB_HOST_GNU_TYPE");
87         }
88         doit("./configure", @opts, @{$dh{U_PARAMS}});
89 }
90 elsif (-e "Makefile.PL") {
91         # If set to a true value then MakeMaker's prompt function will
92         # # always return the default without waiting for user input.
93         $ENV{PERL_MM_USE_DEFAULT}=1;
94         doit("perl", "Makefile.PL", "INSTALLDIRS=vendor", "create_packlist=0", @{$dh{U_PARAMS}});
95 }
96 elsif (-e "Build.PL") {
97         $ENV{PERL_MM_USE_DEFAULT}=1; # Module::Build can also use this.
98         $ENV{MODULEBUILDRC} = "/dev/null";
99         doit("perl", "Build.PL", "installdirs=vendor", @{$dh{U_PARAMS}});
100 }
101
102 =head1 SEE ALSO
103
104 L<debhelper(7)>
105
106 This program is a part of debhelper.
107
108 =head1 AUTHOR
109
110 Joey Hess <joeyh@debian.org>
111
112 =cut