]> 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. These can be used to supplement
35 or override the standard parameters that dh_auto_configure passes.
36
37 =back
38
39 =cut
40
41 init();
42
43 sub dpkg_architecture_value {
44         my $var=shift;
45         my $value=`dpkg-architecture -q$var 2>/dev/null` || error("dpkg-architecture failed");
46         chomp $value;
47         return $value;
48 }
49
50 sub sourcepackage {
51         open (CONTROL, 'debian/control') ||
52                 error("cannot read debian/control: $!\n");
53         while (<CONTROL>) {
54                 chomp;
55                 s/\s+$//;
56                 if (/^Source:\s*(.*)/) {
57                         close CONTROL;
58                         return $1;
59                 }
60         }
61
62         close CONTROL;
63         error("could not find Source: line in control file.");
64 }
65
66 if (-x "configure") {
67         # Standard set of options for configure.
68         my @opts;
69         push @opts, "--build=".dpkg_architecture_value("DEB_BUILD_GNU_TYPE");
70         push @opts, "--prefix=/usr";
71         push @opts, "--includedir=\${prefix}/include";
72         push @opts, "--mandir=\${prefix}/share/man";
73         push @opts, "--infodir=\${prefix}/share/info";
74         push @opts, "--sysconfdir=/etc";
75         push @opts, "--localstatedir=/var";
76         push @opts, "--libexecdir=\${prefix}/lib/".sourcepackage();
77         push @opts, "--disable-maintainer-mode";
78         push @opts, "--disable-dependency-tracking";
79         # Provide --host only if different from --build, as recommended in
80         # autotools-dev README.Debian: When provided (even if equal) autotools
81         # 2.52+ switches to cross-compiling mode.
82         if (dpkg_architecture_value("DEB_BUILD_GNU_TYPE") ne dpkg_architecture_value("DEB_HOST_GNU_TYPE")) {
83                 push @opts, "--host=".dpkg_architecture_value("DEB_HOST_GNU_TYPE");
84         }
85         doit("./configure", @opts, @{$dh{U_PARAMS}});
86 }
87 elsif (-e "Makefile.PL") {
88         # If set to a true value then MakeMaker's prompt function will
89         # # always return the default without waiting for user input.
90         $ENV{PERL_MM_USE_DEFAULT}=1;
91         doit("perl", "Makefile.PL", "INSTALLDIRS=vendor", @{$dh{U_PARAMS}});
92 }
93 elsif (-e "Build.PL") {
94         $ENV{PERL_MM_USE_DEFAULT}=1; # Module::Build can also use this.
95         $ENV{MODULEBUILDRC} = "/dev/null";
96         doit("perl", "Build.PL", "installdirs=vendor", @{$dh{U_PARAMS}});
97 }
98
99 =head1 SEE ALSO
100
101 L<debhelper(7)>
102
103 This program is a part of debhelper.
104
105 =head1 AUTHOR
106
107 Joey Hess <joeyh@debian.org>
108
109 =cut