116 lines
4.6 KiB
Python
Executable File
116 lines
4.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
import os
|
|
import argparse
|
|
from Core.FileContentProvider import FileContentProvider
|
|
from Core.LineConveyor.CommentRemover import CommentRemover
|
|
from Core.LineConveyor.TextConveyorPreprocessor import TextConveyorPreprocessor
|
|
from Core.LineConveyor.MacroResolver import MacroResolver
|
|
from Core.LineConveyor.Stripper import Stripper
|
|
from Core.LineConveyor.TextInclude import TextInclude
|
|
from commands.ValueProvider import ValueProvider
|
|
from utils.BuildConfigProvider.BuildConfigProvider import BuildConfigProvider
|
|
from utils.BuildConfigProvider.PredefinedMacrosBuildConfigProvider import PredefinedMacrosBuildConfigProvider
|
|
from utils.BuildConfigProvider.ResolvedBuildConfigProvider import ResolvedBuildConfigProvider
|
|
from utils.IncludeProcessor import IncludeProcessor
|
|
from utils.MacroProcessor import MacroProcessor
|
|
from utils.SettingsProvider.CmdArgsOverriderSettingsProvider import CmdArgsOverriderSettingsProvider
|
|
from utils.SettingsProvider.FromFileSettingsProvider import FromFileSettingsProvider
|
|
from Core.StepsRunner import StepsRunner
|
|
|
|
scriptFilePath = os.path.abspath(__file__)
|
|
scriptDir = os.path.dirname(scriptFilePath)
|
|
|
|
#baseDir = os.path.join(scriptDir, os.pardir)
|
|
#os.chdir(baseDir)
|
|
|
|
|
|
class TaskRunner:
|
|
def __init__(self, settingsProvider, fileContentProvider, buildConfigProvider, linePreprocessor, defaults):
|
|
assert settingsProvider is not None
|
|
assert fileContentProvider is not None
|
|
assert buildConfigProvider is not None
|
|
assert linePreprocessor is not None
|
|
assert defaults is not None
|
|
|
|
self.settingsProvider = settingsProvider
|
|
self.fileContentProvider = fileContentProvider
|
|
self.configsProvider = buildConfigProvider
|
|
self.linePreprocessor = linePreprocessor
|
|
self.defaults = defaults
|
|
|
|
macroProcessor = MacroProcessor()
|
|
self.valueProvider = ValueProvider()
|
|
macroResolver = MacroResolver(macroProcessor, self.valueProvider)
|
|
|
|
includeProcessor = IncludeProcessor()
|
|
textInclude = TextInclude(includeProcessor, self.fileContentProvider)
|
|
|
|
# последовательность важна!
|
|
# Сначала резолвим макросы, потом делаем включение файлов
|
|
# Это позволяет использовать макросы в include выражениях
|
|
self.textPreprocessor = TextConveyorPreprocessor()
|
|
self.textPreprocessor.addProcessor(macroResolver)
|
|
self.textPreprocessor.addProcessor(textInclude)
|
|
|
|
|
|
def run(self):
|
|
rawSettings = self.settingsProvider.fetchSettings()
|
|
buildReadyConfigs = self.configsProvider.getConfigs(rawSettings)
|
|
|
|
for bc in buildReadyConfigs:
|
|
self.valueProvider.setConfig(bc)
|
|
self.runConfig(bc)
|
|
|
|
def runConfig(self, config):
|
|
content = self.getStepsContent(config)
|
|
|
|
stepsRunner = StepsRunner(config, self.linePreprocessor, self.valueProvider)
|
|
stepsRunner.run(content)
|
|
|
|
def getStepsContent(self, config):
|
|
pathToSteps = config.get('steps', self.defaults['steps'])
|
|
|
|
content = self.fileContentProvider.fetchContent(pathToSteps)
|
|
content = self.textPreprocessor.processText(content, self.textPreprocessor)
|
|
|
|
return content
|
|
|
|
if __name__ == "__main__":
|
|
|
|
defaults = {
|
|
'settings': 'settings.txt',
|
|
'builder_path': scriptDir,
|
|
'steps': os.path.join(scriptDir, 'steps.txt')
|
|
}
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('--settings', required=False)
|
|
allArgs = parser.parse_known_args()
|
|
|
|
knownArgs = allArgs[0]
|
|
overrideArgs = allArgs[1]
|
|
|
|
# компоную препроцессор для индивидуальной обработки строк (удаление комментариев и ведущих пробельных символов)
|
|
lineStripper = Stripper()
|
|
commentRemover = CommentRemover()
|
|
linePreprocessor = TextConveyorPreprocessor()
|
|
linePreprocessor.addProcessor(commentRemover)
|
|
linePreprocessor.addProcessor(lineStripper)
|
|
|
|
# TODO: перенести в корень комапановки
|
|
settingsPath = knownArgs.settings or defaults['settings']
|
|
fromFileSettingsProvider = FromFileSettingsProvider(settingsPath, linePreprocessor)
|
|
overrideWithCmdSetProvider = CmdArgsOverriderSettingsProvider(fromFileSettingsProvider, overrideArgs, linePreprocessor)
|
|
|
|
fContentProvider = FileContentProvider()
|
|
|
|
buildConfigProvider = BuildConfigProvider()
|
|
predefineBuildConfigProvider = PredefinedMacrosBuildConfigProvider(buildConfigProvider)
|
|
predefineBuildConfigProvider.addPredefineMacro('builder_path', defaults['builder_path'])
|
|
|
|
resolvedBuildConfigProvider = ResolvedBuildConfigProvider(predefineBuildConfigProvider)
|
|
|
|
|
|
runner = TaskRunner(overrideWithCmdSetProvider, fContentProvider, resolvedBuildConfigProvider, linePreprocessor, defaults)
|
|
runner.run() |