| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- cmake_host_system_information
- -----------------------------
- Query various host system information.
- Synopsis
- ^^^^^^^^
- .. parsed-literal::
- `Query host system specific information`_
- cmake_host_system_information(RESULT <variable> QUERY <key> ...)
- `Query Windows registry`_
- cmake_host_system_information(RESULT <variable> QUERY WINDOWS_REGISTRY <key> ...)
- 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
- .. _Query Windows registry:
- Query Windows registry
- ^^^^^^^^^^^^^^^^^^^^^^
- .. versionadded:: 3.24
- ::
- cmake_host_system_information(RESULT <variable>
- QUERY WINDOWS_REGISTRY <key> [VALUE_NAMES|SUBKEYS|VALUE <name>]
- [VIEW (64|32|64_32|32_64|HOST|TARGET|BOTH)]
- [SEPARATOR <separator>]
- [ERROR_VARIABLE <result>])
- Performs query operations on local computer registry subkey. Returns a list of
- subkeys or value names that are located under the specified subkey in the
- registry or the data of the specified value name. The result of the queried
- entity is stored in ``<variable>``.
- .. note::
- Querying registry for any other platforms than ``Windows``, including
- ``CYGWIN``, will always returns an empty string and sets an error message in
- the variable specified with sub-option ``ERROR_VARIABLE``.
- ``<key>`` specify the full path of a subkey on the local computer. The
- ``<key>`` must include a valid root key. Valid root keys for the local computer
- are:
- * ``HKLM`` or ``HKEY_LOCAL_MACHINE``
- * ``HKCU`` or ``HKEY_CURRENT_USER``
- * ``HKCR`` or ``HKEY_CLASSES_ROOT``
- * ``HKU`` or ``HKEY_USERS``
- * ``HKCC`` or ``HKEY_CURRENT_CONFIG``
- And, optionally, the path to a subkey under the specified root key. The path
- separator can be the slash or the backslash. ``<key>`` is not case sensitive.
- For example:
- .. code-block:: cmake
- cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKLM")
- cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Kitware")
- cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKCU\\SOFTWARE\\Kitware")
- ``VALUE_NAMES``
- Request the list of value names defined under ``<key>``. If a default value
- is defined, it will be identified with the special name ``(default)``.
- ``SUBKEYS``
- Request the list of subkeys defined under ``<key>``.
- ``VALUE <name>``
- Request the data stored in value named ``<name>``. If ``VALUE`` is not
- specified or argument is the special name ``(default)``, the content of the
- default value, if any, will be returned.
- .. code-block:: cmake
- # query default value for HKLM/SOFTWARE/Kitware key
- cmake_host_system_information(RESULT result
- QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Kitware")
- # query default value for HKLM/SOFTWARE/Kitware key using special value name
- cmake_host_system_information(RESULT result
- QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Kitware"
- VALUE "(default)")
- Supported types are:
- * ``REG_SZ``.
- * ``REG_EXPAND_SZ``. The returned data is expanded.
- * ``REG_MULTI_SZ``. The returned is expressed as a CMake list. See also
- ``SEPARATOR`` sub-option.
- * ``REG_DWORD``.
- * ``REG_QWORD``.
- For all other types, an empty string is returned.
- ``VIEW``
- Specify which registry views must be queried. When not specified, ``BOTH``
- view is used.
- ``64``
- Query the 64bit registry. On ``32bit Windows``, returns always an empty
- string.
- ``32``
- Query the 32bit registry.
- ``64_32``
- For ``VALUE`` sub-option or default value, query the registry using view
- ``64``, and if the request failed, query the registry using view ``32``.
- For ``VALUE_NAMES`` and ``SUBKEYS`` sub-options, query both views (``64``
- and ``32``) and merge the results (sorted and duplicates removed).
- ``32_64``
- For ``VALUE`` sub-option or default value, query the registry using view
- ``32``, and if the request failed, query the registry using view ``64``.
- For ``VALUE_NAMES`` and ``SUBKEYS`` sub-options, query both views (``32``
- and ``64``) and merge the results (sorted and duplicates removed).
- ``HOST``
- Query the registry matching the architecture of the host: ``64`` on ``64bit
- Windows`` and ``32`` on ``32bit Windows``.
- ``TARGET``
- Query the registry matching the architecture specified by
- :variable:`CMAKE_SIZEOF_VOID_P` variable. If not defined, fallback to
- ``HOST`` view.
- ``BOTH``
- Query both views (``32`` and ``64``). The order depends of the following
- rules: If :variable:`CMAKE_SIZEOF_VOID_P` variable is defined. Use the
- following view depending of the content of this variable:
- * ``8``: ``64_32``
- * ``4``: ``32_64``
- If :variable:`CMAKE_SIZEOF_VOID_P` variable is not defined, rely on
- architecture of the host:
- * ``64bit``: ``64_32``
- * ``32bit``: ``32``
- ``SEPARATOR``
- Specify the separator character for ``REG_MULTI_SZ`` type. When not
- specified, the character ``\0`` is used.
- ``ERROR_VARIABLE <result>``
- Returns any error raised during query operation. In case of success, the
- variable holds an empty string.
|