protected override CommandResult ExecuteDetailed(GetSdksCommandArgs args, ChangeObservable observable) { IEnumerable <SdkPath> sdkPaths = Enumerable.Empty <SdkPath>(); IEnumerable <Exception> exceptions = Enumerable.Empty <Exception>(); if (args.All) { sdkPaths = sdkRepository.GetAllTargets() .GroupBy(target => sdkRepository.GetSdk(target).Root.FullName) .Select(group => new SdkPath(group.Key, group.Select(target => new TargetResult(target.Name, target.Version, target.LongVersion, target.ShortVersion)))); } else { ProjectEntity project = ProjectEntity.Decorate(entityFactory.Create(Guid.NewGuid().ToByteString(), args).Root); TargetsResult targetsResult = targetParser.Targets(project); sdkPaths = targetsResult.ValidTargets .GroupBy(target => sdkRepository.GetSdk(target).Root.FullName) .Select(group => new SdkPath(group.Key, group.Select(target => new TargetResult(target.Name, target.Version, target.LongVersion, target.ShortVersion)))); exceptions = targetsResult.Errors; } return(new CommandResult(0, new SdksCommandResult(sdkPaths))); }
protected override CommandResult ExecuteDetailed(GetTargetsCommandArgs args, ChangeObservable observable) { IEnumerable <Exception> exceptions = Enumerable.Empty <Exception>(); TargetsCommandResult commandResult; if (args.All) { commandResult = new TargetsCommandResult(sdkRepository.GetAllTargets() .Select(t => new TargetResult(t.Name, t.Version, t.LongVersion, t.ShortVersion)) .OrderBy(t => t.Name).ThenByDescending(t => t.Version)); } else { ExecutionContext.WriteWarning("This command is deprecated. Use 'get project-information' instead.", false); ProjectEntity project = ProjectEntity.Decorate(entityFactory.Create(Guid.NewGuid().ToByteString(), args).Root); TargetsResult targetsResult = targetParser.Targets(project, false); Target[] availableTargets = sdkRepository.GetAllTargets().ToArray(); commandResult = new TargetsCommandResult(targetsResult.ValidTargets .Select(t => new TargetResult(t.Name, t.Version, t.LongVersion, t.ShortVersion, availableTargets.Any(at => t.Name == at.Name && at.LongVersion == t.LongVersion))) .OrderBy(t => t.Name).ThenByDescending(t => t.Version)); exceptions = targetsResult.Errors; } return(new CommandResult(0, commandResult, exceptions)); }
protected override CommandResult ExecuteDetailed(GetIncludePathsCommandArgs args, ChangeObservable observable) { ExecutionContext.WriteWarning("This command is deprecated. Use 'get project-information' instead.", false); ProjectEntity project = ProjectEntity.Decorate(entityFactory.Create(Guid.NewGuid().ToByteString(), args).Root); TargetsResult targetsResult = targetParser.Targets(project); IEnumerable <string> paths = targetsResult.ValidTargets .Select(sdkRepository.GetSdk) .Where(sdk => sdk != null) .Distinct() .SelectMany(sdk => sdk.IncludePaths); return(new CommandResult(0, new IncludePathsCommandResult(paths.Select(p => new Path(p))), targetsResult.Errors)); }
public int BuildLibraryForProject(Entity project, ChangeObservable observable, string metaFilesDirectory, string libraryLocation, string outputDirectory, Guid libraryGuid, IEnumerable <string> targets, IEnumerable <string> externalLibraries, string buildType) { userInterface.WriteInformation("Starting library generation..."); ProjectEntity projectEntity = ProjectEntity.Decorate(project); IEnumerable <(Target, string)> targetsSet; if (!targets.Any()) { TargetsResult ts = targetParser.Targets(projectEntity, false); if (!ts.ValidTargets.Any()) { throw new FormattableException ("Please use --target to specify for which targets the library shall be generated."); } else { HashSet <(Target, string)> targetsHashSet = new HashSet <(Target, string)>(); foreach (Target target in ts.ValidTargets) { targetsHashSet.Add((target, null)); } targetsSet = targetsHashSet; } } else { targetsSet = targetParser.GetSpecificTargets(targets, false); } Dictionary <Target, IEnumerable <VirtualFile> > externalLibs = ExternalLibrariesParser.ParseExternalLibraries(externalLibraries, targetParser, fileSystem, targetsSet.Select(t => t.Item1)); int result = libraryBuilderExecuter.Execute(projectEntity, metaFilesDirectory, libraryLocation, outputDirectory, observable, userInterface, libraryGuid, targetsSet, externalLibs, buildType); if (result == 0) { userInterface.WriteInformation("Successfully generated library!"); } return(result); }
public void Build(BuildInformation buildInfo, ChangeObservable observable, IEnumerable <string> targets) { if (!targets.Any()) { TargetsResult projectTargets = targetParser.Targets(buildInfo.RootProjectEntity); projectTargets.Errors.ThrowIfNotEmpty(); if (!projectTargets.ValidTargets.Any()) { throw new NoAssignedTargetsException(buildInfo.RootEntity.Name); } BuildProjectForTargets(buildInfo, observable, projectTargets.ValidTargets); } else { //build for selected target(s) BuildProjectForTargets(buildInfo, observable, targetParser.GetSpecificTargets(targets).Select(t => t.Item1)); } }
protected override CommandResult ExecuteDetailed(GetCompilerSpecificationsCommandArgs args, ChangeObservable observable) { ProjectEntity project = ProjectEntity.Decorate(entityFactory.Create(Guid.NewGuid().ToByteString(), args).Root); TargetsResult targetsResult = targetParser.Targets(project); IEnumerable <CompilerInformation> compilers = targetsResult.ValidTargets .Select(sdkRepository.GetSdk) .Where(sdk => sdk != null) .Distinct() .Select(sdk => sdk.CompilerInformation); return(new CommandResult(0, new CompilerSpecificationCommandResult( compilers.Select(c => new CompilerSpecificationResult(c.CompilerPath, "cpp", c.Sysroot, c.Flags, c.IncludePaths.Select(p => new Path(p)), c.Makros.Select(m => new CompilerMacroResult(m.Name, m.Value))))), targetsResult.Errors)); }
protected override CommandResult ExecuteDetailed(GetSdksCommandArgs args, ChangeObservable observable) { string[] sdks; IEnumerable <Exception> exceptions = Enumerable.Empty <Exception>(); if (args.All) { sdks = sdkRepository.Sdks.Select(s => s.Root.FullName).ToArray(); } else { ProjectEntity project = ProjectEntity.Decorate(entityFactory.Create(Guid.NewGuid().ToByteString(), args).Root); TargetsResult targetsResult = targetParser.Targets(project); sdks = targetsResult.ValidTargets.Select(sdkRepository.GetSdk).Distinct() .Select(s => s.Root.FullName).ToArray(); exceptions = targetsResult.Errors; } return(new CommandResult(0, new SdksCommandResult(sdks.Select(s => new Path(s))), exceptions)); }