[project @ 2004-02-03 10:50:46 by simonmar]
[ghc-hetmet.git] / mk / target.mk
index 1e9a4d4..911c21d 100644 (file)
@@ -44,6 +44,11 @@ PRE_SRCS := $(ALL_SRCS)
 
 include $(TOP)/mk/package.mk
 
+###################################################################
+# Suffix rules for Haskell, C and literate 
+
+include $(TOP)/mk/suffix.mk
+
 ##################################################################
 #              FPtools standard targets
 #
@@ -72,7 +77,11 @@ include $(TOP)/mk/package.mk
 # Compiler produced files that are targets of the source's imports.
 MKDEPENDHS_OBJ_SUFFICES=o
 
-depend :: $(MKDEPENDHS_SRCS) $(MKDEPENDC_SRCS)
+ifneq "$(BootingFromHc)" "YES"
+PKGCONF_DEP = $(STAMP_PKG_CONF)
+endif
+
+depend :: $(MKDEPENDHS_SRCS) $(MKDEPENDC_SRCS) $(PKGCONF_DEP)
        @$(RM) .depend
        @touch .depend
 ifneq "$(DOC_SRCS)" ""
@@ -169,7 +178,7 @@ endif
 # `TAGS'
 #      Update a tags table for this program.
 # 
-# `dvi' `ps' `pdf' `html' `pdf'
+# `dvi' `ps' `pdf' `html' `rtf' 
 #      Generate DVI/PS/PDF files for LaTeX/DocBook docs. Not everything is
 #      supported everywhere, but the intention is to standardise on DocBook
 #      producing all formats.
@@ -225,16 +234,13 @@ ifneq "$(HS_PROG)" ""
 all :: $(HS_PROG)
 
 ifneq "$(BootingFromHc)" "YES"
-$(HS_PROG) :: $(HS_OBJS)
-       $(HC) -o $@ $(HC_OPTS) $(LD_OPTS) $(HS_OBJS)
+$(HS_PROG) :: $(OBJS)
+       $(HC) -o $@ $(HC_OPTS) $(LD_OPTS) $(OBJS)
 else
 # see bootstrap.mk
-$(HS_PROG) :: $(HS_OBJS)
-       $(CC) -o $@ $(HC_BOOT_CC_OPTS) $(HC_BOOT_LD_OPTS) $(HS_OBJS) $(HC_BOOT_LIBS)
+$(HS_PROG) :: $(OBJS)
+       $(CC) -o $@ $(HC_BOOT_CC_OPTS) $(HC_BOOT_LD_OPTS) $(OBJS) $(HC_BOOT_LIBS)
 endif
-
-# for building a Haskell program, we add FptoolsHcOpts
-SRC_HC_OPTS += $(FptoolsHcOpts)
 endif
 
 #----------------------------------------
@@ -296,19 +302,19 @@ SRC_HC_OPTS += -split-objs
 ifeq "$(ArSupportsInput)" ""
 define BUILD_LIB
 $(RM) $@ $@.tmp
