[Openvpn-devel,release/2.5] msvc: add branch name and commit hash to version output

Message ID 20220922125822.313-1-lstipakov@gmail.com
State Superseded
Headers show
Series [Openvpn-devel,release/2.5] msvc: add branch name and commit hash to version output | expand

Commit Message

Lev Stipakov Sept. 22, 2022, 2:58 a.m. UTC
From: Lev Stipakov <lev@openvpn.net>

Add a simple python script which generates header with
branch name and commit hash #defines.

While on it, fix filename in msvc-generate.vcxproj
and add proper copyright header to Makefile.mak.

Signed-off-by: Lev Stipakov <lev@openvpn.net>
---
 build/msvc/msvc-generate/Makefile.mak         | 33 +++++++++++++-
 build/msvc/msvc-generate/git-version.py       | 45 +++++++++++++++++++
 .../msvc/msvc-generate/msvc-generate.vcxproj  |  2 +-
 config-msvc.h                                 |  2 +
 4 files changed, 79 insertions(+), 3 deletions(-)
 create mode 100644 build/msvc/msvc-generate/git-version.py

Comments

Selva Nair Sept. 22, 2022, 4:28 a.m. UTC | #1
Hi,

On Thu, Sep 22, 2022 at 8:59 AM Lev Stipakov <lstipakov@gmail.com> wrote:

> From: Lev Stipakov <lev@openvpn.net>
>
> Add a simple python script which generates header with
> branch name and commit hash #defines.
>
> While on it, fix filename in msvc-generate.vcxproj
> and add proper copyright header to Makefile.mak.
>
> Signed-off-by: Lev Stipakov <lev@openvpn.net>
> ---
>  build/msvc/msvc-generate/Makefile.mak         | 33 +++++++++++++-
>  build/msvc/msvc-generate/git-version.py       | 45 +++++++++++++++++++
>  .../msvc/msvc-generate/msvc-generate.vcxproj  |  2 +-
>  config-msvc.h                                 |  2 +
>  4 files changed, 79 insertions(+), 3 deletions(-)
>  create mode 100644 build/msvc/msvc-generate/git-version.py
>
> diff --git a/build/msvc/msvc-generate/Makefile.mak
> b/build/msvc/msvc-generate/Makefile.mak
> index 1cb43102..ae8b0842 100644
> --- a/build/msvc/msvc-generate/Makefile.mak
> +++ b/build/msvc/msvc-generate/Makefile.mak
> @@ -1,4 +1,27 @@
> -# Copyright (C) 2008-2012 Alon Bar-Lev <alon.barlev@gmail.com>
> +#
> +#  OpenVPN -- An application to securely tunnel IP networks
> +#             over a single UDP port, with support for SSL/TLS-based
> +#             session authentication and key exchange,
> +#             packet encryption, packet authentication, and
> +#             packet compression.
> +#
> +#  Copyright (C) 2002-2022 OpenVPN Inc <sales@openvpn.net>
> +#  Copyright (C) 2008-2012 Alon Bar-Lev <alon.barlev@gmail.com>
> +#  Copyright (C) 2022-2022 Lev Stipakov <lev@lestisoftware.fi>
> +#
> +#  This program is free software; you can redistribute it and/or modify
> +#  it under the terms of the GNU General Public License version 2
> +#  as published by the Free Software Foundation.
> +#
> +#  This program is distributed in the hope that it will be useful,
> +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
> +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +#  GNU General Public License for more details.
> +#
> +#  You should have received a copy of the GNU General Public License along
> +#  with this program; if not, write to the Free Software Foundation, Inc.,
> +#  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> +#
>
>  CONFIG=$(SOLUTIONDIR)/version.m4
>
> @@ -14,7 +37,9 @@ OUTPUT_PLUGIN_CONFIG=version.m4
>  INPUT_MAN=$(SOLUTIONDIR)/doc/openvpn.8.rst
>  OUTPUT_MAN=$(SOLUTIONDIR)/doc/openvpn.8.html
>
> -all:   $(OUTPUT_MSVC_VER) $(OUTPUT_PLUGIN) $(OUTPUT_MAN)
> +OUTPUT_MSVC_GIT_CONFIG=$(SOLUTIONDIR)/config-version.h
> +
> +all:   $(OUTPUT_MSVC_VER) $(OUTPUT_PLUGIN) $(OUTPUT_MAN)
> $(OUTPUT_MSVC_GIT_CONFIG)
>
>  $(OUTPUT_MSVC_VER): $(INPUT_MSVC_VER) $(CONFIG)
>         cscript //nologo msvc-generate.js --config="$(CONFIG)"
> --input="$(INPUT_MSVC_VER)" --output="$(OUTPUT_MSVC_VER)"
> @@ -28,8 +53,12 @@ $(OUTPUT_PLUGIN): $(INPUT_PLUGIN)
> $(OUTPUT_PLUGIN_CONFIG)
>  $(OUTPUT_MAN): $(INPUT_MAN)
>      -FOR /F %i IN ('where rst2html.py') DO python %i "$(INPUT_MAN)"
> "$(OUTPUT_MAN)"
>
> +$(OUTPUT_MSVC_GIT_CONFIG):
> +    python git-version.py $(SOLUTIONDIR)
> +
>  clean:
>         -del "$(OUTPUT_MSVC_VER)"
>         -del "$(OUTPUT_PLUGIN)"
>         -del "$(OUTPUT_PLUGIN_CONFIG)"
>         -del "$(OUTPUT_MAN)"
> +       -del "$(OUTPUT_MSVC_GIT_CONFIG)"
> diff --git a/build/msvc/msvc-generate/git-version.py
> b/build/msvc/msvc-generate/git-version.py
> new file mode 100644
> index 00000000..e1bf5bdb
> --- /dev/null
> +++ b/build/msvc/msvc-generate/git-version.py
> @@ -0,0 +1,45 @@
> +#
> +#  OpenVPN -- An application to securely tunnel IP networks
> +#             over a single UDP port, with support for SSL/TLS-based
> +#             session authentication and key exchange,
> +#             packet encryption, packet authentication, and
> +#             packet compression.
> +#
> +#  Copyright (C) 2002-2022 OpenVPN Inc <sales@openvpn.net>
>

