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 |
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
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
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