125 from optparse
import OptionParser
126 parser = OptionParser(prog = os.path.basename(sys.argv[0]),
127 usage =
"%prog [options] <PackageName> [<Module1> ...]")
128 parser.add_option(
"-o",
"--output", action=
"store", type=
"string",
129 help=
"output file for confDb data [default = '../genConf/<PackageName>_user_confDb.py'].")
130 parser.add_option(
"-r",
"--root", action=
"store", type=
"string",
131 help=
"root directory of the python modules [default = '../python'].")
132 parser.add_option(
"-v",
"--verbose", action=
"store_true",
133 help=
"print some debugging information")
134 parser.add_option(
"--debug", action=
"store_true",
135 help=
"print more debugging information")
136 parser.add_option(
"--lockerpath", action=
"store",
138 help=
"directory where to find the module 'locker'")
139 parser.set_defaults(root = os.path.join(
"..",
"python"))
141 opts, args = parser.parse_args()
144 log_level = logging.DEBUG
146 log_level = logging.VERBOSE
148 log_level = logging.INFO
if os.environ.get(
'VERBOSE')
else logging.WARNING
149 logging.basicConfig(format =
"%(levelname)s: %(message)s",
154 parser.error(
"PackageName is required")
156 package_name = args.pop(0)
158 usingConvention =
False
161 args = [package_name +
".Configuration"]
162 usingConvention =
True
164 genConfDir = os.path.join(
"..", os.environ.get(
"CMTCONFIG",
""),
"genConf")
165 if not os.path.exists(genConfDir):
166 genConfDir = os.path.join(
"..",
"genConf")
169 outputfile = os.path.join(genConfDir, package_name +
'_user.confdb')
171 outputfile = opts.output
177 if "GAUDI_BUILD_LOCK" in os.environ:
179 sys.path.append(opts.lockerpath)
183 from locker
import LockFile
185 def LockFile(*args, **kwargs):
188 dbLock = LockFile(os.environ[
"GAUDI_BUILD_LOCK"], temporary =
True)
193 import Gaudi.Configurables
194 Gaudi.Configurables.ignoreMissingConfigurables =
True
203 sys.path.insert(0, genConfDir)
204 sys.path.insert(0, os.path.join(
"..",
"python"))
205 localConfDb = os.path.join(genConfDir, package_name, package_name +
'.confdb')
206 if os.path.exists(localConfDb):
207 cfgDb._loadModule(localConfDb)
209 package_module = __import__(package_name)
210 package_module.__path__.insert(0, os.path.join(genConfDir, package_name))
223 logging.error(
"Cannot import module %r:\n%s", mod,
224 traceback.format_exc().rstrip())
230 cfgDb.add(configurable = m,
234 elif not usingConvention:
235 logging.warning(
"Specified module %r does not contain ConfigurableUser specializations", mod)
238 logging.info(
"ConfigurableUser found:\n%s", pformat(cus))
240 output =
"""## -*- ascii -*-
241 # db file automatically generated by %s on: %s
242 """ % (parser.prog, time.asctime())
246 output +=
"%s %s %s\n" % (mod,
'None', cu)
249 output +=
"## %s\n" % package_name
250 elif usingConvention:
251 logging.info(
"No ConfigurableUser found")
252 output = (
"# db file automatically generated by %s on: %s\n"
253 "# No ConfigurableUser specialization in %s\n") % (parser.prog, time.asctime(), package_name)
255 logging.error(
"No ConfigurableUser specialization found")
259 output_dir = os.path.dirname(outputfile)
261 logging.info(
"Creating directory %r", output_dir)
262 os.makedirs(output_dir, 0755)
265 if err.errno == errno.EEXIST:
272 logging.verbose(
"Writing confDb data to %r", outputfile)
273 open(outputfile,
"w").write(output)