Make find_header also search in /usr/include/qt4
[serna.git] / tools / buildsys / 3rd / pkg-utils.t
1 #!
2 #${
3
4 sub find_package {
5     my ($pkgName) = @_;
6     my $pkg = {};
7     my $cflags = `pkg-config --cflags-only-other $pkgName`;
8
9     unless ($?) {
10         my $libs = `pkg-config --libs-only-l $pkgName`;
11         my $lflags = `pkg-config --libs-only-other $pkgName`;
12         my $includes = `pkg-config --cflags-only-I $pkgName`;
13         grep { chomp $_ } ($cflags, $lflags, $libs, $includes );
14         my @libs = grep { s/^-l// } (split /\s+/, $libs);
15         my @includes = grep { s/^-I// } (split /\s+/, $includes);
16
17         $pkg->{"NAME"} = $pkgName;
18         $pkg->{"CFLAGS"} = $cflags;
19         $pkg->{"LFLAGS"} = $lflags;
20         $pkg->{"LIBS"} = join(' ', @libs);
21         $pkg->{"INCLUDES"} = join(' ', @includes);
22     }
23     return $pkg;
24 }
25
26 sub dump_package {
27     my ($pkg) = @_;
28     my @info;
29     foreach (keys %{$pkg}) {
30         push @info, "$_\t\t= $pkg->{$_}";
31     }
32     return '' unless @info;
33     return join("\n", @info)."\n";
34 }
35
36 sub write_package {
37     my ($file, $pkg) = @_;
38     my $pkgDump = dump_package($pkg);
39     return unless $pkgDump;
40     open(PKG, ">$file") or tmake_error("Can't open $file for writing");
41     print PKG $pkgDump;
42     close(PKG);
43 }
44
45 sub find_file_in_path {
46     my ($file) = shift;
47     my ($found, $fpath, $fdir);
48     foreach (@_) {
49         tmake_debug("try: $_/$file: ", -f "$_/$file", "\n");
50         if (-f "$_/$file") {
51             $fdir = "$_/$file";
52             $fdir =~ s|[/\\][^/\\]*$||;
53             $found = "$_/$file";
54             $fpath = $_;
55             last;
56         }
57     }
58
59     return map { s|[/\\]+|$dir_sep|g; $_ } ($found, $fpath, $fdir);
60 }
61
62 sub find_library {
63     my ($libname) = @_;
64     my ($found, $fpath, $fdir) = find_file_in_path("lib$libname.so", '/lib',
65                                                    '/usr/lib');
66     return ($fpath, $fdir);
67 }
68
69 sub find_header {
70     my ($header) = @_;
71     my ($found, $fpath, $fdir) = find_file_in_path($header, '/usr/include', '/usr/include/qt4');
72     return ($fpath, $fdir);
73 }
74
75 sub find_package_by_config {
76     my ($pkgName, $config) = @_;
77     my @libs = split /\s+/, `$config --libs`;
78
79     unless ($?) {
80         $pkg->{'NAME'} = $pkgName;
81         my @cflags = split /\s+/, `$config --cflags`;
82         my @lflags = grep { !/^-l/ && '-L/usr/lib' ne $_ } (@libs);
83         @libs = grep { /^-l/ } (@libs);
84         grep { s/^-l// } (@libs);
85         my @includes = grep { /^-I/ } (@cflags);
86         my @othercflags = grep { !/^-I/ } (@cflags);
87         $pkg->{'LIBS'} = join(' ', @libs);
88         $pkg->{'CFLAGS'} = join(' ', @othercflags) if @othercflags;
89         $pkg->{'LFLAGS'} = join(' ', @lflags) if @lflags;
90         $pkg->{'INCLUDES'} = join(' ', grep { s/^-I// } (@cflags));
91     }
92     return $pkg;
93 }
94
95 sub find_package_by_files {
96     my ($header, $lib) = @_;
97     my $pkg = {};
98     my ($incdir, $incSubdir) = find_header($header);
99     return unless $incdir;
100     my ($libdir, $libSubdir) = find_library($lib);
101     return unless $libdir;
102     $incdir =~ s^/+^/^g;
103     $pkg->{"LFLAGS"} = "-L$libdir" unless $libdir eq '/usr/lib';
104     $pkg->{"LIBS"} = $lib;
105     my $includes = '';
106     foreach ($incdir, $incSubdir) {
107         $includes .= " $_" unless $_ eq '/usr/include';
108     }
109     $pkg->{"INCLUDES"} = $includes if $includes;
110     return $pkg;
111 }
112
113 #$}