Commit d2533be2 authored by dbates@webkit.org's avatar dbates@webkit.org

2011-03-14 Daniel Bates <dbates@rim.com>

        Reviewed by David Kilzer.

        Cleanup: Separate port-specific implementation details from webkitdirs::buildCMakeProject()
        https://bugs.webkit.org/show_bug.cgi?id=55438

        Separate out the EFL- and WinCE-specific logic from the port-independent logic in
        webkitdirs::buildCMakeProject(). Also, remove redundant code for generating the
        CMake arguments for feature defines.

        * Scripts/build-webkit:
          - Added cMakeArgsFromFeatures() to convert the @features array to CMake arguments.
          - Modified EFL and WinCE-specific building logic to call buildCMakeProjectOrExit().
          - Sorted forward declarations.
          - Initialize $makeArgs with the empty string so as to simplify its use in string operations;
            Modified call sites as needed.
        * Scripts/webkitdirs.pm:
          - Added cleanCMakeGeneratedProject() to clean a CMake build.
          - Added buildCMakeGeneratedProject() to build using generated build system.
          - Added buildCMakeProjectOrExit() which is a facade for building a CMake project.
          - Added generateBuildSystemFromCMakeProject() to generate the build system from
            a CMake project.
          - Removed buildCMakeProject(). This functionality is in buildCMakeProjectOrExit().


