summaryrefslogtreecommitdiff
path: root/Source/cmCMakeHostSystemInformationCommand.h
diff options
context:
space:
mode:
authorNils Gladitz <nilsgladitz@gmail.com>2013-06-15 07:38:23 +0200
committerBrad King <brad.king@kitware.com>2013-06-19 08:46:37 -0400
commitbb71a3a0dfaba317c7a98b92301310e15f602c38 (patch)
tree0ae6f7bd8a4dfe223333aeda53ecdb49e5e3dc10 /Source/cmCMakeHostSystemInformationCommand.h
parentdea8271840b69bef078d7af324a72636ff195c94 (diff)
downloadcmake-bb71a3a0dfaba317c7a98b92301310e15f602c38.tar.gz
Add cmake_host_system_information command
Expose the internal system information API to the CMake language. For example, it is useful to see how much memory the system has available to estimate an upper limit of tests that can run in parallel.
Diffstat (limited to 'Source/cmCMakeHostSystemInformationCommand.h')
-rw-r--r--Source/cmCMakeHostSystemInformationCommand.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/Source/cmCMakeHostSystemInformationCommand.h b/Source/cmCMakeHostSystemInformationCommand.h
new file mode 100644
index 0000000000..d1b8700ffb
--- /dev/null
+++ b/Source/cmCMakeHostSystemInformationCommand.h
@@ -0,0 +1,102 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2013 Kitware, Inc., Insight Software Consortium
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+#ifndef cmCMakeHostSystemInformationCommand_h
+#define cmCMakeHostSystemInformationCommand_h
+
+#include "cmCommand.h"
+
+#include <cmsys/SystemInformation.hxx>
+
+/** \class cmCMakeHostSystemInformationCommand
+ * \brief Query host system specific information
+ *
+ * cmCMakeHostSystemInformationCommand queries system information of
+ * the sytem on which CMake runs.
+ */
+class cmCMakeHostSystemInformationCommand : public cmCommand
+{
+public:
+ /**
+ * This is a virtual constructor for the command.
+ */
+ virtual cmCommand* Clone()
+ {
+ return new cmCMakeHostSystemInformationCommand;
+ }
+
+ /**
+ * This is called when the command is first encountered in
+ * the CMakeLists.txt file.
+ */
+ virtual bool InitialPass(std::vector<std::string> const& args,
+ cmExecutionStatus &status);
+
+ /**
+ * This determines if the command is invoked when in script mode.
+ */
+ virtual bool IsScriptable() const { return true; }
+
+ /**
+ * The name of the command as specified in CMakeList.txt.
+ */
+ virtual const char* GetName() const
+ {
+ return "cmake_host_system_information";
+ }
+
+ /**
+ * Succinct documentation.
+ */
+ virtual const char* GetTerseDocumentation() const
+ {
+ return "Query host system specific information.";
+ }
+
+ /**
+ * More documentation.
+ */
+ virtual const char* GetFullDocumentation() const
+ {
+ return
+ " cmake_host_system_information(RESULT <variable> QUERY <key> ...)\n"
+ "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>.\n"
+ "<key> can be one of the following values:\n"
+ " NUMBER_OF_LOGICAL_CORES = Number of logical cores.\n"
+ " NUMBER_OF_PHYSICAL_CORES = Number of physical cores.\n"
+ " HOSTNAME = Hostname.\n"
+ " FQDN = Fully qualified domain name.\n"
+ " TOTAL_VIRTUAL_MEMORY = "
+ "Total virtual memory in megabytes.\n"
+ " AVAILABLE_VIRTUAL_MEMORY = "
+ "Available virtual memory in megabytes.\n"
+ " TOTAL_PHYSICAL_MEMORY = "
+ "Total physical memory in megabytes.\n"
+ " AVAILABLE_PHYSICAL_MEMORY = "
+ "Available physical memory in megabytes.\n"
+ ;
+ }
+
+ cmTypeMacro(cmCMakeHostSystemInformationCommand, cmCommand);
+
+private:
+ bool GetValue(cmsys::SystemInformation &info,
+ std::string const& key, std::string &value);
+
+ std::string ValueToString(size_t value) const;
+ std::string ValueToString(const char *value) const;
+ std::string ValueToString(std::string const& value) const;
+};
+
+#endif