[game-data-packager] 01/01: make internal 'depends:' work cross-distro

Alexandre Detiste detiste-guest at moszumanska.debian.org
Wed Jan 6 10:09:26 UTC 2016


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 39cc0829aedb8ec5bde297642b5892210b002584
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date:   Wed Jan 6 11:08:44 2016 +0100

    make internal 'depends:' work cross-distro
---
 data/larry1.yaml               |  2 +-
 data/rott.yaml                 |  3 +--
 data/spear-of-destiny.yaml     |  7 +++++--
 game_data_packager/__init__.py | 29 ++++++++++++++++++++++++++---
 game_data_packager/build.py    |  6 +++++-
 5 files changed, 38 insertions(+), 9 deletions(-)

diff --git a/data/larry1.yaml b/data/larry1.yaml
index 7db2d5f..da3326f 100644
--- a/data/larry1.yaml
+++ b/data/larry1.yaml
@@ -60,7 +60,7 @@ packages:
     longname: "Leisure Suit Larry Hits and Misses booklet"
     copyright: © 1987-1994 Sierra On-Line
     section: doc
-    expansion_for: larry1-en-data
+    expansion_for: larry1-data
     debian:
       depends: larry1-data | larry1-vga-data | larry2-data | larry3-data | larry5-data | larry6-data
     install:
diff --git a/data/rott.yaml b/data/rott.yaml
index 40479fc..a8fd174 100644
--- a/data/rott.yaml
+++ b/data/rott.yaml
@@ -48,8 +48,7 @@ packages:
       This doesn't include the shareware episode "The HUNT Begins".
 
       Use the 'rott-commercial' command to play this game.
-    debian:
-      depends: rott-data
+    depends: rott-data
     fedora:
       engine: rott-registered
     url_misc: https://3drealms.com/catalog/rise-triad-dark-war_44/
diff --git a/data/spear-of-destiny.yaml b/data/spear-of-destiny.yaml
index 72b802b..38e8a6a 100644
--- a/data/spear-of-destiny.yaml
+++ b/data/spear-of-destiny.yaml
@@ -60,12 +60,12 @@ packages:
     description: |
       This package provides the assets shared by the 3 mission packs
       of Spear of Destiny, the sequel of Wolfenstein 3D, but has no use alone.
-    debian:
-      depends: spear-of-destiny-mission1-data | spear-of-destiny-mission2-data | spear-of-destiny-mission3-data
+    depends: spear-of-destiny-mission1-data | spear-of-destiny-mission2-data | spear-of-destiny-mission3-data
     install_to: usr/share/games/wolf3d
     fedora:
       engine: wolf4sdl-spear
       install_to: usr/share/spear/full
+      depends: spear-of-destiny-mission-pack
     install:
     - audiohed.sod
     - audiot.sod
@@ -83,6 +83,7 @@ packages:
     install_to: usr/share/games/wolf3d
     fedora:
       install_to: usr/share/spear/full
+      provides: spear-of-destiny-mission-pack
     install:
     - gamemaps.sd1
     - maphead.sd1
@@ -100,6 +101,7 @@ packages:
     install_to: usr/share/games/wolf3d
     fedora:
       install_to: usr/share/spear/full
+      provides: spear-of-destiny-mission-pack
     install:
     - gamemaps.sd2
     - maphead.sd2
@@ -113,6 +115,7 @@ packages:
     install_to: usr/share/games/wolf3d
     fedora:
       install_to: usr/share/spear/full
+      provides: spear-of-destiny-mission-pack
     install:
     - gamemaps.sd3
     - maphead.sd3
diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index bf8528a..5649aec 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -57,6 +57,7 @@ class WantedFile(HashedFile):
         self.alternatives = []
         self.doc = False
         self.group_members = None
+        self._depends = set()
         self._distinctive_name = None
         self.distinctive_size = False
         self.download = None