git-svn-id: svn://svn.chromium.org/blink/trunk@81041 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent b520e081
2011-03-14 Daniel Bates <dbates@rim.com>
Reviewed by David Kilzer.
Cleanup: Separate port-specific implementation details from webkitdirs::buildCMakeProject()
https://bugs.webkit.org/show_bug.cgi?id=55438
Separate out the EFL- and WinCE-specific logic from the port-independent logic in
webkitdirs::buildCMakeProject(). Also, remove redundant code for generating the
CMake arguments for feature defines.
* Scripts/build-webkit:
- Added cMakeArgsFromFeatures() to convert the @features array to CMake arguments.
- Modified EFL and WinCE-specific building logic to call buildCMakeProjectOrExit().
- Sorted forward declarations.
- Initialize $makeArgs with the empty string so as to simplify its use in string operations;
Modified call sites as needed.
* Scripts/webkitdirs.pm:
- Added cleanCMakeGeneratedProject() to clean a CMake build.
- Added buildCMakeGeneratedProject() to build using generated build system.
- Added buildCMakeProjectOrExit() which is a facade for building a CMake project.
- Added generateBuildSystemFromCMakeProject() to generate the build system from
a CMake project.
- Removed buildCMakeProject(). This functionality is in buildCMakeProjectOrExit().
2011-03-14 John Knottenbelt <jknotten@chromium.org>
Reviewed by Steve Block.
......
......@@ -3,6 +3,7 @@
# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
# Copyright (C) 2009 Google Inc. All rights reserved.
# Copyright (C) 2010 moiji-mobile.com All rights reserved.
# Copyright (C) 2011 Research In Motion Limited. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
......@@ -41,6 +42,7 @@ use webkitdirs;
use webkitperl::features;
use POSIX;
sub cMakeArgsFromFeatures();
sub checkForJavaSDK();
sub formatBuildTime($);
sub writeCongrats();
......@@ -55,7 +57,7 @@ my $v8 = 0;
my $installHeaders;
my $installLibs;
my $prefixPath;
my $makeArgs;
my $makeArgs = "";
my $noWebKit2 = 0;
my $startTime = time();
......@@ -419,7 +421,7 @@ if (isGtk()) {
}
push @options, "--prefix=" . $prefixPath if defined($prefixPath);
push @options, "--makeargs=" . $makeArgs if defined($makeArgs);
push @options, "--makeargs=" . $makeArgs if $makeArgs;
} elsif (isAppleMacWebKit()) {
checkForJavaSDK();
push @options, XcodeOptions();
......@@ -487,7 +489,7 @@ if (isGtk()) {
@options = @ARGV;
push @options, "--install-headers=" . $installHeaders if defined($installHeaders);
push @options, "--install-libs=" . $installLibs if defined($installLibs);
push @options, "--makeargs=" . $makeArgs if defined($makeArgs);
push @options, "--makeargs=" . $makeArgs if $makeArgs;
foreach (@features) {
push @options, "DEFINES+=$_->{define}=${$_->{value}}" if ${$_->{value}} != $_->{default};
......@@ -511,10 +513,7 @@ if (isInspectorFrontend()) {
if (isWx()) {
downloadWafIfNeeded();
@options = ();
if (defined($makeArgs)) {
@options = split(/ /, $makeArgs);
}
@options = split(/ /, $makeArgs);
@projects = ();
my $result = buildWafProject('.', $clean, @options);
exit exitStatus($result) if exitStatus($result);
......@@ -529,34 +528,13 @@ if (isChromium()) {
}
if (isEfl()) {
@options = ();
@projects = ();
foreach (@features) {
my $featureName = $_->{define};
if ($featureName) {
my $featureEnabled = ${$_->{value}} ? "ON" : "OFF";
push @options, "-D$featureName=$featureEnabled";
}
}
push @options, "--makeargs=" . $makeArgs if defined($makeArgs);
push @options, "--prefix=" . $prefixPath if defined($prefixPath);
my $result = buildCMakeEflProject($clean, @options);
exit exitStatus($result) if exitStatus($result);
# By default we build using all of the available CPUs.
$makeArgs .= ($makeArgs ? " " : "") . "-j" . numberOfCPUs() if $makeArgs !~ /-j\s*\d+/;
buildCMakeProjectOrExit($clean, "Efl", $prefixPath, $makeArgs, cMakeArgsFromFeatures());
}
if (isWinCE()) {
@options = ();
@projects = ();
foreach (@features) {
my $featureName = $_->{define};
if ($featureName) {
my $featureEnabled = ${$_->{value}} ? "ON" : "OFF";
push @options, "-D$featureName=$featureEnabled";
}
}
push @options, "--makeargs=" . $makeArgs if defined($makeArgs);
my $result = buildCMakeWinCEProject("STANDARDSDK_500 (ARMV4I)", $clean, @options);
exit exitStatus($result) if exitStatus($result);
buildCMakeProjectOrExit($clean, "WinCE", $prefixPath, $makeArgs, ("-DCMAKE_WINCE_SDK=STANDARDSDK_500 (ARMV4I)", cMakeArgsFromFeatures()));
}
# Build, and abort if the build fails.
......@@ -613,6 +591,19 @@ writeCongrats();
exit 0;
sub cMakeArgsFromFeatures()
{
my @args;
foreach (@features) {
my $featureName = $_->{define};
if ($featureName) {
my $featureEnabled = ${$_->{value}} ? "ON" : "OFF";
push @args, "-D$featureName=$featureEnabled";
}
}
return @args;
}
sub checkForJavaSDK()
{
my $jniHeader = "/System/Library/Frameworks/JavaVM.framework/Headers/jni.h";
......
# Copyright (C) 2005, 2006, 2007, 2010 Apple Inc. All rights reserved.
# Copyright (C) 2009 Google Inc. All rights reserved.
# Copyright (C) 2011 Research In Motion Limited. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
......@@ -1476,90 +1477,72 @@ sub buildAutotoolsProject($@)
return $result;
}
sub buildCMakeProject($@)
sub generateBuildSystemFromCMakeProject
{
my ($port, $clean, @buildParams) = @_;
my $dir = File::Spec->canonpath(baseProductDir());
my ($port, $prefixPath, @cmakeArgs) = @_;
my $config = configuration();
my $result;
my $cmakeBuildArgs = "";
my $makeArgs = "";
my @buildArgs;
if ($port =~ m/wince/i) {
if ($config =~ m/debug/i) {
$cmakeBuildArgs .= " --config Debug";
} elsif ($config =~ m/release/i) {
$cmakeBuildArgs .= " --config Release";
}
} else {
$makeArgs .= " -j" . numberOfCPUs() if ($makeArgs !~ m/-j\s*\d+/);
}
if ($clean) {
print "Cleaning the build directory '$dir'\n";
$dir = File::Spec->catfile($dir, $config);
File::Path::remove_tree($dir, {keep_root => 1});
$result = 0;
} else {
my $cmakebin = "cmake";
my $cmakeBuildCommand = $cmakebin . " --build .";
push @buildArgs, "-DPORT=$port";
for my $i (0 .. $#buildParams) {
my $opt = $buildParams[$i];
if ($opt =~ /^--makeargs=(.*)/i ) {
$makeArgs = $1;
} elsif ($opt =~ /^--prefix=(.*)/i ) {
push @buildArgs, "-DCMAKE_INSTALL_PREFIX=$1";
} else {
push @buildArgs, $opt;
}
}
if ($config =~ m/debug/i) {
push @buildArgs, "-DCMAKE_BUILD_TYPE=Debug";
} elsif ($config =~ m/release/i) {
push @buildArgs, "-DCMAKE_BUILD_TYPE=Release";
}
my $buildPath = File::Spec->catdir(baseProductDir(), $config);
File::Path::mkpath($buildPath) unless -d $buildPath;
my $originalWorkingDirectory = getcwd();
chdir($buildPath) or die;
push @buildArgs, sourceDir() . "/Source";
$dir = File::Spec->catfile($dir, $config);
File::Path::mkpath($dir);
chdir $dir or die "Failed to cd into " . $dir . "\n";
print "Calling '$cmakebin @buildArgs' in " . $dir . "\n\n";
my $result = system "$cmakebin @buildArgs";
if ($result ne 0) {
die "Failed while running $cmakebin to generate makefiles!\n";
}
my @args;
push @args, "-DPORT=\"$port\"";
push @args, "-DCMAKE_INSTALL_PREFIX=\"$prefixPath\"" if $prefixPath;
if ($config =~ /release/i) {
push @args, "-DCMAKE_BUILD_TYPE=Release";
} elsif ($config =~ /debug/i) {
push @args, "-DCMAKE_BUILD_TYPE=Debug";
}
push @args, @cmakeArgs if @cmakeArgs;
push @args, '"' . File::Spec->catdir(sourceDir(), "Source") . '"';
$cmakeBuildArgs .= " -- " . $makeArgs;
# We call system("cmake @args") instead of system("cmake", @args) so that @args is
# parsed for shell metacharacters.
my $returnCode = system("cmake @args");
print "Calling '$cmakeBuildCommand $cmakeBuildArgs' in " . $dir . "\n\n";
$result = system "$cmakeBuildCommand $cmakeBuildArgs";
if ($result ne 0) {
die "Failed to build $port port\n";
}
chdir($originalWorkingDirectory);
return $returnCode;
}
chdir ".." or die;
sub buildCMakeGeneratedProject($)
{
my ($makeArgs) = @_;
my $config = configuration();
my $buildPath = File::Spec->catdir(baseProductDir(), $config);
if (! -d $buildPath) {
die "Must call generateBuildSystemFromCMakeProject() before building CMake project.";
}
my @args = ("--build", $buildPath, "--config", $config);
push @args, ("--", $makeArgs) if $makeArgs;
return $result;
# We call system("cmake @args") instead of system("cmake", @args) so that @args is
# parsed for shell metacharacters. In particular, $makeArgs may contain such metacharacters.
return system("cmake @args");
}
sub buildCMakeEflProject($@)
sub cleanCMakeGeneratedProject()
{
my ($clean, @buildArgs) = @_;
return buildCMakeProject("Efl", $clean, @buildArgs);
my $config = configuration();
my $buildPath = File::Spec->catdir(baseProductDir(), $config);
if (-d $buildPath) {
return system("cmake", "--build", $buildPath, "--config", $config, "--target", "clean");
}
return 0;
}
sub buildCMakeWinCEProject($@)
sub buildCMakeProjectOrExit($$$$@)
{
my ($sdk, $clean, @buildArgs) = @_;
return buildCMakeProject("WinCE -DCMAKE_WINCE_SDK=\"" . $sdk . "\"", $clean, @buildArgs);
my ($clean, $port, $prefixPath, $makeArgs, @cmakeArgs) = @_;
my $returnCode;
if ($clean) {
$returnCode = exitStatus(cleanCMakeGeneratedProject());
exit($returnCode) if $returnCode;
}
$returnCode = exitStatus(generateBuildSystemFromCMakeProject($port, $prefixPath, @cmakeArgs));
exit($returnCode) if $returnCode;
$returnCode = exitStatus(buildCMakeGeneratedProject($makeArgs));
exit($returnCode) if $returnCode;
}
sub buildQMakeProject($@)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment