[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