All pastes #395815 Raw Edit

Something

public text v1 · immutable
·published 2007-03-15 09:23 UTC
rendered paste body
#!/usr/local/bin/perl -w
use strict;
use warnings;
use Getopt::Std;

my $RCSID = '$Id: include.perl,v 1.2 2007-01-31 14:42:16-08 - - $';
$0 =~ s|/*$||; $0 =~ s|^.*/||;
my $EXITCODE = 0;
END { exit $EXITCODE; }
sub note(@){ print STDERR "$0: @_"; };
$SIG{'__WARN__'} = sub { note @_; $EXITCODE = 1; };
$SIG{'__DIE__'} = sub { warn @_; exit; };

my $MAN_PAGE = <<__END_MAN_PAGE__;
#
# NAME
#    $0 - search C source for #include statements
#
# SYNOPSIS
#    $0 -h | csourcefile...
#
# DESCRIPTION
#    Takes a sequence of C source files as arguments and prints
#    each line number and reference to an include file.
#
# OPTIONS
#    -h  Prints out help information in man page format.
#
# $RCSID
__END_MAN_PAGE__
$MAN_PAGE =~ s/^#[ ]?//mg;

my @worklist;
my $target;
my $source;
my $dep;
my %OPTIONS;
my %foundfiles;
my $dependencies;
getopts "mhsu", \%OPTIONS;
print $MAN_PAGE and exit if $OPTIONS{'h'};
die "Usage: $0 -h | csourcefile...\n" unless @ARGV;

for my $filename (@ARGV) {
while (@worklist) {
    unless (open FILE, $filename) {
        warn "$filename: $!\n";
    }else {
        my $target = $filename;
        $target = ~s/\.c$/\.o/;
        printf "$target: $filename\n";
        push @{$foundfile{$filename}}, 0;
        while (defined (my $line = <FILE>)) {
            next unless $line =~ m/^\s*#include\s+(<.*?>|".*?")\s*$/;
            my $include = $1;
            # this is a user include, set flag
            $include =~ s|"(.*)"|$1|;
            # this is a sys include, set flag
            $include =~ s|<(.*)>|/usr/include/$1|;
            if ($foundfile{$filename}) {
                $dependencies {"$target: $include" = 1};
            }
            $dependencies {"$target: $source"} = 1;
            $foundfiles{$source} = 1;
            push @{%dependencies}, $include;;
            push @worklist, $include;
        };
    };
    close FILE;
}

my @targets = qw (target1 target2 target3 target4);
my @sources = qw (source1 source2 source3 source4);
my @worklist;

while (@targets) {
    my $target = shift @targets;
    my $source = shift @sources;
    push @worklist, [$target, $source];
}

while (@worklist) {
    my $pair = shift @worklist;
    my $target = $pair->[0];
    my $source = $pair->[1];
}
for $dep (sort keys %dependencies) {
    print $dependencies;
}
}