[game-data-packager] 06/11: Use JSON for launcher metadata to allow nested data structures
Simon McVittie
smcv at debian.org
Wed Jan 13 00:06:51 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 9f72cbb3543abd7f7049d091d2742ddb6f12c6f6
Author: Simon McVittie <smcv at debian.org>
Date: Tue Jan 12 22:38:29 2016 +0000
Use JSON for launcher metadata to allow nested data structures
As with the game metadata, I'm using YAML as a source format, because
JSON is really annoying to hand-edit.
---
Makefile | 5 +++
runtime/launch-unreal-gold.yaml | 19 +++++++++++
runtime/launch-unreal.yaml | 18 ++++++++++
runtime/launcher.py | 75 ++++++++++++-----------------------------
runtime/unreal-gold.desktop | 10 ------
runtime/unreal.desktop | 10 ------
6 files changed, 64 insertions(+), 73 deletions(-)
diff --git a/Makefile b/Makefile
index d661feb..fb0b1e7 100644
--- a/Makefile
+++ b/Makefile
@@ -85,6 +85,10 @@ out/%.png: data/%.svg
out/%.svgz: out/%.svg
gzip -nc $< > $@
+out/launch-%.json: runtime/launch-%.yaml
+ mkdir -p out
+ $(PYTHON) tools/yaml2json.py $< $@
+
clean:
rm -f ./out/bash_completion
rm -f ./out/changelog.gz
@@ -131,6 +135,7 @@ install:
install -m0644 runtime/*.desktop $(DESTDIR)$(datadir)/game-data-packager/
install -m0644 runtime/confirm-binary-only.txt $(DESTDIR)$(datadir)/game-data-packager/
install -m0644 runtime/missing-data.txt $(DESTDIR)$(datadir)/game-data-packager/
+ install -m0644 out/launch-*.json $(DESTDIR)$(datadir)/game-data-packager/
mkdir -p $(DESTDIR)/usr/share/bash-completion/completions
install -m0644 data/bash-completion/game-data-packager $(DESTDIR)/usr/share/bash-completion/completions/
diff --git a/runtime/launch-unreal-gold.yaml b/runtime/launch-unreal-gold.yaml
new file mode 100644
index 0000000..62a4303
--- /dev/null
+++ b/runtime/launch-unreal-gold.yaml
@@ -0,0 +1,19 @@
+---
+binary_only: true
+required_files:
+ - System/Core.so
+ - System/Core.u
+ - System/UnrealLinux.bin
+ - Maps/Entry.unr
+base_directories:
+ - /usr/lib/unreal-gold
+ - /usr/lib/unreal
+ - /usr/share/games/unreal-gold
+ - /usr/share/games/unreal
+ - /usr/share/games/unreal-ut99-shared
+link_files: true
+copy_files: ["*.ini"]
+working_directory: ${XDG_DATA_HOME}/unreal-gold/System
+library_path: ["."]
+argv: [./UnrealLinux.bin]
+...
diff --git a/runtime/launch-unreal.yaml b/runtime/launch-unreal.yaml
new file mode 100644
index 0000000..dcc7806
--- /dev/null
+++ b/runtime/launch-unreal.yaml
@@ -0,0 +1,18 @@
+---
+binary_only: true
+required_files:
+ - System/Core.so
+ - System/Core.u
+ - System/UnrealLinux.bin
+ - Maps/Entry.unr
+base_directories:
+ - /usr/lib/unreal-classic
+ - /usr/lib/unreal
+ - /usr/share/games/unreal
+ - /usr/share/games/unreal-ut99-shared
+link_files: true
+copy_files: ["*.ini"]
+working_directory: ${XDG_DATA_HOME}/unreal/System
+library_path: ["."]
+argv: [./UnrealLinux.bin]
+...
diff --git a/runtime/launcher.py b/runtime/launcher.py
index 8d9609d..53b3113 100755
--- a/runtime/launcher.py
+++ b/runtime/launcher.py
@@ -19,9 +19,9 @@
import argparse
import fnmatch
+import json
import logging
import os
-import shlex
import shutil
import string
import sys
@@ -38,17 +38,6 @@ if 'GDP_UNINSTALLED' in os.environ:
else:
GDP_DIR = '/usr/share/games/game-data-packager'
-GDL_GROUP = 'X-game-data-launcher'
-GDL_KEY_BINARY_ONLY = 'BinaryOnly'
-GDL_KEY_BASE_DIRECTORIES = 'BaseDirectories'
-GDL_KEY_REQUIRED_FILES = 'RequiredFiles'
-GDL_KEY_DOT_DIRECTORY = 'DotDirectory'
-GDL_KEY_LIBRARY_PATH = 'LibraryPath'
-GDL_KEY_LINK_FILES = 'LinkFiles'
-GDL_KEY_COPY_FILES = 'CopyFiles'
-GDL_KEY_WORKING_DIRECTORY = 'WorkingDirectory'
-GDL_KEY_EXEC = 'Exec'
-
# Normalize environment so we can use ${XDG_DATA_HOME} unconditionally.
# Do this before we use GLib functions that might create worker threads,
# because setenv() is not thread-safe.
@@ -118,63 +107,43 @@ class Launcher:
GLib.KEY_FILE_DESKTOP_KEY_ICON)
logger.debug('Icon: %s', self.icon_name)
- self.binary_only = self.keyfile.get_boolean(GDL_GROUP,
- GDL_KEY_BINARY_ONLY)
+ if 'GDP_UNINSTALLED' in os.environ:
+ import yaml
+ self.data = yaml.load(open('%s/launch-%s.yaml' % (GDP_DIR, self.id),
+ encoding='utf-8'), Loader=yaml.CSafeLoader)
+ else:
+ self.data = json.load(open('%s/launch-%s.json' % (GDP_DIR, self.id),
+ encoding='utf-8'))
+
+ self.binary_only = self.data['binary_only']
logger.debug('Binary-only: %r', self.binary_only)
- self.required_files = list(map(expand,
- self.keyfile.get_string_list(GDL_GROUP,
- GDL_KEY_REQUIRED_FILES)))
+ self.required_files = list(map(expand, self.data['required_files']))
logger.debug('Checked files: %r', sorted(self.required_files))
- try:
- self.dot_directory = expand(self.keyfile.get_string(GDL_GROUP,
- GDL_KEY_DOT_DIRECTORY))
- except:
- self.dot_directory = expand('${XDG_DATA_HOME}/' + self.id)
+ self.dot_directory = expand(self.data.get('dot_directory',
+ '${XDG_DATA_HOME}/' + self.id))
logger.debug('Dot directory: %s', self.dot_directory)
- try:
- self.base_directories = list(map(expand,
- self.keyfile.get_string_list(GDL_GROUP,
- GDL_KEY_BASE_DIRECTORIES)))
- except:
- # this launcher is for binary-only games so assume /usr/lib
- self.base_directories = ['/usr/lib/' + self.id]
+ self.base_directories = list(map(expand,
+ self.data.get('base_directories',
+ '/usr/lib/' + self.id)))
logger.debug('Base directories: %r', self.base_directories)
- try:
- self.library_path = self.keyfile.get_string_list(GDL_GROUP,
- GDL_KEY_LIBRARY_PATH)
- except:
- self.library_path = []
+ self.library_path = self.data.get('library_path', [])
logger.debug('Library path: %r', self.library_path)
- try:
- self.working_directory = expand(self.keyfile.get_string(GDL_GROUP,
- GDL_KEY_WORKING_DIRECTORY))
- except:
- self.working_directory = None
+ self.working_directory = expand(self.data.get('working_directory',
+ None))
logger.debug('Working directory: %s', self.working_directory)
- try:
- self.link_files = self.keyfile.get_boolean(GDL_GROUP,
- GDL_KEY_LINK_FILES)
- except:
- self.link_files = False
+ self.link_files = self.data.get('link_files', False)
logger.debug('Link files: %r', self.link_files)
if self.link_files:
- try:
- self.copy_files = self.keyfile.get_string_list(GDL_GROUP,
- GDL_KEY_COPY_FILES)
- except:
- self.copy_files = []
+ self.copy_files = self.data.get('copy_files', [])
logger.debug('... but copy files matching: %r', self.copy_files)
- else:
- self.copy_files = []
- exec_ = self.keyfile.get_string(GDL_GROUP, GDL_KEY_EXEC)
- self.argv = list(map(expand, shlex.split(exec_)))
+ self.argv = list(map(expand, self.data.get('argv', False)))
logger.debug('Arguments: %r', self.argv)
self.exit_status = 1
diff --git a/runtime/unreal-gold.desktop b/runtime/unreal-gold.desktop
index 9cf33cc..da5f0cd 100644
--- a/runtime/unreal-gold.desktop
+++ b/runtime/unreal-gold.desktop
@@ -8,13 +8,3 @@ Terminal=false
Type=Application
Categories=Game;ActionGame;
Keywords=first person shooter;fps;3d;epic megagames;epic games;digital extremes;return to na pali;
-
-[X-game-data-launcher]
-BinaryOnly=true
-RequiredFiles=System/Core.so;System/Core.u;System/UnrealLinux.bin;Maps/Entry.unr;
-BaseDirectories=/usr/lib/unreal-gold;/usr/lib/unreal;/usr/share/games/unreal-gold;/usr/share/games/unreal;/usr/share/games/unreal-ut99-shared;
-LinkFiles=true
-CopyFiles=*.ini;
-WorkingDirectory=${XDG_DATA_HOME}/unreal-gold/System
-LibraryPath=.;
-Exec=./UnrealLinux.bin
diff --git a/runtime/unreal.desktop b/runtime/unreal.desktop
index 3d35e56..b2b0dce 100644
--- a/runtime/unreal.desktop
+++ b/runtime/unreal.desktop
@@ -8,13 +8,3 @@ Terminal=false
Type=Application
Categories=Game;ActionGame;
Keywords=first person shooter;fps;3d;epic megagames;epic games;digital extremes;return to na pali;
-
-[X-game-data-launcher]
-BinaryOnly=true
-RequiredFiles=System/Core.so;System/Core.u;System/UnrealLinux.bin;Maps/Entry.unr;
-BaseDirectories=/usr/lib/unreal-classic;/usr/lib/unreal;/usr/share/games/unreal;/usr/share/games/unreal-ut99-shared;
-LinkFiles=true
-CopyFiles=*.ini;
-WorkingDirectory=${XDG_DATA_HOME}/unreal/System
-LibraryPath=.;
-Exec=./UnrealLinux.bin
--
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