Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > 276c4c69ed5efcebe43ee6121194cf59 > files > 171

kernel22-2.2.20-9mdk.src.rpm

#!/bin/awk -f
{
	ARCH=$1
	ARCHES[ARCH]=1
	TYPE=$2
	TYPES[TYPE]=1
	NTOTAL++
	NARCHES[TYPE]++
	NTYPES[ARCH]++
	FILE=$3
	while ((getline < FILE) > 0) {
		if ($0 ~ /^[ 	]*$/)
			continue
		if ($1 != "#define" || $2 !~ /^__ver_/)
			exit 1
		SYMBOL=gensub(/^__ver_/,"","",$2)
		VALUE=gensub(/^(smp_|2gig_|smp2gig_)/,"","",$3)
		VALUE=gensub(/^(smp|2gig|smp2gig)/,"","",VALUE)
		values[SYMBOL,ARCH,TYPE]=VALUE
		if ((getline < FILE) <= 0)
			exit 2
		if ($1 != "#define" || $2 != SYMBOL || $3 != "_set_ver(" SYMBOL ")")
			exit 3
	}
	close(FILE)
}
END {
	count=0
	for (key in values)
		if (values[key]) {
			count++
			split(key,x,SUBSEP)
			SYMBOL=x[1]
			ARCH=x[2]
			TYPE=x[3]
			split("",x)
			split("",ntype)
			split("",total)
			totalsum=0
			for (arch in ARCHES)
			    for (type in TYPES)
				if (values[SYMBOL,arch,type]) {
				    VALUE = values[SYMBOL,arch,type]
				    values[SYMBOL,arch,type] = ""
				    ntype[VALUE,type] += 1
				    total[VALUE] += 1
				    if (x[VALUE])
					x[VALUE] = x[VALUE] " "
				    x[VALUE] = x[VALUE] arch ":" type
				}
			ifstr="#if "
			for (VALUE in x) {
			    if (total[VALUE] == NTOTAL) {
				printf "#define __ver_%s\t_ver_str(%s)\n", SYMBOL, VALUE
                               printf "#define %s _set_ver(%s)\n", SYMBOL, SYMBOL
				break
			    }
			    totalsum += total[VALUE]
			    if (totalsum == NTOTAL && ifstr == "#elif") {
				printf "#else\n#define __ver_%s\t_ver_str(%s)\n", SYMBOL, VALUE
                               printf "#define %s _set_ver(%s)\n", SYMBOL, SYMBOL
				break
			    }
			    str=""
			    split(x[VALUE],y)
			    for (type in TYPES)
				if (ntype[VALUE,type] == NARCHES[type]) {
				    if (str) str = str " || "
				    str = str "defined(__module__" type ")"
				    for (k in y) {
					split(y[k], z, ":")
					if (z[2] == type)
					    delete y[k]
				    }
				}
			    for (arch in ARCHES) {
				narch=0
				for (k in y) {
				    split(y[k], z, ":")
				    if (z[1] == arch)
					narch++
				}
				if (narch == NTYPES[arch]) {
				    if (str) str = str " || "
				    str = str "defined(__module__" arch ")"
				    for (k in y) {
					split(y[k], z, ":")
					if (z[1] == arch)
					    delete y[k]
				    }
				}
			    }
			    for (k in y) {
				split(y[k], z, ":")
				if (str) str = str " || "
				str = str "defined(__module__" z[1] "_" z[2] ")"
			    }
			    printf "%s %s\n#define __ver_%s\t_ver_str(%s)\n", ifstr, str, SYMBOL, VALUE
                           printf "#define %s _set_ver(%s)\n", SYMBOL, SYMBOL
			    ifstr="#elif "
			}
			if (ifstr == "#elif ")
			    printf "#endif\n"
		}
	if (!count)
		printf "\n"
}