[game-data-packager] 01/01: rework engine definition, avoid need for duplicated data

Alexandre Detiste detiste-guest at moszumanska.debian.org
Mon Mar 9 11:42:02 UTC 2015


This is an automated email from the git hooks/post-receive script.

detiste-guest pushed a commit to branch master
in repository game-data-packager.

commit fa7b5f6010b08101411ea343fc2f8abe668181ca
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date:   Mon Mar 9 12:35:16 2015 +0100

    rework engine definition, avoid need for duplicated data
    
    The 'debian: engine:' tag is moved to top-level 'engine:'
    tag that can be overiden at package level if needed.
    
    This let avoid the need to specify the the same engine
    for a game and it's demo.
    
    The doom_common.py plugin is reworked to derive the engine
    program binary from the engine package name;
    again to avoid duplicated data.
    
    The current default doom-engine is now set in an unique location;
    and it isn't needed to explicitely set anymore in all the .yaml
    files using the doom_common.py plugin.
---
 data/chex.yaml                                |  2 --
 data/descent1.yaml                            |  3 +--
 data/descent2.yaml                            |  3 +--
 data/doom.yaml                                |  1 -
 data/doom2.yaml                               |  5 +----
 data/doom3.yaml                               |  6 ++----
 data/final-doom.yaml                          |  2 --
 data/hacx.yaml                                |  2 --
 data/heretic.yaml                             |  6 +-----
 data/hexen.yaml                               | 14 ++++----------
 data/hexen2.yaml                              |  4 +---
 data/ja.yaml                                  |  2 +-
 data/jk2.yaml                                 |  2 +-
 data/lgeneral.yaml                            |  3 +--
 data/quake.yaml                               |  3 +--
 data/quake2.yaml                              |  4 +---
 data/quake3.yaml                              | 10 ++++------
 data/rott.yaml                                |  3 +--
 data/rtcw.yaml                                |  2 +-
 data/spear-of-destiny.yaml                    |  3 +--
 data/strife.yaml                              |  2 --
 data/syndicate.yaml                           |  4 ++--
 data/theme-hospital.yaml                      |  3 +--
 data/tyrian.yaml                              |  3 +--
 data/wolf3d.yaml                              |  4 +---
 doc/adding_a_game.mdwn                        |  2 ++
 game_data_packager/__init__.py                | 24 ++++++++++++++++--------
 game_data_packager/games/doom_common.py       | 24 +++++++++++++++---------
 game_data_packager/games/residualvm_common.py |  6 ++----
 game_data_packager/games/scummvm_common.py    |  6 ++----
 30 files changed, 65 insertions(+), 93 deletions(-)

diff --git a/data/chex.yaml b/data/chex.yaml
index ca3c42b..fdc4fc4 100644
--- a/data/chex.yaml
+++ b/data/chex.yaml
@@ -12,8 +12,6 @@ packages:
   chexquest-data:
     longname: Chex Quest
     overide_fill_docs: false
-    debian:
-      engine: "chocolate-doom | doom-engine"
     install_to: usr/share/games/doom
     install:
     - chex.wad
diff --git a/data/descent1.yaml b/data/descent1.yaml
index 1679c0f..88873b8 100644
--- a/data/descent1.yaml
+++ b/data/descent1.yaml
@@ -2,13 +2,13 @@
 ---
 longname: "Descent: First Strike"
 copyright: © 1994 Parallax Software Corporation
+engine: d1x-rebirth
 
 packages:
   descent1-demo-data:
     longname: "Descent: First Strike (demo)"
     demo_for: descent1-full-data
     debian:
-      engine: d1x-rebirth
       conflicts: descent1-full-data
     install:
     - descent.hog
@@ -22,7 +22,6 @@ packages:
   descent1-full-data:
     longname: "Descent: First Strike"
     debian:
-      engine: d1x-rebirth
       conflicts: descent1-demo-data
     install:
     - descent.hog_full
