#!/usr/bin/env perl

# Copyright (C) 2005, 2007, 2013 Apple Inc. All rights reserved.
# Copyright (C) 2007 Staikos Computing Services, Inc.  <info@staikos.net>

#
# 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.

# Simplified "run" script for launching the WebKit2 MiniBrowser.

use strict;
use warnings;
use File::Spec::Functions qw/catdir/;
use FindBin;
use lib $FindBin::Bin;
use webkitdirs;

my $launcherName;
my $launcherPath;
my @jhbuildWrapper;

prohibitUnknownPort();
setConfiguration();

if (isGtk() || isWPE()) {
    runInFlatpakIfAvailable("/app/webkit/Tools/Scripts/run-minibrowser");

    # Check to see that all the frameworks are built.
    checkFrameworks();

    $launcherPath = catdir(productDir(), "bin", "MiniBrowser");
    die "Can't find $launcherPath" unless -x $launcherPath;
    @jhbuildWrapper = wrapperPrefixIfNeeded();
    print "Starting MiniBrowser.\n";
    exec @jhbuildWrapper, $launcherPath, @ARGV or die;
} elsif (isAppleCocoaWebKit()) {
    printHelpAndExitForRunAndDebugWebKitAppIfNeeded();
    exit exitStatus(runMiniBrowser());
} else {
    die "Unsupported platform."
}
