osrm-backend/third_party/mason/scripts/zlib/system/test.sh

136 lines
4.7 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
set -u
CODE=0
function check_cflags() {
MASON_CFLAGS=$(./mason cflags ${MASON_NAME} ${MASON_VERSION})
MASON_CFLAGS=${MASON_CFLAGS/-I/}
if [[ ! -d ${MASON_CFLAGS} ]]; then
echo "not ok: Path for cflags not found: ${MASON_CFLAGS}"
CODE=1
else
echo "ok: path to cflags found: ${MASON_CFLAGS}"
fi
}
function check_ldflags() {
MASON_LDFLAGS=$(./mason ldflags ${MASON_NAME} ${MASON_VERSION})
for var in $MASON_LDFLAGS; do
if [[ "${var}" =~ "-L" ]]; then
vpath=${var/-L/}
if [[ ! -d ${vpath} ]]; then
echo "not ok: Path for ldflags not found: ${vpath}"
CODE=1
else
echo "ok: path to ldflags found: ${vpath}"
fi
fi
done
}
function read_link() {
# number of processors on the current system
case "$(uname -s)" in
'Linux') readlink -f $1;;
'Darwin') readlink $1;;
*) echo 1;;
esac
}
# symlinks should be two deep
function check_file_links() {
if [[ ! -L ./mason_packages/.link/$1 ]]; then
echo "not ok: ./mason_packages/.link/$1 is not a symlink"
CODE=1
else
resolved=$(read_link ./mason_packages/.link/$1)
echo "ok: $resolved is a symlink"
# resolve osx symlinks further
if [[ -L $resolved ]]; then
resolved=$(read_link $resolved)
fi
if [[ ! -f $resolved ]]; then
echo "not ok: $resolved is not a file"
CODE=1
else
echo "ok: $resolved is a file"
expected_keyword=""
if [[ ${MASON_PLATFORM} == 'osx' ]]; then
expected_keyword="MacOSX.platform"
elif [[ ${MASON_PLATFORM} == 'linux' ]]; then
if [[ ${1} =~ "libz" ]]; then
expected_keyword="/lib/x86_64-linux-gnu/"
elif [[ ${1} =~ "include" ]]; then
expected_keyword="/usr/include/"
fi
elif [[ ${MASON_PLATFORM} == 'android' ]]; then
MASON_ANDROID_ABI=$(${MASON_DIR}/mason env MASON_ANDROID_ABI)
MASON_NDK_PACKAGE_VERSION=$(${MASON_DIR}/mason env MASON_NDK_PACKAGE_VERSION)
expected_keyword="android-ndk/${MASON_NDK_PACKAGE_VERSION}"
fi
if [[ "$resolved" =~ "${expected_keyword}" ]]; then
echo "ok: '${expected_keyword}' found in path $resolved"
else
echo "not ok: '${expected_keyword}' not found in path $resolved"
CODE=1
fi
fi
fi
}
function check_shared_lib_info() {
resolved=$(read_link ./mason_packages/.link/$1)
if [[ -f $resolved ]]; then
echo "ok: resolved to $resolved"
if [[ ${MASON_PLATFORM} == 'osx' ]]; then
file $resolved
otool -L $resolved
lipo -info $resolved
elif [[ ${MASON_PLATFORM} == 'linux' ]]; then
file $resolved
ldd $resolved
readelf -d $resolved
elif [[ ${MASON_PLATFORM} == 'android' ]]; then
FILE_DETAILS=$(file $resolved)
MASON_ANDROID_ARCH=$(${MASON_DIR}/mason env MASON_ANDROID_ARCH)
if [[ ${MASON_ANDROID_ARCH} =~ "64" ]]; then
if [[ ${FILE_DETAILS} =~ "64-bit" ]]; then
echo "ok: ${MASON_ANDROID_ARCH} 64-bit arch (for ${MASON_ANDROID_ABI}) expected and detected in $FILE_DETAILS"
else
echo "not ok: ${MASON_ANDROID_ARCH} 64-bit arch (for ${MASON_ANDROID_ABI}) expected and not detected in $FILE_DETAILS"
CODE=1
fi
else
if [[ ${FILE_DETAILS} =~ "64-bit" ]]; then
echo "not ok: ${MASON_ANDROID_ARCH} 32 bit arch (for ${MASON_ANDROID_ABI}) expected and not detected in $FILE_DETAILS"
CODE=1
fi
fi
BIN_PATH=$(${MASON_DIR}/mason env MASON_SDK_ROOT)/bin
MASON_ANDROID_TOOLCHAIN=$(${MASON_DIR}/mason env MASON_ANDROID_TOOLCHAIN)
${BIN_PATH}/${MASON_ANDROID_TOOLCHAIN}-readelf -d $resolved
fi
else
echo "not okay: could not resolve to file: $resolved"
CODE=1
fi
}
if [[ $MASON_PLATFORM != 'ios' ]]; then
check_cflags
check_ldflags
check_file_links "include/zlib.h"
check_file_links "include/zconf.h"
check_file_links "lib/libz.$(${MASON_DIR}/mason env MASON_DYNLIB_SUFFIX)"
if [[ ${CODE} == 0 ]]; then
check_shared_lib_info "lib/libz.$(${MASON_DIR}/mason env MASON_DYNLIB_SUFFIX)"
else
echo "Error already occured so skipping shared library test"
fi
fi
exit ${CODE}