Reviewed by Darin.
[WebKit-https.git] / WebKitTools / Scripts / build-webkit
1 #!/usr/bin/perl -w
2
3 # Copyright (C) 2005, 2006 Apple Computer, 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 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 # Simplified build script for Web Kit Open Source Project.
30
31 use strict;
32 use FindBin;
33 use Getopt::Long qw(:config pass_through);
34 use lib $FindBin::Bin;
35 use webkitdirs;
36 use POSIX;
37
38 my $svgSupport = 1;
39 my $svgExperimentalSupport = 0;
40 my $xpathSupport = 1;
41 my $xsltSupport = 1;
42 my $colorSupport = 1; # Default: colorize make output
43
44 our @cmakeBuild;
45
46 GetOptions('svg!' => \$svgSupport,
47            'svg-experimental!' => \$svgExperimentalSupport,
48            'xpath!' => \$xpathSupport,
49            'xslt!' => \$xsltSupport,
50            'color!' => \$colorSupport,
51            'cmake!' => \@cmakeBuild);
52
53 checkRequiredSystemConfig();
54 setConfiguration();
55 chdirWebKit();
56
57 my $productDir = productDir();
58 my @options = XcodeOptions();
59 my @overrideFeatureDefinesOption = ();
60
61 push @overrideFeatureDefinesOption, "ENABLE_SVG" if $svgSupport;
62 push @overrideFeatureDefinesOption, "ENABLE_SVG_EXPERIMENTAL_FEATURES" if $svgExperimentalSupport;
63 push @overrideFeatureDefinesOption, "ENABLE_XPATH" if $xpathSupport;
64 push @overrideFeatureDefinesOption, "ENABLE_XSLT" if $xsltSupport;
65 my $overrideFeatureDefinesString = "FEATURE_DEFINES=" . join(" ", @overrideFeatureDefinesOption);
66
67 # Check that all the project directories are there.
68 my @projects = ("JavaScriptCore", "JavaScriptGlue", "WebCore", "WebKit");
69 my @otherDirs = ("WebKitLibraries");
70 for my $dir (@projects, @otherDirs) {
71     if (! -d $dir) {
72         die "Error: No $dir directory found. Please do a fresh checkout.\n";
73     }
74 }
75
76 if (isOSX()) {
77     # Copy library and header from WebKitLibraries to a findable place in the product directory.
78     my $srcLib = "WebKitLibraries/libWebKitSystemInterface.a";
79     my $lib = "$productDir/libWebKitSystemInterface.a";
80     if (!-e $lib || -M $lib > -M $srcLib) {
81         print "Updating $lib\n";
82         system "ditto", $srcLib, $lib;
83         system "ranlib", $lib;
84     }
85     
86     my $srcHeader = "WebKitLibraries/WebKitSystemInterface.h";
87     my $header = "$productDir/usr/local/include/WebKitSystemInterface.h";
88     if (!-e $header || -M $header > -M $srcHeader) {
89         print "Updating $header\n";
90         system "mkdir", "-p", "$productDir/usr/local/include";
91         system "ditto", $srcHeader, $header;
92     }
93 }
94
95 # Force re-link of existing libraries if different than expected
96 removeLibraryDependingOnSVG("WebCore", $svgSupport);
97
98 # Build, and abort if the build fails.
99 for my $dir (@projects) {
100     chdir $dir or die;
101     my $result = 0;
102     if (isQt()) {
103         if ($dir ne "WebKit") {
104             chdir ".." or die;
105             next;
106         }
107         if (isQtWithQMake()) {
108             $result = buildQMakeProject($dir, $colorSupport);
109         } else {
110             $result = buildCMakeProject($dir, $colorSupport);
111         }
112     } elsif (isOSX()) {
113         $result = system "xcodebuild", "-project", "$dir.xcodeproj", @options, $overrideFeatureDefinesString, @ARGV;
114     } elsif (isCygwin()) {
115         if ($dir eq "WebKit") {
116             $result = buildVisualStudioProject($dir);
117         }
118     }
119
120     exit WEXITSTATUS($result) if WEXITSTATUS($result);
121     chdir ".." or die;
122 }
123
124 # Write out congratulations message.
125 print "\n";
126 print "===========================================================\n";
127 print " WebKit is now built. To run Safari with this newly-built\n";
128 print " code, use the \"run-safari\" script.\n";
129 if ($svgSupport) {
130     print "\n NOTE: WebKit has been built with SVG support enabled.\n";
131     print " Safari will have SVG viewing capabilities.\n";
132 }
133 if ($svgExperimentalSupport) {
134     print "\n NOTE: WebKit has been built with experimental SVG features enabled.\n";
135     print " Your build supports basic animation, filters, foreignObject & use support.\n";
136 }    
137 print "===========================================================\n";