Is this right in a file that didn't exist in 2002?


> +#  Copyright (C) 2022-2022 Lev Stipakov <lev@lestisoftware.fi>
> +#
> +#  This program is free software; you can redistribute it and/or modify
> +#  it under the terms of the GNU General Public License version 2
> +#  as published by the Free Software Foundation.
> +#
> +#  This program is distributed in the hope that it will be useful,
> +#  but WITHOUT ANY WARRANTY; without even the implied warranty of
> +#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +#  GNU General Public License for more details.
> +#
> +#  You should have received a copy of the GNU General Public License along
> +#  with this program; if not, write to the Free Software Foundation, Inc.,
> +#  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> +#
> +
> +import os
> +import sys
> +
> +def get_branch_commit_id():
> +    commit_id = os.popen("git rev-parse --short=16 HEAD").read()[:-1]
> +    branch = os.popen("git rev-parse --symbolic-full-name
> HEAD").read().split("/")[2][:-1]

+    return branch, commit_id
> +
> +def main():
> +    try:
> +        branch, commit_id = get_branch_commit_id()
> +    except:
> +        branch, commit_id = "<not-a-git-repo>", "<not-a-git-repo>"
> +
>

While "not-a-git-repo" may be a descriptive o/p for a script like this, it
may not make much sense when seen in --version output.
Instead, something like "unknown" may be a better fallback?

As the exception comes from a failed split("/"), it could trigger also when
one is not on a branch (say detached head).

+
> +    name = os.path.join("%s" %  (sys.argv[1] if len(sys.argv) > 1 else
> "."), "config-version.h")
> +    with open(name, "w") as f:
> +        f.write("#define CONFIGURE_GIT_REVISION \"%s/%s\"\n" % (branch,
> commit_id))
> +        f.write("#define CONFIGURE_GIT_FLAGS \"\"\n")
> +
> +if __name__ == "__main__":
> +    main()
> diff --git a/build/msvc/msvc-generate/msvc-generate.vcxproj
> b/build/msvc/msvc-generate/msvc-generate.vcxproj
> index dda8b051..eae94709 100644
> --- a/build/msvc/msvc-generate/msvc-generate.vcxproj
> +++ b/build/msvc/msvc-generate/msvc-generate.vcxproj
> @@ -150,7 +150,7 @@
>    </ItemDefinitionGroup>
>    <ItemGroup>
>      <None Include="Makefile.mak" />
> -    <None Include="msc-generate.js" />
> +    <None Include="msvc-generate.js" />
>    </ItemGroup>
>    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
>    <ImportGroup Label="ExtensionTargets">
> diff --git a/config-msvc.h b/config-msvc.h
> index e7479c86..47c5ba07 100644
> --- a/config-msvc.h
> +++ b/config-msvc.h
> @@ -177,3 +177,5 @@ typedef uint16_t in_port_t;
>      #define HAVE_INET_NTOP
>      #define HAVE_INET_PTON
>  #endif
> +
> +#define HAVE_CONFIG_VERSION_H 1
> --
> 2.23.0.windows.1
>

Are executables in release builds pulled from corresponding git repo these
days? Otherwise when built from some repo like openvpn-build this would get
wrong branch/commit-ids..

Selva
Lev Stipakov Sept. 22, 2022, 4:47 a.m. UTC | #2
Hi,

I've sent v2 with copyright year and "not-a-git" -> "unknown" fix.

(I forgot to name master patch to PATCH v2)

Yes, when doing releases we do git checkout. I have tested MSI
installers produced by openvpn-build GitHub automation, which uses the
same script (build-and-package.ps1) which release build process is
using.

-Lev

Patch

diff --git a/build/msvc/msvc-generate/Makefile.mak b/build/msvc/msvc-generate/Makefile.mak
index 1cb43102..ae8b0842 100644
--- a/build/msvc/msvc-generate/Makefile.mak
+++ b/build/msvc/msvc-generate/Makefile.mak
@@ -1,4 +1,27 @@ 
-# Copyright (C) 2008-2012 Alon Bar-Lev <alon.barlev@gmail.com>
+#
+#  OpenVPN -- An application to securely tunnel IP networks
+#             over a single UDP port, with support for SSL/TLS-based
+#             session authentication and key exchange,
+#             packet encryption, packet authentication, and
+#             packet compression.
+#
+#  Copyright (C) 2002-2022 OpenVPN Inc <sales@openvpn.net>
+#  Copyright (C) 2008-2012 Alon Bar-Lev <alon.barlev@gmail.com>
+#  Copyright (C) 2022-2022 Lev Stipakov <lev@lestisoftware.fi>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2
+#  as published by the Free Software Foundation.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License along
+#  with this program; if not, write to the Free Software Foundation, Inc.,
+#  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
 
 CONFIG=$(SOLUTIONDIR)/version.m4
 
@@ -14,7 +37,9 @@  OUTPUT_PLUGIN_CONFIG=version.m4
 INPUT_MAN=$(SOLUTIONDIR)/doc/openvpn.8.rst
 OUTPUT_MAN=$(SOLUTIONDIR)/doc/openvpn.8.html
 
-all:	$(OUTPUT_MSVC_VER) $(OUTPUT_PLUGIN) $(OUTPUT_MAN)
+OUTPUT_MSVC_GIT_CONFIG=$(SOLUTIONDIR)/config-version.h
+
+all:	$(OUTPUT_MSVC_VER) $(OUTPUT_PLUGIN) $(OUTPUT_MAN) $(OUTPUT_MSVC_GIT_CONFIG)
 
 $(OUTPUT_MSVC_VER): $(INPUT_MSVC_VER) $(CONFIG)
 	cscript //nologo msvc-generate.js --config="$(CONFIG)" --input="$(INPUT_MSVC_VER)" --output="$(OUTPUT_MSVC_VER)"
@@ -28,8 +53,12 @@  $(OUTPUT_PLUGIN): $(INPUT_PLUGIN) $(OUTPUT_PLUGIN_CONFIG)
 $(OUTPUT_MAN): $(INPUT_MAN)
     -FOR /F %i IN ('where rst2html.py') DO python %i "$(INPUT_MAN)" "$(OUTPUT_MAN)"
 
+$(OUTPUT_MSVC_GIT_CONFIG):
+    python git-version.py $(SOLUTIONDIR)
+
 clean:
 	-del "$(OUTPUT_MSVC_VER)"
 	-del "$(OUTPUT_PLUGIN)"
 	-del "$(OUTPUT_PLUGIN_CONFIG)"
 	-del "$(OUTPUT_MAN)"
+	-del "$(OUTPUT_MSVC_GIT_CONFIG)"
diff --git a/build/msvc/msvc-generate/git-version.py b/build/msvc/msvc-generate/git-version.py
new file mode 100644
index 00000000..e1bf5bdb
--- /dev/null
+++ b/build/msvc/msvc-generate/git-version.py
@@ -0,0 +1,45 @@ 
+#
+#  OpenVPN -- An application to securely tunnel IP networks
+#             over a single UDP port, with support for SSL/TLS-based
+#             session authentication and key exchange,
+#             packet encryption, packet authentication, and
+#             packet compression.
+#
+#  Copyright (C) 2002-2022 OpenVPN Inc <sales@openvpn.net>
+#  Copyright (C) 2022-2022 Lev Stipakov <lev@lestisoftware.fi>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License version 2
+#  as published by the Free Software Foundation.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License along
+#  with this program; if not, write to the Free Software Foundation, Inc.,
+#  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+import os
+import sys
+
+def get_branch_commit_id():
+    commit_id = os.popen("git rev-parse --short=16 HEAD").read()[:-1]
+    branch = os.popen("git rev-parse --symbolic-full-name HEAD").read().split("/")[2][:-1]
+    return branch, commit_id
+
+def main():
+    try:
+        branch, commit_id = get_branch_commit_id()
+    except:
+        branch, commit_id = "<not-a-git-repo>", "<not-a-git-repo>"
+
+    name = os.path.join("%s" %  (sys.argv[1] if len(sys.argv) > 1 else "."), "config-version.h")
+    with open(name, "w") as f:
+        f.write("#define CONFIGURE_GIT_REVISION \"%s/%s\"\n" % (branch, commit_id))
+        f.write("#define CONFIGURE_GIT_FLAGS \"\"\n")
+
+if __name__ == "__main__":
+    main()
diff --git a/build/msvc/msvc-generate/msvc-generate.vcxproj b/build/msvc/msvc-generate/msvc-generate.vcxproj
index dda8b051..eae94709 100644
--- a/build/msvc/msvc-generate/msvc-generate.vcxproj
+++ b/build/msvc/msvc-generate/msvc-generate.vcxproj
@@ -150,7 +150,7 @@ 
   </ItemDefinitionGroup>
   <ItemGroup>
     <None Include="Makefile.mak" />
-    <None Include="msc-generate.js" />
+    <None Include="msvc-generate.js" />
   </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
diff --git a/config-msvc.h b/config-msvc.h
index e7479c86..47c5ba07 100644
--- a/config-msvc.h
+++ b/config-msvc.h
@@ -177,3 +177,5 @@  typedef uint16_t in_port_t;
     #define HAVE_INET_NTOP
     #define HAVE_INET_PTON
 #endif
+
+#define HAVE_CONFIG_VERSION_H 1