From: Dominik Reichardt <domiman@gmail.com>
To: zsh-users@zsh.org
Subject: Apple bash to zsh script problems with error control and bash emulation
Date: Mon, 16 Nov 2020 16:00:36 +0100 [thread overview]
Message-ID: <1EFC2452-32D1-411C-B239-0031131FA197@gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 6394 bytes --]
Hi all,
I’ve recently moved to zsh as Apple is pressuring us :)
My problem is that I have built a little bash script thing to work as a buildbot for some projects I’m building snapshots for.
My two problems are that my error control is no longer working in a way that it stops (exit 1) after encountering an error when in bash emulation mode, and that if I deactivate the bash emulation stuff doesn’t work.
My scripts can be found at https://github.com/DominusExult/buildbot <https://github.com/DominusExult/buildbot>, as an example I’ve shortened in this email my exult snapshot.sh and my functions script functions.sh.
Something goes wrong in the error(), pipestatus() and teelog() functions, I guess. But I can’t quite tell and I’ve built that script 5 years ago and am a bit rusty to what each of those function do exactly.
What I expect is that when the script runs into an error it stops, even if the error happens in one of the functions but currently the script goes on and on. This used to work before in bash.
If I get rid of the —emulate sh, my variables don’t get passed on correctly (the error I get in the shorted version of my script is "configure: error: unrecognized option: `-q --disable-data --with-macosx-static-lib-path=/opt/i386/lib’”
I hope you can help me figure this out. I’ve tried researching this on my own but the biggest hurdle was that search results pointed me at bash stuff and not zsh.
Thank you,
Dom
The scripts:
exultsnasphot.sh:
#!/bin/zsh --emulate sh
#functions
. ./functions.sh
headermain EXULT
cd ~/code/snapshots/exult
/usr/bin/git pull --rebase=true 2> >(teelog >&2) || error Git pull
#i386
ARCH=i386
SDK=10.11
DEPLOYMENT=10.7
flags
gcc
CONF_ARGS="-q --disable-data --with-macosx-static-lib-path=/opt/$ARCH/lib"
autogen
build 2>&1 | teelog -a ; pipestatus || return
deploy
{
#make fat exult binary
lipo -create -arch arm64 exult_arm64 -arch x86_64 exult_x86_64 -arch i386 exult_i386 -output exult || error lipo
} 2>&1 | teelog -a ; pipestatus || return
functions.sh:
#-------------headers-------------
headermain() {
if [ "$1" != "" ]; then
TARGET=$1
#lowercase of $TARGET
target="$(echo $TARGET | tr '[A-Z]' '[a-z]')"
#logfile
LOGFILE=~/.local/logs/${target}built.txt
else
error headermain function
fi
}
alias deploy='echo -e "$(tput setab 4)$(tput bold)$(tput setaf 3)\tdeployment\t$(tput sgr 0)"'
#-------------Error handling-------------
alias lockfile='rm -f ~/.local/"$TARGET"build1.lockfile'
error () {
if [ "$?" != "0" ]; then
if [ "$2" != "" ]; then
local i2=" $2"
fi
if [ "$3" != "" ]; then
local i3=" $3"
fi
echo -e "$(tput setab 1)$(tput bold)$(tput setaf 7)\t${1:-"Unknown Error"}${i2}${i3} failed!\t\t$(tput sgr 0)" 1>&2
lockfile
exit 1
fi
}
pipestatus() {
local S=("${PIPESTATUS[@]}")
if test -n "$*"
then test "$*" = "${S[*]}"
else ! [[ "${S[@]}" =~ [^0\ ] ]]
fi
}
teelog() {
tee $1 $LOGFILE
}
#-------------compiler & flags-------------
flags() {
SYSARCH=$(uname -m)
if [ "$ARCH" = "" ] && [ "$SYSARCH" = "arm64" ]; then
ARCH=arm64
SDK=11.0
DEPLOYMENT=11.0
elif [ "$ARCH" = "" ] && [ "$SYSARCH" = "x86_64" ]; then
ARCH=x86_64
SDK=10.14
DEPLOYMENT=10.11
fi
export PKG_CONFIG_PATH=/opt/$ARCH/lib/pkgconfig
export PKG_CONFIG=/opt/$SYSARCH/bin/pkg-config
if [ "$ARCH" = "i386" ]; then
OPTARCH='-arch i386 -m32 -msse -msse2 -O2 '
elif [ "$ARCH" = "ppc" ]; then
OPTARCH='-arch ppc -m32 -O2 '
export PKG_CONFIG=/opt/x86_64/bin/pkg-config
elif [ "$ARCH" = "x86_64" ]; then
OPTARCH='-m64 -msse -msse2 -O2 '
elif [ "$ARCH" = "arm64" ]; then
OPTARCH='-O2 '
fi
OPT=' -w -force_cpusubtype_ALL '$OPTARCH
SDK=' -isysroot /opt/SDKs/MacOSX'$SDK'.sdk -mmacosx-version-min='$DEPLOYMENT' '
export MACOSX_DEPLOYMENT_TARGET=$DEPLOYMENT
export CPPFLAGS='-I/opt/'$ARCH'/include'$SDK
export CFLAGS='-I/opt/'$ARCH'/include'$SDK' '$OPT
export CXXFLAGS='-I/opt/'$ARCH'/include '$SDK' '$OPT
export LDFLAGS='-L/opt/'$ARCH'/lib'$SDK' '$OPT
export LIBTOOLFLAGS=--silent
}
gcc() {
if [ "$ARCH" != "" ]; then
export PATH=/opt/$ARCH/bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
export LD="/usr/bin/ld"
export RANLIB="~/code/sh/tools/ranlib"
if [ "$1" = "legacy" ]; then
export PATH=/opt/$ARCH/bin/:/opt/xcode3/usr/bin:/opt/xcode3/usr/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
export CC='/opt/xcode3/usr/bin/llvm-gcc-4.2 -arch '$ARCH
export CXX='/opt/xcode3/usr/bin/llvm-g++-4.2 -arch '$ARCH
export LD="/opt/xcode3/usr/bin/ld"
export RANLIB="/opt/xcode3/usr/bin/ranlib.old"
elif [ "$1" = "oldgcc" ]; then
export PATH=/opt/$ARCH/bin/:/opt/xcode3/usr/bin:/opt/xcode3/usr/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
export CC='/opt/xcode3/usr/bin/gcc-4.2 -arch '$ARCH
export CXX='/opt/xcode3/usr/bin/g++-4.2 -arch '$ARCH
export LD="/opt/xcode3/usr/bin/ld"
export RANLIB="/opt/xcode3/usr/bin/ranlib.old"
else
export CC='/usr/bin/clang -arch '$ARCH
export CXX='/usr/bin/clang++ -arch '$ARCH
fi
else
error gcc function
fi
}
#-------------command shortcuts-------------
alias autogen='./autogen.sh > /dev/null 2>&1'
alias makes='make clean > /dev/null ; make -j9 -s AR="~/code/sh/tools/ar" > /dev/null || error $HEADER make'
config() {
if [ "$CONF_OPT" != "" ]; then
c1=$CONF_OPT
fi
if [ "$CONF_ARGS" != "" ]; then
c2=$CONF_ARGS
fi
if [ "$ARCH" = "ppc" ]; then
./configure --host=powerpc-apple-darwin $CONF_OPT $CONF_ARGS || error $ARCH configure
elif [ "$ARCH" = "i386" ]; then
./configure --host=i386-apple-darwin $CONF_OPT $CONF_ARGS || error $ARCH configure
elif [[ "$ARCH" = "arm64" ]] && [[ "$SYSARCH" != "arm64" ]]; then
./configure --host=arm-apple-darwin $CONF_OPT $CONF_ARGS || error $ARCH configure
elif [[ "$ARCH" = "x86_64" ]] && [[ "$SYSARCH" != "x86_64" ]]; then
./configure --host=x86_64-apple-darwin $CONF_OPT $CONF_ARGS || error $ARCH configure
else [ "$?" != "0" ]
./configure $CONF_OPT $CONF_ARGS || error $ARCH configure
fi
}
stripp() {
if [ "$ARCH" != "" ]; then
strip $1 -o $1_$ARCH || error $HEADER strip
else
strip $1 -o $1 || error $1 strip
fi
}
build() {
config
makes
stripp $target
}
[-- Attachment #2: Type: text/html, Size: 17364 bytes --]
next reply other threads:[~2020-11-16 15:01 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-16 15:00 Dominik Reichardt [this message]
2020-11-16 18:01 ` Daniel Shahaf
2020-11-16 18:10 ` Roman Perepelitsa
2020-11-16 19:45 ` Dominik Reichardt
2020-11-16 20:11 ` Roman Perepelitsa
2020-11-16 23:15 ` Lewis Butler
2020-11-17 7:08 ` Roman Perepelitsa
2020-11-17 13:03 ` Dominik Reichardt
2020-11-17 15:54 ` Lewis Butler
2020-11-17 16:13 ` Dominik Reichardt
2020-11-17 21:29 ` Roman Perepelitsa
2020-11-17 21:47 ` Bart Schaefer
2020-11-17 22:25 ` Dominik Reichardt
2020-11-18 10:01 ` Roman Perepelitsa
2020-11-19 13:31 ` Lewis Butler
2020-11-19 13:55 ` Dominik Reichardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1EFC2452-32D1-411C-B239-0031131FA197@gmail.com \
--to=domiman@gmail.com \
--cc=zsh-users@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).