コード例 #1
0
        public PackageCache(Log log, UnoConfig config, bool enableTranspiler = true)
            : base(log ?? Log.Null)
        {
            if (config == null)
            {
                config = UnoConfig.Current;
            }

            _config           = config;
            _enableTranspiler = enableTranspiler;

            foreach (var src in config.GetFullPathArray("Packages.SourcePaths"))
            {
                _sourcePaths.AddOnce(Path.Combine(
                                         File.Exists(src)
                        ? Path.GetDirectoryName(src)
                        : src,
                                         "build"));
            }

            foreach (var src in config.GetFullPathArray("Packages.SearchPaths"))
            {
                _searchPaths.AddOnce(src);
            }
        }
コード例 #2
0
        public HashSet <string> GetSourceDirectories(UnoConfig config = null)
        {
            var configSourcePaths = (config ?? UnoConfig.Current).GetFullPathArray("Packages.SourcePaths", "PackageSourcePaths");

            if (configSourcePaths.Length == 0)
            {
                Log.VeryVerbose("'Packages.SourcePaths' was not found in .unoconfig");
                return(null);
            }

            var sourceDirectories = new HashSet <string>();

            foreach (var source in configSourcePaths)
            {
                if (!Directory.Exists(source))
                {
                    Log.VeryVerbose("Source directory " + source.ToRelativePath().Quote() + " was not found");
                    continue;
                }

                sourceDirectories.Add(source);
            }

            return(sourceDirectories);
        }
コード例 #3
0
ファイル: BuildDriver.cs プロジェクト: mohammedmanssour/uno
        public BuildDriver(Log log, BuildTarget target, BuildOptions options, Project project, UnoConfig config)
            : base(log)
        {
            _target           = target;
            _options          = options;
            _project          = project;
            _config           = config;
            Log.MaxErrorCount = options.MaxErrorCount;
            Log.WarningLevel  = options.WarningLevel;

            Log.Reset();
            if (target.IsObsolete)
            {
                Log.Warning("The build target " + target.Quote() + " is obsolete and might not work any more.");
            }

            _anim = Log.StartAnimation("Configuring");
            PrintRow("Project file", project.FullPath);

            _compilerOptions = new CompilerOptions {
                BuildTarget     = _target.Identifier,
                Configuration   = _options.Configuration.ToString(),
                OutputDirectory = !string.IsNullOrEmpty(_options.OutputDirectory)
                    ? Path.GetFullPath(_options.OutputDirectory)
                    : project.OutputDirectory,
                MainClass  = _options.MainClass,
                Debug      = _options.Configuration != BuildConfiguration.Release,
                Parallel   = _options.Parallel,
                Strip      = _options.Strip ?? _target.DefaultStrip,
                CanCacheIL = _options.PackageCache != null
            };

            if (_options.Test)
            {
                _options.Defines.Add("UNO_TEST");
                _compilerOptions.TestOptions = new TestOptions {
                    TestServerUrl = _options.TestServerUrl,
                    Filter        = _options.TestFilter
                };
            }

            _cache = _options.PackageCache ?? new PackageCache(Log, _config);
            PrintRow("Search paths", _cache.SearchPaths);

            _compiler = new Compiler(
                Log,
                _target.CreateBackend(config),
                GetPackage(),
                _compilerOptions);
            _env     = _compiler.Environment;
            _backend = _compiler.Backend;
            _input   = _compiler.Input;

            if (_options.Clean)
            {
                _compiler.Disk.DeleteDirectory(_env.OutputDirectory);
            }

            _file = new BuildFile(_env.OutputDirectory);
        }
