예제 #1
0
    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!")
예제 #2
0
    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!')
예제 #3
0
    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!")
예제 #4
0
    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)
예제 #5
0
파일: ycl.py 프로젝트: binaryreveal/yaxmake
    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!")
예제 #6
0
 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
예제 #7
0
 def _getOptionArgument(self, arg):
     items = arg.split('=', 1)
     if len(items) < 2:
         ymessage.fatal('Option "%s" requires an argument' % arg)
     return items[1].strip()
예제 #8
0
 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]
예제 #9
0
파일: ycl.py 프로젝트: binaryreveal/yaxmake
 def _getOptionArgument(self, arg):
     items = arg.split('=', 1)
     if len(items)<2:
         ymessage.fatal('Option "%s" requires an argument' % arg)
     return items[1].strip()
예제 #10
0
파일: ycl.py 프로젝트: binaryreveal/yaxmake
 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]
예제 #11
0
 def __init__(self, lang):
     if lang not in YaxLanguage.languages:
         ymessage.fatal('Invalid language: %s' % lang)
     self._language = lang
예제 #12
0
 def __init__(self, lang):
     if lang not in YaxLanguage.languages:
         ymessage.fatal('Invalid language: %s' % lang)
     self._language = lang
예제 #13
0
파일: ytk.py 프로젝트: binaryreveal/yaxmake
 def __init__(self, toolkit):
     if toolkit not in YaxToolkit.toolkits:
         ymessage.fatal('Invalid toolkit: %s' % toolkit)
     self._toolkit = toolkit
예제 #14
0
 def fatal(self, s):
     ymessage.fatal(s)