def parse(self, env): for arg in self._args: if arg.startswith("-t") or arg.startswith("--toolkit"): self._toolkit = self._getOptionArgument(arg) elif arg.startswith("-l") or arg.startswith("--language"): self._language = self._getOptionArgument(arg) elif arg.startswith("-f") or arg.startswith("--file"): self._inputFile = self._getOptionArgument(arg) elif arg in ('-d', '--debug'): self._debug_mode = True elif arg in ('-c', '--clean'): self._clean_mode = True elif arg in ('-V', '--verbose'): self._verbose_mode = True elif arg in ('-v', '--version'): self._version() elif arg in ('-h', '--help'): self._usage() else: print 'Invalid argument %s!\nTry -h or --help to view help info.' % arg sys.exit(-1) env.setLanguage(self._language) env.setToolkit(self._toolkit) env.setDebugMode(self._debug_mode) env.setCleanMode(self._clean_mode) env.setVerboseMode(self._verbose_mode) if not os.path.isfile(self._inputFile): ymessage.fatal("Missing input file!")
def _execute_template(self, target): target_name = target.getTargetFullName(self._env.getToolkit()) if target.getType() != 'object': (filepath, filename) = os.path.split(target_name) if filepath and (not os.path.exists(filepath)): os.mkdir(filepath) (name, ext) = os.path.splitext(filename) name = self._env.getPrefix() + target.getPrefix( ) + name + target.getSuffix() + self._env.getSuffix() filename = ''.join([name, ext]) target_name = os.path.join(filepath, filename) # clean mode if self._env.getCleanMode(): self._safe_remove(target_name) return # build mode if os.path.isfile(target_name): need_update = False target_mtime = os.path.getmtime(target_name) for source in target.getSources(): if os.path.getmtime(source) >= target_mtime: need_update = True break if not need_update: ymessage.message('Target %s is up to date.' % target_name) return cmd_line = self._expand_template(target_name, target) ymessage.message(cmd_line) if not self._env.execute(cmd_line): ymessage.fatal('Failed to execute command!')
def _execute_template(self, target): target_name = target.getTargetFullName(self._env.getToolkit()) if target.getType() != "object": (filepath, filename) = os.path.split(target_name) if filepath and (not os.path.exists(filepath)): os.mkdir(filepath) (name, ext) = os.path.splitext(filename) name = self._env.getPrefix() + target.getPrefix() + name + target.getSuffix() + self._env.getSuffix() filename = "".join([name, ext]) target_name = os.path.join(filepath, filename) # clean mode if self._env.getCleanMode(): self._safe_remove(target_name) return # build mode if os.path.isfile(target_name): need_update = False target_mtime = os.path.getmtime(target_name) for source in target.getSources(): if os.path.getmtime(source) >= target_mtime: need_update = True break if not need_update: ymessage.message("Target %s is up to date." % target_name) return cmd_line = self._expand_template(target_name, target) ymessage.message(cmd_line) if not self._env.execute(cmd_line): ymessage.fatal("Failed to execute command!")
def getTargetFullName(self, toolkit): (filepath, filename) = os.path.split(self._name) if toolkit == 'msvc': ext_name = None if self._type.endswith('_app'): ext_name = 'exe' elif self._type == 'static_library': ext_name = 'lib' elif self._type == 'dynamic_library': ext_name = 'dll' if ext_name: filename = self._get_new_name_with_ext(filename, ext_name) elif toolkit == 'gnu': os_system = platform.system().upper() if (self._type.endswith('_app')) and (os_system=='WINDOWS'): filename = self._get_new_name_with_ext(filename, 'exe') elif self._type == 'static_library': filename = 'lib' + self._get_new_name_with_ext(filename, 'a') elif self._type == 'dynamic_library': dll_ext = 'so' if os_system == 'WINDOWS': dll_ext = 'dll' filename = 'lib' + self._get_new_name_with_ext(filename, dll_ext) else: ymessage.fatal('Error at YaxTarget.getTargetFullName() with toolkit: %s' % toolkit) return os.path.join(filepath, filename)
def __init__(self, target_type, target_name, target_sources): ynode.YaxNode.__init__(self) if target_type not in YaxTarget.target_types: ymessage.fatal('Invalid target type: %s' % target_type) self._type = target_type self._name = target_name self._sources = target_sources
def _getOptionArgument(self, arg): items = arg.split('=', 1) if len(items) < 2: ymessage.fatal('Option "%s" requires an argument' % arg) return items[1].strip()
def _getOptionArgumentValue(self, arg, templ): optarg = self._getOptionArgument(arg) if optarg not in templ.keys(): ymessage.fatal('Invalid argument: %s\n', arg) return templ[optarg]
def _getOptionArgument(self, arg): items = arg.split('=', 1) if len(items)<2: ymessage.fatal('Option "%s" requires an argument' % arg) return items[1].strip()
def __init__(self, lang): if lang not in YaxLanguage.languages: ymessage.fatal('Invalid language: %s' % lang) self._language = lang
def __init__(self, toolkit): if toolkit not in YaxToolkit.toolkits: ymessage.fatal('Invalid toolkit: %s' % toolkit) self._toolkit = toolkit
def fatal(self, s): ymessage.fatal(s)