>From 5e86210757dde236e576d768ecb4e1bfc59b7065 Mon Sep 17 00:00:00 2001
From: Martijn Otto <[email protected]>
Date: Fri, 10 Jul 2026 11:44:51 +0200
Subject: [PATCH] compat/windows/makedef: emit a LIBRARY directive when
the DLL
 name is known

The generated .def files contain only an EXPORTS list. Tools that
create import libraries from them must then infer the module name:
MS lib.exe falls back to the .def file name, but llvm-lib leaves the
DLL name empty, silently producing import libraries whose members
reference an unnamed module, which no loader can resolve.

Pass the target file name from the build rule and emit a proper
LIBRARY directive, making the .def files self-contained. Without
LIBNAME set the output is unchanged.

Signed-off-by: Martijn Otto <[email protected]>
---
 compat/windows/makedef | 3 +++
 configure              | 4 ++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/compat/windows/makedef b/compat/windows/makedef
index c5755d6cca..43d2baafcd 100755
--- a/compat/windows/makedef
+++ b/compat/windows/makedef
@@ -145,5 +145,8 @@ for exp in ${regex}; do
           sed -e 's/^/    /')
 done
 
+if [ -n "$LIBNAME" ]; then
+    echo "LIBRARY ${LIBNAME}"
+fi
 echo "EXPORTS"
 echo "${list}" | sort | uniq | tail -n +2
diff --git a/configure b/configure
index 80954aa826..ef3fdf42d7 100755
--- a/configure
+++ b/configure
@@ -6251,7 +6251,7 @@ case $target_os in
         SLIB_INSTALL_LINKS=
         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
         SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a)
$(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
-        SLIB_CREATE_DEF_CMD='EXTERN_PREFIX="$(EXTERN_PREFIX)"
AR="$(AR_CMD)" NM="$(NM_CMD)" $(SRC_PATH)/compat/windows/makedef
$(SUBDIR)lib$(NAME).ver $(SLIB_CREATE_DEF_INPUTS) >
$$(@:$(SLIBSUF)=.def)'
+        SLIB_CREATE_DEF_CMD='LIBNAME="$$(@F)"
EXTERN_PREFIX="$(EXTERN_PREFIX)" AR="$(AR_CMD)" NM="$(NM_CMD)"
$(SRC_PATH)/compat/windows/makedef $(SUBDIR)lib$(NAME).ver
$(SLIB_CREATE_DEF_INPUTS) > $$(@:$(SLIBSUF)=.def)'
         SHFLAGS='-shared -Wl,--out-
implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--disable-auto-
image-base $$(@:$(SLIBSUF)=.def)'
         enabled x86_64 && objformat="win64" || objformat="win32"
         dlltool="${cross_prefix}dlltool"
@@ -6290,7 +6290,7 @@ case $target_os in
         SLIBSUF=".dll"
         SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-
$(LIBVERSION)$(SLIBSUF)'
         SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-
$(LIBMAJOR)$(SLIBSUF)'
-        SLIB_CREATE_DEF_CMD='LDFLAGS="$(LDFLAGS)"
EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef
$(SUBDIR)lib$(NAME).ver $(SLIB_CREATE_DEF_INPUTS) >
$$(@:$(SLIBSUF)=.def)'
+        SLIB_CREATE_DEF_CMD='LIBNAME="$$(@F)" LDFLAGS="$(LDFLAGS)"
EXTERN_PREFIX="$(EXTERN_PREFIX)" $(SRC_PATH)/compat/windows/makedef
$(SUBDIR)lib$(NAME).ver $(SLIB_CREATE_DEF_INPUTS) >
$$(@:$(SLIBSUF)=.def)'
         SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
         SLIB_INSTALL_LINKS=
         SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
-- 
2.43.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to