Enable shared libs on OpenBSD
[ghc-hetmet.git] / ghc.mk
diff --git a/ghc.mk b/ghc.mk
index 159f15e..199e07a 100644 (file)
--- a/ghc.mk
+++ b/ghc.mk
@@ -43,7 +43,7 @@
 #     then we don't have to use -osuf/-hisuf.  We would have to install
 #     them in different places too, so we'd need ghc-pkg support for packages
 #     of different ways.
-#   * make PACKAGES generated by configure or sh boot?
+#   * make PACKAGES generated by './configure' or 'perl boot'?
 #   * we should use a directory of package.conf files rather than a single
 #     file for the inplace package database, so that we can express
 #     dependencies more accurately.  Otherwise it's possible to get into
@@ -101,6 +101,10 @@ endif
 just-makefiles:
        @:
 
+ifneq "$(CLEANING)" "YES"
+CLEANING = NO
+endif
+
 # -----------------------------------------------------------------------------
 # Misc GNU make utils
 
@@ -147,6 +151,11 @@ endif
 endif
 
 # -----------------------------------------------------------------------------
+# Utility definitions
+
+include rules/make-command.mk
+
+# -----------------------------------------------------------------------------
 # Macros for standard targets
 
 include rules/all-target.mk
@@ -270,6 +279,7 @@ include rules/build-package.mk
 include rules/build-package-way.mk
 include rules/haddock.mk
 include rules/tags-package.mk
+include rules/extra-packages.mk
 
 # -----------------------------------------------------------------------------
 # Registering hand-written package descriptions (used in libffi and rts)
@@ -289,20 +299,33 @@ include rules/bindist.mk
 # -----------------------------------------------------------------------------
 # Building libraries
 
-define addPackage # args: $1 = package, $2 = condition
-    ifneq "$2" ""
+define addPackageGeneral
+# args: $1 = PACKAGES variable, $2 = package, $3 = condition
+    ifeq "$3" ""
+        $1 += $2
+    else
         ifeq "$$(CLEANING)" "YES"
-            PACKAGES += $1
+            $1 += $2
         else
-            ifeq $2
-                PACKAGES += $1
+            ifeq $3
+                $1 += $2
             endif
         endif
-    else
-        PACKAGES += $1
     endif
 endef
 
+define addPackage # args: $1 = package, $2 = condition
+$(call addPackageGeneral,PACKAGES,$1,$2)
+endef
+
+define addPackage2 # args: $1 = package, $2 = condition
+$(call addPackageGeneral,PACKAGES_STAGE2,$1,$2)
+endef
+
+INTREE_ONLY_PACKAGES := haskeline mtl terminfo utf8-string xhtml
+
+$(foreach p,$(INTREE_ONLY_PACKAGES),$(eval libraries/$p_dist-install_HADDOCK_ME = NO))
+
 $(eval $(call addPackage,ghc-prim))
 ifeq "$(CLEANING)" "YES"
 $(eval $(call addPackage,integer-gmp))
@@ -327,6 +350,7 @@ $(eval $(call addPackage,process))
 $(eval $(call addPackage,random))
 $(eval $(call addPackage,extensible-exceptions))
 $(eval $(call addPackage,haskell98))
+$(eval $(call addPackage,haskell2010))
 $(eval $(call addPackage,hpc))
 $(eval $(call addPackage,pretty))
 $(eval $(call addPackage,template-haskell))
@@ -335,22 +359,16 @@ $(eval $(call addPackage,binary))
 $(eval $(call addPackage,bin-package-db))
 $(eval $(call addPackage,mtl))
 $(eval $(call addPackage,utf8-string))
+$(eval $(call addPackage,xhtml))
 
 $(eval $(call addPackage,terminfo,($$(Windows),NO)))
 
 $(eval $(call addPackage,haskeline))
 
-$(foreach pkg,$(EXTRA_PACKAGES),$(eval $(call addPackage,$(pkg))))
+$(eval $(call extra-packages))
+
+# ------------------------------------------------------- 
 
-ifneq "$(BootingFromHc)" "YES"
-PACKAGES_STAGE2 += \
-       dph/dph-base \
-       dph/dph-prim-interface \
-       dph/dph-prim-seq \
-       dph/dph-prim-par \
-       dph/dph-seq \
-       dph/dph-par
-endif
 
 # We assume that the stage0 compiler has a suitable bytestring package,
 # so we don't have to include it below.
@@ -402,6 +420,7 @@ ghc/stage2/package-data.mk: compiler/stage2/package-data.mk
 # libraries
 utils/haddock/dist/package-data.mk: compiler/stage2/package-data.mk
 
+utils/ghc-pkg/dist-install/package-data.mk: compiler/stage2/package-data.mk
 utils/hsc2hs/dist-install/package-data.mk: compiler/stage2/package-data.mk
 utils/compare_sizes/dist/package-data.mk: compiler/stage2/package-data.mk
 
@@ -487,8 +506,6 @@ libraries/ghc-prim_dist-install_EXTRA_HADDOCK_SRCS = libraries/ghc-prim/dist-ins
 #
 # The rest : libraries/*/dist-install, compiler/stage2, ghc/stage2
 
-BUILD_DIRS =
-
 ifneq "$(BINDIST)" "YES"
 BUILD_DIRS += \
    $(GHC_MKDIRHIER_DIR)
@@ -517,6 +534,7 @@ BUILD_DIRS += \
    driver \
    driver/ghci \
    driver/ghc \
+   driver/haddock \
    libffi \
    includes \
    rts
@@ -528,22 +546,15 @@ BUILD_DIRS += \
    $(GHC_GENAPPLY_DIR)
 endif
 
-ifneq "$(HADDOCK_DOCS)" "NO"
 BUILD_DIRS += \
    utils/haddock \
    utils/haddock/doc
-endif
 
 ifneq "$(CLEANING)" "YES"
 BUILD_DIRS += \
    $(patsubst %, libraries/%, $(PACKAGES))
 endif
 
-ifneq "$(BootingFromHc)" "YES"
-BUILD_DIRS += \
-   libraries/dph
-endif
-
 ifeq "$(INTEGER_LIBRARY)" "integer-gmp"
 BUILD_DIRS += libraries/integer-gmp/gmp
 endif
@@ -562,6 +573,11 @@ BUILD_DIRS += \
    $(GHC_TOUCHY_DIR)
 endif
 
+ifneq "$(BINDIST)" "YES"
+BUILD_DIRS += \
+   utils/mkUserGuidePart
+endif
+
 BUILD_DIRS += utils/count_lines
 BUILD_DIRS += utils/compare_sizes
 
@@ -588,18 +604,6 @@ ifneq "$(findstring $(phase),0 1 2)" ""
 ghc_stage1_DISABLE = YES
 endif
 
-ifneq "$(CLEANING)" "YES"
-ifeq "$(INTEGER_LIBRARY)" "integer-gmp"
-libraries/base_dist-install_CONFIGURE_OPTS += --flags=-integer-simple
-else
-    ifeq "$(INTEGER_LIBRARY)" "integer-simple"
-       libraries/base_dist-install_CONFIGURE_OPTS += --flags=integer-simple
-    else
-$(error Unknown integer library: $(INTEGER_LIBRARY))
-    endif
-endif
-endif
-
 ifneq "$(findstring $(phase),0 1 2 3)" ""
 # In phases 0-3, we disable stage2-3, the full libraries and haddock
 utils/haddock_dist_DISABLE = YES
@@ -608,6 +612,7 @@ utils/ghctags_dist_DISABLE = YES
 utils/hpc_dist_DISABLE = YES
 utils/hsc2hs_dist-install_DISABLE = YES
 utils/ghc-pkg_dist-install_DISABLE = YES
+utils/mkUserGuidePart_dist_DISABLE = YES
 utils/compare_sizes_dist_DISABLE = YES
 compiler_stage2_DISABLE = YES
 compiler_stage3_DISABLE = YES
@@ -617,6 +622,18 @@ $(foreach lib,$(PACKAGES) $(PACKAGES_STAGE2),$(eval \
   libraries/$(lib)_dist-install_DISABLE = YES))
 endif
 
+ifneq "$(CLEANING)" "YES"
+ifeq "$(INTEGER_LIBRARY)" "integer-gmp"
+libraries/base_dist-install_CONFIGURE_OPTS += --flags=-integer-simple
+else
+    ifeq "$(INTEGER_LIBRARY)" "integer-simple"
+       libraries/base_dist-install_CONFIGURE_OPTS += --flags=integer-simple
+    else
+$(error Unknown integer library: $(INTEGER_LIBRARY))
+    endif
+endif
+endif
+
 # These packages don't pass the Cabal checks because hs-source-dirs
 # points outside the source directory. This isn't a real problem in
 # these cases, so we just skip checking them.
