---
name: "Module::Build::SDL"
section: "3pm"
platform: "linux"
package: "libsdl-perl"
version: "2.548-5+b1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Module::Build::SDL"
---

# Module::Build::SDL(3pm)

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

## NAME

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

## SYNOPSIS

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   => 'coder@cpan.org',
     license       => 'perl',
     requires      => {
         'SDL'     => 0,
     },
     #+ others Module::Build options
 )->create_build_script();
```

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/scriptname.pl'
   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

## DESCRIPTION

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.

## APPLICATION/GAME LAYOUT

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

```
 #example: game with the main *.pl script + data files + modules (*.pm)
 Build.PL
 lib/
     Games/
           Demo.pm
 bin/
     game-script.pl
 data/
     whatever_data_files_you_need.jpg
```

the most simple game should look like:

```
 #example: simple one-script apllication/game
 Build.PL
 bin/
    game-script.pl
```

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).

## RULES TO FOLLOW

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
