Attention is currently required from: flichtenheld, plaisthos.
Hello plaisthos, razvanc,
I'd like you to reexamine a change. Please visit
http://gerrit.openvpn.net/c/openvpn/+/1592?usp=email
to look at the new patch set (#5).
Change subject: configure: Add --enable-code-coverage
......................................................................
configure: Add --enable-code-coverage
Can be used like this
./configure --enable-code-coverage
make
make check
make code-coverage-capture
We heavily patch ax_code_coverage.m4, mostly to
achieve better compatibility with non-Linux systems.
- Do not depend on autoconf-archive
- Do not depend on GNU make
- Use more modern --coverage flag to better support
different compilers
Change-Id: I79b2dc4a550b1c5068a45407976b0dfc2f765b33
Signed-off-by: Frank Lichtenheld <[email protected]>
---
M .gitignore
M Makefile.am
M configure.ac
A lcovrc
M m4/ax_code_coverage.m4
M src/openvpn/Makefile.am
6 files changed, 114 insertions(+), 43 deletions(-)
git pull ssh://gerrit.openvpn.net:29418/openvpn refs/changes/92/1592/5
diff --git a/.gitignore b/.gitignore
index 04523af..2749739 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,9 @@
*.[oa]
*.l[oa]
+*.gcda
+*.gcno
+*-coverage/
+*-coverage.info
*.dll
*.exe
*.exe.*
@@ -18,6 +22,7 @@
Makefile
Makefile.in
aclocal.m4
+aminclude_static.am
autodefs.h
autom4te.cache
config.guess
diff --git a/Makefile.am b/Makefile.am
index feeaabb..716b2df 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -22,6 +22,8 @@
# with this program; if not, see <https://www.gnu.org/licenses/>.
#
+include $(top_srcdir)/aminclude_static.am
+
ACLOCAL_AMFLAGS = -I m4
MAINTAINERCLEANFILES = \
@@ -45,7 +47,8 @@
CMakeLists.txt \
CMakePresets.json \
config.h.cmake.in \
- forked-test-driver
+ forked-test-driver \
+ lcovrc
.PHONY: config-version.h doxygen
@@ -97,3 +100,7 @@
SOURCE_DIR="$(abs_top_srcdir)" \
INCLUDE_FLAGS="$(LIBNL_GENL_CFLAGS)" \
"$(top_srcdir)/dev-tools/run-cppcheck.sh"
+
+CODE_COVERAGE_LCOV_SHOPTS=--config-file $(srcdir)/lcovrc
+clean-local: code-coverage-clean
+distclean-local: code-coverage-dist-clean
diff --git a/configure.ac b/configure.ac
index 469a475..6772beb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -59,6 +59,8 @@
AC_CANONICAL_HOST
AC_USE_SYSTEM_EXTENSIONS
+AX_CODE_COVERAGE
+
AC_ARG_ENABLE(
[lzo],
[AS_HELP_STRING([--disable-lzo], [disable LZO compression support
@<:@default=yes@:>@])],
@@ -1236,6 +1238,11 @@
ACL_CHECK_ADD_COMPILE_FLAGS([-Wno-cast-function-type])
fi
+# If coverage is enabled remove -O arguments from CFLAGS
+if test "$enable_code_coverage" = "yes"; then
+ [CFLAGS="`echo $CFLAGS | $SED -e 's/-O[a-z0-9]*//g'`"]
+fi
+
if test "${enable_pedantic}" = "yes"; then
CFLAGS="${CFLAGS} -pedantic"
AC_DEFINE([PEDANTIC], [1], [Enable pedantic mode])
@@ -1355,10 +1362,10 @@
TEST_LDFLAGS="${OPTIONAL_CRYPTO_LIBS} ${OPTIONAL_PKCS11_HELPER_LIBS}
${OPTIONAL_LIBCAPNG_LIBS}"
TEST_LDFLAGS="${TEST_LDFLAGS} ${OPTIONAL_LIBNL_GENL_LIBS}"
-TEST_LDFLAGS="${TEST_LDFLAGS} ${OPTIONAL_LZO_LIBS} ${CMOCKA_LIBS}"
+TEST_LDFLAGS="${TEST_LDFLAGS} ${OPTIONAL_LZO_LIBS} ${CMOCKA_LIBS}
${CODE_COVERAGE_LIBS}"
TEST_CFLAGS="${OPTIONAL_CRYPTO_CFLAGS} ${OPTIONAL_PKCS11_HELPER_CFLAGS}
${OPTIONAL_LIBCAPNG_CFLAGS}"
TEST_CFLAGS="${TEST_CFLAGS} ${OPTIONAL_LIBNL_GENL_CFLAGS}
${OPTIONAL_LZO_CFLAGS}"
-TEST_CFLAGS="${TEST_CFLAGS} -I\$(top_srcdir)/include ${CMOCKA_CFLAGS}"
+TEST_CFLAGS="${TEST_CFLAGS} -I\$(top_srcdir)/include ${CMOCKA_CFLAGS}
${CODE_COVERAGE_CFLAGS}"
AC_SUBST([TEST_LDFLAGS])
AC_SUBST([TEST_CFLAGS])
diff --git a/lcovrc b/lcovrc
new file mode 100644
index 0000000..f8b4138
--- /dev/null
+++ b/lcovrc
@@ -0,0 +1,2 @@
+geninfo_external = 1
+geninfo_unexecuted_blocks = 1
diff --git a/m4/ax_code_coverage.m4 b/m4/ax_code_coverage.m4
index 216708a4..f156d4d 100644
--- a/m4/ax_code_coverage.m4
+++ b/m4/ax_code_coverage.m4
@@ -42,8 +42,8 @@
# clean-local: code-coverage-clean
# distclean-local: code-coverage-dist-clean
#
-# This results in a "check-code-coverage" rule being added to any
-# Makefile.am which do "include $(top_srcdir)/aminclude_static.am"
+# This results in a "check-code-coverage" rule being added to the
+# Makefile.am which does "include $(top_srcdir)/aminclude_static.am"
# (assuming the module has been configured with --enable-code-coverage).
# Running `make check-code-coverage` in that directory will run the
# module's test suite (`make check`) and build a code coverage report
@@ -76,10 +76,51 @@
#serial 37
+dnl Local modifications compared to the autoconf-archive version:
+dnl
+dnl - AX_ADD_AM_MACRO_STATIC (from autoconf-archive) is replaced by a
+dnl minimal local equivalent, OPENVPN_ADD_AM_MACRO_STATIC, so that we do
+dnl not depend on autoconf-archive being installed.
+dnl - The generated rules no longer require GNU make. The AX_CHECK_GNU_MAKE
+dnl check is gone (which also removed the last autoconf-archive
+dnl dependency) and the GNU make specific constructs in the rules were
+dnl replaced:
+dnl * the "ifeq ($(abs_builddir), $(abs_top_builddir))" guard is gone,
+dnl aminclude_static.am may only be included by the top level
+dnl Makefile.am now (which is the only place it was ever included
+dnl from in this project),
+dnl * $(addprefix ...) and $(if ...) are replaced by shell code inside
+dnl the recipes,
+dnl * $(call ...)/$(subst ...) for the lcov test name is replaced by
+dnl CODE_COVERAGE_TEST_NAME, computed at configure time,
+dnl * "find ... -delete" is replaced by "find ... -exec rm -f {} +".
+dnl The only remaining non-POSIX construct is the nested variable
+dnl expansion used for the silent rules ($(foo_$(V))), which is the same
+dnl idiom automake itself uses for AM_V_at and friends and which is
+dnl understood by BSD make as well.
+
+AC_DEFUN([OPENVPN_PRINT_TO_FILE],[
+m4_esyscmd(
+[
+printf "%s" "$2" > "$1"
+])
+])
+
+AC_DEFUN([OPENVPN_ADD_AM_MACRO_STATIC],[
+ OPENVPN_PRINT_TO_FILE([aminclude_static.am],[$1])
+])
+
m4_define(_AX_CODE_COVERAGE_RULES,[
-AX_ADD_AM_MACRO_STATIC([
+OPENVPN_ADD_AM_MACRO_STATIC([
+# This file was generated by ax_code_coverage
# Code coverage
#
+# This file must only be included by the top level Makefile.am: the rules
+# below always report on the complete build tree.
+#
+# The rules avoid GNU make specific syntax so that they also work with
+# other make implementations, e.g. BSD make.
+#
# Optional:
# - CODE_COVERAGE_DIRECTORY: Top-level directory for code coverage reporting.
# Multiple directories may be specified, separated by whitespace.
@@ -90,51 +131,51 @@
# - CODE_COVERAGE_OUTPUT_DIRECTORY: Directory for generated code coverage
# reports to be created. (Default:
# \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage)
+# - CODE_COVERAGE_TEST_NAME: Test name to record in the .info file. It is
+# computed by configure (\$(PACKAGE_NAME)-\$(PACKAGE_VERSION), with dashes
+# and dots replaced by underscores) and can be overridden by defining it
+# in Makefile.am.
# - CODE_COVERAGE_BRANCH_COVERAGE: Set to 1 to enforce branch coverage,
# set to 0 to disable it and leave empty to stay with the default.
-# (Default: empty)
+# The corresponding --rc option is passed to lcov and genhtml in
+# addition to the options below. (Default: empty)
# - CODE_COVERAGE_LCOV_SHOPTS_DEFAULT: Extra options shared between both lcov
-# instances. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+# instances. (Default: empty)
# - CODE_COVERAGE_LCOV_SHOPTS: Extra options to shared between both lcov
-# instances. (Default: $CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
+# instances. (Default: \$CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
# - CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH: --gcov-tool pathtogcov
# - CODE_COVERAGE_LCOV_OPTIONS_DEFAULT: Extra options to pass to the
-# collecting lcov instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
+# collecting lcov instance. (Default: \$CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
# - CODE_COVERAGE_LCOV_OPTIONS: Extra options to pass to the collecting lcov
-# instance. (Default: $CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
+# instance. (Default: \$CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
# - CODE_COVERAGE_LCOV_RMOPTS_DEFAULT: Extra options to pass to the filtering
# lcov instance. (Default: empty)
-# - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering lcov
-# instance. (Default: $CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
+# - CODE_COVERAGE_LCOV_RMOPTS: Extra options to pass to the filtering
+# lcov instance. (Default: \$CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
# - CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT: Extra options to pass to the
-# genhtml instance. (Default: based on $CODE_COVERAGE_BRANCH_COVERAGE)
+# genhtml instance. (Default: empty)
# - CODE_COVERAGE_GENHTML_OPTIONS: Extra options to pass to the genhtml
-# instance. (Default: $CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
+# instance. (Default: \$CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
# - CODE_COVERAGE_IGNORE_PATTERN: Extra glob pattern of files to ignore
#
# The generated report will be titled using the \$(PACKAGE_NAME) and
# \$(PACKAGE_VERSION). In order to add the current git hash to the title,
# use the git-version-gen script, available online.
# Optional variables
-# run only on top dir
if CODE_COVERAGE_ENABLED
- ifeq (\$(abs_builddir), \$(abs_top_builddir))
CODE_COVERAGE_DIRECTORY ?= \$(top_builddir)
CODE_COVERAGE_OUTPUT_FILE ?= \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage.info
CODE_COVERAGE_OUTPUT_DIRECTORY ?= \$(PACKAGE_NAME)-\$(PACKAGE_VERSION)-coverage
CODE_COVERAGE_BRANCH_COVERAGE ?=
-CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?= \$(if \$(CODE_COVERAGE_BRANCH_COVERAGE),\
---rc lcov_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_LCOV_SHOPTS_DEFAULT ?=
CODE_COVERAGE_LCOV_SHOPTS ?= \$(CODE_COVERAGE_LCOV_SHOPTS_DEFAULT)
CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH ?= --gcov-tool \"\$(GCOV)\"
CODE_COVERAGE_LCOV_OPTIONS_DEFAULT ?= \$(CODE_COVERAGE_LCOV_OPTIONS_GCOVPATH)
CODE_COVERAGE_LCOV_OPTIONS ?= \$(CODE_COVERAGE_LCOV_OPTIONS_DEFAULT)
CODE_COVERAGE_LCOV_RMOPTS_DEFAULT ?=
CODE_COVERAGE_LCOV_RMOPTS ?= \$(CODE_COVERAGE_LCOV_RMOPTS_DEFAULT)
-CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=\
-\$(if \$(CODE_COVERAGE_BRANCH_COVERAGE),\
---rc genhtml_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE))
+CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT ?=
CODE_COVERAGE_GENHTML_OPTIONS ?= \$(CODE_COVERAGE_GENHTML_OPTIONS_DEFAULT)
CODE_COVERAGE_IGNORE_PATTERN ?=
@@ -152,8 +193,15 @@
code_coverage_quiet_ = \$(code_coverage_quiet_\$(AM_DEFAULT_VERBOSITY))
code_coverage_quiet_0 = --quiet
-# sanitizes the test-name: replaces with underscores: dashes and dots
-code_coverage_sanitize = \$(subst -,_,\$(subst .,_,\$(1)))
+# Shell fragments used by the recipes below. They are portable
+# replacements for the GNU make functions \$(addprefix ...) and \$(if ...):
+# code_coverage_dirs_opt sets \$cc_dirs to a list of --directory options,
+# code_coverage_prefix_opt sets \$cc_prefix to a list of --prefix options and
+# code_coverage_*_branch_opt set \$cc_branch to the branch coverage option.
+code_coverage_dirs_opt = cc_dirs=; for cc_dir in \$(CODE_COVERAGE_DIRECTORY);
do cc_dirs=\"\$\$cc_dirs --directory \$\$cc_dir\"; done
+code_coverage_prefix_opt = cc_prefix=; for cc_dir in
\$(CODE_COVERAGE_DIRECTORY); do cc_prefix=\"\$\$cc_prefix --prefix
\$\$cc_dir\"; done
+code_coverage_lcov_branch_opt = cc_branch=; test -z
\"\$(CODE_COVERAGE_BRANCH_COVERAGE)\" || cc_branch=\"--rc
lcov_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE)\"
+code_coverage_genhtml_branch_opt = cc_branch=; test -z
\"\$(CODE_COVERAGE_BRANCH_COVERAGE)\" || cc_branch=\"--rc
genhtml_branch_coverage=\$(CODE_COVERAGE_BRANCH_COVERAGE)\"
# Use recursive makes in order to ignore errors during check
check-code-coverage:
@@ -162,29 +210,26 @@
# Capture code coverage data
code-coverage-capture: code-coverage-capture-hook
- \$(code_coverage_v_lcov_cap)\$(LCOV) \$(code_coverage_quiet)
\$(addprefix --directory ,\$(CODE_COVERAGE_DIRECTORY)) --capture --output-file
\"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" --test-name \"\$(call
code_coverage_sanitize,\$(PACKAGE_NAME)-\$(PACKAGE_VERSION))\" --no-checksum
--compat-libtool \$(CODE_COVERAGE_LCOV_SHOPTS) \$(CODE_COVERAGE_LCOV_OPTIONS)
- \$(code_coverage_v_lcov_ign)\$(LCOV) \$(code_coverage_quiet)
\$(addprefix --directory ,\$(CODE_COVERAGE_DIRECTORY)) --remove
\"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \$(CODE_COVERAGE_IGNORE_PATTERN)
--output-file \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$(CODE_COVERAGE_LCOV_SHOPTS)
\$(CODE_COVERAGE_LCOV_RMOPTS)
+ \$(code_coverage_v_lcov_cap)\$(code_coverage_dirs_opt); \\
+ \$(code_coverage_lcov_branch_opt); \\
+ \$(LCOV) \$(code_coverage_quiet) \$\$cc_dirs --capture --output-file
\"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" --test-name
\"\$(CODE_COVERAGE_TEST_NAME)\" --no-checksum --compat-libtool \$\$cc_branch
\$(CODE_COVERAGE_LCOV_SHOPTS) \$(CODE_COVERAGE_LCOV_OPTIONS)
+ \$(code_coverage_v_lcov_ign)\$(code_coverage_dirs_opt); \\
+ \$(code_coverage_lcov_branch_opt); \\
+ \$(LCOV) \$(code_coverage_quiet) \$\$cc_dirs --remove
\"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \$(CODE_COVERAGE_IGNORE_PATTERN)
--output-file \"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$\$cc_branch
\$(CODE_COVERAGE_LCOV_SHOPTS) \$(CODE_COVERAGE_LCOV_RMOPTS)
-@rm -f \"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\"
- \$(code_coverage_v_genhtml)LANG=C \$(GENHTML) \$(code_coverage_quiet)
\$(addprefix --prefix ,\$(CODE_COVERAGE_DIRECTORY)) --output-directory
\"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\" --title
\"\$(PACKAGE_NAME)-\$(PACKAGE_VERSION) Code Coverage\" --legend --show-details
\"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$(CODE_COVERAGE_GENHTML_OPTIONS)
+ \$(code_coverage_v_genhtml)\$(code_coverage_prefix_opt); \\
+ \$(code_coverage_genhtml_branch_opt); \\
+ LANG=C \$(GENHTML) \$(code_coverage_quiet) \$\$cc_prefix
--output-directory \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\" --title
\"\$(PACKAGE_NAME)-\$(PACKAGE_VERSION) Code Coverage\" --legend --show-details
\"\$(CODE_COVERAGE_OUTPUT_FILE)\" \$\$cc_branch
\$(CODE_COVERAGE_GENHTML_OPTIONS)
@echo
\"file://\$(abs_builddir)/\$(CODE_COVERAGE_OUTPUT_DIRECTORY)/index.html\"
code-coverage-clean:
-\$(LCOV) --directory \$(top_builddir) -z
-rm -rf \"\$(CODE_COVERAGE_OUTPUT_FILE)\"
\"\$(CODE_COVERAGE_OUTPUT_FILE).tmp\" \"\$(CODE_COVERAGE_OUTPUT_DIRECTORY)\"
- -find . \\( -name \"*.gcda\" -o -name \"*.gcno\" -o -name \"*.gcov\"
\\) -delete
+ -find . \\( -name \"*.gcda\" -o -name \"*.gcno\" -o -name \"*.gcov\"
\\) -exec rm -f '{}' +
code-coverage-dist-clean:
A][M_DISTCHECK_CONFIGURE_FLAGS := \$(A][M_DISTCHECK_CONFIGURE_FLAGS)
--disable-code-coverage
- else # ifneq (\$(abs_builddir), \$(abs_top_builddir))
-check-code-coverage:
-
-code-coverage-capture: code-coverage-capture-hook
-
-code-coverage-clean:
-
-code-coverage-dist-clean:
- endif # ifeq (\$(abs_builddir), \$(abs_top_builddir))
else #! CODE_COVERAGE_ENABLED
# Use recursive makes in order to ignore errors during check
check-code-coverage:
@@ -206,8 +251,7 @@
])
AC_DEFUN([_AX_CODE_COVERAGE_ENABLED],[
- AX_CHECK_GNU_MAKE([],[AC_MSG_ERROR([not using GNU make that is needed
for coverage])])
- AC_REQUIRE([AX_ADD_AM_MACRO_STATIC])
+ AC_REQUIRE([OPENVPN_ADD_AM_MACRO_STATIC])
# check for gcov
AC_CHECK_TOOL([GCOV],
[$_AX_CODE_COVERAGE_GCOV_PROG_WITH],
@@ -232,13 +276,12 @@
AC_MSG_ERROR([Could not find genhtml from the lcov package])
])
- AC_CHECK_LIB([gcov], [_gcov_init], [CODE_COVERAGE_LIBS="-lgcov"],
[CODE_COVERAGE_LIBS=""])
-
dnl Build the code coverage flags
dnl Define CODE_COVERAGE_LDFLAGS for backwards compatibility
CODE_COVERAGE_CPPFLAGS="-DNDEBUG"
- CODE_COVERAGE_CFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
- CODE_COVERAGE_CXXFLAGS="-O0 -g -fprofile-arcs -ftest-coverage"
+ CODE_COVERAGE_CFLAGS="-O0 -g --coverage"
+ CODE_COVERAGE_CXXFLAGS="-O0 -g --coverage"
+ CODE_COVERAGE_LIBS="--coverage"
AC_SUBST([CODE_COVERAGE_CPPFLAGS])
AC_SUBST([CODE_COVERAGE_CFLAGS])
@@ -265,6 +308,10 @@
AC_SUBST([CODE_COVERAGE_ENABLED], [$enable_code_coverage])
AC_MSG_RESULT($enable_code_coverage)
+ dnl The lcov test name must not contain dashes or dots
+ CODE_COVERAGE_TEST_NAME=`echo "$PACKAGE_NAME-$PACKAGE_VERSION" | tr
'.-' '__'`
+ AC_SUBST([CODE_COVERAGE_TEST_NAME])
+
AS_IF([ test "x$enable_code_coverage" = xyes ], [
_AX_CODE_COVERAGE_ENABLED
])
diff --git a/src/openvpn/Makefile.am b/src/openvpn/Makefile.am
index 7fd12b4..488d0a5 100644
--- a/src/openvpn/Makefile.am
+++ b/src/openvpn/Makefile.am
@@ -31,9 +31,12 @@
$(OPTIONAL_SYSTEMD_CFLAGS) \
$(OPTIONAL_PKCS11_HELPER_CFLAGS) \
$(OPTIONAL_INOTIFY_CFLAGS) \
+ $(CODE_COVERAGE_CFLAGS) \
-DPLUGIN_LIBDIR=\"${plugindir}\" \
-DDEFAULT_DNS_UPDOWN=\"${scriptdir}/dns-updown\"
+AM_LDFLAGS = $(CODE_COVERAGE_LIBS)
+
if WIN32
# we want unicode entry point but not the macro
AM_CFLAGS += -municode -UUNICODE
--
To view, visit http://gerrit.openvpn.net/c/openvpn/+/1592?usp=email
To unsubscribe, or for help writing mail filters, visit
http://gerrit.openvpn.net/settings?usp=email
Gerrit-MessageType: newpatchset
Gerrit-Project: openvpn
Gerrit-Branch: master
Gerrit-Change-Id: I79b2dc4a550b1c5068a45407976b0dfc2f765b33
Gerrit-Change-Number: 1592
Gerrit-PatchSet: 5
Gerrit-Owner: flichtenheld <[email protected]>
Gerrit-Reviewer: plaisthos <[email protected]>
Gerrit-Reviewer: razvanc <[email protected]>
Gerrit-CC: openvpn-devel <[email protected]>
Gerrit-Attention: plaisthos <[email protected]>
Gerrit-Attention: flichtenheld <[email protected]>
_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel