#include <list>
#include <string>
//
//  CPU
//
int getNumCpus();
std::string getCpuName();
std::string getCpuSignature();
// CPU capabilities
bool hasCpuID();
std::string getCpuVendorID();
int getCpuFeatureFlags();
int getCpuFeatureFlags2();
bool hasCpuX87MathCoprocessor();
bool hasCpuMMX();
bool hasCpuSSE();
bool hasCpuSSE2();
bool hasCpuAVX();
//
//  Memory
//
double getMemoryTotal();
//
//  GPU
//
#if !defined( NO_GRAPHICS_TESTS )
std::string getGpuVendor();
std::string getGpuRendererString();
std::string getGpuVersionString();
std::string getGpuGLSLVersionString();
const std::list<std::string>& getGpuExtensions();
const std::list<std::string>& getGuiExtensions();
int getGpuMaxTextureSize();
std::string getGLXVersionString();
std::string getGLXServerVendorString();
std::string getGLXClientVendorString();
std::string getEGLVendorString();
std::string getEGLVersionString();
std::string getEGLClientAPIsString();
void getDisplayAttributes(int *width, int *height, int *bpp, int *freq);
bool getMultisamplingActive();
void printFBConfig();
enum GpuCapability { BEGIN_END, CLIENT_SIDE_VA, VBO, VAO,
                     TRANSFORMATIONS, ACCUM_BUFFER, INDEXED_GET_EXTENSIONS,
                     FRAMEBUFFER, ES_PROFILE,
                     FIXED_PIPELINE, SHADERS, COMPATIBILITY_SHADERS, CORE_SHADERS,
                     VERTEX_SHADER, FRAGMENT_SHADER, GEOMETRY_SHADER,
                     GEOMETRY_SHADER_EXT, GEOMETRY_SHADER_32, GEOMETRY_SHADER_40,
                     COMPUTE_SHADER, MULTI_DRAW_INDIRECT,
                     TEXTURE_RGBA8, TEXTURE_RGBA32F, IMAGE_TEXTURE,
                     SHADER_STORAGE_BUFFER, GET_INTEGER_64,
                     MULTISAMPLING,
                     BINDLESS_TEXTURE
};
bool hasGpuCapability( GpuCapability capability );
void updateGpuInfo();
#endif
//
//  OS
//
std::string getOSName();
std::string getOSDistributionName();
std::string getOSVersionNumber();
std::string getOSServicePack();
std::string getOSDistributionRelease();
std::string getOSDistributionCodeName();
std::string getOSDistributionDescription();
std::string getOSDistributionHomepage();
std::string getOSKernelInfo();
std::string getOSExtraInfo();