| #!/usr/bin/perl -w | 
 |  | 
 | =head1 NAME | 
 |  | 
 | dh_gstscancodecs - enumerate and classify gstreamer codecs | 
 |  | 
 | =cut | 
 |  | 
 | use strict; | 
 | use Debian::Debhelper::Dh_Lib; | 
 | use File::Temp; | 
 |  | 
 | =head1 SYNOPSIS | 
 |  | 
 |   dh_gstscancodecs [debhelper options] | 
 |  | 
 | =head1 DESCRIPTION | 
 |  | 
 | This program is meant to assist in building a package that provides | 
 | codecs, demultiplexers and other media-handling components for | 
 | gstreamer-based applications. | 
 |  | 
 | dh_gstscancodecs generates substitution variable for debian/control, | 
 | by scanning libraries /usr/lib/gstreamer-1.0/*.so and | 
 | /usr/lib/$DEB_HOST_MULTIARCH/gstreamer-1.0/*.so. | 
 |  | 
 | The generated substitution variables are | 
 |  | 
 | =over 4 | 
 |  | 
 | =item gstreamer:Version | 
 |  | 
 | Should be added to XB-GStreamer-Version | 
 |  | 
 | =item gstreamer:Elements | 
 |  | 
 | Should be added to XB-GStreamer-Elements | 
 |  | 
 | =item gstreamer:Provides | 
 |  | 
 | Should be added to Provides | 
 |  | 
 | =item gstreamer:URISources | 
 |  | 
 | Should be added to XB-GStreamer-URI-Sources | 
 |  | 
 | =item gstreamer:URISinks | 
 |  | 
 | Should be added to XB-GStreamer-URI-Sinks | 
 |  | 
 | =item gstreamer:Encoders | 
 |  | 
 | Should be added to XB-GStreamer-Encoders | 
 |  | 
 | =item gstreamer:Decoders | 
 |  | 
 | Should be added to XB-GStreamer-Decoders | 
 |  | 
 | =back | 
 |  | 
 | This control fields will be used by the /usr/bin/gstreamer-codec-install | 
 | helper to install required missing GStreamer elements. | 
 |  | 
 | =head1 OPTIONS | 
 |  | 
 | The standard debhelper options are supported. | 
 |  | 
 | =cut | 
 |  | 
 | init(); | 
 |  | 
 | my $deb_host_multiarch = `dpkg-architecture -qDEB_HOST_MULTIARCH`; | 
 | chop $deb_host_multiarch; | 
 | $::pluginlibdirprefix = '/usr/lib/'.$deb_host_multiarch.'/gstreamer-'; | 
 | $::pluginlibdirlegacy = '/usr/lib/gstreamer-'; | 
 |  | 
 | foreach my $package (@{$dh{DOPACKAGES}}) { | 
 |   my $tmp = tmpdir($package); | 
 |  | 
 |   delsubstvar($package, "gstreamer:Version"); | 
 |   delsubstvar($package, "gstreamer:URISinks"); | 
 |   delsubstvar($package, "gstreamer:URISources"); | 
 |   delsubstvar($package, "gstreamer:Encoders"); | 
 |   delsubstvar($package, "gstreamer:Decoders"); | 
 |  | 
 |   foreach my $sodir (glob "$tmp$::pluginlibdirprefix* $tmp$::pluginlibdirlegacy*") { | 
 |     my $gstversion = $sodir; | 
 |     $gstversion =~ s/^$tmp$::pluginlibdirprefix//; | 
 |     $gstversion =~ s/^$tmp$::pluginlibdirlegacy//; | 
 |     verbose_print("# gstreamer version $gstversion"); | 
 |  | 
 |     my (undef, $tmpfile) = File::Temp::tempfile("/tmp/".basename($0).".XXXX", UNLINK => 1); | 
 |     my (undef, $registryfile) = File::Temp::tempfile("/tmp/".basename($0).".XXXX", UNLINK => 1); | 
 |  | 
 |     my $command="GST_REGISTRY=$registryfile GST_PLUGIN_SYSTEM_PATH= GST_PLUGIN_PATH=$sodir gst-codec-info-$gstversion " . join(' ', (glob "$sodir/*.so")) . " > $tmpfile"; | 
 |  | 
 |     system($command); | 
 |     if ($?) { | 
 |       my $output; | 
 |       { | 
 |           local *F; | 
 |           open(F, $tmpfile); | 
 |           local $/; | 
 |           $output = <F>; | 
 |           close(F); | 
 |       } | 
 |       die("gst-codec-info-$gstversion call failed: '".$command."' rc: $? output: $output"); | 
 |     } | 
 |  | 
 |     local *F; | 
 |     open(F, $tmpfile); | 
 |     my ($variable, $value); | 
 |     while(<F>) { | 
 |       $variable = $1 if /([a-zA-Z]*:[a-zA-Z]*)=/; | 
 |       $value = $2 if /([a-zA-Z]*:[a-zA-Z]*)=(.*)\n/; | 
 |       addsubstvar($package, $variable, $value); | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | =head1 SEE ALSO | 
 |  | 
 | L<debhelper(1)> | 
 |  | 
 | This program is an extension to debhelper. | 
 |  | 
 | =head1 AUTHOR | 
 |  | 
 | Ian Jackson <iwj@ubuntu.com> | 
 | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 
 |  | 
 | =cut |