@@ -644,15 +661,6 @@ GhcBootLibHcOpts += -fno-warn-deprecated-flags
 # Add $(GhcLibHcOpts) to all library builds
 $(foreach pkg,$(PACKAGES) $(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_HC_OPTS += $$(GhcLibHcOpts)))
 
-# XXX Hack; remove this
-# Use -Wwarn for dph
-$(foreach pkg,$(PACKAGES_STAGE2),$(eval libraries/$(pkg)_dist-install_HC_OPTS += -Wwarn))
-
-# XXX Hack; remove this
-# Use -Wwarn for 'binary' becuase it has redundant UNPACK pragmas
-libraries/binary_dist-install_HC_OPTS += -Wwarn
-libraries/binary_dist-boot_HC_OPTS += -Wwarn
-
 # ----------------------------------------------
 # A useful pseudo-target
 .PHONY: stage1_libs
@@ -876,7 +884,7 @@ INSTALLED_GHC_REAL=$(DESTDIR)$(bindir)/ghc.exe
 INSTALLED_GHC_PKG_REAL=$(DESTDIR)$(bindir)/ghc-pkg.exe
 endif
 
-INSTALLED_PACKAGES := $(filter-out haskeline mtl terminfo utf8-string,$(PACKAGES))
+INSTALLED_PACKAGES := $(filter-out $(INTREE_ONLY_PACKAGES),$(PACKAGES))
 ifeq "$(InstallExtraPackages)" "NO"
 INSTALLED_PACKAGES := $(filter-out $(EXTRA_PACKAGES), $(INSTALLED_PACKAGES))
 endif
@@ -905,18 +913,23 @@ install_packages: libffi/package.conf.install rts/package.conf.install
        $(INSTALL_DIR) "$(INSTALLED_PACKAGE_CONF)"
        "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf "$(INSTALLED_PACKAGE_CONF)" update libffi/package.conf.install
        "$(INSTALLED_GHC_PKG_REAL)" --force --global-conf "$(INSTALLED_PACKAGE_CONF)" update rts/package.conf.install
-       $(foreach p, $(ALL_INSTALLED_PACKAGES),\
-           "$(GHC_CABAL_INPLACE)" install \
-                "$(INSTALLED_GHC_REAL)" \
-                "$(INSTALLED_GHC_PKG_REAL)" \
-                "$(STRIP)" \
-                "$(DESTDIR)$(topdir)" \
-                $p $(INSTALL_DISTDIR_$p) \
-                '$(DESTDIR)' '$(prefix)' '$(ghclibdir)' '$(docdir)/html/libraries' \
-                $(RelocatableBuild) &&) true
-       $(foreach p, $(HIDDEN_PACKAGES),\
-           "$(INSTALLED_GHC_PKG_REAL)" --global-conf "$(INSTALLED_PACKAGE_CONF)" \
-                                     hide $p &&) true
+       $(foreach p, $(ALL_INSTALLED_PACKAGES),                       \
+           $(call make-command,                                      \
+                  "$(GHC_CABAL_INPLACE)" install                     \
+                                         "$(INSTALLED_GHC_REAL)"     \
+                                         "$(INSTALLED_GHC_PKG_REAL)" \
+                                         "$(STRIP_CMD)"              \
+                                         "$(DESTDIR)$(topdir)"       \
+                                         $p $(INSTALL_DISTDIR_$p)    \
+                                         '$(DESTDIR)'                \
+                                         '$(prefix)'                 \
+                                         '$(ghclibdir)'              \
+                                         '$(docdir)/html/libraries'  \
+                                         $(RelocatableBuild)))
+       $(foreach p, $(HIDDEN_PACKAGES),                                   \
+           $(call make-command,                                           \
+                  "$(INSTALLED_GHC_PKG_REAL)"                             \
+                      --global-conf "$(INSTALLED_PACKAGE_CONF)" hide $p))
 
 # -----------------------------------------------------------------------------
 # Binary distributions
