From 723eb70f31b2b413a51387bbbfbe01bb9b8c5907 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Thu, 5 Nov 2009 14:13:10 +0000 Subject: [PATCH] Fix #3642: m GHC builds using the Haskell Platform --- aclocal.m4 | 3 ++- mk/config.mk.in | 1 + rts/ghc.mk | 4 ++-- rules/build-package-way.mk | 4 ++-- rules/distdir-way-opts.mk | 17 +++++++++++++---- utils/ghc-cabal/ghc-cabal.hs | 6 +++--- 6 files changed, 23 insertions(+), 12 deletions(-) diff --git a/aclocal.m4 b/aclocal.m4 index 64425b1..bfd91fc 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -426,7 +426,8 @@ else fi fi]) fp_prog_ar_args=$fp_cv_prog_ar_args -AC_SUBST([ArCmd], ["$fp_prog_ar $fp_prog_ar_args"]) +AC_SUBST([ArCmd], ["$fp_prog_ar"]) +AC_SUBST([ArArgs], ["$fp_prog_ar_args"]) ])# FP_PROG_AR_ARGS diff --git a/mk/config.mk.in b/mk/config.mk.in index fff9e5a..bbdb63c 100644 --- a/mk/config.mk.in +++ b/mk/config.mk.in @@ -563,6 +563,7 @@ HaveLibMingwEx = @HaveLibMingwEx@ # Other standard (ha!) Unix utilities AR = @ArCmd@ +AR_OPTS = @ArArgs@ ArSupportsInput = @ArSupportsInput@ # Yuckage: for ghc/utils/parallel -- todo: nuke this dependency!! BASH = /usr/local/bin/bash diff --git a/rts/ghc.mk b/rts/ghc.mk index 60fb620..e4e9aad 100644 --- a/rts/ghc.mk +++ b/rts/ghc.mk @@ -114,7 +114,7 @@ $$(rts_$1_LIB) : $$(rts_$1_OBJS) rts/libs.depend else $$(rts_$1_LIB) : $$(rts_$1_OBJS) "$$(RM)" $$(RM_OPTS) $$@ - echo $$(rts_$1_OBJS) | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@ + echo $$(rts_$1_OBJS) | $$(XARGS) "$$(AR)" $$(AR_OPTS) $$(EXTRA_AR_ARGS) $$@ endif endef @@ -334,7 +334,7 @@ $(DYNWRAPPER_PROG): $(DYNWRAPPER_SRC) # build the static lib containing the C main symbol rts/dist/build/libHSrtsmain.a : rts/dist/build/Main.o - $(AR) $(EXTRA_AR_ARGS) $@ $< + "$(AR)" $(AR_OPTS) $(EXTRA_AR_ARGS) $@ $< # ----------------------------------------------------------------------------- # The RTS package config diff --git a/rules/build-package-way.mk b/rules/build-package-way.mk index 95ec21b..f7480aa 100644 --- a/rules/build-package-way.mk +++ b/rules/build-package-way.mk @@ -54,11 +54,11 @@ else ifeq "$$($1_$2_SplitObjs)" "YES" $$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS) "$$(RM)" $$(RM_OPTS) $$@ - (echo $$($1_$2_$3_NON_HS_OBJS) `$$($1_$2_$3_MKSTUBOBJS)`; $$(FIND) $$(patsubst %.$$($3_osuf),%_$$($3_osuf)_split,$$($1_$2_$3_HS_OBJS)) -name '*.$$($3_osuf)' -print) | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@ + (echo $$($1_$2_$3_NON_HS_OBJS) `$$($1_$2_$3_MKSTUBOBJS)`; $$(FIND) $$(patsubst %.$$($3_osuf),%_$$($3_osuf)_split,$$($1_$2_$3_HS_OBJS)) -name '*.$$($3_osuf)' -print) | $$(XARGS) "$$(AR)" $(AR_OPTS) $$(EXTRA_AR_ARGS) $$@ else $$($1_$2_$3_LIB) : $$($1_$2_$3_ALL_OBJS) "$$(RM)" $$(RM_OPTS) $$@ - echo $$($1_$2_$3_ALL_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` | $$(XARGS) $$(AR) $$(EXTRA_AR_ARGS) $$@ + echo $$($1_$2_$3_ALL_OBJS) `$$($1_$2_$3_MKSTUBOBJS)` | $$(XARGS) "$$(AR)" $(AR_OPTS) $$(EXTRA_AR_ARGS) $$@ endif endif diff --git a/rules/distdir-way-opts.mk b/rules/distdir-way-opts.mk index 11d64c0..e346dff 100644 --- a/rules/distdir-way-opts.mk +++ b/rules/distdir-way-opts.mk @@ -75,6 +75,10 @@ else $1_$2_DEP_INCLUDE_DIRS_FLAG = -I endif +# We have to do this mangling using the shell, because words may contain +# spaces and GNU make doesn't have any quoting interpretation. +$1_$2_CC_INC_FLAGS:=$$(shell for i in $$($1_$2_DEP_INCLUDE_DIRS); do echo $$($1_$2_DEP_INCLUDE_DIRS_FLAG)\"$$$$i\"; done) + $1_$2_DIST_CC_OPTS = \ $$(CONF_CC_OPTS) \ $$(SRC_CC_OPTS) \ @@ -83,21 +87,26 @@ $1_$2_DIST_CC_OPTS = \ $$(foreach dir,$$(filter /%,$$($1_$2_INCLUDE_DIRS)),-I$$(dir)) \ $$($1_$2_CC_OPTS) \ $$($1_$2_CPP_OPTS) \ - $$(foreach dir,$$($1_$2_DEP_INCLUDE_DIRS),$$($1_$2_DEP_INCLUDE_DIRS_FLAG)$$(dir)) \ + $$($1_$2_CC_INC_FLAGS) \ $$($1_$2_DEP_CC_OPTS) +$1_$2_DIST_LD_LIB_DIRS:=$$(shell for i in $$($1_$2_DEP_LIB_DIRS); do echo \"-L$$$$i\"; done) + $1_$2_DIST_LD_OPTS = \ $$(CONF_LD_OPTS) \ $$(SRC_LD_OPTS) \ $$($1_LD_OPTS) \ $$($1_$2_LD_OPTS) \ - $$(foreach opt,$$($1_$2_DEP_LIB_DIRS),-L$$(opt)) \ + $$($1_$2_DIST_LD_LIB_DIRS) \ $$(foreach opt,$$($1_$2_DEP_EXTRA_LIBS),-l$$(opt)) \ $$($1_$2_DEP_LD_OPTS) # c.f. Cabal's Distribution.Simple.PreProcess.ppHsc2hs # We use '' around cflags and lflags to handle paths with backslashes in # on Windows +$1_$2_$3_HSC2HS_CC_OPTS:=$$(shell for i in $$($1_$2_DIST_CC_OPTS); do echo \'--cflag=$$$$i\'; done) +$1_$2_$3_HSC2HS_LD_OPTS:=$$(shell for i in $$($1_$2_DIST_LD_OPTS); do echo \'--lflag=$$$$i\'; done) + $1_$2_$3_ALL_HSC2HS_OPTS = \ --cc=$$(WhatGccIsCalled) \ --ld=$$(WhatGccIsCalled) \ @@ -105,8 +114,8 @@ $1_$2_$3_ALL_HSC2HS_OPTS = \ $$(SRC_HSC2HS_OPTS) \ $$(WAY_$3_HSC2HS_OPTS) \ --cflag=-D__GLASGOW_HASKELL__=$$(ProjectVersionInt) \ - $$(foreach opt,$$($1_$2_DIST_CC_OPTS),'--cflag=$$(opt)') \ - $$(foreach opt,$$($1_$2_DIST_LD_OPTS),'--lflag=$$(opt)') \ + $$($1_$2_$3_HSC2HS_CC_OPTS) \ + $$($1_$2_$3_HSC2HS_LD_OPTS) \ $$($$(basename $$<)_HSC2HS_OPTS) \ $$(EXTRA_HSC2HS_OPTS) diff --git a/utils/ghc-cabal/ghc-cabal.hs b/utils/ghc-cabal/ghc-cabal.hs index f724617..9a99ad4 100644 --- a/utils/ghc-cabal/ghc-cabal.hs +++ b/utils/ghc-cabal/ghc-cabal.hs @@ -363,12 +363,12 @@ generate config_args distdir directory variablePrefix ++ "_CC_OPTS = " ++ unwords (ccOptions bi), variablePrefix ++ "_CPP_OPTS = " ++ unwords (cppOptions bi), variablePrefix ++ "_LD_OPTS = " ++ unwords (ldOptions bi), - variablePrefix ++ "_DEP_INCLUDE_DIRS = " ++ unwords (forDeps Installed.includeDirs), + variablePrefix ++ "_DEP_INCLUDE_DIRS = " ++ unwords (wrap $ forDeps Installed.includeDirs), variablePrefix ++ "_DEP_CC_OPTS = " ++ unwords (forDeps Installed.ccOptions), - variablePrefix ++ "_DEP_LIB_DIRS = " ++ unwords (forDeps Installed.libraryDirs), + variablePrefix ++ "_DEP_LIB_DIRS = " ++ unwords (wrap $ forDeps Installed.libraryDirs), variablePrefix ++ "_DEP_EXTRA_LIBS = " ++ unwords (forDeps Installed.extraLibraries), variablePrefix ++ "_DEP_LD_OPTS = " ++ unwords (forDeps Installed.ldOptions)] writeFile (distdir ++ "/package-data.mk") $ unlines xs where escape = foldr (\c xs -> if c == '#' then '\\':'#':xs else c:xs) [] - + wrap = map (\s -> "\'" ++ s ++ "\'") -- 1.7.10.4