Introduce ALLOW_EXISTING_SRC_DIR option, turned off by default.
The Homebrew formula, which downloads and extracts the third-party
dependency sources before starting the build, would turn this option
ON.
It turns out that `file(DOWNLOAD ...)` is not very user friendly with
it's error message, and only supports MD5 on v2.8.10 of CMake (the
default for Ubuntu 12.04). If CMake is built without SSL support,
users are left hanging with a message that the hashes don't match.
It turns out that `file(SHA1 ...)` exists in v2.8.10, and we
can use that to compute the hash ourselves. So this splits the hash
checking into a separate step, where we can provide some additional
advice if the SHA1 is the hash for an empty file. Additionally, it also
allows us to drop the MD5 hashes and maintain only SHA1 hashes for our
dependencies.
This is useful when trying to bisect an issue in a dependency, and we
want to pull from a specific commit but don't want to have to download
and determine the sha1sum and md5sum of the tarball.
When building under Homebrew, we want to let Homebrew manage
downloading and extracting the tarballs. See PR #1411.
Also make sure to skip only if directory is not empty. Fix#1433.
Underneath the hood, CMake uses libcurl and libcurl has had a number of
issues regarding progress feedback. In one sample run against Travis
CI, we ended up with nearly 3,000 lines of progress output for a single
download.
Unfortunately, CMake doesn't have the download and extract steps
separate, so we have some extra work that we have to do. Much of the
content was taken from the ExternalProject.cmake and it's template for
generating the content of the download and extract CMake files.