1
0
mirror of https://github.com/lutris/lutris synced 2024-07-08 11:35:50 +00:00

Add runtime and terminal option to installer's execute task

This commit is contained in:
Xodetaetl 2015-05-04 23:58:47 +02:00
parent c0f63b1621
commit 55f87c3657
3 changed files with 25 additions and 4 deletions

View File

@ -202,8 +202,11 @@ Example: ``- chmodx: $GAMEDIR/game_binary``
Executing a file Executing a file
---------------- ----------------
Execute files with the ``execute`` directive. Use the ``args`` parameter to add Execute files with the ``execute`` directive. Use the ``file`` parameter to
command arguments, and ``file`` to reference a ``file id`` or a path. reference a ``file id`` or a path, ``args`` to add command arguments,
``terminal`` (set to "true") to execute in a new terminal window.
The command is executed within the Lutris Runtime (resolving most shared
library dependencies).
Example: Example:
@ -212,6 +215,7 @@ Example:
- execute: - execute:
args: --argh args: --argh
file: $great-id file: $great-id
terminal: true
Writing into an INI type config file Writing into an INI type config file
------------------------------------ ------------------------------------

View File

@ -7,7 +7,6 @@ import shutil
import urllib2 import urllib2
import platform import platform
import shlex import shlex
import subprocess
import webbrowser import webbrowser
from gi.repository import Gdk from gi.repository import Gdk
@ -17,6 +16,7 @@ from lutris.util import extract, devices, system
from lutris.util.fileio import EvilConfigParser, MultiOrderedDict from lutris.util.fileio import EvilConfigParser, MultiOrderedDict
from lutris.util.jobs import async_call from lutris.util.jobs import async_call
from lutris.util.log import logger from lutris.util.log import logger
from lutris.util.runtime import get_runtime_env
from lutris.game import Game from lutris.game import Game
from lutris.config import LutrisConfig from lutris.config import LutrisConfig
@ -25,6 +25,7 @@ from lutris.gui.dialogs import ErrorDialog, NoInstallerDialog
from lutris.runners import ( from lutris.runners import (
wine, winesteam, steam, import_task, import_runner, InvalidRunner wine, winesteam, steam, import_task, import_runner, InvalidRunner
) )
from lutris.thread import LutrisThread
class ScriptingError(Exception): class ScriptingError(Exception):
@ -496,9 +497,15 @@ class ScriptInterpreter(object):
raise ScriptingError("Unable to find required executable", raise ScriptingError("Unable to find required executable",
exec_path) exec_path)
self.chmodx(exec_path) self.chmodx(exec_path)
terminal = data.get('terminal')
if terminal:
terminal = system.get_default_terminal()
command = [exec_path] + args command = [exec_path] + args
logger.debug("Executing %s" % command) logger.debug("Executing %s" % command)
subprocess.call(command) thread = LutrisThread(command, env=get_runtime_env(), term=terminal)
thread.run()
def extract(self, data): def extract(self, data):
"""Extract a file, guessing the compression method.""" """Extract a file, guessing the compression method."""

View File

@ -68,6 +68,16 @@ def update_runtime(set_status):
logger.debug("Runtime updated") logger.debug("Runtime updated")
def get_runtime_env():
"""Return a dict containing LD_LIBRARY_PATH and STEAM_RUNTIME env vars.
Ready for use! (Batteries not included (but not necessary))
"""
runtime_dir = os.path.join(settings.RUNTIME_DIR, 'steam')
ld_library_path = ':'.join(get_runtime_paths()) + ':$LD_LIBRARY_PATH'
return {'STEAM_RUNTIME': runtime_dir, 'LD_LIBRARY_PATH': ld_library_path}
def get_runtime_paths(): def get_runtime_paths():
"""Return a list of paths containing the runtime libraries.""" """Return a list of paths containing the runtime libraries."""
runtime_dir = os.path.join(settings.RUNTIME_DIR, 'steam') runtime_dir = os.path.join(settings.RUNTIME_DIR, 'steam')