diff --git a/CMakeLists.txt b/CMakeLists.txt
index 84dcbd8e64156ac14ae8327170b7b70e9c295958..daac295ced61342a3c47d03c0c13d173eac11d1b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -892,10 +892,12 @@ IF(KWSYS_STANDALONE OR CMake_SOURCE_DIR)
       testRegistry
       testIOS
       testSystemTools
-      testSystemInformation
       testCommandLineArguments
       testCommandLineArguments1
       )
+    IF(KWSYS_USE_SystemInformation)
+      SET(KWSYS_CXX_TESTS ${KWSYS_CXX_TESTS} testSystemInformation)
+    ENDIF(KWSYS_USE_SystemInformation)
     IF(KWSYS_USE_DynamicLoader)
       SET(KWSYS_CXX_TESTS ${KWSYS_CXX_TESTS} testDynamicLoader)
       # If kwsys contains the DynamicLoader, need extra library
diff --git a/testSystemInformation.cxx b/testSystemInformation.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..0c87730718da66a649d2a166fc15534da773b795
--- /dev/null
+++ b/testSystemInformation.cxx
@@ -0,0 +1,51 @@
+#include "kwsysPrivate.h"
+#include KWSYS_HEADER(SystemInformation.hxx)
+#include KWSYS_HEADER(ios/iostream)
+
+
+
+// Work-around CMake dependency scanning limitation.  This must
+// duplicate the above list of headers.
+#if 0
+# include "SystemInformation.hxx.in"
+# include "kwsys_ios_iostream.h.in"
+#endif
+
+#define printMethod(inof, m) kwsys_ios::cout << #m << ": " \
+<< info.m() << "\n"
+int testSystemInformation(int, char*[])
+{
+  kwsys::SystemInformation info;
+  printMethod(info, GetVendorString);
+  info.RunCPUCheck();
+  info.RunOSCheck();
+  info.RunMemoryCheck();
+  printMethod(info, GetVendorString);
+  printMethod(info, GetVendorID);
+  printMethod(info, GetTypeID);
+  printMethod(info, GetFamilyID);
+  printMethod(info, GetModelID);
+  printMethod(info, GetExtendedProcessorName);
+  printMethod(info, GetProcessorSerialNumber);
+  printMethod(info, GetProcessorCacheSize);
+  printMethod(info, GetLogicalProcessorsPerPhysical);
+  printMethod(info, GetProcessorClockFrequency);
+  printMethod(info, GetProcessorAPICID);
+  printMethod(info, GetOSName);
+  printMethod(info, GetHostname);
+  printMethod(info, GetOSRelease);
+  printMethod(info, GetOSVersion);
+  printMethod(info, GetOSPlatform);
+  printMethod(info, Is64Bits);
+  printMethod(info, GetNumberOfLogicalCPU);
+  printMethod(info, GetNumberOfPhysicalCPU);
+  printMethod(info, DoesCPUSupportCPUID);
+  printMethod(info, GetTotalVirtualMemory);
+  printMethod(info, GetAvailableVirtualMemory);
+  printMethod(info, GetTotalPhysicalMemory);
+  printMethod(info, GetAvailablePhysicalMemory);
+  
+  //int GetProcessorCacheXSize(long int);
+//  bool DoesCPUSupportFeature(long int);
+  return 0;
+}