#!/usr/bin/perl
##
## Copyright (C) 2003-2007, Marcelo E. Magallon <mmagallo[]debian org>
## Copyright (C) 2003-2007, Milan Ikits <milan ikits[]ieee org>
##
## This program is distributed under the terms and conditions of the GNU
## General Public License Version 2 as published by the Free Software
## Foundation or, at your option, any later version.

use strict;
use warnings;

do 'bin/make.pl';

#---------------------------------------------------------------------------------------

# function pointer definition
sub make_pfn_info($%)
{
    my $name = $_[0];
    return "  glewInfoFunc(\"$_[0]\", $name == NULL);";
}

#---------------------------------------------------------------------------------------

my @extlist = ();
my %extensions = ();

if (@ARGV)
{
    @extlist = @ARGV;

	foreach my $ext (sort @extlist)
	{
		my ($extname, $exturl, $types, $tokens, $functions, $exacts) = parse_ext($ext);
		my $extvar = $extname;
		$extvar =~ s/GL(X*)_/GL$1EW_/;
		my $extpre = $extname;
		$extpre =~ s/(GLX|GLW|GL).*/$1/;
		$extpre = lc $extpre;

		#make_separator($extname);
		print "#ifdef $extname\n\n";
		print "static void _glewInfo_$extname (void)\n{\n";
		if ($extvar =~ /VERSION/)
		{
			print "  glewPrintExt(\"$extname\", $extvar, $extvar, $extvar);\n";
		}
		else
		{
			print "  glewPrintExt(\"$extname\", $extvar, $extpre" .
				"ewIsSupported(\"$extname\"), $extpre" .
				"ewGetExtension(\"$extname\"));\n";
		}
		output_decls($functions, \&make_pfn_info);
		print "}\n\n";
		print "#endif /* $extname */\n\n";
	}
}
