#!/usr/bin/perl -w

# Copyright (C) 2007 Apple Computer, 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. 
# 3.  Neither the name of Apple Computer, 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 under gdb" script for Web Kit Open Source Project.

use strict;
use Getopt::Long;
use FindBin;
use lib $FindBin::Bin;
use webkitdirs;
use File::Temp qw/:mktemp/;

setConfiguration();
my $productDir = productDir();
my $droseraPath = "$productDir/Drosera.app/Contents/MacOS/Drosera";

# Check to see that gdb is in the usual place.
my $gdbPath = "/usr/bin/gdb";
die "Can't find gdb executable. Is gdb installed?\n" unless -x $gdbPath;

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

# Put a command to set DYLD_FRAMEWORK_PATH in a temp file.
my ($fh, $path) = mkstemp("/tmp/gdb-drosera-XXXX");
print $fh "set env DYLD_FRAMEWORK_PATH $productDir\n";

# Start up Drosera.
print "Start Drosera under gdb with DYLD_FRAMEWORK_PATH set to point to built WebKit in $productDir.\n";
exec $gdbPath, "-x", $path, $droseraPath or die;

# Delete the temporary file.
unlink0($fh, $path) or die "Error unlinking file $path safely"; 

