Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(411)

Side by Side Diff: Source/bindings/scripts/deprecated_generate_bindings.pl

Issue 24053003: Support partial interface for test support idls (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #!/usr/bin/perl -w 1 #!/usr/bin/perl -w
2 # 2 #
3 # Copyright (C) 2005 Apple Computer, Inc. 3 # Copyright (C) 2005 Apple Computer, Inc.
4 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com> 4 # Copyright (C) 2006 Anders Carlsson <andersca@mac.com>
5 # 5 #
6 # This file is part of WebKit 6 # This file is part of WebKit
7 # 7 #
8 # This library is free software; you can redistribute it and/or 8 # This library is free software; you can redistribute it and/or
9 # modify it under the terms of the GNU Library General Public 9 # modify it under the terms of the GNU Library General Public
10 # License as published by the Free Software Foundation; either 10 # License as published by the Free Software Foundation; either
(...skipping 20 matching lines...) Expand all
31 31
32 use deprecated_idl_parser; 32 use deprecated_idl_parser;
33 use deprecated_code_generator_v8; 33 use deprecated_code_generator_v8;
34 use deprecated_idl_serializer; 34 use deprecated_idl_serializer;
35 35
36 my @idlDirectories; 36 my @idlDirectories;
37 my $outputDirectory; 37 my $outputDirectory;
38 my $preprocessor; 38 my $preprocessor;
39 my $verbose; 39 my $verbose;
40 my $interfaceDependenciesFile; 40 my $interfaceDependenciesFile;
41 my $testSupportInterfaceDependenciesFile;
41 my $additionalIdlFiles; 42 my $additionalIdlFiles;
42 my $idlAttributesFile; 43 my $idlAttributesFile;
43 my $writeFileOnlyIfChanged; 44 my $writeFileOnlyIfChanged;
44 45
45 GetOptions('include=s@' => \@idlDirectories, 46 GetOptions('include=s@' => \@idlDirectories,
46 'outputDir=s' => \$outputDirectory, 47 'outputDir=s' => \$outputDirectory,
47 'preprocessor=s' => \$preprocessor, 48 'preprocessor=s' => \$preprocessor,
48 'verbose' => \$verbose, 49 'verbose' => \$verbose,
49 'interfaceDependenciesFile=s' => \$interfaceDependenciesFile, 50 'interfaceDependenciesFile=s' => \$interfaceDependenciesFile,
51 'testSupportInterfaceDependenciesFile=s' => \$testSupportInterfaceDep endenciesFile,
50 'additionalIdlFiles=s' => \$additionalIdlFiles, 52 'additionalIdlFiles=s' => \$additionalIdlFiles,
51 'idlAttributesFile=s' => \$idlAttributesFile, 53 'idlAttributesFile=s' => \$idlAttributesFile,
52 'write-file-only-if-changed=s' => \$writeFileOnlyIfChanged); 54 'write-file-only-if-changed=s' => \$writeFileOnlyIfChanged);
53 55
54 my $targetIdlFile = $ARGV[0]; 56 my $targetIdlFile = $ARGV[0];
55 57
56 die('Must specify input file.') unless defined($targetIdlFile); 58 die('Must specify input file.') unless defined($targetIdlFile);
57 die('Must specify output directory.') unless defined($outputDirectory); 59 die('Must specify output directory.') unless defined($outputDirectory);
58 60
59 $targetIdlFile = Cwd::realpath($targetIdlFile); 61 $targetIdlFile = Cwd::realpath($targetIdlFile);
60 if ($verbose) { 62 if ($verbose) {
61 print "$targetIdlFile\n"; 63 print "$targetIdlFile\n";
62 } 64 }
63 my $targetInterfaceName = fileparse(basename($targetIdlFile), ".idl"); 65 my $targetInterfaceName = fileparse(basename($targetIdlFile), ".idl");
64 66
65 my $idlFound = 0; 67 my $idlFound = 0;
66 my @dependencyIdlFiles; 68 my @dependencyIdlFiles;
69 my @testSupportDependencyIdlfiles;
67 if ($interfaceDependenciesFile) { 70 if ($interfaceDependenciesFile) {
68 # The format of the interface dependencies file: 71 # The format of the interface dependencies file:
69 # 72 #
70 # Window.idl P.idl Q.idl R.idl 73 # Window.idl P.idl Q.idl R.idl
71 # Document.idl S.idl 74 # Document.idl S.idl
72 # Event.idl 75 # Event.idl
73 # ... 76 # ...
74 # 77 #
75 # The above indicates that Window.idl depends on P.idl, Q.idl, and R.idl, 78 # The above indicates that Window.idl depends on P.idl, Q.idl, and R.idl,
76 # Document.idl depends on S.idl, and Event.idl depends on no IDLs. 79 # Document.idl depends on S.idl, and Event.idl depends on no IDLs.
77 # A dependency IDL file (one that is depended on by another IDL, e.g. P.idl 80 # A dependency IDL file (one that is depended on by another IDL, e.g. P.idl
78 # in the above) does not have its own entry in the dependency file. 81 # in the above) does not have its own entry in the dependency file.
79 open FH, "< $interfaceDependenciesFile" or die "Cannot open $interfaceDepend enciesFile\n"; 82 open FH, "< $interfaceDependenciesFile" or die "Cannot open $interfaceDepend enciesFile\n";
80 while (my $line = <FH>) { 83 while (my $line = <FH>) {
81 my ($idlFile, @followingIdlFiles) = split(/\s+/, $line); 84 my ($idlFile, @followingIdlFiles) = split(/\s+/, $line);
82 if ($idlFile and basename($idlFile) eq basename($targetIdlFile)) { 85 if ($idlFile and basename($idlFile) eq basename($targetIdlFile)) {
83 $idlFound = 1; 86 $idlFound = 1;
84 # We sort the dependency IDL files so that the corresponding code is generated 87 # We sort the dependency IDL files so that the corresponding code is generated
85 # in a consistent order. This is important for the bindings tests. 88 # in a consistent order. This is important for the bindings tests.
86 @dependencyIdlFiles = sort @followingIdlFiles; 89 @dependencyIdlFiles = sort @followingIdlFiles;
87 } 90 }
88 } 91 }
89 close FH; 92 close FH;
90 93
94 if ($testSupportInterfaceDependenciesFile) {
95 open FH, "< $testSupportInterfaceDependenciesFile" or die "Cannot open $ testSupportInterfaceDependenciesFile\n";
96 while (my $line = <FH>) {
97 my ($idlFile, @followingIdlFiles) = split(/\s+/, $line);
98 if ($idlFile and basename($idlFile) eq basename($targetIdlFile)) {
99 $idlFound = 1;
100 @testSupportDependencyIdlfiles = sort @followingIdlFiles;
101 }
102 }
103 close FH;
104 }
105
91 # $additionalIdlFiles is list of IDL files which should not be included in 106 # $additionalIdlFiles is list of IDL files which should not be included in
92 # DerivedSources*.cpp (i.e. they are not described in the interface 107 # DerivedSources*.cpp (i.e. they are not described in the interface
93 # dependencies file) but should generate .h and .cpp files. 108 # dependencies file) but should generate .h and .cpp files.
94 if (!$idlFound and $additionalIdlFiles) { 109 if (!$idlFound and $additionalIdlFiles) {
95 my @idlFiles = shellwords($additionalIdlFiles); 110 my @idlFiles = shellwords($additionalIdlFiles);
96 $idlFound = grep { $_ and basename($_) eq basename($targetIdlFile) } @id lFiles; 111 $idlFound = grep { $_ and basename($_) eq basename($targetIdlFile) } @id lFiles;
97 } 112 }
98 113
99 if (!$idlFound) { 114 if (!$idlFound) {
100 # We generate empty .h and .cpp files just to tell build scripts that .h and .cpp files are created. 115 # We generate empty .h and .cpp files just to tell build scripts that .h and .cpp files are created.
101 generateEmptyHeaderAndCpp($targetInterfaceName, $outputDirectory); 116 generateEmptyHeaderAndCpp($targetInterfaceName, $outputDirectory);
102 exit 0; 117 exit 0;
103 } 118 }
104 } 119 }
105 120
106 # Parse the target IDL file. 121 # Parse the target IDL file.
107 my $targetParser = deprecated_idl_parser->new(!$verbose); 122 my $targetParser = deprecated_idl_parser->new(!$verbose);
108 my $targetDocument = $targetParser->Parse($targetIdlFile, $preprocessor); 123 my $targetDocument = $targetParser->Parse($targetIdlFile, $preprocessor);
109 124
110 if ($idlAttributesFile) { 125 if ($idlAttributesFile) {
111 my $idlAttributes = loadIDLAttributes($idlAttributesFile); 126 my $idlAttributes = loadIDLAttributes($idlAttributesFile);
112 checkIDLAttributes($idlAttributes, $targetDocument, basename($targetIdlFile) ); 127 checkIDLAttributes($idlAttributes, $targetDocument, basename($targetIdlFile) );
113 } 128 }
114 129
130 push @dependencyIdlFiles, @testSupportDependencyIdlfiles;
115 foreach my $idlFile (@dependencyIdlFiles) { 131 foreach my $idlFile (@dependencyIdlFiles) {
116 next if $idlFile eq $targetIdlFile; 132 next if $idlFile eq $targetIdlFile;
117 133
118 my $interfaceName = fileparse(basename($idlFile), ".idl"); 134 my $interfaceName = fileparse(basename($idlFile), ".idl");
119 my $parser = deprecated_idl_parser->new(!$verbose); 135 my $parser = deprecated_idl_parser->new(!$verbose);
120 my $document = $parser->Parse($idlFile, $preprocessor); 136 my $document = $parser->Parse($idlFile, $preprocessor);
121 137
122 foreach my $interface (@{$document->interfaces}) { 138 foreach my $interface (@{$document->interfaces}) {
123 if (!$interface->isPartial || $interface->name eq $targetInterfaceName) { 139 if (!$interface->isPartial || $interface->name eq $targetInterfaceName) {
124 my $targetDataNode; 140 my $targetDataNode;
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 last OUTER; 311 last OUTER;
296 } 312 }
297 } 313 }
298 } 314 }
299 if ($error) { 315 if ($error) {
300 die "IDL ATTRIBUTE CHECKER ERROR: $error 316 die "IDL ATTRIBUTE CHECKER ERROR: $error
301 If you want to add a new IDL attribute, you need to add it to bindings/scripts/I DLAttributes.txt and add explanations to the Blink IDL document (http://chromium .org/blink/webidl). 317 If you want to add a new IDL attribute, you need to add it to bindings/scripts/I DLAttributes.txt and add explanations to the Blink IDL document (http://chromium .org/blink/webidl).
302 "; 318 ";
303 } 319 }
304 } 320 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698