#!/usr/bin/perl -w
# strings -- lintian collection script

# Copyright (C) 2009, 2010 Raphael Geissert <atomo64@gmail.com>
#
# 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 2 of the License, 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, you can find it on the World Wide
# Web at http://www.gnu.org/copyleft/gpl.html, or write to the Free
# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
# MA 02110-1301, USA.

use strict;
use warnings;

use lib "$ENV{'LINTIAN_ROOT'}/lib";
use Util;
use Lintian::Command qw(spawn);
use Lintian::Command::Simple;

($#ARGV == 1) or fail("syntax: strings <pkg> <type>");

-f "file-info"
    or fail("file-info invoked in wrong directory");

unlink("elf-index");
delete_dir("strings");

open(ELF_INDEX, '>', 'elf-index')
    or fail("Could not open 'elf-index' for writing: $!\n");

open(FILE_INFO, '<', 'file-info')
    or fail("Could not open 'file-info' for reading: $!\n");

while (<FILE_INFO>) {
    next unless(m/^(.+?)\x00\s+[^,]*\bELF\b/);
    my $bin = $1;

    print ELF_INDEX "$bin\n";

    next if ($bin =~ m,^/usr/lib/debug/,);

    my $dir = $bin;
    $dir =~ s,/[^/]+?$,,;

    Lintian::Command::Simple::run('mkdir', '-p', "strings/$dir") == 0
	or fail("Failed to create directory 'strings/$dir'\n");

    spawn({out => "strings/$bin", fail => 'error'}, ['strings', "unpacked/$bin"]);
}

close(ELF_INDEX);
close(FILE_INFO);