diff --git a/data/descent2.yaml b/data/descent2.yaml
index f7b4fd9..31c50c6 100644
--- a/data/descent2.yaml
+++ b/data/descent2.yaml
@@ -2,12 +2,11 @@
 ---
 longname: Descent II
 copyright: © 1995 Parallax Software Corporation
+engine: d2x-rebirth
 
 packages:
   descent2-demo-data:
     longname: Descent II
-    debian:
-      engine: d2x-rebirth
     install:
     - d2demo.pig
     - d2demo.ham
diff --git a/data/doom.yaml b/data/doom.yaml
index f7caca4..e64ee2b 100644
--- a/data/doom.yaml
+++ b/data/doom.yaml
@@ -26,7 +26,6 @@ help_text: |
 packages:
   doom-wad:
     debian:
-      engine: "chocolate-doom | doom-engine"
       conflicts: freedoom (<< 0.6.4-4), freedm (<< 0.6.4-4)
     steam:
       id: 2280
diff --git a/data/doom2.yaml b/data/doom2.yaml
index 4d61111..0833118 100644
--- a/data/doom2.yaml
+++ b/data/doom2.yaml
@@ -20,7 +20,6 @@ help_text: |
 packages:
   doom2-wad:
     debian:
-      engine: "chocolate-doom | doom-engine"
       provides: doom-wad
       conflicts: freedoom (<< 0.6.4-4), freedm (<< 0.6.4-4)
     steam:
@@ -34,9 +33,7 @@ packages:
   doom2-nerve-wad:
     longname: "No Rest for the Living"
     expansion_for: doom2-wad
-    doom_engine: prboom-plus
-    debian:
-      recommends: prboom-plus
+    engine: prboom-plus
     steam:
       id: 208200
       path: "common/DOOM 3 BFG Edition"
diff --git a/data/doom3.yaml b/data/doom3.yaml
index e3e8011..8dc11a4 100644
--- a/data/doom3.yaml
+++ b/data/doom3.yaml
@@ -3,13 +3,12 @@
 compress-deb: false
 longname: 'Doom 3 (original or BFG Edition)'
 try_repack_from: [/usr/local/share/dhewm3]
+engine: dhewm3-doom3
 
 packages:
   doom3-data:
     longname: 'Doom 3'
     copyright: © 2004 id Software
-    debian:
-      engine: dhewm3-doom3
     steam:
       id: 9050
     install:
@@ -93,8 +92,7 @@ packages:
   doom3bfg-data:
     longname: 'Doom 3: BFG Edition'
     copyright: © 2012 id Software
-    debian:
-      engine: rbdoom3bfg
+    engine: rbdoom3bfg
     steam:
       id: 208200
       path: "common/DOOM 3 BFG Edition"
diff --git a/data/final-doom.yaml b/data/final-doom.yaml
index 72e3b74..de4502a 100644
--- a/data/final-doom.yaml
+++ b/data/final-doom.yaml
@@ -23,7 +23,6 @@ packages:
     longname: "Final Doom: TNT: Evilution"
     aliases: [tnt, t]
     debian:
-      engine: "chocolate-doom | doom-engine"
       provides: doom-wad
       conflicts: freedoom (<< 0.6.4-4), freedm (<< 0.6.4-4)
     install:
@@ -34,7 +33,6 @@ packages:
     longname: "Final Doom: The Plutonia Experiment"
     aliases: [plutonia, p]
     debian:
-      engine: "chocolate-doom | doom-engine"
       provides: doom-wad
       conflicts: freedoom (<< 0.6.4-4), freedm (<< 0.6.4-4)
     install:
diff --git a/data/hacx.yaml b/data/hacx.yaml
index d35dbe8..66da4bc 100644
--- a/data/hacx.yaml
+++ b/data/hacx.yaml
@@ -18,8 +18,6 @@ help_text: |
 packages:
   hacx-data:
     overide_fill_docs: false
