Pass any extra arguments to "0compile build" on to the build command itself
[0compile.git] / setup.py
blob1af2c89054898560f6fe33e62f9a26bce9afb419
1 # Copyright (C) 2006, Thomas Leonard
2 # See http://0install.net/0compile.html
4 import os, __main__
6 from zeroinstall.injector import model, namespaces, qdom
7 from zeroinstall import SafeException
9 from support import BuildEnv
11 def do_setup(args, get_dir_callback = None):
12 "setup [ SOURCE-URI [ DIR ] ]"
13 if len(args) == 0:
14 assert get_dir_callback is None
15 buildenv = BuildEnv()
16 interface = buildenv.interface
17 assert interface
18 create_dir = None
19 buildenv.get_selections(prompt = True)
20 else:
21 buildenv = BuildEnv(need_config = False)
22 interface = args[0]
23 if get_dir_callback:
24 assert len(args) == 1
25 if len(args) == 1:
26 create_dir = os.path.basename(interface)
27 if create_dir.endswith('.xml'):
28 create_dir = create_dir[:-4]
29 assert '/' not in create_dir
30 assert create_dir is not '.'
31 if get_dir_callback:
32 create_dir = get_dir_callback(create_dir)
33 elif len(args) == 2:
34 create_dir = args[1]
35 if create_dir == '.':
36 create_dir = None
37 else:
38 raise __main__.UsageError()
40 iface_uri = model.canonical_iface_uri(args[0])
41 if iface_uri.startswith('/'):
42 root = qdom.parse(file(iface_uri))
43 if root.uri == namespaces.XMLNS_IFACE and root.name == 'selections':
44 # Looks like this is a selections file, not an interface.
45 buildenv.config.set('compile', 'selections', iface_uri)
46 iface_uri = root.getAttribute('interface')
47 buildenv.config.set('compile', 'interface', iface_uri)
49 if create_dir and os.path.exists(create_dir):
50 raise SafeException("Directory '%s' already exists." % create_dir)
51 buildenv.get_selections()
53 if create_dir:
54 os.mkdir(create_dir)
55 os.chdir(create_dir)
56 print "Created directory %s" % create_dir
58 buildenv.save()
60 __main__.commands.append(do_setup)