Skip to content

Test framework should not assume that GHC tools are in the same directory as GHC itself

The GHC test framework assumes that the GHC tools (ghc-pkg, runghc, hsc2hs, etc) are always in the same directory as ghc itself

While this is probably a safe assumption for "in-tree" compilers, it's not necessarily true for "out-of-tree" compilers. For example, I currently have a thin wrapper of ghc in $HOME/bin/ghc, which causes the test framework to think that ghc-pkg is in $HOME/bin/ghc-pkg.

I think the restriction should be relaxed as long as TEST_HC is not specified and an out-of-tree compiler is used.

I suggest changing testsuite/mk/boilerplate.mk in the following way:

@@ -56,6 +56,7 @@ TEST_HC := $(STAGE2_GHC)
 endif

 else
+implicit_compiler = YES
 IN_TREE_COMPILER = NO
 TEST_HC := $(shell which ghc)
 endif
@@ -87,24 +88,30 @@ endif
 # containing spaces
 BIN_ROOT = $(shell dirname '$(TEST_HC)')

+ifeq "$(implicit_compiler)" "YES"
+find_tool = $(shell which $(1))
+else
+find_tool = $(BIN_ROOT)/$(1)
+endif
+
 ifeq "$(GHC_PKG)" ""
-GHC_PKG := $(BIN_ROOT)/ghc-pkg
+GHC_PKG := $(call find_tool,ghc-pkg)
 endif

 ifeq "$(RUNGHC)" ""
-RUNGHC := $(BIN_ROOT)/runghc
+RUNGHC := $(call find_tool,runghc)
 endif

 ifeq "$(HSC2HS)" ""
-HSC2HS := $(BIN_ROOT)/hsc2hs
+HSC2HS := $(call find_tool,hsc2hs)
 endif

 ifeq "$(HP2PS_ABS)" ""
-HP2PS_ABS := $(BIN_ROOT)/hp2ps
+HP2PS_ABS := $(call find_tool,hp2ps)
 endif

 ifeq "$(HPC)" ""
-HPC := $(BIN_ROOT)/hpc
+HPC := $(call find_tool,hpc)
 endif

 $(eval $(call canonicaliseExecutable,TEST_HC))
Trac metadata
Trac field Value
Version 7.8.4
Type FeatureRequest
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Test Suite
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information