Repair QMake build on OS X.
[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 $colorSupport = 1; # Default: colorize make output
40
41 our @qmakeBuild;
42
43 GetOptions('svg!' => \$svgSupport,
44            'color!' => \$colorSupport,
45            'qmake!' => \@qmakeBuild);
46
47 checkRequiredSystemConfig();
48 setConfiguration();
49 chdirWebKit();
50
51 my $productDir = productDir();
52 my @options = XcodeOptions();
53 my @additionalWebCoreOptions = ();
54
55 push @additionalWebCoreOptions, "FEATURE_DEFINES=" if !$svgSupport;
56
57 # Check that all the project directories are there.
58 my @projects = ("JavaScriptCore", "JavaScriptGlue", "WebCore", "WebKit");
59 my @otherDirs = ("WebKitLibraries");
60 for my $dir (@projects, @otherDirs) {
61     if (! -d $dir) {
62         die "Error: No $dir directory found. Please do a fresh checkout.\n";
63     }
64 }
65
66 if (isOSX()) {
67     # Copy library and header from WebKitLibraries to a findable place in the product directory.
68     my $srcLib = "WebKitLibraries/libWebKitSystemInterface.a";
69     my $lib = "$productDir/libWebKitSystemInterface.a";
70     if (!-e $lib || -M $lib > -M $srcLib) {
71         print "Updating $lib\n";
72         system "ditto", $srcLib, $lib;
73         system "ranlib", $lib;
74     }
75     
76     my $srcHeader = "WebKitLibraries/WebKitSystemInterface.h";
77     my $header = "$productDir/usr/local/include/WebKitSystemInterface.h";
78     if (!-e $header || -M $header > -M $srcHeader) {
79         print "Updating $header\n";
80         system "mkdir", "-p", "$productDir/usr/local/include";
81         system "ditto", $srcHeader, $header;
82     }
83 }
84
85 # Force re-link of existing libraries if different than expected
86 removeLibraryDependingOnSVG("WebCore", $svgSupport);
87
88 # Build, and abort if the build fails.
89 for my $dir (@projects) {
90     chdir $dir or die;
91     my $result = 0;
92     if (isQt()) {
93         if ($dir ne "WebKit") {
94             chdir ".." or die;
95             next;
96         }
97         if (isQtWithQMake()) {
98             $result = buildQMakeProject($dir, $colorSupport);
99         } else {
100             $result = buildCMakeProject($dir, $colorSupport);
101         }
102     } elsif (isOSX()) {
103         if ($dir eq "JavaScriptCore") {
104             $result = system "xcodebuild", "-project", "$dir.xcodeproj", @options, @ARGV;
105         } elsif ($dir eq "WebCore") {
106             $result = system "xcodebuild", "-project", "$dir.xcodeproj", @options, @additionalWebCoreOptions, @ARGV;
107         } else {
108             $result = system "xcodebuild", "-project", "$dir.xcodeproj", @options, @ARGV;
109         }
110     } elsif (isCygwin()) {
111         if ($dir eq "WebKit") {
112             $result = buildVisualStudioProject($dir);
113         }
114     }
115
116     exit WEXITSTATUS($result) if WEXITSTATUS($result);
117     chdir ".." or die;
118 }
119
120 # Write out congratulations message.
121 print "\n";
122 print "===========================================================\n";
123 print " WebKit is now built. To run Safari with this newly-built\n";
124 print " code, use the \"run-safari\" script.\n";
125 if ($svgSupport) {
126     print "\n NOTE: WebKit has been built with SVG support enabled.\n";
127     print " Safari will have basic SVG viewing capabilities.\n";
128 }
129 print "===========================================================\n";