On 04/03/2016 12:11 PM, Jan Engelhardt wrote: > On Friday 2016-04-01 22:35, Matthias Schiffer wrote: > >> The kernel version detection code uses some bashisms, which makes the build >> fail on Debian systems where /bin/sh links to dash. Replace with POSIX- >> conforming commands at the cost of requiring awk. >> + krel="$(make -sC "$kbuilddir" M=$PWD kernelrelease | $AWK -v 'FS=[[^0-9.]]' '{print $1; exit}')"; >> + save_IFS=$IFS; >> + IFS='.'; >> + set x $krel; >> + kmajor="$(($2+0))"; >> + kminorb="$(($3+0))"; >> + kmicro="$(($4+0))"; >> + kstable="$(($5+0))"; >> + IFS=$save_IFS; >> if test -z "$kmajor" -o -z "$kminor" -o -z "$kmicro"; then > > To test its resilience against silly krel strings (not exactly unheard of), > let's pretend that > > krel="4x.6.0" > > The previous code would conclude (albeit with a silly broken-up version like > 4.0.6.0 or 0.0.0.0). However, your change makes the script totally falls over: > > checking kernel version that we will build against... ./configure: line > 11957: 4x: value too great for base (error toke > n is "4x") > ./configure: line 8: printf %s\n: command not found > ./configure: line 14: AMDEPBACKSLASH: command not found > ./configure: line 15: AMDEP_FALSE: command not found > ./configure: line 16: AMDEP_TRUE: command not found > ./configure: line 17: AMTAR: command not found > [...] > > (and who knows what other commands - rm? - it tries to execute by sheer > chance). > Is it possible to harden the dash-compatible variant? > Weird, what version/variant of awk are you using (or were you just changing the value of krel in an artificial test and dropped the awk call altogether)? krel should be cut off at the first character not in the set [0-9.], so krel would be "4" and version 4.0.0.0 should result. If found out though that configure really doesn't like failures while IFS is modified, as it sets up a cleanup trap that will break completely in this case (resulting in the tons of "command not found"). I'll send a v2 which resets IFS to its old value directly after the set line, so even on systems with broken awk (which should not exist), the script will just fail with "4x: value too great for base" or similar, and nothing worse. Matthias