
On Mon, Jul 02, 2007 at 08:41:31PM +0100, Neil Mitchell wrote:
Hi,
I'd like to change where Yhc puts generated files. I propose:
Every module gets assigned a "root" directory: * foo/Main.hs has a root of "foo". * foo/System/Cmd.hs, module System.Cmd, has a root of "foo". * foo/System/Cmd.hs, module Cmd, has a root of "foo/System".
(Note that this is already done when searching for imports)
Every file with <ext> (where ext is one of hi, hbc,ycr,yca) will be created in:
* foo/Main.hs leads to foo/<dir-ext>/Main.<ext> * foo/System/Cmd.hs, module System.Cmd, leads to foo/<dir-ext>/System.Cmd.<ext>
By default, <dir-ext> is "obj" for all extensions. The flag objdir will allow the default <dir-ext> to be changed. The flag <ext>dir will allow the location of <ext> files to be changed. For example --hidir=hi would put all the hi files in foo/hi/Main.hi. --objdir=bar will put all generated files in foo/bar/*.*.
There is exactly one exception to this rule:
foo/Foo.hs, module Main, creates foo/Foo.hbc, in all circumstances.
Comments? If the argument you use relies on some other compiler (GCC/GHC) doing something different, please say _why_ that compilers behaviour is preferable.
The reason for this change is that I have written a low-level Make library, and therefore want to port Yhc to use this. I could re-implement the existing behaviour, but once you sit down and take a close look at the existing behaviour, it starts to look more and more silly. The existing make facilities are around ~22Kb of source, the new one will have a separate well defined library of ~7Kb, and a Yhc specific part of ~3Kb. For free we will get minimal compilation, cycle detection (and breaking using hand written .hi files), minimal file tests etc.
As part of this move to a new make architecture, I want Yhc to be able to compile the base library by simply invoking yhc *.hs, I want linking of .yca files to work better, and I want world peace.
I also hope that once the Make library has been tested in the context of Yhc, it can be shoved in the direction of the Cabal people.
This sounds like a very reasonable proposal, and I will take it for my project as well. My only concern is that some projects have obj/ dirs containing very important sources (3D object models, etc) so we will need to be a bit careful in the implementation of clean. Also, when you say 3kb yhc-specific - how much of that relates to invoking yhc, and how much is for building yhc? Stefan