Kaynağa Gözat

Add detection of file format from extension

Andy Cedilnik 23 yıl önce
ebeveyn
işleme
6736678ca3
2 değiştirilmiş dosya ile 62 ekleme ve 1 silme
  1. 38 0
      Source/cmSystemTools.cxx
  2. 24 1
      Source/cmSystemTools.h

+ 38 - 0
Source/cmSystemTools.cxx

@@ -2148,3 +2148,41 @@ bool cmSystemTools::GetShortPath(const char* path, std::string& shortPath)
   return true;
 #endif
 }
+
+cmSystemTools::e_FileFormat cmSystemTools::GetFileFormat(const char* cext)
+{
+  if ( ! cext || *cext == 0 )
+    {
+    return cmSystemTools::NO_FILE_FORMAT;
+    }
+  std::string ext = cmSystemTools::LowerCase(cext);
+  if ( ext == "c" || ext == ".c" ) { return cmSystemTools::C_FILE_FORMAT; }
+  if ( ext == "cxx" || ext == ".cxx" ||
+       ext == "cpp" || ext == ".cpp" ||
+       ext == "c++" || ext == ".c++" ||
+       ext == "cc" || ext == ".cc" ) { return cmSystemTools::CXX_FILE_FORMAT; }
+  if ( ext == "java" || ext == ".java" ) { return cmSystemTools::JAVA_FILE_FORMAT; }
+  if ( ext == "h" || ext == ".h" || 
+       ext == "hpp" || ext == ".hpp" || 
+       ext == "h++" || ext == ".h++" ||
+       ext == "hxx" || ext == ".hxx" ) { return cmSystemTools::HEADER_FILE_FORMAT; }
+  if ( ext == "rc" || ext == ".rc" ) { return cmSystemTools::RESOURCE_FILE_FORMAT; }
+  if ( ext == "def" || ext == ".def" ) { return cmSystemTools::DEFINITION_FILE_FORMAT; }
+  if ( ext == "lib" || ext == ".lib" ||
+       ext == "a" || ext == ".a") { return cmSystemTools::STATIC_LIBRARY_FILE_FORMAT; }
+  if ( ext == "o" || ext == ".o" ||
+       ext == "obj" || ext == ".obj") { return cmSystemTools::OBJECT_FILE_FORMAT; }
+#ifdef __APPLE__
+  if ( ext == "dylib" || ext == ".dylib" ) 
+    { return cmSystemTools::SHARED_LIBRARY_FILE_FORMAT; }
+  if ( ext == "so" || ext == ".so" || 
+       ext == "bundle" || ext == ".bundle" ) 
+    { return cmSystemTools::MODULE_FILE_FORMAT; } 
+#else // __APPLE__
+  if ( ext == "so" || ext == ".so" || 
+       ext == "sl" || ext == ".sl" || 
+       ext == "dll" || ext == ".dll" ) 
+    { return cmSystemTools::SHARED_LIBRARY_FILE_FORMAT; }
+#endif // __APPLE__
+  return cmSystemTools::UNKNOWN_FILE_FORMAT;
+}

+ 24 - 1
Source/cmSystemTools.h

@@ -287,6 +287,30 @@ public:
   static void DisableRunCommandOutput() {s_DisableRunCommandOutput = true; }
   static void EnableRunCommandOutput() {s_DisableRunCommandOutput = false; }
   static bool GetRunCommandOutput() { return s_DisableRunCommandOutput; }
+
+  /**
+   * Come constants for different file formats.
+   */
+  enum e_FileFormat {
+    NO_FILE_FORMAT = 0,
+    C_FILE_FORMAT,
+    CXX_FILE_FORMAT,
+    JAVA_FILE_FORMAT,
+    HEADER_FILE_FORMAT,
+    RESOURCE_FILE_FORMAT,
+    DEFINITION_FILE_FORMAT,
+    STATIC_LIBRARY_FILE_FORMAT,
+    SHARED_LIBRARY_FILE_FORMAT,
+    MODULE_FILE_FORMAT,
+    OBJECT_FILE_FORMAT,
+    UNKNOWN_FILE_FORMAT
+  };
+
+  /**
+   * Determine the file type based on the extension
+   */
+  static e_FileFormat GetFileFormat(const char* ext);
+
 protected:
   // these two functions can be called from ConvertToOutputPath
   /**
@@ -302,7 +326,6 @@ protected:
    * if there are spaces in the string it is double quoted.
    */
   static std::string ConvertToWindowsOutputPath(const char*);
-  
 
 private:
   static bool s_ErrorOccured;