int main(int argc, char *argv[]) { alpm_list_t *results = NULL, *targets = NULL; expac_t *expac = NULL; int r; r = parse_options(&argc, &argv); if(r < 0) { return 1; } targets = process_targets(argc, argv); r = expac_new(&expac, opt_config_file); if(r < 0) { return 1; } results = expac_search(expac, opt_corpus, targets); if(results == NULL) { return 1; } for(alpm_list_t *i = results; i; i = i->next) { print_pkg(i->data, opt_format); } alpm_list_free_inner(targets, free); alpm_list_free(targets); alpm_list_free(results); expac_free(expac); return 0; }
bool deps_json_t::load_standalone(const json_value& json, const pal::string_t& target_name) { if (!process_targets(json, target_name, &m_assets)) { return false; } auto package_exists = [&](const pal::string_t& package) -> bool { return m_assets.libs.count(package); }; auto get_relpaths = [&](const pal::string_t& package, int type_index, bool* rid_specific) -> const std::vector<pal::string_t>& { *rid_specific = false; return m_assets.libs[package].by_type[type_index].vec; }; reconcile_libraries_with_targets(json, package_exists, get_relpaths); const auto& json_object = json.as_object(); const auto iter = json_object.find(_X("runtimes")); if (iter != json_object.end()) { for (const auto& rid : iter->second.as_object()) { auto& vec = m_rid_fallback_graph[rid.first]; for (const auto& fallback : rid.second.as_array()) { vec.push_back(fallback.as_string()); } } } if (trace::is_enabled()) { trace::verbose(_X("The rid fallback graph is: {")); for (const auto& rid : m_rid_fallback_graph) { trace::verbose(_X("%s => ["), rid.first.c_str()); for (const auto& fallback : rid.second) { trace::verbose(_X("%s, "), fallback.c_str()); } trace::verbose(_X("]")); } trace::verbose(_X("}")); } return true; }
bool deps_json_t::load_portable(const json_value& json, const pal::string_t& target_name, const rid_fallback_graph_t& rid_fallback_graph) { if (!process_runtime_targets(json, target_name, rid_fallback_graph, &m_rid_assets)) { return false; } if (!process_targets(json, target_name, &m_assets)) { return false; } auto package_exists = [&](const pal::string_t& package) -> bool { return m_rid_assets.libs.count(package) || m_assets.libs.count(package); }; const std::vector<pal::string_t> empty; auto get_relpaths = [&](const pal::string_t& package, int type_index, bool* rid_specific) -> const std::vector<pal::string_t>& { *rid_specific = false; // Is there any rid specific assets for this type ("native" or "runtime" or "resources") if (m_rid_assets.libs.count(package) && !m_rid_assets.libs[package].rid_assets.empty()) { const auto& assets_by_type = m_rid_assets.libs[package].rid_assets.begin()->second.by_type[type_index].vec; if (!assets_by_type.empty()) { *rid_specific = true; return assets_by_type; } trace::verbose(_X("There were no rid specific %s asset for %s"), deps_entry_t::s_known_asset_types[type_index], package.c_str()); } if (m_assets.libs.count(package)) { return m_assets.libs[package].by_type[type_index].vec; } return empty; }; reconcile_libraries_with_targets(json, package_exists, get_relpaths); return true; }