Merge trunk HEAD (r46369)
[reactos.git] / reactos / tools / rbuild / exception.h
index a9de393..c095285 100644 (file)
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  */
-#ifndef __EXCEPTION_H
-#define __EXCEPTION_H
+
+#pragma once
 
 #include "pch.h"
+#include "xml.h"
 
 class Exception
 {
@@ -26,11 +27,22 @@ public:
        Exception ( const std::string& message );
        Exception ( const char* format,
                    ...);
-       std::string Message;
+       const std::string& operator *() { return _e; }
+
 protected:
        Exception ();
-       void SetMessage ( const char* message,
-                         va_list args );
+       void SetMessage ( const char* message, ... );
+       void SetMessageV ( const char* message, va_list args );
+
+private:
+       std::string _e;
+};
+
+
+class MissingArgumentException : public Exception
+{
+public:
+       MissingArgumentException ( const std::string& argument );
 };
 
 
@@ -68,30 +80,14 @@ public:
        std::string Filename;
 };
 
-class InvalidBuildFileException : public Exception
+class InvalidDateException : public Exception
 {
 public:
-       InvalidBuildFileException ( const std::string& location,
-                                   const char* message,
-                                   ...);
-       void SetLocationMessage ( const std::string& location,
-                                 const char* message,
-                                 va_list args );
-protected:
-       InvalidBuildFileException ();
-};
-
-
-class XMLSyntaxErrorException : public InvalidBuildFileException
-{
-public:
-       XMLSyntaxErrorException ( const std::string& location,
-                                 const char* message,
-                                 ... );
+       InvalidDateException ( const std::string& filename );
+       std::string Filename;
 };
 
-
-class RequiredAttributeNotFoundException : public InvalidBuildFileException
+class RequiredAttributeNotFoundException : public XMLInvalidBuildFileException
 {
 public:
        RequiredAttributeNotFoundException ( const std::string& location,
@@ -100,7 +96,7 @@ public:
 };
 
 
-class InvalidAttributeValueException : public InvalidBuildFileException
+class InvalidAttributeValueException : public XMLInvalidBuildFileException
 {
 public:
        InvalidAttributeValueException ( const std::string& location,
@@ -122,7 +118,7 @@ public:
        UnknownBackendException ( const std::string& name );
 };
 
-class UnknownModuleTypeException : public InvalidBuildFileException
+class UnknownModuleTypeException : public XMLInvalidBuildFileException
 {
 public:
        UnknownModuleTypeException ( const std::string& location,
@@ -139,4 +135,12 @@ public:
        int ExitCode;
 };
 
-#endif /* __EXCEPTION_H */
+
+class UnsupportedBuildToolException : public Exception
+{
+public:
+       UnsupportedBuildToolException ( const std::string& buildtool,
+                                       const std::string& version );
+       std::string BuildTool;
+       std::string Version;
+};