X-Git-Url: http://git.tdb.fi/?p=builder.git;a=blobdiff_plain;f=source%2Farchitecture.h;h=360f3dd9f6321919df742d4fa7992ffbce0f9e27;hp=752c84a2d19b7afd267ed8863fa630fa34e347cd;hb=bf0883b6dd3946612922aa1b7c04a87d06442df7;hpb=9dd42116ce72f8b2288ab535f89242f87a44337a diff --git a/source/architecture.h b/source/architecture.h index 752c84a..360f3dd 100644 --- a/source/architecture.h +++ b/source/architecture.h @@ -1,6 +1,7 @@ #ifndef ARCHITECTURE_H_ #define ARCHITECTURE_H_ +#include #include #include "buildinfo.h" #include "pattern.h" @@ -33,10 +34,7 @@ private: std::string name; bool native; std::string cross_prefix; - PatternList object_patterns; - PatternList sharedlib_patterns; - PatternList staticlib_patterns; - PatternList executable_patterns; + std::map filename_patterns; public: Architecture(Builder &b, const std::string &spec); @@ -55,14 +53,37 @@ public: const std::string &get_cross_prefix() const { return cross_prefix; } - const PatternList &get_object_patterns() const { return object_patterns; } - const PatternList &get_shared_library_patterns() const { return sharedlib_patterns; } - const PatternList &get_static_library_patterns() const { return staticlib_patterns; } - const PatternList &get_executable_patterns() const { return executable_patterns; } + template + const PatternList &get_patterns() const; + + template + std::string create_filename(const std::string &) const; + +private: + template + void add_pattern(const std::string &); private: static void resolve_aliases(std::vector &); void parse_specification(const std::string &); }; +template +inline const Architecture::PatternList &Architecture::get_patterns() const +{ + std::map::const_iterator i = filename_patterns.find(typeid(T).name()); + if(i!=filename_patterns.end()) + return i->second; + + static PatternList empty; + return empty; +} + +template +inline std::string Architecture::create_filename(const std::string &base) const +{ + const PatternList &patterns = get_patterns(); + return patterns.empty() ? base : patterns.front().apply(base); +} + #endif