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