#!/usr/bin/env perl

# Copyright (C) 2005, 2013 Apple Inc.  All rights reserved.
# Copyright (C) 2007 Eric Seidel <eric@webkit.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1.  Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer. 
# 2.  Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution. 
# 3.  Neither the name of Apple Inc. ("Apple") nor the names of
#     its contributors may be used to endorse or promote products derived
#     from this software without specific prior written permission. 
#
# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


use strict;
use warnings;
use FindBin;
use Getopt::Long qw(:config pass_through);
use lib $FindBin::Bin;
use webkitdirs;
use webkitperl::FeatureList qw(getFeatureOptionList);
use POSIX;
use Text::ParseWords;

sub writeCongrats();

prohibitUnknownPort();

my $shouldRunStaticAnalyzer = 0;
my $minimal = 0;
my $coverageSupport = 0;
my $showHelp = 0;
my $ftlJIT = int(isAppleCocoaWebKit() && !willUseIOSSimulatorSDK() || ((isARM64() || isX86_64()) && (isGtk() || isJSCOnly())));
my $forceCLoop = 0;
my $cli = 0;
my $makeArgs = "";
my @cmakeArgs;
my $buildDir = "";
my $copyLibraries = 1;
my $startTime = time();

my @features = getFeatureOptionList();

# Initialize values from defaults
foreach (@ARGV) {
    if ($_ eq '--minimal') {
        $minimal = 1;
    }
}

# Initialize values from defaults
foreach (@features) {
    ${$_->{value}} = ($minimal ? 0 : $_->{default});
}

# Additional environment parameters
push @ARGV, parse_line('\s+', 0, $ENV{'BUILD_JSC_ARGS'}) if ($ENV{'BUILD_JSC_ARGS'});

my $programName = basename($0);
my $usage = <<EOF;
Usage: $programName [options] [options to pass to build system]
  --help                        Show this help message
  --[no-]analyze                Toggle code static analysis (default: $shouldRunStaticAnalyzer)
  --[no-]coverage               Toggle code coverage support (default: $coverageSupport)
  --[no-]ftl-jit                Toggle FTL JIT support (default: $ftlJIT)
  --[no-]copy-libraries         Toggle whether to copy libraries (default: $copyLibraries)
  --cloop                       Use C Loop interpreter (default: $forceCLoop)
  --cli                         Build the new jsc command line interface (default: $cli)
  --makeargs=<arguments>        Optional Makefile flags
  --cmakeargs=<arguments>       One or more optional CMake flags (e.g. --cmakeargs="-DFOO=bar -DCMAKE_PREFIX_PATH=/usr/local")
  --build-dir=<path>            Build out of tree in directory at <path>
EOF

my %options = (
    'analyze!' => \$shouldRunStaticAnalyzer,
    'coverage!' => \$coverageSupport,
    'help' => \$showHelp,
    'ftl-jit!' => \$ftlJIT,
    'cloop!' => \$forceCLoop,
    'cli!' => \$cli,
    'copy-libraries!' => \$copyLibraries,
    'makeargs=s' => \$makeArgs,
    'cmakeargs=s' => \@cmakeArgs,
    'build-dir=s' => \$buildDir
);

foreach (@features) {
    if ($_->{javascript}) {
        my $opt = sprintf("%-35s", "  --[no-]$_->{option}");
        $usage .= "$opt $_->{desc} (default: $_->{default})\n";
        $options{"$_->{option}!"} = $_->{value};
    }
}

GetOptions(%options);

if ($showHelp) {
   print STDERR $usage;
   exit 1;
}

if (isAnyWindows()) {
    $ftlJIT = 0;
}

if ($buildDir && !isCMakeBuild()) {
    print STDERR "--build-dir is currently only supported for cmake builds";
    exit 1;
}

if (isWinCairo() || (isJSCOnly() && isWindows())) {
    (system("python Tools/Scripts/update-webkit-wincairo-libs.py") == 0) or die;
}

checkRequiredSystemConfig();
setConfiguration();
chdirWebKit();
my @options = XcodeOptions();
my @additionalSupportOptions = ();
push @additionalSupportOptions, XcodeCoverageSupportOptions() if $coverageSupport;
push @additionalSupportOptions, XcodeStaticAnalyzerOption() if $shouldRunStaticAnalyzer;

