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