2 # aur-graph - print package/dependency pairs
5 # = 0 : if ver1 == ver2
7 function get_vercmp
(ver1
, ver2
, op
) {
8 command =
("vercmp " ver1
" " ver2
)
10 if (op ==
"-" || ver2 ==
"-") {
11 return "true" # dependency is unversioned
12 } else if (op ==
"=") {
13 return (ver1 == ver2
) # common case
14 } else if (op ==
"<") {
18 } else if (op ==
">") {
22 } else if (op ==
"<=") {
26 } else if (op ==
">=") {
31 printf("invalid operation\n") > "/dev/stderr"
41 # track both the pkgbases themselves and their number of deps
42 dep_counts
[pkgbase
] =
0
51 /^
\t(make
|check
)?depends
/ {
53 # POSIX array of arrays!
54 pkg_deps
[pkgbase
, ++dep_counts
[pkgbase
]] = $
3 # versioned
63 pkg_map
[$
3] = pkgbase
# node
64 ver_map
[$
3] = pkgver
# weight
70 # if provider is unversioned, use pkgver
72 ver_map
[prov
[1]] = prov
[2]
74 ver_map
[prov
[1]] = pkgver
77 pkg_map
[prov
[1]] = pkgbase
83 for (pkgbase in dep_counts
) {
84 # add a loop to isolated nodes (#402)
85 printf("%s\t%s\n", pkgbase
, pkgbase
)
87 for (dep =
1; dep
<= dep_counts
[pkgbase
]; dep
++) {
88 dep_op =
"-" # unversioned / no comparison
90 # valid operators (important: <= before <)
91 split("<=|>=|<|=|>", cmp
, "|")
93 # split: fourth argument is gawk extension
95 split(pkg_deps
[pkgbase
, dep
], dep_split
, cmp
[i
])
97 if ("2" in dep_split
) {
103 if ("1" in dep_split
)
104 dep_pkgname = dep_split
[1]
108 if ("2" in dep_split
)
109 dep_pkgver = dep_split
[2]
113 # only print dependency if it was encountered before
114 if (dep_pkgname in pkg_map ==
0)
117 # run vercmp with provider and versioned dependency
118 if (get_vercmp
(ver_map
[dep_pkgname
], dep_pkgver
, dep_op
)) {
119 printf("%s\t%s\n", pkgbase
, pkg_map
[dep_pkgname
])
121 printf("invalid node: %s %s (required: %s%s)\n",
122 dep_pkgname
, ver_map
[dep_pkgname
], dep_op
, dep_pkgver
) > "/dev/stderr"
125 # delay mismatches to loop end