| #!/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 |