-    debian:
-      engine: "chocolate-doom | doom-engine"
     install_to: usr/share/games/doom
     install:
     - hacx.wad
diff --git a/data/heretic.yaml b/data/heretic.yaml
index 34960db..01aa4a6 100644
--- a/data/heretic.yaml
+++ b/data/heretic.yaml
@@ -8,7 +8,7 @@ longname: "Heretic: Shadow of the Serpent Riders"
 copyright: © 1994 Raven Software
 
 plugin: doom_common
-doom_engine: heretic
+engine: "chocolate-doom | heretic-engine"
 
 help_text: |
   Please provide HERETIC.WAD from Heretic v1.3, and/or HERETIC1.WAD
@@ -25,16 +25,12 @@ packages:
     steam:
       id: 2390
       path: "common/Heretic Shadow of the Serpent Riders"
-    debian:
-      engine: "chocolate-doom | heretic-engine"
     install_to: usr/share/games/doom
     install:
     - heretic.wad
 
   heretic-shareware-data:
     longname: "Heretic (shareware)"
-    debian:
-      engine: "chocolate-doom | heretic-engine"
     install_to: usr/share/games/doom
     demo_for: heretic-wad
     install:
diff --git a/data/hexen.yaml b/data/hexen.yaml
index 3faf506..4a6fb76 100644
--- a/data/hexen.yaml
+++ b/data/hexen.yaml
@@ -20,12 +20,10 @@ help_text: |
   hexendemo.wad to avoid colliding with the full version of Hexen.
 
 plugin: doom_common
-doom_engine: hexen
+engine: "chocolate-doom | hexen-engine"
 
 packages:
   hexen-wad:
-    debian:
-      engine: "chocolate-doom | hexen-engine"
     steam:
       id: 2360
       path: "common/Hexen"
@@ -49,13 +47,9 @@ packages:
     demo_for: hexen-wad
     install:
     - hexendemo.wad
-    # this goes in the .desktop file...
-    doom_engine: doomsday-compat
-    # ... so we must have Recommends: doomsday. The other provider
-    # of hexen-engine, chocolate-doom, can play the full game but not
-    # the demo.
-    debian:
-      engine: doomsday
+    # The other provider of hexen-engine, chocolate-doom,
+    # can play the full game but not the demo.
+    engine: doomsday
 
 files:
 
diff --git a/data/hexen2.yaml b/data/hexen2.yaml
index eee568b..8c5f971 100644
--- a/data/hexen2.yaml
+++ b/data/hexen2.yaml
@@ -3,6 +3,7 @@
 shortname: hexen2
 longname: Hexen II
 copyright: © 1997 Raven Software
+engine: "uhexen2 | hexen2-engine"
 
 help_text: |
   For hexen2-data, you must provide the version 1.11 patched versions
@@ -23,7 +24,6 @@ packages:
     longname: Hexen II (demo)
     demo_for: hexen2-data
     debian:
-      engine: "uhexen2 | hexen2-engine"
       conflicts: hexen2-data
     install_to: usr/share/games/hexen2
     install:
@@ -34,8 +34,6 @@ packages:
 
   hexen2-data:
     longname: Hexen II
-    debian:
-      engine: "uhexen2 | hexen2-engine"
     steam:
       id: 9060
       path: "common/Hexen 2"
diff --git a/data/ja.yaml b/data/ja.yaml
index 8f8a089..c4e6253 100644
--- a/data/ja.yaml
+++ b/data/ja.yaml
@@ -8,6 +8,7 @@ copyright: © 2003 Activision, Inc. / LucasArts, a division of Lucasfilm Enterta
 # alongside ~ 1.2 GiB of compressed zip files. xz can save 20 MiB,
 # but that's less than 2% of the total size and takes 10 times as long.
 compress_deb: false
+engine: openjk-academy | openjk-academy-server
 
 steam:
   id: 6020
@@ -34,7 +35,6 @@ packages:
   jedi-academy-data:
     debian:
       version: '1.01'
