[game-data-packager] 07/14: launcher: add support for multiple engines

Simon McVittie smcv at debian.org
Fri Oct 14 00:09:50 UTC 2016


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

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

commit 1f05aea8e8fc2c751732ba0bfa0b4ff981eeff86
Author: Simon McVittie <smcv at debian.org>
Date:   Wed Oct 12 11:11:36 2016 +0100

    launcher: add support for multiple engines
---
 runtime/launcher.py | 37 +++++++++++++++++++++++++++++++++++--
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/runtime/launcher.py b/runtime/launcher.py
index 9d3445d..724385a 100755
--- a/runtime/launcher.py
+++ b/runtime/launcher.py
@@ -178,9 +178,12 @@ class Launcher:
         if name.endswith('.py'):
             name = name[:-3]
 
-        parser = argparse.ArgumentParser()
+        parser = argparse.ArgumentParser(
+                description="game-data-packager's game launcher")
         parser.add_argument('--id', default=name,
-                help='identity of launched game (default: %s)' % name)
+                help='identity of launched game (default: from argv[0])')
+        parser.add_argument('--engine', default=None,
+                help='use the specified game engine, if supported')
         parser.add_argument('arguments', nargs='*',
                 help='arguments for the launched game')
         self.args = parser.parse_args(argv)
@@ -212,6 +215,15 @@ class Launcher:
                     '${XDG_DATA_HOME}/' + self.id))
         logger.debug('Dot directory: %s', self.dot_directory)
 
+        if 'engine' in self.data:
+            self.engines = [self.data['engine']]
+        elif 'engines' in self.data:
+            self.engines = self.data['engines']
+        else:
+            self.engines = []
+
+        self.engine = None
+
         self.base_directories = list(map(expand,
                         self.data.get('base_directories',
                             ['/usr/lib/' + self.id])))
@@ -261,6 +273,24 @@ class Launcher:
             return True
 
     def main(self):
+        if self.engines:
+            for e in self.engines:
+                e = expand(e)
+                if shutil.which(e) is not None:
+                    self.engine = e
+                    break
+            else:
+                gui = Gui(self)
+                gui.text_view.get_buffer().set_text(
+                        '\n'.join(
+                            [self.load_text('missing-engine.txt',
+                                'Game engine missing, tried:')] +
+                            [expand(e) for e in engines]))
+                gui.window.show_all()
+                gui.check_box.hide()
+                Gtk.main()
+                sys.exit(72)    # EX_OSFILE
+
         for p in self.base_directories:
             logger.debug('Searching: %s' % p)
 
@@ -476,6 +506,9 @@ class Launcher:
         self.argv = [expand(a, base_directory=base_directory)
                 for a in self.argv]
 
+        if self.engine is not None:
+            self.argv.insert(0, self.engine)
+
         self.flush()
 
         environ = os.environ.copy()

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