diff --git a/ffbuild/library.mak b/ffbuild/library.mak index 5ab7eb4615..93b3b2e5a7 100644 --- a/ffbuild/library.mak +++ b/ffbuild/library.mak @@ -14,6 +14,15 @@ INSTHEADERS := $(INSTHEADERS) $(HEADERS:%=$(SUBDIR)%) all-$(CONFIG_STATIC): $(SUBDIR)$(LIBNAME) $(SUBDIR)lib$(FULLNAME).pc all-$(CONFIG_SHARED): $(SUBDIR)$(SLIBNAME) $(SUBDIR)lib$(FULLNAME).pc +# Make <4.0 does not support the built-in file function; +# versions that do support it should use it, as it's +# faster and isn't bound by command line length limits. +ifeq (4.0,$(firstword $(sort 4.0 $(MAKE_VERSION)))) +HAVE_BUILTIN_FILE := yes +else +HAVE_BUILTIN_FILE := no +endif + LIBOBJS := $(OBJS) $(SHLIBOBJS) $(STLIBOBJS) $(SUBDIR)%.h.o $(TESTOBJS) $(LIBOBJS) $(LIBOBJS:.o=.s) $(LIBOBJS:.o=.i): CPPFLAGS += -DHAVE_AV_CONFIG_H @@ -36,7 +45,11 @@ endif $(SUBDIR)$(LIBNAME): $(OBJS) $(STLIBOBJS) $(RM) $@ ifeq ($(RESPONSE_FILES),yes) +ifeq ($(HAVE_BUILTIN_FILE),yes) + $(file >$@.objs,$^) +else $(Q)echo $^ > $@.objs +endif $(AR) $(ARFLAGS) $(AR_O) @$@.objs else $(AR) $(ARFLAGS) $(AR_O) $^ @@ -75,7 +88,12 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR) $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SHLIBOBJS) $(SUBDIR)lib$(NAME).ver $(SLIB_CREATE_DEF_CMD) ifeq ($(RESPONSE_FILES),yes) +ifeq ($(HAVE_BUILTIN_FILE),yes) + $$(file >$$@.objs,$$(filter %.o,$$^)) +else $(Q)echo $$(filter %.o,$$^) > $$@.objs +endif + $$(call LINK,$$(call $(NAME)LINK_SO_ARGS) $$(LD_O) @$$@.objs $$(call $(NAME)LINK_EXTRA)) else $$(call LINK,$$(call $(NAME)LINK_SO_ARGS) $$(LD_O) $$(filter %.o,$$^) $$(call $(NAME)LINK_EXTRA))