Changeset 342:3a5cc5a4f0a6


Ignore:
Timestamp:
Dec 11, 2013, 1:22:06 PM (11 years ago)
Author:
Evgeny Stambulchik <Evgeny.Stambulchik@…>
Branch:
default
Phase:
public
Message:

qx-3.0.2.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • config.json

    r338 r342  
    3232  {
    3333    "APPLICATION"  : "pf",
    34     "QOOXDOO_PATH" : "/usr/local/share/qooxdoo/2.1.2",
     34    "QOOXDOO_PATH" : "/usr/local/share/qooxdoo/3.0.2",
    3535    "QXTHEME"      : "pf.theme.Modern",
    3636    "API_EXCLUDE"  : ["qx.test.*", "${APPLICATION}.theme.*"],
  • generate.py

    r139 r342  
    11#!/usr/bin/env python
     2# -*- coding: utf-8 -*-
    23################################################################################
    34#
     
    78#
    89#  Copyright:
    9 #    2008 - 2009 1&1 Internet AG, Germany, http://www.1und1.de
     10#    2008 - 2012 1&1 Internet AG, Germany, http://www.1und1.de
    1011#
    1112#  License:
     
    2324##
    2425
    25 import sys, os, re, subprocess
     26import sys, os, re, subprocess, codecs, optparse
    2627
    27 CMD_PYTHON = 'python'
    28 QOOXDOO_PATH = ''
     28CMD_PYTHON = sys.executable
     29QOOXDOO_PATH = '..'
     30QX_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#
     38class 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
     52def 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
     65ShellOptions, 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)
     71def stripComments(s):
     72    b = _eolComment.sub('',s)
     73    b = _mulComment.sub('',b)
     74    return b
    2975
    3076def getQxPath():
    3177    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
    43118    path = os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), path))
    44119
     
    52127    print "Cannot find real generator script under: \"%s\"; aborting" % REAL_GENERATOR
    53128    sys.exit(1)
     129elif ShellOptions.verbose:
     130    print "\nInvoking real generator under %s ..." % REAL_GENERATOR
    54131
    55132argList = []
     
    67144else:
    68145    argList = ['"%s"' % x for x in argList]  # quote argv elements
    69    
     146
    70147cmd = " ".join(argList)
    71148retval = subprocess.call(cmd, shell=True)
Note: See TracChangeset for help on using the changeset viewer.