27 inline Capability autoCapability(
const Capabilities & provides_r )
29 static const Capability autopattern(
"autopattern()" );
30 for (
const auto & cap : provides_r )
49 typedef std::map<Pattern::constPtr, DefaultIntegral<bool, false> > PatternMap;
51 typedef PatternMap::key_type value_type;
69 expandIncludes( unprocessed );
70 expandExtending( unprocessed );
73 }
while( (unprocessed = nextUnprocessed()) );
79 const_iterator begin()
const
82 const_iterator end()
const
102 for_( it, c.begin(), c.end() )
104 expandInclude( Capability( it->c_str() ) );
109 void expandInclude(
const Capability & include_r )
111 sat::WhatProvides w( include_r );
112 for_( it, w.begin(), w.end() )
123 for_( it, pool.byKindBegin<Pattern>(), pool.byKindEnd<Pattern>() )
125 expandIfExtends( pat_r, *it );
130 void expandIfExtends(
const Pattern::constPtr & pat_r,
const PoolItem & extending_r )
134 for_( it, c.begin(), c.end() )
136 if ( providedBy( pat_r, Capability( it->c_str() ) ) )
151 sat::Solvable pat( pat_r->satSolvable() );
152 sat::WhatProvides w( extends_r );
153 for_( it, w.begin(), w.end() )
234 caps_r.insert( c.begin(),c.end() );
266 if ( includeSuggests_r )
274 if ( includeSuggests_r )
286 PatternExpander expander;
287 if ( ! expander.doExpand(
this ) )
291 for_( it, expander.begin(), expander.end() )
293 Contents c( (*it)->depends( includeSuggests_r ) );
306 addCaps( caps, depKeeper_r, dep_r );
310 const PoolItem & pi( sel->theObj() );
317 inline void dependsSet( sat::Solvable depKeeper_r, Pattern::ContentsSet & collect_r )
319 dependsSetDoCollect( depKeeper_r,
Dep::REQUIRES, collect_r.req );
321 dependsSetDoCollect( depKeeper_r,
Dep::SUGGESTS, collect_r.sug );
325 inline bool isPatternsPackage( sat::Solvable depKeeper_r )
327 static const Capability indicator(
"pattern()" );
328 return depKeeper_r.provides().matches( indicator );
339 std::set<sat::Solvable> recTodo;
340 std::set<sat::Solvable> allDone;
344 std::set<sat::Solvable> reqTodo;
347 reqTodo.insert( depKeeper );
349 while ( ! reqTodo.empty() )
352 depKeeper = ( *reqTodo.begin() );
353 reqTodo.erase( reqTodo.begin() );
354 allDone.insert( depKeeper );
358 dependsSet( depKeeper, result );
363 if ( collect_r.
req.
insert( solv ) && recursively_r && isPatternsPackage( solv ) )
364 reqTodo.insert( solv );
368 if ( collect_r.
rec.
insert( solv ) && recursively_r && isPatternsPackage( solv ) )
369 recTodo.insert( solv );
378 while ( ! recTodo.empty() )
381 depKeeper = ( *recTodo.begin() );
382 recTodo.erase( recTodo.begin() );
383 if ( ! allDone.insert( depKeeper ).second )
388 dependsSet( depKeeper, result );
394 if ( collect_r.
rec.
insert( solv ) && recursively_r && isPatternsPackage( solv ) )
395 recTodo.insert( solv );
399 if ( collect_r.
rec.
insert( solv ) && recursively_r && isPatternsPackage( solv ) )
400 recTodo.insert( solv );