Preliminary bindist rule (#555)
authorAlp Mestanogullari <alpmestan@gmail.com>
Tue, 3 Apr 2018 16:22:55 +0000 (18:22 +0200)
committerAndrey Mokhov <andrey.mokhov@gmail.com>
Tue, 3 Apr 2018 16:22:55 +0000 (17:22 +0100)
* Preliminary bindist rule

For now, we only ship `<build root>/{bin, lib}` and the few make build system
related files that are needed to support a simple

```
./configure [--prefix=PATH] && make install
```

workflow. The current binary distributions of GHC support a wider range
of parameters, but I figured it would be a good thing to start with this
and enhance it as we all see fit and perhaps using feedback from GHC HQ
(@bgamari in particular) and bindist users.

* document binary distribution rule in README

* sdist-ghc -> source-dist, Rules.Bindist -> Rules.BinaryDist

README.md
cfg/system.config.in
hadrian.cabal
src/Builder.hs
src/Builder.hs-boot
src/Rules.hs
src/Rules/SourceDist.hs

index 620d405..2509dae 100644 (file)
--- a/README.md
+++ b/README.md
@@ -125,7 +125,18 @@ are currently not supported.
 
 #### Source distribution
 
-To build a GHC source distribution tarball, run `build sdist-ghc`.
+To build a GHC source distribution tarball, run `build source-dist`.
+
+#### Binary distribution
+
+To build a GHC binary distribution, run `build binary-dist`. The resulting
+tarball contains just enough to support the
+
+``` sh
+$ ./configure [--prefix=PATH] && make install
+```
+
+workflow, for now.
 
 #### Testing
 
index c983ae4..72bef12 100644 (file)
@@ -7,6 +7,7 @@
 
 alex           = @AlexCmd@
 ar             = @ArCmd@
+autoreconf     = autoreconf
 cc             = @CC@
 happy          = @HappyCmd@
 hs-cpp         = @HaskellCPPCmd@
index 486148f..ca339fb 100644 (file)
@@ -51,6 +51,7 @@ executable hadrian
                        , Oracles.Setting
                        , Oracles.ModuleFiles
                        , Rules
+                       , Rules.BinaryDist
                        , Rules.Clean
                        , Rules.Compile
                        , Rules.Configure
index 5ca6c20..0fb8be5 100644 (file)
@@ -89,6 +89,7 @@ instance NFData   HaddockMode
 -- @GhcPkg Stage1@ is the one built in Stage0.
 data Builder = Alex
              | Ar ArMode Stage
+             | Autoreconf FilePath
              | DeriveConstants
              | Cc CcMode Stage
              | Configure FilePath
@@ -174,6 +175,7 @@ instance H.Builder Builder where
 
     runtimeDependencies :: Builder -> Action [FilePath]
     runtimeDependencies = \case
+        Autoreconf dir -> return [dir -/- "configure.ac"]
         Configure dir -> return [dir -/- "configure"]
 
         Ghc _ Stage0 -> return []
@@ -232,6 +234,7 @@ instance H.Builder Builder where
 
                 Ar Unpack _ -> cmd echo [Cwd output] [path] buildArgs
 
+                Autoreconf dir -> cmd echo [Cwd dir] [path] buildArgs
                 Configure dir -> do
                     -- Inject /bin/bash into `libtool`, instead of /bin/sh,
                     -- otherwise Windows breaks. TODO: Figure out why.
@@ -287,6 +290,7 @@ systemBuilderPath builder = case builder of
     Alex            -> fromKey "alex"
     Ar _ Stage0     -> fromKey "system-ar"
     Ar _ _          -> fromKey "ar"
+    Autoreconf _    -> fromKey "autoreconf"
     Cc  _  Stage0   -> fromKey "system-cc"
     Cc  _  _        -> fromKey "cc"
     -- We can't ask configure for the path to configure!
index bd38891..1d10434 100644 (file)
@@ -13,6 +13,7 @@ data HaddockMode = BuildPackage | BuildIndex
 
 data Builder = Alex
              | Ar ArMode Stage
+            | Autoreconf FilePath
              | DeriveConstants
              | Cc CcMode Stage
              | Configure FilePath
index 982d249..100720f 100644 (file)
@@ -8,15 +8,16 @@ import qualified Hadrian.Oracles.TextFile
 import Expression
 import GHC
 import qualified Oracles.ModuleFiles
+import qualified Rules.BinaryDist
 import qualified Rules.Compile
-import qualified Rules.PackageData
+import qualified Rules.Configure
 import qualified Rules.Dependencies
 import qualified Rules.Documentation
 import qualified Rules.Generate
-import qualified Rules.Configure
 import qualified Rules.Gmp
 import qualified Rules.Libffi
 import qualified Rules.Library
+import qualified Rules.PackageData
 import qualified Rules.Program
 import qualified Rules.Register
 import Settings
@@ -122,6 +123,7 @@ packageRules = do
 
 buildRules :: Rules ()
 buildRules = do
+    Rules.BinaryDist.bindistRules
     Rules.Configure.configureRules
     Rules.Generate.copyRules
     Rules.Generate.generateRules
index 6ef7929..8bec3f3 100644 (file)
@@ -9,7 +9,7 @@ import Rules.Clean
 
 sourceDistRules :: Rules ()
 sourceDistRules = do
-    "sdist-ghc" ~> do
+    "source-dist" ~> do
         -- We clean the source tree first.
         -- See https://github.com/snowleopard/hadrian/issues/384.
         -- TODO: Do we still need to clean the tree?