cmake: stop FetchContent from fetching content

Message ID 20220209125315.3177811-1-ross.burton@arm.com
State Accepted, archived
Commit 138df1940fff303de48c98a95ac1bbaef4f120e2
Headers show
Series cmake: stop FetchContent from fetching content | expand

Commit Message

Ross Burton Feb. 9, 2022, 12:53 p.m. UTC
CMake includes a FetchContent module, which will download further
source code at configure time.  With the network isolation this will now
fail, but as not all environments support network isolation we can tell
cmake to not download either for extra safety.

Signed-off-by: Ross Burton <ross.burton@arm.com>
---
 meta/classes/cmake.bbclass | 1 +
 1 file changed, 1 insertion(+)

Comments

Khem Raj Feb. 9, 2022, 5:45 p.m. UTC | #1
On 2/9/22 4:53 AM, Ross Burton wrote:
> CMake includes a FetchContent module, which will download further
> source code at configure time.  With the network isolation this will now
> fail, but as not all environments support network isolation we can tell
> cmake to not download either for extra safety.
> 

what is cmake's default ? I think it could become a constant source of 
pain if it is not default. Since many cmake based packages might start 
to depend on it indirectly in future.

> Signed-off-by: Ross Burton <ross.burton@arm.com>
> ---
>   meta/classes/cmake.bbclass | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
> index 92b9197c487..fac7bbca7a3 100644
> --- a/meta/classes/cmake.bbclass
> +++ b/meta/classes/cmake.bbclass
> @@ -189,6 +189,7 @@ cmake_do_configure() {
>   	  -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
>   	  -DCMAKE_NO_SYSTEM_FROM_IMPORTED=1 \
>   	  -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON \
> +	  -DFETCHCONTENT_FULLY_DISCONNECTED=ON \
>   	  ${EXTRA_OECMAKE} \
>   	  -Wno-dev
>   }
> 
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#161554): https://lists.openembedded.org/g/openembedded-core/message/161554
> Mute This Topic: https://lists.openembedded.org/mt/89020454/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Aaltonen Eero Feb. 10, 2022, 10:15 a.m. UTC | #2
On Wed, 2022-02-09 at 09:45 -0800, Khem Raj via lists.openembedded.org
wrote:
> On 2/9/22 4:53 AM, Ross Burton wrote:
> > CMake includes a FetchContent module, which will download further
> > source code at configure time.  With the network isolation this
> > will now fail, but as not all environments support network
> > isolation we can tell cmake to not download either for extra
> > safety.
> 
> what is cmake's default ? I think it could become a constant source
> of pain if it is not default. Since many cmake based packages might
> start to depend on it indirectly in future.

CMake's default is to allow downloads.

It's possible to write CMake projects so that they try find_package
first and then fall back to downloading. I think
FETCHCONTENT_FULLY_DISCONNECTED might be a helpful flag so that the
build can then simply report if a required dependency has the wrong
version or so.

CMake projects that use _only_ FetchContent will likely need heavier
patching.


Eero
Ross Burton Feb. 10, 2022, 11:40 a.m. UTC | #3
On Thu, 10 Feb 2022 at 10:13, Eero Aaltonen <eero.aaltonen@vaisala.com> wrote:
> > what is cmake's default ? I think it could become a constant source
> > of pain if it is not default. Since many cmake based packages might
> > start to depend on it indirectly in future.
>
> CMake's default is to allow downloads.
>
> It's possible to write CMake projects so that they try find_package
> first and then fall back to downloading. I think
> FETCHCONTENT_FULLY_DISCONNECTED might be a helpful flag so that the
> build can then simply report if a required dependency has the wrong
> version or so.
>
> CMake projects that use _only_ FetchContent will likely need heavier
> patching.

The reasoning for this patch is that with the network isolation change
the FetchContents will fail, but as in some environments the network
isolation doesn't work (eg Docker containers) we can disable
FetchContent explicitly too.

Yes, projects which just use FetchContent are a pain.  Lets guess why
I wrote this patch. :)

Ross

Patch

diff --git a/meta/classes/cmake.bbclass b/meta/classes/cmake.bbclass
index 92b9197c487..fac7bbca7a3 100644
--- a/meta/classes/cmake.bbclass
+++ b/meta/classes/cmake.bbclass
@@ -189,6 +189,7 @@  cmake_do_configure() {
 	  -DCMAKE_TOOLCHAIN_FILE=${WORKDIR}/toolchain.cmake \
 	  -DCMAKE_NO_SYSTEM_FROM_IMPORTED=1 \
 	  -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON \
+	  -DFETCHCONTENT_FULLY_DISCONNECTED=ON \
 	  ${EXTRA_OECMAKE} \
 	  -Wno-dev
 }