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