@@ -931,6 +944,7 @@ $(eval $(call bindist,.,\
     INSTALL \
     configure config.sub config.guess install-sh \
     extra-gcc-opts.in \
+    packages \
     Makefile \
     mk/config.mk.in \
     $(INPLACE_BIN)/mkdirhier \
@@ -967,6 +981,9 @@ $(eval $(call bindist,.,\
        libraries/gen_contents_index \
        libraries/prologue.txt \
        libraries/dph/LICENSE \
+       libraries/dph/ghc-packages \
+       libraries/dph/ghc-packages2 \
+       libraries/dph/ghc-stage2-package \
  ))
 endif
 # mk/project.mk gets an absolute path, so we manually include it in
@@ -977,7 +994,7 @@ BIN_DIST_MK = $(BIN_DIST_PREP_DIR)/bindist.mk
 unix-binary-dist-prep:
        "$(RM)" $(RM_OPTS_REC) bindistprep/
        "$(MKDIRHIER)" $(BIN_DIST_PREP_DIR)
-       set -e; for i in LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh extra-gcc-opts.in ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
+       set -e; for i in packages LICENSE compiler ghc rts libraries utils docs libffi includes driver mk rules Makefile aclocal.m4 config.sub config.guess install-sh extra-gcc-opts.in ghc.mk inplace distrib/configure.ac distrib/README distrib/INSTALL; do ln -s ../../$$i $(BIN_DIST_PREP_DIR)/; done
        echo "HADDOCK_DOCS       = $(HADDOCK_DOCS)"       >> $(BIN_DIST_MK)
        echo "LATEX_DOCS         = $(LATEX_DOCS)"         >> $(BIN_DIST_MK)
        echo "BUILD_DOCBOOK_HTML = $(BUILD_DOCBOOK_HTML)" >> $(BIN_DIST_MK)
@@ -988,18 +1005,18 @@ unix-binary-dist-prep:
        "$(RM)" $(RM_OPTS) $(BIN_DIST_PREP_TAR)
 # h means "follow symlinks", e.g. if aclocal.m4 is a symlink to a source
 # tree then we want to include the real file, not a symlink to it
-       cd bindistprep && "$(TAR)" hcf - -T ../$(BIN_DIST_LIST) | bzip2 -c > ../$(BIN_DIST_PREP_TAR_BZ2)
+       cd bindistprep && "$(TAR_CMD)" hcf - -T ../$(BIN_DIST_LIST) | bzip2 -c > ../$(BIN_DIST_PREP_TAR_BZ2)
 
 windows-binary-dist-prep:
        "$(RM)" $(RM_OPTS_REC) bindistprep/
        $(MAKE) prefix=$(TOP)/$(BIN_DIST_PREP_DIR) install
-       cd bindistprep && "$(TAR)" cf - $(BIN_DIST_NAME) | bzip2 -c > ../$(BIN_DIST_PREP_TAR_BZ2)
+       cd bindistprep && "$(TAR_CMD)" cf - $(BIN_DIST_NAME) | bzip2 -c > ../$(BIN_DIST_PREP_TAR_BZ2)
 
 windows-installer:
-ifeq "$(ISCC)" ""
-       @echo No ISCC, so not making installer
+ifeq "$(ISCC_CMD)" ""
+       @echo No ISCC_CMD, so not making installer
 else
-       "$(ISCC)" /O. /Fbindistprep/$(WINDOWS_INSTALLER_BASE) - < distrib/ghc.iss
+       "$(ISCC_CMD)" /O. /Fbindistprep/$(WINDOWS_INSTALLER_BASE) - < distrib/ghc.iss
 endif
 
 # tryTimes tries to run its third argument multiple times, until it
@@ -1103,7 +1120,7 @@ sdist-prep :
 
 .PHONY: sdist
 sdist : sdist-prep
-       "$(TAR)" chf - $(SRC_DIST_NAME) 2>$src_log | bzip2 >$(TOP)/$(SRC_DIST_TARBALL)
+       "$(TAR_CMD)" chf - $(SRC_DIST_NAME) 2>$src_log | bzip2 >$(TOP)/$(SRC_DIST_TARBALL)
 
 sdist-manifest : $(SRC_DIST_TARBALL)
        tar tjf $(SRC_DIST_TARBALL) | sed "s|^ghc-$(ProjectVersion)/||" | sort >sdist-manifest