]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
fix building of openvpnsrvmsg.dll from eventmsg.mc in mingw builds
authorGert Doering <gert@greenie.muc.de>
Fri, 19 Sep 2025 11:24:19 +0000 (13:24 +0200)
committerGert Doering <gert@greenie.muc.de>
Fri, 19 Sep 2025 11:51:42 +0000 (13:51 +0200)
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
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>
configure.ac
src/openvpnserv/CMakeLists.txt
src/openvpnserv/Makefile.am

index 705987148483bca630a29f49147dbb9f440c1c7e..38b14a1ea83b8b54a39a6387f30df6dba4c43e82 100644 (file)
@@ -441,6 +441,7 @@ AC_DEFINE_UNQUOTED([IFCONFIG_PATH], ["$IFCONFIG"], [Path to ifconfig tool])
 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
index 82099f16f824b44077682d9e8bf4ad3d029e4233..340b904c8fd934a2d072c758c171cfde2bc00a4c 100644 (file)
@@ -41,7 +41,7 @@ endif ()
 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_command(
 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)
index ef5f3f34b06c8e279217faf7ec2a525e49b625c6..a27fbbffb9584bb4fa25b9b3bf8150d74811f06c 100644 (file)
@@ -28,6 +28,10 @@ openvpnserv_CFLAGS = \
 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 @@ openvpnserv_SOURCES = \
        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 $<