[Openvpn-devel,v4] fix building of openvpnsrvmsg.dll from eventmsg.mc in mingw builds
Commit Message
commit 06919a60ae61 introduces .mc files that need to be compiled to
.h and .bin by the windows "mc.exe" tool, and from there into a new
.dll. This worked for MSVC builds, did nothing for cmake/mingw builds,
and broke compilation on autoconf/mingw builds.
This patch consists of two parts:
1. add building of openvpnsrvmsg.dll to autoconf/mingw builds
Add logic to configure.ac to find the "windmc" binary in the linux or
mingw variants, add rules to src/openvpnserv/Makefile.am so make knows
what to do.
Libtool is getting in the way when "openvpnsrvmsg.dll" is created as
anything listed in ...BIN or ...LIB, so decare it as "DATA" and make
the necessary rules explicit.
2. fix building of openvpnsrvmsg.dll on cmake/mingw builds
Fix "find_program()" invocation to avoid using "midnight commander"
binary (mc) on Linux (called "windmc" there).
Change from "-Wl,--noentry" to linker invocation that works.
See also:
https://learn.microsoft.com/en-us/cpp/build/creating-a-resource-only-dll?view=msvc-170
Change-Id: I071e8190dac28f429257b8af1c6f9e68f8896bc0
Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1197
---
This change was reviewed on Gerrit and approved by at least one
developer. I request to merge it to master.
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1197
This mail reflects revision 4 of this Change.
Acked-by according to Gerrit (reflected above):
Frank Lichtenheld <frank@lichtenheld.com>
Comments
As discussed in Gerrit, this might not be the most beautiful construct,
but it works for cmake+mingw and for in- and out-of-tree autoconf+mingw
builds - and this is all it needs to do (and unlike v1, it does not
break "non WIN32" builds ;-) ).
I have tested this by building on an ubuntu 2204 and copying openvpnserv.exe
and openvpnservmsg.exe to a Win10 machine "that had never seen the new
event log code", registered the DLL, and event log works. Yay.
Lev has tested the cmake+mingw builds (and the cmake+MSVC builds, of
course, that were also broken in v3).
Your patch has been applied to the master and release/2.6 branch
(necessary to enable mingw building of 2.6 again).
commit 744a2bd556833cf5e65d737e1bcffd2cb89a6d2f (master)
commit 9d89e750d3e07b401e042b5456dec5d1187e346f (release/2.6)
Author: Gert Doering
Date: Fri Sep 19 13:24:19 2025 +0200
fix building of openvpnsrvmsg.dll from eventmsg.mc in mingw builds
Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Frank Lichtenheld <frank@lichtenheld.com>
Gerrit URL: https://gerrit.openvpn.net/c/openvpn/+/1197
Message-Id: <20250919112424.24728-1-gert@greenie.muc.de>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg33083.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
--
kind regards,
Gert Doering
@@ -441,6 +441,7 @@
AC_DEFINE_UNQUOTED([IPROUTE_PATH], ["$IPROUTE"], [Path to iproute tool])
AC_DEFINE_UNQUOTED([ROUTE_PATH], ["$ROUTE"], [Path to route tool])
AC_DEFINE_UNQUOTED([SYSTEMD_ASK_PASSWORD_PATH], ["$SYSTEMD_ASK_PASSWORD"], [Path to systemd-ask-password tool])
+AC_CHECK_TOOLS([WINDMC], [windmc mc.exe],[no])
#
# man page generation - based on python-docutils
@@ -41,7 +41,7 @@
file(MAKE_DIRECTORY ${MC_GEN_DIR})
set(MC_FILE ${CMAKE_CURRENT_SOURCE_DIR}/eventmsg.mc)
-find_program(MC_COMPILER NAMES mc mc.exe x86_64-w64-mingw32-windmc i686-w64-mingw32-windmc windmc)
+find_program(MC_COMPILER NAMES mc.exe x86_64-w64-mingw32-windmc i686-w64-mingw32-windmc windmc)
if (NOT MC_COMPILER)
message(FATAL_ERROR "No message compiler found.")
@@ -58,12 +58,17 @@
add_custom_target(msg_mc_gen ALL DEPENDS ${MC_GEN_DIR}/eventmsg.rc ${MC_GEN_DIR}/eventmsg.h)
add_library(openvpnservmsg SHARED ${MC_GEN_DIR}/eventmsg.rc)
+add_dependencies(openvpnservmsg msg_mc_gen)
if (MSVC)
set_target_properties(openvpnservmsg PROPERTIES LINK_FLAGS "/NOENTRY")
else()
- target_link_options(openvpnservmsg PRIVATE "-Wl,--no-entry")
+ set_target_properties(openvpnservmsg PROPERTIES LINKER_LANGUAGE C OUTPUT_NAME "openvpnservmsg")
+ target_link_options(openvpnservmsg PRIVATE
+ -Wl,--entry=0
+ -nostdlib
+ -nostartfiles
+ )
endif()
-add_dependencies(openvpnservmsg msg_mc_gen)
add_dependencies(openvpnserv msg_mc_gen)
@@ -28,6 +28,10 @@
openvpnserv_LDADD = \
-ladvapi32 -luserenv -liphlpapi -lfwpuclnt -lrpcrt4 \
-lshlwapi -lnetapi32 -lws2_32 -lntdll -lole32
+noinst_DATA = \
+ MSG00409.bin eventmsg.h eventmsg.rc openvpnservmsg.dll
+BUILT_SOURCES = \
+ eventmsg.h
endif
openvpnserv_SOURCES = \
@@ -37,3 +41,11 @@
validate.c validate.h \
$(top_srcdir)/src/openvpn/wfp_block.c $(top_srcdir)/src/openvpn/wfp_block.h \
openvpnserv_resources.rc
+
+openvpnservmsg.dll: eventmsg.o
+ $(CC) -shared -Wl,--entry=0 -nostdlib -nostartfiles -o $@ $<
+
+eventmsg.o: eventmsg.rc
+
+eventmsg.h: eventmsg.mc
+ $(WINDMC) -U $<