Rename pageCache() to PageCache::shared() and return a reference
[WebKit-https.git] / Source / WebCore / generate-export-file
1 #!/usr/bin/perl -w
2 #
3 # Copyright (C) 2007, 2008, 2009, 2010 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 # 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 APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
15 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
21 # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24
25 use strict;
26 use warnings;
27
28 use File::Basename;
29 use File::Find;
30 use File::Temp qw(tempfile);
31 use Getopt::Long;
32
33 sub preprocessorFlags();
34 sub preprocessorMacros($\@);
35 sub process($$$);
36
37 my $showHelp = 0;
38 my $verbose = 1;
39
40 my $result = GetOptions(
41     "help"        => \$showHelp,
42     "verbose"     => \$verbose,
43 );
44 if (!$result || $showHelp || scalar(@ARGV) != 2) {
45     print STDERR basename($0) . " [-h|--help] [-v|--verbose] infile outfile\n";
46     exit 1;
47 }
48
49 my $inFile = shift @ARGV;
50 my $outFile = shift @ARGV;
51
52 my $arch;
53 if ($outFile =~ /\.([^.]+)\.exp$/) {
54     $arch = $1;
55 }
56 die "Unknown arch!" if !defined($arch) || !$arch;
57
58 print "Processing $inFile for $arch...\n" if $verbose;
59 process($inFile, $outFile, $arch);
60
61 exit 0;
62
63 sub preprocessorFlags()
64 {
65     my @features = split(/\s+/, $ENV{GCC_PREPROCESSOR_DEFINITIONS});
66     return @features;
67 }
68
69 sub preprocessorMacros($\@)
70 {
71     my ($cc, $cc_args) = @_;
72
73     my @args = @$cc_args;
74
75     push(@args, map { "-D" . $_ } preprocessorFlags());
76
77     push(@args, qw(-include wtf/Platform.h -include wtf/Assertions.h));
78     # Set framework search paths to find <JavaScriptCore/Platform.h>.  Without these, cc
79     # finds /System/Library/Frameworks/JavaScriptCore.framework/PrivateHeaders/Platform.h
80     # or complains if you don't have that installed.  We search BUILT_PRODUCTS_DIR first
81     # for local developer builds, then the installation path for B&I builds.
82     push(@args, "-F" . $ENV{BUILT_PRODUCTS_DIR}) if $ENV{BUILT_PRODUCTS_DIR};
83     push(@args, "-I" . $ENV{BUILT_PRODUCTS_DIR} . "/usr/local/include") if $ENV{BUILT_PRODUCTS_DIR};
84     push(@args, "-I" . $ENV{BUILT_PRODUCTS_DIR} . $ENV{SDKROOT} . "/usr/local/include") if $ENV{BUILT_PRODUCTS_DIR};
85     # Xcode 3.1 is required for SDKROOT to be set.
86     if (exists $ENV{SYSTEM_LIBRARY_DIR} && $ENV{SYSTEM_LIBRARY_DIR}) {
87         my $frameworkSearchPath = $ENV{SDKROOT} . $ENV{SYSTEM_LIBRARY_DIR};
88         if (!defined $ENV{PLATFORM_NAME} || $ENV{PLATFORM_NAME} =~ /macosx/) {
89             $frameworkSearchPath .= "/Frameworks";
90         } else {
91             $frameworkSearchPath .= "/PrivateFrameworks";
92         }
93         push(@args, "-F" . $frameworkSearchPath);
94     }
95
96     push(@args, "-I" . $ENV{BUILT_PRODUCTS_DIR} . $ENV{SDKROOT} . "/usr/local/include") if $ENV{BUILT_PRODUCTS_DIR};
97     push(@args, "-I" . $ENV{SDKROOT} . "/usr/local/include");
98
99     chomp(my $sdk_version = `xcrun --sdk $ENV{SDKROOT} --show-sdk-version`);
100     if ($ENV{PLATFORM_NAME} eq "iphoneos") {
101         push(@args, "-miphoneos-version-min=" . $sdk_version);
102     }
103     if ($ENV{PLATFORM_NAME} eq "iphonesimulator") {
104         push(@args, "-mios-simulator-version-min=" . $sdk_version);
105     }
106
107     # Print out #define lines for all macros.
108     push(@args, qw(-dM /dev/null));
109
110     print join(" ", $cc, @args), "\n" if $verbose;
111     local $/ = undef;
112     open(CC, "-|", $cc, @args) or die "$!";
113     my $macros = <CC>;
114     close(CC);
115
116     return $macros;
117 }
118
119 sub process($$$)
120 {
121     my ($inFile, $outFile, $arch) = @_;
122
123     if (!exists $ENV{SDKROOT} or !$ENV{SDKROOT}) {
124         die "SDKROOT environment variable not found";
125     }
126
127     chomp (my $cc = `xcrun -find cc`);
128
129     # Run cpp (-E) but don't print the line number info (-P).
130     my @args = qw(-E -P);
131
132     # Provide a default source type since *.in isn't a known file extension.
133     push(@args, qw(-std=gnu++11 -x c++));
134
135     # Make sure cc knows which SDK we're using.
136     push(@args, "-isysroot", $ENV{SDKROOT});
137
138     push(@args, "-arch", $arch);
139
140     my $macros = preprocessorMacros($cc, @args);
141
142     push(@args, "-o", $outFile);
143     push(@args, "-");
144
145     print join(" ", $cc, @args), "\n" if $verbose;
146     open(CC, "|-", $cc, @args) or die "$!";
147     open(IN, "<", $inFile) or die "$!";
148
149     print CC $macros;
150     while (my $line = <IN>) {
151         next if ($line =~ /^#/ && $line !~ /^#\s*(if|ifdef|ifndef|else|elif|endif)/);
152         print CC $line;
153     }
154
155     close(IN);
156     close(CC);
157
158     my $fileCount = chmod 0644, $outFile;
159     if ($fileCount != 1) {
160         die "Could not chmod 0644 $outFile: $!";
161     }
162 }
163