//TODO fulfil all defaults func FillSettingsDefaults(settings *Settings, workingDirectory string) { if settings.AppName == "" { settings.AppName = core.GetAppName(settings.AppName, workingDirectory) } if settings.OutPath == "" { settings.OutPath = core.OUTFILE_TEMPLATE_DEFAULT } if settings.ResourcesInclude == "" { settings.ResourcesInclude = core.RESOURCES_INCLUDE_DEFAULT } if settings.ResourcesExclude == "" { settings.ResourcesExclude = core.RESOURCES_EXCLUDE_DEFAULT } if settings.MainDirsExclude == "" { settings.MainDirsExclude = core.MAIN_DIRS_EXCLUDE_DEFAULT } if settings.PackageVersion == "" { settings.PackageVersion = core.PACKAGE_VERSION_DEFAULT } if settings.BuildSettings == nil { bs := BuildSettings{} FillBuildSettingsDefaults(&bs) settings.BuildSettings = &bs } if settings.GoRoot == "" { if settings.IsVerbose() { log.Printf("Defaulting GoRoot to runtime.GOROOT (%s)", runtime.GOROOT()) } settings.GoRoot = runtime.GOROOT() } }
// run all given tasks func RunTasks(workingDirectory string, destPlatforms []platforms.Platform, settings *config.Settings, maxProcessors int) error { if settings.IsVerbose() { log.Printf("Using Go root: %s", settings.GoRoot) log.Printf("looping through each platform") } appName := core.GetAppName(settings.AppName, workingDirectory) outDestRoot, err := core.GetOutDestRoot(appName, workingDirectory, settings.ArtifactsDest) if err != nil { return err } defer log.SetPrefix("[goxc] ") exclusions := ResolveAliases(settings.TasksExclude) appends := ResolveAliases(settings.TasksAppend) mains := ResolveAliases(settings.Tasks) all := ResolveAliases(settings.TasksPrepend) //log.Printf("prepending %v", all) all = append(all, mains...) all = append(all, appends...) //exclude by resolved task names (not by aliases) tasksToRun := []string{} for _, taskName := range all { if !core.ContainsString(exclusions, taskName) { tasksToRun = append(tasksToRun, taskName) } } //0.6 check all tasks are valid before continuing for _, taskName := range tasksToRun { if _, keyExists := allTasks[taskName]; !keyExists { if strings.HasPrefix(taskName, ".") { log.Printf("'%s' looks like a directory, not a task - specify 'working directory' with -wd option", taskName) } if e, _ := core.FileExists(taskName); e { log.Printf("'%s' looks like a directory, not a task - specify 'working directory' with -wd option", taskName) } if settings.IsVerbose() { log.Printf("Task '%s' does NOT exist!", taskName) } return errors.New("Task '" + taskName + "' does not exist") } } mainDirs := []string{} allPackages := []string{} if len(tasksToRun) == 1 && tasksToRun[0] == "toolchain" { log.Printf("Toolchain task only - not searching for main dirs") //mainDirs = []string{workingDirectory} } else { var err error excludes := core.ParseCommaGlobs(settings.MainDirsExclude) excludesSource := core.ParseCommaGlobs(settings.SourceDirsExclude) excludesSource = append(excludesSource, excludes...) allPackages, err = source.FindSourceDirs(workingDirectory, "", excludesSource, settings.IsVerbose()) if err != nil || len(allPackages) == 0 { log.Printf("Warning: could not establish list of source packages. Using working directory") allPackages = []string{workingDirectory} } mainDirs, err = source.FindMainDirs(workingDirectory, excludes, settings.IsVerbose()) if err != nil || len(mainDirs) == 0 { log.Printf("Warning: could not find any main dirs: %v", err) } else { if settings.IsVerbose() { log.Printf("Found 'main package' dirs (len %d): %v", len(mainDirs), mainDirs) } } } if settings.IsVerbose() { log.Printf("Running tasks: %v", tasksToRun) log.Printf("All packages: %v", allPackages) } for _, taskName := range tasksToRun { log.SetPrefix("[goxc:" + taskName + "] ") if settings.IsVerbose() { log.Printf("Running task %s with settings: %v", taskName, settings.TaskSettings[taskName]) } err := runTask(taskName, destPlatforms, allPackages, mainDirs, appName, workingDirectory, outDestRoot, settings, maxProcessors) if err != nil { // TODO: implement 'force' option. log.Printf("Stopping after '%s' failed with error '%v'", taskName, err) return err } else { if !settings.IsQuiet() { log.Printf("Task %s succeeded", taskName) } } } return nil }