--- /dev/null
+#!/usr/bin/perl -w
+
+# Since the sdl_const.pl and gl_const.pl scripts with 2.0-beta2 don't seem to
+# work at all, this script takes SDL/Constans.pm and OpenGL/Constants.pm (as
+# original from 2.0-beta2) and fixes them up, and moves them into ../lib/
+
+# I already did this for 1.20.2, so you need to run this only if you intent
+# to rebuild the .pm files.
+
+# See http://Bloodgate.com/perl/sdl/sdl_perl.html
+
+use strict;
+
+##############################################################################
+
+my $sdl = read_file('SDL/Constants.pm');
+
+# remove 'main::' on subs
+$sdl =~ s/sub main::([\w]+)/sub $1/g;
+
+# turn on () on subs to make peep optimizer to inline them
+#$sdl =~ s/sub ([\w]+)\s+{/sub $1 () {/g;
+
+write_file('../lib/SDL/Constants.pm',insert_export($sdl));
+
+undef $sdl;
+
+##############################################################################
+
+my $gl = read_file('OpenGL/Constants.pm');
+
+# remove 'main::' on subs
+$gl =~ s/sub main::([\w]+)/sub $1/g;
+
+# turn on () on subs to make peep optimizer to inline them
+#$gl =~ s/sub ([\w]+)\s+{/sub $1 () {/g;
+
+write_file
+ ('../lib/SDL/OpenGL/Constants.pm',insert_export($gl,grep_constants()));
+
+1;
+
+sub read_file
+ {
+ my $file = shift;
+
+ print "Reading $file...";
+ my $FILE;
+ open $FILE, $file or die ("Cannot read $file: $!\n");
+ local $/; # slurp mode
+ my $doc = <$FILE>;
+ close $FILE;
+ print "done.\n";
+ $doc;
+ }
+
+sub write_file
+ {
+ my ($file,$txt) = @_;
+
+ print "Writing $file...";
+ my $FILE;
+ open $FILE, ">$file" or die ("Cannot write $file: $!\n");
+ print $FILE $txt;
+ close $FILE;
+ print "done.\n";
+ }
+
+sub insert_export
+ {
+ my $txt = shift;
+
+ my @sub = ();
+ # gather all sub names
+ $txt =~ s/sub ([\w]+)\s+/push @sub, $1; 'sub ' . $1 . ' '/eg;
+
+ # if we got a second list of names, parse it and include anything that isn't
+ # alreay in
+
+ my $add = "";
+ if (ref($_[0]) eq 'ARRAY')
+ {
+ my $const = shift;
+ foreach my $c (sort @$const)
+ {
+ if ( grep (/^$c->[0]$/, @sub) == 0)
+ {
+ print "Adding $c->[0] $c->[1]\n";
+ $add .= "sub $c->[0] () { $c->[1] }\n";
+ push @sub, $c->[0];
+ }
+ }
+ $add .= "\n";
+ }
+
+ # SDL/Constants.pm contains doubles :-( So filter them out.
+ my @sorted = sort @sub;
+ my $last; @sub = (); my @doubles;
+ foreach my $cur (@sorted)
+ {
+ if (defined $last && $last eq $cur)
+ {
+ # double!
+ push @doubles,$last;
+ }
+ else
+ {
+ push @sub, $last if defined $last;
+ }
+ $last = $cur;
+ }
+ foreach my $cur (@doubles)
+ {
+ $txt =~ s/\bsub $cur.*//g; # remove
+ }
+
+ my $export = "require Exporter;\nuse strict;\n";
+ $export .= "use vars qw/\$VERSION \@ISA \@EXPORT/;";
+ $export .= "\n\@ISA = qw/Exporter/;\n";
+
+ # this makes Exporter export the symbols from SDL::Constants to whatever
+ # package used SDL::Constants (usually SDL::Event.pm)
+ my $pack;
+ if ($txt =~ /SDL::Constants/)
+ {
+ $txt =~ s/SDL::Constants/SDL::Event/g;
+ $pack = 'SDL::Event';
+ }
+ if ($txt =~ /SDL::OpenGL::Constants/)
+ {
+ $txt =~ s/SDL::OpenGL::Constants/SDL::OpenGL/g;
+ $pack = 'SDL::OpenGL';
+ }
+ $export .= "\nsub import { $pack\->export_to_level(1, \@_); }\n";
+
+ $export .= "\n\@EXPORT = qw/\n";
+
+ my $line = "\t";
+ foreach my $s (sort @sub)
+ {
+ if (length($line)+length($s) > 70)
+ {
+ $export .= "$line\n"; $line = "\t";
+ }
+ $line .= "$s ";
+ }
+ $export .= "$line /;\n";
+
+ # insert Exporter section
+ $txt =~ s/sub/$export\n\n$add\nsub/;
+
+ $txt;
+ }
+
+sub grep_constants
+ {
+ # grep all the OpenGL constants from SDL and return them
+
+ my $sdl_gl = read_file('/usr/include/GL/gl.h');
+
+ my @const = ();
+ $sdl_gl =~ s/^#define (GL_.*?)\s+(0x[\da-fA-F]+)/push @const,[$1,$2];/egm;
+
+ \@const;
+ }
+
+END { print "\n"; }