pkgsrc-wip/pkg_summary-utils/files/pkg_grep_summary.awk

180 lines
3.1 KiB
Awk
Raw Normal View History

2010-05-29 17:20:56 +02:00
#use "has_prefix.awk"
#use "has_suffix.awk"
#use "psu_funcs.awk"
2010-05-29 17:20:56 +02:00
#env "LC_ALL=C"
BEGIN {
2010-05-30 00:39:12 +02:00
_gs_matched = -1 # -1 - unknown, 0 - false, 1 - true
_gs_count = 0
_sg_multiline ["PLIST"] = 1
_sg_multiline ["DESCRIPTION"] = 1
_sg_multiline ["DEPENDS"] = 1
_sg_multiline ["REQUIRES"] = 1
_sg_multiline ["PROVIDES"] = 1
_sg_multiline ["CONFLICTS"] = 1
keep_fields = 0
}
2010-05-29 17:20:56 +02:00
function match_first_word (s, word){
if (s == word)
return 1
else if (!has_prefix(s, word))
return 0
else{
return substr(s, length(word)+1, 1) ~ /^[^A-Za-z0-9]$/
}
}
function match_last_word (s, word){
if (s == word)
return 1
else if (!has_suffix(s, word))
return 0
else
return substr(s, length(s)-length(word), 1) ~ /^[^A-Za-z0-9]$/
}
function match_word (s, word, idx){
if (s == word)
return 1
2010-05-30 00:39:12 +02:00
idx = index(s, word)
2010-05-29 17:20:56 +02:00
if (!idx)
return 0
if (idx > 1 && substr(s, idx-1, 1) ~ /[A-Za-z0-9]$/)
return 0
idx += length(word)
if (idx <= length(s) && substr(s, idx, 1) ~ /[A-Za-z0-9]$/)
return 0
return 1
}
function match_keywords (s, cnt_s, arr_s, set_s, i){
if (s !~ re_kw)
return 0
cnt_s = split(s, arr_s, /[^A-Za-z0-9]/)
for (i=1; i <= cnt_s; ++i){
set_s [arr_s [i]] = 1
}
for (i=1; i <= cnt_kw; ++i){
if (! (arr_kw [i] in set_s)){
return 0
}
}
return 1
}
function update_skip (){
if (ic)
fvalue = tolower(fvalue)
2010-05-30 00:39:12 +02:00
_gs_matched = grep_summary__condition()
2010-05-30 00:39:12 +02:00
if (_gs_matched == 1){
for (i=0; i < _gs_count; ++i){
print _gs_accu [i]
}
2010-05-30 00:39:12 +02:00
delete _gs_accu
_gs_count = 0
}else if (_gs_matched == 0 && (fname in _sg_multiline)){
_gs_matched = -1
2008-05-08 14:57:45 +02:00
}
}
2010-05-30 00:39:12 +02:00
_gs_matched == 0 && NF > 0 {
next
}
{
pos = index($0, "=")
if (pos > 0){
fname = substr($0, 1, pos-1)
fvalue = substr($0, pos+1)
}else{
fname = ""
fvalue = ""
}
}
function check_PKGPATHe (){
2010-05-30 00:39:12 +02:00
if (_gs_assigns != "" && _gs_pkgpath != ""){
fvalue = _gs_pkgpath ":" _gs_assigns
fname = "PKGPATHe"
update_skip()
2010-05-30 00:39:12 +02:00
}else if (index(_gs_pkgpath, ":") > 0){
fvalue = _gs_pkgpath
fname = "PKGPATHe"
update_skip()
}
}
2010-05-30 00:39:12 +02:00
_gs_matched == -1 {
2010-03-25 21:43:27 +01:00
if (grep_summary__field == "PKGBASE"){
if (fname == "PKGNAME"){
fname = "PKGBASE"
fvalue = pkgname2pkgbase(fvalue)
update_skip()
}
}else if (grep_summary__field == "PKGPATHe"){
if (fname == "ASSIGNMENTS") {
2010-05-30 00:39:12 +02:00
_gs_assigns = fvalue
check_PKGPATHe()
}else if (fname == "PKGPATH") {
2010-05-30 00:39:12 +02:00
_gs_pkgpath = fvalue
check_PKGPATHe()
}
2010-03-25 21:43:27 +01:00
}else if (grep_summary__field == "PKGPATH"){
idx = index(fvalue, ":")
if (idx > 0)
fvalue = substr(fvalue, 1, idx-1)
}
2010-03-25 21:43:27 +01:00
if (fname == grep_summary__field || "" == grep_summary__field) {
update_skip()
}
}
2010-05-30 00:39:12 +02:00
_gs_matched == 1 && NF > 0 {
print $0
next
}
keep_fields {
fields [fname] = fvalue
}
2010-05-30 00:39:12 +02:00
_gs_matched == -1 && NF > 0 {
_gs_accu [_gs_count++] = $0
}
NF == 0 {
2010-05-30 00:39:12 +02:00
if (_gs_matched == -1 && grep_summary__field == "PKGPATHe"){
fvalue = _gs_pkgpath
update_skip()
fvalue = ""
}
2010-05-30 00:39:12 +02:00
if (_gs_matched == -1){
update_skip()
}
2010-05-30 00:39:12 +02:00
if (_gs_matched == 1){
print ""
}
2010-05-30 00:39:12 +02:00
delete _gs_accu
delete fields
2010-05-30 00:39:12 +02:00
_gs_count = 0
_gs_matched = -1
2010-05-30 00:39:12 +02:00
_gs_assigns = _gs_pkgpath = ""
}