示例#1
0
        /// <summary>
        /// Build the dependecies for the provided recipe recursively
        /// </summary>
        private async Task BuildAllDependenciesRecursivelyAsync(
            string path,
            Recipe recipe,
            bool force)
        {
            Log.Info($"Searching Dependencies: {recipe.Name}.");
            foreach (var dependecy in recipe.Dependencies)
            {
                // Load this package recipe
                var packagePath     = VerifyDependencyPath(path, dependecy);
                var dependecyRecipe = await RecipeManager.LoadFromFileAsync(packagePath);

                if (dependecyRecipe == null)
                {
                    Log.Error($"Failed to load the dependency package: {packagePath}");
                    throw new InvalidOperationException();
                }

                // Build all recursive dependencies
                await BuildAllDependenciesRecursivelyAsync(packagePath, dependecyRecipe, force);

                // Build this dependecy
                await CoreBuildAsync(packagePath, dependecyRecipe, force);
            }
        }
示例#2
0
        /// <summary>
        /// Build the recursive dependencies
        /// </summary>
        public static async Task <List <PackageReference> > BuildRecursiveDependeciesAsync(LocalUserConfig config, Recipe recipe)
        {
            List <PackageReference> result = new List <PackageReference>();

            foreach (var dependency in recipe.Dependencies)
            {
                result.Add(dependency);
                var dependencyPackagePath = BuildKitchenPackagePath(config, dependency);
                var dependencyRecipe      = await RecipeManager.LoadFromFileAsync(dependencyPackagePath);

                var transsitiveDependencies = await BuildRecursiveDependeciesAsync(config, dependencyRecipe);

                result.AddRange(transsitiveDependencies);
            }

            return(result);
        }
示例#3
0
        private async Task GenerateDependencyLibrarySetAsync(
            string path,
            string binaryDirectory,
            Recipe recipe,
            HashSet <string> set)
        {
            foreach (var dependecy in recipe.Dependencies)
            {
                // Load this package recipe
                var packagePath     = VerifyDependencyPath(path, dependecy);
                var dependecyRecipe = await RecipeManager.LoadFromFileAsync(packagePath);

                // Get recursive dependencies
                await GenerateDependencyLibrarySetAsync(packagePath, binaryDirectory, dependecyRecipe, set);

                set.Add(Path.Combine(packagePath, binaryDirectory, $"{dependecyRecipe.Name}.{_compiler.StaticLibraryFileExtension}").ToLower());
            }
        }
示例#4
0
        private async Task BuildDependencyModuleReferences(
            string path,
            string binaryDirectory,
            Recipe recipe,
            IList <string> modules,
            IList <string> defines,
            bool isRecursive)
        {
            foreach (var dependecy in recipe.Dependencies)
            {
                // Load this package recipe
                var packagePath     = VerifyDependencyPath(path, dependecy);
                var dependecyRecipe = await RecipeManager.LoadFromFileAsync(packagePath);

                modules.Add(Path.Combine(packagePath, binaryDirectory, BuildRecipeModuleFilename(dependecyRecipe)));
                defines.Add(BuildRecipeNamespaceDefine(dependecyRecipe));

                if (isRecursive)
                {
                    await BuildDependencyModuleReferences(packagePath, binaryDirectory, dependecyRecipe, modules, defines, isRecursive);
                }
            }
        }