···189 EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ')
190 EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ' | sort -u)
191192+ # We want to read part of every line that has cargo:rustc-env= prefix and
193+ # export it as environment variables. This turns out tricky if the lines
194+ # have spaces: we can't wrap the command in double quotes as that captures
195+ # all the lines in single output. We can't use while read loop because
196+ # exporting from inside of it doesn't make it to the outside scope. We
197+ # can't use xargs as export is a built-in and does not work from it. As a
198+ # last resort then, we change the IFS so that the for loop does not split
199+ # on spaces and reset it after we are done. See ticket #199298.
200+ #
201+ _OLDIFS="$IFS"
202+ IFS=$'\n'
203 for env in $(sed -n "s/^cargo:rustc-env=\(.*\)/\1/p" target/build/${crateName}.opt); do
204+ export "$env"
205 done
206+ IFS="$_OLDIFS"
207208 CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\U\1/" -e "s/-/_/g")
209 grep -P "^cargo:(?!(rustc-|warning=|rerun-if-changed=|rerun-if-env-changed))" target/build/${crateName}.opt \