// file : build2/cxx/link -*- C++ -*- // copyright : Copyright (c) 2014-2016 Code Synthesis Ltd // license : MIT; see accompanying LICENSE file #ifndef BUILD2_CXX_LINK #define BUILD2_CXX_LINK #include #include #include #include #include namespace build2 { namespace cxx { class link: public rule { public: virtual match_result match (action, target&, const std::string& hint) const; virtual recipe apply (action, target&, const match_result&) const; static target_state perform_update (action, target&); static link instance; public: enum class type {e, a, so}; enum class order {a, so, a_so, so_a}; static type link_type (target& t) { return t.is_a () ? type::e : (t.is_a () ? type::a : type::so); } static order link_order (target&); // Determine the library member (liba or libso) to link. // static target& link_member (bin::lib&, order); private: friend class compile; using search_paths = std::vector; using search_paths_cache = butl::optional; static target* search_library (search_paths_cache&, prerequisite&); static search_paths extract_library_paths (scope&); }; } } #endif // BUILD2_CXX_LINK