|
|
|
// Copyright (c) 2013 GPMGo Members. All rights reserved.
|
|
|
|
// Use of this source code is governed by a MIT-style
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"io"
|
|
|
|
"os"
|
|
|
|
"os/exec"
|
|
|
|
"path"
|
|
|
|
"runtime"
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/GPMGo/gpm/utils"
|
|
|
|
)
|
|
|
|
|
|
|
|
var cmdBuild = &Command{
|
|
|
|
UsageLine: "build [build flags] [packages]",
|
|
|
|
}
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
cmdBuild.Run = runBuild
|
|
|
|
cmdBuild.Flags = []string{"-v"}
|
|
|
|
}
|
|
|
|
|
|
|
|
func runBuild(cmd *Command, args []string) {
|
|
|
|
var cmdArgs []string
|
|
|
|
cmdArgs = append(cmdArgs, "install")
|
|
|
|
cmdArgs = append(cmdArgs, args...)
|
|
|
|
|
|
|
|
wd, _ := os.Getwd()
|
|
|
|
wd = strings.Replace(wd, "\\", "/", -1)
|
|
|
|
proName := path.Base(wd)
|
|
|
|
if runtime.GOOS == "windows" {
|
|
|
|
proName += ".exe"
|
|
|
|
}
|
|
|
|
|
|
|
|
cmdExec := exec.Command("go", cmdArgs...)
|
|
|
|
stdout, err := cmdExec.StdoutPipe()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
}
|
|
|
|
stderr, err := cmdExec.StderrPipe()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
}
|
|
|
|
err = cmdExec.Start()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err)
|
|
|
|
}
|
|
|
|
go io.Copy(os.Stdout, stdout)
|
|
|
|
go io.Copy(os.Stderr, stderr)
|
|
|
|
cmdExec.Wait()
|
|
|
|
|
|
|
|
// Find executable in GOPATH and copy to current directory.
|
|
|
|
gopath := strings.Replace(os.Getenv("GOPATH"), ";", ":", -1)
|
|
|
|
gopath = strings.Replace(gopath, "\\", "/", -1)
|
|
|
|
paths := strings.Split(gopath, ":")
|
|
|
|
for _, v := range paths {
|
|
|
|
if utils.IsExist(v + "/bin/" + proName) {
|
|
|
|
err = os.Remove(wd + "/" + proName)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("Fail to remove file in current directory :", err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
err = os.Rename(v+"/bin/"+proName, wd+"/"+proName)
|
|
|
|
if err == nil {
|
|
|
|
fmt.Println("Moved file from $GOPATH to current directory.")
|
|
|
|
return
|
|
|
|
} else {
|
|
|
|
fmt.Println("Fail to move file from $GOPATH to current directory :", err)
|
|
|
|
}
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|