Subject: Re: toolchain/30842: build.sh fails with mksh
To: None <toolchain-manager@netbsd.org, gnats-admin@netbsd.org,>
From: Alan Barrett <apb@cequrux.com>
List: netbsd-bugs
Date: 07/26/2005 20:15:04
The following reply was made to PR toolchain/30842; it has been noted by GNATS.

From: Alan Barrett <apb@cequrux.com>
To: gnats-bugs@NetBSD.org
Cc: netbsd-bugs@NetBSD.org
Subject: Re: toolchain/30842: build.sh fails with mksh
Date: Tue, 26 Jul 2005 22:13:31 +0200

 On Tue, 26 Jul 2005, tg@MirBSD.org wrote:
 > mksh is the MirBSD version of the public domain korn shell,
 > which includes patches from the OpenBSD and Debian pdksh
 > derivates.
 > 
 > As such, it needs a special handling for the braceexpand
 > mode as well, else MAKEOBJDIR creation in the nbmake wrapper
 > will fail.
 
 So, if I understand correctly, this shell interprets braces inside here
 documents as special characters, unless you "set +o braceexpand".
 
 Can we solve this problem without adding more special cases to build.sh
 by just adding backslashes in appropriate places, so it doesn't matter
 whether or not the shell does brace expansion?  For example, does the
 following patch work (in the absence of the "set +o braceexpand" patch)?
 It changes all "\${...}" to "\$\{...\}" in the here-document that
 build.sh uses to create the makewrapper.
 
 --apb (Alan Barrett)
 
 --- build.sh.orig	2005-07-26 22:05:38.000000000 +0200
 +++ build.sh	2005-07-26 22:07:10.000000000 +0200
 @@ -872,7 +872,7 @@
  #
  EOF
  	for f in ${makeenv}; do
 -		if eval "[ -z \"\${$f}\" -a \"\${${f}-X}\" = \"X\" ]"; then
 +		if eval "[ -z \"\$\{$f\}\" -a \"\$\{${f}-X\}\" = \"X\" ]"; then
  			eval echo "unset ${f}" ${makewrapout}
  		else
  			eval echo "${f}=\'\$$(echo ${f})\'\;\ export\ ${f}" ${makewrapout}
 @@ -882,7 +882,7 @@
  
  	eval cat <<EOF ${makewrapout}
  
 -exec "\${TOOLDIR}/bin/${toolprefix}make" \${1+"\$@"}
 +exec "\$\{TOOLDIR\}/bin/${toolprefix}make" \$\{1+"\$@"\}
  EOF
  	[ "${runcmd}" = "echo" ] && echo EOF
  	${runcmd} chmod +x "${makewrapper}"