+STAMP_PKG_CONF = $(GHC_DRIVER_DIR)/stamp-pkg-conf-$(PACKAGE)
+CLEAN_FILES += $(STAMP_PKG_CONF)
+
+ifneq "$(BootingFromHc)" "YES"
+boot all :: $(STAMP_PKG_CONF)
+endif
+
+$(STAMP_PKG_CONF) : package.conf.inplace package.conf.installed
+ $(GHC_PKG_INPLACE) --update-package <package.conf.inplace
+ $(GHC_PKG_INPLACE) -f $(GHC_DRIVER_DIR)/package.conf --update-package <package.conf.installed
+ @touch $(STAMP_PKG_CONF)
+
+CLEAN_FILES += package.conf.installed package.conf.inplace
+
+else # $(STANDALONE_PACKAGE) == "YES"
+
+PACKAGE_CPP_OPTS += -DPACKAGE=\"${PACKAGE}\"
+PACKAGE_CPP_OPTS += -DPACKAGE_DEPS='$(patsubst %,"%"$(comma),$(PACKAGE_DEPS))'
+PACKAGE_CPP_OPTS += -DLIBRARY=\"HS$(PACKAGE)\"
+PACKAGE_CPP_OPTS += -DLIBDIR=\"$(libdir)\"
+PACKAGE_CPP_OPTS += -DFPTOOLS_TOP_ABS=\"${FPTOOLS_TOP_ABS}\"
+
+# Let the package configuration file refer to $(libdir) as
+# ${pkglibdir}. Note we can't use ${libdir} because ghc-pkg already
+# redefines it to point to GHC's libdir (bug or feature?).
+#
+install :: package.conf.installed
+ $(GHC_PKG) --force --update-package <package.conf.installed
+
+# Invoke this rule by hand in order to use the package in-place
+install-inplace-pkg : package.conf.inplace
+ $(GHC_PKG) --force --update-package <package.conf.inplace
+
+endif # $(STANDALONE_PACKAGE)