#!/usr/bin/perl

use strict;
use warnings;

my $srcdir = "$ENV{'KESOSRCPATH'}/builder";
die "Please set \$KESOSRCPATH to your KESO src directory\n" unless -d $srcdir;

open(DOC, "$ENV{'KESOSRCPATH'}/../bin/X-options.pm") or die "cannot open $ENV{'KESOSRCPATH'}/../bin/X-options.pm: $!";
my $doch = eval(join('', <DOC>));
if ($@) {
	die "Failed to parse documentation: $@";
}
close(DOC);


my %options = ( );

my @todo = ( $srcdir );
while (@todo) {
	my $dir = shift @todo;
	opendir(DIR, $dir) or die "cannot opendir $dir: $!\n";
	my @entries = grep ( !/^\./ , readdir(DIR) );
	closedir(DIR);

	@entries = map { "$dir/$_" } @entries;
	push @todo, grep { -d $_ } @entries;

	foreach my $jfile ( grep (/\.java$/, @entries) ) {
		open(JFILE, $jfile) or die "could not open $jfile: $!\n";
		while (my $line = <JFILE>) {
			if($line =~ /\.hasOption\("?([^)"]+)"?\)/) {
				my $opt = $1;
				if ($opt !~ /tokens\[1\]/ and $opt !~ /_X_/) {
					$options{$opt} = 1 ;
				}
			}
		}
		close(JFILE);
	}
}

if(@ARGV == 0) {
	foreach my $opt (sort keys %options) {
		my $sdesc = '[undocumented]';

		if(exists $doch->{$opt}) {
			$sdesc = $doch->{$opt}->{sdesc};
		}
		printf("%22s: %s\n", $opt, $sdesc);
	}

	print "\n";
	print "rc: $ENV{'KESORC'}\n" if(exists $ENV{'KESORC'});
	print "setenv JINOFLAGS \"$ENV{'JINOFLAGS'}\"\n";
	print "export JINOFLAGS=\"$ENV{'JINOFLAGS'}\"\n";

} else {
	foreach my $opt (@ARGV) {
		die "Unknown option $opt\n" unless exists $options{$opt};
		
		my $sdesc = '[undocumented]';
		my $desc = '';

		if(exists $doch->{$opt}) {
			$sdesc = $doch->{$opt}->{sdesc};
			$desc = $doch->{$opt}->{desc};
		}

		print "$opt: $sdesc\n";
		print $desc;
	}
}

