Commit | Line | Data |
85fcc9ee |
1 | #! perl -w |
8fde61e3 |
2 | # |
85fcc9ee |
3 | # Copyright (C) 2003 chromatic |
4 | # Copyright (C) 2004 David J. Goehrig |
5 | # Copyright (C) 2009 Kartik Thakore |
8fde61e3 |
6 | |
7 | use strict; |
084b921f |
8 | use warnings; |
9 | use Carp; |
8fde61e3 |
10 | use lib 'make/lib'; |
11 | |
0cdd4aa7 |
12 | use Data::Dumper; |
8fde61e3 |
13 | use SDL::Build; |
9632eafc |
14 | use SDL::Utility; |
8fde61e3 |
15 | use YAML; |
85fcc9ee |
16 | use YAML::Node; |
8fde61e3 |
17 | |
2a668066 |
18 | print STDERR <<BROKENWIN if ($^O =~ /MSWin.*|cygwin/ ); |
6fc151b2 |
19 | *************************** !!!WARNING!!! ***************************** |
20 | Windows support is currently experimental - you can continue, but |
21 | you've been warned! If you are interested in helping please contact us |
22 | at sdl-devel\@perl.org, or join us on #sdl in irc.perl.org |
23 | *********************************************************************** |
2a668066 |
24 | BROKENWIN |
49ee715f |
25 | |
9632eafc |
26 | my $sdl_compile_flags = SDL::Utility->sdl_c_flags(); |
27 | my $sdl_link_flags = SDL::Utility->sdl_libs(); |
8fde61e3 |
28 | # subsystem to build |
29 | # file |
30 | # location of source file => location of build file to get name right |
31 | # libraries |
32 | # name of shared library (soname) |
33 | # preprocessor definition |
34 | # name of header file |
35 | my %subsystems = |
36 | ( |
37 | SDL => { |
38 | file => { |
39 | from => 'src/SDL.xs', |
2a668066 |
40 | to => 'lib/SDL_perl.xs', |
8fde61e3 |
41 | }, |
85fcc9ee |
42 | libraries => [qw( SDL SDL_image SDL_mixer SDL_net SDL_ttf SDL_gfx |
43 | png jpeg smpeg )], |
8fde61e3 |
44 | }, |
95f5be30 |
45 | Video => { |
46 | file => { |
47 | from => 'src/Core/Video.xs', |
48 | to => 'lib/SDL/Video.xs', |
49 | }, |
50 | libraries => [qw( SDL )], |
51 | }, |
e4ab5b2e |
52 | Rect => { |
53 | file => { |
f9be87f4 |
54 | from => 'src/Core/objects/Rect.xs', |
e4ab5b2e |
55 | to => 'lib/SDL/Rect.xs', |
56 | }, |
9346cc6b |
57 | libraries => [qw( SDL )], |
e4ab5b2e |
58 | }, |
3e3f41ee |
59 | Color => { |
60 | file => { |
f9be87f4 |
61 | from => 'src/Core/objects/Color.xs', |
3e3f41ee |
62 | to => 'lib/SDL/Color.xs', |
63 | }, |
64 | libraries => [qw( SDL )], |
65 | }, |
88a46efc |
66 | Surface => { |
67 | file => { |
f32a5342 |
68 | from => 'src/Core/objects/Surface.xs', |
88a46efc |
69 | to => 'lib/SDL/Surface.xs', |
70 | }, |
9346cc6b |
71 | libraries => [qw( SDL )], |
72 | }, |
73 | Overlay => { |
74 | file => { |
75 | from => 'src/Core/objects/Overlay.xs', |
76 | to => 'lib/SDL/Overlay.xs', |
77 | }, |
78 | libraries => [qw( SDL )], |
88a46efc |
79 | }, |
50d9130a |
80 | PixelFormat => { |
81 | file => { |
82 | from => 'src/Core/objects/PixelFormat.xs', |
83 | to => 'lib/SDL/PixelFormat.xs', |
84 | }, |
9346cc6b |
85 | libraries => [qw( SDL )], |
50d9130a |
86 | }, |
fca27343 |
87 | Palette => { |
88 | file => { |
89 | from => 'src/Core/objects/Palette.xs', |
90 | to => 'lib/SDL/Palette.xs', |
91 | }, |
92 | libraries => [qw( SDL )], |
93 | }, |
94 | |
f1ad86be |
95 | VideoInfo => { |
96 | file => { |
97 | from => 'src/Core/objects/VideoInfo.xs', |
98 | to => 'lib/SDL/VideoInfo.xs', |
99 | }, |
100 | libraries => [qw( SDL )], |
101 | }, |
102 | |
b41abbd6 |
103 | TTF_Font => { |
104 | file => { |
105 | from => 'src/TTF/objects/TTF_Font.xs', |
106 | to => 'lib/SDL/TTF_Font.xs', |
107 | }, |
108 | libraries => [qw( SDL SDL_ttf )], |
109 | }, |
8fde61e3 |
110 | OpenGL => { |
111 | file => { |
112 | from => 'src/OpenGL.xs', |
2a668066 |
113 | to => 'lib/SDL/OpenGL.xs', |
8fde61e3 |
114 | }, |
115 | libraries => [qw( SDL GL GLU )], |
116 | }, |
117 | SFont => { |
118 | file => { |
119 | from => 'src/SFont.xs', |
2a668066 |
120 | to => 'lib/SDL/SFont.xs', |
8fde61e3 |
121 | }, |
9346cc6b |
122 | libraries => [qw( SDL SDL_ttf )], |
8fde61e3 |
123 | }, |
124 | ); |
125 | |
126 | my %libraries = ( |
127 | SDL => { |
128 | define => 'HAVE_SDL', |
129 | header => 'SDL.h', |
130 | }, |
131 | SDL_image => { |
132 | define => 'HAVE_SDL_IMAGE', |
133 | header => 'SDL_image.h' |
134 | }, |
135 | SDL_mixer => { |
136 | define => 'HAVE_SDL_MIXER', |
137 | header => 'SDL_mixer.h' |
138 | }, |
139 | SDL_net => { |
140 | define => 'HAVE_SDL_NET', |
141 | header => 'SDL_net.h' |
142 | }, |
143 | SDL_ttf => { |
144 | define => 'HAVE_SDL_TTF', |
145 | header => 'SDL_ttf.h' |
146 | }, |
147 | SDL_gfx => { |
148 | define => 'HAVE_SDL_GFX', |
149 | header => 'SDL_gfxPrimitives.h' |
150 | }, |
151 | png => { |
152 | define => 'HAVE_PNG', |
153 | header => 'png.h', |
154 | }, |
155 | jpeg => { |
156 | define => 'HAVE_JPEG', |
157 | header => 'jpeglib.h', |
158 | }, |
159 | smpeg => { |
160 | define => 'HAVE_SMPEG', |
161 | header => 'smpeg.h', |
162 | }, |
163 | GL => { |
164 | define => 'HAVE_GL', |
165 | header => 'gl.h' |
166 | }, |
167 | GLU => { |
168 | define => 'HAVE_GLU', |
169 | header => 'glu.h' |
170 | }, |
171 | ); |
172 | |
173 | # need the platform-specific module to find include paths correctly |
174 | # see build/lib/SDL/Build/*pm |
175 | my $arch = SDL::Build->get_arch( $^O ); |
176 | |
177 | # see which subsystems can be built -- do we have headers for them? |
178 | my $build_systems = $arch->find_subsystems( \%subsystems, \%libraries ); |
179 | |
180 | # now write SDL::Config |
181 | $arch->write_sdl_config( $build_systems ); |
182 | |
183 | # and fetch all of the information needed to compile |
85fcc9ee |
184 | my $defines = $arch->build_defines( \%libraries, $build_systems ); |
185 | my $includes = $arch->build_includes( \%libraries, $build_systems ); |
186 | my $links = $arch->build_links( \%libraries, $build_systems ); |
8fde61e3 |
187 | |
188 | # mangle the compilable files into a format Module::Build can understand |
189 | my %xs = map { $subsystems{$_}{file}{from} => $subsystems{$_}{file}{to} } |
85fcc9ee |
190 | keys %subsystems; |
8fde61e3 |
191 | my $build = SDL::Build->new( |
85fcc9ee |
192 | module_name => 'SDL', |
8fde61e3 |
193 | dist_name => 'SDL_Perl', |
194 | license => 'lgpl', |
195 | dist_version_from => 'lib/SDL.pm', |
c4191b5a |
196 | configure_requires => |
8fde61e3 |
197 | { |
c4191b5a |
198 | 'YAML' => '0.68', |
199 | 'ExtUtils::CBuilder' => '0.260301', |
72a86b34 |
200 | 'Alien::SDL' => '0.7.1', |
c4191b5a |
201 | }, |
202 | build_requires => |
203 | { |
8fde61e3 |
204 | 'Test::Simple' => '0.47', |
630ffc1b |
205 | |
bf87e76a |
206 | }, |
8fde61e3 |
207 | build_recommends => |
208 | { |
eb33e5ff |
209 | 'Pod::ToDemo' => '0.20' |
8fde61e3 |
210 | }, |
85fcc9ee |
211 | c_source => 'src', |
8fde61e3 |
212 | xs_files => \%xs, |
fc3f64f4 |
213 | meta_add => |
214 | { |
57450fae |
215 | no_index => { file => [ <make/lib/SDL/*.pm>, <make/lib/SDL/Build/*.pm>, <make/lib/ExtUtils/CBuilder/*>, <make/lib/ExtUtils/*>, <make/lib/ExtUtils/CBuilder/Platform/Windows.pm> ] }, |
fc3f64f4 |
216 | }, |
c4191b5a |
217 | dist_author => 'David J. Goehrig <DGOEHRIG@cpan.org>, Kartik Thakore <KTHAKORE@cpan.org>', |
8fde61e3 |
218 | ); |
219 | |
f4666242 |
220 | if($arch eq 'Darwin') |
221 | { |
222 | $build->{c_source} = $arch->build_c_source( \%libraries, $build_systems ); |
223 | $build->{c_sources} = $arch->build_c_sources( \%libraries, $build_systems ); |
224 | $build->{install_base} = $arch->build_install_base( \%libraries, $build_systems ); |
225 | |
226 | } |
eb33e5ff |
227 | |
85fcc9ee |
228 | # and here's where the real (and ugly) magic works... see SDL::Build |
8fde61e3 |
229 | $build->set_flags( |
230 | \%subsystems, |
231 | $build_systems, |
232 | $defines, |
233 | $includes, |
234 | $links, |
235 | $sdl_compile_flags, |
236 | $sdl_link_flags, |
237 | ); |
8fde61e3 |
238 | # now we're ready to go! |
239 | $build->create_build_script(); |