| Index: Source/bindings/scripts/deprecated_generate_bindings.pl
|
| diff --git a/Source/bindings/scripts/deprecated_generate_bindings.pl b/Source/bindings/scripts/deprecated_generate_bindings.pl
|
| deleted file mode 100755
|
| index 6850264d063ede4d24f24ea69a260f7502f5fe61..0000000000000000000000000000000000000000
|
| --- a/Source/bindings/scripts/deprecated_generate_bindings.pl
|
| +++ /dev/null
|
| @@ -1,304 +0,0 @@
|
| -#!/usr/bin/perl -w
|
| -#
|
| -# Copyright (C) 2005 Apple Computer, Inc.
|
| -# Copyright (C) 2006 Anders Carlsson <andersca@mac.com>
|
| -#
|
| -# This file is part of WebKit
|
| -#
|
| -# This library is free software; you can redistribute it and/or
|
| -# modify it under the terms of the GNU Library General Public
|
| -# License as published by the Free Software Foundation; either
|
| -# version 2 of the License, or (at your option) any later version.
|
| -#
|
| -# 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
|
| -# Library General Public License for more details.
|
| -#
|
| -# You should have received a copy of the GNU Library General Public License
|
| -# along with this library; see the file COPYING.LIB. If not, write to
|
| -# the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
| -# Boston, MA 02110-1301, USA.
|
| -#
|
| -
|
| -use strict;
|
| -
|
| -use File::Path;
|
| -use File::Basename;
|
| -use Getopt::Long;
|
| -use Text::ParseWords;
|
| -use Cwd;
|
| -
|
| -use deprecated_idl_parser;
|
| -use deprecated_code_generator_v8;
|
| -use deprecated_idl_serializer;
|
| -
|
| -my @idlDirectories;
|
| -my $outputDirectory;
|
| -my $preprocessor;
|
| -my $verbose;
|
| -my $interfaceDependenciesFile;
|
| -my $additionalIdlFiles;
|
| -my $idlAttributesFile;
|
| -my $writeFileOnlyIfChanged;
|
| -
|
| -GetOptions('include=s@' => \@idlDirectories,
|
| - 'outputDir=s' => \$outputDirectory,
|
| - 'preprocessor=s' => \$preprocessor,
|
| - 'verbose' => \$verbose,
|
| - 'interfaceDependenciesFile=s' => \$interfaceDependenciesFile,
|
| - 'additionalIdlFiles=s' => \$additionalIdlFiles,
|
| - 'idlAttributesFile=s' => \$idlAttributesFile,
|
| - 'write-file-only-if-changed=s' => \$writeFileOnlyIfChanged);
|
| -
|
| -my $targetIdlFile = $ARGV[0];
|
| -
|
| -die('Must specify input file.') unless defined($targetIdlFile);
|
| -die('Must specify output directory.') unless defined($outputDirectory);
|
| -
|
| -$targetIdlFile = Cwd::realpath($targetIdlFile);
|
| -if ($verbose) {
|
| - print "$targetIdlFile\n";
|
| -}
|
| -my $targetInterfaceName = fileparse(basename($targetIdlFile), ".idl");
|
| -
|
| -my $idlFound = 0;
|
| -my @dependencyIdlFiles;
|
| -if ($interfaceDependenciesFile) {
|
| - # The format of the interface dependencies file:
|
| - #
|
| - # Window.idl P.idl Q.idl R.idl
|
| - # Document.idl S.idl
|
| - # Event.idl
|
| - # ...
|
| - #
|
| - # The above indicates that Window.idl depends on P.idl, Q.idl, and R.idl,
|
| - # Document.idl depends on S.idl, and Event.idl depends on no IDLs.
|
| - # A dependency IDL file (one that is depended on by another IDL, e.g. P.idl
|
| - # in the above) does not have its own entry in the dependency file.
|
| - open FH, "< $interfaceDependenciesFile" or die "Cannot open $interfaceDependenciesFile\n";
|
| - while (my $line = <FH>) {
|
| - my ($idlFile, @followingIdlFiles) = split(/\s+/, $line);
|
| - if ($idlFile and basename($idlFile) eq basename($targetIdlFile)) {
|
| - $idlFound = 1;
|
| - # We sort the dependency IDL files so that the corresponding code is generated
|
| - # in a consistent order. This is important for the bindings tests.
|
| - @dependencyIdlFiles = sort @followingIdlFiles;
|
| - }
|
| - }
|
| - close FH;
|
| -
|
| - # $additionalIdlFiles is list of IDL files which should not be included in
|
| - # DerivedSources*.cpp (i.e. they are not described in the interface
|
| - # dependencies file) but should generate .h and .cpp files.
|
| - if (!$idlFound and $additionalIdlFiles) {
|
| - my @idlFiles = shellwords($additionalIdlFiles);
|
| - $idlFound = grep { $_ and basename($_) eq basename($targetIdlFile) } @idlFiles;
|
| - }
|
| -
|
| - if (!$idlFound) {
|
| - # We generate empty .h and .cpp files just to tell build scripts that .h and .cpp files are created.
|
| - generateEmptyHeaderAndCpp($targetInterfaceName, $outputDirectory);
|
| - exit 0;
|
| - }
|
| -}
|
| -
|
| -# Parse the target IDL file.
|
| -my $targetParser = deprecated_idl_parser->new(!$verbose);
|
| -my $targetDocument = $targetParser->Parse($targetIdlFile, $preprocessor);
|
| -
|
| -if ($idlAttributesFile) {
|
| - my $idlAttributes = loadIDLAttributes($idlAttributesFile);
|
| - checkIDLAttributes($idlAttributes, $targetDocument, basename($targetIdlFile));
|
| -}
|
| -
|
| -foreach my $idlFile (@dependencyIdlFiles) {
|
| - next if $idlFile eq $targetIdlFile;
|
| -
|
| - my $interfaceName = fileparse(basename($idlFile), ".idl");
|
| - my $parser = deprecated_idl_parser->new(!$verbose);
|
| - my $document = $parser->Parse($idlFile, $preprocessor);
|
| -
|
| - foreach my $interface (@{$document->interfaces}) {
|
| - if (!$interface->isPartial || $interface->name eq $targetInterfaceName) {
|
| - my $targetDataNode;
|
| - foreach my $interface (@{$targetDocument->interfaces}) {
|
| - if ($interface->name eq $targetInterfaceName) {
|
| - $targetDataNode = $interface;
|
| - last;
|
| - }
|
| - }
|
| - die "Not found an interface ${targetInterfaceName} in ${targetInterfaceName}.idl." unless defined $targetDataNode;
|
| -
|
| - # Support for attributes of partial interfaces.
|
| - foreach my $attribute (@{$interface->attributes}) {
|
| - # Record that this attribute is implemented by $interfaceName.
|
| - $attribute->extendedAttributes->{"ImplementedBy"} = $interfaceName unless $interface->extendedAttributes->{"LegacyImplementedInBaseClass"};
|
| -
|
| - # Add interface-wide extended attributes to each attribute.
|
| - applyInterfaceExtendedAttributes($interface, $attribute->extendedAttributes);
|
| -
|
| - push(@{$targetDataNode->attributes}, $attribute);
|
| - }
|
| -
|
| - # Support for methods of partial interfaces.
|
| - foreach my $function (@{$interface->functions}) {
|
| - # Record that this method is implemented by $interfaceName.
|
| - $function->extendedAttributes->{"ImplementedBy"} = $interfaceName unless $interface->extendedAttributes->{"LegacyImplementedInBaseClass"};
|
| -
|
| - # Add interface-wide extended attributes to each method.
|
| - applyInterfaceExtendedAttributes($interface, $function->extendedAttributes);
|
| -
|
| - push(@{$targetDataNode->functions}, $function);
|
| - }
|
| -
|
| - # Support for constants of partial interfaces.
|
| - foreach my $constant (@{$interface->constants}) {
|
| - # Record that this constant is implemented by $interfaceName.
|
| - $constant->extendedAttributes->{"ImplementedBy"} = $interfaceName unless $interface->extendedAttributes->{"LegacyImplementedInBaseClass"};
|
| -
|
| - # Add interface-wide extended attributes to each constant.
|
| - applyInterfaceExtendedAttributes($interface, $constant->extendedAttributes);
|
| -
|
| - push(@{$targetDataNode->constants}, $constant);
|
| - }
|
| - } else {
|
| - die "$idlFile is not a dependency of $targetIdlFile. There maybe a bug in the dependency computer (compute_dependencies.py).\n";
|
| - }
|
| - }
|
| -}
|
| -
|
| -# Serialize to and from JSON to ensure Perl and Python parsers are equivalent,
|
| -# as part of porting compiler to Python. See http://crbug.com/242795
|
| -$targetDocument = deserializeJSON(serializeJSON($targetDocument));
|
| -
|
| -# Generate desired output for the target IDL file.
|
| -my @interfaceIdlFiles = ($targetDocument->fileName(), @dependencyIdlFiles);
|
| -my $codeGenerator = deprecated_code_generator_v8->new($targetDocument, \@idlDirectories, $preprocessor, $verbose, \@interfaceIdlFiles, $writeFileOnlyIfChanged);
|
| -my $interfaces = $targetDocument->interfaces;
|
| -foreach my $interface (@$interfaces) {
|
| - print "Generating bindings code for IDL interface \"" . $interface->name . "\"...\n" if $verbose;
|
| - $codeGenerator->GenerateInterface($interface);
|
| - $codeGenerator->WriteData($interface, $outputDirectory);
|
| -}
|
| -
|
| -sub generateEmptyHeaderAndCpp
|
| -{
|
| - my ($targetInterfaceName, $outputDirectory) = @_;
|
| -
|
| - my $headerName = "V8${targetInterfaceName}.h";
|
| - my $cppName = "V8${targetInterfaceName}.cpp";
|
| - my $contents = "/*
|
| - This file is generated just to tell build scripts that $headerName and
|
| - $cppName are created for ${targetInterfaceName}.idl, and thus
|
| - prevent the build scripts from trying to generate $headerName and
|
| - $cppName at every build. This file must not be tried to compile.
|
| -*/
|
| -";
|
| - open FH, "> ${outputDirectory}/${headerName}" or die "Cannot open $headerName\n";
|
| - print FH $contents;
|
| - close FH;
|
| -
|
| - open FH, "> ${outputDirectory}/${cppName}" or die "Cannot open $cppName\n";
|
| - print FH $contents;
|
| - close FH;
|
| -}
|
| -
|
| -sub loadIDLAttributes
|
| -{
|
| - my $idlAttributesFile = shift;
|
| -
|
| - my %idlAttributes;
|
| - open FH, "<", $idlAttributesFile or die "Couldn't open $idlAttributesFile: $!";
|
| - while (my $line = <FH>) {
|
| - chomp $line;
|
| - next if $line =~ /^\s*#/;
|
| - next if $line =~ /^\s*$/;
|
| -
|
| - if ($line =~ /^\s*([^=\s]*)\s*=?\s*(.*)/) {
|
| - my $name = $1;
|
| - $idlAttributes{$name} = {};
|
| - if ($2) {
|
| - foreach my $rightValue (split /\|/, $2) {
|
| - $rightValue =~ s/^\s*|\s*$//g;
|
| - $rightValue = "VALUE_IS_MISSING" unless $rightValue;
|
| - $idlAttributes{$name}{$rightValue} = 1;
|
| - }
|
| - } else {
|
| - $idlAttributes{$name}{"VALUE_IS_MISSING"} = 1;
|
| - }
|
| - } else {
|
| - die "The format of " . basename($idlAttributesFile) . " is wrong: line $.\n";
|
| - }
|
| - }
|
| - close FH;
|
| -
|
| - return \%idlAttributes;
|
| -}
|
| -
|
| -sub checkIDLAttributes
|
| -{
|
| - my $idlAttributes = shift;
|
| - my $document = shift;
|
| - my $idlFile = shift;
|
| -
|
| - foreach my $interface (@{$document->interfaces}) {
|
| - checkIfIDLAttributesExists($idlAttributes, $interface->extendedAttributes, $idlFile);
|
| -
|
| - foreach my $attribute (@{$interface->attributes}) {
|
| - checkIfIDLAttributesExists($idlAttributes, $attribute->extendedAttributes, $idlFile);
|
| - }
|
| -
|
| - foreach my $function (@{$interface->functions}) {
|
| - checkIfIDLAttributesExists($idlAttributes, $function->extendedAttributes, $idlFile);
|
| - foreach my $parameter (@{$function->parameters}) {
|
| - checkIfIDLAttributesExists($idlAttributes, $parameter->extendedAttributes, $idlFile);
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -sub applyInterfaceExtendedAttributes
|
| -{
|
| - my $interface = shift;
|
| - my $extendedAttributes = shift;
|
| -
|
| - foreach my $extendedAttributeName (keys %{$interface->extendedAttributes}) {
|
| - next if $extendedAttributeName eq "ImplementedAs";
|
| - $extendedAttributes->{$extendedAttributeName} = $interface->extendedAttributes->{$extendedAttributeName};
|
| - }
|
| -}
|
| -
|
| -sub checkIfIDLAttributesExists
|
| -{
|
| - my $idlAttributes = shift;
|
| - my $extendedAttributes = shift;
|
| - my $idlFile = shift;
|
| -
|
| - my $error;
|
| - OUTER: for my $name (keys %$extendedAttributes) {
|
| - if (!exists $idlAttributes->{$name}) {
|
| - $error = "Invalid IDL attribute [$name] found in $idlFile.";
|
| - last;
|
| - }
|
| - # Check no argument first, since "*" means "some argument (not missing)".
|
| - if ($extendedAttributes->{$name} eq "VALUE_IS_MISSING" and not exists $idlAttributes->{$name}{"VALUE_IS_MISSING"}) {
|
| - $error = "Missing required argument for IDL attribute [$name] in file $idlFile.";
|
| - last;
|
| - }
|
| - if (exists $idlAttributes->{$name}{"*"}) {
|
| - next;
|
| - }
|
| - for my $rightValue (split /\s*[|&]\s*/, $extendedAttributes->{$name}) {
|
| - if (!(exists $idlAttributes->{$name}{$rightValue})) {
|
| - $error = "Invalid IDL attribute value [$name=" . $extendedAttributes->{$name} . "] found in $idlFile.";
|
| - last OUTER;
|
| - }
|
| - }
|
| - }
|
| - if ($error) {
|
| - die "IDL ATTRIBUTE CHECKER ERROR: $error
|
| -If you want to add a new IDL attribute, you need to add it to bindings/scripts/IDLAttributes.txt and add explanations to the Blink IDL document (http://chromium.org/blink/webidl).
|
| -";
|
| - }
|
| -}
|
|
|