[game-data-packager] 11/14: launcher: add support for launching a demo version

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 02b4ec8db958ce153e0b0480ca4113d368eb8fe4
Author: Simon McVittie <smcv at debian.org>
Date:   Wed Oct 12 11:32:35 2016 +0100

    launcher: add support for launching a demo version
---
 runtime/launcher.py | 98 ++++++++++++++++++++++++++++++++---------------------
 1 file changed, 59 insertions(+), 39 deletions(-)

diff --git a/runtime/launcher.py b/runtime/launcher.py
index 4ea75eb..a22706a 100755
--- a/runtime/launcher.py
+++ b/runtime/launcher.py
@@ -182,6 +182,8 @@ class Launcher:
                 description="game-data-packager's game launcher")
         parser.add_argument('--id', default=name,
                 help='identity of launched game (default: from argv[0])')
+        parser.add_argument('--demo', default=False, action='store_true',
+                help='run a demo version even if the full version is available')
         parser.add_argument('--engine', default=None,
                 help='use the specified game engine, if supported')
         parser.add_argument('--expansion', default=None,
@@ -273,35 +275,59 @@ class Launcher:
 
         self.symlink_into_dot_directory = self.data.get(
                 'symlink_into_dot_directory', [])
-        for expansion, data in self.data.get('expansions', {}).items():
-            base_directories = list(map(expand, data.get('base_directories',
-                []))) + self.base_directories
-
-            if self.check_required_files(base_directories,
-                    data.get('extra_required_files', [])):
-                self.symlink_into_dot_directory = (
-                        self.symlink_into_dot_directory +
-                        data.get('symlink_into_dot_directory', []))
-
-            aliases = data.get('aliases', [])
-            if isinstance(aliases, str):
-                aliases = aliases.split()
-
-            if (self.expansion_name == expansion or
-                    self.expansion_name in aliases):
-                extra_argv = data.get('extra_argv', [])
-                if isinstance(extra_argv, str):
-                    extra_argv = extra_argv.split()
-                self.argv = self.argv + extra_argv
-
-                extra_required_files = data.get('extra_required_files', [])
-                if isinstance(extra_required_files, str):
-                    extra_required_files = extra_required_files.split()
-                self.required_files = (self.required_files +
-                        extra_required_files)
-
-                self.base_directories = base_directories
-                break
+
+        for p in self.base_directories:
+            logger.debug('Searching: %s' % p)
+
+        # sanity check: game engines often don't cope well with missing data
+        self.have_all_data = self.check_required_files(self.base_directories,
+            self.required_files)
+
+        if (self.args.demo or not self.have_all_data) and 'demo' in self.data:
+            demo_directories = list(map(expand,
+                            self.data['demo'].get('base_directories',
+                                self.data['base_directories'])))
+            if self.check_required_files(demo_directories,
+                    self.data['demo'].get('required_files',
+                        self.required_files)):
+                self.have_all_data = True
+                self.base_directories = demo_directories
+
+            if 'argv' in self.data['demo']:
+                self.argv = self.data['demo']['argv']
+                if isinstance(self.argv, str):
+                    self.argv = self.argv.split()
+        else:
+            # assume expansions only work with non-demo data
+            for expansion, data in self.data.get('expansions', {}).items():
+                base_directories = list(map(expand, data.get('base_directories',
+                    []))) + self.base_directories
+
+                if self.check_required_files(base_directories,
+                        data.get('extra_required_files', [])):
+                    self.symlink_into_dot_directory = (
+                            self.symlink_into_dot_directory +
+                            data.get('symlink_into_dot_directory', []))
+
+                aliases = data.get('aliases', [])
+                if isinstance(aliases, str):
+                    aliases = aliases.split()
+
+                if (self.expansion_name == expansion or
+                        self.expansion_name in aliases):
+                    extra_argv = data.get('extra_argv', [])
+                    if isinstance(extra_argv, str):
+                        extra_argv = extra_argv.split()
+                    self.argv = self.argv + extra_argv
+
+                    extra_required_files = data.get('extra_required_files', [])
+                    if isinstance(extra_required_files, str):
+                        extra_required_files = extra_required_files.split()
+                    self.required_files = (self.required_files +
+                            extra_required_files)
+
+                    self.base_directories = base_directories
+                    break
 
         logger.debug('Arguments: %r', self.argv)
 
@@ -341,17 +367,10 @@ class Launcher:
                 Gtk.main()
                 sys.exit(72)    # EX_OSFILE
 
-        for p in self.base_directories:
-            logger.debug('Searching: %s' % p)
-
-        # sanity check: game engines often don't cope well with missing data
-        have_all_data = self.check_required_files(self.base_directories,
-            self.required_files)
-
         if self.dot_directory is not None:
             os.makedirs(self.dot_directory, exist_ok=True)
 
-        if not have_all_data:
+        if not self.have_all_data:
             gui = Gui(self)
             gui.text_view.get_buffer().set_text(
                     self.load_text('missing-data.txt', 'Data files missing'))
@@ -559,8 +578,6 @@ class Launcher:
         if self.engine is not None:
             self.argv.insert(0, self.engine)
 
-        self.flush()
-
         environ = os.environ.copy()
 
         library_path = self.library_path[:]
@@ -570,6 +587,9 @@ class Launcher:
 
         environ['LD_LIBRARY_PATH'] = ':'.join(library_path)
 
+        logger.debug('Executing: %r', self.argv + self.args.arguments)
+        self.flush()
+
         os.execve(self.argv[0], self.argv + self.args.arguments, environ)
 
         raise AssertionError('os.execve should never return')

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