| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 #!/usr/bin/perl -w |  | 
| 2 |  | 
| 3 # Copyright (C) 2011 Adam Barth <abarth@webkit.org> |  | 
| 4 # |  | 
| 5 # Redistribution and use in source and binary forms, with or without |  | 
| 6 # modification, are permitted provided that the following conditions |  | 
| 7 # are met: |  | 
| 8 # 1. Redistributions of source code must retain the above copyright |  | 
| 9 #    notice, this list of conditions and the following disclaimer. |  | 
| 10 # 2. Redistributions in binary form must reproduce the above copyright |  | 
| 11 #    notice, this list of conditions and the following disclaimer in the |  | 
| 12 #    documentation and/or other materials provided with the distribution. |  | 
| 13 # |  | 
| 14 # THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY |  | 
| 15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |  | 
| 16 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |  | 
| 17 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR |  | 
| 18 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |  | 
| 19 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |  | 
| 20 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |  | 
| 21 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |  | 
| 22 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |  | 
| 23 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |  | 
| 24 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | 
| 25 # |  | 
| 26 |  | 
| 27 use strict; |  | 
| 28 |  | 
| 29 use Config; |  | 
| 30 use Getopt::Long; |  | 
| 31 use File::Path; |  | 
| 32 use File::Spec; |  | 
| 33 use IO::File; |  | 
| 34 use InFilesParser; |  | 
| 35 |  | 
| 36 require Config; |  | 
| 37 |  | 
| 38 package InFilesCompiler; |  | 
| 39 |  | 
| 40 my $inputFile = ""; |  | 
| 41 my $outputDir = "."; |  | 
| 42 my $defaultItemFactory; |  | 
| 43 |  | 
| 44 my %parsedItems; |  | 
| 45 my %parsedItemPaths; |  | 
| 46 my %parsedParameters; |  | 
| 47 |  | 
| 48 sub itemHandler($$$) |  | 
| 49 { |  | 
| 50     my ($itemName, $property, $value) = @_; |  | 
| 51 |  | 
| 52     if ($itemName =~ /\//) { |  | 
| 53         my ($dirname, $basename) = $itemName =~ /^(.*)\/(.*)/; |  | 
| 54         $itemName = $basename; |  | 
| 55         $parsedItemPaths{$itemName} = $dirname; |  | 
| 56     } |  | 
| 57 |  | 
| 58     $parsedItems{$itemName} = { &$defaultItemFactory($itemName) } if !defined($p
     arsedItems{$itemName}); |  | 
| 59 |  | 
| 60     return unless $property; |  | 
| 61 |  | 
| 62     die "Unknown property $property for $itemName\n" if !defined($parsedItems{$i
     temName}{$property}); |  | 
| 63     $parsedItems{$itemName}{$property} = $value; |  | 
| 64 } |  | 
| 65 |  | 
| 66 sub parameterHandler($$) |  | 
| 67 { |  | 
| 68     my ($parameter, $value) = @_; |  | 
| 69 |  | 
| 70     die "Unknown parameter $parameter\n" if !defined($parsedParameters{$paramete
     r}); |  | 
| 71     $parsedParameters{$parameter} = $value; |  | 
| 72 } |  | 
| 73 |  | 
| 74 sub new() |  | 
| 75 { |  | 
| 76     my $object = shift; |  | 
| 77     my $reference = { }; |  | 
| 78 |  | 
| 79     my $defaultParametersRef = shift; |  | 
| 80     %parsedParameters = %{ $defaultParametersRef }; |  | 
| 81     $defaultItemFactory = shift; |  | 
| 82 |  | 
| 83     %parsedItems = (); |  | 
| 84 |  | 
| 85     bless($reference, $object); |  | 
| 86     return $reference; |  | 
| 87 } |  | 
| 88 |  | 
| 89 sub initializeFromCommandLine() |  | 
| 90 { |  | 
| 91     ::GetOptions( |  | 
| 92         'input=s' => \$inputFile, |  | 
| 93         'outputDir=s' => \$outputDir, |  | 
| 94     ); |  | 
| 95 |  | 
| 96     die "You must specify --input <file>" unless length($inputFile); |  | 
| 97 |  | 
| 98     ::mkpath($outputDir); |  | 
| 99 |  | 
| 100     # FIXME: Should we provide outputDir via an accessor? |  | 
| 101     return $outputDir; |  | 
| 102 } |  | 
| 103 |  | 
| 104 sub compile() |  | 
| 105 { |  | 
| 106     my $object = shift; |  | 
| 107     my $generateCode = shift; |  | 
| 108 |  | 
| 109     my $file = new IO::File; |  | 
| 110     open($file, $inputFile) or die "Failed to open file: $!"; |  | 
| 111 |  | 
| 112     my $InParser = InFilesParser->new(); |  | 
| 113     $InParser->parse($file, \¶meterHandler, \&itemHandler); |  | 
| 114 |  | 
| 115     close($file); |  | 
| 116     die "Failed to read from file: $inputFile" if (keys %parsedItems == 0); |  | 
| 117 |  | 
| 118     &$generateCode(\%parsedParameters, \%parsedItems, \%parsedItemPaths); |  | 
| 119 } |  | 
| 120 |  | 
| 121 sub license() |  | 
| 122 { |  | 
| 123     return "/* |  | 
| 124  * THIS FILE WAS AUTOMATICALLY GENERATED, DO NOT EDIT. |  | 
| 125  * |  | 
| 126  * Copyright (C) 2011 Google Inc.  All rights reserved. |  | 
| 127  * |  | 
| 128  * Redistribution and use in source and binary forms, with or without |  | 
| 129  * modification, are permitted provided that the following conditions |  | 
| 130  * are met: |  | 
| 131  * 1. Redistributions of source code must retain the above copyright |  | 
| 132  *    notice, this list of conditions and the following disclaimer. |  | 
| 133  * 2. Redistributions in binary form must reproduce the above copyright |  | 
| 134  *    notice, this list of conditions and the following disclaimer in the |  | 
| 135  *    documentation and/or other materials provided with the distribution. |  | 
| 136  * |  | 
| 137  * THIS SOFTWARE IS PROVIDED BY GOOGLE, INC. ``AS IS'' AND ANY |  | 
| 138  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |  | 
| 139  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |  | 
| 140  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR |  | 
| 141  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |  | 
| 142  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |  | 
| 143  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |  | 
| 144  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |  | 
| 145  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |  | 
| 146  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |  | 
| 147  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |  | 
| 148  */ |  | 
| 149 |  | 
| 150 "; |  | 
| 151 } |  | 
| 152 |  | 
| 153 sub interfaceForItem($) |  | 
| 154 { |  | 
| 155     my $object = shift; |  | 
| 156     my $itemName = shift; |  | 
| 157 |  | 
| 158     my $interfaceName = $parsedItems{$itemName}{"interfaceName"}; |  | 
| 159     $interfaceName = $itemName unless $interfaceName; |  | 
| 160 |  | 
| 161     return $interfaceName; |  | 
| 162 } |  | 
| 163 |  | 
| 164 |  | 
| 165 sub preferredConditional() |  | 
| 166 { |  | 
| 167     my $object = shift; |  | 
| 168     my $conditional = shift; |  | 
| 169 |  | 
| 170     my @conditionals = split('\\|', $conditional); |  | 
| 171     return $conditionals[0]; |  | 
| 172 } |  | 
| 173 |  | 
| 174 sub conditionalStringFromAttributeValue() |  | 
| 175 { |  | 
| 176     my $object = shift; |  | 
| 177     my $conditional = shift; |  | 
| 178 |  | 
| 179     return "ENABLE(" . join(') || ENABLE(', split('\\|', $conditional)) . ")"; |  | 
| 180 } |  | 
| 181 |  | 
| 182 1; |  | 
| OLD | NEW | 
|---|