# cmake_host_system_information

Query host system specific information.

    cmake_host_system_information(RESULT <variable> QUERY <key> ...)

Queries system information of the host system on which cmake runs. One or more `<key>` can be provided to select the information to be queried. The list of queried values is stored in `<variable>`.

`<key>` can be one of the following values:

`NUMBER_OF_LOGICAL_CORES`

  Number of logical cores

`NUMBER_OF_PHYSICAL_CORES`

  Number of physical cores

`HOSTNAME`

  Hostname

`FQDN`

  Fully qualified domain name

`TOTAL_VIRTUAL_MEMORY`

  Total virtual memory in MiB [1]

`AVAILABLE_VIRTUAL_MEMORY`

  Available virtual memory in MiB [1]

`TOTAL_PHYSICAL_MEMORY`

  Total physical memory in MiB [1]

`AVAILABLE_PHYSICAL_MEMORY`

  Available physical memory in MiB [1]

`IS_64BIT`

  New in version 3.10.

  One if processor is 64Bit

`HAS_FPU`

  New in version 3.10.

  One if processor has floating point unit

`HAS_MMX`

  New in version 3.10.

  One if processor supports MMX instructions

`HAS_MMX_PLUS`

  New in version 3.10.

  One if processor supports Ext. MMX instructions

`HAS_SSE`

  New in version 3.10.

  One if processor supports SSE instructions

`HAS_SSE2`

  New in version 3.10.

  One if processor supports SSE2 instructions

`HAS_SSE_FP`

  New in version 3.10.

  One if processor supports SSE FP instructions

`HAS_SSE_MMX`

  New in version 3.10.

  One if processor supports SSE MMX instructions

`HAS_AMD_3DNOW`

  New in version 3.10.

  One if processor supports 3DNow instructions

`HAS_AMD_3DNOW_PLUS`

  New in version 3.10.

  One if processor supports 3DNow+ instructions

`HAS_IA64`

  New in version 3.10.

  One if IA64 processor emulating x86

`HAS_SERIAL_NUMBER`

  New in version 3.10.

  One if processor has serial number

`PROCESSOR_SERIAL_NUMBER`

  New in version 3.10.

  Processor serial number

`PROCESSOR_NAME`

  New in version 3.10.

  Human readable processor name

`PROCESSOR_DESCRIPTION`

  New in version 3.10.

  Human readable full processor description

`OS_NAME`

  New in version 3.10.

  See `CMAKE_HOST_SYSTEM_NAME`

`OS_RELEASE`

  New in version 3.10.

  The OS sub-type e.g. on Windows `Professional`

`OS_VERSION`

  New in version 3.10.

  The OS build ID

`OS_PLATFORM`

  New in version 3.10.

  See `CMAKE_HOST_SYSTEM_PROCESSOR`

`DISTRIB_INFO`

  New in version 3.22.

  Read `/etc/os-release` file and define the given `<variable>` into a list of read variables

`DISTRIB_<name>`

  New in version 3.22.

  Get the `<name>` variable (see man 5 os-release) if it exists in the `/etc/os-release` file

  Example:

      cmake_host_system_information(RESULT PRETTY_NAME QUERY DISTRIB_PRETTY_NAME)
      message(STATUS "${PRETTY_NAME}")

      cmake_host_system_information(RESULT DISTRO QUERY DISTRIB_INFO)

      foreach(VAR IN LISTS DISTRO)
        message(STATUS "${VAR}=`${${VAR}}`")
      endforeach()

  Output:

      -- Ubuntu 20.04.2 LTS
      -- DISTRO_BUG_REPORT_URL=`https://bugs.launchpad.net/ubuntu/`
      -- DISTRO_HOME_URL=`https://www.ubuntu.com/`
      -- DISTRO_ID=`ubuntu`
      -- DISTRO_ID_LIKE=`debian`
      -- DISTRO_NAME=`Ubuntu`
      -- DISTRO_PRETTY_NAME=`Ubuntu 20.04.2 LTS`
      -- DISTRO_PRIVACY_POLICY_URL=`https://www.ubuntu.com/legal/terms-and-policies/privacy-policy`
      -- DISTRO_SUPPORT_URL=`https://help.ubuntu.com/`
      -- DISTRO_UBUNTU_CODENAME=`focal`
      -- DISTRO_VERSION=`20.04.2 LTS (Focal Fossa)`
      -- DISTRO_VERSION_CODENAME=`focal`
      -- DISTRO_VERSION_ID=`20.04`

If `/etc/os-release` file is not found, the command tries to gather OS identification via fallback scripts. The fallback script can use various distribution-specific files to collect OS identification data and map it into man 5 os-release variables.

## Fallback Interface Variables

CMAKE_GET_OS_RELEASE_FALLBACK_SCRIPTS

  In addition to the scripts shipped with CMake, a user may append full paths to his script(s) to the this list. The script filename has the following format: `NNN-<name>.cmake`, where `NNN` is three digits used to apply collected scripts in a specific order.

CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_<varname>

  Variables collected by the user provided fallback script ought to be assigned to CMake variables using this naming convention. Example, the `ID` variable from the manual becomes `CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID`.

CMAKE_GET_OS_RELEASE_FALLBACK_RESULT

  The fallback script ought to store names of all assigned `CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_<varname>` variables in this list.

Example:

    # Try to detect some old distribution
    # See also
    # - http://linuxmafia.com/faq/Admin/release-files.html
    #
    if(NOT EXISTS "${CMAKE_SYSROOT}/etc/foobar-release")
      return()
    endif()
    # Get the first string only
    file(
        STRINGS "${CMAKE_SYSROOT}/etc/foobar-release" CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT
        LIMIT_COUNT 1
      )
    #
    # Example:
    #
    #   Foobar distribution release 1.2.3 (server)
    #
    if(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT MATCHES "Foobar distribution release ([0-9\.]+) .*")
      set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME Foobar)
      set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME "${CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT}")
      set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID foobar)
      set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION ${CMAKE_MATCH_1})
      set(CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID ${CMAKE_MATCH_1})
      list(
          APPEND CMAKE_GET_OS_RELEASE_FALLBACK_RESULT
          CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_NAME
          CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_PRETTY_NAME
          CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_ID
          CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION
          CMAKE_GET_OS_RELEASE_FALLBACK_RESULT_VERSION_ID
        )
    endif()
    unset(CMAKE_GET_OS_RELEASE_FALLBACK_CONTENT)

Footnotes

[1] (1,2,3,4)

One MiB (mebibyte) is equal to 1024x1024 bytes.