diff options
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/gpu_table_tester | 140 | ||||
-rw-r--r-- | scripts/templates/template-cpp.cpp | 30 | ||||
-rw-r--r-- | scripts/templates/template-h.h | 31 |
3 files changed, 173 insertions, 28 deletions
diff --git a/scripts/gpu_table_tester b/scripts/gpu_table_tester index 52b1c8f31d..9bc958636d 100755 --- a/scripts/gpu_table_tester +++ b/scripts/gpu_table_tester @@ -26,25 +26,35 @@ use Getopt::Long; ( $MyName = $0 ) =~ s|.*/||; my $mini_HELP = " - $MyName --gpu-table <gpu_table.txt> - [ --unrecognized-only ] - [ --table-only ] - [ <gpu-strings-file> ...] + $MyName {--gpu-table|-g} <gpu_table.txt> {--table-only|-t} - Checks for duplicates and invalid lines in the gpu_table.txt file. + Checks for duplicates and invalid lines in the gpu_table.txt file. - Unless the '--table-only' option is specified, it also tests the recognition of - values in the gpu-strings-files (or standard input if no files are given). + $MyName {--gpu-table|-g} <gpu_table.txt> [ <gpu-strings-file> ... ] + [{--unmatched|-u}] - If the --unrecognized-only option is specified, then no output is produced for - values that are matched, otherwise a line is output for each input line that - describes the results of attempting to match the value on that line. + Tests the recognition of values in the gpu-strings-files (or + standard input if no files are given). The results of attempting to match + each input line are displayed in report form, showing: + - NO MATCH, unsupported, or supported + - the class of the GPU + - the label for the recognizer line from the gpu_table that it matched + + If the --unmatched option is specified, then no output is produced for + values that are matched. + + $MyName {--gpu-table|-g} <gpu_table.txt> {--diff|-d} <old_results> [ <gpu-strings-file> ...] + + With the --diff option, the report compares the current results to <old-results>, + which should be the output from a previous run without --diff. The report shows each + input value with the old result and the new result if it is different. "; -&GetOptions("help" => \$Help, - "gpu-table=s" => \$GpuTable, - "unrecognized-only" => \$UnrecognizedOnly, - "table-only" => \$TableOnly +&GetOptions("help" => \$Help + ,"unmatched" => \$UnMatchedOnly + ,"table-only" => \$TableOnly + ,"gpu-table=s" => \$GpuTable + ,"diff=s" => \$Diff ) || die "$mini_HELP"; @@ -55,6 +65,7 @@ if ($Help) } $ErrorsSeen = 0; +$NoMatch = 'NO MATCH'; # constant die "Must specify a --gpu-table <gpu_table.txt> value" unless $GpuTable; @@ -62,19 +73,19 @@ die "Must specify a --gpu-table <gpu_table.txt> value" open(GPUS, "<$GpuTable") || die "Failed to open gpu table '$GpuTable':\n\t$!\n"; -# Parse the GPU table into these table, indexed by the name +# Parse the GPU table into these tables, indexed by the name my %NameLine; # name -> line number on which a given name was found (catches duplicate names) my %RecognizerLine; # name -> line number on which a given name was found (catches duplicate names) my %Name; # recognizer -> name my %Recognizer; # name -> recognizer my %Class; # recognizer -> class my %Supported; # recognizer -> supported -my @InOrder; # records the order of the recognizers +my @InOrder; # lowercased recognizers in file order - these are the ones really used to match -$Name{'UNRECOGNIZED'} = 'UNRECOGNIZED'; -$NameLine{'UNRECOGNIZED'} = '(hard-coded)'; # use this for error messages in table parsing -$Class{'UNRECOGNIZED'} = ''; -$Supported{'UNRECOGNIZED'} = ''; +$Name{$NoMatch} = $NoMatch; +$NameLine{$NoMatch} = '(hard-coded)'; # use this for error messages in table parsing +$Class{$NoMatch} = ''; +$Supported{$NoMatch} = ''; while (<GPUS>) { @@ -142,15 +153,19 @@ print STDERR "\n" if $ErrorsSeen; exit $ErrorsSeen if $TableOnly; + +# Loop over input lines, find the results for each my %RecognizedBy; -while (<>) +while (<>) { chomp; + my $lcInput = lc $_; # the real gpu table parser lowercases the input string my $recognizer; - $RecognizedBy{$_} = 'UNRECOGNIZED'; + $RecognizedBy{$_} = $NoMatch; foreach $recognizer ( @InOrder ) # note early exit if recognized { - if ( m/$recognizer/ ) + my $lcRecognizer = lc $recognizer; # the real gpu table parser lowercases the recognizer + if ( $lcInput =~ m/$lcRecognizer/ ) { $RecognizedBy{$_} = $recognizer; last; # exit recognizer loop @@ -158,8 +173,6 @@ while (<>) } } -## Print results. -## For each input, show supported or unsupported, the class, and the recognizer name format STDOUT_TOP = GPU String Supported? Class Recognizer ------------------------------------------------------------------------------------------------------ ----------- ----- ------------------------------------ @@ -169,10 +182,81 @@ format STDOUT = $_, $Supported{$RecognizedBy{$_}},$Class{$RecognizedBy{$_}},$Name{$RecognizedBy{$_}} . -foreach ( sort keys %RecognizedBy ) +my $ReportLineTemplate = "A102xxxA12xxxAA*"; # MUST match the format STDOUT above + +format DIFF_TOP = + ------ OLD ------ ------ NEW ------ +GPU String Supported? Class Supported? Class +------------------------------------------------------------------------------------------------------ ----------- ----- ----------- ----- +. + +my ( $oldSupported, $oldClass, $newSupported, $newClass ); + +format DIFF = +@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<... @<<<<<<<<<< @> @<<<<<<<<<< @> +$_, $oldSupported, $oldClass, $newSupported, $newClass +. + +if ( ! $Diff ) { - write if ! $UnrecognizedOnly || $Name{$RecognizedBy{$_}} eq 'UNRECOGNIZED'; - $-++; # suppresses pagination + ## Print results. + ## For each input, show supported or unsupported, the class, and the recognizer name + + foreach ( sort keys %RecognizedBy ) + { + write if ! $UnMatchedOnly || $Name{$RecognizedBy{$_}} eq $NoMatch; + $-++; # suppresses pagination + } +} +else +{ + open OLD, "<$Diff" + || die "Failed to open --diff file '$Diff'\n\t$!\n"; + my $discard = 2; + while ( <OLD> ) + { + if ( $discard > 0 ) + { + my ( $gpu, $supported, $class ) = unpack $ReportLineTemplate; + $gpu =~ s/\s*$//; + ( $OldSupported{$gpu} = $supported ) =~ s/\s*$//; + ( $OldClass{$gpu} = $class ) =~ s/\s*$//; + } + else + { + $discard--; + } + } + close OLD; + + $FORMAT_TOP_NAME = DIFF_TOP; + $FORMAT_NAME = DIFF; + foreach ( sort keys %RecognizedBy ) + { + $newSupported = $Supported{$RecognizedBy{$_}} || $NoMatch; + $newClass = $Class{$RecognizedBy{$_}}; + + if ( ! defined $OldSupported{$_} ) + { + $oldSupported = 'NEW'; + $oldClass = '-'; + } + else + { + $oldSupported = $OldSupported{$_} || $NoMatch; + $oldClass = $OldClass{$_}; + + if ( ( $oldSupported eq $newSupported ) + && ( $oldClass eq $newClass ) + ) + { + $newSupported = ''; + $newClass = ''; + } + } + write; + $-++; # suppresses pagination + } } exit $ErrorsSeen; diff --git a/scripts/templates/template-cpp.cpp b/scripts/templates/template-cpp.cpp new file mode 100644 index 0000000000..35d8441c87 --- /dev/null +++ b/scripts/templates/template-cpp.cpp @@ -0,0 +1,30 @@ +/** +* @file #filename#.cpp +* @brief Implementation of #filename# +* @author #getpass.getuser()#@lindenlab.com +* +* $LicenseInfo:firstyear=#datetime.datetime.now().year#&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) #datetime.datetime.now().year#, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ + + +#'' if ( skip_h ) else '%cinclude "%s.h"' % (35,filename)# + diff --git a/scripts/templates/template-h.h b/scripts/templates/template-h.h new file mode 100644 index 0000000000..ce7b4ddc87 --- /dev/null +++ b/scripts/templates/template-h.h @@ -0,0 +1,31 @@ +/** +* @file #filename#.h +* @brief Header file for #filename# +* @author #getpass.getuser()#@lindenlab.com +* +* $LicenseInfo:firstyear=#datetime.datetime.now().year#&license=viewerlgpl$ +* Second Life Viewer Source Code +* Copyright (C) #datetime.datetime.now().year#, Linden Research, Inc. +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU Lesser General Public +* License as published by the Free Software Foundation; +* version 2.1 of the License only. +* +* This library is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with this library; if not, write to the Free Software +* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +* +* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +* $/LicenseInfo$ +*/ +#'%c'%35#ifndef LL_#filename.upper().replace('-','_')#_H +#'%c'%35#define LL_#filename.upper().replace('-','_')#_H + + +#'%c'%35#endif // LL_#filename.upper().replace('-','_')#_H |