Commit 9f7cdfee authored by Tamar Christina's avatar Tamar Christina Committed by Ben Gamari

Make configure error out on missing ghc-tarballs on Windows

Currently checking out the source on windows requires two git
checkouts. One for the GHC sources and one for the GHC-tarballs.

This patch will make configure issue an error if compiling under
windows and the GHC-tarballs folder is missing.

On failure the user is told which command they need to run to get the
tarballs or if they want configure to handle it for them configure
provide the `--enable-tarballs-autodownload` flag.

Test Plan:
1. make sure ghc-tarballs folder is not present
2. run ./configure which should fail giving an error that tarballs is
missing and how to get it
3. run ./configure --enable-tarballs-autodownload and the tarballs
should be downloaded and configure finishes
4. rerun the command in 3, no new download should be done.
5. run configure without --enable-tarballs-autodownload, configure
should finish correctly.

Reviewers: bgamari, austin, thomie

Reviewed By: thomie

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D1108

GHC Trac Issues: #10705
parent 5a8a8a64
......@@ -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
......
......@@ -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,
......
......@@ -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 ||
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment