docs: document how to build with version info and icon resources on windows

This commit is contained in:
albertony 2022-09-28 16:28:41 +02:00
parent 4506f35f2e
commit 52d444f4a9
2 changed files with 57 additions and 16 deletions

View File

@ -366,26 +366,59 @@ port of GCC, e.g. by installing it in a [MSYS2](https://www.msys2.org)
distribution (make sure you install it in the classic mingw64 subsystem, the distribution (make sure you install it in the classic mingw64 subsystem, the
ucrt64 version is not compatible). ucrt64 version is not compatible).
Additionally, on Windows, you must install the third party utility Additionally, to build with mount on Windows, you must install the third party
[WinFsp](https://winfsp.dev/), with the "Developer" feature selected. utility [WinFsp](https://winfsp.dev/), with the "Developer" feature selected.
If building with cgo, you must also set environment variable CPATH pointing to If building with cgo, you must also set environment variable CPATH pointing to
the fuse include directory within the WinFsp installation the fuse include directory within the WinFsp installation
(normally `C:\Program Files (x86)\WinFsp\inc\fuse`). (normally `C:\Program Files (x86)\WinFsp\inc\fuse`).
You may also add arguments `-ldflags -s` (with or without `-tags cmount`), You may add arguments `-ldflags -s` to omit symbol table and debug information,
to omit symbol table and debug information, making the executable file smaller, making the executable file smaller, and `-trimpath` to remove references to
and `-trimpath` to remove references to local file system paths. This is how local file system paths. The official rclone releases are built with both of these.
the official rclone releases are built.
``` ```
go build -trimpath -ldflags -s -tags cmount go build -trimpath -ldflags -s -tags cmount
``` ```
If you want to customize the version string, as reported by
the `rclone version` command, you can set one of the variables `fs.Version`,
`fs.VersionTag` (to keep default suffix but customize the number),
or `fs.VersionSuffix` (to keep default number but customize the suffix).
This can be done from the build command, by adding to the `-ldflags`
argument value as shown below.
```
go build -trimpath -ldflags "-s -X github.com/rclone/rclone/fs.Version=v9.9.9-test" -tags cmount
```
On Windows, the official executables also have the version information,
as well as a file icon, embedded as binary resources. To get that with your
own build you need to run the following command **before** the build command.
It generates a Windows resource system object file, with extension .syso, e.g.
`resource_windows_amd64.syso`, that will be automatically picked up by
future build commands.
```
go run bin/resource_windows.go
```
The above command will generate a resource file containing version information
based on the fs.Version variable in source at the time you run the command,
which means if the value of this variable changes you need to re-run the
command for it to be reflected in the version information. Also, if you
override this version variable in the build command as described above, you
need to do that also when generating the resource file, or else it will still
use the value from the source.
```
go run bin/resource_windows.go -version v9.9.9-test
```
Instead of executing the `go build` command directly, you can run it via the Instead of executing the `go build` command directly, you can run it via the
Makefile. It changes the version number suffix from "-DEV" to "-beta" and Makefile. The default target changes the version suffix from "-DEV" to "-beta"
appends commit details. It also copies the resulting rclone executable into followed by additional commit details, embeds version information binary resources
your GOPATH bin folder (`$(go env GOPATH)/bin`, which corresponds to on Windows, and copies the resulting rclone executable into your GOPATH bin folder
`~/go/bin/rclone` by default). (`$(go env GOPATH)/bin`, which corresponds to `~/go/bin/rclone` by default).
``` ```
make make
@ -398,17 +431,17 @@ make GOTAGS=cmount
``` ```
There are other make targets that can be used for more advanced builds, There are other make targets that can be used for more advanced builds,
such as cross-compiling for all supported os/architectures, embedding such as cross-compiling for all supported os/architectures, and packaging
icon and version info resources into windows executable, and packaging
results into release artifacts. results into release artifacts.
See [Makefile](https://github.com/rclone/rclone/blob/master/Makefile) See [Makefile](https://github.com/rclone/rclone/blob/master/Makefile)
and [cross-compile.go](https://github.com/rclone/rclone/blob/master/bin/cross-compile.go) and [cross-compile.go](https://github.com/rclone/rclone/blob/master/bin/cross-compile.go)
for details. for details.
Another alternative is to download the source, build and install rclone in one Another alternative method for source installation is to download the source,
operation, as a regular Go package. The source will be stored it in the Go build and install rclone - all in one operation, as a regular Go package.
module cache, and the resulting executable will be in your GOPATH bin folder The source will be stored it in the Go module cache, and the resulting
(`$(go env GOPATH)/bin`, which corresponds to `~/go/bin/rclone` by default). executable will be in your GOPATH bin folder (`$(go env GOPATH)/bin`,
which corresponds to `~/go/bin/rclone` by default).
``` ```
go install github.com/rclone/rclone@latest go install github.com/rclone/rclone@latest

View File

@ -45,6 +45,14 @@ pointing to the fuse include directory within the WinFsp installation
(typically `C:\Program Files (x86)\WinFsp\inc\fuse`). See also the (typically `C:\Program Files (x86)\WinFsp\inc\fuse`). See also the
[mount](/commands/rclone_mount/#installing-on-windows) documentation. [mount](/commands/rclone_mount/#installing-on-windows) documentation.
On Windows, when you build a shared library, you can embed version information
as binary resource. To do that you need to run the following command **before**
the build command.
```
go run bin/resource_windows.go -binary librclone.dll -dir librclone
```
### Documentation ### Documentation
For documentation see the Go documentation for: For documentation see the Go documentation for: