def __ImportTemplates(self, packageTemplateLoader: PackageTemplateLoader, templates: List[XmlGenFileImportTemplate], requirements: List[XmlGenFileRequirement], dependencies: List[XmlGenFileDependency], externalDependencies: List[XmlGenFileExternalDependency], directDefines: List[XmlGenFileDefine]) -> None: for template in templates: imported = packageTemplateLoader.Import(self.GetSubPackageSupport(), template, template.Name) for reqEntry in imported.DirectRequirements: requirements.append(reqEntry) for directEntry in imported.DirectDependencies: dependencies.append(directEntry) for extDepEntry in imported.ExternalDependencies: externalDependencies.append(extDepEntry) for directDefEntry in imported.DirectDefines: directDefines.append(directDefEntry)
def __init__(self, config: Config, files: List[str], generator: GeneratorPluginBase, forceImportPackageNames: Optional[List[str]] = None) -> None: super().__init__() self.BasicConfig = config genFilename = config.GenFileName # type: str packageConfigDict = config.ToolConfig.PackageConfiguration # type: Dict[str, ToolConfigPackageConfiguration] packageLocations = [] if not config.Type in packageConfigDict else packageConfigDict[config.Type].Locations # type: List[ToolConfigPackageLocation] factoryFunction = _CreateXmlGenFile templateLocationCache = self.__CacheTemplateLocations(config) self.PackageTemplateLoader = PackageTemplateLoader(config, templateLocationCache) self.PackageFinder = PackageFinder(config, generator, config.Type, packageConfigDict, genFilename, config.IsTestMode) inputFiles = self.PackageFinder.LocateInputFiles(files) # type: List[PackageFile] config.LogPrint("- Parsing") try: config.PushIndent() # Preload all known package files from the cache if the package configuration requested it. if config.Type in packageConfigDict and packageConfigDict[config.Type].Preload: inputFiles = self.PackageFinder.GetKnownPackageFiles(inputFiles) if (generator.PlatformName == PlatformNameString.ANDROID or generator.PlatformId == PlatformNameString.ALL.lower()): internalNinjaToolPackageName = "Recipe.BuildTool.ninja" config.LogPrintVerbose(4, "Adding package {0}".format(internalNinjaToolPackageName)) self.__AddPackageToList(inputFiles, internalNinjaToolPackageName, _ThrowToolDependencyNotFoundException) #if generator.IsCMake: # internalCMakeToolPackageName = "Recipe.BuildTool.CMake" # config.LogPrintVerbose(4, "Adding package {0}".format(internalCMakeToolPackageName)) # self.__AddPackageToList(inputFiles, internalCMakeToolPackageName, _ThrowToolDependencyNotFoundException) if forceImportPackageNames is not None: for packageName in forceImportPackageNames: self.__AddPackageToList(inputFiles, packageName, _ThrowToolDependencyNotFoundException) # Ensure we load the project base package dependencies specified in the project.gen file inputFiles = self.__AddBasePackages(inputFiles, config.ToolConfig.ProjectInfo.Contexts) # sort the input files to ensure a predictable 'initial' order inputFiles.sort(key=lambda s: s.AbsoluteDirPath.lower()) packageDict = {} # type: Dict[str, List[XmlGenFile]] genFiles = [] # type: List[XmlGenFile] # Load the initial package files self.__LoadFiles(config, inputFiles, packageDict, genFiles, config.ToolConfig.DefaultPackageLanguage, factoryFunction) searchForPackages = True newGenFiles = genFiles while searchForPackages: missingPackages = self.__DiscoverMissingPackages(config, generator, packageDict, newGenFiles) if len(missingPackages) > 0: newFiles = self.PackageFinder.LocateMissingPackages(missingPackages) newGenFiles = [] self.__LoadFiles(config, newFiles, packageDict, newGenFiles, config.ToolConfig.DefaultPackageLanguage, factoryFunction) genFiles += newGenFiles else: searchForPackages = False self.FoundInputFiles = inputFiles self.SourceFiles = files self.GenFiles = genFiles finally: config.PopIndent()
def __init__(self, config: Config, files: List[str], platform: GeneratorPluginBase, forceImportPackageNames: Optional[List[str]] = None) -> None: super(PackageLoader, self).__init__() self.BasicConfig = config genFilename = config.GenFileName # type: str packageConfigDict = config.ToolConfig.PackageConfiguration # type: Dict[str, ToolConfigPackageConfiguration] packageLocations = [] if not config.Type in packageConfigDict else packageConfigDict[ config.Type].Locations # type: List[ToolConfigPackageLocation] factoryFunction = _CreateXmlGenFile templateLocationCache = self.__CacheTemplateLocations(config) self.PackageTemplateLoader = PackageTemplateLoader( config, templateLocationCache) self.PackageFinder = PackageFinder(config, platform, config.Type, packageConfigDict, genFilename, config.IsTestMode) inputFiles = self.PackageFinder.LocateInputFiles( files) # type: List[PackageFile] config.LogPrint("- Parsing") try: config.PushIndent() # Preload all known package files from the cache if the package configuration requested it. if config.Type in packageConfigDict and packageConfigDict[ config.Type].Preload: inputFiles = self.PackageFinder.GetKnownPackageFiles( inputFiles) internalNinjaToolPackageName = "Recipe.BuildTool.ninja" if platform.Name == PlatformNameString.ANDROID and not self.__ContainsPackage( inputFiles, internalNinjaToolPackageName): packageFile = self.PackageFinder.TryLocateMissingPackagesByName( internalNinjaToolPackageName) if packageFile is None: raise ToolDependencyNotFoundException( internalNinjaToolPackageName) if packageFile not in inputFiles: # prevent file duplicatin (FIX: this is a workaround due to 'initial' packages not being in the lookup cache) if not self.__ContainsName(inputFiles, internalNinjaToolPackageName): inputFiles.append(packageFile) #files.append(packageFile.AbsoluteFilePath) if forceImportPackageNames is not None: for packageName in forceImportPackageNames: packageFile = self.PackageFinder.TryLocateMissingPackagesByName( packageName) if packageFile is None: raise ToolDependencyNotFoundException(packageName) if packageFile not in inputFiles: # prevent file duplicatin (FIX: this is a workaround due to 'initial' packages not being in the lookup cache) if not self.__ContainsName(inputFiles, packageName): inputFiles.append(packageFile) #files.append(packageFile.AbsoluteFilePath) # sort the input files to ensure a predictable 'initial' order inputFiles.sort(key=lambda s: s.AbsoluteDirPath.lower()) packageDict = {} # type: Dict[str, List[XmlGenFile]] genFiles = [] # type: List[XmlGenFile] # Load the initial package files self.__LoadFiles(config, inputFiles, packageDict, genFiles, config.ToolConfig.DefaultPackageLanguage, factoryFunction) searchForPackages = True newGenFiles = genFiles while searchForPackages: missingPackages = self.__DiscoverMissingPackages( config, platform, packageDict, newGenFiles) if len(missingPackages) > 0: newFiles = self.PackageFinder.LocateMissingPackages( missingPackages) newGenFiles = [] self.__LoadFiles(config, newFiles, packageDict, newGenFiles, config.ToolConfig.DefaultPackageLanguage, factoryFunction) genFiles += newGenFiles else: searchForPackages = False self.FoundInputFiles = inputFiles self.SourceFiles = files self.GenFiles = genFiles finally: config.PopIndent()