#!/usr/bin/perl -w
#
# Starts the GNU Java compiler.
#
# Command-line arguments should be in the style of Sun's Java compiler;
# these will be converted to gcj arguments before being passed to the
# gcj itself.
#
# Copyright (C) 2002-2003 by Ben Burton <bab@debian.org>
# Based on the original gcj-wrapper-3.2 shell script.

use strict;

# The real Java compiler:
my $javaCompiler = '/usr/bin/gcj-3.3';

# The command-line arguments to pass to the real Java compiler:
my @commandLine;

# The warning flags to pass to the GNU Java compiler:
my $warnings = '-Wall';

# Build the command-line from the arguments given.
my $parsingOptions = 1;
my $copyNextArg = 0;
my $ignoreNextArg = 0;
my $appendNextArg = '';
foreach my $arg (@ARGV) {
    # See if we already know what to do with this argument.
    if ($ignoreNextArg) {
        # Throw it away.
        $ignoreNextArg = 0;
        next;
    } elsif ($copyNextArg or not $parsingOptions) {
        # Copy it directly.
        push @commandLine, $arg;
        $copyNextArg = 0;
        next;
    } elsif ($appendNextArg) {
        # Append it to $appendNextArg and then copy directly.
        push @commandLine, ($appendNextArg . $arg);
        $appendNextArg = '';
        next;
    }

    # Try to interpret Sun-style options.
    if ($arg eq '-version') {
        push @commandLine, '--version';
    } elsif ($arg eq '-h' or $arg eq '-help') {
        push @commandLine, '--help';
    } elsif ($arg eq '-classpath' or $arg eq '--classpath' or $arg eq '--cp') {
        $appendNextArg = '--classpath=';
    } elsif ($arg eq '-encoding' or $arg eq '-bootclasspath' or
             $arg eq '-extdirs') {
        $appendNextArg = '-' . $arg . '=';
    } elsif ($arg eq '-d') {
        push @commandLine, '-d';
        $copyNextArg = 1;
    } elsif ($arg eq '-nowarn') {
        $warnings = '';
    } elsif ($arg =~ /^-g/) {
        # Some kind of debugging option - just switch debugging on.
        push @commandLine, '-g' if ($arg ne '-g:none');
    } elsif ($arg eq '-O') {
        push @commandLine, '-O2';
    } elsif ($arg =~ /^-X/) {
        # An extended Sun option (which we don't support).
        push @commandLine, '--help' if ($arg eq '-X');
    } elsif ($arg eq '-source' or $arg eq '-sourcepath' or $arg eq '-target') {
        # An unsupported option with a following argument.
        $ignoreNextArg = 1;
    } elsif ($arg =~ /^-/) {
        # An unsupported standalone option.
    } else {
        # Some non-option argument has been given.
        # Stop parsing options at this point.
        push @commandLine, $arg;
        $parsingOptions = 0;
    }
}

# Was there a partial argument that was never completed?
push @commandLine, $appendNextArg if ($appendNextArg);

# Call the real Java compiler.
my @fullCommandLine = ( $javaCompiler, '-C' );
push @fullCommandLine, $warnings if ($warnings);
push @fullCommandLine, @commandLine;
exec @fullCommandLine or exit(1);
