| #!/bin/bash |
| # Parses Kconfig lines like |
| # CONFIG_DEBUG=y >=6.1 |
| # # CONFIG_DEBUG is not set <6.1 |
| # and only adds them to the build if the kernel is 6.1 or greater |
| # Regular lines are unchanged |
| version="$1" |
| shift |
| for file in "$@"; do |
| echo "Trimming $file to $version" >&2 |
| exec {nfile}<>"$file.tmp" |
| while read -r line; do |
| larr=($line) |
| if [[ ${larr[0]} == '#' ]]; then |
| key="${larr[1]}" |
| val='n' |
| larr=("${larr[@]:5}") |
| else |
| key="${larr[0]%%=*}" |
| val="${larr[0]#*=}" |
| larr=("${larr[@]:1}") |
| fi |
| skip= |
| for const in "${larr[@]}"; do |
| if [[ "${const:0:1}" == '#' ]]; then |
| break |
| elif [[ ${const:0:2} == '>=' ]]; then |
| expected="${const:2}"$'\n'"$version" |
| if [[ $expected != $(echo "$expected" | sort -V) ]]; then |
| skip=1 |
| break |
| fi |
| elif [[ ${const:0:1} == '>' ]]; then |
| expected="${const:1}"$'\n'"$version" |
| if [[ ${const:1} == $version || $expected != $(echo "$expected" | sort -V) ]]; then |
| skip=1 |
| break |
| fi |
| elif [[ ${const:0:2} == '<=' ]]; then |
| expected="$version"$'\n'"${const:2}" |
| if [[ $expected != $(echo "$expected" | sort -V) ]]; then |
| skip=1 |
| break |
| fi |
| elif [[ ${const:0:1} == '<' ]]; then |
| expected="$version"$'\n'"${const:1}" |
| if [[ ${const:1} == $version || $expected != $(echo "$expected" | sort -V) ]]; then |
| skip=1 |
| break |
| fi |
| else |
| echo "Unexpected version comparison '$const' at line: $line" >&2 |
| exit 1 |
| fi |
| done |
| if [[ -z $skip ]]; then |
| echo "$key=$val" >&$nfile |
| fi |
| done < <(grep '^\(# \)\?CONFIG_' "$file") |
| exec {nfile}>&- |
| mv "$file.tmp" "$file" |
| done |