diff --git a/libpkgconf/libpkgconf.h b/libpkgconf/libpkgconf.h index ca5d63f..e36cf96 100644 --- a/libpkgconf/libpkgconf.h +++ b/libpkgconf/libpkgconf.h @@ -278,6 +278,7 @@ PKGCONF_API void pkgconf_cross_personality_deinit(pkgconf_cross_personality_t *p #define PKGCONF_PKG_PKGF_DONT_MERGE_SPECIAL_FRAGMENTS 0x4000 #define PKGCONF_PKG_PKGF_FDO_SYSROOT_RULES 0x8000 #define PKGCONF_PKG_PKGF_PKGCONF1_SYSROOT_RULES 0x10000 +#define PKGCONF_PKG_PKGF_ANCESTOR 0x20000 #define PKGCONF_PKG_DEPF_INTERNAL 0x1 #define PKGCONF_PKG_DEPF_PRIVATE 0x2 diff --git a/libpkgconf/pkg.c b/libpkgconf/pkg.c index 24d99d2..fc73bf3 100644 --- a/libpkgconf/pkg.c +++ b/libpkgconf/pkg.c @@ -1487,6 +1487,8 @@ pkgconf_pkg_walk_list(pkgconf_client_t *client, unsigned int eflags = PKGCONF_PKG_ERRF_OK; pkgconf_node_t *node, *next; + parent->flags |= PKGCONF_PKG_PKGF_ANCESTOR; + PKGCONF_FOREACH_LIST_ENTRY_SAFE(deplist->head, next, node) { unsigned int eflags_local = PKGCONF_PKG_ERRF_OK; @@ -1507,7 +1509,7 @@ pkgconf_pkg_walk_list(pkgconf_client_t *client, if (pkgdep == NULL) continue; - if (pkgdep->serial == client->serial && !(parent->flags & PKGCONF_PKG_PROPF_VIRTUAL)) + if((pkgdep->flags & PKGCONF_PKG_PKGF_ANCESTOR) != 0) { pkgdep->identifier = ++client->identifier; @@ -1545,6 +1547,8 @@ next: pkgconf_pkg_unref(client, pkgdep); } + parent->flags &= ~PKGCONF_PKG_PKGF_ANCESTOR; + return eflags; }