#!/usr/bin/perl -w
# Copyright (C) 2010 Google 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 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 FindBin;
use Getopt::Long;

use lib $FindBin::Bin;
use webkitdirs;
use VCSUtils;

sub checkPythonVersion()
{
    # Will exit 0 if Python is 2.7, non-zero otherwise.
    `python -c "import sys;sys.exit(sys.version_info[:2] != (2,7))"`;
    return exitStatus($?) == 0;
}

sub main()
{
    my $checkOnly = 0;
    my $showHelp = 0;
    my $getOptionsResult = GetOptions(
        'check-only!' => \$checkOnly,
        'help|h' => \$showHelp,
    );
    if (!$getOptionsResult || $showHelp) {
        print STDERR <<HELP;
Usage: $0 [options]
  --check-only        Check python version only.
  -h|--help           Show this help message.
HELP
        return 1;
    }
    # Congrats, your Python is fine.
    return 0 if checkPythonVersion();

    return 1 if $checkOnly;

    print "Your Python version is insufficient to run WebKit's Python code.  Please update.\n";
    print "See http://trac.webkit.org/wiki/PythonGuidelines for more info.\n";
    return 1;
}

exit(main());
