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

Message ID 20220926064310.688-1-lstipakov@gmail.com
State Accepted
Headers show
Series [Openvpn-devel,v5] msvc: add branch name and commit hash to version output | expand

Commit Message

Lev Stipakov Sept. 25, 2022, 8:43 p.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>
---
v5:
  - replace "detached" with "none"
("none" if not on a branch, "unknown" if cannot be determined)

v4:

  - replace backslash with slash - instead of

  git:msvc-version-release\2.5/b5df0fadf0fdad98

we display

  git:msvc-version-release/2.5/b5df0fadf0fdad98

v3:
  - properly handle branchnames like release/2.5
and detached HEAD state
  - property handle "not in git repo" case

v2:
  - fix copyright year 2002 -> 2022
  - change "not-a-git-repo" to "unknown"

 build/msvc/msvc-generate/Makefile.mak         | 33 +++++++++++-
 build/msvc/msvc-generate/git-version.py       | 50 +++++++++++++++++++
 .../msvc/msvc-generate/msvc-generate.vcxproj  |  2 +-
 config-msvc.h                                 |  2 +
 4 files changed, 84 insertions(+), 3 deletions(-)
 create mode 100644 build/msvc/msvc-generate/git-version.py

Comments

Gert Doering Sept. 25, 2022, 11:24 p.m. UTC | #1
Acked-by: Gert Doering <gert@greenie.muc.de>

This is a useful feature, and after some polishing, I think this is 
about as good as it will get now :-) - thanks.

I have not tested this at all, as I have no MSVC build environment and
it will not manifest on MinGW builds.  From my understanding it looks
reasonable.

Your patch has been applied to the master branch.

commit b9d91c38843076a03b6b5fc123a386ef3c2bc564
Author: Lev Stipakov
Date:   Mon Sep 26 09:43:10 2022 +0300

     msvc: add branch name and commit hash to version output

     Signed-off-by: Lev Stipakov <lev@openvpn.net>
     Acked-by: Gert Doering <gert@greenie.muc.de>
     Message-Id: <20220926064310.688-1-lstipakov@gmail.com>
     URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25311.html
     Signed-off-by: Gert Doering <gert@greenie.muc.de>


--
kind regards,

Gert Doering

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..b6037e1e
--- /dev/null
+++ b/build/msvc/msvc-generate/git-version.py
@@ -0,0 +1,50 @@ 
+#
+#  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) 2022-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]
+    if not commit_id:
+        raise
+    l = os.popen("git rev-parse --symbolic-full-name HEAD").read().split("/")[2:]
+    if not l:
+        l = ["none\n"]
+    branch = "/" .join(l)[:-1]
+    return branch, commit_id
+
+def main():
+    try:
+        branch, commit_id = get_branch_commit_id()
+    except:
+        branch, commit_id = "unknown", "unknown"
+
+    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 b621f3fb..a3c687ed 100644
--- a/config-msvc.h
+++ b/config-msvc.h
@@ -89,3 +89,5 @@  typedef uint16_t in_port_t;
 #endif
 
 #define ENABLE_DCO 1
+
+#define HAVE_CONFIG_VERSION_H 1