165{
167
168
169 if (package->
resolver & r->resolver)
170 {
171#ifdef ENABLE_EXTENSIVE_DEBUG
172 if (package->
resolver & (r->resolver << 1))
174 else
176#endif
177 return package->
resolver & (r->resolver << 1);
178 }
179
181 package->
resolver |= (r->resolver << 1);
182
183#ifdef ENABLE_EXTENSIVE_DEBUG
185#endif
186
187 switch (package->
type)
188 {
191 {
193
196 !r->check_real (r, package, d))
197 goto error;
198 }
199
200#ifdef ENABLE_EXTENSIVE_DEBUG
201 if (dependend_package)
203 else
205#endif
206
207 r->do_real (package, r->do_real_data);
208 break;
209
211
212#ifdef ENABLE_EXTENSIVE_DEBUG
213 if (dependend_package)
215 else
217#endif
218
220 {
222
224 package->
resolver &= ~(r->resolver << 2);
225 }
226
227 while (1)
228 {
230
232 {
234
236 {
237 if (!(package->
resolver & (r->resolver << 2)))
238 best_provide = r->check_virtual (package, best_provide, d, r->check_virtual_data);
239 }
240 }
241
242 if (best_provide)
243 {
244 if (r->check_real (r, dependend_package, best_provide))
245 break;
246 else
247 package->
resolver |= (r->resolver << 2);
248 }
249 else if (!r->check_non_existant (r, package, NULL))
250 goto error;
251 else
252 break;
253 }
254
255 break;
256
258 if (!r->check_non_existant (r, package, NULL))
259 goto error;
260 }
261
262 return true;
263
264error:
265#ifdef ENABLE_EXTENSIVE_DEBUG
267#endif
268 package->
resolver &= ~(r->resolver << 1);
269 return false;
270}
void di_log(di_log_level_flags log_level, const char *format,...) __attribute__((format(printf
@ DI_LOG_LEVEL_DEBUG
Definition: log.h:42
@ di_package_type_virtual_package
Definition: package.h:88
@ di_package_type_real_package
Definition: package.h:89
@ di_package_type_non_existent
Definition: package.h:87
@ di_package_dependency_type_pre_depends
Definition: package.h:129
@ di_package_dependency_type_depends
Definition: package.h:128
@ di_package_dependency_type_reverse_provides
Definition: package.h:134
Package dependency.
Definition: package.h:142
di_package_dependency_type type
Definition: package.h:143
di_slist depends
Definition: package.h:112
unsigned int resolver
Definition: package.h:118
di_package_type type
Definition: package.h:102
void * data
Definition: slist.h:48