Merge branch 'master' into 1ec5-strong-self
This commit is contained in:
2
.mason
2
.mason
Submodule .mason updated: 03869fd11e...c43967404c
130
.travis.yml
130
.travis.yml
@@ -1,95 +1,81 @@
|
||||
language: cpp
|
||||
dist: trusty
|
||||
|
||||
matrix:
|
||||
exclude:
|
||||
- os: linux
|
||||
include:
|
||||
- os: linux
|
||||
env: CONFIG=release MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v7 TESTMUNK=yes
|
||||
compiler: clang
|
||||
env: FLAVOR=linux CXX=g++ BUILDTYPE=Release
|
||||
- os: linux
|
||||
env: CONFIG=debug MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v7 TESTMUNK=no
|
||||
compiler: clang
|
||||
env: FLAVOR=linux CXX=clang++ BUILDTYPE=Debug
|
||||
- os: linux
|
||||
env: CONFIG=release MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v5 TESTMUNK=no
|
||||
compiler: clang
|
||||
- os: linux
|
||||
env: CONFIG=release MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v8 TESTMUNK=no
|
||||
compiler: clang
|
||||
- os: linux
|
||||
env: CONFIG=release MASON_PLATFORM=android MASON_ANDROID_ABI=x86 TESTMUNK=no
|
||||
compiler: clang
|
||||
- os: linux
|
||||
env: CONFIG=release MASON_PLATFORM=android MASON_ANDROID_ABI=mips TESTMUNK=no
|
||||
compiler: clang
|
||||
- os: linux
|
||||
env: CONFIG=release MASON_PLATFORM=android MASON_ANDROID_ABI=mips-64 TESTMUNK=no
|
||||
compiler: clang
|
||||
- os: linux
|
||||
env: BUILDTYPE=Release JOBS=16
|
||||
compiler: clang
|
||||
- os: linux
|
||||
env: BUILDTYPE=Debug JOBS=16
|
||||
compiler: clang
|
||||
- os: linux
|
||||
env: BUILDTYPE=Release JOBS=8
|
||||
compiler: gcc
|
||||
env: FLAVOR=linux CXX=clang++ BUILDTYPE=Release
|
||||
- os: osx
|
||||
env: BUILDTYPE=Debug JOBS=8 MASON_PLATFORM=osx
|
||||
compiler: clang
|
||||
env: FLAVOR=osx BUILDTYPE=Debug
|
||||
- os: osx
|
||||
env: BUILDTYPE=Release JOBS=8 MASON_PLATFORM=ios
|
||||
compiler: clang
|
||||
env: FLAVOR=ios BUILDTYPE=Release
|
||||
- os: linux
|
||||
env: FLAVOR=android ANDROID_ABI=arm-v7 BUILDTYPE=Release
|
||||
android:
|
||||
components:
|
||||
- build-tools-22.0.0
|
||||
- android-22
|
||||
- extra
|
||||
- os: linux
|
||||
env: FLAVOR=android ANDROID_ABI=arm-v7 BUILDTYPE=Debug
|
||||
android:
|
||||
components:
|
||||
- build-tools-22.0.0
|
||||
- android-22
|
||||
- extra
|
||||
- os: linux
|
||||
env: FLAVOR=android ANDROID_ABI=arm-v8 BUILDTYPE=Release
|
||||
android:
|
||||
components:
|
||||
- build-tools-22.0.0
|
||||
- android-22
|
||||
- extra
|
||||
- os: linux
|
||||
env: FLAVOR=android ANDROID_ABI=x86 BUILDTYPE=Release
|
||||
android:
|
||||
components:
|
||||
- build-tools-22.0.0
|
||||
- android-22
|
||||
- extra
|
||||
- os: linux
|
||||
env: FLAVOR=android ANDROID_ABI=mips BUILDTYPE=Release
|
||||
android:
|
||||
components:
|
||||
- build-tools-22.0.0
|
||||
- android-22
|
||||
- extra
|
||||
|
||||
env:
|
||||
global:
|
||||
- secure: "MZHblLZXG/jWf2w0ZFlxCLDwx2qtGgRDODQyg1BR7JIuMz6AtWv8XR/sUczWLbiABCL0a/NzJF1g4v2pI7X69IntcjOdIABBgTh7++6+1TJ0Kp8viEltb55nQG3lHy/R6fOaI7Pj9tuCX0PCRtGA5C/fGnodLGEjy3RVOJ09ln0="
|
||||
- secure: "KaSQbhgjtV7ZCkesHmvrNsbQVjk5SPfGKB1VkWenRGYhLF45HpSRNwSxMQddZ566Pg7qIFgF1iWl/B0QW3B6AWL5WmzQ5AOJgwS876pNIc/UT7ubMPtgAtjpvw1bQvQP3B8MrB+3OE5c6tD+a3LhR9krV//dOsfErR5Yy+3Mbkc="
|
||||
- ANDROID_BUILD_INSTANCE_PROFILE: arn:aws:iam::234858372212:instance-profile/android-gl-build/travis/instance-profile/travis-mapbox-gl-native-AndroidInstanceProfile-13EA815DD8IQ9
|
||||
- secure: "RiBIBfVhhaMjU5ksuwJO3shdvG9FpinBjdSv4co9jg9171SR8edNriedHjVKSIeBhSGNmZmX+twS3dJS/By6tl/LKh9sTynA+ZAYYljkE7jn881B/gMrlYvdAA6og5KvkhV1/0iJWlhuZrMTkhpDR200iLgg3EWBhWjltzmDW/I="
|
||||
- secure: "CHBiUM60TolDbQnn+4IRA/tvOKwKs3g9EDvv8YHSJMg3FuHmjKQkprBasvxf3hnTXg4WLZEubmeDcyJ6RRzPP5mMSr/hksYl0pSjj/6TUecE5fHPVVeN7txVqkpOBf9i45Y+iBUQMjBb1NnDK3pHXxpnAs1Q/pe7vReErj4GF1U="
|
||||
- LD_LIBRARY_PATH: '/usr/local/lib'
|
||||
- TERM: dumb
|
||||
# begin iOS code signing
|
||||
- secure: "I6Iu75X1E+js5tzijtKi1EGtIuBcA4/25nDYe0svV4HAtujY71ZJZ4eB6355CKhFXpLXrF3i7eKVX3v+zWS0QROPEWacgsqsvNg+Ba9cnznW/faUSOYekCfhzWd/6reYDM7KzKAQwSUHLk9JIWK/kkmi4r+vVJK7h+tjPllK5YA="
|
||||
- IOS_APP_NAME="Mapbox GL"
|
||||
- 'IOS_DEVELOPER_NAME="iPhone Distribution: Mapbox, Inc."'
|
||||
- IOS_PROFILE_NAME="ios-in-house"
|
||||
- secure: "nQqSM8rd7OHtV4MqmNqVnkrVHqxKqQsaWRYk4/nPdhbeVWtTtkk0df711LrF1TUtbEPEewHxYUvTZ/UXmwJNeoKdzTHavI8hnatRkgjyxGERPn1il1Otelht9I+LQQHf+plrpRjVWBrNIW0Zox1B3cqn6d3NglpbXrEQ2EjYGNA="
|
||||
# end iOS code signing
|
||||
|
||||
before_install:
|
||||
- if [[ ${TRAVIS_OS_NAME} == "linux" ]]; then sudo service mysql stop; fi
|
||||
- if [[ ${TRAVIS_OS_NAME} == "linux" ]]; then sudo service postgresql stop; fi
|
||||
- source ./scripts/local_mason.sh
|
||||
- source ./scripts/travis_helper.sh
|
||||
- source ./scripts/install_node.sh
|
||||
- source ./scripts/flags.sh
|
||||
- ./scripts/travis_before_install.sh
|
||||
- if [[ ${TRAVIS_OS_NAME} == "linux" && ${MASON_PLATFORM} != "android" ]]; then export LD_LIBRARY_PATH=`mason prefix mesa 10.4.3`/lib; fi
|
||||
- if [[ ${TRAVIS_OS_NAME} == "linux" && ${MASON_PLATFORM} != "android" ]]; then glxinfo; fi
|
||||
- TERM: dumb
|
||||
# AWS
|
||||
- secure: "MZHblLZXG/jWf2w0ZFlxCLDwx2qtGgRDODQyg1BR7JIuMz6AtWv8XR/sUczWLbiABCL0a/NzJF1g4v2pI7X69IntcjOdIABBgTh7++6+1TJ0Kp8viEltb55nQG3lHy/R6fOaI7Pj9tuCX0PCRtGA5C/fGnodLGEjy3RVOJ09ln0="
|
||||
- secure: "KaSQbhgjtV7ZCkesHmvrNsbQVjk5SPfGKB1VkWenRGYhLF45HpSRNwSxMQddZ566Pg7qIFgF1iWl/B0QW3B6AWL5WmzQ5AOJgwS876pNIc/UT7ubMPtgAtjpvw1bQvQP3B8MrB+3OE5c6tD+a3LhR9krV//dOsfErR5Yy+3Mbkc="
|
||||
# Access Token
|
||||
- secure: "RiBIBfVhhaMjU5ksuwJO3shdvG9FpinBjdSv4co9jg9171SR8edNriedHjVKSIeBhSGNmZmX+twS3dJS/By6tl/LKh9sTynA+ZAYYljkE7jn881B/gMrlYvdAA6og5KvkhV1/0iJWlhuZrMTkhpDR200iLgg3EWBhWjltzmDW/I="
|
||||
# Testmunk
|
||||
- secure: "CHBiUM60TolDbQnn+4IRA/tvOKwKs3g9EDvv8YHSJMg3FuHmjKQkprBasvxf3hnTXg4WLZEubmeDcyJ6RRzPP5mMSr/hksYl0pSjj/6TUecE5fHPVVeN7txVqkpOBf9i45Y+iBUQMjBb1NnDK3pHXxpnAs1Q/pe7vReErj4GF1U="
|
||||
# iOS code signing
|
||||
- secure: "I6Iu75X1E+js5tzijtKi1EGtIuBcA4/25nDYe0svV4HAtujY71ZJZ4eB6355CKhFXpLXrF3i7eKVX3v+zWS0QROPEWacgsqsvNg+Ba9cnznW/faUSOYekCfhzWd/6reYDM7KzKAQwSUHLk9JIWK/kkmi4r+vVJK7h+tjPllK5YA="
|
||||
- IOS_APP_NAME="Mapbox GL"
|
||||
- 'IOS_DEVELOPER_NAME="iPhone Distribution: Mapbox, Inc."'
|
||||
- IOS_PROFILE_NAME="ios-in-house"
|
||||
- secure: "nQqSM8rd7OHtV4MqmNqVnkrVHqxKqQsaWRYk4/nPdhbeVWtTtkk0df711LrF1TUtbEPEewHxYUvTZ/UXmwJNeoKdzTHavI8hnatRkgjyxGERPn1il1Otelht9I+LQQHf+plrpRjVWBrNIW0Zox1B3cqn6d3NglpbXrEQ2EjYGNA="
|
||||
|
||||
install:
|
||||
- ulimit -c
|
||||
|
||||
before_script:
|
||||
# Set the core file limit to unlimited so a core file is generated upon crash
|
||||
- ulimit -c unlimited -S
|
||||
# begin iOS code signing
|
||||
- openssl aes-256-cbc -k "$IOS_ENCRYPTION_SECRET" -in scripts/ios_travis/ios-in-house.mobileprovision.enc -d -a -out scripts/ios_travis/ios-in-house.mobileprovision
|
||||
- openssl aes-256-cbc -k "$IOS_ENCRYPTION_SECRET" -in scripts/ios_travis/ios-dist.cer.enc -d -a -out scripts/ios_travis/ios-dist.cer
|
||||
- openssl aes-256-cbc -k "$IOS_ENCRYPTION_SECRET" -in scripts/ios_travis/ios-dist.p12.enc -d -a -out scripts/ios_travis/ios-dist.p12
|
||||
- ./scripts/ios_travis/add-key.sh
|
||||
# end iOS code signing
|
||||
- ./scripts/${FLAVOR}/install.sh
|
||||
|
||||
script:
|
||||
- ./scripts/travis_script.sh
|
||||
|
||||
after_script:
|
||||
- ./scripts/ios_travis/remove-key.sh
|
||||
- ./scripts/${FLAVOR}/run.sh
|
||||
|
||||
notifications:
|
||||
slack:
|
||||
secure: HHQYr7sF8M1SzoWSqgKVYtwAgGdLLCyTMsQjFhEEQNYO92ZwURE5s03qWTGH5k8+4Yqn26yrXt3NztLC4JIOpcGervN2mSZyq4dZgFTcWEd61igw0qwSenlwvFfbE1ASK/KYCzfyn9MIfHN+ovwLoRxXZkPwinKDvl3DXjBaFNg=
|
||||
|
||||
git:
|
||||
submodules: false
|
||||
|
||||
22
Makefile
22
Makefile
@@ -5,6 +5,7 @@ ANDROID_ABI ?= arm-v7
|
||||
|
||||
ifeq ($(shell uname -s), Darwin)
|
||||
HOST ?= osx
|
||||
HEADLESS ?= cgl
|
||||
JOBS ?= $(shell sysctl -n hw.ncpu)
|
||||
endif
|
||||
HOST ?= linux
|
||||
@@ -25,8 +26,12 @@ config/%.gypi: configure
|
||||
styles/styles:
|
||||
git submodule update --init styles
|
||||
|
||||
ifeq ($(shell uname -s), Darwin)
|
||||
SMCalloutView:
|
||||
git submodule update --init platform/ios/vendor/SMCalloutView
|
||||
else
|
||||
SMCalloutView:
|
||||
endif
|
||||
|
||||
#### Library builds ############################################################
|
||||
|
||||
@@ -69,8 +74,9 @@ Xcode/test: test/test.gyp config/osx.gypi styles/styles SMCalloutView
|
||||
xtest-proj: Xcode/test
|
||||
open ./build/osx/test/test.xcodeproj
|
||||
|
||||
xtest: XCPRETTY := $(shell ./scripts/xcpretty.sh)
|
||||
xtest: Xcode/test
|
||||
xcodebuild -project ./build/osx/test/test.xcodeproj -configuration $(BUILDTYPE) -target test -jobs $(JOBS)
|
||||
xcodebuild -project ./build/osx/test/test.xcodeproj -configuration $(BUILDTYPE) -target test -jobs $(JOBS) $(XCPRETTY)
|
||||
|
||||
xtest-%: xtest
|
||||
./scripts/run_tests.sh "build/osx/Build/Products/$(BUILDTYPE)/test" --gtest_filter=$*
|
||||
@@ -98,8 +104,9 @@ Xcode/osx: macosx/mapboxgl-app.gyp config/osx.gypi styles/styles
|
||||
xosx-proj: Xcode/osx
|
||||
open ./build/osx/macosx/mapboxgl-app.xcodeproj
|
||||
|
||||
xosx: XCPRETTY := $(shell ./scripts/xcpretty.sh)
|
||||
xosx: Xcode/osx
|
||||
xcodebuild -project ./build/osx/macosx/mapboxgl-app.xcodeproj -configuration $(BUILDTYPE) -target osxapp -jobs $(JOBS)
|
||||
xcodebuild -project ./build/osx/macosx/mapboxgl-app.xcodeproj -configuration $(BUILDTYPE) -target osxapp -jobs $(JOBS) $(XCPRETTY)
|
||||
|
||||
run-xosx: xosx
|
||||
"build/osx/Build/Products/$(BUILDTYPE)/Mapbox GL.app/Contents/MacOS/Mapbox GL"
|
||||
@@ -119,14 +126,16 @@ Xcode/ios: ios/app/mapboxgl-app.gyp config/ios.gypi styles/styles SMCalloutView
|
||||
ios-proj: Xcode/ios
|
||||
open ./build/ios/ios/app/mapboxgl-app.xcodeproj
|
||||
|
||||
ios: XCPRETTY := $(shell ./scripts/xcpretty.sh)
|
||||
ios: Xcode/ios
|
||||
xcodebuild -sdk iphoneos ARCHS="arm64 armv7 armv7s" PROVISIONING_PROFILE="2b532944-bf3d-4bf4-aa6c-a81676984ae8" -project ./build/ios/ios/app/mapboxgl-app.xcodeproj -configuration Release -target iosapp -jobs $(JOBS)
|
||||
xcodebuild -sdk iphoneos ARCHS="arm64 armv7 armv7s" PROVISIONING_PROFILE="2b532944-bf3d-4bf4-aa6c-a81676984ae8" -project ./build/ios/ios/app/mapboxgl-app.xcodeproj -configuration Release -target iosapp -jobs $(JOBS) $(XCPRETTY)
|
||||
|
||||
isim: XCPRETTY := $(shell ./scripts/xcpretty.sh)
|
||||
isim: Xcode/ios
|
||||
xcodebuild -sdk iphonesimulator ARCHS="x86_64 i386" -project ./build/ios/ios/app/mapboxgl-app.xcodeproj -configuration Debug -target iosapp -jobs $(JOBS)
|
||||
xcodebuild -sdk iphonesimulator ARCHS="x86_64 i386" -project ./build/ios/ios/app/mapboxgl-app.xcodeproj -configuration Debug -target iosapp -jobs $(JOBS) $(XCPRETTY)
|
||||
|
||||
ipackage: clean Xcode/ios
|
||||
./scripts/package_ios.sh
|
||||
./scripts/ios/package.sh
|
||||
|
||||
# Legacy name
|
||||
iproj: ios-proj
|
||||
@@ -154,8 +163,9 @@ Xcode/linux: linux/mapboxgl-app.gyp config/osx.gypi styles/styles
|
||||
xlinux-proj: Xcode/linux
|
||||
open ./build/osx/linux/mapboxgl-app.xcodeproj
|
||||
|
||||
xlinux: XCPRETTY := $(shell ./scripts/xcpretty.sh)
|
||||
xlinux: Xcode/linux
|
||||
xcodebuild -project ./build/osx/linux/mapboxgl-app.xcodeproj -configuration $(BUILDTYPE) -target linuxapp
|
||||
xcodebuild -project ./build/osx/linux/mapboxgl-app.xcodeproj -configuration $(BUILDTYPE) -target linuxapp $(XCPRETTY)
|
||||
|
||||
run-xlinux: xlinux
|
||||
"build/osx/Build/Products/$(BUILDTYPE)/mapbox-gl"
|
||||
|
||||
@@ -49,7 +49,7 @@ Target OS X: 10.9+
|
||||
If you merely want to install the library for iOS and try it out as an Objective-C consumer:
|
||||
|
||||
0. Use [Homebrew](http://brew.sh/) to install Boost headers: `brew install boost`.
|
||||
1. Run `./scripts/package_ios.sh`. The packaging script will produce the statically-linked `libMapboxGL.a`, `MapboxGL.bundle` for resources, and a `Headers` folder.
|
||||
1. Run `./scripts/ios/package.sh`. The packaging script will produce the statically-linked `libMapboxGL.a`, `MapboxGL.bundle` for resources, and a `Headers` folder.
|
||||
2. Copy the contents of `build/ios/pkg/static` into your project. It should happen automatically, but ensure that:
|
||||
- `Headers` is in your *Header Search Paths* (`HEADER_SEARCH_PATHS`) build setting.
|
||||
- `MapboxGL.bundle` is in your target's *Copy Bundle Resources* build phase.
|
||||
|
||||
@@ -927,9 +927,7 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
|
||||
return JNI_ERR;
|
||||
}
|
||||
|
||||
// NOTE: if you get java.lang.UnsatisfiedLinkError you likely forgot to set the size of the
|
||||
// array correctly (too large)
|
||||
std::array<JNINativeMethod, 62> methods = {{ // Can remove the extra brace in C++14
|
||||
const std::vector<JNINativeMethod> methods = {
|
||||
{"nativeCreate", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)J",
|
||||
reinterpret_cast<void *>(&nativeCreate)},
|
||||
{"nativeDestroy", "(J)V", reinterpret_cast<void *>(&nativeDestroy)},
|
||||
@@ -1014,7 +1012,7 @@ extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
|
||||
{"nativeLatLngForProjectedMeters", "(JLcom/mapbox/mapboxgl/geometry/ProjectedMeters;)Lcom/mapbox/mapboxgl/geometry/LatLng;", reinterpret_cast<void *>(&nativeLatLngForProjectedMeters)},
|
||||
{"nativePixelForLatLng", "(JLcom/mapbox/mapboxgl/geometry/LatLng;)Landroid/graphics/PointF;", reinterpret_cast<void *>(&nativePixelForLatLng)},
|
||||
{"nativeLatLngForPixel", "(JLandroid/graphics/PointF;)Lcom/mapbox/mapboxgl/geometry/LatLng;", reinterpret_cast<void *>(&nativeLatLngForPixel)},
|
||||
}};
|
||||
};
|
||||
|
||||
if (env->RegisterNatives(nativeMapViewClass, methods.data(), methods.size()) < 0) {
|
||||
env->ExceptionDescribe();
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
export BUILDTYPE=Debug
|
||||
|
||||
./android/scripts/common.sh $1
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
export BUILDTYPE=Release
|
||||
|
||||
./android/scripts/common.sh $1
|
||||
@@ -1,40 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
NAME=$1
|
||||
|
||||
case `uname -s` in
|
||||
'Darwin') export JOBS=`sysctl -n hw.ncpu` ;;
|
||||
'Linux') export JOBS=`nproc` ;;
|
||||
*) export JOBS=1 ;;
|
||||
esac
|
||||
|
||||
|
||||
export CC=clang CXX=clang++
|
||||
export MASON_PLATFORM=android
|
||||
|
||||
mkdir -p ./android/java/MapboxGLAndroidSDKTestApp/src/main/res/raw/
|
||||
echo "${MAPBOX_ACCESS_TOKEN}" >> ./android/java/MapboxGLAndroidSDKTestApp/src/main/res/raw/token.txt
|
||||
|
||||
make android -j$JOBS BUILDTYPE=$BUILDTYPE JOBS=$JOBS
|
||||
|
||||
S3_PREFIX=s3://mapbox/mapbox-gl-native/android/build/${NAME}
|
||||
APK_OUTPUTS=./android/java/MapboxGLAndroidSDKTestApp/build/outputs/apk
|
||||
|
||||
# Upload the shared object.
|
||||
aws s3 cp \
|
||||
./build/android-${ANDROID_ABI}/${BUILDTYPE}/lib.target/libmapbox-gl.so \
|
||||
${S3_PREFIX}/libmapbox-gl.so
|
||||
|
||||
# Upload either the debug or the release build
|
||||
if [ ${BUILDTYPE} == "Debug" ] ; then
|
||||
aws s3 cp \
|
||||
${APK_OUTPUTS}/MapboxGLAndroidSDKTestApp-debug.apk \
|
||||
${S3_PREFIX}/MapboxGLAndroidSDKTestApp-debug.apk
|
||||
elif [ ${BUILDTYPE} == "Release" ] ; then
|
||||
aws s3 cp \
|
||||
${APK_OUTPUTS}/MapboxGLAndroidSDKTestApp-release-unsigned.apk \
|
||||
${S3_PREFIX}/MapboxGLAndroidSDKTestApp-release-unsigned.apk
|
||||
fi
|
||||
@@ -1,85 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
cwd=$(pwd)
|
||||
|
||||
region="us-east-1"
|
||||
region_ami="ami-022e0c6a"
|
||||
sleep=10
|
||||
instance_name="android-gl-build-$TRAVIS_REPO_SLUG-$TRAVIS_JOB_NUMBER"
|
||||
echo $ami_name
|
||||
|
||||
NAME=$TRAVIS_JOB_ID
|
||||
|
||||
user_data="#!/bin/bash
|
||||
cd /android
|
||||
git clone git://github.com/mapbox/mapbox-gl-native.git
|
||||
|
||||
pushd mapbox-gl-native
|
||||
if [[ $TRAVIS_PULL_REQUEST == 'false' ]]; then
|
||||
git checkout $TRAVIS_COMMIT
|
||||
else
|
||||
git fetch origin +refs/pull/$TRAVIS_PULL_REQUEST/merge:
|
||||
git checkout FETCH_HEAD
|
||||
fi
|
||||
git submodule update --init --recursive
|
||||
|
||||
export ANDROID_NDK_PATH=/android/android-ndk-r10d
|
||||
export JAVA_HOME=/android/jdk1.7.0_71
|
||||
export ANDROID_HOME=/android/android-sdk-linux
|
||||
export PATH=\$PATH:/android/jdk1.7.0_71/bin
|
||||
export MAPBOX_ACCESS_TOKEN=$MAPBOX_ACCESS_TOKEN
|
||||
export TESTMUNK_KEY=$TESTMUNK_KEY
|
||||
export TESTMUNK=$TESTMUNK
|
||||
export MASON_ANDROID_ABI=$MASON_ANDROID_ABI
|
||||
export ANDROID_ABI=$MASON_ANDROID_ABI
|
||||
|
||||
if ./android/scripts/build-$CONFIG.sh $NAME &>../build.log; then
|
||||
echo 'ANDROID BUILD PASSED'
|
||||
else
|
||||
echo 'ANDROID BUILD FAILED'
|
||||
fi
|
||||
popd
|
||||
|
||||
aws s3 cp --region us-east-1 build.log s3://mapbox/mapbox-gl-native/android/build/${NAME}/build-log.txt
|
||||
shutdown -P now"
|
||||
|
||||
id=$(aws ec2 run-instances \
|
||||
--region $region \
|
||||
--image-id $region_ami \
|
||||
--count 1 \
|
||||
--instance-type m3.large \
|
||||
--iam-instance-profile Arn="$ANDROID_BUILD_INSTANCE_PROFILE" \
|
||||
--instance-initiated-shutdown-behavior terminate \
|
||||
--user-data "$user_data" | jq -r '.Instances[0].InstanceId')
|
||||
|
||||
echo "Instance: $region $id"
|
||||
|
||||
sleep 10
|
||||
|
||||
result=$(aws ec2 create-tags --region $region --resources $id --tags "Key=Name,Value=$instance_name")
|
||||
|
||||
instance_status_terminated=$(aws ec2 describe-instances --region $region --instance-id $id | jq -r '.Reservations[0].Instances[0].State.Name')
|
||||
|
||||
until [ "$instance_status_terminated" = "terminated" ]; do
|
||||
instance_status_terminated=$(aws ec2 describe-instances --region $region --instance-id $id | jq -r '.Reservations[0].Instances[0].State.Name')
|
||||
echo "Instance terminating status $region $id: $instance_status_terminated"
|
||||
sleep $sleep
|
||||
done
|
||||
|
||||
echo "Build finished"
|
||||
|
||||
output=$(aws ec2 get-console-output --region $region --instance-id $id | jq -r '.Output')
|
||||
|
||||
aws s3 cp --region $region s3://mapbox/mapbox-gl-native/android/build/${NAME}/build-log.txt build.log
|
||||
cat build.log
|
||||
|
||||
if [[ $output == *"ANDROID BUILD PASSED"* ]]; then
|
||||
echo "ANDROID BUILD PASSED"
|
||||
exit 0
|
||||
else
|
||||
echo "ANDROID BUILD FAILED"
|
||||
exit 1
|
||||
fi
|
||||
@@ -83,7 +83,7 @@ int main(int argc, char *argv[]) {
|
||||
HeadlessView view;
|
||||
Map map(view, fileSource);
|
||||
|
||||
map.start(Map::Mode::Static);
|
||||
map.start(Map::Mode::Still);
|
||||
|
||||
// Set access token if present
|
||||
if (token.size()) {
|
||||
|
||||
@@ -31,32 +31,32 @@ LIBS_linux += -Dcache_lib=$(word 1,$(CACHE) sqlite)
|
||||
LIBS_linux += --depth=. -Goutput_dir=.
|
||||
|
||||
ANDROID_ABIS += android-lib-arm-v8
|
||||
ENV_android-arm-v8 = $(shell MASON_ANDROID_ABI=arm-v8 ./scripts/android_env.sh)
|
||||
ENV_android-arm-v8 = $(shell MASON_ANDROID_ABI=arm-v8 ./scripts/android/toolchain.sh)
|
||||
CONFIG_android-arm-v8 = -Dhost=android -Iconfig/android-arm-v8.gypi
|
||||
|
||||
ANDROID_ABIS += android-lib-arm-v7
|
||||
ENV_android-arm-v7 = $(shell MASON_ANDROID_ABI=arm-v7 ./scripts/android_env.sh)
|
||||
ENV_android-arm-v7 = $(shell MASON_ANDROID_ABI=arm-v7 ./scripts/android/toolchain.sh)
|
||||
CONFIG_android-arm-v7 = -Dhost=android -Iconfig/android-arm-v7.gypi
|
||||
|
||||
ANDROID_ABIS += android-lib-arm-v5
|
||||
ENV_android-arm-v5 = $(shell MASON_ANDROID_ABI=arm-v5 ./scripts/android_env.sh)
|
||||
ENV_android-arm-v5 = $(shell MASON_ANDROID_ABI=arm-v5 ./scripts/android/toolchain.sh)
|
||||
CONFIG_android-arm-v5 = -Dhost=android -Iconfig/android-arm-v5.gypi
|
||||
|
||||
ANDROID_ABIS += android-lib-x86
|
||||
ENV_android-x86 = $(shell MASON_ANDROID_ABI=x86 ./scripts/android_env.sh)
|
||||
ENV_android-x86 = $(shell MASON_ANDROID_ABI=x86 ./scripts/android/toolchain.sh)
|
||||
CONFIG_android-x86 = -Dhost=android -Iconfig/android-x86.gypi
|
||||
|
||||
# OpenSSL build is incomplete.
|
||||
# ANDROID_ABIS += android-lib-x86-64
|
||||
# ENV_android-x86-64 = $(shell MASON_ANDROID_ABI=x86-64 ./scripts/android_env.sh)
|
||||
# ENV_android-x86-64 = $(shell MASON_ANDROID_ABI=x86-64 ./scripts/android/toolchain.sh)
|
||||
# CONFIG_android-x86-64 = -Dhost=android -Iconfig/android-x86-64.gypi
|
||||
|
||||
ANDROID_ABIS += android-lib-mips
|
||||
ENV_android-mips = $(shell MASON_ANDROID_ABI=mips ./scripts/android_env.sh)
|
||||
ENV_android-mips = $(shell MASON_ANDROID_ABI=mips ./scripts/android/toolchain.sh)
|
||||
CONFIG_android-mips = -Dhost=android -Iconfig/android-mips.gypi
|
||||
|
||||
ANDROID_ABIS += android-lib-mips-64
|
||||
ENV_android-mips-64 = $(shell MASON_ANDROID_ABI=mips-64 ./scripts/android_env.sh)
|
||||
ENV_android-mips-64 = $(shell MASON_ANDROID_ABI=mips-64 ./scripts/android/toolchain.sh)
|
||||
CONFIG_android-mips-64 = -Dhost=android -Iconfig/android-mips-64.gypi
|
||||
|
||||
LIBS_android = -Dheadless_lib=none
|
||||
|
||||
3
configure
vendored
3
configure
vendored
@@ -15,7 +15,8 @@ function finish {
|
||||
trap finish EXIT
|
||||
|
||||
# Install mason
|
||||
. ./scripts/local_mason.sh
|
||||
git submodule update --init .mason
|
||||
export PATH="`pwd`/.mason:${PATH}" MASON_DIR="`pwd`/.mason"
|
||||
|
||||
case ${MASON_PLATFORM} in
|
||||
'ios')
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
export TRAVIS_OS_NAME=linux
|
||||
|
||||
cd build
|
||||
|
||||
source ./scripts/local_mason.sh
|
||||
mason install mesa 10.4.3
|
||||
export LD_LIBRARY_PATH=`mason prefix mesa 10.4.3`/lib
|
||||
|
||||
export DISPLAY=:99.0
|
||||
Xvfb :99 -ac -screen 0 1024x768x24 &
|
||||
|
||||
if [[ ${CXX} == "g++" ]]; then
|
||||
export CXX="g++-4.8"
|
||||
export CC="gcc-4.8"
|
||||
fi
|
||||
|
||||
source ./scripts/install_node.sh
|
||||
|
||||
make linux -j`nproc`
|
||||
make test-* -j`nproc`
|
||||
./scripts/compare_images.sh
|
||||
@@ -19,7 +19,7 @@
|
||||
'hard_dependency': 1,
|
||||
'dependencies': [ 'touch_styles' ], # required for xcode http://openradar.appspot.com/7232149
|
||||
'conditions': [
|
||||
['OS == "mac"', {
|
||||
['platform_lib == "osx" or platform_lib == "ios"', {
|
||||
'direct_dependent_settings': {
|
||||
'mac_bundle_resources': [ '../styles/styles' ],
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ extern NSString *const MGLEventGesturePanStart;
|
||||
extern NSString *const MGLEventGesturePinchStart;
|
||||
extern NSString *const MGLEventGestureRotateStart;
|
||||
|
||||
@interface MGLMapboxEvents : NSObject
|
||||
@interface MGLMapboxEvents : NSObject <NSURLSessionDelegate>
|
||||
|
||||
// You must call these methods from the main thread.
|
||||
//
|
||||
|
||||
@@ -51,7 +51,7 @@ public:
|
||||
enum class Mode : uint8_t {
|
||||
None, // we're not doing any processing
|
||||
Continuous, // continually updating map
|
||||
Static, // a once-off static image.
|
||||
Still, // a once-off still image.
|
||||
};
|
||||
|
||||
explicit Map(View&, FileSource&);
|
||||
|
||||
@@ -98,6 +98,12 @@ T clamp(T value, T min, T max) {
|
||||
return value < min ? min : (value > max ? max : value);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T wrap(T value, T min, T max) {
|
||||
T d = max - min;
|
||||
return value == max ? value : std::fmod((std::fmod((value - min), d) + d), d) + min;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T smoothstep(T edge0, T edge1, T x) {
|
||||
T t = clamp((x - edge0) / (edge1 - edge0), T(0), T(1));
|
||||
|
||||
@@ -1701,6 +1701,8 @@ CLLocationCoordinate2D latLngToCoordinate(mbgl::LatLng latLng)
|
||||
}
|
||||
|
||||
self.userLocationAnnotationView = [[MGLUserLocationAnnotationView alloc] initInMapView:self];
|
||||
self.userLocationAnnotationView.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin |
|
||||
UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin);
|
||||
|
||||
self.locationManager = [CLLocationManager new];
|
||||
|
||||
|
||||
@@ -73,6 +73,8 @@ NSString *const MGLEventGestureRotateStart = @"Rotation";
|
||||
@property (atomic) NSUInteger flushAt;
|
||||
@property (atomic) NSDateFormatter *rfc3339DateFormatter;
|
||||
@property (atomic) CGFloat scale;
|
||||
@property (atomic) NSURLSession *session;
|
||||
@property (atomic) NSData *geoTrustCert;
|
||||
|
||||
|
||||
// The isPaused state tracker is only ever accessed from the main thread.
|
||||
@@ -132,11 +134,31 @@ NSString *const MGLEventGestureRotateStart = @"Rotation";
|
||||
_serialQueue = dispatch_queue_create([[NSString stringWithFormat:@"%@.%@.events.serial", _appBundleId, uniqueID] UTF8String], DISPATCH_QUEUE_SERIAL);
|
||||
|
||||
// Configure Events Infrastructure
|
||||
// ===============================
|
||||
|
||||
_session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];
|
||||
|
||||
// Load Local Copy of Server's Public Key
|
||||
NSString *cerPath = nil;
|
||||
NSArray *bundles = [NSBundle allFrameworks];
|
||||
for (int lc = 0; lc < bundles.count; lc++) {
|
||||
NSBundle *b = [bundles objectAtIndex:lc];
|
||||
cerPath = [[NSBundle mainBundle] pathForResource:@"api_mapbox_com-geotrust" ofType:@"der"];
|
||||
if (cerPath != nil) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (cerPath != nil) {
|
||||
_geoTrustCert = [NSData dataWithContentsOfFile:cerPath];
|
||||
}
|
||||
|
||||
// Events Control
|
||||
_eventQueue = [[NSMutableArray alloc] init];
|
||||
_flushAt = 20;
|
||||
_flushAfter = 60;
|
||||
_token = nil;
|
||||
_instanceID = [[NSUUID UUID] UUIDString];
|
||||
|
||||
// Dynamic detection of ASIdentifierManager from Mixpanel
|
||||
// https://github.com/mixpanel/mixpanel-iphone/blob/master/LICENSE
|
||||
_advertiserId = @"";
|
||||
@@ -177,6 +199,9 @@ NSString *const MGLEventGestureRotateStart = @"Rotation";
|
||||
[NSTimeZone resetSystemTimeZone];
|
||||
[_rfc3339DateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
|
||||
|
||||
// Enable Battery Monitoring
|
||||
[UIDevice currentDevice].batteryMonitoringEnabled = YES;
|
||||
|
||||
_isPaused = NO;
|
||||
}
|
||||
return self;
|
||||
@@ -303,7 +328,7 @@ NSString *const MGLEventGestureRotateStart = @"Rotation";
|
||||
[evt setValue:strongSelf.model forKey:@"model"];
|
||||
[evt setValue:strongSelf.iOSVersion forKey:@"operatingSystem"];
|
||||
[evt setValue:[strongSelf getDeviceOrientation] forKey:@"orientation"];
|
||||
[evt setValue:@(100 * [UIDevice currentDevice].batteryLevel) forKey:@"batteryLevel"];
|
||||
[evt setValue:@((int)(100 * [UIDevice currentDevice].batteryLevel)) forKey:@"batteryLevel"];
|
||||
[evt setValue:@(strongSelf.scale) forKey:@"resolution"];
|
||||
[evt setValue:strongSelf.carrier forKey:@"carrier"];
|
||||
|
||||
@@ -386,8 +411,8 @@ NSString *const MGLEventGestureRotateStart = @"Rotation";
|
||||
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
|
||||
MGLMapboxEvents *strongSelf = weakSelf;
|
||||
if ( ! strongSelf) return;
|
||||
|
||||
if (!strongSelf) return;
|
||||
|
||||
// Setup URL Request
|
||||
NSString *url = [NSString stringWithFormat:@"%@/events/v1?access_token=%@", MGLMapboxEventsAPIBase, strongSelf.token];
|
||||
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
|
||||
@@ -401,9 +426,8 @@ NSString *const MGLEventGestureRotateStart = @"Rotation";
|
||||
[request setHTTPBody:jsonData];
|
||||
|
||||
// Send non blocking HTTP Request to server
|
||||
[NSURLConnection sendAsynchronousRequest:request
|
||||
queue:nil
|
||||
completionHandler:nil];
|
||||
NSURLSessionDataTask *task = [_session dataTaskWithRequest:request completionHandler: nil];
|
||||
[task resume];
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -644,4 +668,49 @@ NSString *const MGLEventGestureRotateStart = @"Rotation";
|
||||
return result;
|
||||
}
|
||||
|
||||
#pragma mark NSURLSessionDelegate
|
||||
- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^) (NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
|
||||
|
||||
if([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) {
|
||||
|
||||
SecTrustRef serverTrust = [[challenge protectionSpace] serverTrust];
|
||||
NSString *domain = [[challenge protectionSpace] host];
|
||||
SecTrustResultType trustResult;
|
||||
|
||||
// Validate the certificate chain with the device's trust store anyway
|
||||
// This *might* give use revocation checking
|
||||
SecTrustEvaluate(serverTrust, &trustResult);
|
||||
if (trustResult == kSecTrustResultUnspecified)
|
||||
{
|
||||
// Look for a pinned certificate in the server's certificate chain
|
||||
long numKeys = SecTrustGetCertificateCount(serverTrust);
|
||||
|
||||
BOOL found = false;
|
||||
for (int lc = 0; lc < numKeys; lc++) {
|
||||
SecCertificateRef certificate = SecTrustGetCertificateAtIndex(serverTrust, lc);
|
||||
NSData *remoteCertificateData = CFBridgingRelease(SecCertificateCopyData(certificate));
|
||||
|
||||
// Compare Remote Key With Local Version
|
||||
if ([remoteCertificateData isEqualToData:_geoTrustCert]) {
|
||||
// Found the certificate; continue connecting
|
||||
completionHandler(NSURLSessionAuthChallengeUseCredential, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
// The certificate wasn't found in the certificate chain; cancel the connection
|
||||
completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Certificate chain validation failed; cancel the connection
|
||||
completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
BIN
platform/ios/resources/api_mapbox_com-geotrust.der
Normal file
BIN
platform/ios/resources/api_mapbox_com-geotrust.der
Normal file
Binary file not shown.
15
scripts/android/install.sh
Executable file
15
scripts/android/install.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
source ./scripts/travis_helper.sh
|
||||
|
||||
mapbox_time "checkout_mason" \
|
||||
git submodule update --init .mason
|
||||
|
||||
export MASON_PLATFORM=android
|
||||
export MASON_ANDROID_ABI=${ANDROID_ABI}
|
||||
|
||||
mapbox_time "android_toolchain" \
|
||||
./scripts/android/toolchain.sh
|
||||
61
scripts/android/run.sh
Executable file
61
scripts/android/run.sh
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
BUILDTYPE=${BUILDTYPE:-Release}
|
||||
TESTMUNK=${TESTMUNK:-no}
|
||||
export HOST=android
|
||||
export MASON_PLATFORM=android
|
||||
export MASON_ANDROID_ABI=${ANDROID_ABI:-arm-v7}
|
||||
|
||||
source ./scripts/travis_helper.sh
|
||||
|
||||
# Add Mason to PATH
|
||||
export PATH="`pwd`/.mason:${PATH}" MASON_DIR="`pwd`/.mason"
|
||||
|
||||
################################################################################
|
||||
# Build
|
||||
################################################################################
|
||||
|
||||
mapbox_time "checkout_styles" \
|
||||
git submodule update --init styles
|
||||
|
||||
mkdir -p ./android/java/MapboxGLAndroidSDKTestApp/src/main/res/raw
|
||||
echo "${MAPBOX_ACCESS_TOKEN}" > ./android/java/MapboxGLAndroidSDKTestApp/src/main/res/raw/token.txt
|
||||
|
||||
mapbox_time "compile_library" \
|
||||
make android-lib -j${JOBS} BUILDTYPE=${BUILDTYPE}
|
||||
|
||||
mapbox_time "build_apk" \
|
||||
make android -j${JOBS} BUILDTYPE=${BUILDTYPE}
|
||||
|
||||
################################################################################
|
||||
# Deploy
|
||||
################################################################################
|
||||
|
||||
if [ ! -z "${AWS_ACCESS_KEY_ID}" ] && [ ! -z "${AWS_SECRET_ACCESS_KEY}" ] ; then
|
||||
# Install and add awscli to PATH for uploading the results
|
||||
mapbox_time "install_awscli" \
|
||||
pip install --user awscli
|
||||
export PATH="`python -m site --user-base`/bin:${PATH}"
|
||||
|
||||
mapbox_time_start "deploy_results"
|
||||
echo "Deploying results..."
|
||||
|
||||
S3_PREFIX=s3://mapbox/mapbox-gl-native/android/build/${TRAVIS_JOB_NUMBER}
|
||||
APK_OUTPUTS=./android/java/MapboxGLAndroidSDKTestApp/build/outputs/apk
|
||||
|
||||
# Upload either the debug or the release build
|
||||
if [ ${BUILDTYPE} == "Debug" ] ; then
|
||||
aws s3 cp \
|
||||
${APK_OUTPUTS}/MapboxGLAndroidSDKTestApp-debug.apk \
|
||||
${S3_PREFIX}/MapboxGLAndroidSDKTestApp-debug.apk
|
||||
elif [ ${BUILDTYPE} == "Release" ] ; then
|
||||
aws s3 cp \
|
||||
${APK_OUTPUTS}/MapboxGLAndroidSDKTestApp-release-unsigned.apk \
|
||||
${S3_PREFIX}/MapboxGLAndroidSDKTestApp-release-unsigned.apk
|
||||
fi
|
||||
|
||||
mapbox_time_finish
|
||||
fi
|
||||
26
scripts/android/toolchain.sh
Executable file
26
scripts/android/toolchain.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
export MASON_PLATFORM=android
|
||||
export MASON_ANDROID_ABI=${MASON_ANDROID_ABI:-arm-v7}
|
||||
export PATH="`pwd`/.mason:${PATH}"
|
||||
export MASON_DIR="`pwd`/.mason"
|
||||
|
||||
export PATH=`mason env PATH`
|
||||
|
||||
echo MASON_PLATFORM=\"${MASON_PLATFORM}\"
|
||||
echo MASON_ANDROID_ABI=\"${MASON_ANDROID_ABI}\"
|
||||
echo CXX=\"`which $(mason env CXX)`\"
|
||||
echo CC=\"`which $(mason env CC)`\"
|
||||
echo LD=\"`which $(mason env LD)`\"
|
||||
echo LINK=\"`which $(mason env CXX)`\"
|
||||
echo AR=\"`which $(mason env AR)`\"
|
||||
echo RANLIB=\"`which $(mason env RANLIB)`\"
|
||||
echo STRIP=\"`which $(mason env STRIP)`\"
|
||||
echo LDFLAGS=\"`mason env LDFLAGS` \${LDFLAGS:-}\"
|
||||
echo CFLAGS=\"`mason env CFLAGS` \${CFLAGS:-}\"
|
||||
echo CXXFLAGS=\"`mason env CXXFLAGS` \${CXXFLAGS:-}\"
|
||||
echo CPPFLAGS=\"`mason env CPPFLAGS` \${CPPFLAGS:-}\"
|
||||
echo JNIDIR=\"`mason env JNIDIR`\"
|
||||
@@ -1,25 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
./scripts/local_mason.sh
|
||||
|
||||
export MASON_PLATFORM=android
|
||||
|
||||
export PATH=`.mason/mason env PATH`
|
||||
|
||||
echo MASON_PLATFORM=\"android\"
|
||||
echo MASON_ANDROID_ABI=\"${MASON_ANDROID_ABI}\"
|
||||
|
||||
echo CXX=\"`which $(.mason/mason env CXX)`\"
|
||||
echo CC=\"`which $(.mason/mason env CC)`\"
|
||||
echo LD=\"`which $(.mason/mason env LD)`\"
|
||||
echo LINK=\"`which $(.mason/mason env CXX)`\"
|
||||
echo AR=\"`which $(.mason/mason env AR)`\"
|
||||
echo RANLIB=\"`which $(.mason/mason env RANLIB)`\"
|
||||
echo STRIP=\"`which $(.mason/mason env STRIP)`\"
|
||||
echo LDFLAGS=\"`.mason/mason env LDFLAGS` ${LDFLAGS}\"
|
||||
echo CFLAGS=\"`.mason/mason env CFLAGS` ${CFLAGS}\"
|
||||
echo CPPFLAGS=\"`.mason/mason env CPPFLAGS` ${CPPFLAGS}\"
|
||||
echo JNIDIR=\"`.mason/mason env JNIDIR`\"
|
||||
@@ -1,32 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [[ ${TRAVIS_OS_NAME} == "linux" ]]; then
|
||||
export DISPLAY=:99.0
|
||||
|
||||
if [[ ${MASON_PLATFORM} != "android" ]]; then
|
||||
sh -e /etc/init.d/xvfb start
|
||||
fi
|
||||
|
||||
# use g++ that supports c++11
|
||||
if [[ ${CXX} == "g++" ]]; then
|
||||
export CXX="g++-4.8"
|
||||
export CC="gcc-4.8"
|
||||
fi
|
||||
|
||||
# If building in debug then turn on sanitizers.
|
||||
# They should both work with latest g++/clang++
|
||||
# but it's not worth a standalone matrix so here
|
||||
# we just test address->gcc and thread->clang for
|
||||
# some limited coverage
|
||||
# if [[ ${BUILDTYPE} == "Debug" ]]; then
|
||||
# if [[ ${CXX} == "g++" ]]; then
|
||||
# export CXXFLAGS="-fsanitize=address -g ${CXXFLAGS}"
|
||||
# export CFLAGS="-fsanitize=address -g ${CFLAGS}"
|
||||
# export LDFLAGS="-fsanitize=address ${LDFLAGS}"
|
||||
# elif [[ ${CXX} == "clang++" ]]; then
|
||||
# export CXXFLAGS="-fsanitize=thread -g -fPIC ${CXXFLAGS}"
|
||||
# export CFLAGS="-fsanitize=thread -g ${CFLAGS}"
|
||||
# export LDFLAGS="-fsanitize=thread -pie ${LDFLAGS}"
|
||||
# fi
|
||||
# fi
|
||||
fi
|
||||
@@ -1,4 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
mason install node 0.10.35
|
||||
export PATH="`mason prefix node 0.10.35`/bin":"$PATH"
|
||||
@@ -16,10 +16,10 @@ security unlock-keychain -p travis ios-build.keychain
|
||||
security set-keychain-settings -t 3600 -l ~/Library/Keychains/ios-build.keychain
|
||||
|
||||
# Add certificates to keychain and allow codesign to access them
|
||||
security import ./scripts/ios_travis/apple.crt -k ~/Library/Keychains/ios-build.keychain -T /usr/bin/codesign
|
||||
security import ./scripts/ios_travis/ios-dist.cer -k ~/Library/Keychains/ios-build.keychain -T /usr/bin/codesign
|
||||
security import ./scripts/ios_travis/ios-dist.p12 -k ~/Library/Keychains/ios-build.keychain -P $IOS_KEY_PASSWORD -T /usr/bin/codesign
|
||||
security import ./scripts/ios/apple.crt -k ~/Library/Keychains/ios-build.keychain -T /usr/bin/codesign
|
||||
security import ./scripts/ios/ios-dist.cer -k ~/Library/Keychains/ios-build.keychain -T /usr/bin/codesign
|
||||
security import ./scripts/ios/ios-dist.p12 -k ~/Library/Keychains/ios-build.keychain -P $IOS_KEY_PASSWORD -T /usr/bin/codesign
|
||||
|
||||
# Put the provisioning profile in place
|
||||
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
|
||||
cp "./scripts/ios_travis/$IOS_PROFILE_NAME.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/
|
||||
cp "./scripts/ios/$IOS_PROFILE_NAME.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/
|
||||
13
scripts/ios/install.sh
Executable file
13
scripts/ios/install.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
source ./scripts/travis_helper.sh
|
||||
|
||||
mapbox_time "checkout_mason" \
|
||||
git submodule update --init .mason
|
||||
export PATH="`pwd`/.mason:${PATH}" MASON_DIR="`pwd`/.mason"
|
||||
|
||||
mapbox_time "install_xcpretty" \
|
||||
gem install xcpretty --no-rdoc --no-ri --no-document --quiet
|
||||
27
scripts/ios/run.sh
Executable file
27
scripts/ios/run.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
BUILDTYPE=${BUILDTYPE:-Release}
|
||||
|
||||
source ./scripts/travis_helper.sh
|
||||
|
||||
# Add Mason to PATH
|
||||
export PATH="`pwd`/.mason:${PATH}" MASON_DIR="`pwd`/.mason"
|
||||
|
||||
################################################################################
|
||||
# Build
|
||||
################################################################################
|
||||
|
||||
mapbox_time "package_ios" \
|
||||
make ipackage
|
||||
|
||||
################################################################################
|
||||
# Deploy
|
||||
################################################################################
|
||||
|
||||
if [[ -n "$PUBLISH_TAG" ]]; then
|
||||
mapbox_time "deploy_ios" \
|
||||
./scripts/ios/publish.sh "$PUBLISH_VERSION"
|
||||
fi
|
||||
22
scripts/linux/install.sh
Executable file
22
scripts/linux/install.sh
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
source ./scripts/travis_helper.sh
|
||||
|
||||
mapbox_time "update_apt" \
|
||||
sudo apt-get -y update
|
||||
|
||||
mapbox_time "install_apt" \
|
||||
sudo apt-get -y install mesa-utils llvm-3.4 pkg-config libcurl4-openssl-dev \
|
||||
libboost-dev libboost-program-options-dev libxi-dev x11proto-randr-dev \
|
||||
x11proto-xext-dev libxrandr-dev x11proto-xf86vidmode-dev libxxf86vm-dev \
|
||||
libxcursor-dev libxinerama-dev
|
||||
|
||||
mapbox_time "checkout_mason" \
|
||||
git submodule update --init .mason
|
||||
export PATH="`pwd`/.mason:${PATH}" MASON_DIR="`pwd`/.mason"
|
||||
|
||||
mapbox_time "install_mesa" \
|
||||
mason install mesa 10.4.3
|
||||
75
scripts/linux/run.sh
Executable file
75
scripts/linux/run.sh
Executable file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
BUILDTYPE=${BUILDTYPE:-Release}
|
||||
|
||||
source ./scripts/travis_helper.sh
|
||||
|
||||
# Add Mason to PATH
|
||||
export PATH="`pwd`/.mason:${PATH}" MASON_DIR="`pwd`/.mason"
|
||||
|
||||
# Set the core file limit to unlimited so a core file is generated upon crash
|
||||
ulimit -c unlimited -S
|
||||
|
||||
################################################################################
|
||||
# X Server setup
|
||||
################################################################################
|
||||
|
||||
# Start the mock X server
|
||||
if [ -f /etc/init.d/xvfb ] ; then
|
||||
mapbox_time "start_xvfb" \
|
||||
sh -e /etc/init.d/xvfb start
|
||||
sleep 2 # sometimes, xvfb takes some time to start up
|
||||
fi
|
||||
|
||||
# Make sure we're connecting to xvfb
|
||||
export DISPLAY=:99.0
|
||||
|
||||
# Make sure we're loading the 10.4.3 libs we installed manually
|
||||
export LD_LIBRARY_PATH="`mason prefix mesa 10.4.3`/lib:${LD_LIBRARY_PATH:-}"
|
||||
|
||||
mapbox_time "glxinfo" \
|
||||
glxinfo
|
||||
|
||||
################################################################################
|
||||
# Build
|
||||
################################################################################
|
||||
|
||||
mapbox_time "checkout_styles" \
|
||||
git submodule update --init styles
|
||||
|
||||
mapbox_time "compile_program" \
|
||||
make linux -j${JOBS} BUILDTYPE=${BUILDTYPE}
|
||||
|
||||
mapbox_time "compile_tests" \
|
||||
make test -j${JOBS} BUILDTYPE=${BUILDTYPE}
|
||||
|
||||
################################################################################
|
||||
# Test
|
||||
################################################################################
|
||||
|
||||
mapbox_time "checkout_test_suite" \
|
||||
git submodule update --init test/suite
|
||||
|
||||
mapbox_time "run_tests" \
|
||||
make test-* BUILDTYPE=${BUILDTYPE}
|
||||
|
||||
mapbox_time "compare_results" \
|
||||
./scripts/compare_images.sh
|
||||
|
||||
################################################################################
|
||||
# Deploy
|
||||
################################################################################
|
||||
|
||||
if [ ! -z "${AWS_ACCESS_KEY_ID}" ] && [ ! -z "${AWS_SECRET_ACCESS_KEY}" ] ; then
|
||||
# Install and add awscli to PATH for uploading the results
|
||||
mapbox_time "install_awscli" \
|
||||
pip install --user awscli
|
||||
export PATH="`python -m site --user-base`/bin:${PATH}"
|
||||
|
||||
mapbox_time_start "deploy_results"
|
||||
(cd ./test/suite/ && ./bin/deploy_results.sh)
|
||||
mapbox_time_finish
|
||||
fi
|
||||
@@ -1,5 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
git submodule update --init .mason
|
||||
PATH=`pwd`/.mason:$PATH
|
||||
export MASON_DIR=`pwd`/.mason
|
||||
@@ -1,8 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
cd bin
|
||||
$1 install --clang=1
|
||||
cd ../
|
||||
13
scripts/osx/install.sh
Executable file
13
scripts/osx/install.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
source ./scripts/travis_helper.sh
|
||||
|
||||
mapbox_time "checkout_mason" \
|
||||
git submodule update --init .mason
|
||||
export PATH="`pwd`/.mason:${PATH}" MASON_DIR="`pwd`/.mason"
|
||||
|
||||
mapbox_time "install_xcpretty" \
|
||||
gem install xcpretty --no-rdoc --no-ri --no-document --quiet
|
||||
27
scripts/osx/run.sh
Executable file
27
scripts/osx/run.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
BUILDTYPE=${BUILDTYPE:-Release}
|
||||
|
||||
source ./scripts/travis_helper.sh
|
||||
|
||||
# Add Mason to PATH
|
||||
export PATH="`pwd`/.mason:${PATH}" MASON_DIR="`pwd`/.mason"
|
||||
|
||||
# Set the core file limit to unlimited so a core file is generated upon crash
|
||||
ulimit -c unlimited -S
|
||||
|
||||
################################################################################
|
||||
# Build
|
||||
################################################################################
|
||||
|
||||
mapbox_time "checkout_styles" \
|
||||
git submodule update --init styles
|
||||
|
||||
mapbox_time "compile_program" \
|
||||
make xosx -j${JOBS} BUILDTYPE=${BUILDTYPE}
|
||||
|
||||
mapbox_time "compile_tests" \
|
||||
make xtest -j${JOBS} BUILDTYPE=${BUILDTYPE}
|
||||
@@ -1,53 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
if [[ ${TRAVIS_OS_NAME} == "linux" ]]; then
|
||||
#
|
||||
# install Linux dependencies
|
||||
#
|
||||
if [[ `lsb_release -r` =~ "12.04" ]]; then
|
||||
sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
|
||||
fi
|
||||
sudo add-apt-repository --yes ppa:boost-latest/ppa
|
||||
|
||||
mapbox_time "apt_update" \
|
||||
sudo apt-get update -y
|
||||
|
||||
mapbox_time "install_gcc" \
|
||||
sudo apt-get -y install gcc-4.8 g++-4.8
|
||||
|
||||
mapbox_time "install_build_tools" \
|
||||
sudo apt-get -y install git build-essential zlib1g-dev automake gdb \
|
||||
libtool xutils-dev make cmake pkg-config python-pip \
|
||||
libboost1.55-dev libcurl4-openssl-dev \
|
||||
libpng-dev libsqlite3-dev
|
||||
|
||||
if [[ ${MASON_PLATFORM} != "android" ]]; then
|
||||
mapbox_time "install_opengl" \
|
||||
sudo apt-get -y install mesa-utils libxi-dev x11proto-randr-dev \
|
||||
x11proto-xext-dev libxrandr-dev \
|
||||
x11proto-xf86vidmode-dev libxxf86vm-dev \
|
||||
libxcursor-dev libxinerama-dev \
|
||||
llvm-3.4 # required for mesa
|
||||
|
||||
mapbox_time "install_mesa" \
|
||||
mason install mesa 10.4.3
|
||||
fi
|
||||
|
||||
mapbox_time "install_awscli" \
|
||||
sudo pip install awscli
|
||||
elif [[ ${TRAVIS_OS_NAME} == "osx" ]]; then
|
||||
#
|
||||
# install OS X dependencies
|
||||
#
|
||||
mapbox_time "install_build_tools" \
|
||||
brew install git
|
||||
|
||||
mapbox_time "install_awscli" \
|
||||
sudo pip install awscli
|
||||
|
||||
mapbox_time "install_xcpretty" \
|
||||
gem install xcpretty --no-rdoc --no-ri --no-document --quiet
|
||||
fi
|
||||
@@ -1,13 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
case `uname -s` in
|
||||
'Darwin') JOBS=$((`sysctl -n hw.ncpu` + 2)) ;;
|
||||
'Linux') JOBS=$((`nproc` + 2)) ;;
|
||||
*) JOBS=2 ;;
|
||||
esac
|
||||
|
||||
function mapbox_time_start {
|
||||
local name=$1
|
||||
mapbox_timer_name=$name
|
||||
|
||||
travis_fold start $name
|
||||
mapbox_fold start $name
|
||||
|
||||
mapbox_timer_id=$(printf %08x $(( RANDOM * RANDOM )))
|
||||
eval "mapbox_start_time_$mapbox_timer_id=$(travis_nanoseconds)"
|
||||
eval "mapbox_start_time_$mapbox_timer_id=$(mapbox_nanoseconds)"
|
||||
echo -en "travis_time:start:$mapbox_timer_id\n"
|
||||
}
|
||||
|
||||
@@ -16,11 +22,11 @@ function mapbox_time_finish {
|
||||
local timer_id=${2:-$mapbox_timer_id}
|
||||
local timer_start="mapbox_start_time_$timer_id"
|
||||
eval local start_time=\${$timer_start}
|
||||
local end_time=$(travis_nanoseconds)
|
||||
local end_time=$(mapbox_nanoseconds)
|
||||
local duration=$(($end_time-$start_time))
|
||||
echo -en "travis_time:end:$timer_id:start=$start_time,finish=$end_time,duration=$duration\n"
|
||||
|
||||
travis_fold end $name
|
||||
mapbox_fold end $name
|
||||
}
|
||||
|
||||
function mapbox_time {
|
||||
@@ -32,13 +38,13 @@ function mapbox_time {
|
||||
mapbox_time_finish $name $timer_id
|
||||
}
|
||||
|
||||
if [[ "${TRAVIS_COMMIT:-false}" == false ]]; then
|
||||
function travis_fold {
|
||||
function mapbox_fold {
|
||||
local action=$1
|
||||
local name=$2
|
||||
echo -en "travis_fold:${action}:${name}\r${ANSI_CLEAR}"
|
||||
}
|
||||
function travis_nanoseconds {
|
||||
|
||||
function mapbox_nanoseconds {
|
||||
local cmd="date"
|
||||
local format="+%s%N"
|
||||
local os=$(uname)
|
||||
@@ -51,11 +57,11 @@ function travis_nanoseconds {
|
||||
|
||||
$cmd -u $format
|
||||
}
|
||||
fi
|
||||
|
||||
export JOBS
|
||||
export ANSI_CLEAR
|
||||
export -f travis_fold
|
||||
export -f travis_nanoseconds
|
||||
export -f mapbox_fold
|
||||
export -f mapbox_nanoseconds
|
||||
export -f mapbox_time
|
||||
export -f mapbox_time_start
|
||||
export -f mapbox_time_finish
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
COMMIT_MESSAGE=$(git show -s --format=%B $1 | tr -d '\n')
|
||||
PUBLISH_TAG=$(echo "$COMMIT_MESSAGE" | grep -oE '\[publish [a-z0-9\.\-]+\]' | grep -oE '[a-z0-9\.\-]+' | tail -n1)
|
||||
PUBLISH_PLATFORM=$(echo "$PUBLISH_TAG" | awk -F '-v' '{ print $1 }')
|
||||
PUBLISH_VERSION=$(echo "$PUBLISH_TAG" | awk -F '-v' '{ print $2 }')
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
mapbox_time "checkout_styles" \
|
||||
git submodule update --init styles
|
||||
|
||||
if [[ $MASON_PLATFORM == "android" ]]; then
|
||||
./android/scripts/run-build.sh
|
||||
|
||||
elif [[ ${TRAVIS_OS_NAME} == "linux" ]]; then
|
||||
#
|
||||
# build & test Linux
|
||||
#
|
||||
mapbox_time "compile_program" \
|
||||
make linux -j$JOBS BUILDTYPE=${BUILDTYPE}
|
||||
|
||||
mapbox_time "compile_tests" \
|
||||
make test -j$JOBS BUILDTYPE=${BUILDTYPE}
|
||||
|
||||
mapbox_time "checkout_test_suite" \
|
||||
git submodule update --init test/suite
|
||||
|
||||
mapbox_time "run_tests" \
|
||||
make test-* BUILDTYPE=${BUILDTYPE}
|
||||
|
||||
mapbox_time "compare_results" \
|
||||
./scripts/compare_images.sh
|
||||
|
||||
if [ ! -z "${AWS_ACCESS_KEY_ID}" ] && [ ! -z "${AWS_SECRET_ACCESS_KEY}" ] ; then
|
||||
mapbox_time_start "deploy_results"
|
||||
(cd ./test/suite/ && ./bin/deploy_results.sh)
|
||||
mapbox_time_finish
|
||||
fi
|
||||
|
||||
elif [[ ${TRAVIS_OS_NAME} == "osx" && ${MASON_PLATFORM} == "osx" ]]; then
|
||||
#
|
||||
# build OS X
|
||||
#
|
||||
mapbox_time "build_osx" \
|
||||
make xosx -j$JOBS
|
||||
|
||||
elif [[ ${TRAVIS_OS_NAME} == "osx" && ${MASON_PLATFORM} == "ios" ]]; then
|
||||
#
|
||||
# build & package iOS
|
||||
#
|
||||
mapbox_time "package_ios"
|
||||
make ipackage
|
||||
#
|
||||
# conditionally deploy iOS build
|
||||
#
|
||||
if [[ -n "$PUBLISH_TAG" ]]; then
|
||||
mapbox_time "deploy_ios"
|
||||
./scripts/publish_ios.sh "$PUBLISH_VERSION"
|
||||
fi
|
||||
fi
|
||||
3
scripts/xcpretty.sh
Executable file
3
scripts/xcpretty.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
FN=$(which xcpretty) ; [ ! -z ${FN} ] && echo "| ${FN}"
|
||||
@@ -247,15 +247,15 @@ void Map::resume() {
|
||||
void Map::renderStill(StillImageCallback fn) {
|
||||
assert(Environment::currentlyOn(ThreadType::Main));
|
||||
|
||||
if (mode != Mode::Static) {
|
||||
throw util::Exception("Map is not in static render mode");
|
||||
if (mode != Mode::Still) {
|
||||
throw util::Exception("Map is not in still image render mode");
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
throw util::Exception("Map is currently rendering an image");
|
||||
}
|
||||
|
||||
assert(mode == Mode::Static);
|
||||
assert(mode == Mode::Still);
|
||||
|
||||
callback = std::move(fn);
|
||||
|
||||
@@ -287,7 +287,7 @@ void Map::run() {
|
||||
uv_run(env->loop, UV_RUN_DEFAULT);
|
||||
checkForPause();
|
||||
}
|
||||
} else if (mode == Mode::Static) {
|
||||
} else if (mode == Mode::Still) {
|
||||
terminating = false;
|
||||
while (!terminating) {
|
||||
uv_run(env->loop, UV_RUN_DEFAULT);
|
||||
|
||||
@@ -12,6 +12,21 @@
|
||||
|
||||
using namespace mbgl;
|
||||
|
||||
/** Converts the given angle (in radians) to be numerically close to the anchor angle, allowing it to be interpolated properly without sudden jumps. */
|
||||
static double _normalizeAngle(double angle, double anchorAngle)
|
||||
{
|
||||
angle = util::wrap(angle, -M_PI, M_PI);
|
||||
double diff = std::abs(angle - anchorAngle);
|
||||
if (std::abs(angle - util::M2PI - anchorAngle) < diff) {
|
||||
angle -= util::M2PI;
|
||||
}
|
||||
if (std::abs(angle + util::M2PI - anchorAngle) < diff) {
|
||||
angle += util::M2PI;
|
||||
}
|
||||
|
||||
return angle;
|
||||
}
|
||||
|
||||
Transform::Transform(View &view_)
|
||||
: view(view_)
|
||||
{
|
||||
@@ -330,12 +345,7 @@ void Transform::_setAngle(double new_angle, const Duration duration) {
|
||||
MapChangeRegionWillChangeAnimated :
|
||||
MapChangeRegionWillChange);
|
||||
|
||||
while (new_angle > M_PI)
|
||||
new_angle -= util::M2PI;
|
||||
while (new_angle <= -M_PI)
|
||||
new_angle += util::M2PI;
|
||||
|
||||
final.angle = new_angle;
|
||||
final.angle = _normalizeAngle(new_angle, current.angle);
|
||||
|
||||
if (duration == Duration::zero()) {
|
||||
current.angle = final.angle;
|
||||
|
||||
@@ -24,7 +24,7 @@ TEST(API, RepeatedRender) {
|
||||
|
||||
Map map(view, fileSource);
|
||||
|
||||
map.start(Map::Mode::Static);
|
||||
map.start(Map::Mode::Still);
|
||||
|
||||
{
|
||||
view.resize(128, 512, 1);
|
||||
|
||||
@@ -18,7 +18,7 @@ TEST(API, SetStyle) {
|
||||
|
||||
Map map(view, fileSource);
|
||||
|
||||
map.start(Map::Mode::Static);
|
||||
map.start(Map::Mode::Still);
|
||||
|
||||
map.setStyleJSON("invalid", "test/suite");
|
||||
|
||||
|
||||
@@ -16,10 +16,10 @@
|
||||
#include <mbgl/platform/default/headless_display.hpp>
|
||||
#include <mbgl/storage/default_file_source.hpp>
|
||||
|
||||
#include <uv.h>
|
||||
|
||||
#include <dirent.h>
|
||||
|
||||
#include <future>
|
||||
|
||||
void rewriteLocalScheme(rapidjson::Value &value, rapidjson::Document::AllocatorType &allocator) {
|
||||
ASSERT_TRUE(value.IsString());
|
||||
auto string = std::string { value.GetString(),value.GetStringLength() };
|
||||
@@ -145,7 +145,7 @@ TEST_P(HeadlessTest, render) {
|
||||
DefaultFileSource fileSource(nullptr);
|
||||
Map map(view, fileSource);
|
||||
|
||||
map.start(Map::Mode::Static);
|
||||
map.start(Map::Mode::Still);
|
||||
|
||||
map.setClasses(classes);
|
||||
map.setStyleJSON(style, "test/suite");
|
||||
@@ -154,32 +154,15 @@ TEST_P(HeadlessTest, render) {
|
||||
map.setLatLngZoom(mbgl::LatLng(latitude, longitude), zoom);
|
||||
map.setBearing(bearing);
|
||||
|
||||
struct Data {
|
||||
std::string path;
|
||||
std::unique_ptr<const StillImage> image;
|
||||
};
|
||||
std::promise<void> promise;
|
||||
|
||||
uv_async_t *async = new uv_async_t;
|
||||
async->data = new Data { "test/suite/tests/" + base + "/" + name + "/actual.png", nullptr };
|
||||
uv_async_init(uv_default_loop(), async, [](uv_async_t *as, int) {
|
||||
auto data = std::unique_ptr<Data>(reinterpret_cast<Data *>(as->data));
|
||||
as->data = nullptr;
|
||||
uv_close(reinterpret_cast<uv_handle_t *>(as), [](uv_handle_t *handle) {
|
||||
delete reinterpret_cast<uv_async_t *>(handle);
|
||||
});
|
||||
|
||||
assert(data);
|
||||
const std::string png = util::compress_png(data->image->width, data->image->height, data->image->pixels.get());
|
||||
util::write_file(data->path, png);
|
||||
map.renderStill([&](std::unique_ptr<const StillImage> image) {
|
||||
const std::string png = util::compress_png(image->width, image->height, image->pixels.get());
|
||||
util::write_file("test/suite/tests/" + base + "/" + name + "/actual.png", png);
|
||||
promise.set_value();
|
||||
});
|
||||
|
||||
map.renderStill([async](std::unique_ptr<const StillImage> image) {
|
||||
reinterpret_cast<Data *>(async->data)->image = std::move(image);
|
||||
uv_async_send(async);
|
||||
});
|
||||
|
||||
// This loop will terminate once the async was fired.
|
||||
uv_run(uv_default_loop(), UV_RUN_DEFAULT);
|
||||
promise.get_future().get();
|
||||
|
||||
map.stop();
|
||||
}
|
||||
|
||||
@@ -72,15 +72,18 @@
|
||||
],
|
||||
'libraries': [
|
||||
'<@(uv_static_libs)',
|
||||
'<@(sqlite3_static_libs)',
|
||||
],
|
||||
'variables': {
|
||||
'cflags_cc': [
|
||||
'<@(uv_cflags)',
|
||||
'<@(opengl_cflags)',
|
||||
'<@(boost_cflags)',
|
||||
'<@(sqlite3_cflags)',
|
||||
],
|
||||
'ldflags': [
|
||||
'<@(uv_ldflags)',
|
||||
'<@(sqlite3_ldflags)',
|
||||
],
|
||||
},
|
||||
'conditions': [
|
||||
|
||||
Reference in New Issue
Block a user