[GHC] #16055: libffi build logic is quite spread out

#16055: libffi build logic is quite spread out -------------------------------------+------------------------------------- Reporter: mpickering | Owner: (none) Type: task | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.6.3 Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- The rules for building libffi are in `Rules.Libffi` and at a first glance they just use the normal `Make` builder in order to build the project. However, if one looks carefully, you actually need to run `make install` so the normal `Make` builder has an argument appended in `Settings.Builders.Make`. The problem here is that the two modules are completely unrelated to each other. In order to discover this I had to wonder why the build was failing to copy a file and then by chance guess that it wasn't running `make install`. I think grepped for `"install"` and managed to find this additional rule. Is there a way to move this logic into one place? I considered two possibilities but it didn't seem to be "how things are done". 1. Modify the `Make` builder to take an additional argument which indicates whether to add the `install` flag. 2. Move the override of `Make` for libffi into `Rules.Libffi` and then import it into `Settings.Builders.Make`. This seems better but you still not entirely obvious what is going on. Do the hadrian experts have any opinion on this? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16055 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#16055: libffi build logic is quite spread out -------------------------------------+------------------------------------- Reporter: mpickering | Owner: (none) Type: task | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.6.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by bgamari): * cc: alpmestan, snowleopard (added) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16055#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler

#16055: libffi build logic is quite spread out -------------------------------------+------------------------------------- Reporter: mpickering | Owner: (none) Type: task | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.6.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by snowleopard):
The problem here is that the two modules are completely unrelated to each other.
Note that the situation is the same across all build rules, not just `libffi`: the build rule and the command line flags of the corresponding builder(s) are specified in different modules.
1. Modify the Make builder to take an additional argument which indicates whether to add the install flag.
This may be consistent with so-called builder modes, e.g. see `GhcMode`, `ArMode`, etc. We could have `MakeMode`, one possible choice could be: {{{ data MakeMode = Default | BuildGMP | InstallLibFFI }}} Not only this allows us to get red of stringly-typed builder `Make FilePath`, but also it makes it clearer that some invocations of Make pass the `install` flag. This seems to be more consistent with how things are currently done, although we could of course have exceptions if they make code clearer. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/16055#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler
participants (1)
-
GHC