diff options
Diffstat (limited to 'src/coreclr/applydefines.pl')
-rw-r--r-- | src/coreclr/applydefines.pl | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/src/coreclr/applydefines.pl b/src/coreclr/applydefines.pl new file mode 100644 index 0000000000..566cfd3f5b --- /dev/null +++ b/src/coreclr/applydefines.pl @@ -0,0 +1,128 @@ +#!/usr/bin/env perl + +use strict; + +my $sourceFile; +my $outputFile=""; +my $definesFile=""; + +#parse arguments + +if (@ARGV == 0) +{ + Usage(); +} + +my %Defines; + +# parse args + +while (@ARGV) +{ + my $nextArg=shift; + if($nextArg eq '-s') + { + NeedNextArg($nextArg, 'file name'); + $sourceFile=shift; + } + elsif ($nextArg eq '-o') + { + NeedNextArg($nextArg, 'file name'); + $outputFile=shift; + } + elsif ($nextArg eq '-f') + { + NeedNextArg($nextArg, 'file name'); + $definesFile=shift; + } + elsif ($nextArg eq '-d') + { + NeedNextArg($nextArg, 'value'); + my $customDefine=shift; + if ( $customDefine=~m/^\"?(\S+)=(\S*)\"?$/ ) + { + $Defines{$1}=$2; + } + else + { + print "-d expects name=value\n"; + Usage(); + } + } + elsif ($nextArg eq '-h') + { + Usage(); + } + else + { + print "Unknonw argument '$nextArg'\n"; + Usage(); + } +} + +# check if we have what we need + +if ($sourceFile eq "" || $outputFile eq "" || $definesFile eq "") +{ + Usage(); +} + +open (SOURCEFILE,$sourceFile) or die "Cannot open $sourceFile for reading\n"; +open (DEFINESFILE,$definesFile) or die "Cannot open $definesFile for reading\n"; +open (OUTPUTFILE,"> $outputFile") or die "Cannot open $outputFile for writing\n"; + +#load defines + +while (<DEFINESFILE>) +{ + chomp; + if (/^\s*#define\s+(\S+)\s+(\S*)\s*$/) + { + if (defined $2) + { + $Defines{$1}=$2; + } + else + { + $Defines{$1}=""; + } + } +} + +while (<SOURCEFILE>) +{ + my $string=$_; + my $processed=""; + while ($string=~m/\$\(([^)]+)\)/) + { + if (! defined $Defines{$1}) + { + die "'$1' is not defined.\n"; + } + $string=~s/\$\(([^)]+)\)/$Defines{$1}/; + } + print OUTPUTFILE $string ; +} + + +# functions +sub Usage() +{ + print "Usage: applydefines [options]\n"; + print "\t-s <file>\t: the source file to process\n"; + print "\t-f <file>\t: the file contatining #define setings\n"; + print "\t-o <file>\t: the output file\n"; + print "\t-d <name>=<Value>\t: additional define\n"; + + exit 1; +} + +sub NeedNextArg() +{ + if (@ARGV == 0) + { + print "'@_[0]' requires @_[1]\n"; + Usage(); + } +} + |