-      engine: openjk-academy | openjk-academy-server
     install_files_from_cksums: |
       # Jedi Academy CD1 GameData/GameData or installation
       3585517488 561806019 base/assets0.pk3
diff --git a/data/jk2.yaml b/data/jk2.yaml
index a9cd801..2193508 100644
--- a/data/jk2.yaml
+++ b/data/jk2.yaml
@@ -3,6 +3,7 @@
 shortname: jk2
 longname: "Star Wars Jedi Knight II: Jedi Outcast"
 copyright: © 2003 Activision, Inc. / LucasArts, a division of Lucasfilm Entertainment Company Ltd.
+engine: openjk-outcast
 
 # Like Jedi Academy, there isn't much point in compressing this .deb.
 compress_deb: false
@@ -27,7 +28,6 @@ packages:
   jedi-outcast-data:
     debian:
       version: '1.04'
-      engine: openjk-outcast
     # cksums(1) is pretty useless as a checksumming tool, but it's a convenient
     # way to get exact file sizes in bytes (second column), which are a nice
     # heuristic for identifying files
diff --git a/data/lgeneral.yaml b/data/lgeneral.yaml
index 2ffe4fa..9708c7d 100644
--- a/data/lgeneral.yaml
+++ b/data/lgeneral.yaml
@@ -3,6 +3,7 @@
 shortname: lgeneral
 longname: LGeneral
 copyright: © 1994 SSI Inc.
+engine: lgeneral
 
 help_text: |
   Data from Panzer General can be downloaded automatically.
@@ -19,8 +20,6 @@ packages:
     # The actual game files are converted by lgc-pg, in Python code.
     install:
     - pg-data.tar.gz
-    debian:
-      engine: lgeneral
 
 files:
   pg-data.tar.gz:
diff --git a/data/quake.yaml b/data/quake.yaml
index c017319..7da4e58 100644
--- a/data/quake.yaml
+++ b/data/quake.yaml
@@ -2,6 +2,7 @@
 ---
 longname: Quake
 copyright: © 1996 id Software
+engine: quake | quake-server
 
 help_text: |
   For quake-registered, you must provide id1/pak1.pak or a directory
@@ -28,7 +29,6 @@ packages:
     demo_for: quake-registered
     longname: Quake (shareware)
     debian:
-      engine: quake | quake-server
       provides: quake-data
     install:
     - id1/pak0.pak_106
@@ -38,7 +38,6 @@ packages:
 
   quake-registered:
     debian:
-      engine: quake | quake-server
       provides: quake-data
     steam:
       id: 2310
diff --git a/data/quake2.yaml b/data/quake2.yaml
index d76c793..5e534dc 100644
--- a/data/quake2.yaml
+++ b/data/quake2.yaml
@@ -3,6 +3,7 @@
 longname: Quake II
 copyright: © 1997 id Software
 aliases: [q2rogue, q2xatrix]
+engine: quake2 | quake2-server
 
 help_text: |
   For quake2-full-data, you must provide baseq2/pak0.pak and the baseq2/video
@@ -27,7 +28,6 @@ packages:
   quake2-full-data:
     longname: Quake II
     debian:
-      engine: quake2 | quake2-server
       replaces: quake2-data
     steam:
       id: 2320
@@ -204,8 +204,6 @@ packages:
   quake2-demo-data:
     longname: "Quake II (demo)"
     demo_for: quake2-full-data
-    debian:
-      engine: quake2 | quake2-server
     install_to_docdir:
       - quake2_manual
     install_contents_of:
diff --git a/data/quake3.yaml b/data/quake3.yaml
index fc2a7c2..10bdf7d 100644
--- a/data/quake3.yaml
+++ b/data/quake3.yaml
@@ -3,6 +3,7 @@
 shortname: quake3
 longname: Quake III Arena
 copyright: © 1999 id Software
+engine: quake3 | quake3-server
 compress_deb: false
 try_repack_from:
 # Older versions of g-d-p used this directory
