]> git.tdb.fi Git - builder.git/blobdiff - source/architecture.cpp
Fix an incorrect assumption of target name being the basename of its path
[builder.git] / source / architecture.cpp
index cf888f00e24ede0d80ee16952fb5c63724c53738..3a9f5549df5f7a2add49547dbf05c22d122117e3 100644 (file)
@@ -1,15 +1,8 @@
-/* $Id$
-
-This file is part of builder
-Copyright © 2007-2010  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #include <limits>
 #ifndef WIN32
 #include <sys/utsname.h>
 #endif
-#include <msp/strings/formatter.h>
+#include <msp/strings/format.h>
 #include <msp/strings/utils.h>
 #include "architecture.h"
 #include "builder.h"
@@ -56,6 +49,7 @@ const char *aliases[] =
 {
        "i586",  "pentium",
        "i686",  "pentiumpro",
+       "x86_64", "athlon64",
        "win32", "windows",
        0
 };
@@ -151,7 +145,7 @@ std::string Architecture::get_tool(const string &t) const
                        return native_arch.get_tool(t);
        }
        else
-               throw KeyError("Unknown tool", t);
+               throw invalid_argument("Unknown tool");
 }
 
 bool Architecture::match_name(const string &pattern) const
@@ -160,7 +154,9 @@ bool Architecture::match_name(const string &pattern) const
        for(vector<string>::const_iterator i=parts.begin(); i!=parts.end(); ++i)
        {
                string part = resolve_alias(*i);
-               if(part!=type && part!=cpu && part!=system)
+               if((part=="32" && bits==32) || (part=="64" && bits==64))
+                       ;
+               else if(part!=type && part!=cpu && part!=system)
                        return false;
        }
        return true;
@@ -188,7 +184,7 @@ void Architecture::parse_specification(const string &spec)
                        if(part==types[j])
                        {
                                if(!type.empty() && part!=type)
-                                       throw InvalidParameterValue("Conflicting type specification");
+                                       throw invalid_argument("Conflicting type specification");
                                type = part;
                                ok = true;
                        }
@@ -199,7 +195,7 @@ void Architecture::parse_specification(const string &spec)
                                if(type.empty())
                                        type = cpus[j+1];
                                else if(cpus[j+1]!=type)
-                                       throw InvalidParameterValue("Conflicting CPU specification");
+                                       throw invalid_argument("Conflicting CPU specification");
                                cpu = part;
                                ok = true;
                        }
@@ -218,7 +214,7 @@ void Architecture::parse_specification(const string &spec)
                }
 
                if(!ok)
-                       throw InvalidParameterValue("Unrecognized part in arch specification: "+*i);
+                       throw invalid_argument("Unrecognized part in arch specification: "+*i);
        }
 }