github.com/hwaf/hwaf@v0.0.0-20140814122253-5465f73b20f1/cmd_bdist_dmg.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_dmg() *commander.Command { 15 cmd := &commander.Command{ 16 Run: hwaf_run_cmd_waf_bdist_dmg, 17 UsageLine: "bdist-dmg [dmg-name]", 18 Short: "create a DMG from the local project/packages", 19 Long: ` 20 bdist-dmg creates a DMG from the local project/packages. 21 22 ex: 23 $ hwaf bdist-dmg 24 $ hwaf bdist-dmg -name=mana 25 $ hwaf bdist-dmg -name=mana -version=20130101 26 `, 27 Flag: *flag.NewFlagSet("hwaf-bdist-dmg", flag.ExitOnError), 28 } 29 cmd.Flag.Bool("v", false, "enable verbose output") 30 cmd.Flag.String("name", "", "name of the binary distribution (default: project name)") 31 cmd.Flag.String("version", "", "version of the binary distribution (default: project version)") 32 cmd.Flag.String("variant", "", "HWAF_VARIANT quadruplet for the binary distribution (default: project variant)") 33 return cmd 34 } 35 36 func hwaf_run_cmd_waf_bdist_dmg(cmd *commander.Command, args []string) error { 37 var err error 38 n := "hwaf-" + cmd.Name() 39 40 switch len(args) { 41 case 0: 42 default: 43 return fmt.Errorf("%s: too many arguments (%s)", n, len(args)) 44 } 45 46 verbose := cmd.Flag.Lookup("v").Value.Get().(bool) 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 80 bdist_fname := bdist_name + "-" + bdist_vers + "-" + bdist_variant + ".dmg" 81 82 // first try destdir 83 install_area, err := pinfos.Get("DESTDIR") 84 if err != nil { 85 install_area, err = pinfos.Get("PREFIX") 86 } 87 if err != nil { 88 return err 89 } 90 if !path_exists(install_area) { 91 return fmt.Errorf( 92 "no such directory [%s]. did you run \"hwaf install\" ?", 93 install_area, 94 ) 95 } 96 97 if verbose { 98 fmt.Printf("%s: building DMG [%s]...[ok]\n", n, bdist_fname) 99 } 100 101 hdiutil, err := exec.LookPath("hdiutil") 102 if err != nil { 103 return err 104 } 105 106 dmg := exec.Command(hdiutil, 107 "create", 108 bdist_fname, 109 "-volname", bdist_name+"-"+bdist_vers, 110 "-srcfolder", ".", 111 "-imagekey", "zlib-level=9", 112 "-ov", 113 ) 114 dmg.Dir = install_area 115 116 if verbose { 117 dmg.Stdin = os.Stdin 118 dmg.Stdout = os.Stdout 119 dmg.Stderr = os.Stderr 120 } 121 err = dmg.Run() 122 if err != nil { 123 return err 124 } 125 126 if verbose { 127 fmt.Printf("%s: building DMG [%s]...[ok]\n", n, bdist_fname) 128 } 129 130 return nil 131 } 132 133 // EOF