tripwire-open-source/src/dep_addprefix.pl

103 lines
2.2 KiB
Perl
Executable File

#!/usr/bin/perl -w
# include a null char so VSS treats this as a binary file --> " #"
#####################################################################
# dep_addprefix.pl
#
# Usage: dep_addprefix.pl myproject.mak.dep objdir1 [objdir2 ...]
#
# Modifies a "make depends" file so that it supports the generation of
# object files in subdirs.
#
# For example if our source file is foo.cpp and we want to have
# the release and debug objects live different directories we would
# run:
#
# dep_addprefix.pl Makefile.dep release debug
#
# This would take the instances of
#
# foo.o: dependantcy.h
#
# and change them to
#
# release/foo.o: dependancy.h
# debug/foo.o: dependancy.h
#
#
# ### May 2nd, 2000 - dmb
#
# Added the ability to cope with g++ -M output, which uses the "\" character
# to continue long lines. As a first step we turn multiple lines ending with
# "\" to a single line in order to cope with this.
#
if (!defined($ARGV[0]) || !defined($ARGV[1]))
{
print <<EOF;
Usage: dep_addprefix.pl myproject.mak.dep objdir1 [objdir2 ...]
Example: dep_addprefix.pl tripwire.mak.dep tripwire_r tripwire_d
EOF
exit(1);
}
$dep_file = $ARGV[0];
$i = 1;
@objdir_list = ();
while (defined($ARGV[$i]))
{
if ($ARGV[$i] =~ /\/$/)
{
push @objdir_list, $ARGV[$i];
}
else
{
push @objdir_list, $ARGV[$i] . "/";
}
$i++;
}
$text = "";
$process_string = "";
open (IN, "<$dep_file") || die "Can't open $dep_file for reading.\n";
while (defined($instring = <IN>))
{
# the following if/else logic concatinates lines that end with the "\" character
if ($instring =~ /.*\\$/)
{
$instring =~ s/(.*)\\$/$1/;
$process_string .= substr($instring, 0, -1); # use substr(,,-1) to avoid eol character
}
else
{
$process_string .= $instring;
if ($process_string =~ /^.*:.*$/)
{
foreach $objdir (@objdir_list)
{
$text .= $objdir . $process_string;
}
}
else
{
$text .= $process_string;
}
$process_string = "";
}
}
close(IN);
open (OUT, ">$dep_file") || die "Can't open $dep_file for writing.\n";
print OUT $text;
close (OUT);
exit(0);
__END__