171 from optparse
import OptionParser
173 parser = OptionParser(
174 prog=os.path.basename(sys.argv[0]),
175 usage=
"%prog [options] <PackageName> [<Module1> ...]",
182 help=
"output file for confDb data [default = '../genConfDir/<PackageName>_user_confDb.py'].",
189 help=
"root directory of the python modules [default = '../python'].",
192 "-v",
"--verbose", action=
"store_true", help=
"print some debugging information"
195 "--debug", action=
"store_true", help=
"print more debugging information"
200 help=
"build directory where to look for .confdb files (search all subdirectories)",
205 help=
"name of the current project (used to exclude spurious versions of the .confdb file for the current project)",
207 parser.set_defaults(root=os.path.join(
"..",
"python"))
209 opts, args = parser.parse_args()
212 log_level = logging.DEBUG
214 log_level = logging.VERBOSE
216 log_level = logging.INFO
if os.environ.get(
"VERBOSE")
else logging.WARNING
218 format=
"%(levelname)s: %(message)s", stream=sys.stdout, level=log_level
222 parser.error(
"PackageName is required")
224 package_name = args.pop(0)
226 usingConvention =
False
229 args = [package_name +
".Configuration"]
230 usingConvention =
True
232 genConfDir = os.path.join(
"..", os.environ.get(
"CMTCONFIG",
""),
"genConfDir")
233 if not os.path.exists(genConfDir):
234 genConfDir = os.path.join(
"..",
"genConfDir")
237 outputfile = os.path.join(genConfDir, package_name +
"_user.confdb")
239 outputfile = opts.output
244 import Gaudi.Configurables
246 Gaudi.Configurables.ignoreMissingConfigurables =
True
255 sys.path.insert(0, genConfDir)
256 sys.path.insert(0, os.path.join(
"..",
"python"))
257 localConfDb = os.path.join(genConfDir, package_name, package_name +
".confdb")
258 if os.path.exists(localConfDb):
259 cfgDb._loadModule(localConfDb)
261 package_module = __import__(package_name)
262 package_module.__path__.insert(0, os.path.join(genConfDir, package_name))
276 "Cannot import module %r:\n%s", mod, traceback.format_exc().rstrip()
283 cfgDb.add(configurable=m, package=
"None", module=
"None", lib=
"None")
284 elif not usingConvention:
286 "Specified module %r does not contain ConfigurableUser specializations",
291 logging.info(
"ConfigurableUser found:\n%s", pformat(cus))
293 output =
"""## -*- ascii -*-
294 # db file automatically generated by %s on: %s
302 output +=
"%s %s %s\n" % (mod,
"None", cu)
305 output +=
"## %s\n" % package_name
306 elif usingConvention:
307 logging.info(
"No ConfigurableUser found")
309 "# db file automatically generated by %s on: %s\n"
310 "# No ConfigurableUser specialization in %s\n"
311 ) % (parser.prog, time.asctime(), package_name)
313 logging.error(
"No ConfigurableUser specialization found")
317 output_dir = os.path.dirname(outputfile)
319 logging.info(
"Creating directory %r", output_dir)
320 os.makedirs(output_dir, 0o755)
321 except OSError
as err:
324 if err.errno == errno.EEXIST:
331 logging.verbose(
"Writing confDb data to %r", outputfile)
332 open(outputfile,
"w").write(output)