[game-data-packager] 01/01: doom-common: rework main_wad str in main_wads dict

Alexandre Detiste detiste-guest at moszumanska.debian.org
Sun May 31 10:21:53 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 f4c2ba7d513a401829f06a18f06b64ffe28af8b9
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date:   Sun May 31 12:19:29 2015 +0200

    doom-common: rework main_wad str in main_wads dict
    
    that brings unified support for:
    - doom2-masterlevels-wad (empty dict)
    - strife (dict with 1 pwad)
    - compet_n (dict with 6 pwads)
    - <default> (dict with pwad = unique installed file)
---
 data/compet_n.yaml                      | 23 ++++++++++--
 data/doom2.yaml                         |  3 +-
 data/strife.yaml                        |  2 ++
 debian/changelog                        |  1 +
 doc/tags.txt                            |  2 +-
 game_data_packager/games/doom_common.py | 62 ++++++++++++++-------------------
 6 files changed, 52 insertions(+), 41 deletions(-)

diff --git a/data/compet_n.yaml b/data/compet_n.yaml
index 0aac7a6..d2af67f 100644
--- a/data/compet_n.yaml
+++ b/data/compet_n.yaml
@@ -20,6 +20,25 @@ packages:
     expansion_for_ext: doom2-wad
     debian:
       recommends: doom2-wad | freedoom, doom-wad | freedoom
+    main_wads:
+      av.wad:
+         name: Alien Vendetta (2nd Ed.)
+         args: av.wad -deh av.deh
+      class_ep.wad:
+         name: The Classic Episode (1st Ed.)
+         args: -iwad doom.wad -warp 2 1
+      hr.wad:
+         name: Hell Revealed
+         args: hrmus.wad
+      mm.wad:
+         name: Memento Mori
+         args: mmmus.wad
+      mm2.wad:
+         name: Memento Mori II
+         args: mm2mus.wad
+      requiem.wad:
+         name: Requiem
+         args: req21fix.wad reqmus.wad
     install_to: usr/share/games/doom
     install:
     - av.deh
@@ -55,11 +74,11 @@ files:
   mm2.txt:
     install_to: $docdir
   mm2info.wad:
-    look_for: [mm2info.dat]
+    look_for: [mm2info.wad,mm2info.dat]
   requiem.txt:
     install_to: $docdir
   req21fix.wad:
-    look_for: [req21_competn.wad]
+    look_for: [req21fix.wad,req21_competn.wad]
 
   av_new.zip:
     download: http://doomedsda.us/lmps/84/av_new.zip
diff --git a/data/doom2.yaml b/data/doom2.yaml
index e88920a..3630a26 100644
--- a/data/doom2.yaml
+++ b/data/doom2.yaml
@@ -2,7 +2,6 @@
 # Version reference:
 # http://doom.wikia.com/wiki/DOOM2.WAD
 # http://doomwiki.org/wiki/DOOM2.WAD
-shortname: doom2
 longname: "Doom 2: Hell on Earth"
 copyright: © 1994 id Software
 try_repack_from:
@@ -43,7 +42,7 @@ packages:
   doom2-masterlevels-wad:
     longname: Master Levels for DOOM II
     expansion_for: doom2-wad
-    create_desktop_file: false
+    main_wads: {}
     steam:
       id: 9160
       path: "common/Master Levels of Doom"
diff --git a/data/strife.yaml b/data/strife.yaml
index 1923478..e4d34b7 100644
--- a/data/strife.yaml
+++ b/data/strife.yaml
@@ -20,6 +20,8 @@ help_text: |
 
 packages:
   strife-data:
+    main_wads:
+      strife1.wad: {}
     steam:
       id: 317040
       path: common/Strife
diff --git a/debian/changelog b/debian/changelog
index 2f9971d..c86843c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -10,6 +10,7 @@ game-data-packager (42) UNRELEASED; urgency=medium
   * add support for Simon the Sorcerer 1 & 2
   * add support for Gobliiins (full game & demo)
   * add support for Leisure Suit Larry 1,2,3,5&6
+  * add support for Compet-N PWAD's (Closes: #776061)
   
  -- Simon McVittie <smcv at debian.org>  Sun, 03 May 2015 14:34:00 +0200
 
diff --git a/doc/tags.txt b/doc/tags.txt
index 17645dd..6802afe 100644
--- a/doc/tags.txt
+++ b/doc/tags.txt
@@ -33,7 +33,7 @@ packages:
       replaces:
     component: string
     copyright: string
-    create_desktop_file: bool (doom)
+    main_wads: dict (doom)
     gameid: (scummvm)
     install_to: string
     install_to_docdir: string (prefix)
diff --git a/game_data_packager/games/doom_common.py b/game_data_packager/games/doom_common.py
index ea98df5..c3fc744 100644
--- a/game_data_packager/games/doom_common.py
+++ b/game_data_packager/games/doom_common.py
@@ -21,31 +21,15 @@ import logging
 import os
 import subprocess
 
-from .. import GameData, GameDataPackage
+from .. import GameData
 from ..paths import DATADIR
