mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-16 10:43:29 +00:00
Fix to allow -o flag to point to a directory
Previously, running 'tinygo build -o dist/ file.go' where dist/ already exists as a directory failed with 'open dist/: is a directory', because Build() only auto-derived a binary name when outpath was empty, not when it pointed to an existing directory. This adds that check, matching the behavior of 'go build -o dir/' with a package. Note: only handles the case where the directory already exists; if the directory doesn't exist yet, behavior is unchanged.
This commit is contained in:
committed by
Damian Gryski
parent
c2346570fb
commit
854f91ecf2
@@ -177,8 +177,15 @@ func Build(pkgName, outpath string, config *compileopts.Config) error {
|
|||||||
// Pick a default output path based on the main directory.
|
// Pick a default output path based on the main directory.
|
||||||
outpath = filepath.Base(result.MainDir) + config.DefaultBinaryExtension()
|
outpath = filepath.Base(result.MainDir) + config.DefaultBinaryExtension()
|
||||||
}
|
}
|
||||||
|
} else if fi, statErr := os.Stat(outpath); statErr == nil && fi.IsDir() {
|
||||||
|
var name string
|
||||||
|
if strings.HasSuffix(pkgName, ".go") {
|
||||||
|
name = filepath.Base(pkgName[:len(pkgName)-3]) + config.DefaultBinaryExtension()
|
||||||
|
} else {
|
||||||
|
name = filepath.Base(result.MainDir) + config.DefaultBinaryExtension()
|
||||||
|
}
|
||||||
|
outpath = filepath.Join(outpath, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.Rename(result.Binary, outpath); err != nil {
|
if err := os.Rename(result.Binary, outpath); err != nil {
|
||||||
// Moving failed. Do a file copy.
|
// Moving failed. Do a file copy.
|
||||||
inf, err := os.Open(result.Binary)
|
inf, err := os.Open(result.Binary)
|
||||||
|
|||||||
Reference in New Issue
Block a user