Merge commit 'f8dd96543542220181c76afb8c084f4908213fb5' as 'third_party/mason'

This commit is contained in:
Patrick Niklaus
2016-12-15 10:31:15 +00:00
796 changed files with 30230 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
language: cpp
sudo: false
matrix:
include:
- os: osx
compiler: clang
env: MASON_PLATFORM=osx
- os: osx
compiler: clang
env: MASON_PLATFORM=ios
- os: linux
compiler: clang
env: MASON_PLATFORM=linux
- os: linux
env: MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v5
- os: linux
env: MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v7
- os: linux
env: MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v8
- os: linux
env: MASON_PLATFORM=android MASON_ANDROID_ABI=x86
- os: linux
env: MASON_PLATFORM=android MASON_ANDROID_ABI=mips
- os: linux
env: MASON_PLATFORM=android MASON_ANDROID_ABI=mips-64
env:
global:
- ANDROID_NDK_VERSION=10d
script:
- ./mason build ${MASON_NAME} ${MASON_VERSION}
- ./mason link ${MASON_NAME} ${MASON_VERSION}
- ./test.sh
- ./mason version ${MASON_NAME} ${MASON_VERSION}
after_success:
#- ./mason publish ${MASON_NAME} ${MASON_VERSION}
+81
View File
@@ -0,0 +1,81 @@
#!/usr/bin/env bash
MASON_NAME=zlib
MASON_VERSION=system
MASON_SYSTEM_PACKAGE=true
. ${MASON_DIR}/mason.sh
if [[ ${MASON_PLATFORM} = 'ios' ]]; then
MASON_CFLAGS=""
MASON_LDFLAGS="-lz"
else
MASON_CFLAGS="-I${MASON_PREFIX}/include"
MASON_LDFLAGS="-L${MASON_PREFIX}/lib"
if [[ ${MASON_PLATFORM} = 'osx' || ${MASON_PLATFORM} = 'android' ]]; then
ZLIB_INCLUDE_PREFIX="${MASON_SDK_PATH}/usr/include"
if [[ -d "${MASON_SDK_PATH}/usr/lib64" ]]; then
ZLIB_LIBRARY="${MASON_SDK_PATH}/usr/lib64/libz.${MASON_DYNLIB_SUFFIX}"
else
ZLIB_LIBRARY="${MASON_SDK_PATH}/usr/lib/libz.${MASON_DYNLIB_SUFFIX}"
fi
MASON_LDFLAGS="${MASON_LDFLAGS} -lz"
else
ZLIB_INCLUDE_PREFIX="${MASON_SDK_PATH}`pkg-config zlib --variable=includedir`"
ZLIB_LIBRARY="${MASON_SDK_PATH}`pkg-config zlib --variable=libdir`/libz.${MASON_DYNLIB_SUFFIX}"
MASON_CFLAGS="${MASON_CFLAGS} `pkg-config zlib --cflags-only-other`"
MASON_LDFLAGS="${MASON_LDFLAGS} `pkg-config zlib --libs-only-other --libs-only-l`"
fi
if [ ! -f "${ZLIB_INCLUDE_PREFIX}/zlib.h" -a ! -h "${ZLIB_INCLUDE_PREFIX}/zlib.h" ]; then
mason_error "Can't find header file ${ZLIB_INCLUDE_PREFIX}/zlib.h"
exit 1
fi
if [ ! -f "${ZLIB_LIBRARY}" -a ! -h "${ZLIB_LIBRARY}" ]; then
mason_error "Can't find library file ${ZLIB_LIBRARY}"
exit 1
fi
fi
function mason_system_version {
if [[ ${MASON_PLATFORM} = 'ios' ]]; then
FLAGS="-I${MASON_SDK_PATH}/usr/include"
else
FLAGS=$(mason_cflags)
fi
mkdir -p "${MASON_PREFIX}"
cd "${MASON_PREFIX}"
if [ ! -f version ]; then
echo "#include <zlib.h>
#include <stdio.h>
int main() {
printf(\"%s\", ZLIB_VERSION);
return 0;
}
" > version.c && cc version.c ${FLAGS} -o version
fi
./version
}
function mason_build {
if [[ ${MASON_PLATFORM} != 'ios' ]]; then
mkdir -p ${MASON_PREFIX}/{include,lib}
ln -sf ${ZLIB_INCLUDE_PREFIX}/z*.h ${MASON_PREFIX}/include/
ln -sf ${ZLIB_LIBRARY} ${MASON_PREFIX}/lib/
fi
VERSION=$(mason_system_version)
}
function mason_cflags {
echo ${MASON_CFLAGS}
}
function mason_ldflags {
echo ${MASON_LDFLAGS}
}
mason_run "$@"
+135
View File
@@ -0,0 +1,135 @@
#!/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}