<div dir="ltr"><div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">CMake notices the downloaded tarball is up-to-date and<br>doesn't download it again, but it still extracts it again </blockquote><div><br></div><div>From what I can tell, the 'check|download tarball' and 'extract tarball' commands are independent parts of the "download step": as long as the download step runs at all, it will re-extract the tarball, even if it skipped re-downloading. So the issue (design questions aside) is what triggers the download step. The minimal dependency for that step looks like "LIBNAME-gitinfo.txt" file somewhere in the stamp directory, so you could check the mtime preservation there. I don't know if there are other dependencies added for the download target added separately.</div></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Sep 5, 2018 at 8:06 AM Antoine Pitrou <<a href="mailto:antoine@python.org">antoine@python.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Hello,<br>
<br>
On our project (Apache Arrow - <a href="https://arrow.apache.org/" rel="noreferrer" target="_blank">https://arrow.apache.org/</a>) we're using<br>
CMake for the C++ source tree and have many external dependencies<br>
fetched using ExternalProject. In turn building those dependencies can<br>
make up a significant portion of build times on CI services, especially<br>
AppVeyor. So I've been looking for a solution to cache those<br>
third-party builds from one CI run to the other.<br>
<br>
Right now, what I'm trying to do is to set EP_BASE to a well-known base<br>
directory and ask AppVeyor to cache and restore that directory in each<br>
new build. The AppVeyor caching seems to work fine (the EP_BASE<br>
directory is saved and restored). However, it seems that nevertheless<br>
CMake will rebuild all those projects again, despite the cached build<br>
results.<br>
<br>
This is with CMake 3.12.1 on Windows.<br>
<br>
Here is the log for an example build step, here the zstd library:<br>
<a href="https://ci.appveyor.com/project/pitrou/arrow/build/1.0.700/job/i4tj6tifp4xq1mjn?fullLog=true#L803" rel="noreferrer" target="_blank">https://ci.appveyor.com/project/pitrou/arrow/build/1.0.700/job/i4tj6tifp4xq1mjn?fullLog=true#L803</a><br>
<br>
As you can see, CMake notices the downloaded tarball is up-to-date and<br>
doesn't download it again, but it still extracts it again (why?) and<br>
builds the source code anew. Yet the entire EP_BASE directory (here<br>
"C:/Users/appveyor/arrow-externals") is cached and restored by AppVeyor.<br>
<br>
Did someone manage to make this work, and/or is there another solution?<br>
<br>
Thank you<br>
<br>
Regards<br>
<br>
Antoine.<br>
-- <br>
<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Please keep messages on-topic and check the CMake FAQ at: <a href="http://www.cmake.org/Wiki/CMake_FAQ" rel="noreferrer" target="_blank">http://www.cmake.org/Wiki/CMake_FAQ</a><br>
<br>
Kitware offers various services to support the CMake community. For more information on each offering, please visit:<br>
<br>
CMake Support: <a href="http://cmake.org/cmake/help/support.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/support.html</a><br>
CMake Consulting: <a href="http://cmake.org/cmake/help/consulting.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/consulting.html</a><br>
CMake Training Courses: <a href="http://cmake.org/cmake/help/training.html" rel="noreferrer" target="_blank">http://cmake.org/cmake/help/training.html</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="https://cmake.org/mailman/listinfo/cmake" rel="noreferrer" target="_blank">https://cmake.org/mailman/listinfo/cmake</a><br>
</blockquote></div>