1 # Copyright (C) 2006, Thomas Leonard
2 # See http://0install.net/0compile.html
4 import sys
, os
, __main__
5 from logging
import info
6 from xml
.dom
import minidom
, XMLNS_NAMESPACE
8 from zeroinstall
.injector
import model
, selections
, namespaces
9 from zeroinstall
.injector
.handler
import Handler
10 from zeroinstall
.injector
.iface_cache
import iface_cache
11 from zeroinstall
.injector
.policy
import Policy
12 from zeroinstall
import SafeException
, helpers
16 def do_setup(args
, get_dir_callback
= None):
17 "setup [ SOURCE-URI [ DIR ] ]"
19 assert get_dir_callback
is None
21 interface
= buildenv
.interface
24 buildenv
.get_selections(prompt
= True)
26 buildenv
= BuildEnv(need_config
= False)
31 create_dir
= os
.path
.basename(interface
)
32 if create_dir
.endswith('.xml'):
33 create_dir
= create_dir
[:-4]
34 assert '/' not in create_dir
35 assert create_dir
is not '.'
37 create_dir
= get_dir_callback(create_dir
)
43 raise __main__
.UsageError()
45 iface_uri
= model
.canonical_iface_uri(args
[0])
46 if iface_uri
.startswith('/'):
47 root
= qdom
.parse(file(iface_uri
))
48 if root
.uri
== namespaces
.XMLNS_IFACE
and root
.name
== 'selections':
49 # Looks like this is a selections file, not an interface.
50 buildenv
.config
.set('compile', 'selections', iface_uri
)
51 iface_uri
= root
.getAttribute('interface')
52 buildenv
.config
.set('compile', 'interface', iface_uri
)
54 if create_dir
and os
.path
.exists(create_dir
):
55 raise SafeException("Directory '%s' already exists." % create_dir
)
56 buildenv
.get_selections()
61 print "Created directory %s" % create_dir
65 __main__
.commands
.append(do_setup
)