@@ -32,8 +33,6 @@ help_text: |
 packages:
   quake3-data:
     longname: Quake III Arena
-    debian:
-      engine: quake3 | quake3-server
     steam:
       id: 2200
       path: "common/Quake 3 Arena"
@@ -154,10 +153,9 @@ packages:
 
   quake3-demo-data:
     longname: Quake III Arena (demo)
-    debian:
-      # deliberately no quake3-server alternative, I'm pretty sure it isn't
-      # network-compatible with anything
-      engine: quake3 (>= 10)
+    # deliberately no quake3-server alternative, I'm pretty sure it isn't
+    # network-compatible with anything
+    engine: quake3 (>= 10)
     demo_for: quake3-data
     install_to: usr/share/games/quake3-demo-data/demoq3
     install:
diff --git a/data/rott.yaml b/data/rott.yaml
index bee608e..b2728db 100644
--- a/data/rott.yaml
+++ b/data/rott.yaml
@@ -3,6 +3,7 @@
 shortname: rott
 longname: Rise of the Triad
 copyright: © 1995 Apogee Software
+engine: rott
 
 steam:
   id: 238050
@@ -14,7 +15,6 @@ packages:
     # December 21, 1994
     copyright: © 1994 Apogee Software
     debian:
-      engine: rott
       replaces: rott (<< 1.1.1-4)
     # this shareware data are considered a as full game because
     # it includes the HUNT Begin levels not present in the commercial game
@@ -35,7 +35,6 @@ packages:
     longname: "Rise of the Triad: Dark War"
     debian:
       depends: rott-data
-      engine: rott
     install_to: usr/share/games/rott
     install:
     - any_registered_rtc
diff --git a/data/rtcw.yaml b/data/rtcw.yaml
index 6e849c8..a590ead 100644
--- a/data/rtcw.yaml
+++ b/data/rtcw.yaml
@@ -3,6 +3,7 @@
 shortname: rtcw
 longname: Return to Castle Wolfenstein
 copyright: © 2001 id Software, Inc. and Activision Publishing, Inc.
+engine: rtcw
 
 # Like Jedi Academy, there isn't much point in compressing this .deb.
 compress_deb: false
@@ -13,7 +14,6 @@ packages:
       id: 9010
       path: "common/Return to Castle Wolfenstein"
     debian:
-      engine: rtcw
       # GDP version will be suffixed to this, e.g. : 1.42b+39
       version: 1.42b
 
diff --git a/data/spear-of-destiny.yaml b/data/spear-of-destiny.yaml
index 39481f5..aa4d382 100644
--- a/data/spear-of-destiny.yaml
+++ b/data/spear-of-destiny.yaml
@@ -4,6 +4,7 @@ shortname: spear-of-destiny
 aliases: [spear]
 longname: "Spear of Destiny (Wolfenstein 3D prequel)"
 copyright: © 1992 id Software
+engine: wolf4sdl
 
 steam:
   id: 9000
@@ -29,7 +30,6 @@ packages:
     longname: "Spear of Destiny (shareware)"
     demo_for: spear-of-destiny-data
     debian:
-      engine: wolf4sdl
       provides: wolf3d-data
     install_to: usr/share/games/wolf3d
     install_files_from_cksums: |
@@ -47,7 +47,6 @@ packages:
   spear-of-destiny-data:
     longname: "Spear of Destiny (registered version, mission 1)"
     debian:
-      engine: wolf4sdl
       provides: wolf3d-data
     install_to: usr/share/games/wolf3d
     install_files_from_cksums: |
diff --git a/data/strife.yaml b/data/strife.yaml
index 7675078..948582b 100644
--- a/data/strife.yaml
+++ b/data/strife.yaml
@@ -20,8 +20,6 @@ help_text: |
 packages:
   strife-data:
     overide_fill_docs: false
-    debian:
-      engine: "chocolate-doom | doom-engine"
     steam:
       id: 317040
       path: common/Strife
