@@ -754,4 +754,74 @@ int (*pool_get_custom_vendorcheck(Pool *pool))(Pool *, Solvable *, Solvable *)
754754 return pool -> custom_vendorcheck ;
755755}
756756
757+ static int
758+ pool_dep_fulfilled_in_map_cplx (Pool * pool , const Map * map , Reldep * rd )
759+ {
760+ if (rd -> flags == REL_COND )
761+ {
762+ if (ISRELDEP (rd -> evr ))
763+ {
764+ Reldep * rd2 = GETRELDEP (pool , rd -> evr );
765+ if (rd2 -> flags == REL_ELSE )
766+ {
767+ if (pool_dep_fulfilled_in_map (pool , map , rd2 -> name ))
768+ return pool_dep_fulfilled_in_map (pool , map , rd -> name );
769+ return pool_dep_fulfilled_in_map (pool , map , rd2 -> evr );
770+ }
771+ }
772+ if (pool_dep_fulfilled_in_map (pool , map , rd -> name ))
773+ return 1 ;
774+ return !pool_dep_fulfilled_in_map (pool , map , rd -> evr );
775+ }
776+ if (rd -> flags == REL_UNLESS )
777+ {
778+ if (ISRELDEP (rd -> evr ))
779+ {
780+ Reldep * rd2 = GETRELDEP (pool , rd -> evr );
781+ if (rd2 -> flags == REL_ELSE )
782+ {
783+ if (!pool_dep_fulfilled_in_map (pool , map , rd2 -> name ))
784+ return pool_dep_fulfilled_in_map (pool , map , rd -> name );
785+ return pool_dep_fulfilled_in_map (pool , map , rd2 -> evr );
786+ }
787+ }
788+ if (!pool_dep_fulfilled_in_map (pool , map , rd -> name ))
789+ return 0 ;
790+ return !pool_dep_fulfilled_in_map (pool , map , rd -> evr );
791+ }
792+ if (rd -> flags == REL_AND )
793+ {
794+ if (!pool_dep_fulfilled_in_map (pool , map , rd -> name ))
795+ return 0 ;
796+ return pool_dep_fulfilled_in_map (pool , map , rd -> evr );
797+ }
798+ if (rd -> flags == REL_OR )
799+ {
800+ if (pool_dep_fulfilled_in_map (pool , map , rd -> name ))
801+ return 1 ;
802+ return pool_dep_fulfilled_in_map (pool , map , rd -> evr );
803+ }
804+ return 0 ;
805+ }
806+
807+
808+ int pool_dep_fulfilled_in_map (Pool * pool , const Map * map , Id dep )
809+ {
810+ Id p , pp ;
811+
812+ if (ISRELDEP (dep )) {
813+ Reldep * rd = GETRELDEP (pool , dep );
814+ if (rd -> flags == REL_COND || rd -> flags == REL_UNLESS ||
815+ rd -> flags == REL_AND || rd -> flags == REL_OR )
816+ return pool_dep_fulfilled_in_map_cplx (pool , map , rd );
817+ if (rd -> flags == REL_NAMESPACE && rd -> name == NAMESPACE_SPLITPROVIDES )
818+ return 0 ;
819+ }
820+ FOR_PROVIDES (p , pp , dep ) {
821+ if (MAPTST (map , p ))
822+ return 1 ;
823+ }
824+ return 0 ;
825+ }
826+
757827/* EOF */
0 commit comments