-(echo $(STUBOBJS); $(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o') | xargs ar q $@.tmp
-$(RANLIB) $@.tmp
-$(MV) $@.tmp $@
+(echo $(STUBOBJS) $(C_OBJS) $(GC_C_OBJS); $(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o' -print) | xargs $(AR) $@
+$(RANLIB) $@
 endef
 else
 define BUILD_LIB
 $(RM) $@ $@.tmp
 echo $(STUBOBJS) > $@.list
-$(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o' >> $@.list
-$(AR) $(AR_OPTS) $@.tmp $(ArSupportsInput) $@.list
+echo $(C_OBJS) >> $@.list
+echo $(GC_C_OBJS) >> $@.list
+$(FIND) $(patsubst %.$(way_)o,%_split,$(HS_OBJS)) -name '*.$(way_)o' -print >> $@.list
+$(AR) $(AR_OPTS) $@ $(ArSupportsInput) $@.list
 $(RM) $@.list
-$(RANLIB) $@.tmp
-$(MV) $@.tmp $@
+$(RANLIB) $@
 endef
 endif
 
@@ -316,9 +322,9 @@ endif
 
 HC_SPLIT_PRE = \
     $(RM) $@; if [ ! -d $(basename $@)_split ]; then mkdir $(basename $@)_split; else \
-    $(FIND) $(basename $@)_split -name '*.$(way_)o' | xargs $(RM) __rm_food; fi
+    $(FIND) $(basename $@)_split -name '*.$(way_)o' -print | xargs $(RM) __rm_food; fi
 ifeq "$(GhcWithInterpreter)" "YES"
-HC_SPLIT_POST = $(LD) -r $(LD_X) -o $@ $(basename $@)_split/*.$(way_)o
+HC_SPLIT_POST = (cd $(dir $@) && $(LD) -r $(LD_X) -o $(notdir $@) $(basename $(notdir $@))_split/*.$(way_)o)
 else
 HC_SPLIT_POST = touch $@
 endif # GhcWithInterpreter == YES
@@ -616,11 +622,11 @@ $(LINK) : $(LINK_TARGET)
 install ::
        @$(INSTALL_DIR) $(bindir)
        @if ( $(PERL) -e '$$fn="$(bindir)/$(LINK)"; exit ((! -f $$fn || -l $$fn) ? 0 : 1);' ); then \
-          echo "Creating a symbol link from $(LINK_TARGET) to $(LINK) in $(bindir)"; \
+          echo "Creating a symbolic link from $(LINK_TARGET) to $(LINK) in $(bindir)"; \
           $(RM) $(bindir)/$(LINK); \
           $(LN_S) $(LINK_TARGET) $(bindir)/$(LINK); \
         else \
-          echo "Creating a symbol link from $(LINK_TARGET) to $(LINK) in $(bindir) failed: \`$(bindir)/$(LINK)' already exists"; \
+          echo "Creating a symbolic link from $(LINK_TARGET) to $(LINK) in $(bindir) failed: \`$(bindir)/$(LINK)' already exists"; \
           echo "Perhaps remove \`$(bindir)/$(LINK)' manually?"; \
           exit 1; \
         fi;
@@ -643,6 +649,7 @@ endif # LINK
 #      INSTALL_LIB_SCRIPTS  platform-dependent scripts   in $(libdir)
 #      INSTALL_LIBEXECS     platform-dependent execs in $(libdir)
 #      INSTALL_DATAS        platform-independent files in $(datadir)
+#      INSTALL_IFACES       platform-dependent interface files in $(ifacedir)
 #
 # If the installation directory variable is undefined, the install rule simply
 # emits a suitable error message.
@@ -763,11 +770,19 @@ install:: $(INSTALL_DATAS)
        done
 endif
 
-ifneq "$(INSTALL_DATAS_WITH_DIRS)" ""
-install:: $(INSTALL_DATAS_WITH_DIRS)
-       @$(INSTALL_DIR) $(datadir)
-       for i in $(INSTALL_DATAS_WITH_DIRS); do \
-               $(INSTALL_DATA) $(INSTALL_OPTS) $$i $(datadir)/`dirname $$i`; \
+ifneq "$(INSTALL_IFACES)" ""
+install:: $(INSTALL_IFACES)
+       @$(INSTALL_DIR) $(ifacedir)
+       for i in $(INSTALL_IFACES); do \
+               $(INSTALL_DATA) $(INSTALL_OPTS) $$i $(ifacedir); \
+       done
+endif
+
+ifneq "$(INSTALL_IFACES_WITH_DIRS)" ""
+install:: $(INSTALL_IFACES_WITH_DIRS)
+       @$(INSTALL_DIR) $(ifacedir)
+       for i in $(INSTALL_IFACES_WITH_DIRS); do \
+               $(INSTALL_DATA) $(INSTALL_OPTS) $$i $(ifacedir)/`dirname $$i`; \
        done
 endif
 
@@ -791,10 +806,13 @@ ifneq "$(INSTALL_SGML_DOC)" ""
 ifneq "$(SGMLDocWays)" ""
 install-docs:: $(foreach i,$(SGMLDocWays),$(INSTALL_SGML_DOC).$i)
        @$(INSTALL_DIR) $(datadir)      
-       for i in $(SGMLDocWays); do \
+       @for i in $(SGMLDocWays); do \
                if [ $$i = "html" ]; then \
-                       $(CP) -r $(INSTALL_SGML_DOC) $(datadir); \
+                       $(INSTALL_DIR) $(datadir)/html; \
+                       echo $(CP) -r $(INSTALL_SGML_DOC) $(datadir)/html; \
+                       $(CP) -r $(INSTALL_SGML_DOC) $(datadir)/html; \
                else \
+                       echo $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_SGML_DOC).$$i $(datadir); \
                        $(INSTALL_DATA) $(INSTALL_OPTS) $(INSTALL_SGML_DOC).$$i $(datadir); \
                fi \
        done
@@ -866,7 +884,7 @@ tags TAGS:: $(TAGS_HS_SRCS) $(TAGS_C_SRCS)
        @$(RM) TAGS
        @touch TAGS
 ifneq "$(TAGS_HS_SRCS)" ""
-       $(HSTAGS) $(HSTAGS_OPTS) -- $(TAGS_HS_SRCS)
+       $(HSTAGS) $(HSTAGS_OPTS) $(TAGS_HS_SRCS)
 endif
 ifneq "$(TAGS_C_SRCS)" ""
        etags -a $(TAGS_C_SRCS)
@@ -1100,6 +1118,7 @@ endif
 # the --no-print-directory flag which is passed to recursive
 # invocations of make.
 #
+#ifeq "$(way)" ""
 ifneq "$(SUBDIRS)" ""
 
 # we override the 'boot', 'all' and 'install' targets in the top
@@ -1146,6 +1165,7 @@ $(ALL_TARGET) docs runtests $(BOOT_TARGET) TAGS clean distclean mostlyclean main
        @echo "------------------------------------------------------------------------"
 
 endif
+#endif
 
 #
 # Selectively building subdirectories.