From 4677f8036e8d090303ef76cbbe4f703d5c85d752 Mon Sep 17 00:00:00 2001 From: John Starks Date: Sat, 23 Apr 2016 15:11:08 -0700 Subject: [PATCH] Windows: Add file version information This change adds file version information to docker.exe and dockerd.exe by adding a Windows version resource with the windres tool. This change adds a dependency to binutils-mingw-w64 on Linux, but removes a dependency on rsrc. Most Windows build environments should already have windres if they have gcc (which is necessary to build dockerd). Signed-off-by: John Starks --- Dockerfile | 10 +--- Dockerfile.armhf | 8 --- Dockerfile.ppc64le | 8 --- Dockerfile.s390x | 8 --- Dockerfile.windows | 15 ++---- client/docker_windows.go | 2 +- docker/docker_windows.go | 2 +- hack/make/.go-autogen | 64 +++++++++++------------ hack/make/.resources-windows/common.rc | 38 ++++++++++++++ hack/make/.resources-windows/docker.rc | 3 ++ hack/make/.resources-windows/dockerd.rc | 3 ++ hack/make/.resources-windows/resources.go | 18 +++++++ 12 files changed, 100 insertions(+), 79 deletions(-) create mode 100644 hack/make/.resources-windows/common.rc create mode 100644 hack/make/.resources-windows/docker.rc create mode 100644 hack/make/.resources-windows/dockerd.rc create mode 100644 hack/make/.resources-windows/resources.go diff --git a/Dockerfile b/Dockerfile index 1330106d49..9ab146b409 100644 --- a/Dockerfile +++ b/Dockerfile @@ -46,6 +46,7 @@ RUN apt-get update && apt-get install -y \ aufs-tools \ automake \ bash-completion \ + binutils-mingw-w64 \ bsdmainutils \ btrfs-tools \ build-essential \ @@ -248,15 +249,6 @@ RUN set -x \ && go build -v -o /usr/local/bin/tomlv github.com/BurntSushi/toml/cmd/tomlv \ && rm -rf "$GOPATH" -# Build/install the tool for embedding resources in Windows binaries -ENV RSRC_COMMIT ba14da1f827188454a4591717fff29999010887f -RUN set -x \ - && export GOPATH="$(mktemp -d)" \ - && git clone https://github.com/akavel/rsrc.git "$GOPATH/src/github.com/akavel/rsrc" \ - && (cd "$GOPATH/src/github.com/akavel/rsrc" && git checkout -q "$RSRC_COMMIT") \ - && go build -v -o /usr/local/bin/rsrc github.com/akavel/rsrc \ - && rm -rf "$GOPATH" - # Install runc ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5 RUN set -x \ diff --git a/Dockerfile.armhf b/Dockerfile.armhf index 8c5f2b133e..9da343d06a 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf @@ -191,14 +191,6 @@ RUN set -x \ && go build -v -o /usr/local/bin/tomlv github.com/BurntSushi/toml/cmd/tomlv \ && rm -rf "$GOPATH" -# Build/install the tool for embedding resources in Windows binaries -ENV RSRC_VERSION v2 -RUN set -x \ - && export GOPATH="$(mktemp -d)" \ - && git clone --depth 1 -b "$RSRC_VERSION" https://github.com/akavel/rsrc.git "$GOPATH/src/github.com/akavel/rsrc" \ - && go build -v -o /usr/local/bin/rsrc github.com/akavel/rsrc \ - && rm -rf "$GOPATH" - # Install runc ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5 RUN set -x \ diff --git a/Dockerfile.ppc64le b/Dockerfile.ppc64le index 3fa5f204f0..a508165d11 100644 --- a/Dockerfile.ppc64le +++ b/Dockerfile.ppc64le @@ -187,14 +187,6 @@ RUN set -x \ && go build -v -o /usr/local/bin/tomlv github.com/BurntSushi/toml/cmd/tomlv \ && rm -rf "$GOPATH" -# Build/install the tool for embedding resources in Windows binaries -ENV RSRC_VERSION v2 -RUN set -x \ - && export GOPATH="$(mktemp -d)" \ - && git clone --depth 1 -b "$RSRC_VERSION" https://github.com/akavel/rsrc.git "$GOPATH/src/github.com/akavel/rsrc" \ - && go build -v -o /usr/local/bin/rsrc github.com/akavel/rsrc \ - && rm -rf "$GOPATH" - # Install runc ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5 RUN set -x \ diff --git a/Dockerfile.s390x b/Dockerfile.s390x index 7aad9a794d..77b5e2a69d 100644 --- a/Dockerfile.s390x +++ b/Dockerfile.s390x @@ -169,14 +169,6 @@ RUN set -x \ && go build -v -o /usr/local/bin/tomlv github.com/BurntSushi/toml/cmd/tomlv \ && rm -rf "$GOPATH" -# Build/install the tool for embedding resources in Windows binaries -ENV RSRC_VERSION v2 -RUN set -x \ - && export GOPATH="$(mktemp -d)" \ - && git clone --depth 1 -b "$RSRC_VERSION" https://github.com/akavel/rsrc.git "$GOPATH/src/github.com/akavel/rsrc" \ - && go build -v -o /usr/local/bin/rsrc github.com/akavel/rsrc \ - && rm -rf "$GOPATH" - # Install runc ENV RUNC_COMMIT e87436998478d222be209707503c27f6f91be0c5 RUN set -x \ diff --git a/Dockerfile.windows b/Dockerfile.windows index 702d8a283c..e671275472 100755 --- a/Dockerfile.windows +++ b/Dockerfile.windows @@ -1,10 +1,10 @@ -# This file describes the standard way to build Docker, using a docker container on Windows +# This file describes the standard way to build Docker, using a docker container on Windows # Server 2016 # # Usage: # # # Assemble the full dev environment. This is slow the first time. Run this from -# # a directory containing the sources you are validating. For example from +# # a directory containing the sources you are validating. For example from # # c:\go\src\github.com\docker\docker # # docker build -t docker -f Dockerfile.windows . @@ -21,7 +21,7 @@ # # The posix utilities from GIT aren't usable interactively as at January 2016. This # is because they require a console window which isn't present in a container in Windows. -# See the example at the top of this file. Do NOT use -it in that docker run!!! +# See the example at the top of this file. Do NOT use -it in that docker run!!! # # Don't try to use a volume for passing the source through. The posix utilities will # balk at reparse points. Again, see the example at the top of this file on how use a volume @@ -36,7 +36,6 @@ FROM windowsservercore # - FROM_DOCKERFILE is used for detection of building within a container. ENV GO_VERSION=1.5.3 \ GIT_LOCATION=https://github.com/git-for-windows/git/releases/download/v2.7.2.windows.1/Git-2.7.2-64-bit.exe \ - RSRC_COMMIT=ba14da1f827188454a4591717fff29999010887f \ GOPATH=C:/go;C:/go/src/github.com/docker/docker/vendor \ FROM_DOCKERFILE=1 @@ -52,7 +51,7 @@ RUN \ $wc = New-Object net.webclient; $wc.Downloadfile($source, $target) \ } \ \ - Write-Host INFO: Downloading git...; \ + Write-Host INFO: Downloading git...; \ Download-File %GIT_LOCATION% gitsetup.exe; \ \ Write-Host INFO: Downloading go...; \ @@ -83,12 +82,8 @@ RUN \ Remove-Item go.msi; \ Remove-Item gitsetup.exe; \ \ - Write-Host INFO: Cloning and installing RSRC; \ - c:\git\bin\git.exe clone https://github.com/akavel/rsrc.git c:\go\src\github.com\akavel\rsrc; \ - cd \go\src\github.com\akavel\rsrc; c:\git\bin\git.exe checkout -q %RSRC_COMMIT%; c:\go\bin\go.exe install -v; \ - \ Write-Host INFO: Completed - + # Prepare for building COPY . /go/src/github.com/docker/docker diff --git a/client/docker_windows.go b/client/docker_windows.go index a31dffc95c..de32257586 100644 --- a/client/docker_windows.go +++ b/client/docker_windows.go @@ -1,5 +1,5 @@ package main import ( - _ "github.com/docker/docker/autogen/winresources" + _ "github.com/docker/docker/autogen/winresources/docker" ) diff --git a/docker/docker_windows.go b/docker/docker_windows.go index a31dffc95c..889e35272d 100644 --- a/docker/docker_windows.go +++ b/docker/docker_windows.go @@ -1,5 +1,5 @@ package main import ( - _ "github.com/docker/docker/autogen/winresources" + _ "github.com/docker/docker/autogen/winresources/dockerd" ) diff --git a/hack/make/.go-autogen b/hack/make/.go-autogen index c8e13b4796..aef660f935 100644 --- a/hack/make/.go-autogen +++ b/hack/make/.go-autogen @@ -20,44 +20,40 @@ const ( DVEOF # Compile the Windows resources into the sources -mkdir -p autogen/winresources -cat > autogen/winresources/resources.go < /dev/null - - rsrc \ - -manifest hack/make/.resources-windows/docker.exe.manifest \ - -ico hack/make/.resources-windows/docker.ico \ - -arch "386" \ - -o autogen/winresources/rsrc_386.syso > /dev/null + rm -r autogen/winresources/tmp fi diff --git a/hack/make/.resources-windows/common.rc b/hack/make/.resources-windows/common.rc new file mode 100644 index 0000000000..000fb35367 --- /dev/null +++ b/hack/make/.resources-windows/common.rc @@ -0,0 +1,38 @@ +// Application icon +1 ICON "docker.ico" + +// Windows executable manifest +1 24 /* RT_MANIFEST */ "docker.exe.manifest" + +// Version information +1 VERSIONINFO + +#ifdef DOCKER_VERSION_QUAD +FILEVERSION DOCKER_VERSION_QUAD +PRODUCTVERSION DOCKER_VERSION_QUAD +#endif + +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004B0" + BEGIN + VALUE "ProductName", DOCKER_NAME + +#ifdef DOCKER_VERSION + VALUE "FileVersion", DOCKER_VERSION + VALUE "ProductVersion", DOCKER_VERSION +#endif + +#ifdef DOCKER_COMMIT + VALUE "OriginalFileName", DOCKER_COMMIT +#endif + + END + END + + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0000, 0x04B0 + END +END diff --git a/hack/make/.resources-windows/docker.rc b/hack/make/.resources-windows/docker.rc new file mode 100644 index 0000000000..40c645ad1d --- /dev/null +++ b/hack/make/.resources-windows/docker.rc @@ -0,0 +1,3 @@ +#define DOCKER_NAME "Docker Client" + +#include "common.rc" diff --git a/hack/make/.resources-windows/dockerd.rc b/hack/make/.resources-windows/dockerd.rc new file mode 100644 index 0000000000..19486d729e --- /dev/null +++ b/hack/make/.resources-windows/dockerd.rc @@ -0,0 +1,3 @@ +#define DOCKER_NAME "Docker Engine" + +#include "common.rc" diff --git a/hack/make/.resources-windows/resources.go b/hack/make/.resources-windows/resources.go new file mode 100644 index 0000000000..b171259f83 --- /dev/null +++ b/hack/make/.resources-windows/resources.go @@ -0,0 +1,18 @@ +/* + +Package winresources is used to embed Windows resources into docker.exe. +These resources are used to provide + + * Version information + * An icon + * A Windows manifest declaring Windows version support + +The resource object files are generated in hack/make/.go-autogen from +source files in hack/make/.resources-windows. This occurs automatically +when you run hack/make.sh. + +These object files are picked up automatically by go build when this package +is included. + +*/ +package winresources