diff --git a/data/syndicate.yaml b/data/syndicate.yaml
index d308ad1..1f8cafd 100644
--- a/data/syndicate.yaml
+++ b/data/syndicate.yaml
@@ -4,13 +4,13 @@
 try_repack_from: [/usr/share/games/freesynd/data]
 
 copyright: © 1993 Bullfrog Productions
+engine: freesynd
+
 packages:
   syndicate-data:
     install_to: usr/share/games/freesynd/data
     # this should be engine-agnostic:
     #  usr/share/games/syndicate
-    debian:
-      engine: freesynd
     install:
     - col01.dat
     - game01.dat
diff --git a/data/theme-hospital.yaml b/data/theme-hospital.yaml
index 656cd52..3dd8644 100644
--- a/data/theme-hospital.yaml
+++ b/data/theme-hospital.yaml
@@ -2,6 +2,7 @@
 ---
 longname: Theme Hospital
 copyright: © 1997 Bullfrog Productions
+engine: corsix-th
 
 help_text: |
   For the full version, provide a Theme Hospital installation,
@@ -19,7 +20,6 @@ packages:
     install_to: usr/share/games/theme-hospital
     debian:
       conflicts: theme-hospital-demo-data
-      engine: corsix-th
     optional:
     # documentation
     - EN.pdf
@@ -491,7 +491,6 @@ packages:
     install_to: usr/share/games/theme-hospital
     demo_for: theme-hospital-full-data
     debian:
-      engine: corsix-th
       conflicts: theme-hospital-full-data
     install:
     - anims/winlevel.smk_demo
diff --git a/data/tyrian.yaml b/data/tyrian.yaml
index 479d4f7..040bec0 100644
--- a/data/tyrian.yaml
+++ b/data/tyrian.yaml
@@ -2,6 +2,7 @@
 ---
 shortname: tyrian
 copyright: © 1995 Epic MegaGames
+engine: opentyrian
 
 help_text: |
   The full version of Tyrian can be downloaded at no cost.
@@ -10,8 +11,6 @@ help_text: |
 
 packages:
   tyrian-data:
-    debian:
-      engine: opentyrian
     # there are two identical files in the zip
     symlinks:
       usr/share/games/tyrian/netset.pcx: usr/share/games/tyrian/tyrset.pcx
diff --git a/data/wolf3d.yaml b/data/wolf3d.yaml
index da042f9..8239dd1 100644
--- a/data/wolf3d.yaml
+++ b/data/wolf3d.yaml
@@ -2,6 +2,7 @@
 ---
 longname: Wolfenstein 3D
 copyright: © 1992 Apogee
+engine: wolf4sdl
 
 packages:
   wolf3d-demo-data:
@@ -10,7 +11,6 @@ packages:
     - wolf3d-full-v14-data
     longname: Wolfenstein 3D (demo)
     debian:
-      engine: wolf4sdl
       provides: wolf3d-data
       replaces: wolf3d-data-wl1
     install_to: usr/share/games/wolf3d
@@ -30,7 +30,6 @@ packages:
     longname: Wolfenstein 3D v1.2
     better_version: wolf3d-full-v14-data
     debian:
-      engine: wolf4sdl
       provides: wolf3d-data
       conflicts: wolf3d-full-v14-data
     install_to: usr/share/games/wolf3d
@@ -47,7 +46,6 @@ packages:
   wolf3d-full-v14-data:
     longname: Wolfenstein 3D v1.4
     debian:
-      engine: wolf4sdl
       provides: wolf3d-data
       conflicts: wolf3d-full-v12-data
     steam:
diff --git a/doc/adding_a_game.mdwn b/doc/adding_a_game.mdwn
index fc51f0d..1faa714 100644
--- a/doc/adding_a_game.mdwn
+++ b/doc/adding_a_game.mdwn
@@ -17,6 +17,7 @@ which should get you easily started.
   III Arena.
 * `copyright`: string: © <year_of_first_release> <developper/publisher>
   This should match the title screen of the game, if any.
