136 lines
4.7 KiB
Bash
136 lines
4.7 KiB
Bash
|
#!/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}
|