From d42eeec30cc321ef65a69ea0e85c17d176f89c71 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 21 May 2009 10:31:31 +0000 Subject: [PATCH] Fix #3201: "ar: Bad file number" build error with MSYS and SplitObjs=YES --- mk/config.mk.in | 10 ++++++++++ rts/ghc.mk | 2 +- rules/build-package-way.mk | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/mk/config.mk.in b/mk/config.mk.in index 40e5e91..4fac281 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -777,6 +777,16 @@ LD_X = @LdXFlag@ # overflowing command-line length limits. LdIsGNULd = @LdIsGNULd@ +# On MSYS, building with SplitObjs=YES fails with +# ar: Bad file number +# see #3201. We need to specify a smaller max command-line size +# to work around it. 32767 doesn't work; 30000 does. +ifeq "$(Windows)" "YES" +XARGS = xargs -s 30000 +else +XARGS = xargs +endif + # # In emergency situations, REAL_SHELL is used to perform shell commands # from within the ghc driver script, by scribbling the command line to diff --git a/rts/ghc.mk b/rts/ghc.mk index fba236b..a88ea93 100644 --- a/rts/ghc.mk +++ b/rts/ghc.mk @@ -160,7 +160,7 @@ $$(rts_$1_LIB) : $$(rts_$1_OBJS) rts/libs.depend else $$(rts_$1_LIB) : $$(rts_$1_OBJS) $$(RM) $$@ - echo $$(rts_$1_OBJS) | xargs $$(AR) $$(EXTRA_AR_ARGS) $$@ + echo $$(rts_$1_OBJS) | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@ endif endef diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk index 0485a20..b8df37d 100644 --- a/rules/build-package-way.mk +++ b/rules/build-package-way.mk @@ -52,11 +52,11 @@ else ifeq "$$($1_$2_SplitObjs)" "YES" $$($1_$2_$3_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$(RM) $$@ - (echo $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) `$$($1_$2_$3_MKSTUBOBJS)`; find $$(patsubst %.$$($3_osuf),%_split,$$($1_$2_$3_HS_OBJS)) -name '*.$$($3_osuf)' -print) | xargs $$(AR) $$(EXTRA_AR_ARGS) $$@ + (echo $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) `$$($1_$2_$3_MKSTUBOBJS)`; find $$(patsubst %.$$($3_osuf),%_split,$$($1_$2_$3_HS_OBJS)) -name '*.$$($3_osuf)' -print) | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@ || $(RM) $$@ else $$($1_$2_$3_LIB) : $$($1_$2_$3_HS_OBJS) $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$(RM) $$@ - echo $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_$3_HS_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` | xargs $$(AR) $$(EXTRA_AR_ARGS) $$@ + echo $$($1_$2_v_C_OBJS) $$($1_$2_v_S_OBJS) $$($1_$2_$3_HS_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@ || $(RM) $$@ endif endif -- 1.7.10.4