DEBIAN: Debianization
[glsdk/gstreamer0-10.git] / debian / dh_gstscancodecs
1 #!/usr/bin/perl -w
3 =head1 NAME
5 dh_gstscancodecs - enumerate and classify gstreamer codecs
7 =cut
9 use strict;
10 use Debian::Debhelper::Dh_Lib;
11 use File::Temp;
13 =head1 SYNOPSIS
15   dh_gstscancodecs [debhelper options]
17 =head1 DESCRIPTION
19 This program is meant to assist in building a package that provides
20 codecs, demultiplexers and other media-handling components for
21 gstreamer-based applications.
23 dh_gstscancodecs generates substitution variable for debian/control,
24 by scanning libraries /usr/lib/gstreamer-0.10/*.so and
25 /usr/lib/$DEB_HOST_MULTIARCH/gstreamer-0.10/*.so.
27 The generated substitution variables are
29 =over 4
31 =item gstreamer:Version
33 Should be added to XB-GStreamer-Version
35 =item gstreamer:Elements
37 Should be added to XB-GStreamer-Elements
39 =item gstreamer:Provides
41 Should be added to Provides
43 =item gstreamer:URISources
45 Should be added to XB-GStreamer-URI-Sources
47 =item gstreamer:URISinks
49 Should be added to XB-GStreamer-URI-Sinks
51 =item gstreamer:Encoders
53 Should be added to XB-GStreamer-Encoders
55 =item gstreamer:Decoders
57 Should be added to XB-GStreamer-Decoders
59 =back
61 This control fields will be used by the /usr/bin/gstreamer-codec-install
62 helper to install required missing GStreamer elements.
64 =head1 OPTIONS
66 The standard debhelper options are supported.
68 =cut
70 init();
72 my $deb_host_multiarch = `dpkg-architecture -qDEB_HOST_MULTIARCH`;
73 chop $deb_host_multiarch;
74 $::pluginlibdirprefix = '/usr/lib/'.$deb_host_multiarch.'/gstreamer-';
75 $::pluginlibdirlegacy = '/usr/lib/gstreamer-';
77 foreach my $package (@{$dh{DOPACKAGES}}) {
78   my $tmp = tmpdir($package);
80   delsubstvar($package, "gstreamer:Version");
81   delsubstvar($package, "gstreamer:URISinks");
82   delsubstvar($package, "gstreamer:URISources");
83   delsubstvar($package, "gstreamer:Encoders");
84   delsubstvar($package, "gstreamer:Decoders");
86   foreach my $sodir (glob "$tmp$::pluginlibdirprefix* $tmp$::pluginlibdirlegacy*") {
87     my $gstversion = $sodir;
88     $gstversion =~ s/^$tmp$::pluginlibdirprefix//;
89     $gstversion =~ s/^$tmp$::pluginlibdirlegacy//;
90     verbose_print("# gstreamer version $gstversion");
92     my (undef, $tmpfile) = File::Temp::tempfile("/tmp/".basename($0).".XXXX", UNLINK => 1);
93     my (undef, $registryfile) = File::Temp::tempfile("/tmp/".basename($0).".XXXX", UNLINK => 1);
95     my $command="GST_REGISTRY=$registryfile GST_PLUGIN_SYSTEM_PATH= GST_PLUGIN_PATH=$sodir gst-codec-info-$gstversion " . join(' ', (glob "$sodir/*.so")) . " > $tmpfile";
97     system($command);
98     if ($?) {
99       my $output;
100       {
101           local *F;
102           open(F, $tmpfile);
103           local $/;
104           $output = <F>;
105           close(F);
106       }
107       die("gst-codec-info-$gstversion call failed: '".$command."' rc: $? output: $output");
108     }
110     local *F;
111     open(F, $tmpfile);
112     my ($variable, $value);
113     while(<F>) {
114       $variable = $1 if /([a-zA-Z]*:[a-zA-Z]*)=/;
115       $value = $2 if /([a-zA-Z]*:[a-zA-Z]*)=(.*)\n/;
116       addsubstvar($package, $variable, $value);
117     }
118   }
121 =head1 SEE ALSO
123 L<debhelper(1)>
125 This program is an extension to debhelper.
127 =head1 AUTHOR
129 Ian Jackson <iwj@ubuntu.com>
130 Sebastian Dröge <sebastian.droege@collabora.co.uk>
132 =cut