+* `engine`: string: package name that contain the program needed to run the game.
 * `compress_deb`: boolean, default true: If false, the `.deb` will never be
   compressed. Use this if it contains non-compressible files (e.g. `*.pk3`
   which are zip files) for which `xz` will waste a lot of time and
@@ -101,6 +102,7 @@ to mapping:
   Quake III Team Arena for Quake III Arena.
 * `install`: list of strings: unique names of known files or alternative
   sets to install
+* `engine`: let you overide the engine in special cases
 
 ### Step 2: required files for the `.deb`
 
diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index bdbefef..20eb0f9 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -353,6 +353,9 @@ class GameDataPackage(object):
         # Steam ID and path
         self.steam = {}
 
+        # overide the game engine when needed
+        self.engine = None
+
         # depedency information needed to build the debian/control file
         self.debian = {}
 
@@ -450,6 +453,9 @@ class GameData(object):
         # The one-line copyright notice used to build debian/copyright
         self.copyright = None
 
+        # The game engine used to run the game (package name)
+        self.engine = None
+
         # A temporary directory.
         self.workdir = workdir
 
@@ -482,7 +488,7 @@ class GameData(object):
         self.argument_parser = None
 
         for k in ('longname', 'copyright', 'compress_deb', 'help_text',
-                 'steam'):
+                 'steam','engine'):
             if k in self.yaml:
                 setattr(self, k, self.yaml[k])
 
@@ -730,7 +736,7 @@ class GameData(object):
         for k in ('expansion_for', 'longname', 'symlinks', 'install_to',
                 'install_to_docdir', 'install_contents_of', 'steam', 'debian',
                 'rip_cd', 'architecture', 'aliases', 'better_version',
-                'copyright'):
+                'copyright', 'engine'):
             if k in d:
                 setattr(package, k, d[k])
 
@@ -1803,11 +1809,11 @@ class GameData(object):
 
         if package.expansion_for:
             depends.add(package.expansion_for)
-        engine = package.debian.get('engine')
-        assert engine is None or not package.expansion_for, \
-               'An expansion will inherit the engine of the full game'
-        if engine:
-            recommends.add(engine)
+
+        if package.engine:
+            recommends.add(package.engine)
+        elif not package.expansion_for and self.engine:
+            recommends.add(self.engine)
         for other_package in self.packages.values():
             if other_package.expansion_for == package.name:
                 suggests.add(other_package.name)
@@ -1867,6 +1873,8 @@ class GameData(object):
             else:
                 long_desc += ' Game: ' + longname
 
+            engine = package.engine or self.engine
+            engine = engine.split('|')[0].strip()
             if engine:
                 long_desc += '\n .\n'
                 long_desc += ' Intended for use with: ' + engine
@@ -2028,7 +2036,7 @@ class GameData(object):
 
         engines = set()
         for package in ready:
-            engine = package.debian.get('engine')
+            engine = package.engine or self.engine
             if not engine:
                 continue
             engine = engine.split('|')[0].strip()
diff --git a/game_data_packager/games/doom_common.py b/game_data_packager/games/doom_common.py
index 06cdc8b..3d6b2e1 100644
--- a/game_data_packager/games/doom_common.py
+++ b/game_data_packager/games/doom_common.py
@@ -2,6 +2,7 @@
 # encoding=utf-8
 #
 # Copyright © 2015 Simon McVittie <smcv at debian.org>
+#             2015 Alexandre Detiste <alexandre at detiste.be>
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -33,8 +34,6 @@ class WadPackage(GameDataPackage):
     def __init__(self, name):
         super(WadPackage, self).__init__(name)
 
-        self.engine = None
-
     @property
     def main_wad(self):
         for f in self.install:
@@ -75,14 +74,21 @@ class DoomGameData(GameData):
     def __init__(self, shortname, yaml_data, workdir=None):
         super(DoomGameData, self).__init__(shortname, yaml_data,
                 workdir=workdir)
