#!/usr/bin/perl -W %include = (); die "Usage: scandeps prefix object_dirs -- sources" if (@ARGV < 4); $prefix = shift @ARGV; $prefix = $prefix; # silence warning @objdirs = (); while (($z = shift @ARGV) ne "--") { push @objdirs, $z; } # scan all files for relevant #include lines foreach my $file (@ARGV) { open FILE, "<$file" or die "Failed to open $file: $!"; while (my $line = ) { if ($line =~ m|#include "$prefix/?([^"]+)"|) { $include{$file}{$1} = 1; } } close FILE; } # output dependencies foreach my $file (@ARGV) { next unless $file =~ m|([^/]+)[.]c$|; %deps = (); search_deps($file); foreach my $z (@objdirs) { print "$z/$1.o "; } print ": $file "; foreach my $z (sort keys %deps) { print "$z " } print "\n"; } sub search_deps { my $file = shift; return unless exists $include{$file}; foreach my $z (keys %{$include{$file}}) { next if exists $deps{$z}; $deps{$z} = 1; search_deps($z); } }