TH_spliceE5_prof is failing with release candidate 8.0.1
TH_spliceE5_prof looks like this:
TH_spliceE5_prof::
$(RM) TH_spliceE5_prof*.o TH_spliceE5_prof*.hi TH_spliceE5_prof*.dyn_o TH_spliceE5_prof*.dyn_hi TH_spliceE5_prof
'$(TEST_HC)' $(TEST_HC_OPTS) $(HC_OPTS) $(ghcThWayFlags) --make -v0 TH_spliceE5_prof.hs -c
'$(TEST_HC)' $(TEST_HC_OPTS) $(HC_OPTS) --make -v0 TH_spliceE5_prof.hs -prof -auto-all -osuf .p.o -o $@
./$@
In 4905b83a, Simon added that $(ghcThWayFlags) to the first compilation command. With a release compiler, ghcThWayFlags defaults to -dynamic. But compiling with -dynamic doesn't produce .dyn_o files (you need -dynamic-too for that, which is enabled by -XTemplateHaskell, but **not** when compiling with -dynamic), so the second compilation results in:
TH_spliceE5_prof.hs:8:17: fatal:
cannot find object file ‘./TH_spliceE5_prof_Lib.dyn_o’
while linking an interpreted expression
make[1]: *** [TH_spliceE5_prof] Error 1
*** unexpected failure for TH_spliceE5_prof(normal)
Not passing -dynamic fixes the test. But in the function failNonStd in compiler/ghci/Linker.hs Simon suggests that passing -dynamic is necessary:
Cannot load -prof objects when GHC is built with -dynamic
To fix this, either:
(1) Use -fexternal-interprter, or
(2) Build the program twice: once with -dynamic, and then
with -prof using -osuf to set a different object file suffix.
Some ideas for a solution:
- change that message to not mention
-dynamic - always turn on
-dynamic-toowhen-XTemplateHaskellis on, also when using-dynamic - find the place where
.dyn_ois expected, and teach it that.omight also be ok. - make
-fexternal-interpreterthe default. Delete the test and a whole bunch of other stuff.
It's all such a mess.
Edited by Thomas Miedema