+        if self.engine is None:
+            self.engine = "chocolate-doom | doom-engine"
 
-        self.engine = self.yaml.get('doom_engine', 'doom')
+        package_map = {
+                'doom-engine': 'doom',
+                'heretic-engine': 'heretic',
+                'hexen-engine': 'hexen',
+                'doomsday': 'doomsday-compat',
+        }
 
         for package in self.packages.values():
             assert package.main_wad is not None
-
-            package.engine = self.yaml['packages'][package.name].get(
-                    'doom_engine')
+            engine = package.engine or self.engine
+            engine = engine.split('|')[-1].strip()
+            package.program = package_map.get(engine, engine)
             package.create_desktop_file = self.yaml['packages'][package.name].get(
                     'create_desktop_file', True)
             package.overide_fill_docs = self.yaml['packages'][package.name].get(
@@ -106,7 +112,7 @@ class DoomGameData(GameData):
         wad_base = os.path.splitext(package.main_wad)[0]
 
         desc = control['Description']
-        desc = desc.replace('ENGINE', (package.engine or self.engine))
+        desc = desc.replace('ENGINE', package.program)
         desc = desc.replace('GAME', wad_base)
         desc = desc.replace('LONG', (package.longname or self.longname))
         control['Description'] = desc
@@ -175,7 +181,7 @@ class DoomGameData(GameData):
             entry = desktop['Desktop Entry']
             entry['Name'] = package.longname or self.longname
             entry['GenericName'] = 'First Person Shooter Game'
-            entry['TryExec'] = engine = package.engine or self.engine
+            entry['TryExec'] = package.program
             if package.expansion_for:
                 for f in self.packages[package.expansion_for].install:
                     if f.endswith('.wad'):
@@ -187,7 +193,7 @@ class DoomGameData(GameData):
                        + ' -file /usr/share/games/doom/' + main_wad)
             else:
                 args = '-iwad /usr/share/games/doom/' + main_wad
-            entry['Exec'] = engine + ' ' + args
+            entry['Exec'] = package.program + ' ' + args
             entry['Icon'] = wad_base
             entry['Terminal'] = 'false'
             entry['Type'] = 'Application'
diff --git a/game_data_packager/games/residualvm_common.py b/game_data_packager/games/residualvm_common.py
index dd91991..0aee4e3 100644
--- a/game_data_packager/games/residualvm_common.py
+++ b/game_data_packager/games/residualvm_common.py
@@ -32,10 +32,8 @@ class ResidualvmGameData(GameData):
 
         self.gameid = self.yaml['gameid']
 
-    def modify_control_template(self, control, package, destdir):
-        if 'engine' not in package.debian:
-            package.debian['engine'] = 'residualvm'
-        super(ResidualvmGameData, self).modify_control_template(control, package, destdir)
+        if self.engine is None:
+            self.engine = 'residualvm'
 
     def fill_extra_files(self, package, destdir):
         super(ResidualvmGameData, self).fill_extra_files(package, destdir)
diff --git a/game_data_packager/games/scummvm_common.py b/game_data_packager/games/scummvm_common.py
index 7746607..af59e5f 100644
--- a/game_data_packager/games/scummvm_common.py
+++ b/game_data_packager/games/scummvm_common.py
@@ -32,10 +32,8 @@ class ScummvmGameData(GameData):
 
         self.gameid = self.yaml['gameid']
 
-    def modify_control_template(self, control, package, destdir):
-        if 'engine' not in package.debian:
-            package.debian['engine'] = 'scummvm'
-        super(ScummvmGameData, self).modify_control_template(control, package, destdir)
+        if self.engine is None:
+            self.engine = 'scummvm'
 
     def fill_extra_files(self, package, destdir):
         super(ScummvmGameData, self).fill_extra_files(package, destdir)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git



More information about the Pkg-games-commits mailing list