Missing space in error.
[zeroinstall.git] / run.py
blob3cb6a4f55b8f7242e02945e8ded2173ca34b0413
1 import os, sys
3 from model import Interface, SafeException, EnvironmentBinding
5 def do_env_binding(binding, path):
6 extra = os.path.join(path, binding.insert)
7 if binding.name in os.environ:
8 os.environ[binding.name] = extra + ':' + os.environ[binding.name]
9 else:
10 os.environ[binding.name] = extra
11 #print "%s=%s" % (binding.name, os.environ[binding.name])
13 def execute(policy, prog_args):
14 iface = policy.get_interface(policy.root)
15 if not iface.main:
16 raise SafeException("Interface '%s' cannot be executed directly; it is just a library "
17 "to be used by other programs (or missing 'main' attribute on the "
18 "root <interface> element)." % iface.name)
20 def setup_bindings(i):
21 impl = policy.get_implementation(i)
22 for dep in impl.dependencies.values():
23 dep_iface = policy.get_interface(dep.interface)
24 for b in dep.bindings:
25 if isinstance(b, EnvironmentBinding):
26 dep_impl = policy.get_implementation(dep_iface)
27 do_env_binding(b, policy.get_implementation_path(dep_impl))
28 setup_bindings(dep_iface)
29 setup_bindings(iface)
31 root_impl = policy.get_implementation(iface)
32 prog_path = os.path.join(policy.get_implementation_path(root_impl), iface.main)
33 if not os.path.exists(prog_path):
34 print >>sys.stderr, "'%s' does not exist." % prog_path
35 print >>sys.stderr, "(implementation '%s' + program '%s')" % (policy.implementation[iface].id, iface.main)
36 sys.exit(1)
37 os.execl(prog_path, prog_path, *prog_args)