-from ..util import (TemporaryUmask, copy_with_substitutions, mkdir_p)
+from ..util import (copy_with_substitutions, mkdir_p)
 
 logger = logging.getLogger('game-data-packager.games.doom-common')
 
 def install_data(from_, to):
     subprocess.check_call(['cp', '--reflink=auto', from_, to])
 
-class WadPackage(GameDataPackage):
-    def __init__(self, name):
-        super(WadPackage, self).__init__(name)
-
-    @property
-    def main_wad(self):
-        for f in self.install:
-            if f == 'voices.wad':
-                # ignore Strife voices
-                continue
-
-            if f.endswith('.wad'):
-                return f
-        else:
-            raise AssertionError('Wad packages must install one .wad file')
-
 class DoomGameData(GameData):
     """Special subclass of GameData for games descended from Doom.
     These games install their own icon and .desktop file, and share a
@@ -88,36 +72,36 @@ class DoomGameData(GameData):
         }
 
         for package in self.packages.values():
-            assert package.main_wad is not None
             engine = package.engine or self.engine
             engine = engine.split('|')[-1].strip()
             package.program = package_map.get(engine, engine)
-            package.create_desktop_file = self.data['packages'][package.name].get(
-                    'create_desktop_file', True)
+            package.main_wads = self.data['packages'][package.name].get(
+                    'main_wads', {list(package.install)[0]: {}})
+            assert type(package.main_wads) == dict
+            for main_wad in package.main_wads.values():
+                assert type(main_wad) == dict
             package.data_type = 'PWAD' if (package.expansion_for
                                 or package.expansion_for_ext) else 'IWAD'
 
-    def construct_package(self, binary):
-        return WadPackage(binary)
-
     def fill_extra_files(self, package, destdir):
         super(DoomGameData, self).fill_extra_files(package, destdir)
-        if not package.create_desktop_file:
-            return
 
-        main_wad = package.main_wad
-        wad_base = os.path.splitext(main_wad)[0]
+        for main_wad, quirks in package.main_wads.items():
+            wad_base = os.path.splitext(main_wad)[0]
 
-        with TemporaryUmask(0o022):
             pixdir = os.path.join(destdir, 'usr/share/pixmaps')
             mkdir_p(pixdir)
             # FIXME: would be nice if non-Doom games could replace this
             # Cacodemon with something appropriate
-            for basename in (package.name, self.shortname, 'doom-common'):
+            desktop_file = package.name
+            if len(package.main_wads) > 1:
+                desktop_file += '-' + wad_base
+
+            for basename in (wad_base, package.name, self.shortname, 'doom-common'):
                 from_ = os.path.join(DATADIR, basename + '.png')
                 if os.path.exists(from_):
                     install_data(from_,
-                        os.path.join(pixdir, '%s.png' % wad_base))
+                        os.path.join(pixdir, '%s.png' % desktop_file))
                     break
             else:
                 raise AssertionError('doom-common.png should have existed')
@@ -128,7 +112,7 @@ class DoomGameData(GameData):
                                       'usr/share/icons/hicolor/scalable/apps')
                 mkdir_p(svgdir)
                 install_data(from_,
-                    os.path.join(svgdir, '%s.svgz' % wad_base))
+                    os.path.join(svgdir, '%s.svgz' % desktop_file))
 
             docdir = os.path.join(destdir, 'usr/share/doc/%s' % package.name)
             mkdir_p(docdir)
@@ -141,9 +125,13 @@ class DoomGameData(GameData):
             desktop['Desktop Entry'] = {}
             entry = desktop['Desktop Entry']
             entry['Name'] = package.longname or self.longname
+            if 'name' in quirks:
+                entry['Name'] += ' - ' + quirks['name']
             entry['GenericName'] = self.genre + ' game'
             entry['TryExec'] = package.program
-            if package.expansion_for:
+            if 'args' in quirks:
+                args = '-file ' + main_wad + ' ' + quirks['args']
+            elif package.expansion_for:
                 for f in self.packages[package.expansion_for].install:
                     if f.endswith('.wad'):
                         iwad = f
@@ -155,22 +143,24 @@ class DoomGameData(GameData):
             else:
                 args = '-iwad /usr/share/games/doom/' + main_wad
             entry['Exec'] = package.program + ' ' + args
-            entry['Icon'] = wad_base
+            entry['Icon'] = desktop_file
             entry['Terminal'] = 'false'
             entry['Type'] = 'Application'
             entry['Categories'] = 'Game'
+            entry['Keyword'] = wad_base
 
-            with open(os.path.join(appdir, '%s.desktop' % package.name),
+            with open(os.path.join(appdir, '%s.desktop' % desktop_file),
                       'w', encoding='utf-8') as output:
                  desktop.write(output, space_around_delimiters=False)
 
             lintiandir = os.path.join(destdir, 'usr/share/lintian/overrides')
             mkdir_p(lintiandir)
+
             with open(os.path.join(lintiandir, package.name),
                       'a', encoding='utf-8') as o:
                  o.write('%s: desktop-command-not-in-package '
                          'usr/share/applications/%s.desktop %s\n'
-                         % (package.name, package.name, package.program))
+                         % (package.name, desktop_file, package.program))
 
             debdir = os.path.join(destdir, 'DEBIAN')
             mkdir_p(debdir)

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