--- /dev/null
+#!/usr/bin/env perl
+#
+
+open XS, "< sdl_words.txt" or die "could not open sdl_words.txt\n";
+open CPP, "| cpp `sdl-config --cflags` - > SDL.cx" or die "Could not pipe to cpp, $!\n";
+
+print CPP <<HEADER;
+#include <SDL.h>
+#define TEXT_SOLID 1
+#define TEXT_SHADED 2
+#define TEXT_BLENDED 4
+#define UTF8_SOLID 8
+#define UTF8_SHADED 16
+#define UTF8_BLENDED 32
+#define UNICODE_SOLID 64
+#define UNICODE_SHADED 128
+#define UNICODE_BLENDED 256
+
+--cut--
+HEADER
+
+while (<XS>) {
+ chomp();
+ print CPP "#$_ $_\n";
+ $words{$_} = 0;
+}
+
+close XS;
+close CPP;
+
+#
+# ENUMS AREN'T CPPed we got to do this the hard way
+#
+
+open FP, "> sdl_const.c" or die "Could not write to sdl__const.c\n";
+
+print FP <<HERE;
+#include <SDL.h>
+#include <SDL_image.h>
+#include <SDL_mixer.h>
+#include <SDL_ttf.h>
+#include <SDL_net.h>
+#include <smpeg/smpeg.h>
+#define TEXT_SOLID 1
+#define TEXT_SHADED 2
+#define TEXT_BLENDED 4
+#define UTF8_SOLID 8
+#define UTF8_SHADED 16
+#define UTF8_BLENDED 32
+#define UNICODE_SOLID 64
+#define UNICODE_SHADED 128
+#define UNICODE_BLENDED 256
+
+int
+main ( int argc, char **argv ) {
+
+HERE
+
+for ( grep { $words{$_} == 0 } keys %words ) {
+ print FP <<THERE;
+ fprintf(stdout,"sub main::$_ { \%i }\n", $_);
+THERE
+
+}
+
+print FP <<HERE;
+}
+HERE
+
+system("gcc `sdl-config --cflags --libs` -o sdl_const sdl_const.c");
+
+my $enums;
+open ENUMS, "./sdl_const |";
+{
+ local $/ = undef;
+ $enums = <ENUMS>;
+}
+close ENUMS;
+
+$goodstuff .= "\n$enums";
+
+for ( split "\n", $goodstuff ) {
+ if (/sub\s+main::([A-Za-z0-9_]+)/) {
+ $words{$1} = 1;
+ }
+}
+
+for (keys %words) {
+ print STDERR "Failed to find $_\n" unless $words{$_};
+}
+
+(@words) = grep { $words{$_} == 1 } keys %words;
+
+$words = join(" ",@words);
+
+open CONST, "> ../lib/SDL/Constants.pm";
+
+print CONST <<HERE;
+# SDL::Constants
+#
+# This is an automatically generated file, don't bother editing.
+# Names are read from a list in sdl_words.txt and written by sdl_const.pl.
+#
+# Copyright (C) 2003 David J. Goehrig <dave\@sdlperl.org>
+#
+
+package SDL::Constants;
+
+$goodstuff
+
+1;
+
+HERE
+
+system("rm -f SDL.cx sdl_const sdl_const.c");