mirror of https://github.com/gogits/gogs.git
Unknown
12 years ago
4 changed files with 190 additions and 13 deletions
@ -0,0 +1,161 @@ |
|||||||
|
// 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 [-o output] [build flags] [packages]", |
||||||
|
Short: "compile and install packages and dependencies", |
||||||
|
Long: ` |
||||||
|
Build compiles the packages named by the import paths, |
||||||
|
along with their dependencies, but it does not install the results. |
||||||
|
|
||||||
|
If the arguments are a list of .go files, build treats them as a list |
||||||
|
of source files specifying a single package. |
||||||
|
|
||||||
|
When the command line specifies a single main package, |
||||||
|
build writes the resulting executable to output. |
||||||
|
Otherwise build compiles the packages but discards the results, |
||||||
|
serving only as a check that the packages can be built. |
||||||
|
|
||||||
|
The -o flag specifies the output file name. If not specified, the |
||||||
|
output file name depends on the arguments and derives from the name |
||||||
|
of the package, such as p.a for package p, unless p is 'main'. If |
||||||
|
the package is main and file names are provided, the file name |
||||||
|
derives from the first file name mentioned, such as f1 for 'go build |
||||||
|
f1.go f2.go'; with no files provided ('go build'), the output file7 |
||||||
|
name is the base name of the containing directory. |
||||||
|
|
||||||
|
The build flags are shared by the build, install, run, and test commands: |
||||||
|
|
||||||
|
-a |
||||||
|
force rebuilding of packages that are already up-to-date. |
||||||
|
-n |
||||||
|
print the commands but do not run them. |
||||||
|
-p n |
||||||
|
the number of builds that can be run in parallel. |
||||||
|
The default is the number of CPUs available. |
||||||
|
-race |
||||||
|
enable data race detection. |
||||||
|
Supported only on linux/amd64, darwin/amd64 and windows/amd64. |
||||||
|
-v |
||||||
|
print the names of packages as they are compiled. |
||||||
|
-work |
||||||
|
print the name of the temporary work directory and |
||||||
|
do not delete it when exiting. |
||||||
|
-x |
||||||
|
print the commands. |
||||||
|
|
||||||
|
-ccflags 'arg list' |
||||||
|
arguments to pass on each 5c, 6c, or 8c compiler invocation. |
||||||
|
-compiler name |
||||||
|
name of compiler to use, as in runtime.Compiler (gccgo or gc). |
||||||
|
-gccgoflags 'arg list' |
||||||
|
arguments to pass on each gccgo compiler/linker invocation. |
||||||
|
-gcflags 'arg list' |
||||||
|
arguments to pass on each 5g, 6g, or 8g compiler invocation. |
||||||
|
-installsuffix suffix |
||||||
|
a suffix to use in the name of the package installation directory, |
||||||
|
in order to keep output separate from default builds. |
||||||
|
If using the -race flag, the install suffix is automatically set to race |
||||||
|
or, if set explicitly, has _race appended to it. |
||||||
|
-ldflags 'flag list' |
||||||
|
arguments to pass on each 5l, 6l, or 8l linker invocation. |
||||||
|
-tags 'tag list' |
||||||
|
a list of build tags to consider satisfied during the build. |
||||||
|
See the documentation for the go/build package for |
||||||
|
more information about build tags. |
||||||
|
|
||||||
|
The list flags accept a space-separated list of strings. To embed spaces |
||||||
|
in an element in the list, surround it with either single or double quotes. |
||||||
|
|
||||||
|
For more about specifying packages, see 'go help packages'. |
||||||
|
For more about where packages and binaries are installed, |
||||||
|
see 'go help gopath'. |
||||||
|
|
||||||
|
See also: go install, go get, go clean. |
||||||
|
`, |
||||||
|
} |
||||||
|
|
||||||
|
func init() { |
||||||
|
// break init cycle
|
||||||
|
cmdBuild.Run = runBuild |
||||||
|
//cmdInstall.Run = runInstall
|
||||||
|
|
||||||
|
addBuildFlags(cmdBuild) |
||||||
|
//addBuildFlags(cmdInstall)
|
||||||
|
} |
||||||
|
|
||||||
|
// Flags set by multiple commands.
|
||||||
|
var buildV bool // -v flag.
|
||||||
|
|
||||||
|
// addBuildFlags adds the flags common to the build and install commands.
|
||||||
|
func addBuildFlags(cmd *Command) { |
||||||
|
// NOTE: If you add flags here, also add them to testflag.go.
|
||||||
|
cmd.Flag.BoolVar(&buildV, "v", false, "") |
||||||
|
} |
||||||
|
|
||||||
|
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 |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -1,5 +1,5 @@ |
|||||||
# This is a configuration file for gpm with toml format. |
# This is a configuration file for gpm with toml format. |
||||||
|
|
||||||
title = "gpm(Go Package Manager)" |
title = "gpm(Go Package Manager)" |
||||||
version = "v0.0.0 Build 0516" |
version = "v0.0.1 Build 0517" |
||||||
user_language = "en-US" |
user_language = "en-US" |
@ -0,0 +1,15 @@ |
|||||||
|
// 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 utils |
||||||
|
|
||||||
|
import ( |
||||||
|
"os" |
||||||
|
) |
||||||
|
|
||||||
|
// IsExist returns if a file or directory exists
|
||||||
|
func IsExist(path string) bool { |
||||||
|
_, err := os.Stat(path) |
||||||
|
return err == nil || os.IsExist(err) |
||||||
|
} |
Loading…
Reference in new issue