Hi ghc-devs,

 

I’m making a first attempt to make a frontend plugin, to resolve cabal packages 
in the GHC API. However I’m running into troubles with module resolution in the 
GHC API, because I can’t control where it will search for modules at all. I've 
attached a minimal example, with a frontend plugin definition that can’t find 
modules (Plugin.hs), and an equivalent standalone program that does (Main.hs). 

 

Specifically, I'm following a solution Edward Yang published in 2017 
(http://blog.ezyang.com/2017/02/how-to-integrate-ghc-api-programs-with-cabal/), 
where the frontend plugin is called through a helper script that passes flags 
forwarded from `cabal repl`. To test the plugin directly with GHC, I collected 
the args through the helper script and filtered them to the minimal set that 
made the plugin run:

 

  ghc --frontend Plugin -itarget -package-db dist-newstyle/packagedb/ghc-8.6.5 
Plugin -plugin-package sandbox -hide-all-packages

 

This, as well as the full argument set, would complain that it can't find the 
target module under `./target/A.hs`:

 

  <no location info>: error: module ‘A’ cannot be found locally

 

It does when the import path arg `-itarget` is absolute. Still, its 
`importPaths` are what I expect: [".", "target"], and the standalone program 
finds the target module with the same `importPaths`. I've tested this in GHC 
8.6.5, 8.4.2 and 8.2.2, making me sure I'm just missing something, but I 
haven’t found help in the docs yet. I really appreciate some help to draw my 
hours over this to a close!

 

Thanks,

Derek

 

PS the full invocation of the plugin (with absolute paths swapped with relative 
ones, except `-itarget` which was relative to begin with) is:

 

ghc --frontend Plugin -plugin-package sandbox -fbuilding-cabal-package -O0 
-outputdir dist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build -odir 
dist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build -hidir 
dist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build -stubdir 
dist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build -i 
-idist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build -i. -itarget 
-idist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build/autogen 
-idist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build/global-autogen 
-Idist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build/autogen 
-Idist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build/global-autogen 
-Idist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build -optP-include 
-optPdist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/build/autogen/cabal_macros.h
 -this-unit-id sandbox-0.1.0.0-inplace -hide-all-packages 
-Wmissing-home-modules -no-user-package-db -package-db 
/Users/derek-lam/.cabal/store/ghc-8.6.5/package.db -package-db 
dist-newstyle/packagedb/ghc-8.6.5 -package-db 
dist-newstyle/build/x86_64-osx/ghc-8.6.5/sandbox-0.1.0.0/package.conf.inplace 
-package-id base-4.12.0.0 -package-id ghc-8.6.5 -XHaskell2010 Plugin 
-hide-all-packages

Attachment: plugin.tar.gz
Description: GNU Zip compressed data

_______________________________________________
ghc-devs mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to