Changeset 342:3a5cc5a4f0a6 for generate.py
- Timestamp:
- Dec 11, 2013, 1:22:06 PM (11 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
generate.py
r139 r342 1 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 2 3 ################################################################################ 3 4 # … … 7 8 # 8 9 # Copyright: 9 # 2008 - 20 091&1 Internet AG, Germany, http://www.1und1.de10 # 2008 - 2012 1&1 Internet AG, Germany, http://www.1und1.de 10 11 # 11 12 # License: … … 23 24 ## 24 25 25 import sys, os, re, subprocess 26 import sys, os, re, subprocess, codecs, optparse 26 27 27 CMD_PYTHON = 'python' 28 QOOXDOO_PATH = '' 28 CMD_PYTHON = sys.executable 29 QOOXDOO_PATH = '..' 30 QX_PYLIB = "tool/pylib" 31 32 ## 33 # A derived OptionParser class that ignores unknown options (The parent 34 # class raises in those cases, and stops further processing). 35 # We need this, as we are only interested in -c/--config on this level, and 36 # want to ignore pot. other options. 37 # 38 class IgnoringUnknownOptionParser(optparse.OptionParser): 39 ## 40 # <rargs> is the raw argument list. The original _process_args mutates 41 # rargs, processing options into <values> and copying interspersed args 42 # into <largs>. This overridden version ignores unknown or ambiguous 43 # options. 44 def _process_args(self, largs, rargs, values): 45 while rargs: 46 try: 47 optparse.OptionParser._process_args(self, largs, rargs, values) 48 except (optparse.BadOptionError, optparse.AmbiguousOptionError): 49 pass 50 51 52 def parseArgs(): 53 parser = IgnoringUnknownOptionParser(add_help_option=False) 54 parser.add_option( 55 "-c", "--config", dest="config", metavar="CFGFILE", 56 default="config.json", help="path to configuration file" 57 ) 58 parser.add_option( 59 "-v", "--verbose", dest="verbose", action="store_true", 60 default=False, help="run in verbose mode" 61 ) 62 (options, args) = parser.parse_args(sys.argv[1:]) 63 return options, args 64 65 ShellOptions, ShellArgs = parseArgs() 66 67 68 # this is from misc.json, duplicated for decoupling 69 _eolComment = re.compile(r'(?<![a-zA-Z]:)//.*$', re.M) # double $ for string.Template 70 _mulComment = re.compile(r'/\*.*?\*/', re.S) 71 def stripComments(s): 72 b = _eolComment.sub('',s) 73 b = _mulComment.sub('',b) 74 return b 29 75 30 76 def getQxPath(): 31 77 path = QOOXDOO_PATH 32 # try updating from config file 33 if os.path.exists('config.json'): 34 # "using QOOXDOO_PATH from config.json" 35 qpathr=re.compile(r'"QOOXDOO_PATH"\s*:\s*"([^"]*)"\s*,?') 36 conffile = open('config.json') 37 aconffile = conffile.readlines() 38 for line in aconffile: 39 mo = qpathr.search(line) 40 if mo: 41 path = mo.group(1) 42 break # assume first occurrence is ok 78 # OS env takes precedence 79 if os.environ.has_key("QOOXDOO_PATH"): 80 path = os.environ["QOOXDOO_PATH"] 81 82 # else use QOOXDOO_PATH from config.json 83 else: 84 config_file = ShellOptions.config 85 if os.path.exists(config_file): 86 # try json parsing with qx json 87 if not path.startswith('${'): # template macro has been resolved 88 sys.path.insert(0, os.path.join(path, QX_PYLIB)) 89 try: 90 from misc import json 91 got_json = True 92 except: 93 got_json = False 94 95 got_path = False 96 if got_json: 97 config_str = codecs.open(config_file, "r", "utf-8").read() 98 #config_str = stripComments(config_str) # not necessary under demjson 99 config = json.loads(config_str) 100 p = config.get("let") 101 if p: 102 p = p.get("QOOXDOO_PATH") 103 if p: 104 path = p 105 got_path = True 106 107 # regex parsing - error prone 108 if not got_path: 109 qpathr=re.compile(r'"QOOXDOO_PATH"\s*:\s*"([^"]*)"\s*,?') 110 conffile = codecs.open(config_file, "r", "utf-8") 111 aconffile = conffile.readlines() 112 for line in aconffile: 113 mo = qpathr.search(line) 114 if mo: 115 path = mo.group(1) 116 break # assume first occurrence is ok 117 43 118 path = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), path)) 44 119 … … 52 127 print "Cannot find real generator script under: \"%s\"; aborting" % REAL_GENERATOR 53 128 sys.exit(1) 129 elif ShellOptions.verbose: 130 print "\nInvoking real generator under %s ..." % REAL_GENERATOR 54 131 55 132 argList = [] … … 67 144 else: 68 145 argList = ['"%s"' % x for x in argList] # quote argv elements 69 146 70 147 cmd = " ".join(argList) 71 148 retval = subprocess.call(cmd, shell=True)
Note: See TracChangeset
for help on using the changeset viewer.