WebKitTools/Scripts/webkitperl/features.pm
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 # Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved
       
     2 # Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
       
     3 # Copyright (C) 2010 Andras Becsi (abecsi@inf.u-szeged.hu), University of Szeged
       
     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 #
       
     9 # 1.  Redistributions of source code must retain the above copyright
       
    10 #     notice, this list of conditions and the following disclaimer.
       
    11 # 2.  Redistributions in binary form must reproduce the above copyright
       
    12 #     notice, this list of conditions and the following disclaimer in the
       
    13 #     documentation and/or other materials provided with the distribution.
       
    14 # 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
       
    15 #     its contributors may be used to endorse or promote products derived
       
    16 #     from this software without specific prior written permission.
       
    17 #
       
    18 # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
       
    19 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
    20 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
       
    21 # DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
       
    22 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
       
    23 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
       
    24 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
       
    25 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
       
    27 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
    28 
       
    29 # Module to share code to detect the existance of features in built binaries.
       
    30 
       
    31 use strict;
       
    32 use warnings;
       
    33 
       
    34 BEGIN {
       
    35    use Exporter   ();
       
    36    our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS);
       
    37    $VERSION     = 1.00;
       
    38    @ISA         = qw(Exporter);
       
    39    @EXPORT      = qw(&checkWebCoreFeatureSupport
       
    40                      &removeLibraryDependingOnFeature);
       
    41    %EXPORT_TAGS = ( );
       
    42    @EXPORT_OK   = ();
       
    43 }
       
    44 
       
    45 sub libraryContainsSymbol($$)
       
    46 {
       
    47     my ($path, $symbol) = @_;
       
    48 
       
    49     if (isCygwin() or isWindows()) {
       
    50         # FIXME: Implement this for Windows.
       
    51         return 0;
       
    52     }
       
    53 
       
    54     my $foundSymbol = 0;
       
    55     if (-e $path) {
       
    56         open NM, "-|", "nm", $path or die;
       
    57         while (<NM>) {
       
    58             $foundSymbol = 1 if /$symbol/; # FIXME: This should probably check for word boundaries before/after the symbol name.
       
    59         }
       
    60         close NM;
       
    61     }
       
    62     return $foundSymbol;
       
    63 }
       
    64 
       
    65 sub hasFeature($$)
       
    66 {
       
    67     my ($featureName, $path) = @_;
       
    68     my %symbolForFeature = (
       
    69         "MathML" => "MathMLElement",
       
    70         "SVG" => "SVGDefsElement", # We used to look for SVGElement but isSVGElement exists (and would match) in --no-svg builds.
       
    71         "Accelerated Compositing" => "GraphicsLayer",
       
    72         "3D Rendering" => "WebCoreHas3DRendering",
       
    73         "3D Canvas" => "WebGLShader",
       
    74         "WML" => "WMLElement",
       
    75         "WCSS" => "parseWCSSInputProperty",
       
    76         "XHTMLMP" => "isXHTMLMPDocument",
       
    77     );
       
    78     my $symbolName = $symbolForFeature{$featureName};
       
    79     die "Unknown feature: $featureName" unless $symbolName;
       
    80     return libraryContainsSymbol($path, $symbolName);
       
    81 }
       
    82 
       
    83 sub checkWebCoreFeatureSupport($$)
       
    84 {
       
    85     my ($feature, $required) = @_;
       
    86     my $libraryName = "WebCore";
       
    87     my $path = builtDylibPathForName($libraryName);
       
    88     my $hasFeature = hasFeature($feature, $path);
       
    89     if ($required && !$hasFeature) {
       
    90         die "$libraryName at \"$path\" does not include $hasFeature support.  See build-webkit --help\n";
       
    91     }
       
    92     return $hasFeature;
       
    93 }
       
    94 
       
    95 sub removeLibraryDependingOnFeature($$$)
       
    96 {
       
    97     my ($libraryName, $featureName, $shouldHaveFeature) = @_;
       
    98     my $path = builtDylibPathForName($libraryName);
       
    99     return unless -x $path;
       
   100 
       
   101     my $hasFeature = hasFeature($featureName, $path);
       
   102     system "rm -f $path" if ($shouldHaveFeature xor $hasFeature);
       
   103 }
       
   104 
       
   105 1;