1 import os, glob, string, sys
4 # -----------------------------------------------------------------------------
6 ### xml reader for launch configuration file usage
9 def __init__(self, fileName):
12 parser = xml.sax.make_parser()
13 parser.setContentHandler(self)
14 parser.parse(fileName)
17 def CorrectBoolean(self, str):
18 if str in ("yes", "y", "1"):
20 elif str in ("no", "n", "0"):
26 def startElement(self, name, attrs):
27 #print "startElement name=",name
28 #print "startElement attrs=",attrs.getNames()
29 self.space.append(name)
32 if self.space[:2] == ["Configuration-list","launchoptions"] and len(self.space) == 3:
34 elif self.space == ["Configuration-list","modules-list"]:
35 self.opts["modules"] = []
36 elif self.space == ["Configuration-list","modules-list","module"] and "name" in attrs.getNames():
37 for field in attrs.getNames():
39 self.currentModuleName = str(attrs.getValue("name"))
40 self.opts["modules"].append(self.currentModuleName)
42 self.opts[str(attrs.getValue("name"))+"_"+str(field)] = self.CorrectBoolean(attrs.getValue(field))
45 elif self.space == ["Configuration-list","modules-list","module","plugin"] and "name" in attrs.getNames():
46 key = str(self.currentModuleName)+"_plugins"
47 if not self.opts.has_key(key):
50 self.opts[key].append(attrs.getValue("name"))
51 elif self.space == ["Configuration-list","embedded-list"]:
52 self.opts["embedded"] = []
54 elif self.space == ["Configuration-list","standalone-list"]:
55 self.opts["standalone"] = []
57 elif self.space == ["Configuration-list","containers-list"]:
58 self.opts["containers"] = []
62 def endElement(self, name):
67 def characters(self, content):
68 #print "Characters content:",content
70 self.opts[self.current] = self.CorrectBoolean(content)
71 elif self.space == ["Configuration-list","embedded-list", "embeddedserver"]:
72 self.opts["embedded"].append(content)
73 elif self.space == ["Configuration-list","standalone-list", "standaloneserver"]:
74 self.opts["standalone"].append(content)
75 elif self.space == ["Configuration-list","containers-list", "containertype"]:
76 self.opts["containers"].append(content)
79 def processingInstruction(self, target, data):
82 def setDocumentLocator(self, locator):
85 def startDocument(self):
89 def endDocument(self):
93 # -----------------------------------------------------------------------------
95 ### searching for launch configuration file : $HOME/.$(application_name)/$(application_name).launch
100 for bindir in glob.glob(os.environ["KERNEL_ROOT_DIR"]+"/bin/*"):
101 appname = string.split(bindir, "/").pop()
102 print 'Application name: "'+appname+'"'
103 # find version number
106 file = open(os.environ["KERNEL_ROOT_DIR"]+"/bin/"+appname+"/VERSION", "r")
108 l = string.split(s, ":")
109 vl = string.split(l[1], " ")
111 while len(versnb) == 0:
115 versnb = string.split(versnb, "\n")[0]
116 print "Version ",versnb
119 # end find version number
120 dirname = os.environ["HOME"]+"/."+appname+"_"+versnb
121 filename = dirname+"/"+appname+".launch"
122 if not os.path.exists(filename) and \
123 not os.path.exists(os.environ["KERNEL_ROOT_DIR"]+"/bin/"+appname+"/"+appname+".launch"):
129 print "Can not find application name"
130 if not os.have_key("KERNEL_ROOT_DIR"):
131 print "KERNEL_ROOT_DIR environment variable must be set"
134 elif not filename or not os.path.exists(filename):
135 filename = dirname+"/"+appname+".launch"
136 #filename = os.environ["HOME"]+"/."+appname+"/"+appname+".launch"
137 print "Launch configuration file does not exist. Create default:",filename
138 os.system("mkdir -p "+dirname)
139 #os.system("mkdir -p "+os.environ["HOME"]+"/."+appname)
140 os.system("cp -f "+os.environ["KERNEL_ROOT_DIR"]+"/bin/"+appname+"/"+appname+".launch "+filename)
143 ### get options from launch configuration file
146 p = xml_parser(filename)
148 print 'Can not read launch configuration file ', filename
158 # --- args completion
159 for aKey in ("containers","embedded","key","modules","standalone"):
160 if not args.has_key(aKey):
162 for aKey in ("gui","logger","xterm","portkill","killall"):
163 if not args.has_key(aKey):
165 args["appname"] = appname
167 ### searching for my port
171 file = open(os.environ["OMNIORB_CONFIG"], "r")
174 l = string.split(s, ":")
175 if string.split(l[0], " ")[0] == "ORBInitRef":
176 my_port = int(l[len(l)-1])
183 args["port"] = my_port
185 # -----------------------------------------------------------------------------
187 ### command line options reader
189 def options_parser(line):
192 for delimiter in [" ", ",", "="]:
194 list += string.split(o, delimiter)
200 print "source=",source
204 while i < len(source):
205 if source[i][0] != '-':
207 elif source[i][1] == '-':
217 while i < len(source) and source[i][0] != '-':
218 result[key].append(source[i])
224 # -----------------------------------------------------------------------------
226 ### read command-line options : each arg given in command line supersedes arg from xml config file
229 opts = options_parser(sys.argv[1:])
231 kernel_root_dir=os.environ["KERNEL_ROOT_DIR"]
236 ### check all options are right
240 if not opt in ("h","g","l","x","m","e","s","c","p","k","t"):
241 print "command line error: -", opt
247 if opts.has_key("h"):
248 print """USAGE: runSalome.py [options]
249 [command line options] :
250 --help or -h : print this help
251 --gui or -g : lancement du GUI
252 --terminal -t : launching without gui (to deny --gui)
253 --logger or -l : redirection des messages dans un fichier
254 --xterm or -x : les serveurs ouvrent une fenêtre xterm et les messages sont affichés dans cette fenêtre
255 --modules=module1,module2,... : où modulen est le nom d'un module Salome à charger dans le catalogue
256 or -m=module1,module2,...
257 --embedded=registry,study,moduleCatalog,cppContainer
258 or -e=registry,study,moduleCatalog,cppContainer
259 : serveurs CORBA embarqués (par defaut: registry,study,moduleCatalog,cppContainer)
260 : (logger,pyContainer,supervContainer ne peuvent pas être embarqués
261 --standalone=registry,study,moduleCatalog,cppContainer,pyContainer,supervContainer
262 or -s=registry,study,moduleCatalog,cppContainer,pyContainer,supervContainer
263 : executables serveurs CORBA indépendants (par défaut: pyContainer,supervContainer)
264 --containers=cpp,python,superv: (obsolete) lancement des containers cpp, python et de supervision
265 or -c=cpp,python,superv : = on prend les defauts de -e et -s
266 --portkill or -p : kill the salome with current port
267 --killall or -k : kill salome
269 La variable d'environnement <modulen>_ROOT_DIR doit etre préalablement
270 positionnée (modulen doit etre en majuscule).
271 KERNEL_ROOT_DIR est obligatoire.
276 ### apply command-line options to the arguments
285 args['modules'] = opts['m']
287 args['embedded'] = opts['e']
289 args['standalone'] = opts['s']
291 args['containers'] = opts['c']
299 # 'terminal' must be processed in the end: to deny any 'gui' options