@@ -2104,4 +2104,74 @@ int (*pool_get_custom_vendorcheck(Pool *pool))(Pool *, Solvable *, Solvable *)
21042104 return pool -> custom_vendorcheck ;
21052105}
21062106
2107+ static int
2108+ pool_dep_fulfilled_in_map_cplx (Pool * pool , const Map * map , Reldep * rd )
2109+ {
2110+ if (rd -> flags == REL_COND )
2111+ {
2112+ if (ISRELDEP (rd -> evr ))
2113+ {
2114+ Reldep * rd2 = GETRELDEP (pool , rd -> evr );
2115+ if (rd2 -> flags == REL_ELSE )
2116+ {
2117+ if (pool_dep_fulfilled_in_map (pool , map , rd2 -> name ))
2118+ return pool_dep_fulfilled_in_map (pool , map , rd -> name );
2119+ return pool_dep_fulfilled_in_map (pool , map , rd2 -> evr );
2120+ }
2121+ }
2122+ if (pool_dep_fulfilled_in_map (pool , map , rd -> name ))
2123+ return 1 ;
2124+ return !pool_dep_fulfilled_in_map (pool , map , rd -> evr );
2125+ }
2126+ if (rd -> flags == REL_UNLESS )
2127+ {
2128+ if (ISRELDEP (rd -> evr ))
2129+ {
2130+ Reldep * rd2 = GETRELDEP (pool , rd -> evr );
2131+ if (rd2 -> flags == REL_ELSE )
2132+ {
2133+ if (!pool_dep_fulfilled_in_map (pool , map , rd2 -> name ))
2134+ return pool_dep_fulfilled_in_map (pool , map , rd -> name );
2135+ return pool_dep_fulfilled_in_map (pool , map , rd2 -> evr );
2136+ }
2137+ }
2138+ if (!pool_dep_fulfilled_in_map (pool , map , rd -> name ))
2139+ return 0 ;
2140+ return !pool_dep_fulfilled_in_map (pool , map , rd -> evr );
2141+ }
2142+ if (rd -> flags == REL_AND )
2143+ {
2144+ if (!pool_dep_fulfilled_in_map (pool , map , rd -> name ))
2145+ return 0 ;
2146+ return pool_dep_fulfilled_in_map (pool , map , rd -> evr );
2147+ }
2148+ if (rd -> flags == REL_OR )
2149+ {
2150+ if (pool_dep_fulfilled_in_map (pool , map , rd -> name ))
2151+ return 1 ;
2152+ return pool_dep_fulfilled_in_map (pool , map , rd -> evr );
2153+ }
2154+ return 0 ;
2155+ }
2156+
2157+
2158+ int pool_dep_fulfilled_in_map (Pool * pool , const Map * map , Id dep )
2159+ {
2160+ Id p , pp ;
2161+
2162+ if (ISRELDEP (dep )) {
2163+ Reldep * rd = GETRELDEP (pool , dep );
2164+ if (rd -> flags == REL_COND || rd -> flags == REL_UNLESS ||
2165+ rd -> flags == REL_AND || rd -> flags == REL_OR )
2166+ return pool_dep_fulfilled_in_map_cplx (pool , map , rd );
2167+ if (rd -> flags == REL_NAMESPACE && rd -> name == NAMESPACE_SPLITPROVIDES )
2168+ return 0 ;
2169+ }
2170+ FOR_PROVIDES (p , pp , dep ) {
2171+ if (MAPTST (map , p ))
2172+ return 1 ;
2173+ }
2174+ return 0 ;
2175+ }
2176+
21072177/* EOF */
0 commit comments