Exemplo n.º 1
0
def DoGetFiles(config: Config,
               toolMiniConfig: ToolMinimalConfig,
               currentDir: str,
               allowRecursiveScan: bool = False) -> List[str]:
    """
    :param currentDir: currentDir must be part of a package root
    :param allowRecursiveScan: if True and not a sdk build all subdirectories will be scanned
    """
    if allowRecursiveScan and config.IsSDKBuild:
        config.DoPrintWarning("recursive is ignored for sdk builds")

    if ToolConfigPackageRootUtil.TryFindRootDirectory(
            toolMiniConfig.RootDirectories, currentDir) is None:
        raise UsageErrorException(
            "the folder '{0}' does not reside inside one of the root dirs".
            format(currentDir))

    theFiles = []  # type: List[str]
    if not config.IsSDKBuild:
        if allowRecursiveScan:
            theFiles += IOUtil.FindFileByName(currentDir, config.GenFileName,
                                              toolMiniConfig.IgnoreDirectories)
        else:
            theFile = IOUtil.Join(currentDir, config.GenFileName)
            if not os.path.isfile(theFile):
                raise Exception("File not found: '{0}'".format(theFile))
            theFiles.append(theFile)
    return theFiles
Exemplo n.º 2
0
def __ResolveAndGenerate(config: Config, errorHelpManager: ErrorHelpManager,
                         platformGeneratorPlugin: GeneratorPlugin,
                         packageLoader: PackageLoader,
                         packageFilters: PackageFilters, isSDKBuild: bool,
                         writeGraph: bool) -> List[Package]:
    generatorContext = GeneratorContext(config, errorHelpManager,
                                        packageFilters.RecipeFilterManager,
                                        config.ToolConfig.Experimental,
                                        platformGeneratorPlugin)

    process = PackageLoadAndResolveProcess(config,
                                           packageLoader,
                                           platformGeneratorPlugin,
                                           writeGraph=writeGraph)
    process.Resolve(generatorContext, packageFilters)

    if not isSDKBuild:
        for package in process.Packages:
            if not package.ResolvedPlatformSupported and package.Type != PackageType.TopLevel:
                notSupported = LocalUtil.BuildListOfDirectlyNotSupported(
                    package)
                notSupportedNames = Util.ExtractNames(notSupported)
                config.DoPrintWarning(
                    "{0} was marked as not supported on this platform by package: {1}"
                    .format(package.Name, notSupportedNames))

    return platformGeneratorPlugin.Generate(generatorContext, config,
                                            process.Packages)
Exemplo n.º 3
0
    def __DoResolveAllPackageDependencies(self, config: Config,
                                          package: Package) -> None:
        # FIX: we are doing some of the same checks twice here
        addedDict = {}  # type: Dict[str, PackageDependency]
        # First we resolve all direct dependencies
        for dep in package.ResolvedDirectDependencies:
            if not dep.Name in addedDict:
                package.ResolvedAllDependencies.append(dep)
                addedDict[dep.Name] = dep
            else:
                # The package was already added so we need to check if this dependency is less restrictive than the old one
                oldDep = addedDict[dep.Name]
                if dep.Access < oldDep.Access:
                    package.ResolvedAllDependencies.remove(oldDep)
                    addedDict[dep.Name] = dep

        # Then we pull in the childrens dependencies
        resolvedDirectDependencies = list(package.ResolvedDirectDependencies)
        for directDep in resolvedDirectDependencies:
            for dep in directDep.Package.ResolvedAllDependencies:
                # ensure that anything we get via a non public access type keeps gets a access type that is >= directDep.Access
                if dep.Access < directDep.Access or dep.Access == AccessType.Private:
                    #dep = PackageDependency(dep.Package, directDep.Access)
                    dep = PackageDependency(dep.Package, AccessType.Link)
                if not dep.Name in addedDict:
                    package.ResolvedAllDependencies.append(dep)
                    addedDict[dep.Name] = dep
                else:
                    # The package was already added so we need to check if this dependency is less restrictive than the old one
                    oldDep = addedDict[dep.Name]
                    if dep.Access < oldDep.Access:
                        package.ResolvedAllDependencies.remove(oldDep)
                        package.ResolvedAllDependencies.append(dep)
                        addedDict[dep.Name] = dep
                        foundDep = self.__TryFindDep(
                            package.ResolvedDirectDependencies, dep)
                        if foundDep is not None:
                            config.DoPrintWarning(
                                "Requested dependency access to '{0}', overwritten by dependency from '{1}'"
                                .format(dep.Name, directDep.Name))
                            package.ResolvedDirectDependencies.remove(foundDep)
                            package.ResolvedDirectDependencies.append(dep)

        package.ResolvedDirectDependencies.sort(key=lambda s: s.Name.lower())
        package.ResolvedAllDependencies.sort(key=lambda s: s.Name.lower())