Home | History | Annotate | Download | only in Scripts
      1 #!/usr/bin/perl
      2 
      3 # Copyright (C) 2007 Apple Inc.  All rights reserved.
      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 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 # This script updates WebKitTools/iExploder/htdocs/cssproperties.in based on
     30 # WebCore/css/CSSPropertyNames.in.
     31 
     32 use warnings;
     33 use strict;
     34 
     35 use FindBin;
     36 use lib $FindBin::Bin;
     37 use webkitdirs;
     38 
     39 use File::Spec;
     40 
     41 sub generateSectionFromCSSPropertyNamesFile();
     42 sub readiExploderFile();
     43 sub svnRevision($);
     44 sub writeiExploderFile();
     45 
     46 my $iExploderFile = File::Spec->catfile(sourceDir(), split("/", "WebKitTools/iExploder/htdocs/cssproperties.in"));
     47 my $cssPropertyNamesFile = File::Spec->catfile(sourceDir(), split("/", "WebCore/css/CSSPropertyNames.in"));
     48 
     49 my @sections = readiExploderFile();
     50 $sections[0] = generateSectionFromCSSPropertyNamesFile();
     51 writeiExploderFile();
     52 
     53 print `svn stat $iExploderFile`;
     54 print "Successfully updated!\n";
     55 
     56 exit 0;
     57 
     58 sub generateSectionFromCSSPropertyNamesFile()
     59 {
     60     my $revision = svnRevision($cssPropertyNamesFile);
     61     my $path = File::Spec->abs2rel($cssPropertyNamesFile, sourceDir());
     62     my $result = "# From WebKit svn r" . $revision . " (" . $path . ")\n";
     63 
     64     my @properties = ();
     65 
     66     open(IN, $cssPropertyNamesFile) || die "$!";
     67     while (my $l = <IN>) {
     68         chomp $l;
     69         next if $l =~ m/^\s*#/ || $l =~ m/^\s*$/;
     70         push(@properties, $l);
     71     }
     72     close(IN);
     73 
     74     $result .= join("\n", sort { $a cmp $b } @properties) . "\n\n";
     75 
     76     return $result;
     77 }
     78 
     79 sub readiExploderFile()
     80 {
     81     my @sections = ();
     82     local $/ = "\n\n";
     83 
     84     open(IN, $iExploderFile) || die "$!";
     85     @sections = <IN>;
     86     close(IN);
     87 
     88     return @sections;
     89 }
     90 
     91 sub svnRevision($)
     92 {
     93     my ($file) = @_;
     94     my $revision = "";
     95 
     96     open INFO, "svn info '$file' |" or die;
     97     while (<INFO>) {
     98         if (/^Revision: (.+)/) {
     99             $revision = $1;
    100         }
    101     }
    102     close INFO;
    103 
    104     return $revision ? $revision : "UNKNOWN";
    105 }
    106 
    107 sub writeiExploderFile()
    108 {
    109     open(OUT, "> $iExploderFile") || die "$!";
    110     print OUT join("", @sections);
    111     close(OUT);
    112 }
    113