[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