Scroll to navigation

Module::Build::SDL(3pm) User Contributed Perl Documentation Module::Build::SDL(3pm)


Module::Build::SDL - Module::Build subclass for building SDL apps/games [not stable yet]


When creating a new SDL application/game you can create Build.PL like this:

 use Module::Build::SDL;
 my $builder = Module::Build::SDL->new(
     module_name   => 'Games::Demo',
     dist_version  => '1.00',
     dist_abstract => 'Demo game based on Module::Build::SDL',
     dist_author   => '',
     license       => 'perl',
     requires      => {
         'SDL'     => 0,
     #+ others Module::Build options

Once you have created a SDL application/game via Module::Build::SDL as described above you can use some extra build targets/actions:

  • you can create a PAR distribution like:

     $ perl ./Build.PL
     $ ./Build
     $ ./Build par

    There are some extra parameters related to 'par' action you can pass to Module::Build::SDL->new():

     parinput  => 'bin/'
     paroutput => 'filename.par.exe',
     parlibs   => [ qw/SDL SDL_main SDL_gfx/ ],  #external libraries (.so/.dll) to be included into PAR
     parmods   => [ qw/Module::A Module::B/ ],   #extra modules to be included into PAR
  • to run the game from distribution directory you can use:

     $ perl ./Build.PL
     $ ./Build
     $ ./Build run
  • TODO: maybe some additional actions: parexe, parmsi, deb, rpm


Module::Build::SDL is a subclass of Module::Build created to make easy some tasks specific to SDL applications - e.g. packaging SDL application/game into PAR archive.


Module::Build::SDL expects the following layout in project directory:

 #example: game with the main *.pl script + data files + modules (*.pm)

the most simple game should look like:

 #example: simple one-script apllication/game

In short - there are 3 expected subdirectories:

  • bin - one or more perl scripts (*.pl) to start the actual application/game
  • lib - application/game specific modules (*.pm) organized in dir structure in "usual perl manners"
  • data - directory for storing application data (pictures, sounds etc.). This subdirectory is handled as a "ShareDir" (see File::ShareDir for more details)
  • As the project is (or could be) composed as a standard perl distribution it also support standard subdirectory 't' (with tests).


When creating a SDL application/game based on Module::Build::SDL it is recommended to follow these rules:

  • Use the name for your game from Games::* namespace; it will make the later release to CPAN much easier.
  • Put all data files into data subdirectory and access the data subdir only via File::ShareDir (namely by calling distdir() function)
  • TODO: maybe add more
2023-08-07 perl v5.36.0