func debGen(input []string) error { build := debgen.NewBuildParams() fs := InitBuildFlags(cmdName+" "+TaskGenDeb, build) /* fs.StringVar(&build.SourcesGlob, "sources-glob", "**.go", "Glob pattern for sources.") fs.StringVar(&build.SourceDir, "sources-dir", ".", "source dir") fs.StringVar(&build.SourcesRelativeTo, "sources-relative-to", "", "Sources relative to (it will assume relevant gopath element, unless you specify this)") fs.StringVar(&build.Bin386Glob, "bin-386", "*386/*", "Glob pattern for binaries for the 386 platform.") fs.StringVar(&build.BinArmhfGlob, "bin-armhf", "*armhf/*", "Glob pattern for binaries for the armhf platform.") fs.StringVar(&build.BinAmd64Glob, "bin-amd64", "*amd64/*", "Glob pattern for binaries for the amd64 platform.") fs.StringVar(&build.BinAnyGlob, "bin-any", "*any/*", "Glob pattern for binaries for *any* platform.") */ //fs.StringVar(&build.sourcesDest, "sources-dest", debgen.DevGoPathDefault+"/src", "directory containing sources.") arches := "" fs.StringVar(&arches, "arch-filter", "", "Filter by Architecture. Comma-separated [386,armhf,amd64,all]") // fs.StringVar(&build.ResourcesGlob, "resources", "", "directory containing resources for this platform") fs.StringVar(&build.Version, "version", "", "Package version") err := fs.Parse(os.Args[2:]) if err != nil { return fmt.Errorf("Error parsing flags: %v", err) } build.Arches, err = deb.ResolveArches(arches) if err != nil { return fmt.Errorf("Error resolving architecture: %v", err) } //Read control data fi, err := os.Open(filepath.Join(build.DebianDir, "control")) if err != nil { return fmt.Errorf("Error reading control data: %v", err) } cfr := deb.NewControlFileReader(fi) ctrl, err := cfr.Parse() if err != nil { return fmt.Errorf("Error reading control file: %v", err) } dgens, err := debgen.PrepareBasicDebGen(ctrl, build) if err != nil { return fmt.Errorf("Error preparing 'deb generators': %v", err) } for _, dgen := range dgens { err = dgen.GenerateAllDefault() if err != nil { return fmt.Errorf("Error building deb: %v", err) } } return nil }
func debBuild(dest platforms.Platform, tp TaskParams) error { metadata := tp.Settings.GetTaskSettingMap(TASK_DEB_GEN, "metadata") armArchName := getArmArchName(tp.Settings) //maintain support for old configs ... metadataDebX := tp.Settings.GetTaskSettingMap(TASK_DEB_GEN, "metadata-deb") otherMappedFilesFromSetting := tp.Settings.GetTaskSettingMap(TASK_DEB_GEN, "other-mapped-files") otherMappedFiles, err := calcOtherMappedFiles(otherMappedFilesFromSetting) if err != nil { return err } if tp.Settings.IsVerbose() { log.Printf("other mapped files: %+v", otherMappedFiles) } metadataDeb := map[string]string{} for k, v := range metadataDebX { val, ok := v.(string) if ok { metadataDeb[k] = val } } rmtemp := tp.Settings.GetTaskSettingBool(TASK_DEB_GEN, "rmtemp") debDir := filepath.Join(tp.OutDestRoot, tp.Settings.GetFullVersionName()) //v0.8.1 dont use platform dir tmpDir := filepath.Join(debDir, ".goxc-temp") shortDescription := "?" if desc, keyExists := metadata["description"]; keyExists { var err error shortDescription, err = typeutils.ToString(desc, "description") if err != nil { return err } } longDescription := " " if ldesc, keyExists := metadata["long-description"]; keyExists { var err error longDescription, err = typeutils.ToString(ldesc, "long-description") if err != nil { return err } } maintainerName := "?" if maint, keyExists := metadata["maintainer"]; keyExists { var err error maintainerName, err = typeutils.ToString(maint, "maintainer") if err != nil { return err } } maintainerEmail := "*****@*****.**" if maintEmail, keyExists := metadata["maintainer-email"]; keyExists { var err error maintainerEmail, err = typeutils.ToString(maintEmail, "maintainer-email") if err != nil { return err } } //'dev' Package should be a separate task addDevPackage := false /* pkg := deb.NewPackage(tp.AppName, tp.Settings.GetFullVersionName(), maintainer, description) pkg.AdditionalControlData = metadataDeb*/ build := debgen.NewBuildParams() build.DestDir = debDir build.TmpDir = tmpDir build.Init() build.IsRmtemp = rmtemp var ctrl *deb.Control //Read control data. If control file doesnt exist, use parameters ... fi, err := os.Open(filepath.Join(build.DebianDir, "control")) if os.IsNotExist(err) { log.Printf("WARNING - no debian 'control' file found. Use `debber` to generate proper debian metadata") ctrl = deb.NewControlDefault(tp.AppName, maintainerName, maintainerEmail, shortDescription, longDescription, addDevPackage) } else if err != nil { return fmt.Errorf("%v", err) } else { cfr := deb.NewControlFileReader(fi) ctrl, err = cfr.Parse() if err != nil { return fmt.Errorf("%v", err) } } debArch := getDebArch(dest.Arch, armArchName) build.Arches = []deb.Architecture{debArch} build.Version = tp.Settings.GetFullVersionName() dgens, err := debgen.PrepareBasicDebGen(ctrl, build) if err != nil { return fmt.Errorf("Error preparing deb generator: %v", err) } //there should only be one for this platform. // Anyway this part maps all binaries. for _, dgen := range dgens { // -dev paragraphs handled by 'deb-dev' task. if !strings.HasSuffix(dgen.DebWriter.Control.Get(deb.PackageFName), "-dev") { for _, mainDir := range tp.MainDirs { var exeName string if len(tp.MainDirs) == 1 { exeName = tp.Settings.AppName } else { exeName = filepath.Base(mainDir) } binPath, err := core.GetAbsoluteBin(dest.Os, dest.Arch, tp.Settings.AppName, exeName, tp.WorkingDirectory, tp.Settings.GetFullVersionName(), tp.Settings.OutPath, tp.Settings.ArtifactsDest) if err != nil { return err } if dgen.DataFiles == nil { dgen.DataFiles = map[string]string{} } dgen.DataFiles["./usr/bin/"+exeName] = binPath } for k, v := range otherMappedFiles { dgen.DataFiles[k] = v } err = dgen.GenerateAllDefault() if err != nil { return fmt.Errorf("Error generating deb: %v", err) } if !tp.Settings.IsQuiet() { log.Printf("Wrote deb to %s", filepath.Join(build.DestDir, dgen.DebWriter.Filename)) } } } return err }
func debDevBuild(tp TaskParams) error { metadata := tp.Settings.GetTaskSettingMap(TASK_DEB_GEN, "metadata") //maintain support for old configs ... metadataDebX := tp.Settings.GetTaskSettingMap(TASK_DEB_GEN, "metadata-deb") otherMappedFilesFromSetting := tp.Settings.GetTaskSettingMap(TASK_DEB_GEN, "other-mapped-files") otherMappedFiles, err := calcOtherMappedFiles(otherMappedFilesFromSetting) if err != nil { return err } metadataDeb := map[string]string{} for k, v := range metadataDebX { val, ok := v.(string) if ok { metadataDeb[k] = val } } rmtemp := tp.Settings.GetTaskSettingBool(TASK_DEB_GEN, "rmtemp") debDir := filepath.Join(tp.OutDestRoot, tp.Settings.GetFullVersionName()) //v0.8.1 dont use platform dir tmpDir := filepath.Join(debDir, ".goxc-temp") shortDescription := "?" if desc, keyExists := metadata["description"]; keyExists { var err error shortDescription, err = typeutils.ToString(desc, "description") if err != nil { return err } } longDescription := " " if ldesc, keyExists := metadata["long-description"]; keyExists { var err error longDescription, err = typeutils.ToString(ldesc, "long-description") if err != nil { return err } } maintainerName := "?" if maint, keyExists := metadata["maintainer"]; keyExists { var err error maintainerName, err = typeutils.ToString(maint, "maintainer") if err != nil { return err } } maintainerEmail := "*****@*****.**" if maintEmail, keyExists := metadata["maintainer-email"]; keyExists { var err error maintainerEmail, err = typeutils.ToString(maintEmail, "maintainer-email") if err != nil { return err } } //'dev' Package should be a separate task addDevPackage := false /* pkg := deb.NewPackage(tp.AppName, tp.Settings.GetFullVersionName(), maintainer, description) pkg.AdditionalControlData = metadataDeb*/ build := debgen.NewBuildParams() build.DestDir = debDir build.TmpDir = tmpDir build.Init() build.IsRmtemp = rmtemp var ctrl *deb.Control //Read control data. If control file doesnt exist, use parameters ... fi, err := os.Open(filepath.Join(build.DebianDir, "control")) if os.IsNotExist(err) { log.Printf("WARNING - no debian 'control' file found. Use `debber` to generate proper debian metadata") ctrl = deb.NewControlDefault(tp.AppName, maintainerName, maintainerEmail, shortDescription, longDescription, addDevPackage) } else if err != nil { return fmt.Errorf("%v", err) } else { cfr := deb.NewControlFileReader(fi) ctrl, err = cfr.Parse() if err != nil { return fmt.Errorf("%v", err) } } goSourcesDir := tp.Settings.GetTaskSettingString(TASK_DEB_GEN, "go-sources-dir") mappedSources, err := debgen.GlobForGoSources(goSourcesDir, []string{build.DestDir, build.TmpDir}) if err != nil { return fmt.Errorf("%v", err) } for k, v := range mappedSources { otherMappedFiles[k] = v } debArch := deb.ArchAll build.Arches = []deb.Architecture{debArch} build.Version = tp.Settings.GetFullVersionName() dgens, err := debgen.PrepareBasicDebGen(ctrl, build) if err != nil { return fmt.Errorf("Error preparing deb generator: %v", err) } //there should only be one for this platform. // Anyway this part maps all binaries. for _, dgen := range dgens { if strings.HasSuffix(dgen.DebWriter.Control.Get(deb.PackageFName), "-dev") { for k, v := range otherMappedFiles { dgen.DataFiles[k] = v } err = dgen.GenerateAllDefault() if err != nil { return fmt.Errorf("Error generating deb: %v", err) } if !tp.Settings.IsQuiet() { log.Printf("Wrote -dev deb to %s", filepath.Join(build.DestDir, dgen.DebWriter.Filename)) } } } return err }