-
Notifications
You must be signed in to change notification settings - Fork 28
/
sdl_const.pl
116 lines (89 loc) · 2 KB
/
sdl_const.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/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");