configure: Pass the .objs response file to makedef
This fixes generating shared libraries with a toolchain that requires makedef (MSVC, or mingw toolchains with LLD, that lacks support for --version-script). This uses the existing response file generated for linking, by splitting out the choice of input parameter to makedef to a variable expanded by make. This avoids relying on "echo" within makedef supporting long command lines; msys2/cygwin shells handle it fine, while busybox doesn't.
This commit is contained in:
@@ -33,6 +33,11 @@ if [ ! -f "$vscript" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
for object in "$@"; do
|
for object in "$@"; do
|
||||||
|
case "$object" in
|
||||||
|
@*)
|
||||||
|
object="${object#@}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
if [ ! -f "$object" ]; then
|
if [ ! -f "$object" ]; then
|
||||||
echo "Object does not exist: ${object}" >&2
|
echo "Object does not exist: ${object}" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -6250,7 +6250,7 @@ case $target_os in
|
|||||||
SLIB_INSTALL_LINKS=
|
SLIB_INSTALL_LINKS=
|
||||||
SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
|
SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
|
||||||
SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)'
|
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 $(OBJS) > $$(@:$(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)'
|
||||||
SHFLAGS='-shared -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--disable-auto-image-base $$(@:$(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"
|
enabled x86_64 && objformat="win64" || objformat="win32"
|
||||||
dlltool="${cross_prefix}dlltool"
|
dlltool="${cross_prefix}dlltool"
|
||||||
@@ -6289,7 +6289,7 @@ case $target_os in
|
|||||||
SLIBSUF=".dll"
|
SLIBSUF=".dll"
|
||||||
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
|
SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)'
|
||||||
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(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 $(OBJS) > $$(@:$(SLIBSUF)=.def)'
|
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_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
|
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
|
||||||
SLIB_INSTALL_LINKS=
|
SLIB_INSTALL_LINKS=
|
||||||
SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
|
SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)'
|
||||||
@@ -8768,6 +8768,11 @@ SLIBNAME=${SLIBNAME}
|
|||||||
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
|
SLIBNAME_WITH_VERSION=${SLIBNAME_WITH_VERSION}
|
||||||
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
|
SLIBNAME_WITH_MAJOR=${SLIBNAME_WITH_MAJOR}
|
||||||
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
|
SLIB_CREATE_DEF_CMD=${SLIB_CREATE_DEF_CMD}
|
||||||
|
ifeq (\$(RESPONSE_FILES),yes)
|
||||||
|
SLIB_CREATE_DEF_INPUTS=@\$\$@.objs
|
||||||
|
else
|
||||||
|
SLIB_CREATE_DEF_INPUTS=\$(OBJS)
|
||||||
|
endif
|
||||||
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
|
SLIB_EXTRA_CMD=${SLIB_EXTRA_CMD}
|
||||||
SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
|
SLIB_INSTALL_NAME=${SLIB_INSTALL_NAME}
|
||||||
SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
|
SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS}
|
||||||
|
|||||||
+3
-2
@@ -86,14 +86,15 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR)
|
|||||||
$(Q)cd ./$(SUBDIR) && $(LN_S) $(SLIBNAME_WITH_MAJOR) $(SLIBNAME)
|
$(Q)cd ./$(SUBDIR) && $(LN_S) $(SLIBNAME_WITH_MAJOR) $(SLIBNAME)
|
||||||
|
|
||||||
$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SUBDIR)lib$(NAME).ver
|
$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SUBDIR)lib$(NAME).ver
|
||||||
$(SLIB_CREATE_DEF_CMD)
|
|
||||||
ifeq ($(RESPONSE_FILES),yes)
|
ifeq ($(RESPONSE_FILES),yes)
|
||||||
ifeq ($(HAVE_BUILTIN_FILE),yes)
|
ifeq ($(HAVE_BUILTIN_FILE),yes)
|
||||||
$$(file >$$@.objs,$$(filter %.o,$$^))
|
$$(file >$$@.objs,$$(filter %.o,$$^))
|
||||||
else
|
else
|
||||||
$(Q)echo $$(filter %.o,$$^) > $$@.objs
|
$(Q)echo $$(filter %.o,$$^) > $$@.objs
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
$(SLIB_CREATE_DEF_CMD)
|
||||||
|
ifeq ($(RESPONSE_FILES),yes)
|
||||||
$$(call LINK,$$(call $(NAME)LINK_SO_ARGS) $$(LD_O) @$$@.objs $$(call $(NAME)LINK_EXTRA))
|
$$(call LINK,$$(call $(NAME)LINK_SO_ARGS) $$(LD_O) @$$@.objs $$(call $(NAME)LINK_EXTRA))
|
||||||
else
|
else
|
||||||
$$(call LINK,$$(call $(NAME)LINK_SO_ARGS) $$(LD_O) $$(filter %.o,$$^) $$(call $(NAME)LINK_EXTRA))
|
$$(call LINK,$$(call $(NAME)LINK_SO_ARGS) $$(LD_O) $$(filter %.o,$$^) $$(call $(NAME)LINK_EXTRA))
|
||||||
|
|||||||
Reference in New Issue
Block a user