diff --git a/SystemTools.cxx b/SystemTools.cxx
index 037a40a2d0aee9b5d03937a08b2d843da74b9f3b..c3290456bd92d8d169680698b39105f6653bf2eb 100644
--- a/SystemTools.cxx
+++ b/SystemTools.cxx
@@ -1833,6 +1833,16 @@ SystemTools::JoinPath(const kwsys_stl::vector<kwsys_stl::string>& components)
   return result;
 }
 
+//----------------------------------------------------------------------------
+bool SystemTools::ComparePath(const char* c1, const char* c2)
+{
+#if defined(_WIN32) || defined(__APPLE__)
+  return SystemTools::Strucmp(c1, c2) == 0;
+#else
+  return strcmp(c1, c2) == 0;
+#endif
+}
+
 bool SystemTools::Split(const char* str, kwsys_stl::vector<kwsys_stl::string>& lines)
 {
   kwsys_stl::string data(str);
diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in
index ca341dd8ed647035475240b7e0e8e44544f3757f..008f9ad6e3b47350ce22239e0552fc1f433fafe2 100644
--- a/SystemTools.hxx.in
+++ b/SystemTools.hxx.in
@@ -273,6 +273,11 @@ public:
   static kwsys_stl::string
   JoinPath(const kwsys_stl::vector<kwsys_stl::string>& components);
 
+  /**
+   * Compare a path or components of a path.
+   */
+  static bool ComparePath(const char* c1, const char* c2);
+
   ///! return path of a full filename (no trailing slashes).
   static kwsys_stl::string GetFilenamePath(const kwsys_stl::string&);