From f20eab9cdc26ffbacb32e5942e2969058e50581a Mon Sep 17 00:00:00 2001
From: Sylvain Joubert <joubert.sy@gmail.com>
Date: Wed, 27 Feb 2019 12:47:07 +0100
Subject: ProcessorCount: Return the container CPU count instead of the host
 count

On Linux containers (tested with LXC and Docker) getconf returns the
host CPU count.
Use nproc with a higher priority if available to get the container's
allocated CPUs instead of the non-accessible host count.
---
 Modules/ProcessorCount.cmake | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/Modules/ProcessorCount.cmake b/Modules/ProcessorCount.cmake
index e4b4e53..8c25256 100644
--- a/Modules/ProcessorCount.cmake
+++ b/Modules/ProcessorCount.cmake
@@ -70,6 +70,20 @@ function(ProcessorCount var)
   endif()
 
   if(NOT count)
+    # Linux (systems with nproc):
+    # Prefer nproc to getconf if available as getconf may return the host CPU count in Linux containers
+    find_program(ProcessorCount_cmd_nproc nproc)
+    mark_as_advanced(ProcessorCount_cmd_nproc)
+    if(ProcessorCount_cmd_nproc)
+      execute_process(COMMAND ${ProcessorCount_cmd_nproc}
+        ERROR_QUIET
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        OUTPUT_VARIABLE count)
+      #message("ProcessorCount: trying nproc '${ProcessorCount_cmd_nproc}'")
+    endif()
+  endif()
+
+  if(NOT count)
     # Linux (systems with getconf):
     find_program(ProcessorCount_cmd_getconf getconf)
     mark_as_advanced(ProcessorCount_cmd_getconf)
-- 
cgit v0.12