ifeq "$(IS_CBITS_LIB)" "YES"
override datadir:=$(libdir)/include
-INSTALL_DATAS += Hs$(shell perl -e 'print ucfirst "$(PACKAGE)"').h
else
SRC_CC_OPTS += -Icbits
endif
SRC_HC_OPTS += -split-objs
+# We generate the archive into a temporary file libfoo.a.tmp, then
+# rename it at the end. This avoids the problem that ar may sometimes
+# fail, leaving a partially built archive behind.
ifeq "$(ArSupportsInput)" ""
define BUILD_LIB
-$(RM) $@
-(echo $(STUBOBJS); $(FIND) $(patsubst %.$(way_)o,%,$(LIBOBJS)) -name '*.$(way_)o') | xargs ar q $@
-$(RANLIB) $@
+$(RM) $@ $@.tmp
+(echo $(STUBOBJS); $(FIND) $(patsubst %.$(way_)o,%,$(LIBOBJS)) -name '*.$(way_)o') | xargs ar q $@.tmp
+$(RANLIB) $@.tmp
+$(MV) $@.tmp $@
endef
else
define BUILD_LIB
-$(RM) $@
+$(RM) $@ $@.tmp
echo $(STUBOBJS) > $@.list
$(FIND) $(patsubst %.$(way_)o,%,$(LIBOBJS)) -name '*.$(way_)o' >> $@.list
-$(AR) $(AR_OPTS) $@ $(ArSupportsInput) $@.list
+$(AR) $(AR_OPTS) $@.tmp $(ArSupportsInput) $@.list
$(RM) $@.list
-$(RANLIB) $@
+$(RANLIB) $@.tmp
+$(MV) $@.tmp $@
endef
endif
$(RM) $@; if [ ! -d $(basename $@) ]; then mkdir $(basename $@); else \
$(FIND) $(basename $@) -name '*.$(way_)o' | xargs $(RM) __rm_food; fi
ifeq "$(GhcWithInterpreter)" "YES"
-HC_SPLIT_POST = $(LD) -r -x -o $@ $(basename $@)/*.$(way_)o
+HC_SPLIT_POST = $(LD) -r $(LD_X) -o $@ $(basename $@)/*.$(way_)o
else
HC_SPLIT_POST = touch $@
endif # GhcWithInterpreter == YES
ifeq "$(SplitObjs)" "YES"
SRC_HC_POST_OPTS += \
for i in $(basename $@)/*; do \
- $(LD) -r -x -o $$i.tmp $$i; \
+ $(LD) -r $(LD_X) -o $$i.tmp $$i; \
$(MV) $$i.tmp $$i; \
done
else
SRC_HC_POST_OPTS += \
- $(LD) -r -x -o $@.tmp $@; $(MV) $@.tmp $@
+ $(LD) -r $(LD_X) -o $@.tmp $@; $(MV) $@.tmp $@
endif # SplitObjs
endif # StripLibraries
# hslibs/Win32 uses this 'feature'.
#
$(GHCI_LIBRARY) :: $(LIBOBJS)
- $(LD) -r -x -o $@ $(LIBOBJS) $(STUBOBJS)
+ $(LD) -r $(LD_X) -o $@ $(LIBOBJS) $(STUBOBJS)
endif # DONT_WANT_STD_GHCI_LIB_RULE
endif # GhcWithInterpreter
done
endif
-ifneq "$(INSTALL_DOCS) $(INSTALL_SGML_DOC)" ""
-install-docs:: $(INSTALL_DOCS) $(foreach j,$(SGMLDocWays),$(INSTALL_SGML_DOC).$j)
- @$(INSTALL_DIR) $(datadir)
+ifneq "$(INSTALL_DOCS)" ""
+install-docs:: $(INSTALL_DOCS)
+ @$(INSTALL_DIR) $(datadir)
for i in $(INSTALL_DOCS); do \
$(INSTALL_DATA) $(INSTALL_OPTS) $$i $(datadir); \
done
+endif
+
+ifneq "$(INSTALL_SGML_DOC)" ""
+ifneq "$(SGMLDocWays)" ""
+install-docs:: $(foreach i,$(SGMLDocWays),$(INSTALL_SGML_DOC).$i)
+ @$(INSTALL_DIR) $(datadir)
for i in $(SGMLDocWays); do \
- if [ $$j = "html" ]; then \
+ if [ $$i = "html" ]; then \
$(CP) -r $(INSTALL_SGML_DOC) $(datadir); \
else \
- $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_SGML_DOC).$$j $(datadir); \
+ $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_SGML_DOC).$$i $(datadir); \
fi \
done
endif
+endif
#
# Use with care..