The behavior of `-hidir` and `-i` changed in response to this issue: https://gitlab.haskell.org/ghc/ghc/-/issues/16500
We just ran into this and I think the change is unfortunate. I don't think `-hidir` (a flag about output) should override the input search flag. I would like it to at least merge the two so it searches both the `-hidir` and the `-i`s rather than overriding. Reverting the change would be fine too (I think) because you can always specify the same path as `-hidir` and `-i`. As it is now, you can control *both* the input and the output. On Sat, Oct 23, 2021 at 4:26 PM Carter Schonwald <[email protected]> wrote: > Could be! I’m far from a computer much of this week > > On Sat, Oct 23, 2021 at 2:36 PM Brandon Allbery <[email protected]> > wrote: > >> I would expect that to be -I and for -i to specify module paths (which >> might well mean .hi). >> >> On Sat, Oct 23, 2021 at 2:32 PM Carter Schonwald < >> [email protected]> wrote: >> >>> I would assume the -i is for include c header search paths but I >>> could be wrong >>> >>> On Sat, Oct 23, 2021 at 6:00 AM Oleg Grenrus <[email protected]> >>> wrote: >>> >>>> This looks like a bug. >>>> >>>> -hidir documentation says >>>> >>>> > Redirects all generated interface files into ⟨dir⟩, instead of the >>>> default. >>>> > Please also note that when doing incremental compilation (by ghc >>>> --make or ghc -c), this directory is where GHC looks into to find interface >>>> files. >>>> >>>> And documentation for -i doesn't mention looking for interface files. >>>> >>>> So by doing >>>> >>>> % ghc -dynamic-too -c lib/Lib.hs -odir odir -hidir hidir_Lib >>>> % ghc -dynamic-too -c Main.hs -odir odir -hidir hidir_Main -ihidir_Lib >>>> 1 >>>> % ghc odir/Lib.o odir/Main.o -o Demo >>>> % ./Demo >>>> True >>>> >>>> everything compiles, TH is run, and demo works. The result files are >>>> >>>> % find . >>>> . >>>> ./Demo >>>> ./Main.hs >>>> ./hidir_Main >>>> ./hidir_Main/Main.dyn_hi >>>> ./hidir_Main/Main.hi >>>> ./odir >>>> ./odir/Main.dyn_o >>>> ./odir/Main.o >>>> ./odir/Lib.dyn_o >>>> ./odir/Lib.o >>>> ./hidir_Lib >>>> ./hidir_Lib/Lib.dyn_hi >>>> ./hidir_Lib/Lib.hi >>>> ./lib >>>> ./lib/Lib.hs >>>> >>>> --- >>>> >>>> The confusing error is caused by Lib module in libiserv: >>>> https://hackage.haskell.org/package/libiserv >>>> which GHC picks! >>>> >>>> If we rename your Lib module to Library, the error is way better: Could >>>> not find module ‘Library’ >>>> >>>> I also tried using same -hidir when compiling both modules, then GHC >>>> still cannot find the Library interface, even the documentation says it >>>> should. >>>> >>>> Please open a GHC issue at https://gitlab.haskell.org/ghc/ghc/-/issues >>>> >>>> >>>> >>>> - Oleg >>>> On 22.10.2021 19.16, Domínguez, Facundo wrote: >>>> >>>> Dear devs, >>>> >>>> I'm confused about the meaning of -hidir and -i. Here's my experiment >>>> with both ghc-9.2.0 and ghc-8.10.4. >>>> >>>> > $ find >>>> > ./Main.hs >>>> > ./lib/Lib.hs >>>> > >>>> > $ ghc -dynamic-too -c lib/Lib.hs -odir odir -hidir hidir_Lib >>>> > >>>> > $ ghc -dynamic-too -c Main.hs -odir odir -ihidir_Lib -hidir hidir_Main >>>> > >>>> > Main.hs:3:1: error: >>>> > Bad interface file: hidir_Main/Lib.hi >>>> > hidir_Main/Lib.hi: openBinaryFile: does not exist (No such >>>> file or directory) >>>> > | >>>> > 3 | import Lib >>>> > | ^^^^^^^^^^ >>>> >>>> If I only use -hidir, it still fails with another error >>>> >>>> > $ ghc -dynamic-too -c Main.hs -odir odir -hidir hidir_Lib >>>> > >>>> > Main.hs:7:29: error: Variable not in scope: f >>>> > | >>>> > 7 | main = print $(runIO (print f) >> [| True |]) >>>> > | ^ >>>> >>>> If I use both -i and -hidir pointing to the same folder, then it works! >>>> >>>> > $ ghc -dynamic-too -c Main.hs -odir odir -ihidir_Lib -hidir hidir_Lib >>>> >>>> Now, is this behavior a bug or a feature? And if it is a bug, what is >>>> the expected behavior? >>>> >>>> Programs copied below. >>>> >>>> Thank you! >>>> Facundo >>>> >>>> > $ cat lib/Lib.hs >>>> > module Lib where >>>> > >>>> > f :: Int >>>> > f = 1 >>>> > >>>> > $ cat Main.hs >>>> > {-# LANGUAGE TemplateHaskell #-} >>>> > >>>> > import Lib >>>> > import Language.Haskell.TH <http://language.haskell.th/> >>>> > >>>> > main :: IO () >>>> > main = print $(runIO (print f) >> [| True |]) >>>> >>>> _______________________________________________ >>>> ghc-devs mailing >>>> [email protected]http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >>>> >>>> _______________________________________________ >>>> ghc-devs mailing list >>>> [email protected] >>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >>>> >>> _______________________________________________ >>> ghc-devs mailing list >>> [email protected] >>> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >>> >> >> >> -- >> brandon s allbery kf8nh >> [email protected] >> > _______________________________________________ > ghc-devs mailing list > [email protected] > http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >
_______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
