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); } }
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); }
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); }
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(); } }
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); } }
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); }); }
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); } } }
public virtual Backend CreateBackend(UnoConfig config) { return(CreateBackend()); }
public PackageCache(Log log, UnoConfig config) : this(log, config, new PackageManager(log)) { }
public static AbsoluteDirectoryPath GetTemplatesDir(this UnoConfig unoConfig) { return(AbsoluteDirectoryPath.Parse(unoConfig.GetFullPath("TemplatesDirectory"))); }