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.