diff options
-rw-r--r-- | HACKING.md | 6 | ||||
-rw-r--r-- | INSTALL.md | 5 | ||||
-rw-r--r-- | README.md | 10 | ||||
-rw-r--r-- | configure.ac | 43 |
4 files changed, 56 insertions, 8 deletions
diff --git a/HACKING.md b/HACKING.md index b59e747700..6ed39eaf1c 100644 --- a/HACKING.md +++ b/HACKING.md @@ -33,11 +33,11 @@ Next, clone the repository and all the associated libraries: $ git clone --recursive git://git.haskell.org/ghc.git ``` -On Windows, you need an extra repository containing some build tools: +On Windows, you need an extra repository containing some build tools. +These can be downloaded for you by configure. This only needs to be done once by running: ``` -$ cd ghc/ -$ git clone git://git.haskell.org/ghc-tarballs.git +$ ./configure --enable-tarballs-autodownload ``` First copy `mk/build.mk.sample` to `mk/build.mk` and ensure it has diff --git a/INSTALL.md b/INSTALL.md index 1db2595736..58930afeb8 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -23,6 +23,11 @@ Quick start: the following gives you a default build: $ make $ make install + On Windows, you need an extra repository containing some build tools. + These can be downloaded for you by configure. This only needs to be done once by running: + + $ ./configure --enable-tarballs-autodownload + The "perl boot" step is only necessary if this is a tree checked out from git. For source distributions downloaded from GHC's web site, this step has already been performed. @@ -28,11 +28,6 @@ There are two ways to get a source tree: $ git clone --recursive git://git.haskell.org/ghc.git - On Windows, you need an extra repository containing some build tools: - - $ cd ghc/ - $ git clone git://git.haskell.org/ghc-tarballs.git - Note: cloning GHC from Github requires a special setup. See [Getting a GHC repository from Github] [7]. @@ -66,6 +61,11 @@ dblatex. $ make # can also say 'make -jX' for X number of jobs $ make install + On Windows, you need an extra repository containing some build tools. + These can be downloaded for you by configure. This only needs to be done once by running: + + $ ./configure --enable-tarballs-autodownload + (NB: **Do you have multiple cores? Be sure to tell that to `make`!** This can save you hours of build time depending on your system configuration, and is almost always a win regardless of how many cores you have. As a simple rule, diff --git a/configure.ac b/configure.ac index d896c8bf48..d60acb7833 100644 --- a/configure.ac +++ b/configure.ac @@ -101,6 +101,12 @@ AC_ARG_ENABLE(bootstrap-with-devel-snapshot, EnableBootstrapWithDevelSnaphost=NO ) +AC_ARG_ENABLE(tarballs-autodownload, +[AC_HELP_STRING([--enable-tarballs-autodownload], + [Automatically download Windows distribution binaries if needed.])], + TarballsAutodownload=YES, + TarballsAutodownload=NO +) if test "$WithGhc" != ""; then FPTOOLS_GHC_VERSION([GhcVersion], [GhcMajVersion], [GhcMinVersion], [GhcPatchLevel])dnl @@ -274,12 +280,49 @@ AC_SUBST(WithHc) FP_INTREE_GHC_PWD FP_FIND_ROOT +function fail() { + echo >&2 + echo "$1" >&2 + exit 1 +} + +function set_up_tarballs() { + local tarball_repo_url="$1" + local tarball_dir="$2" + + if ! test -d "${tarball_dir}" + then + local git_cmd="git clone ${tarball_repo_url} ${tarball_dir}" + if test "$TarballsAutodownload" = "NO" + then + echo >&2 + echo "ERROR: Windows tarball binary distributions not found." >&2 + echo "Please rerun configure with --enable-tarballs-autodownload, or clone the repository manually:" >&2 + echo " $git_cmd" >&2 + exit 1 + fi + AC_MSG_NOTICE([Downloading Windows tarball distributions to ${tarball_dir}...]) + $git_cmd || { + rm -f "${tarball_dir}" + fail "ERROR: Git clone failed." + } + else + AC_MSG_NOTICE([Using Windows tarball distributions found in ${tarball_dir}...]) + fi +} + if test "$HostOS" = "mingw32" then test -d inplace || mkdir inplace + # NB. For now just run git clone on the tarball repo + ghc_tarball_repo='git://git.haskell.org/ghc-tarballs.git' + ghc_tarball_dir='ghc-tarballs' + set_up_tarballs "${ghc_tarball_repo}" "${ghc_tarball_dir}" + if test "$HostArch" = "i386" then + # NB. If you update the tarballs to a new version of gcc, don't # forget to tweak the paths in driver/gcc/gcc.c. if ! test -d inplace/mingw || |