if ($forceCLoop) {
    $ftlJIT = 0;
}

if (isCMakeBuild()) {
    if ($forceCLoop) {
        push @cmakeArgs, " -DENABLE_JIT=OFF";
        push @cmakeArgs, " -DENABLE_C_LOOP=ON";
    }
    push @cmakeArgs, $ftlJIT ? " -DENABLE_FTL_JIT=ON" : " -DENABLE_FTL_JIT=OFF";
    if ($buildDir) {
        push @cmakeArgs, " " . sourceDir();
        setBaseProductDir($buildDir);
    }

    my @featureArgs = cmakeArgsFromFeatures(@features);

    my $buildTarget = "";
    unless (isAnyWindows()) {
        # By default we build using all of the available CPUs
        $makeArgs .= ($makeArgs ? " " : "") . "-j" . numberOfCPUs() if $makeArgs !~ /-j\s*\d+/;
        $buildTarget = "jsc testb3 testair testapi testmasm testdfg $makeArgs";
    } elsif (canUseNinja()) {
        $buildTarget .= "jsc testapi testmasm";
    }

    # This call only returns if nothing wrong happened
    buildCMakeProjectOrExit(0, undef, $buildTarget, @featureArgs, @cmakeArgs);
    writeCongrats();
    exit exitStatus(0);
}

if (isAppleCocoaWebKit()) {
    push @options, ($forceCLoop ? "ENABLE_JIT=ENABLE_JIT=0" : "ENABLE_JIT=ENABLE_JIT");
    push @options, ($forceCLoop ? "ENABLE_C_LOOP=ENABLE_C_LOOP" : "ENABLE_C_LOOP=ENABLE_C_LOOP=0");
    push @options, ($ftlJIT ? "ENABLE_FTL_JIT=ENABLE_FTL_JIT" : "ENABLE_FTL_JIT=ENABLE_FTL_JIT=0");

    sub option($$$)
    {
        my ($feature, $isEnabled, $defaultValue) = @_;
        return "" if $defaultValue == $isEnabled;
        return $feature . "=" . ($isEnabled ? $feature : "");
    }

    foreach (@features) {
        if ($_->{javascript}) {
            my $option = option($_->{define}, ${$_->{value}}, $_->{default});
            push @options, $option unless $option eq "";
        }
    }

    if ($copyLibraries) {
        my @copyLibrariesArgs = ("perl", "Tools/Scripts/copy-webkitlibraries-to-product-directory");
        push @copyLibrariesArgs, "--device" if willUseIOSDeviceSDK();
        push @copyLibrariesArgs, productDir();
        (system(@copyLibrariesArgs) == 0) or die;
    }
}

sub buildMyProject
{
    my ($projectDirectory, $projectName) = @_;
    my $result;
    chdir $projectDirectory or die "Can't find $projectName directory to build from";
    if (isAppleCocoaWebKit()) {
        my $compilerFlags = 'GCC_PREPROCESSOR_ADDITIONS="';
        if ($forceCLoop) {
            $compilerFlags .= "ENABLE_JIT=0 ENABLE_C_LOOP=1";
        }
        $compilerFlags .= '"';

        my $command = "make " . (lc configuration()) . " " . $compilerFlags . " " . join(" ", @ARGV);

        print "\n";
        print "building ", $projectName, "\n";
        print "running build command '", $command, "' in ", $projectDirectory, "\n\n";

        $result = system $command;
    } else {
        die "Building not defined for this platform!\n";
    }
    exit exitStatus($result) if exitStatus($result);
    chdirWebKit();
}

sub writeCongrats()
{
    my $endTime = time();
    my $buildTime = formatBuildTime($endTime - $startTime);

    print "\n";
    print "====================================================================\n";
    print " JavaScriptCore is now built ($buildTime). \n";
    print "====================================================================\n";
}

buildMyProject("Source/bmalloc", "bmalloc");
buildMyProject("Source/WTF", "WTF");
buildMyProject("Source/JavaScriptCore", "JavaScriptCore");
if (isAppleCocoaWebKit()) {
    writeCongrats();
}
if (isAppleCocoaWebKit() && $cli) {
    buildMyProject("Tools/jsc-cli", "jsc-cli");
}
