#!/usr/bin/perl -s -Ilib use warnings; use strict; use File::Fetch; use File::Copy; use File::Basename; use File::Path qw/make_path/; use File::Find; use Archive::Extract; use Data::Dumper; use CROSS::DMOSS; my $TMPDIR = '/tmp/cross_dmoss'; my $TARGETDIR = $TMPDIR.'/'.int(rand(10000)); my $DEBUG = 0; make_path($TARGETDIR) unless -e $TARGETDIR; our $file; our $uri; our $stdout; my $source = shift; my $TARGETFILE = ''; die '-file or -uri ?' unless ($file or $uri); # get file if url if ($uri) { my $ff = File::Fetch->new(uri => $source); $TARGETFILE = $ff->fetch( to => $TARGETDIR ); } # copy file if file only if ($file) { $TARGETFILE = "$TARGETDIR/".(basename $source); copy($source, $TARGETFILE); } my $BASEDIR = $TARGETDIR; if ($TARGETFILE =~ m/(tgz|gz|zip|)$/i) { my $ae = Archive::Extract->new( archive => $TARGETFILE ); my $ok = $ae->extract( to => $TARGETDIR ); $BASEDIR = $ae->extract_path; } # XXX $BASEDIR =~ s/(bin)\/?$//; print STDERR "TARGETFILE $TARGETFILE\n" if $DEBUG; print STDERR "BASEDIR $BASEDIR\n" if $DEBUG; # process basedir my $FILES; find(\&proc_file, $BASEDIR); my $dmoss = CROSS::DMOSS->new($FILES,$BASEDIR); # XXX clear previsou data #unlink '/tmp/full_plain_text.txt' if -e '/tmp/full_plain_text.txt'; #unlink '/tmp/full_func_id.txt' if -e '/tmp/full_func_id.txt'; # /XXX # process $dmoss->process; # final result if ($stdout) { # print to stdout print $dmoss->to_stdout; } else { # save to default file my $output = $dmoss->save; print STDERR "Data saved as $output\n"; } sub proc_file { my $f = $File::Find::name; return if -d $f; $FILES->{$f}++; }