Dear all, During a recent package submission, we were highlighted that some lines in our configure script didn't follow the correct syntax. The lines looked like this: x=$(($y/10)) We were indicated at the time that this is because the statement does not use Bourne shell syntax, which is absolutely true, and also that the manual warns about this, which is true again. So far everything is clear. However, what confuses me is that even when the manual says that "you can include an executable (Bourne) shell script configure in your package" [1], the associated footnote says something slightly different: "The script should only assume a POSIX-compliant /bin/sh" [2]. The footnote goes even further, and links to the POSIX specification of the Shell Command Language [3] (as published by The Open Group), which explicitly includes arithmetic expressions like the one above in its syntax [4]. My question then is: what exact dialect should be considered? Given that the statement above does not work in the Bourne shell, I conclude that the Bourne shell is not POSIX-compliant. That in turn would make the manual ambiguous as to the precise dialect that should be used by our configure scripts, and either the shells used by R should be changed to be POSIX-compliants, or the manual edited to be more precise regarding . Many thanks. Rodrigo [1] https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Configure-and-cleanup [2] https://cran.r-project.org/doc/manuals/r-release/R-exts.html#FOOT25 [3] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html [4] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04
For what it's worth, Autoconf does not assume that arithmetic expansion will be available. Instead, it emits the following shell code: if ( eval 'test $(( 1 + 1 )) = 2' ) 2>/dev/null; then eval 'func_arith () { func_arith_result=$(( $* )) }' else func_arith () { func_arith_result=`expr "$@"` } fi 2017-12-17 23:55 GMT+01:00 Rodrigo Tobar <rtobar at icrar.org>:> Dear all, > > During a recent package submission, we were highlighted that some lines in > our configure script didn't follow the correct syntax. The lines looked like > this: > > x=$(($y/10)) > > We were indicated at the time that this is because the statement does not > use Bourne shell syntax, which is absolutely true, and also that the manual > warns about this, which is true again. So far everything is clear. > > However, what confuses me is that even when the manual says that "you can > include an executable (Bourne) shell script configure in your package" [1], > the associated footnote says something slightly different: "The script > should only assume a POSIX-compliant /bin/sh" [2]. The footnote goes even > further, and links to the POSIX specification of the Shell Command Language > [3] (as published by The Open Group), which explicitly includes arithmetic > expressions like the one above in its syntax [4]. > > My question then is: what exact dialect should be considered? Given that the > statement above does not work in the Bourne shell, I conclude that the > Bourne shell is not POSIX-compliant. That in turn would make the manual > ambiguous as to the precise dialect that should be used by our configure > scripts, and either the shells used by R should be changed to be > POSIX-compliants, or the manual edited to be more precise regarding . > > Many thanks. > > Rodrigo > > [1] > https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Configure-and-cleanup > [2] https://cran.r-project.org/doc/manuals/r-release/R-exts.html#FOOT25 > [3] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html > [4] > http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04 > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel-- I?aki ?car http://www.enchufa2.es @Enchufa2
>>>>> I?aki ?car writes:Same from here: in addition to what the standards say, it always pays to be defensive and check "Portable Shell Programming" in the Autoconf manual. Among other things, this says '$((EXPRESSION))' Arithmetic expansion is not portable as some shells (most notably Solaris 10 '/bin/sh') don't support it. motivating the code shown below. Perhaps simplest to always use expr. -k> For what it's worth, Autoconf does not assume that arithmetic > expansion will be available. Instead, it emits the following shell > code:> if ( eval 'test $(( 1 + 1 )) = 2' ) 2>/dev/null; then > eval 'func_arith () > { > func_arith_result=$(( $* )) > }' > else > func_arith () > { > func_arith_result=`expr "$@"` > } > fi> 2017-12-17 23:55 GMT+01:00 Rodrigo Tobar <rtobar at icrar.org>: >> Dear all, >> >> During a recent package submission, we were highlighted that some lines in >> our configure script didn't follow the correct syntax. The lines looked like >> this: >> >> x=$(($y/10)) >> >> We were indicated at the time that this is because the statement does not >> use Bourne shell syntax, which is absolutely true, and also that the manual >> warns about this, which is true again. So far everything is clear. >> >> However, what confuses me is that even when the manual says that "you can >> include an executable (Bourne) shell script configure in your package" [1], >> the associated footnote says something slightly different: "The script >> should only assume a POSIX-compliant /bin/sh" [2]. The footnote goes even >> further, and links to the POSIX specification of the Shell Command Language >> [3] (as published by The Open Group), which explicitly includes arithmetic >> expressions like the one above in its syntax [4]. >> >> My question then is: what exact dialect should be considered? Given that the >> statement above does not work in the Bourne shell, I conclude that the >> Bourne shell is not POSIX-compliant. That in turn would make the manual >> ambiguous as to the precise dialect that should be used by our configure >> scripts, and either the shells used by R should be changed to be >> POSIX-compliants, or the manual edited to be more precise regarding . >> >> Many thanks. >> >> Rodrigo >> >> [1] >> https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Configure-and-cleanup >> [2] https://cran.r-project.org/doc/manuals/r-release/R-exts.html#FOOT25 >> [3] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html >> [4] >> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04 >> >> ______________________________________________ >> R-devel at r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-devel> -- > I?aki ?car > http://www.enchufa2.es > @Enchufa2> ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel