From 0bb2e05063436202cbd5e657f5cf87a4819da397 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Sat, 18 Apr 2015 23:28:51 -0700 Subject: [PATCH 1/8] weakSelf needs strongSelf The `weakSelf` dance requires the use of a `strongSelf` in non-trivial blocks. In these cases, `weakSelf` could disappear right out from under the block. A crash could potentially occur due to setting a `nil` value in an `NSMutableDictionary`. --- platform/ios/MGLMapboxEvents.m | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/platform/ios/MGLMapboxEvents.m b/platform/ios/MGLMapboxEvents.m index 605c6a3fa..149d90904 100644 --- a/platform/ios/MGLMapboxEvents.m +++ b/platform/ios/MGLMapboxEvents.m @@ -267,6 +267,9 @@ NSString *const MGLEventGestureRotateStart = @"Rotation"; __weak MGLMapboxEvents *weakSelf = self; dispatch_async(_serialQueue, ^{ + MGLMapboxEvents *strongSelf = weakSelf; + if ( ! strongSelf) return; + // Opt Out Checking When Built if (![[NSUserDefaults standardUserDefaults] boolForKey:@"mapbox_metrics_enabled_preference"]) { [_eventQueue removeAllObjects]; @@ -350,6 +353,9 @@ NSString *const MGLEventGestureRotateStart = @"Rotation"; __weak MGLMapboxEvents *weakSelf = self; dispatch_async(_serialQueue, ^{ + MGLMapboxEvents *strongSelf = weakSelf; + if ( ! strongSelf) return; + __block NSArray *events; NSUInteger upper = weakSelf.flushAt; @@ -379,6 +385,9 @@ NSString *const MGLEventGestureRotateStart = @"Rotation"; __weak MGLMapboxEvents *weakSelf = self; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ + MGLMapboxEvents *strongSelf = weakSelf; + if ( ! strongSelf) return; + // Setup URL Request NSString *url = [NSString stringWithFormat:@"%@/events/v1?access_token=%@", MGLMapboxEventsAPIBase, weakSelf.token]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]]; From 2ec09a663f89a41ebe083a56c6a6944cc8b9293d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Mon, 20 Apr 2015 09:58:05 -0700 Subject: [PATCH 2/8] Use `strongSelf` inside blocks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It’d be pointless to create a `strongSelf` but not use it; `weakSelf` isn’t guaranteed to exist past that point. --- platform/ios/MGLMapboxEvents.m | 44 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/platform/ios/MGLMapboxEvents.m b/platform/ios/MGLMapboxEvents.m index 149d90904..e7a0702ab 100644 --- a/platform/ios/MGLMapboxEvents.m +++ b/platform/ios/MGLMapboxEvents.m @@ -50,7 +50,7 @@ NSString *const MGLEventGestureRotateStart = @"Rotation"; // from within a single thread use underscore syntax. // // All captures of `self` from within asynchronous -// dispatches will use a `weakSelf` to avoid cyclical +// dispatches will use a `strongSelf` to avoid cyclical // strong references. // @@ -293,35 +293,35 @@ NSString *const MGLEventGestureRotateStart = @"Rotation"; // mapbox-events stock attributes [evt setObject:event forKey:@"event"]; [evt setObject:@(1) forKey:@"version"]; - [evt setObject:[weakSelf.rfc3339DateFormatter stringFromDate:[NSDate date]] forKey:@"created"]; - [evt setObject:weakSelf.instanceID forKey:@"instance"]; - [evt setObject:weakSelf.advertiserId forKey:@"advertiserId"]; - [evt setObject:weakSelf.vendorId forKey:@"vendorId"]; - [evt setObject:weakSelf.appBundleId forKeyedSubscript:@"appBundleId"]; + [evt setObject:[strongSelf.rfc3339DateFormatter stringFromDate:[NSDate date]] forKey:@"created"]; + [evt setObject:strongSelf.instanceID forKey:@"instance"]; + [evt setObject:strongSelf.advertiserId forKey:@"advertiserId"]; + [evt setObject:strongSelf.vendorId forKey:@"vendorId"]; + [evt setObject:strongSelf.appBundleId forKeyedSubscript:@"appBundleId"]; // mapbox-events-ios stock attributes - [evt setValue:weakSelf.model forKey:@"model"]; - [evt setValue:weakSelf.iOSVersion forKey:@"operatingSystem"]; - [evt setValue:[weakSelf getDeviceOrientation] forKey:@"orientation"]; + [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:@(weakSelf.scale) forKey:@"resolution"]; - [evt setValue:weakSelf.carrier forKey:@"carrier"]; + [evt setValue:@(strongSelf.scale) forKey:@"resolution"]; + [evt setValue:strongSelf.carrier forKey:@"carrier"]; - NSString *cell = [weakSelf getCurrentCellularNetworkConnectionType]; + NSString *cell = [strongSelf getCurrentCellularNetworkConnectionType]; if (cell) { [evt setValue:cell forKey:@"cellularNetworkType"]; } else { [evt setObject:[NSNull null] forKey:@"cellularNetworkType"]; } - NSString *wifi = [weakSelf getWifiNetworkName]; + NSString *wifi = [strongSelf getWifiNetworkName]; if (wifi) { [evt setValue:wifi forKey:@"wifi"]; } else { [evt setObject:[NSNull null] forKey:@"wifi"]; } - [evt setValue:@([weakSelf getContentSizeScale]) forKey:@"accessibilityFontScale"]; + [evt setValue:@([strongSelf getContentSizeScale]) forKey:@"accessibilityFontScale"]; // Make Immutable Version NSDictionary *finalEvent = [NSDictionary dictionaryWithDictionary:evt]; @@ -330,12 +330,12 @@ NSString *const MGLEventGestureRotateStart = @"Rotation"; [_eventQueue addObject:finalEvent]; // Has Flush Limit Been Reached? - if (_eventQueue.count >= weakSelf.flushAt) { - [weakSelf flush]; + if (_eventQueue.count >= strongSelf.flushAt) { + [strongSelf flush]; } // Reset Timer (Initial Starting of Timer after first event is pushed) - [weakSelf startTimer]; + [strongSelf startTimer]; }); } @@ -358,8 +358,8 @@ NSString *const MGLEventGestureRotateStart = @"Rotation"; __block NSArray *events; - NSUInteger upper = weakSelf.flushAt; - if (weakSelf.flushAt > [_eventQueue count]) { + NSUInteger upper = strongSelf.flushAt; + if (strongSelf.flushAt > [_eventQueue count]) { if ([_eventQueue count] == 0) { return; } @@ -374,7 +374,7 @@ NSString *const MGLEventGestureRotateStart = @"Rotation"; [_eventQueue removeObjectsInRange:theRange]; // Send Array of Events to Server - [weakSelf postEvents:events]; + [strongSelf postEvents:events]; }); } @@ -389,9 +389,9 @@ NSString *const MGLEventGestureRotateStart = @"Rotation"; if ( ! strongSelf) return; // Setup URL Request - NSString *url = [NSString stringWithFormat:@"%@/events/v1?access_token=%@", MGLMapboxEventsAPIBase, weakSelf.token]; + NSString *url = [NSString stringWithFormat:@"%@/events/v1?access_token=%@", MGLMapboxEventsAPIBase, strongSelf.token]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]]; - [request setValue:[weakSelf getUserAgent] forHTTPHeaderField:@"User-Agent"]; + [request setValue:[strongSelf getUserAgent] forHTTPHeaderField:@"User-Agent"]; [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [request setHTTPMethod:@"POST"]; From 55118e5bd724c62b50cdf7e8158e3bdef446534f Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 22 Apr 2015 13:51:44 -0700 Subject: [PATCH 3/8] Revert "build on trusty" This reverts commit decc493ec8c30d66bcdf3aa19f58972eb045b5dc. Conflicts: .mason --- .mason | 2 +- .travis.yml | 130 ++++++++++-------- Makefile | 21 +-- README.md | 2 +- android/scripts/build-debug.sh | 8 ++ android/scripts/build-release.sh | 8 ++ android/scripts/common.sh | 40 ++++++ android/scripts/run-build.sh | 85 ++++++++++++ config/defaults.mk | 14 +- configure | 3 +- docker/linux/test.sh | 26 ++++ scripts/android/install.sh | 15 -- scripts/android/run.sh | 61 -------- scripts/android/toolchain.sh | 26 ---- scripts/android_env.sh | 25 ++++ scripts/flags.sh | 32 +++++ scripts/install_node.sh | 4 + scripts/ios/install.sh | 13 -- scripts/ios/run.sh | 27 ---- scripts/{ios => ios_travis}/add-key.sh | 8 +- scripts/{ios => ios_travis}/apple.crt | Bin scripts/{ios => ios_travis}/ios-dist.cer.enc | 0 scripts/{ios => ios_travis}/ios-dist.p12.enc | 0 .../ios-in-house.mobileprovision.enc | 0 scripts/{ios => ios_travis}/remove-key.sh | 0 scripts/linux/install.sh | 22 --- scripts/linux/run.sh | 75 ---------- scripts/local_mason.sh | 5 + scripts/npm_install.sh | 8 ++ scripts/osx/install.sh | 13 -- scripts/osx/run.sh | 27 ---- scripts/{ios/package.sh => package_ios.sh} | 0 scripts/{ios/publish.sh => publish_ios.sh} | 0 scripts/travis_before_install.sh | 53 +++++++ scripts/travis_helper.sh | 26 ++-- scripts/travis_script.sh | 62 +++++++++ scripts/xcpretty.sh | 3 - test/test.gyp | 3 - 38 files changed, 458 insertions(+), 389 deletions(-) create mode 100755 android/scripts/build-debug.sh create mode 100755 android/scripts/build-release.sh create mode 100755 android/scripts/common.sh create mode 100755 android/scripts/run-build.sh create mode 100755 docker/linux/test.sh delete mode 100755 scripts/android/install.sh delete mode 100755 scripts/android/run.sh delete mode 100755 scripts/android/toolchain.sh create mode 100755 scripts/android_env.sh create mode 100755 scripts/flags.sh create mode 100755 scripts/install_node.sh delete mode 100755 scripts/ios/install.sh delete mode 100755 scripts/ios/run.sh rename scripts/{ios => ios_travis}/add-key.sh (61%) rename scripts/{ios => ios_travis}/apple.crt (100%) rename scripts/{ios => ios_travis}/ios-dist.cer.enc (100%) rename scripts/{ios => ios_travis}/ios-dist.p12.enc (100%) rename scripts/{ios => ios_travis}/ios-in-house.mobileprovision.enc (100%) rename scripts/{ios => ios_travis}/remove-key.sh (100%) delete mode 100755 scripts/linux/install.sh delete mode 100755 scripts/linux/run.sh create mode 100755 scripts/local_mason.sh create mode 100755 scripts/npm_install.sh delete mode 100755 scripts/osx/install.sh delete mode 100755 scripts/osx/run.sh rename scripts/{ios/package.sh => package_ios.sh} (100%) rename scripts/{ios/publish.sh => publish_ios.sh} (100%) create mode 100755 scripts/travis_before_install.sh create mode 100755 scripts/travis_script.sh delete mode 100755 scripts/xcpretty.sh diff --git a/.mason b/.mason index c43967404..03869fd11 160000 --- a/.mason +++ b/.mason @@ -1 +1 @@ -Subproject commit c43967404c84d020d63f6aba450d97770dfeaebb +Subproject commit 03869fd11e4bc619d3ba7e4f8a1f00d4612c90ea diff --git a/.travis.yml b/.travis.yml index 8da536ae6..690b2b1b6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,81 +1,95 @@ -dist: trusty +language: cpp matrix: exclude: - os: linux include: - os: linux - env: FLAVOR=linux CXX=g++ BUILDTYPE=Release + env: CONFIG=release MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v7 TESTMUNK=yes + compiler: clang - os: linux - env: FLAVOR=linux CXX=clang++ BUILDTYPE=Debug + env: CONFIG=debug MASON_PLATFORM=android MASON_ANDROID_ABI=arm-v7 TESTMUNK=no + compiler: clang - os: linux - env: FLAVOR=linux CXX=clang++ BUILDTYPE=Release + 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 - os: osx - env: FLAVOR=osx BUILDTYPE=Debug + env: BUILDTYPE=Debug JOBS=8 MASON_PLATFORM=osx + compiler: clang - os: osx - 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: BUILDTYPE=Release JOBS=8 MASON_PLATFORM=ios + compiler: clang env: global: - - 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=" + - 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 install: -- ./scripts/${FLAVOR}/install.sh +- 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 script: -- ./scripts/${FLAVOR}/run.sh +- ./scripts/travis_script.sh + +after_script: +- ./scripts/ios_travis/remove-key.sh notifications: slack: secure: HHQYr7sF8M1SzoWSqgKVYtwAgGdLLCyTMsQjFhEEQNYO92ZwURE5s03qWTGH5k8+4Yqn26yrXt3NztLC4JIOpcGervN2mSZyq4dZgFTcWEd61igw0qwSenlwvFfbE1ASK/KYCzfyn9MIfHN+ovwLoRxXZkPwinKDvl3DXjBaFNg= - git: submodules: false diff --git a/Makefile b/Makefile index eb0fc1fee..14f78ed0f 100644 --- a/Makefile +++ b/Makefile @@ -26,12 +26,8 @@ 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 ############################################################ @@ -74,9 +70,8 @@ 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) $(XCPRETTY) + xcodebuild -project ./build/osx/test/test.xcodeproj -configuration $(BUILDTYPE) -target test -jobs $(JOBS) xtest-%: xtest ./scripts/run_tests.sh "build/osx/Build/Products/$(BUILDTYPE)/test" --gtest_filter=$* @@ -104,9 +99,8 @@ 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) $(XCPRETTY) + xcodebuild -project ./build/osx/macosx/mapboxgl-app.xcodeproj -configuration $(BUILDTYPE) -target osxapp -jobs $(JOBS) run-xosx: xosx "build/osx/Build/Products/$(BUILDTYPE)/Mapbox GL.app/Contents/MacOS/Mapbox GL" @@ -126,16 +120,14 @@ 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) $(XCPRETTY) + 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) -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) $(XCPRETTY) + xcodebuild -sdk iphonesimulator ARCHS="x86_64 i386" -project ./build/ios/ios/app/mapboxgl-app.xcodeproj -configuration Debug -target iosapp -jobs $(JOBS) ipackage: clean Xcode/ios - ./scripts/ios/package.sh + ./scripts/package_ios.sh # Legacy name iproj: ios-proj @@ -163,9 +155,8 @@ 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 $(XCPRETTY) + xcodebuild -project ./build/osx/linux/mapboxgl-app.xcodeproj -configuration $(BUILDTYPE) -target linuxapp run-xlinux: xlinux "build/osx/Build/Products/$(BUILDTYPE)/mapbox-gl" diff --git a/README.md b/README.md index 4ca2205fa..c423c21b5 100644 --- a/README.md +++ b/README.md @@ -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/ios/package.sh`. The packaging script will produce the statically-linked `libMapboxGL.a`, `MapboxGL.bundle` for resources, and a `Headers` folder. +1. Run `./scripts/package_ios.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. diff --git a/android/scripts/build-debug.sh b/android/scripts/build-debug.sh new file mode 100755 index 000000000..450820a11 --- /dev/null +++ b/android/scripts/build-debug.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +export BUILDTYPE=Debug + +./android/scripts/common.sh $1 diff --git a/android/scripts/build-release.sh b/android/scripts/build-release.sh new file mode 100755 index 000000000..73c7fab81 --- /dev/null +++ b/android/scripts/build-release.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +export BUILDTYPE=Release + +./android/scripts/common.sh $1 diff --git a/android/scripts/common.sh b/android/scripts/common.sh new file mode 100755 index 000000000..0d610909b --- /dev/null +++ b/android/scripts/common.sh @@ -0,0 +1,40 @@ +#!/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 diff --git a/android/scripts/run-build.sh b/android/scripts/run-build.sh new file mode 100755 index 000000000..9fa15a02b --- /dev/null +++ b/android/scripts/run-build.sh @@ -0,0 +1,85 @@ +#!/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 diff --git a/config/defaults.mk b/config/defaults.mk index 1449bf8e1..2aa11ccbe 100644 --- a/config/defaults.mk +++ b/config/defaults.mk @@ -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/toolchain.sh) +ENV_android-arm-v8 = $(shell MASON_ANDROID_ABI=arm-v8 ./scripts/android_env.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/toolchain.sh) +ENV_android-arm-v7 = $(shell MASON_ANDROID_ABI=arm-v7 ./scripts/android_env.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/toolchain.sh) +ENV_android-arm-v5 = $(shell MASON_ANDROID_ABI=arm-v5 ./scripts/android_env.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/toolchain.sh) +ENV_android-x86 = $(shell MASON_ANDROID_ABI=x86 ./scripts/android_env.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/toolchain.sh) +# ENV_android-x86-64 = $(shell MASON_ANDROID_ABI=x86-64 ./scripts/android_env.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/toolchain.sh) +ENV_android-mips = $(shell MASON_ANDROID_ABI=mips ./scripts/android_env.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/toolchain.sh) +ENV_android-mips-64 = $(shell MASON_ANDROID_ABI=mips-64 ./scripts/android_env.sh) CONFIG_android-mips-64 = -Dhost=android -Iconfig/android-mips-64.gypi LIBS_android = -Dheadless_lib=none diff --git a/configure b/configure index a37000a1b..1d68f5e54 100755 --- a/configure +++ b/configure @@ -15,8 +15,7 @@ function finish { trap finish EXIT # Install mason -git submodule update --init .mason -export PATH="`pwd`/.mason:${PATH}" MASON_DIR="`pwd`/.mason" +. ./scripts/local_mason.sh case ${MASON_PLATFORM} in 'ios') diff --git a/docker/linux/test.sh b/docker/linux/test.sh new file mode 100755 index 000000000..9ef9bf51f --- /dev/null +++ b/docker/linux/test.sh @@ -0,0 +1,26 @@ +#!/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 diff --git a/scripts/android/install.sh b/scripts/android/install.sh deleted file mode 100755 index 656465cf2..000000000 --- a/scripts/android/install.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/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 diff --git a/scripts/android/run.sh b/scripts/android/run.sh deleted file mode 100755 index 7a909ffe3..000000000 --- a/scripts/android/run.sh +++ /dev/null @@ -1,61 +0,0 @@ -#!/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 diff --git a/scripts/android/toolchain.sh b/scripts/android/toolchain.sh deleted file mode 100755 index 67cd0aa47..000000000 --- a/scripts/android/toolchain.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/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`\" diff --git a/scripts/android_env.sh b/scripts/android_env.sh new file mode 100755 index 000000000..93b1452a5 --- /dev/null +++ b/scripts/android_env.sh @@ -0,0 +1,25 @@ +#!/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`\" diff --git a/scripts/flags.sh b/scripts/flags.sh new file mode 100755 index 000000000..10cc88e5c --- /dev/null +++ b/scripts/flags.sh @@ -0,0 +1,32 @@ +#!/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 diff --git a/scripts/install_node.sh b/scripts/install_node.sh new file mode 100755 index 000000000..ecb5b8835 --- /dev/null +++ b/scripts/install_node.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +mason install node 0.10.35 +export PATH="`mason prefix node 0.10.35`/bin":"$PATH" diff --git a/scripts/ios/install.sh b/scripts/ios/install.sh deleted file mode 100755 index 1994d371d..000000000 --- a/scripts/ios/install.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/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 diff --git a/scripts/ios/run.sh b/scripts/ios/run.sh deleted file mode 100755 index 6eed14a59..000000000 --- a/scripts/ios/run.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/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 diff --git a/scripts/ios/add-key.sh b/scripts/ios_travis/add-key.sh similarity index 61% rename from scripts/ios/add-key.sh rename to scripts/ios_travis/add-key.sh index fe963d38e..b58144530 100755 --- a/scripts/ios/add-key.sh +++ b/scripts/ios_travis/add-key.sh @@ -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/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 +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 # Put the provisioning profile in place mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles -cp "./scripts/ios/$IOS_PROFILE_NAME.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/ +cp "./scripts/ios_travis/$IOS_PROFILE_NAME.mobileprovision" ~/Library/MobileDevice/Provisioning\ Profiles/ diff --git a/scripts/ios/apple.crt b/scripts/ios_travis/apple.crt similarity index 100% rename from scripts/ios/apple.crt rename to scripts/ios_travis/apple.crt diff --git a/scripts/ios/ios-dist.cer.enc b/scripts/ios_travis/ios-dist.cer.enc similarity index 100% rename from scripts/ios/ios-dist.cer.enc rename to scripts/ios_travis/ios-dist.cer.enc diff --git a/scripts/ios/ios-dist.p12.enc b/scripts/ios_travis/ios-dist.p12.enc similarity index 100% rename from scripts/ios/ios-dist.p12.enc rename to scripts/ios_travis/ios-dist.p12.enc diff --git a/scripts/ios/ios-in-house.mobileprovision.enc b/scripts/ios_travis/ios-in-house.mobileprovision.enc similarity index 100% rename from scripts/ios/ios-in-house.mobileprovision.enc rename to scripts/ios_travis/ios-in-house.mobileprovision.enc diff --git a/scripts/ios/remove-key.sh b/scripts/ios_travis/remove-key.sh similarity index 100% rename from scripts/ios/remove-key.sh rename to scripts/ios_travis/remove-key.sh diff --git a/scripts/linux/install.sh b/scripts/linux/install.sh deleted file mode 100755 index a47155d69..000000000 --- a/scripts/linux/install.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/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 diff --git a/scripts/linux/run.sh b/scripts/linux/run.sh deleted file mode 100755 index c4731b97e..000000000 --- a/scripts/linux/run.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/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 diff --git a/scripts/local_mason.sh b/scripts/local_mason.sh new file mode 100755 index 000000000..2d8687a28 --- /dev/null +++ b/scripts/local_mason.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +git submodule update --init .mason +PATH=`pwd`/.mason:$PATH +export MASON_DIR=`pwd`/.mason diff --git a/scripts/npm_install.sh b/scripts/npm_install.sh new file mode 100755 index 000000000..7437af961 --- /dev/null +++ b/scripts/npm_install.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +cd bin +$1 install --clang=1 +cd ../ diff --git a/scripts/osx/install.sh b/scripts/osx/install.sh deleted file mode 100755 index 1994d371d..000000000 --- a/scripts/osx/install.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/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 diff --git a/scripts/osx/run.sh b/scripts/osx/run.sh deleted file mode 100755 index b84ed04c2..000000000 --- a/scripts/osx/run.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/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} diff --git a/scripts/ios/package.sh b/scripts/package_ios.sh similarity index 100% rename from scripts/ios/package.sh rename to scripts/package_ios.sh diff --git a/scripts/ios/publish.sh b/scripts/publish_ios.sh similarity index 100% rename from scripts/ios/publish.sh rename to scripts/publish_ios.sh diff --git a/scripts/travis_before_install.sh b/scripts/travis_before_install.sh new file mode 100755 index 000000000..f837e7416 --- /dev/null +++ b/scripts/travis_before_install.sh @@ -0,0 +1,53 @@ +#!/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 diff --git a/scripts/travis_helper.sh b/scripts/travis_helper.sh index 13e1f4497..c42ce215e 100755 --- a/scripts/travis_helper.sh +++ b/scripts/travis_helper.sh @@ -1,19 +1,13 @@ #!/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 - mapbox_fold start $name + travis_fold start $name mapbox_timer_id=$(printf %08x $(( RANDOM * RANDOM ))) - eval "mapbox_start_time_$mapbox_timer_id=$(mapbox_nanoseconds)" + eval "mapbox_start_time_$mapbox_timer_id=$(travis_nanoseconds)" echo -en "travis_time:start:$mapbox_timer_id\n" } @@ -22,11 +16,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=$(mapbox_nanoseconds) + local end_time=$(travis_nanoseconds) local duration=$(($end_time-$start_time)) echo -en "travis_time:end:$timer_id:start=$start_time,finish=$end_time,duration=$duration\n" - mapbox_fold end $name + travis_fold end $name } function mapbox_time { @@ -38,13 +32,13 @@ function mapbox_time { mapbox_time_finish $name $timer_id } -function mapbox_fold { +if [[ "${TRAVIS_COMMIT:-false}" == false ]]; then +function travis_fold { local action=$1 local name=$2 echo -en "travis_fold:${action}:${name}\r${ANSI_CLEAR}" } - -function mapbox_nanoseconds { +function travis_nanoseconds { local cmd="date" local format="+%s%N" local os=$(uname) @@ -57,11 +51,11 @@ function mapbox_nanoseconds { $cmd -u $format } +fi -export JOBS export ANSI_CLEAR -export -f mapbox_fold -export -f mapbox_nanoseconds +export -f travis_fold +export -f travis_nanoseconds export -f mapbox_time export -f mapbox_time_start export -f mapbox_time_finish diff --git a/scripts/travis_script.sh b/scripts/travis_script.sh new file mode 100755 index 000000000..0351f9414 --- /dev/null +++ b/scripts/travis_script.sh @@ -0,0 +1,62 @@ +#!/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 diff --git a/scripts/xcpretty.sh b/scripts/xcpretty.sh deleted file mode 100755 index c39f58822..000000000 --- a/scripts/xcpretty.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -FN=$(which xcpretty) ; [ ! -z ${FN} ] && echo "| ${FN}" diff --git a/test/test.gyp b/test/test.gyp index 41918ff42..2e89db58b 100644 --- a/test/test.gyp +++ b/test/test.gyp @@ -72,18 +72,15 @@ ], 'libraries': [ '<@(uv_static_libs)', - '<@(sqlite3_static_libs)', ], 'variables': { 'cflags_cc': [ '<@(uv_cflags)', '<@(opengl_cflags)', '<@(boost_cflags)', - '<@(sqlite3_cflags)', ], 'ldflags': [ '<@(uv_ldflags)', - '<@(sqlite3_ldflags)', ], }, 'conditions': [ From c512cb12c869f9644fa0ecec861881a2a5defb03 Mon Sep 17 00:00:00 2001 From: Peter Liu Date: Wed, 22 Apr 2015 15:23:05 -0700 Subject: [PATCH 4/8] update Emerald and Streets styles --- styles | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/styles b/styles index d4be63132..0ba580207 160000 --- a/styles +++ b/styles @@ -1 +1 @@ -Subproject commit d4be63132fe8f8a88411f6739dc50cee7f67880e +Subproject commit 0ba580207b4e915530ee4efc20cb1ac0d5575f49 From b43ba4089cf5aefe86fde1dae2fd5c06bd7bf784 Mon Sep 17 00:00:00 2001 From: "Justin R. Miller" Date: Wed, 22 Apr 2015 00:20:03 -0700 Subject: [PATCH 5/8] fixes #1308: normalize tile memory cache keys & allow dupe inserts --- src/mbgl/map/source.cpp | 6 +++--- src/mbgl/map/tile_cache.cpp | 9 +++++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/mbgl/map/source.cpp b/src/mbgl/map/source.cpp index 3245bab2e..9e318964b 100644 --- a/src/mbgl/map/source.cpp +++ b/src/mbgl/map/source.cpp @@ -245,7 +245,7 @@ TileData::State Source::addTile(Map &map, Worker &worker, } if (!new_tile.data) { - new_tile.data = cache.get(id.to_uint64()); + new_tile.data = cache.get(normalized_id.to_uint64()); } if (!new_tile.data) { @@ -418,7 +418,7 @@ void Source::update(Map &map, if (!obsolete) { retain_data.insert(tile.data->id); } else if (type != SourceType::Raster && tile.data->ready()) { - tileCache.add(tile.id.to_uint64(), tile.data); + tileCache.add(tile.id.normalized().to_uint64(), tile.data); } return obsolete; }); @@ -432,7 +432,7 @@ void Source::update(Map &map, bool obsolete = retain_data.find(tile->id) == retain_data.end(); if (obsolete) { - if (!tileCache.has(tile->id.to_uint64())) { + if (!tileCache.has(tile->id.normalized().to_uint64())) { tile->cancel(); } return true; diff --git a/src/mbgl/map/tile_cache.cpp b/src/mbgl/map/tile_cache.cpp index b64c8e2a6..25aed6d15 100644 --- a/src/mbgl/map/tile_cache.cpp +++ b/src/mbgl/map/tile_cache.cpp @@ -20,11 +20,16 @@ void TileCache::setSize(size_t size_) { void TileCache::add(uint64_t key, std::shared_ptr data) { - assert(tiles.find(key) == tiles.end()); + // insert new or query existing data + if (tiles.emplace(key, data).second) { + // remove existing data key + orderedKeys.remove(key); + } - tiles.emplace(key, data); + // (re-)insert data key as newest orderedKeys.push_back(key); + // purge oldest key/data if necessary if (orderedKeys.size() > size) { get(orderedKeys.front()); } From 44e2bf419f1495f177381a2bc294629bda59f411 Mon Sep 17 00:00:00 2001 From: Jason Wray Date: Tue, 21 Apr 2015 22:19:28 -0700 Subject: [PATCH 6/8] =?UTF-8?q?Correct=20indentation=20=E2=80=94=20#1315?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/build-version.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build-version.py b/scripts/build-version.py index 3fe789185..0110e6a2e 100755 --- a/scripts/build-version.py +++ b/scripts/build-version.py @@ -13,9 +13,9 @@ else: if sys.argv[2] == sys.argv[3]: tag = [0, 0, 0] else: - ver = re.sub("[^0-9.]", "", sys.argv[2]) + ver = re.sub("[^0-9.]", "", sys.argv[2]) tag = map(int, ver.split('.')) - rev = sys.argv[3][0:8] + rev = sys.argv[3][0:8] def mkdir_p(path): From 38315fd667c546f9ed181fc2762c36d1f403245f Mon Sep 17 00:00:00 2001 From: "Justin R. Miller" Date: Thu, 23 Apr 2015 08:59:26 -0700 Subject: [PATCH 7/8] bump podspec to 0.2.15 --- ios/MapboxGL.podspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/MapboxGL.podspec b/ios/MapboxGL.podspec index 29e406362..57de3f6f3 100644 --- a/ios/MapboxGL.podspec +++ b/ios/MapboxGL.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |m| m.name = 'MapboxGL' - m.version = '0.2.14' + m.version = '0.2.15' m.summary = 'Open source vector map solution for iOS with full styling capabilities.' m.description = 'Open source OpenGL-based vector map solution for iOS with full styling capabilities and Cocoa bindings.' From c7769d9a97d05c843ba3b5a1ca79404a125e363a Mon Sep 17 00:00:00 2001 From: "Justin R. Miller" Date: Thu, 23 Apr 2015 09:00:24 -0700 Subject: [PATCH 8/8] [publish ios-v0.2.15]