summaryrefslogtreecommitdiffstats
path: root/Source/cmClassFile.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'Source/cmClassFile.cxx')
-rw-r--r--Source/cmClassFile.cxx77
1 files changed, 77 insertions, 0 deletions
diff --git a/Source/cmClassFile.cxx b/Source/cmClassFile.cxx
new file mode 100644
index 0000000..7893df6
--- /dev/null
+++ b/Source/cmClassFile.cxx
@@ -0,0 +1,77 @@
+#ifdef _MSC_VER
+#pragma warning ( disable : 4786 )
+#endif
+#include "cmClassFile.h"
+#include <sys/stat.h>
+#include <iostream>
+
+
+// Helper function to hide the use of system stat function
+bool cmFileExists(const char* filename)
+{
+ struct stat fs;
+ if (stat(filename, &fs) != 0)
+ {
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+}
+
+// Set the name of the class and the full path to the file.
+// The class must be found in dir and end in name.cxx, name.txx,
+// name.c or it will be considered a header file only class
+// and not included in the build process
+void cmClassFile::SetName(const char* name, const char* dir)
+{
+ m_HeaderFileOnly = true;
+ m_ClassName = name;
+ std::string pathname = dir;
+ if(pathname != "")
+ {
+ pathname += "/";
+ }
+
+ pathname += m_ClassName;
+ std::string hname = pathname;
+ hname += ".cxx";
+ if(cmFileExists(hname.c_str()))
+ {
+ m_HeaderFileOnly = false;
+ m_FullPath = hname;
+ return;
+ }
+ hname = pathname;
+ hname += ".c";
+ if(cmFileExists(hname.c_str()))
+ {
+ m_HeaderFileOnly = false;
+ m_FullPath = hname;
+ return;
+ }
+ hname = pathname;
+ hname += ".txx";
+ if(cmFileExists(hname.c_str()))
+ {
+ m_HeaderFileOnly = false;
+ m_FullPath = hname;
+ return;
+ }
+ std::cerr << "file seems to be a header only " << hname << " " << m_ClassName.c_str() << std::endl;
+}
+
+
+void cmClassFile::Print()
+{
+ if(m_AbstractClass)
+ std::cout << "Abstract ";
+ else
+ std::cout << "Concrete ";
+ if(m_HeaderFileOnly)
+ std::cout << "Header file ";
+ else
+ std::cout << "CXX file ";
+ std::cout << m_ClassName << std::endl;
+}