Commit | Line | Data |
8fde61e3 |
1 | #! perl -w |
2 | # |
3 | # Copyright (C) 2003 chromatic |
4 | # Copyright (C) 2004 David J. Goehrig |
1eb6d3ca |
5 | # Copyright (C) 2009 Kartik Thakore |
8fde61e3 |
6 | |
7 | use strict; |
8 | |
9 | use lib 'make/lib'; |
10 | |
11 | use SDL::Build; |
12 | use YAML; |
13 | |
14 | my $sdl_compile_flags = `sdl-config --cflags`; |
15 | my $sdl_link_flags = `sdl-config --libs`; |
16 | |
17 | if ($? >> 8) |
18 | { |
19 | die "SDL doesn't appear to be installed.\n" . |
20 | "Please check that sdl-config is in your path and try again.\n"; |
21 | } |
22 | |
23 | chomp( $sdl_compile_flags ); |
24 | chomp( $sdl_link_flags ); |
25 | |
26 | # subsystem to build |
27 | # file |
28 | # location of source file => location of build file to get name right |
29 | # libraries |
30 | # name of shared library (soname) |
31 | # preprocessor definition |
32 | # name of header file |
33 | my %subsystems = |
34 | ( |
35 | SDL => { |
36 | file => { |
37 | from => 'src/SDL.xs', |
c84dba46 |
38 | to => './SDL_perl.xs', |
8fde61e3 |
39 | }, |
40 | libraries => [qw( SDL SDL_image SDL_mixer SDL_net SDL_ttf SDL_gfx |
41 | png jpeg smpeg )], |
42 | }, |
43 | OpenGL => { |
44 | file => { |
45 | from => 'src/OpenGL.xs', |
b13012a4 |
46 | to => 'SDL/OpenGL.xs', |
8fde61e3 |
47 | }, |
48 | libraries => [qw( SDL GL GLU )], |
49 | }, |
50 | SFont => { |
51 | file => { |
52 | from => 'src/SFont.xs', |
b13012a4 |
53 | to => 'SDL/SFont.xs', |
8fde61e3 |
54 | }, |
55 | libraries => [qw( SDL SDL_image )], |
56 | }, |
57 | ); |
58 | |
59 | my %libraries = ( |
60 | SDL => { |
61 | define => 'HAVE_SDL', |
62 | header => 'SDL.h', |
63 | }, |
64 | SDL_image => { |
65 | define => 'HAVE_SDL_IMAGE', |
66 | header => 'SDL_image.h' |
67 | }, |
68 | SDL_mixer => { |
69 | define => 'HAVE_SDL_MIXER', |
70 | header => 'SDL_mixer.h' |
71 | }, |
72 | SDL_net => { |
73 | define => 'HAVE_SDL_NET', |
74 | header => 'SDL_net.h' |
75 | }, |
76 | SDL_ttf => { |
77 | define => 'HAVE_SDL_TTF', |
78 | header => 'SDL_ttf.h' |
79 | }, |
80 | SDL_gfx => { |
81 | define => 'HAVE_SDL_GFX', |
82 | header => 'SDL_gfxPrimitives.h' |
83 | }, |
84 | png => { |
85 | define => 'HAVE_PNG', |
86 | header => 'png.h', |
87 | }, |
88 | jpeg => { |
89 | define => 'HAVE_JPEG', |
90 | header => 'jpeglib.h', |
91 | }, |
92 | smpeg => { |
93 | define => 'HAVE_SMPEG', |
94 | header => 'smpeg.h', |
95 | }, |
96 | GL => { |
97 | define => 'HAVE_GL', |
98 | header => 'gl.h' |
99 | }, |
100 | GLU => { |
101 | define => 'HAVE_GLU', |
102 | header => 'glu.h' |
103 | }, |
104 | ); |
105 | |
106 | # need the platform-specific module to find include paths correctly |
107 | # see build/lib/SDL/Build/*pm |
108 | my $arch = SDL::Build->get_arch( $^O ); |
109 | |
110 | # see which subsystems can be built -- do we have headers for them? |
111 | my $build_systems = $arch->find_subsystems( \%subsystems, \%libraries ); |
112 | |
113 | # now write SDL::Config |
114 | $arch->write_sdl_config( $build_systems ); |
115 | |
116 | # and fetch all of the information needed to compile |
117 | my $defines = $arch->build_defines( \%libraries, $build_systems ); |
118 | my $includes = $arch->build_includes( \%libraries, $build_systems ); |
119 | my $links = $arch->build_links( \%libraries, $build_systems ); |
120 | |
121 | # mangle the compilable files into a format Module::Build can understand |
122 | my %xs = map { $subsystems{$_}{file}{from} => $subsystems{$_}{file}{to} } |
123 | keys %subsystems; |
8fde61e3 |
124 | my $build = SDL::Build->new( |
c6a7b1aa |
125 | module_name => 'SDL', |
8fde61e3 |
126 | dist_name => 'SDL_Perl', |
127 | license => 'lgpl', |
128 | dist_version_from => 'lib/SDL.pm', |
129 | build_requires => |
130 | { |
131 | 'Test::Simple' => '0.47', |
132 | 'Module::Build' => '0.22', |
133 | }, |
134 | build_recommends => |
135 | { |
136 | 'Pod::ToDemo' => '0.20', |
137 | }, |
e00a4871 |
138 | c_source => 'src', |
8fde61e3 |
139 | xs_files => \%xs, |
140 | dist_author => 'David J. Goehrig <DGOEHRIG@cpan.org>', |
141 | ); |
142 | |
143 | # and here's where the real (and ugly) magic works... see SDL::Build |
144 | $build->set_flags( |
145 | \%subsystems, |
146 | $build_systems, |
147 | $defines, |
148 | $includes, |
149 | $links, |
150 | $sdl_compile_flags, |
151 | $sdl_link_flags, |
152 | ); |
153 | |
154 | # now we're ready to go! |
155 | $build->create_build_script(); |