コード例 #4
0
ファイル: LibraryBuilder.cs プロジェクト: lee1431/uno
        public void Build(UnoConfig config = null)
        {
            var startTime         = Log.Time;
            var sourceDirectories = GetSourceDirectories(config);

            if (sourceDirectories == null)
            {
                return;
            }

            if (RebuildAll && Clean)
            {
                foreach (var source in sourceDirectories)
                {
                    _disk.DeleteDirectory(Path.Combine(
                                              File.Exists(source)
                                    ? Path.GetDirectoryName(Path.GetFullPath(source))
                                    : source,
                                              "build"));
                }
            }

            var allProjects   = LoadProjects(sourceDirectories);
            var buildProjects = GetBuildList(allProjects);
            var packageCache  = CanCache
                                    ? new PackageCache(Log, config)
                                    : null;

            try
            {
                var failed = new List <LibraryProject>();
                Log.Message("Found " + allProjects.Count + " projects, " + buildProjects.Count + " are out of date");

                for (var i = 0; i < buildProjects.Count; i++)
                {
                    Log.DisableSkip();
                    using (Log.StartAnimation("Building " + (i + 1) + "/" + buildProjects.Count + ": " + buildProjects[i].Project.Name, ConsoleColor.Cyan))
                        Build(buildProjects[i], packageCache, failed);
                }

                if (failed.Count == 1)
                {
                    throw new Exception(failed[0] + ": Build failed");
                }
                else if (failed.Count > 0)
                {
                    throw new Exception(failed.Count + " projects failed to build:\n" + string.Join("\n", failed));
                }
            }
            finally
            {
                Log.Message($"Completed in {Log.Time - startTime:0.00} seconds");
                packageCache?.Dispose();
            }
        }
コード例 #5
0
 public static void PrintUnoConfig(UnoConfig unoConfig, ColoredTextWriter coloredTextWriter)
 {
     using (coloredTextWriter.PushColor(ConsoleColor.Green))
     {
         coloredTextWriter.WriteLine("Uno settings");
     }
     coloredTextWriter.WriteLine(unoConfig.ToString());
     coloredTextWriter.WriteLine();
     using (coloredTextWriter.PushColor(ConsoleColor.Green))
     {
         coloredTextWriter.WriteLine("Config files");
     }
     foreach (var file in unoConfig.Files)
     {
         coloredTextWriter.WriteLine(file);
     }
 }
コード例 #6
0
        public Transpiler(Log log, UnoConfig config)
            : base(log)
        {
            var script = Path.Combine(
                config.GetNodeModuleDirectory("@fuse-open/transpiler"),
                "server.min.js");

            _task = new Shell(log).Start(
                "node",
                script.QuoteSpace(),
                outputReceived: (sender, args) => {
                string port;
                if (TryMatchPort(args.Data, out port))
                {
                    _url = "http://127.0.0.1:" + port;
                }

                _output.AppendLine(args.Data);
            },
                errorReceived: (sender, args) => {
                _output.AppendLine(args.Data);
            });
        }
コード例 #7
0
ファイル: PackageCache.cs プロジェクト: mohammedmanssour/uno
        public PackageCache(Log log, UnoConfig config, PackageManager pm)
            : base(log ?? Log.Null)
        {
            _pm = pm;

            if (config == null)
            {
                config = UnoConfig.Current;
            }

            foreach (var src in config.GetFullPathArray("Packages.SourcePaths"))
            {
                _sourcePaths.AddOnce(Path.Combine(src, "build"));
            }
            foreach (var src in config.GetFullPathArray("Packages.SearchPaths", "Packages.InstallDirectory"))
            {
                _searchPaths.AddOnce(src);
            }

            foreach (var file in config.GetFullPathArray("Packages.LockFiles"))
            {
                try
                {
                    Log.VeryVerbose("Package file: " + file);
                    foreach (var e in StuffObject.Load(file))
                    {
                        _locks[e.Key] = "" + e.Value;
                    }
                }
                catch (Exception e)
                {
                    Log.Trace(e);
                    Log.Warning("Failed to load " + file.Quote() + ": " + e.Message);
                }
            }
        }
コード例 #8
0
 public virtual Backend CreateBackend(UnoConfig config)
 {
     return(CreateBackend());
 }
コード例 #9
0
ファイル: PackageCache.cs プロジェクト: mohammedmanssour/uno
 public PackageCache(Log log, UnoConfig config)
     : this(log, config, new PackageManager(log))
 {
 }
コード例 #10
0
ファイル: CreateProject.cs プロジェクト: yongaru/fuse-studio
 public static AbsoluteDirectoryPath GetTemplatesDir(this UnoConfig unoConfig)
 {
     return(AbsoluteDirectoryPath.Parse(unoConfig.GetFullPath("TemplatesDirectory")));
 }