github.com/hwaf/hwaf@v0.0.0-20140814122253-5465f73b20f1/cmd_bdist.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 // "os/exec" 7 "path/filepath" 8 "time" 9 10 "github.com/gonuts/commander" 11 "github.com/gonuts/flag" 12 ) 13 14 func hwaf_make_cmd_waf_bdist() *commander.Command { 15 cmd := &commander.Command{ 16 Run: hwaf_run_cmd_waf_bdist, 17 UsageLine: "bdist [options]", 18 Short: "create a binary distribution from the project or packages", 19 Long: ` 20 bdist creates a binary distribution from the project or packages. 21 22 ex: 23 $ hwaf bdist 24 $ hwaf bdist -name=mana 25 $ hwaf bdist -name=mana -version=20121218 26 $ hwaf bdist -name=mana -version -variant=x86_64-linux-gcc-opt 27 `, 28 Flag: *flag.NewFlagSet("hwaf-bdist", flag.ExitOnError), 29 //CustomFlags: true, 30 } 31 cmd.Flag.Bool("v", false, "enable verbose output") 32 cmd.Flag.String("name", "", "name of the binary distribution (default: project name)") 33 cmd.Flag.String("version", "", "version of the binary distribution (default: project version)") 34 cmd.Flag.String("variant", "", "HWAF_VARIANT quadruplet for the binary distribution (default: project VARIANT)") 35 return cmd 36 } 37 38 func hwaf_run_cmd_waf_bdist(cmd *commander.Command, args []string) error { 39 var err error 40 n := "hwaf-" + cmd.Name() 41 42 switch len(args) { 43 case 0: 44 default: 45 return fmt.Errorf("%s: too many arguments (%d)", n, len(args)) 46 } 47 48 bdist_name := cmd.Flag.Lookup("name").Value.Get().(string) 49 bdist_vers := cmd.Flag.Lookup("version").Value.Get().(string) 50 bdist_variant := cmd.Flag.Lookup("variant").Value.Get().(string) 51 52 workdir, err := g_ctx.Workarea() 53 if err != nil { 54 // not a git repo... assume we are at the root, then... 55 workdir, err = os.Getwd() 56 } 57 if err != nil { 58 return err 59 } 60 61 pinfos, err := g_ctx.ProjectInfos() 62 if err != nil { 63 return err 64 } 65 66 if bdist_name == "" { 67 bdist_name = workdir 68 bdist_name = filepath.Base(bdist_name) 69 } 70 if bdist_vers == "" { 71 bdist_vers = time.Now().Format("20060102") 72 } 73 if bdist_variant == "" { 74 bdist_variant, err = pinfos.Get("HWAF_VARIANT") 75 if err != nil { 76 return err 77 } 78 } 79 fname := bdist_name + "-" + bdist_vers + "-" + bdist_variant + ".tar.gz" 80 81 //fmt.Printf(">> fname=[%s]\n", fname) 82 fname = filepath.Join(workdir, fname) 83 84 // first try destdir 85 install_area, err := pinfos.Get("DESTDIR") 86 if err != nil { 87 install_area, err = pinfos.Get("PREFIX") 88 } 89 if err != nil { 90 return err 91 } 92 if !path_exists(install_area) { 93 err = fmt.Errorf( 94 "no such directory [%s]. did you run \"hwaf install\" ?", 95 install_area, 96 ) 97 if err != nil { 98 return err 99 } 100 } 101 // the prefix to prepend inside the tar-ball 102 prefix := bdist_name + "-" + bdist_vers //+ "-" + bdist_variant 103 // create a temporary install-area with the correct structure: 104 // install-area/<pkgname>-<pkgvers>/... 105 bdist_dir := filepath.Join(workdir, ".hwaf-bdist-install-area-"+bdist_variant) 106 _ = os.RemoveAll(bdist_dir) 107 err = os.MkdirAll(bdist_dir, 0700) 108 if err != nil { 109 return err 110 } 111 112 // move the install-area... 113 err = os.Rename(install_area, filepath.Join(bdist_dir, prefix)) 114 if err != nil { 115 return err 116 } 117 defer func() error { 118 err = os.Rename(filepath.Join(bdist_dir, prefix), install_area) 119 if err != nil { 120 return err 121 } 122 return os.RemoveAll(bdist_dir) 123 }() 124 125 err = _tar_gz(fname, bdist_dir) 126 if err != nil { 127 return err 128 } 129 return err 130 } 131 132 // EOF