| cmake_host_system_information |
| ----------------------------- |
| |
| Query host system specific information. |
| |
| .. code-block:: cmake |
| |
| 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 [#mebibytes]_ |
| |
| ``AVAILABLE_VIRTUAL_MEMORY`` |
| Available virtual memory in MiB [#mebibytes]_ |
| |
| ``TOTAL_PHYSICAL_MEMORY`` |
| Total physical memory in MiB [#mebibytes]_ |
| |
| ``AVAILABLE_PHYSICAL_MEMORY`` |
| Available physical memory in MiB [#mebibytes]_ |
| |
| ``IS_64BIT`` |
| .. versionadded:: 3.10 |
| |
| One if processor is 64Bit |
| |
| ``HAS_FPU`` |
| .. versionadded:: 3.10 |
| |
| One if processor has floating point unit |
| |
| ``HAS_MMX`` |
| .. versionadded:: 3.10 |
| |
| One if processor supports MMX instructions |
| |
| ``HAS_MMX_PLUS`` |
| .. versionadded:: 3.10 |
| |
| One if processor supports Ext. MMX instructions |
| |
| ``HAS_SSE`` |
| .. versionadded:: 3.10 |
| |
| One if processor supports SSE instructions |
| |
| ``HAS_SSE2`` |
| .. versionadded:: 3.10 |
| |
| One if processor supports SSE2 instructions |
| |
| ``HAS_SSE_FP`` |
| .. versionadded:: 3.10 |
| |
| One if processor supports SSE FP instructions |
| |
| ``HAS_SSE_MMX`` |
| .. versionadded:: 3.10 |
| |
| One if processor supports SSE MMX instructions |
| |
| ``HAS_AMD_3DNOW`` |
| .. versionadded:: 3.10 |
| |
| One if processor supports 3DNow instructions |
| |
| ``HAS_AMD_3DNOW_PLUS`` |
| .. versionadded:: 3.10 |
| |
| One if processor supports 3DNow+ instructions |
| |
| ``HAS_IA64`` |
| .. versionadded:: 3.10 |
| |
| One if IA64 processor emulating x86 |
| |
| ``HAS_SERIAL_NUMBER`` |
| .. versionadded:: 3.10 |
| |
| One if processor has serial number |
| |
| ``PROCESSOR_SERIAL_NUMBER`` |
| .. versionadded:: 3.10 |
| |
| Processor serial number |
| |
| ``PROCESSOR_NAME`` |
| .. versionadded:: 3.10 |
| |
| Human readable processor name |
| |
| ``PROCESSOR_DESCRIPTION`` |
| .. versionadded:: 3.10 |
| |
| Human readable full processor description |
| |
| ``OS_NAME`` |
| .. versionadded:: 3.10 |
| |
| See :variable:`CMAKE_HOST_SYSTEM_NAME` |
| |
| ``OS_RELEASE`` |
| .. versionadded:: 3.10 |
| |
| The OS sub-type e.g. on Windows ``Professional`` |
| |
| ``OS_VERSION`` |
| .. versionadded:: 3.10 |
| |
| The OS build ID |
| |
| ``OS_PLATFORM`` |
| .. versionadded:: 3.10 |
| |
| See :variable:`CMAKE_HOST_SYSTEM_PROCESSOR` |
| |
| ``DISTRIB_INFO`` |
| .. versionadded:: 3.22 |
| |
| Read :file:`/etc/os-release` file and define the given ``<variable>`` |
| into a list of read variables |
| |
| ``DISTRIB_<name>`` |
| .. versionadded:: 3.22 |
| |
| Get the ``<name>`` variable (see `man 5 os-release`_) if it exists in the |
| :file:`/etc/os-release` file |
| |
| Example: |
| |
| .. code-block:: cmake |
| |
| 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 :file:`/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 |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| .. variable:: 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. |
| |
| .. variable:: 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``. |
| |
| .. variable:: 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: |
| |
| .. code-block:: cmake |
| |
| # 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) |
| |
| |
| .. rubric:: Footnotes |
| |
| .. [#mebibytes] One MiB (mebibyte) is equal to 1024x1024 bytes. |
| |
| .. _man 5 os-release: https://www.freedesktop.org/software/systemd/man/os-release.html |
| .. _various distribution-specific files: http://linuxmafia.com/faq/Admin/release-files.html |