diff --git a/.gitignore b/.gitignore
index 3532227..bd0c823 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-generated-version.go
+xversion.go
+zversion.go
# ---> Go
# Binaries for programs and plugins
diff --git a/README.md b/README.md
index fc49d73..716a6c7 100644
--- a/README.md
+++ b/README.md
@@ -12,13 +12,17 @@ Goal: Either use an exact version like v1.0.0
# Demo
-Generate a `generated-version.go` file:
+Generate an `xversion.go` file:
```bash
go run git.rootprojects.org/root/go-gitver
-cat generated-version.go
+cat xversion.go
```
+**Note**: The file is named `xversion.go` by default so that the
+generated file's `init()` will come later, and thus take priority, over
+most other files.
+
See `go-gitver`s self-generated version:
```bash
@@ -60,6 +64,7 @@ You don't have to use `mod vendor`, but I highly recommend it.
version print version and exit
--fail exit with non-zero status code on failure
--package will set the package name
+--outfile will replace `xversion.go` with the given file path
```
ENVs
diff --git a/examples/basic/README.md b/examples/basic/README.md
index f677d64..832b303 100644
--- a/examples/basic/README.md
+++ b/examples/basic/README.md
@@ -25,7 +25,7 @@ go build -mod=vendor -o hello *.go
```
Note: If the source is distributed in a non-git tarball then
-`generated-version.go` will not be output, and whatever
+`version-generated.go` will not be output, and whatever
version info is in `package main` will remain as-is.
If you would prefer the build process to fail (i.e. in a CI/CD pipeline),
diff --git a/examples/basic/go.mod b/examples/basic/go.mod
index 61b4360..0996999 100644
--- a/examples/basic/go.mod
+++ b/examples/basic/go.mod
@@ -2,4 +2,4 @@ module example.com/hello
go 1.12
-require git.rootprojects.org/root/go-gitver v1.0.1
+require git.rootprojects.org/root/go-gitver v1.1.0
diff --git a/examples/no-tools/go.mod b/examples/no-tools/go.mod
index 61b4360..0996999 100644
--- a/examples/no-tools/go.mod
+++ b/examples/no-tools/go.mod
@@ -2,4 +2,4 @@ module example.com/hello
go 1.12
-require git.rootprojects.org/root/go-gitver v1.0.1
+require git.rootprojects.org/root/go-gitver v1.1.0
diff --git a/examples/special-name/README.md b/examples/special-name/README.md
new file mode 100644
index 0000000..17c2954
--- /dev/null
+++ b/examples/special-name/README.md
@@ -0,0 +1,24 @@
+# Example
+
+Prints the version or a nice message
+
+# Doesn't have a separate tools package
+
+This is just like `examples/sub-package` except that its `//go:generate` is in `main.go`
+and it outputs `./version/zversion.go` instead of `xversion.go`.
+
+See `examples/basic` for more details.
+
+# Demo
+
+```bash
+go mod tidy
+go mod vendor
+```
+
+```bash
+go generate -mod=vendor ./...
+go build -mod=vendor -o hello *.go
+./hello
+./hello --version
+```
diff --git a/examples/special-name/go.mod b/examples/special-name/go.mod
new file mode 100644
index 0000000..0996999
--- /dev/null
+++ b/examples/special-name/go.mod
@@ -0,0 +1,5 @@
+module example.com/hello
+
+go 1.12
+
+require git.rootprojects.org/root/go-gitver v1.1.0
diff --git a/examples/special-name/main.go b/examples/special-name/main.go
new file mode 100644
index 0000000..fb412b8
--- /dev/null
+++ b/examples/special-name/main.go
@@ -0,0 +1,24 @@
+//go:generate go run -mod=vendor git.rootprojects.org/root/go-gitver --package version --outfile ./version/zversion.go
+
+package main
+
+import (
+ "flag"
+ "fmt"
+
+ "example.com/hello/version"
+)
+
+func main() {
+ showVersion := flag.Bool("version", false, "Print version and exit")
+ flag.Parse()
+
+ if *showVersion {
+ fmt.Println(version.GitRev)
+ fmt.Println(version.GitVersion)
+ fmt.Println(version.GitTimestamp)
+ return
+ }
+
+ fmt.Println("Hello, World!")
+}
diff --git a/examples/special-name/tools/tools.go b/examples/special-name/tools/tools.go
new file mode 100644
index 0000000..d09a206
--- /dev/null
+++ b/examples/special-name/tools/tools.go
@@ -0,0 +1,8 @@
+// +build tools
+
+// This is a dummy package for build tooling
+package tools
+
+import (
+ _ "git.rootprojects.org/root/go-gitver"
+)
diff --git a/examples/special-name/version/version.go b/examples/special-name/version/version.go
new file mode 100644
index 0000000..122e7d4
--- /dev/null
+++ b/examples/special-name/version/version.go
@@ -0,0 +1,7 @@
+package version
+
+var (
+ GitRev = "0000000"
+ GitVersion = "v0.0.0-pre0+0000000"
+ GitTimestamp = "0000-00-00T00:00:00+0000"
+)
diff --git a/examples/sub-package/go.mod b/examples/sub-package/go.mod
index 61b4360..0996999 100644
--- a/examples/sub-package/go.mod
+++ b/examples/sub-package/go.mod
@@ -2,4 +2,4 @@ module example.com/hello
go 1.12
-require git.rootprojects.org/root/go-gitver v1.0.1
+require git.rootprojects.org/root/go-gitver v1.1.0
diff --git a/gitver.go b/gitver.go
index af778c5..041b502 100644
--- a/gitver.go
+++ b/gitver.go
@@ -19,7 +19,7 @@ import (
var exitCode int
var exactVer *regexp.Regexp
var gitVer *regexp.Regexp
-var verFile = "generated-version.go"
+var verFile = "xversion.go"
var (
GitRev = "0000000"
@@ -44,6 +44,9 @@ func main() {
arg := args[i]
if "-f" == arg || "--fail" == arg {
exitCode = 1
+ } else if ("--outfile" == arg || "-o" == arg) && len(args) > i+1 {
+ verFile = args[i+1]
+ args[i+1] = ""
} else if "--package" == arg && len(args) > i+1 {
pkg = args[i+1]
args[i+1] = ""