Files
flatpak/tests/make-test-runtime.sh
Georges Basile Stavracas Neto 6a57fa42e4 tests: Check if program exists before using it
The tests/make-test-runtime.sh scripts sets '-e' in lieu of
implementing useful error checking, but doesn't actually check
if the programs it uses exist in the first place; and aborts
silently when they're not available.

It is more useful to warn about them, and stop execution earlier.
This leaves some leftover files, but arguably that's better than
leaving leftover files AND people scratching their heads.

Warn about missing required programs.

Related: https://github.com/flatpak/flatpak/issues/5020
2023-10-04 13:04:08 +01:00

108 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
set -e
# Don't inherit the -x from the testsuite
set +x
DIR=`mktemp -d`
REPO=$1
shift
ID=$1
shift
BRANCH=$1
shift
COLLECTION_ID=$1
shift
EXTRA="${1-}"
shift
mkdir ${DIR}/files
mkdir ${DIR}/usr
cat > ${DIR}/metadata <<EOF
[Runtime]
name=${ID}
EOF
# On Debian derivatives, /usr/sbin and /sbin aren't in ordinary users'
# PATHs, but ldconfig is kept in /sbin
PATH="$PATH:/usr/sbin:/sbin"
# Add bash and dependencies
mkdir -p ${DIR}/usr/bin
mkdir -p ${DIR}/usr/lib
ln -s ../lib ${DIR}/usr/lib64
ln -s ../lib ${DIR}/usr/lib32
if test -f /sbin/ldconfig.real; then
cp /sbin/ldconfig.real ${DIR}/usr/bin/ldconfig
else
cp "$(type -P ldconfig)" "${DIR}/usr/bin"
fi
LIBS=`mktemp`
BINS=`mktemp`
add_bin() {
local f=$1
shift
# Check if the program is installed
if ! command -v "${f}" &> /dev/null; then
echo "${f} not found"
exit 1
fi
if grep -qFe "${f}" $BINS; then
# Already handled
return 0
fi
echo $f >> $BINS
# Add library dependencies
(ldd "${f}" | sed "s/.* => //" | awk '{ print $1}' | grep ^/ | sort -u -o $LIBS $LIBS -) || true
local shebang=$(sed -n '1s/^#!\([^ ]*\).*/\1/p' "${f}")
if [ x$shebang != x ]; then
add_bin "$shebang"
fi
}
for i in $@ bash ls cat echo readlink socat; do
I=$(type -P "$i")
add_bin "$I"
done
for i in `cat $BINS`; do
#echo Adding binary $i 1>&2
cp "$i" ${DIR}/usr/bin/
done
for i in `cat $LIBS`; do
#echo Adding library $i 1>&2
cp "$i" ${DIR}/usr/lib/
done
ln -s bash ${DIR}/usr/bin/sh
# This only exists so we can update the runtime
cat > ${DIR}/usr/bin/runtime_hello.sh <<EOF
#!/bin/sh
echo "Hello world, from a runtime$EXTRA"
EOF
chmod a+x ${DIR}/usr/bin/runtime_hello.sh
# We copy the C.UTF8 locale and call it en_US. Its a bit of a lie, but
# the real en_US locale is often not available, because its in the
# local archive.
mkdir -p ${DIR}/usr/lib/locale/
cp -r /usr/lib/locale/C.* ${DIR}/usr/lib/locale/en_US
if [ x$COLLECTION_ID != x ]; then
collection_args=--collection-id=${COLLECTION_ID}
else
collection_args=
fi
mkdir -p repos
flatpak build-export ${collection_args} --no-update-summary --disable-sandbox --runtime ${GPGARGS-} ${EXPORT_ARGS-} ${REPO} ${DIR} ${BRANCH} >&2
rm -rf ${DIR}