This is an automated email from the git hooks/post-receive script. js pushed a commit to branch master in repository libgd-perl.
commit 00c2da3dee7f64fd76ba6b7270cdeb23a0f0b096 Author: Jonas Smedegaard <d...@jones.dk> Date: Fri Jun 6 10:46:04 2014 +0200 Extract metadata from images and fonts before copyright check (don't just skip check them). --- debian/license-miner | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++ debian/rules | 23 +++++- 2 files changed, 226 insertions(+), 2 deletions(-) diff --git a/debian/license-miner b/debian/license-miner new file mode 100644 index 0000000..3cf50f8 --- /dev/null +++ b/debian/license-miner @@ -0,0 +1,205 @@ +#! /usr/bin/perl + +use autodie; +use strict; +use utf8; +use warnings qw(all); +use feature 'say'; + +use Getopt::Long; +use Pod::Usage; +use FileHandle; +use Regexp::Assemble; +use Image::ExifTool; +use Font::TTF::Font; + +=head1 NAME + +license-miner - extract copyright/licensing info from complex files + +=head1 SYNOPSIS + +license-miner [B<options>] [F<path>|inspector:F<path>...] + +=head1 OPTIONS + +=over 12 + +=item B<--help> + +Print a brief help message and exits. + +=item B<--man> + +Prints the manual page and exits. + +=item B<--verbose> + +Prints names of paths and the inspector used. + +=item B<--debug> + +Prints extracted info. + +=back + +=head1 DESCRIPTION + +B<This program> will inspect files, +extract their copyright and licensing info, +and save the result next to the files +(adding suffix "F<.metadata_dump>"). + +File paths are provided either as arguments +or (if no arguments provided) from STDIN. + +Each path may optionally be prefixed with an inspector to use. +Default is to pick inspector based on file suffix. + +=head1 INSPECTORS + +Available inspectors are B<ttf> and B<exif>. + +=over 12 + +=item B<ttf> + +TrueType fonts (including Truetype-flavored OpenType and WOFF). + +Used by default for extensions F<.ttf>, F<.otf>, F<woff>. + +Beware that some OpenType fonts are not TrueType but Type1, +which may fail to parse correctly based on suffix detection. +If that happens, try force using the exif inspector +by prefixing the path with "exif:". + +=item B<exif> + +misc. images and fonts. + +Used by default for extensions F<.pdf>, F<.png>, F<.jpg>, F<jpeg>, F<gif>, F<icc>. + +Beware that some OpenType fonts are not TrueType but Type1, +which may fail to parse correctly based on suffix detection. +If that happens, try force using the exif inspector +by prefixing the path with "exif:". + +=back + +=cut + +# avoid custom configuration of ExifTool +BEGIN { $Image::ExifTool::configFile = '' } + +GetOptions( help => \my $help, + man => \my $man, + verbose => \my $verbose, + debug => \my $debug, +) or pod2usage(2); +pod2usage( -verbose => 1 ) if $help; +pod2usage( -verbose => 2, -exitstatus => 0 ) if $man; + +# Fail if no paths provided as arguments and STDIN is interactive +pod2usage("$0: No paths provided.") if ((@ARGV == 0) && (-t STDIN)); + +my $dispatch = { + # TrueType fonts (including Truetype-flavored OpenType and WOFF) + '((?<=\Attf:).*|\A.*\.(?:ttf|otf|woff))$' => sub { + my $file = check_infile(shift); + say "ttf: $file" if ($verbose); + my $handle = ($debug) + ? *STDOUT{IO} + : FileHandle->new( check_outfile($file), 'w' ); + # source: http://scripts.sil.org/IWS-Chapter08#3054f18b + my %table = ( + Copyright => 0, + Trademark => 7, + License => 13, + 'License URL' => 14, + ); + my $font = Font::TTF::Font->open($file) or do { + say STDERR "ERROR: Failed to parse file as TrueType: $_"; + exit 1; + }; + my $fn = $font->{'name'}->read; + foreach (sort keys %table) { + my $value = $fn->find_name($table{$_}); + print $handle $_ . ": " . $value . "\n" + if ($value); + } + }, + # exif: misc. images and fonts + '((?<=\Aexif:).*|\A.*\.(?:pdf|png|jpg|jpeg|gif|icc))$' => sub { + my $file = check_infile(shift); + say "exif: $file" if ($verbose); + my $exifTool = new Image::ExifTool; + my $handle = ($debug) + ? *STDOUT{IO} + : FileHandle->new( check_outfile($file), 'w' ); + my $info = $exifTool->ImageInfo($file, + # tags to lookup (like `exiftool $file` in shell) + '*Copyright*', '*Licens*', '*Trademark*'); + my $seen; + foreach (sort keys %$info) { + my $tagdesc = $exifTool->GetDescription($_); + print $handle "$tagdesc: $$info{$_}\n"; + } + } +}; + +my $re = Regexp::Assemble->new( track => 1 )->add( keys %$dispatch ); + +while( <> ) { + chomp; + if( $re->match($_) ) { + $dispatch->{ $re->matched }( $re->mvar(1) ); + } + else { + say STDERR "ERROR: Unsupported or unparseable string: $_"; + say STDERR " maybe you need a prefix (e.g. \"exif:fonts/SomeType1Font\""; + exit 1; + } +} + +sub check_infile { + my $infile = shift; + unless ( -e $infile ) { + say STDERR "ERROR: file does not exist: $infile"; + exit 1; + } + return $infile; +} + +sub check_outfile { + my $infile = shift; + my $outfile = $infile . ".metadata_dump"; + if ( -e $outfile ) { + say STDERR "ERROR: dumpfile exist: $outfile"; + say STDERR " remove or put aside and try again"; + exit 1; + } + return $outfile; +} + +=head1 AUTHOR + +Jonas Smedegaard, C<< <d...@jones.dk> >> + +=head1 LICENSE AND COPYRIGHT + +Copyright 2014 Jonas Smedegaard + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3, or (at your option) any +later version. + +This program is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program. If not, see <http://www.gnu.org/licenses/>. + +=cut diff --git a/debian/rules b/debian/rules index 0e5485d..8291f91 100755 --- a/debian/rules +++ b/debian/rules @@ -38,8 +38,27 @@ oldpkgs-versioned = libgd-gd2-perl (<= 1:2.46-3.1), libgd-gd2-noxpm-perl (<= 1:2 CDBS_BREAKS_$(pkg) = $(oldpkgs-versioned) CDBS_REPLACES_$(pkg) = $(oldpkgs-versioned) -# Suppress some graphics (in addition to default stuff) -DEB_COPYRIGHT_CHECK_IGNORE_REGEX = ^(demos/font_list\.png|t/test.out.*|debian/(changelog|copyright(|_hints|_newhints)))$ +# extract metadata from images and fonts before copyright check +CDBS_BUILD_DEPENDS +=, libregexp-assemble-perl, libimage-exiftool-perl +CDBS_BUILD_DEPENDS +=, libfont-ttf-perl +local_inspection_regex = gif|jpeg|png|tif|ttf +local_inspection_exif_regex = png-.* +DEB_COPYRIGHT_CHECK_IGNORE_REGEX = ^((.*/)?[^/]+\.($(local_inspection_regex)|$(local_inspection_exif_regex))|debian/(changelog|copyright(|_hints|_newhints)))$$ +debian/stamp-copyright-check: debian/stamp-extract-copyright +debian/stamp-extract-copyright: + find * -type f -regextype posix-extended \ + -regex '.*\.($(local_inspection_regex))' \ + -print0 | perl -0 debian/license-miner + find * -type f -regextype posix-extended \ + -regex '.*\.($(local_inspection_exif_regex))' \ + -printf 'exif:%p\0' | perl -0 debian/license-miner + touch $@ +pre-build:: clean-extracted-copyright-during-build +clean-extracted-copyright-during-build: debian/stamp-copyright-check + find -type f -name '*.metadata_dump' -delete +clean:: + find -type f -name '*.metadata_dump' -delete + rm -f debian/stamp-extract-copyright DEB_INSTALL_DOCS_ALL += README.unix README.QUICKDRAW DEB_INSTALL_EXAMPLES_ALL = demos bdf_scripts qd.pl -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libgd-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits