TOP=../..
include $(TOP)/mk/boilerplate.mk
-HS_PROG = ghctags
SRC_HC_OPTS += -package ghc
-HC=/usr/local/bin/ghc
-CLEAN_FILES += Main.hi
+HC=$(GHC_STAGE1)
-INSTALL_PROGS += $(HS_PROG)
+# On Windows, ghc-pkg is a standalone program
+# ($bindir/ghc-pkg.exe), whereas on Unix it needs a wrapper script
+# to pass the appropriate flag to the real binary
+# ($libexecdir/ghc-pkg.bin) so that it can find package.conf.
+ifeq "$(HOSTPLATFORM)" "i386-unknown-mingw32"
+HS_PROG = ghctags.exe
+INSTALL_PROGS += $(HS_PROG)
+else
+HS_PROG = ghctags.bin
+INSTALL_LIBEXECS += $(HS_PROG)
+endif
+
+# -----------------------------------------------------------------------------
+# ghctags and ghctags-inplace scripts
+
+# See commentary in ../ghc-pkg/Makefile
+
+INPLACE_HS=ghctags-inplace.hs
+INPLACE_PROG=ghctags-inplace
+EXCLUDED_SRCS+=$(INPLACE_HS)
+
+$(INPLACE_HS): Makefile $(FPTOOLS_TOP)/mk/config.mk
+ echo "import System.Cmd; import System.Environment; import System.Exit" > $@
+ echo "main = do args <- getArgs; rawSystem \"$(FPTOOLS_TOP_ABS)/$(GHC_GHCTAGS_DIR_REL)/$(HS_PROG)\" (\"--topdir\":\"$(FPTOOLS_TOP_ABS)\":args) >>= exitWith" >> $@
+
+$(INPLACE_PROG): $(INPLACE_HS)
+ $(HC) --make $< -o $@
+
+all :: $(INPLACE_PROG)
+
+CLEAN_FILES += $(INPLACE_HS) $(INPLACE_PROG)
+
+ifneq "$(HOSTPLATFORM)" "i386-unknown-mingw32"
+LINK = ghctags
+LINK_TARGET = $(LINK)-$(ProjectVersion)
+INSTALLED_SCRIPT=$(DESTDIR)$(bindir)/$(LINK_TARGET)
+install::
+ $(INSTALL_DIR) $(DESTDIR)$(bindir)
+ $(RM) -f $(INSTALLED_SCRIPT)
+ echo "#!$(SHELL)" >> $(INSTALLED_SCRIPT)
+ echo "GHCTAGSBIN=$(libexecdir)/$(HS_PROG)" >> $(INSTALLED_SCRIPT)
+ echo "TOPDIR=$(libdir)" >> $(INSTALLED_SCRIPT)
+ echo 'exec $$GHCTAGSBIN --topdir $$TOPDIR $${1+"$$@"}' >> $(INSTALLED_SCRIPT)
+ $(EXECUTABLE_FILE) $(INSTALLED_SCRIPT)
+endif
+
+binary-dist:
+ $(INSTALL_DIR) $(BIN_DIST_DIR)/utils/ghctags
+ $(INSTALL_DATA) Makefile $(BIN_DIST_DIR)/utils/ghctags/
+ $(INSTALL_PROGRAM) $(HS_PROG) $(BIN_DIST_DIR)/utils/ghctags/
include $(TOP)/mk/target.mk