#!/usr/bin/perl -w

# Copyright (C) 2014-2015 Apple Inc. All rights reserved.
#
# 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.
#
# THIS SOFTWARE IS PROVIDED BY APPLE INC. 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 INC. 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 File::Basename;
use FindBin;
use Getopt::Long qw(:config pass_through);
use lib $FindBin::Bin;
use webkitdirs;

my $showHelp = 0;
my $clean = 0;

my $programName = basename($0);
my $usage = <<EOF;
Usage: $programName [options] [options to pass to build system]
  --help        Show this help message
  --clean       Clean up the build directory
EOF

my $result = GetOptions(
    'help' => \$showHelp,
    'clean' => \$clean,
);

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

checkRequiredSystemConfig();
setConfiguration();
chdirWebKit();

chdir "Tools/LayoutTestRelay" or die;

# FIXME: This tool is only useful when building WebKit for iOS Simulator. For now,
#        to avoid breaking some Apple Internal tools we support calling this script
#        without --ios-simulator so long as we are building on a Mac.
if (isAppleMacWebKit() && !willUseIOSDeviceSDK()) {
    # FIXME: Changing SDK at this point results in an inconsistent webkitdirs state.
    # We should make it so that webkitdirs functions never see the wrong SDK.
    setXcodeSDK(undef); # Force use of Mac SDK if --ios-simulator was passed
    exit exitStatus(buildXCodeProject("LayoutTestRelay", $clean, XcodeOptions(), @ARGV));
}

print STDERR "LayoutTestRelay is only supported for iOS Simulator.\n";
exit 1;