@@ -207,6 +208,11 @@ class GameDataPackage(object):
         # may be another GDP package or a package not made by GDP
         self.expansion_for_ext = None
 
+        # distro-agnostic depedencies inside the same .yaml file
+        # that can't be handled with expansion_for heuristics
+        # *) on Fedora this maps to 'Requires:'
+        self._depends = set()
+
         # The optional marketing name of this version
         self.longname = None
 
@@ -329,6 +335,16 @@ class GameDataPackage(object):
             return None
 
     @property
+    def depends(self):
+        return self._depends
+    @depends.setter
+    def depends(self, value):
+        if type(value) is str:
+            self._depends = set([value])
+        else:
+            self._depends = set(value)
+
+    @property
     def install_contents_of(self):
         return self._install_contents_of
     @install_contents_of.setter
@@ -409,6 +425,7 @@ class GameDataPackage(object):
                 'better_version',
                 'copyright',
                 'copyright_notice',
+                'depends',
                 'description',
                 'disks',
                 'engine',
@@ -792,7 +809,7 @@ class GameData(object):
 
     def _populate_package(self, package, d):
         for k in ('expansion_for', 'expansion_for_ext', 'longname', 'symlinks', 'install_to',
-                'install_contents_of', 'debian', 'description',
+                'install_contents_of', 'debian', 'description', 'depends',
                 'rip_cd', 'architecture', 'aliases', 'better_version', 'langs', 'mutually_exclusive',
                 'copyright', 'engine', 'lang', 'component', 'section', 'disks', 'provides',
                 'steam', 'gog', 'dotemu', 'origin', 'url_misc', 'wiki', 'copyright_notice',
@@ -802,16 +819,22 @@ class GameData(object):
 
         for port in ('debian', 'rpm'):
             if FORMAT == port and port in d:
-                for k in ('engine', 'install_to', 'description'):
+                for k in ('engine', 'install_to', 'description', 'depends', 'provides'):
                     if k in d[port]:
                         setattr(package, k, d[port][k])
 
         for port in ('arch', 'fedora', 'suse'):
             if DISTRO == port and port in d:
-                for k in ('engine', 'install_to', 'description'):
+                for k in ('engine', 'install_to', 'description', 'depends', 'provides'):
                     if k in d[port]:
                         setattr(package, k, d[port][k])
 
+        # Fedora doesn't handle alternatives, everything must be handled with
+        # virtual packages
+        if FORMAT == 'rpm':
+            for dep in package.depends:
+                assert '|' not in dep, (package.name, package.depends)
+
         assert self.copyright or package.copyright, package.name
         assert package.component in ('main', 'contrib', 'non-free', 'local')
         assert package.component == 'local' or 'license' in d
diff --git a/game_data_packager/build.py b/game_data_packager/build.py
index 9c48648..fb9e200 100644
--- a/game_data_packager/build.py
+++ b/game_data_packager/build.py
@@ -1508,6 +1508,8 @@ class PackagingTask(object):
                 engine = package.engine or self.game.engine
                 if engine and len(engine.split()) == 1:
                     spec.write('Requires: %s\n' % engine)
+            for p in package.depends:
+                spec.write('Requires: %s\n' % p)
             if not compress or not self.compress_deb or package.rip_cd:
                 spec.write('%define _binary_payload w0.gzdio\n')
             elif self.compress_deb == ['-Zgzip', '-z1']:
@@ -1712,10 +1714,12 @@ class PackagingTask(object):
             control['Architecture'] = self.get_architecture(package.architecture)
 
         dep = dict()
-        for field in ('breaks', 'conflicts', 'depends', 'provides',
+        for field in ('breaks', 'conflicts', 'provides',
                       'recommends', 'replaces', 'suggests'):
             dep[field] = set(package.debian.get(field,[]))
 
+        dep['depends'] = package.depends
+
         if package.mutually_exclusive:
             dep['conflicts'] |= package.demo_for
             if package.better_version:

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