Bläddra i källkod

For CI - use docker. Close #2348

Yao Wei Tjong 姚伟忠 7 år sedan
förälder
incheckning
aaa9911e3e
5 ändrade filer med 220 tillägg och 372 borttagningar
  1. 2 11
      .appveyor.yml
  2. 92 235
      .travis.yml
  3. 77 114
      Rakefile
  4. 1 0
      script/.build-options
  5. 48 12
      script/.env-file

+ 2 - 11
.appveyor.yml

@@ -27,10 +27,6 @@ platform:
   - x64
 clone_depth: 50
 cache:
-  # AppVeyor seems to restore caches based on the job ordering alone, it does not use the env-vars as the key like Travis
-  # Therefore, we are forced to list out all the cache items for our master CI and MinGW CI builds here
-  # Build
-  # mingw-Build
   # Cache the MinGW compiler toolchains so that our CI builds do not chalk up their download stats
   - C:\tools\mingw32
   - C:\tools\mingw64
@@ -48,11 +44,10 @@ environment:
 # VS build actually does not need MinGW compiler toolchains so prevent its restoration and update check
   APPVEYOR_CACHE_SKIP_RESTORE: true
   APPVEYOR_CACHE_SKIP_SAVE: true
-# Using neither-in-nor-out-of-source (Urho3D-legacy) build tree when on AppVeyor; using out-of-source (and in-the-source) build tree when on Travis-CI for test coverage
-  build_tree: Build
   config: Release
 # We cannot afford to have a large matrix on AppVeyor at the moment
   URHO3D_D3D11: 1
+  URHO3D_LUAJIT: 1
   matrix:
     - URHO3D_LIB_TYPE: STATIC
     - URHO3D_LIB_TYPE: SHARED
@@ -79,14 +74,10 @@ before_build:
     )
   # Temporarily disable AngelScript as VS 2017 15.8 cannot handle it
   - set "URHO3D_ANGELSCRIPT=0"
-  # rake ci_setup_cache
 build_script:
-  - rake ci && if "%PACKAGE_UPLOAD%" == "1" (rake ci_package_upload && move %build_tree%\*.zip . && rd /S /Q %build_tree%\_CPack_Packages)
+  - rake ci && if "%PACKAGE_UPLOAD%" == "1" rake ci_package_upload
   - rake ci_timer
-#after_build: rake ci_teardown_cache
 test: off
-artifacts:
-  - path: .\*.zip
 deploy: off
 
 # vi: set ts=2 sw=2 expandtab:

+ 92 - 235
.travis.yml

@@ -22,27 +22,41 @@
 
 ---
 
-language: cpp
-compiler: gcc
-cache:
-  timeout: 500
-  ccache: true
-  directories:
-    - $HOME/cmake-3.9.2-Linux-x86_64/bin
-    - $HOME/cmake-3.9.2-Linux-x86_64/share
 dist: trusty
-sudo: false
-addons: {apt: {packages: &default_packages [doxygen, graphviz]}}
+sudo: required
+addons: {apt: {packages: docker-ce}}
+cache: {directories: $HOME/urho3d_home_dir/.ccache}
 env:
   global:
     - secure: SLJCjkjDsTMbCIV9Wecz5JATnhk0fuzlnLMeZdvvFDv+8NL8cXyutkU0VfyRSLf3HSD1Js79a6fRMROyVGWj/w/BRrjqGnZzsB6+ZeJNnadiVIF5Gh+w90We5ccvSp2G4DyYgwkNnkKlJK7zNEWGu/K+bHL1EOCA+EIVrFMyA44=
     - secure: ecj/PwpbHkH9AYFsc2TMeRuNm5E3xMM8A0x4AcGhzpwDuZWdFx3R1T4G9u45Z5aUyTJWGqOeX1JPaEVVFZuYnNBKRy0kmiUrM9EE0j7WsT57K48tP1ysn2ynyvHgbYkKOfYR0t8XAMWTBbulT9DVVk3DS69//2WgiXGDVUEJTyI=
     - numjobs=4
-    - USE_CCACHE=1
-    - CCACHE_SLOPPINESS=pch_defines,time_macros
-    - CCACHE_COMPRESS=1
-    - CCACHE_MAXSIZE=100M
     - URHO3D_DEPLOYMENT_TARGET=generic
+  matrix:
+    # Linux native 64-bit
+    - LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_UPDATE_SOURCE_TREE=1 SF_DEFAULT=linux:Linux-64bit-STATIC.tar.gz   # GCC
+    - LINUX=1 URHO3D_LIB_TYPE=SHARED
+    - LINUX=1 URHO3D_LIB_TYPE=STATIC CC=clang CXX=clang++                                                     # Clang
+    - LINUX=1 URHO3D_LIB_TYPE=SHARED CC=clang CXX=clang++
+    # Linux native 32-bit
+    - LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_64BIT=0
+    - LINUX=1 URHO3D_LIB_TYPE=SHARED URHO3D_64BIT=0
+    - LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_64BIT=0 CC=clang CXX=clang++
+    - LINUX=1 URHO3D_LIB_TYPE=SHARED URHO3D_64BIT=0 CC=clang CXX=clang++
+    # MinGW cross-compiling 64-bit
+    - MINGW=1 URHO3D_LIB_TYPE=STATIC                    # OpenGL
+    - MINGW=1 URHO3D_LIB_TYPE=SHARED
+    - MINGW=1 URHO3D_LIB_TYPE=STATIC URHO3D_OPENGL=0    # D3D9
+    - MINGW=1 URHO3D_LIB_TYPE=SHARED URHO3D_OPENGL=0
+    - MINGW=1 URHO3D_LIB_TYPE=STATIC URHO3D_D3D11=1     # D3D11
+    - MINGW=1 URHO3D_LIB_TYPE=SHARED URHO3D_D3D11=1
+    # MinGW cross-compiling 32-bit
+    - MINGW=1 URHO3D_LIB_TYPE=STATIC URHO3D_64BIT=0
+    - MINGW=1 URHO3D_LIB_TYPE=SHARED URHO3D_64BIT=0
+    - MINGW=1 URHO3D_LIB_TYPE=STATIC URHO3D_OPENGL=0 URHO3D_64BIT=0
+    - MINGW=1 URHO3D_LIB_TYPE=SHARED URHO3D_OPENGL=0 URHO3D_64BIT=0
+    - MINGW=1 URHO3D_LIB_TYPE=STATIC URHO3D_D3D11=1 URHO3D_64BIT=0
+    - MINGW=1 URHO3D_LIB_TYPE=SHARED URHO3D_D3D11=1 URHO3D_64BIT=0
 stage: release build configuration
 before_script:
   - rake ci_timer
@@ -50,28 +64,12 @@ before_script:
   - if [[ "$TRAVIS_PULL_REQUEST" == "false" ]]; then export COMMIT_MESSAGE=$(git log --format=%B -n 1 $TRAVIS_COMMIT); fi
   - export TAG=$(git describe --exact-match $TRAVIS_COMMIT 2>/dev/null); if [[ $TAG =~ [[:digit:]]+\.[[:digit:]]+ ]]; then export RELEASE_TAG=$TAG; fi
   # Travis-CI has a special case handling for release tag where it checks out directly from the tag branch instead of the default 'master' branch
-  - if [[ $RELEASE_TAG ]] || ([[ "$TRAVIS_BRANCH" == "master" ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]]); then if [[ ${TRAVIS_JOB_NUMBER##*.} == 1 ]]; then export SITE_UPDATE=1; fi; if [[ "$CC" == "gcc" ]] && ([[ $RELEASE_TAG ]] || echo $COMMIT_MESSAGE |grep -cq '\[ci package\]'); then export PACKAGE_UPLOAD=1; fi; fi
-  - if [[ $LINUX ]]; then
-      if [[ "$URHO3D_64BIT" == "0" ]]; then
-        export CMAKE_PREFIX_PATH=/usr/lib/i386-linux-gnu;
-      elif [[ ! $PACKAGE_UPLOAD ]]; then
-        export DISPLAY=:99.0; bash -e /etc/init.d/xvfb start;
-      fi;
-    elif [[ $MINGW ]]; then
-      if [[ "$URHO3D_64BIT" == "0" ]]; then export ARCH=i686; else export ARCH=x86_64; fi;
-      export MINGW_PREFIX=/usr/bin/${ARCH}-w64-mingw32 DIRECTX_LIB_SEARCH_PATHS=/usr/${ARCH}-w64-mingw32/lib;
-    fi
+  - if [[ $RELEASE_TAG ]] || ([[ "$TRAVIS_BRANCH" == "master" ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]]); then if [[ ${TRAVIS_JOB_NUMBER##*.} == 1 ]]; then export SITE_UPDATE=1; fi; if [[ ! $CC ]] && ([[ $RELEASE_TAG ]] || echo $COMMIT_MESSAGE |grep -cq '\[ci package\]'); then export PACKAGE_UPLOAD=1; fi; fi
   - if [[ $URHO3D_BINDINGS ]]; then git clone --depth 1 https://github.com/urho3d/llvm-clang.git && export LLVM_CLANG_ROOT=$(pwd)/llvm-clang; fi
-  # For some reason clang compiler toolchain installation in Ubuntu does not have symlink in the ccache symlinks directory, so workaround it
-  - if [[ "$CC"  == "clang" ]]; then ln -s $(which ccache) $HOME/clang && ln -s $(which ccache) $HOME/clang++ && export PATH=$HOME:$PATH; fi
-  # Upgrade CMake using tarball from its vendor and cache the installation
-  - if [[ ! -f $HOME/cmake-3.9.2-Linux-x86_64/bin/cmake ]]; then wget --no-check-certificate https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz -O $HOME/cmake.tar.gz && tar xf $HOME/cmake.tar.gz -C $HOME && rm $HOME/cmake.tar.gz; fi
-  - export PATH=$HOME/cmake-3.9.2-Linux-x86_64/bin:$PATH
+  - if [[ $LINUX ]]; then export PLATFORM=native; else export PLATFORM=mingw; fi
   - rake ci_setup_cache
-script: rake ci && if [[ $SITE_UPDATE ]]; then rake ci_site_update; fi && if [[ $PACKAGE_UPLOAD ]]; then rake ci_package_upload; fi && rake ci_timer
-after_script:
-  - rake ci_teardown_cache
-  - if [[ ${TRAVIS_JOB_NUMBER##*.} == 1 ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]]; then rake ci_create_mirrors; fi
+script: script/dockerized.sh $PLATFORM rake ci && if [[ $SITE_UPDATE ]]; then rake ci_site_update; fi && if [[ $PACKAGE_UPLOAD ]]; then rake ci_package_upload; fi && rake ci_timer
+after_script: if [[ ${TRAVIS_JOB_NUMBER##*.} == 1 ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]]; then rake ci_create_mirrors; fi
 notifications: {email: {on_success: never, on_failure: change}}
 
 # Below are our custom data to preset build stages for other documents in this YAML stream, we do this because YAML anchor cannot be referenced across document boundary
@@ -84,69 +82,25 @@ data:
     housekeep:
       <<: *base
       cache:
+      before_cache:
       env:
       before_script: export TAG=$(git describe --exact-match $TRAVIS_COMMIT~ 2>/dev/null); if [[ $TAG =~ [[:digit:]]+\.[[:digit:]]+ ]]; then export RELEASE_TAG=$TAG; fi
       script: rake ci_delete_mirror
 
 matrix:
   fast_finish: true
-  exclude:
-    - compiler: gcc
   include:
-    - &Linux-64bit
-      addons: {apt: {packages: &linux_packages [*default_packages, libpulse-dev, rpm]}}
-      env: LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_UPDATE_SOURCE_TREE=1 SF_DEFAULT=linux:Linux-64bit-STATIC.tar.gz
-    - <<: *Linux-64bit
-      env: LINUX=1 URHO3D_LIB_TYPE=SHARED
-    - &Linux-64bit-clang
-      compiler: clang
-      addons: &pulseaudio {apt: {packages: libpulse-dev}}
-      env: LINUX=1 URHO3D_LIB_TYPE=STATIC
-    - <<: *Linux-64bit-clang
-      env: LINUX=1 URHO3D_LIB_TYPE=SHARED
-    - &Linux-32bit
-      addons: {apt: {packages: [*linux_packages, g++-multilib, "libxrandr-dev:i386", "libglapi-mesa:i386", "libgl1-mesa-glx:i386", "libgl1-mesa-dev:i386", "libxext-dev:i386", "libxrender-dev:i386", lib32readline6-dev]}}
-      env: LINUX=1 URHO3D_LIB_TYPE=STATIC URHO3D_64BIT=0
-    - &Linux-32bit-shared
-      <<: *Linux-32bit
-      env: LINUX=1 URHO3D_LIB_TYPE=SHARED URHO3D_64BIT=0
-    - <<: *Linux-32bit
-      compiler: clang
-    - <<: *Linux-32bit-shared
-      compiler: clang
-    - &MinGW-64bit
-      compiler: mingw-w64-x86_64
-      addons: {apt: {packages: [*default_packages, gcc-mingw-w64-x86-64, g++-mingw-w64-x86-64, binutils-mingw-w64-x86-64]}}
-      env: MINGW=1 URHO3D_LIB_TYPE=STATIC
-    - <<: *MinGW-64bit
-      env: MINGW=1 URHO3D_LIB_TYPE=SHARED
-    - <<: *MinGW-64bit
-      env: MINGW=1 URHO3D_LIB_TYPE=STATIC URHO3D_OPENGL=0
-    - <<: *MinGW-64bit
-      env: MINGW=1 URHO3D_LIB_TYPE=SHARED URHO3D_OPENGL=0
-    - &MinGW-32bit
-      compiler: mingw-w64-i686
-      addons: {apt: {packages: [*default_packages, gcc-mingw-w64-i686, g++-mingw-w64-i686, binutils-mingw-w64-i686]}}
-      env: MINGW=1 URHO3D_LIB_TYPE=STATIC URHO3D_64BIT=0
-    - <<: *MinGW-32bit
-      env: MINGW=1 URHO3D_LIB_TYPE=SHARED URHO3D_64BIT=0
-    - <<: *MinGW-32bit
-      env: MINGW=1 URHO3D_LIB_TYPE=STATIC URHO3D_64BIT=0 URHO3D_OPENGL=0
-    - <<: *MinGW-32bit
-      env: MINGW=1 URHO3D_LIB_TYPE=SHARED URHO3D_64BIT=0 URHO3D_OPENGL=0
     - &debug-build-stage
       stage: debug build configuration
-      addons: *pulseaudio
       env: LINUX=1 URHO3D_LIB_TYPE=STATIC CMAKE_BUILD_TYPE=Debug
-      script: &ci rake ci && rake ci_timer
     - <<: *debug-build-stage
       env: LINUX=1 URHO3D_LIB_TYPE=SHARED CMAKE_BUILD_TYPE=Debug
-# TODO - if/when Travis-CI later supports conditional build stages then move the 'scan' and 'annotate' stages here
+    - <<: *debug-build-stage
+      env: MINGW=1 URHO3D_LIB_TYPE=STATIC CMAKE_BUILD_TYPE=Debug
+    - <<: *debug-build-stage
+      env: MINGW=1 URHO3D_LIB_TYPE=SHARED CMAKE_BUILD_TYPE=Debug
     - stage: lint
-      <<: *base
-      env: URHO3D_LINT=1
-      before_script: git clone --depth 1 https://github.com/urho3d/llvm-clang.git && export PATH=$(pwd)/llvm-clang/bin:$PATH
-      script: *ci
+      env: LINUX=1 URHO3D_LINT=1
 
 ---
 
@@ -157,10 +111,6 @@ platform:
   - x64
 clone_depth: 50
 cache:
-  # AppVeyor seems to restore caches based on the job ordering alone, it does not use the env-vars as the key like Travis
-  # Therefore, we are forced to list out all the cache items for our master CI and MinGW CI builds here
-  # Build
-  # mingw-Build
   # Cache the MinGW compiler toolchains so that our CI builds do not chalk up their download stats
   - C:\tools\mingw32
   - C:\tools\mingw64
@@ -175,11 +125,9 @@ environment:
     secure: 6Vuo+sNP2YT/iI4ilNDdyJbKpu1AYxSpkdwjJxeZ3BVXM0XQQnG7VS/6IspV9kgWXmYpeVnUTqpoxAg7GDf3MTN9SeXgwHuSsblIAHDaOJk=
   SF_API:
     secure: gEDrho4yNr5++SbgkWsxQiFA62GJfTLrZU9Dzjz9HCUcS7XwjTGg3XsFm84w6B1s
-# Using neither-in-nor-out-of-source (Urho3D-legacy) build tree when on AppVeyor; using out-of-source (and in-the-source) build tree when on Travis-CI for test coverage
-  build_tree: mingw-Build
-  config: Release
 # We cannot afford to have a large matrix on AppVeyor at the moment
   URHO3D_D3D11: 1
+  URHO3D_LUAJIT: 1
   MINGW: 1
   # MinGW-w64 on Windows is NOT multilib capable but we are installing the ones that support C++14 standard
   x86_64-posix-seh: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/6.3.0/threads-posix/seh/x86_64-6.3.0-release-posix-seh-rt_v5-rev1.7z
@@ -205,16 +153,12 @@ before_build:
   - if "%PLATFORM%" == "x64" (set "URHO3D_64BIT=1" && set "MINGW_URL=%x86_64-posix-seh%" && set "ARCH=64") else (set "MINGW_URL=%i686-posix-dwarf%" && set "ARCH=32")
   - if not exist "C:\tools\mingw%ARCH%" curl -fsSL -o "mingw.7z" -O "%MINGW_URL%" && 7z x -y -o"C:\tools" "mingw.7z" >nul && echo "Installed MinGW compiler toolchain to C:\tools"
   - set "PATH=C:\tools\mingw%ARCH%\bin;%PATH%"
-  # rake ci_setup_cache
 build_script:
-  - rake ci && if "%PACKAGE_UPLOAD%" == "1" (rake ci_package_upload && move %build_tree%\*.zip . && rd /S /Q %build_tree%\_CPack_Packages)
+  - rake ci && if "%PACKAGE_UPLOAD%" == "1" rake ci_package_upload
   - rake ci_timer
 after_build:
-  # rake ci_teardown_cache
   - if "%PLATFORM%:%URHO3D_LIB_TYPE%" == "x64:SHARED" rake ci_delete_mirror
 test: off
-artifacts:
-  - path: .\*.zip
 deploy: off
 
 ---
@@ -222,12 +166,7 @@ deploy: off
 branch: {name: Coverity-Scan, active: no}
 language: cpp
 compiler: gcc
-cache:
-  timeout: 500
-  ccache: true
-  directories:
-    - $HOME/cmake-3.9.2-Linux-x86_64/bin
-    - $HOME/cmake-3.9.2-Linux-x86_64/share
+cache: ccache
 dist: trusty
 sudo: false
 addons:
@@ -249,30 +188,19 @@ env:
     - USE_CCACHE=1
     - CCACHE_SLOPPINESS=pch_defines,time_macros
     - CCACHE_COMPRESS=1
-    - CCACHE_MAXSIZE=100M
 stage: scan
 before_script:
   - export TRAVIS_COMMIT=$TRAVIS_COMMIT~
   - export COMMIT_MESSAGE=$(git log --format=%B -n 1 $TRAVIS_COMMIT)
-  - if [[ ! -f $HOME/cmake-3.9.2-Linux-x86_64/bin/cmake ]]; then wget --no-check-certificate https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz -O $HOME/cmake.tar.gz && tar xf $HOME/cmake.tar.gz -C $HOME && rm $HOME/cmake.tar.gz; fi
-  - export PATH=$HOME/cmake-3.9.2-Linux-x86_64/bin:$PATH
-  - rake ci_setup_cache
 script: true
-after_script:
-  - rake ci_teardown_cache
-  - rake ci_delete_mirror
+after_script: rake ci_delete_mirror
 
 ---
 
 branch: {name: Annotate, active: no}
 language: cpp
 compiler: gcc
-cache:
-  timeout: 500
-  ccache: true
-  directories:
-    - $HOME/cmake-3.9.2-Linux-x86_64/bin
-    - $HOME/cmake-3.9.2-Linux-x86_64/share
+cache: ccache
 addons: {apt: {packages: libpulse-dev}}
 env:
   global:
@@ -281,55 +209,42 @@ env:
     - USE_CCACHE=1
     - CCACHE_SLOPPINESS=pch_defines,time_macros
     - CCACHE_COMPRESS=1
-    - CCACHE_MAXSIZE=100M
 stage: annotate
 before_script:
   - export TRAVIS_COMMIT=$TRAVIS_COMMIT~
   - export COMMIT_MESSAGE=$(git log --format=%B -n 1 $TRAVIS_COMMIT)
   - git clone --depth 1 https://github.com/urho3d/llvm-clang.git && export LLVM_CLANG_ROOT=$(pwd)/llvm-clang
-  - if [[ ! -f $HOME/cmake-3.9.2-Linux-x86_64/bin/cmake ]]; then wget --no-check-certificate https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz -O $HOME/cmake.tar.gz && tar xf $HOME/cmake.tar.gz -C $HOME && rm $HOME/cmake.tar.gz; fi
-  - export PATH=$HOME/cmake-3.9.2-Linux-x86_64/bin:$PATH
-  - rake ci_setup_cache
 script: rake ci_annotate
-after_script:
-  - rake ci_teardown_cache
-  - rake ci_delete_mirror
+after_script: rake ci_delete_mirror
 
 ---
 
 branch: {name: Android-CI, active: yes}
-language: android
-before_cache:
-  - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
-  - rm -rf $HOME/.gradle/caches/*/plugin-resolution
+dist: trusty
+sudo: required
+addons: {apt: {packages: docker-ce}}
 cache:
-  timeout: 500
   directories:
-    - $HOME/.ccache
-    - $HOME/.gradle/caches
-    - $HOME/.gradle/wrapper
-    - $HOME/.android/build-cache
-dist: trusty
-sudo: false
-addons: {apt: {packages: [doxygen, graphviz, g++-multilib]}}
+    - $HOME/urho3d_home_dir/.android/build-cache
+    - $HOME/urho3d_home_dir/.ccache
+    - $HOME/urho3d_home_dir/.gradle/caches
+    - $HOME/urho3d_home_dir/.gradle/wrapper
+# before_cache: [] # intentionally leave it blank because for our case cleaning '.gradle' dir is pointless when the '.ccache' dir is guaranteed to be dirtied by our build job
 env:
   global:
     - secure: SLJCjkjDsTMbCIV9Wecz5JATnhk0fuzlnLMeZdvvFDv+8NL8cXyutkU0VfyRSLf3HSD1Js79a6fRMROyVGWj/w/BRrjqGnZzsB6+ZeJNnadiVIF5Gh+w90We5ccvSp2G4DyYgwkNnkKlJK7zNEWGu/K+bHL1EOCA+EIVrFMyA44=
     - secure: ecj/PwpbHkH9AYFsc2TMeRuNm5E3xMM8A0x4AcGhzpwDuZWdFx3R1T4G9u45Z5aUyTJWGqOeX1JPaEVVFZuYnNBKRy0kmiUrM9EE0j7WsT57K48tP1ysn2ynyvHgbYkKOfYR0t8XAMWTBbulT9DVVk3DS69//2WgiXGDVUEJTyI=
     - ANDROID=1
-    - ANDROID_TMP=~/tmp
-    - CCACHE_SLOPPINESS=pch_defines,time_macros
-    - CCACHE_COMPRESS=1
-    - CCACHE_MAXSIZE=100M
+    - ORG_GRADLE_PROJECT_URHO3D_LUAJIT=1
   matrix:
-    - ORG_GRADLE_PROJECT_ANDROID_ABI=x86 ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=STATIC SYS_IMG=android-28 PLATFORM=android-17
-    - ORG_GRADLE_PROJECT_ANDROID_ABI=x86 ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=SHARED SYS_IMG=android-28 PLATFORM=android-17
-    - ORG_GRADLE_PROJECT_ANDROID_ABI=x86_64 ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=STATIC SYS_IMG=android-28 PLATFORM=android-21
-    - ORG_GRADLE_PROJECT_ANDROID_ABI=x86_64 ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=SHARED SYS_IMG=android-28 PLATFORM=android-21
-    - ORG_GRADLE_PROJECT_ANDROID_ABI=armeabi-v7a ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=STATIC SYS_IMG=android-25 PLATFORM=android-17
-    - ORG_GRADLE_PROJECT_ANDROID_ABI=armeabi-v7a ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=SHARED SYS_IMG=android-25 PLATFORM=android-17
-    - ORG_GRADLE_PROJECT_ANDROID_ABI=arm64-v8a ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=STATIC SYS_IMG=android-25 PLATFORM=android-21
-    - ORG_GRADLE_PROJECT_ANDROID_ABI=arm64-v8a ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=SHARED SYS_IMG=android-25 PLATFORM=android-21
+    - ORG_GRADLE_PROJECT_ANDROID_ABI=x86 ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=STATIC
+    - ORG_GRADLE_PROJECT_ANDROID_ABI=x86 ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=SHARED
+    - ORG_GRADLE_PROJECT_ANDROID_ABI=x86_64 ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=STATIC
+    - ORG_GRADLE_PROJECT_ANDROID_ABI=x86_64 ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=SHARED
+    - ORG_GRADLE_PROJECT_ANDROID_ABI=armeabi-v7a ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=STATIC
+    - ORG_GRADLE_PROJECT_ANDROID_ABI=armeabi-v7a ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=SHARED
+    - ORG_GRADLE_PROJECT_ANDROID_ABI=arm64-v8a ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=STATIC
+    - ORG_GRADLE_PROJECT_ANDROID_ABI=arm64-v8a ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE=SHARED
 stage: split ABI build configuration
 before_script:
   - rake ci_timer
@@ -337,12 +252,9 @@ before_script:
   - export COMMIT_MESSAGE=$(git log --format=%B -n1 $TRAVIS_COMMIT)
   - export TAG=$(git describe --exact-match $TRAVIS_COMMIT 2>/dev/null); if [[ $TAG =~ [[:digit:]]+\.[[:digit:]]+ ]]; then export RELEASE_TAG=$TAG; fi
   - if [[ $RELEASE_TAG ]] || (! [[ $TRAVIS_BRANCH =~ [^-]+-[^-]+-CI ]] && echo $COMMIT_MESSAGE |grep -cq '\[ci package\]'); then export PACKAGE_UPLOAD=1; fi
-  - touch $HOME/.android/repositories.cfg && (while :; do echo 'y'; sleep 1; done) |sdkmanager 'tools' 'platform-tools' 'build-tools;28.0.2' "platforms;$PLATFORM" 'ndk-bundle' 'cmake;3.6.4111459' "system-images;$SYS_IMG;google_apis;$ORG_GRADLE_PROJECT_ANDROID_ABI"
-  - export PATH=$(whereis -b ccache |grep -o '\S*lib\S*'):$PATH ANDROID_CCACHE=$(which ccache)
-  - if [[ "$ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE" == "STATIC" ]]; then export EXTRA_PROPS='-P URHO3D_SAMPLES=0'; fi
+  - if [[ "$ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE" == "STATIC" ]]; then export ORG_GRADLE_PROJECT_URHO3D_SAMPLES=0; fi
   - rake ci_setup_cache
-script: ./gradlew -P URHO3D_LUAJIT=1 -P URHO3D_LUAJIT_AMALG=1 $EXTRA_PROPS build publishToMavenLocal && if [[ $PACKAGE_UPLOAD ]]; then rake ci_package_upload; fi && rake ci_timer
-after_script: rake ci_teardown_cache
+script: script/dockerized.sh android ./gradlew build publishToMavenLocal --console plain && if [[ $PACKAGE_UPLOAD ]]; then rake ci_package_upload; fi && rake ci_timer
 matrix:
   fast_finish: true
   include: [stage: housekeep]
@@ -350,27 +262,16 @@ matrix:
 ---
 
 branch: {name: RPI-CI, active: yes}
-language: cpp
-compiler: gcc
-cache:
-  timeout: 500
-  ccache: true
-  directories:
-    - $HOME/cmake-3.9.2-Linux-x86_64/bin
-    - $HOME/cmake-3.9.2-Linux-x86_64/share
 dist: trusty
-sudo: false
-addons: {apt: {packages: [doxygen, graphviz, g++-multilib, rpm]}}
+sudo: required
+addons: {apt: {packages: docker-ce}}
+cache: {directories: $HOME/urho3d_home_dir/.ccache}
 env:
   global:
     - secure: SLJCjkjDsTMbCIV9Wecz5JATnhk0fuzlnLMeZdvvFDv+8NL8cXyutkU0VfyRSLf3HSD1Js79a6fRMROyVGWj/w/BRrjqGnZzsB6+ZeJNnadiVIF5Gh+w90We5ccvSp2G4DyYgwkNnkKlJK7zNEWGu/K+bHL1EOCA+EIVrFMyA44=
     - secure: ecj/PwpbHkH9AYFsc2TMeRuNm5E3xMM8A0x4AcGhzpwDuZWdFx3R1T4G9u45Z5aUyTJWGqOeX1JPaEVVFZuYnNBKRy0kmiUrM9EE0j7WsT57K48tP1ysn2ynyvHgbYkKOfYR0t8XAMWTBbulT9DVVk3DS69//2WgiXGDVUEJTyI=
     - numjobs=4
     - RPI=1
-    - USE_CCACHE=1
-    - CCACHE_SLOPPINESS=pch_defines,time_macros
-    - CCACHE_COMPRESS=1
-    - CCACHE_MAXSIZE=100M
   matrix:
     # RPI 1
     - URHO3D_LIB_TYPE=STATIC
@@ -381,17 +282,12 @@ env:
 stage: release build configuration
 before_script:
   - rake ci_timer
-  - git clone --depth 1 https://github.com/raspberrypi/tools.git rpi-tools && export RPI_PREFIX=$(pwd)/rpi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf && git clone --depth 1 https://github.com/urho3d/rpi-sysroot.git && export RPI_SYSROOT=$(pwd)/rpi-sysroot && for compiler in $RPI_PREFIX-{gcc,g++}; do touch -d "2017-01-01 00:00:00 +0800" $compiler; done
   - export TRAVIS_COMMIT=$TRAVIS_COMMIT~
   - export COMMIT_MESSAGE=$(git log --format=%B -n 1 $TRAVIS_COMMIT)
   - export TAG=$(git describe --exact-match $TRAVIS_COMMIT 2>/dev/null); if [[ $TAG =~ [[:digit:]]+\.[[:digit:]]+ ]]; then export RELEASE_TAG=$TAG; fi
   - if [[ $RELEASE_TAG ]] || (! [[ $TRAVIS_BRANCH =~ [^-]+-[^-]+-CI ]] && echo $COMMIT_MESSAGE |grep -cq '\[ci package\]'); then export PACKAGE_UPLOAD=1; fi
-  - export PATH=${RPI_PREFIX%/*}:$PATH
-  - if [[ ! -f $HOME/cmake-3.9.2-Linux-x86_64/bin/cmake ]]; then wget --no-check-certificate https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz -O $HOME/cmake.tar.gz && tar xf $HOME/cmake.tar.gz -C $HOME && rm $HOME/cmake.tar.gz; fi
-  - export PATH=$HOME/cmake-3.9.2-Linux-x86_64/bin:$PATH
   - rake ci_setup_cache
-script: rake ci && if [[ $PACKAGE_UPLOAD ]]; then rake ci_package_upload; fi && rake ci_timer
-after_script: rake ci_teardown_cache
+script: script/dockerized.sh rpi rake ci && if [[ $PACKAGE_UPLOAD ]]; then rake ci_package_upload; fi && rake ci_timer
 matrix:
   fast_finish: true
   include: [stage: housekeep]
@@ -399,51 +295,32 @@ matrix:
 ---
 
 branch: {name: ARM-CI, active: yes}
-language: cpp
-compiler: gcc
-cache:
-  timeout: 500
-  ccache: true
-  directories:
-    - $HOME/cmake-3.9.2-Linux-x86_64/bin
-    - $HOME/cmake-3.9.2-Linux-x86_64/share
 dist: trusty
-sudo: false
-addons: {apt: {packages: [doxygen, graphviz, g++-multilib, rpm]}}
+sudo: required
+addons: {apt: {packages: docker-ce}}
+cache: {directories: $HOME/urho3d_home_dir/.ccache}
 env:
   global:
     - secure: SLJCjkjDsTMbCIV9Wecz5JATnhk0fuzlnLMeZdvvFDv+8NL8cXyutkU0VfyRSLf3HSD1Js79a6fRMROyVGWj/w/BRrjqGnZzsB6+ZeJNnadiVIF5Gh+w90We5ccvSp2G4DyYgwkNnkKlJK7zNEWGu/K+bHL1EOCA+EIVrFMyA44=
     - secure: ecj/PwpbHkH9AYFsc2TMeRuNm5E3xMM8A0x4AcGhzpwDuZWdFx3R1T4G9u45Z5aUyTJWGqOeX1JPaEVVFZuYnNBKRy0kmiUrM9EE0j7WsT57K48tP1ysn2ynyvHgbYkKOfYR0t8XAMWTBbulT9DVVk3DS69//2WgiXGDVUEJTyI=
     - numjobs=4
     - ARM=1
-    - USE_CCACHE=1
-    - CCACHE_SLOPPINESS=pch_defines,time_macros
-    - CCACHE_COMPRESS=1
-    - CCACHE_MAXSIZE=100M
   matrix:
-    # ODROID-X2
-    - SYSROOT=armhf-sysroot URHO3D_LIB_TYPE=STATIC ARM_ABI_FLAGS='-mcpu=cortex-a9 -mfpu=neon-fp16'
-    - SYSROOT=armhf-sysroot URHO3D_LIB_TYPE=SHARED ARM_ABI_FLAGS='-mcpu=cortex-a9 -mfpu=neon-fp16'
     # ODROID-C2
-    - SYSROOT=arm64-sysroot URHO3D_LIB_TYPE=STATIC ARM_ABI_FLAGS='-mcpu=cortex-a53'
-    - SYSROOT=arm64-sysroot URHO3D_LIB_TYPE=SHARED ARM_ABI_FLAGS='-mcpu=cortex-a53'
+    - URHO3D_LIB_TYPE=STATIC ARM_ABI_FLAGS='-mcpu=cortex-a53'
+    - URHO3D_LIB_TYPE=SHARED ARM_ABI_FLAGS='-mcpu=cortex-a53'
+    # ODROID-X2
+    - URHO3D_64BIT=0 URHO3D_LIB_TYPE=STATIC ARM_ABI_FLAGS='-mcpu=cortex-a9 -mfpu=neon-fp16'
+    - URHO3D_64BIT=0 URHO3D_LIB_TYPE=SHARED ARM_ABI_FLAGS='-mcpu=cortex-a9 -mfpu=neon-fp16'
 stage: release build configuration
 before_script:
   - rake ci_timer
-  - if [[ $SYSROOT =~ arm64 ]]; then export triplet=aarch64-linux-gnu; else export triplet=arm-linux-gnueabihf; fi
-  - wget https://releases.linaro.org/components/toolchain/binaries/latest-5/$triplet/gcc-linaro-5.5.0-2017.10-x86_64_$triplet.tar.xz -O arm-tools.tar.xz && tar xf arm-tools.tar.xz && rm arm-tools.tar.xz && mv gcc-linaro* gcc-linaro && export ARM_PREFIX=$(pwd)/gcc-linaro/bin/$triplet
-  - for compiler in $ARM_PREFIX-{gcc,g++}; do touch -d "2017-01-01 00:00:00 +0800" $compiler; done
-  - git clone --depth 1 https://github.com/urho3d/$SYSROOT.git && export ARM_SYSROOT=$(pwd)/$SYSROOT
   - export TRAVIS_COMMIT=$TRAVIS_COMMIT~
   - export COMMIT_MESSAGE=$(git log --format=%B -n 1 $TRAVIS_COMMIT)
   - export TAG=$(git describe --exact-match $TRAVIS_COMMIT 2>/dev/null); if [[ $TAG =~ [[:digit:]]+\.[[:digit:]]+ ]]; then export RELEASE_TAG=$TAG; fi
   - if [[ $RELEASE_TAG ]] || (! [[ $TRAVIS_BRANCH =~ [^-]+-[^-]+-CI ]] && echo $COMMIT_MESSAGE |grep -cq '\[ci package\]'); then export PACKAGE_UPLOAD=1; fi
-  - export PATH=${ARM_PREFIX%/*}:$PATH
-  - if [[ ! -f $HOME/cmake-3.9.2-Linux-x86_64/bin/cmake ]]; then wget --no-check-certificate https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz -O $HOME/cmake.tar.gz && tar xf $HOME/cmake.tar.gz -C $HOME && rm $HOME/cmake.tar.gz; fi
-  - export PATH=$HOME/cmake-3.9.2-Linux-x86_64/bin:$PATH
   - rake ci_setup_cache
-script: rake ci && if [[ $PACKAGE_UPLOAD ]]; then rake ci_package_upload; fi && rake ci_timer
-after_script: rake ci_teardown_cache
+script: script/dockerized.sh arm rake ci && if [[ $PACKAGE_UPLOAD ]]; then rake ci_package_upload; fi && rake ci_timer
 matrix:
   fast_finish: true
   include: [stage: housekeep]
@@ -451,18 +328,14 @@ matrix:
 ---
 
 branch: {name: Web-CI, active: yes}
-language: cpp
-compiler: gcc
+dist: trusty
+sudo: required
+addons: {apt: {packages: docker-ce}}
 cache:
-  timeout: 500
-  ccache: true
   directories:
-    - $HOME/cmake-3.9.2-Linux-x86_64/bin
-    - $HOME/cmake-3.9.2-Linux-x86_64/share
-    - $HOME/initial-build-tree
-dist: trusty
-sudo: false
-addons: {apt: {packages: [doxygen, graphviz]}}
+    - $HOME/urho3d_home_dir/.ccache
+    - $HOME/urho3d_home_dir/.emscripten_cache
+    - $HOME/urho3d_home_dir/initial-build-tree
 env:
   global:
     - secure: SLJCjkjDsTMbCIV9Wecz5JATnhk0fuzlnLMeZdvvFDv+8NL8cXyutkU0VfyRSLf3HSD1Js79a6fRMROyVGWj/w/BRrjqGnZzsB6+ZeJNnadiVIF5Gh+w90We5ccvSp2G4DyYgwkNnkKlJK7zNEWGu/K+bHL1EOCA+EIVrFMyA44=
@@ -470,19 +343,14 @@ env:
     - numjobs=2
     - WEB=1
     - EMSCRIPTEN_SHARE_DATA=1
-    - USE_CCACHE=1
-    - CCACHE_SLOPPINESS=pch_defines,time_macros
-    - CCACHE_COMPRESS=1
-    - CCACHE_MAXSIZE=100M
-    - HOT=/home/travis/.ccache/.hot
-    - BRANCH=master
+    - HOT=/home/travis/urho3d_home_dir/.ccache/.hot
   matrix:
     - URHO3D_LIB_TYPE=MODULE EMSCRIPTEN_WASM=0 numjobs=4
     - URHO3D_LIB_TYPE=STATIC EMSCRIPTEN_WASM=0
     - URHO3D_LIB_TYPE=SHARED EMSCRIPTEN_WASM=0
     # URHO3D_LIB_TYPE=MODULE numjobs=4
-    - URHO3D_LIB_TYPE=STATIC BRANCH=incoming
-    - URHO3D_LIB_TYPE=SHARED BRANCH=incoming
+    - URHO3D_LIB_TYPE=STATIC
+    - URHO3D_LIB_TYPE=SHARED
 stage: release build configuration
 before_script:
   - rake ci_timer
@@ -491,14 +359,8 @@ before_script:
   - export TAG=$(git describe --exact-match $TRAVIS_COMMIT 2>/dev/null); if [[ $TAG =~ [[:digit:]]+\.[[:digit:]]+ ]]; then export RELEASE_TAG=$TAG; fi
   - if [[ $RELEASE_TAG ]] || (! [[ $TRAVIS_BRANCH =~ [^-]+-[^-]+-CI ]] && echo $COMMIT_MESSAGE |grep -cq '\[ci package\]'); then export PACKAGE_UPLOAD=1; fi
   - if [[ "$URHO3D_LIB_TYPE" != "MODULE" ]] && (echo $COMMIT_MESSAGE |grep -cq '\[cache clear\]' || [[ ! -e $HOT ]]); then export URHO3D_SAMPLES=0; else export URHO3D_SAMPLES=1; fi; touch $HOT
-  - if [[ ! $EMSCRIPTEN_WASM ]]; then export BINARYEN=binaryen-master-64bit; fi
-  - git clone --depth 1 --branch $BRANCH https://github.com/urho3d/emscripten-sdk.git && emscripten-sdk/emsdk activate --build=Release sdk-${BRANCH}-64bit $BINARYEN && source emscripten-sdk/emsdk_env.sh
-  - for compiler in $EMSCRIPTEN/{emcc,em++}; do touch -d "2017-01-01 00:00:00 +0800" $compiler; done
-  - if [[ ! -f $HOME/cmake-3.9.2-Linux-x86_64/bin/cmake ]]; then wget --no-check-certificate https://cmake.org/files/v3.9/cmake-3.9.2-Linux-x86_64.tar.gz -O $HOME/cmake.tar.gz && tar xf $HOME/cmake.tar.gz -C $HOME && rm $HOME/cmake.tar.gz; fi
-  - export PATH=$HOME/cmake-3.9.2-Linux-x86_64/bin:$PATH
   - rake ci_setup_cache
-script: rake ci && if [ $PACKAGE_UPLOAD ]; then rake ci_package_upload; fi && if [[ "$TRAVIS_BRANCH" == "Web-CI" ]] && [[ ! $EMSCRIPTEN_WASM ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]] && [[ "$URHO3D_LIB_TYPE" == "SHARED" ]] && [[ ! $URHO3D_SAMPLES ]]; then rake ci_emscripten_samples_update; fi && rake ci_timer
-after_script: rake ci_teardown_cache
+script: script/dockerized.sh web rake ci && if [ $PACKAGE_UPLOAD ]; then rake ci_package_upload; fi && if [[ "$TRAVIS_BRANCH" == "Web-CI" ]] && [[ ! $EMSCRIPTEN_WASM ]] && [[ "$TRAVIS_PULL_REQUEST" == "false" ]] && [[ "$URHO3D_LIB_TYPE" == "SHARED" ]] && [[ ! $URHO3D_SAMPLES ]]; then rake ci_emscripten_samples_update; fi && rake ci_timer
 matrix:
   fast_finish: true
   include: [stage: housekeep]
@@ -520,7 +382,6 @@ data:
 branch: {name: OSX-CI, active: yes}
 language: objective-c
 cache:
-  timeout: 500
   directories:
     - $HOME/.ccache
     - $HOME/initial-build-tree
@@ -531,15 +392,13 @@ env:
     - secure: ecj/PwpbHkH9AYFsc2TMeRuNm5E3xMM8A0x4AcGhzpwDuZWdFx3R1T4G9u45Z5aUyTJWGqOeX1JPaEVVFZuYnNBKRy0kmiUrM9EE0j7WsT57K48tP1ysn2ynyvHgbYkKOfYR0t8XAMWTBbulT9DVVk3DS69//2WgiXGDVUEJTyI=
     - numjobs=3
     - OSX=1
-    - USE_CCACHE=1
     - CCACHE_SLOPPINESS=pch_defines,time_macros
     - CCACHE_COMPRESS=1
-    - CCACHE_MAXSIZE=300M
   matrix:
-    - &tvOS XCODE=1 TVOS=1 URHO3D_LIB_TYPE=STATIC APPLETVOS_DEPLOYMENT_TARGET=11.2 sdk=appletvsimulator
-    - &iOS XCODE=1 IOS=1 URHO3D_LIB_TYPE=STATIC IPHONEOS_DEPLOYMENT_TARGET=11.2 sdk=iphonesimulator
-    - &macOS-STATIC XCODE=1 URHO3D_LIB_TYPE=STATIC CMAKE_OSX_DEPLOYMENT_TARGET=10.13 SF_DEFAULT=mac:OSX-64bit-STATIC.tar.gz
-    - &macOS-SHARED XCODE=1 URHO3D_LIB_TYPE=SHARED CMAKE_OSX_DEPLOYMENT_TARGET=10.13
+    - XCODE=1 TVOS=1 URHO3D_LIB_TYPE=STATIC APPLETVOS_DEPLOYMENT_TARGET=11.2 sdk=appletvsimulator
+    - XCODE=1 IOS=1 URHO3D_LIB_TYPE=STATIC IPHONEOS_DEPLOYMENT_TARGET=11.2 sdk=iphonesimulator
+    - XCODE=1 URHO3D_LIB_TYPE=STATIC CMAKE_OSX_DEPLOYMENT_TARGET=10.13 SF_DEFAULT=mac:OSX-64bit-STATIC.tar.gz
+    - XCODE=1 URHO3D_LIB_TYPE=SHARED CMAKE_OSX_DEPLOYMENT_TARGET=10.13
     - MAKEFILE=1 URHO3D_LIB_TYPE=STATIC URHO3D_DEPLOYMENT_TARGET=generic
     - MAKEFILE=1 URHO3D_LIB_TYPE=SHARED URHO3D_DEPLOYMENT_TARGET=generic
 stage: release build configuration
@@ -554,11 +413,9 @@ before_script:
   - if [[ $MAKEFILE ]]; then ccache=ccache; fi
   - travis_retry brew install doxygen graphviz $cmake $ccache
   - if [[ ! $cmake ]]; then brew outdated cmake || brew upgrade cmake; fi
-  - if [[ $ccache ]]; then export PATH=$(brew info ccache |grep -o '\S*lib\S*'):$PATH; fi
-  - if [[ $XCODE ]]; then unset USE_CCACHE && if [[ $IOS ]]; then redundant=AppleTV,Watch; elif [[ $TVOS ]]; then redundant=iPhone,Watch; else redundant=iPhone,AppleTV,Watch; fi && eval sudo rm -rf /Applications/Xcode.app/Contents/Developer/Platforms/{$redundant}{OS,Simulator}.platform; fi
-  - rake ci_setup_cache
+  - if [[ $ccache ]]; then export PATH=$(brew info ccache |grep -o '\S*lib\S*'):$PATH USE_CCACHE=1; fi
+  - if [[ $XCODE ]]; then export config=Release; if [[ $IOS ]]; then redundant=AppleTV,Watch; elif [[ $TVOS ]]; then redundant=iPhone,Watch; else redundant=iPhone,AppleTV,Watch; fi && eval sudo rm -rf /Applications/Xcode.app/Contents/Developer/Platforms/{$redundant}{OS,Simulator}.platform; fi
 script: rake ci && if [[ $PACKAGE_UPLOAD ]]; then rake ci_package_upload; fi && rake ci_timer
-after_script: rake ci_teardown_cache
 matrix:
   fast_finish: true
   include: [stage: housekeep]

+ 77 - 114
Rakefile

@@ -313,6 +313,12 @@ task :ci do
     matched = /\[ci only:(.*?)\]/.match(ENV['COMMIT_MESSAGE'])
     next if matched && !matched[1].split(/[ ,]/).reject!(&:empty?).map { |i| /#{i}/ =~ (ENV['TRAVIS_BRANCH'] || ENV['APPVEYOR_REPO_BRANCH']) }.any?
   end
+  # Clear ccache on demand
+  if ENV['USE_CCACHE'] then
+    clear = /\[cache clear\]/ =~ ENV['COMMIT_MESSAGE']
+    system "ccache -z #{clear ? '-C' : ''}"
+    puts; $stdout.flush
+  end
   # Obtain our custom data, if any
   if ENV['APPVEYOR']
     # AppVeyor does not provide job number environment variable in the same semantics as TRAVIS_JOB_NUMBER nor it supports custom data in its .appveyor.yml document
@@ -335,29 +341,28 @@ task :ci do
     system 'git fetch --tags --unshallow' or abort 'Failed to unshallow cloned repository'
     puts; $stdout.flush
   end
-  # CMake/Emscripten toolchain file does not show this information yet
+  # Show the compiler toolchain version because CMake/Emscripten toolchain file does not show this info and also because the build tree on Travis CI is cached and just being reconfigured each time
   if ENV['WEB']
     system 'clang --version && emcc --version' or abort 'Failed to find Emscripten compiler toolchain'
   end
   # Show CMake version
-  system 'cmake --version' or abort 'Failed to find CMake'
+  if ENV['ANDROID']
+    # Android build uses SDK's embedded CMake which is non-vanilla version of CMake
+    system '$ANDROID_HOME/cmake/*/bin/cmake --version' or abort 'Failed to find CMake'
+  else
+    system 'cmake --version' or abort 'Failed to find CMake'
+  end
   puts; $stdout.flush
-  # Ensure '.build-options' and '.env-file' are up-to-date
-  system %Q(perl -ne 'undef $/; print $1 if /(Build Option.*?(?=\n\n))/s' Docs/GettingStarted.dox |tail -n +3 |cut -d'|' -f2 |tr -d [:blank:] >script/.build-options && cat script/.build-options <(perl -ne 'while (/(\w+)=\w+/g) {print "$1\n"}' .travis.yml) |sort |uniq |grep -v ^PATH$ >script/.env-file)
-  # Using out-of-source build tree when using Travis-CI; 'build_tree' environment variable is already set when on AppVeyor
-  ENV['build_tree'] = '../Build' unless ENV['APPVEYOR']
-  # Always use a same build configuration per build job to keep ccache's cache size small; default to RELEASE unless specifically defined
-  ENV['config'] = 'Release' if ENV['XCODE']
+  # Use out-of-source build tree
+  ENV['build_tree'] = 'build/ci'
   # Currently we don't have the infra to test run all the platforms; also skip when doing packaging build due to time constraint
-  ENV['URHO3D_TESTING'] = '1' if (((ENV['LINUX'] && !ENV['URHO3D_64BIT']) || (ENV['OSX'] && !ENV['IOS'] && !ENV['TVOS']) || ENV['APPVEYOR']) && !ENV['PACKAGE_UPLOAD']) || ENV['WEB']
+  ENV['URHO3D_TESTING'] = '1' if ((ENV['LINUX'] && !ENV['URHO3D_64BIT']) || (ENV['OSX'] && !ENV['IOS'] && !ENV['TVOS']) || ENV['APPVEYOR']) && !ENV['PACKAGE_UPLOAD']
   # When not explicitly specified then use generic generator
   generator = ENV['XCODE'] ? 'xcode' : (ENV['APPVEYOR'] ? (ENV['MINGW'] ? 'mingw' : 'vs2017') : '')
-  # LuaJIT on MinGW build is not possible on Travis-CI with Ubuntu 14.04 LTS still as its GCC cross-compiler does not have native exception handling
-  # LuaJIT on Web platform is not possible
-  jit = (ENV['MINGW'] && ENV['TRAVIS']) || ENV['WEB'] ? '' : 'JIT=1 URHO3D_LUAJIT_AMALG='
-  system "cp -rp #{ENV['HOME']}/initial-build-tree #{ENV['build_tree']}" if (ENV['OSX'] || ENV['WEB']) && ENV['CI'] && File.exist?("#{ENV['HOME']}/initial-build-tree/CMakeCache.txt")
-  system "rake cmake #{generator} URHO3D_LUA#{jit}=1 URHO3D_DATABASE_SQLITE=1 URHO3D_EXTRAS=1" or abort 'Failed to configure Urho3D library build'
-  system "cp -rp #{ENV['build_tree']}/* #{ENV['HOME']}/initial-build-tree 2>/dev/null && rm -rf #{ENV['HOME']}/initial-build-tree/{bin,include} 2>/dev/null" if (ENV['OSX'] || ENV['WEB']) && ENV['CI']
+  # Cache the initial build tree for next run on platform that is slow to generate the build tree
+  system "mkdir -p #{ENV['build_tree']} && cp -rp #{ENV['HOME']}/initial-build-tree/* #{ENV['build_tree']}" if (ENV['OSX'] || ENV['WEB']) && ENV['CI'] && File.exist?("#{ENV['HOME']}/initial-build-tree/CMakeCache.txt")
+  system "rake cmake #{generator} URHO3D_DATABASE_SQLITE=1 URHO3D_EXTRAS=1" or abort 'Failed to configure Urho3D library build'
+  system "bash -c 'cp -rp #{ENV['build_tree']}/* #{ENV['HOME']}/initial-build-tree 2>/dev/null && rm -rf #{ENV['HOME']}/initial-build-tree/{bin,include} 2>/dev/null'" if (ENV['OSX'] || ENV['WEB']) && ENV['CI']
   next if timeup    # Measure the CMake configuration overhead
   if ENV['AVD'] && !ENV['PACKAGE_UPLOAD']   # Skip APK test run when packaging
     # Prepare a new AVD in another process to avoid busy waiting
@@ -376,7 +381,7 @@ task :ci do
     if ENV['TRAVIS'] && !ENV['XCODE'] && !already_timeup && !timeup(true, 10)
       # The build cache could be corrupted, so clear the cache and retry one more time
       system "cd #{ENV['build_tree']}/Source/Urho3D/tolua++-prefix/src/tolua++-build && make clean >/dev/null 2>&1"
-      system "cd #{ENV['build_tree']}/Source/ThirdParty/LuaJIT/buildvm-prefix/src/buildvm-build && make clean >/dev/null 2>&1" if jit != ''
+      system "cd #{ENV['build_tree']}/Source/ThirdParty/LuaJIT/buildvm-prefix/src/buildvm-build && make clean >/dev/null 2>&1"
       success = system "ccache -Cz && rake make clean_first #{redirect}"
     end
     unless success
@@ -396,113 +401,71 @@ task :ci do
       puts; $stdout.flush
       abort 'Failed to pass linter checks'
     end
-    next
-  end
-  if ENV['URHO3D_TESTING'] && !ENV['WEB'] && !timeup
-    # Multi-config CMake generators use different test target name than single-config ones for no good reason
-    test = "rake make target=#{(ENV['OS'] && !ENV['MINGW']) || ENV['XCODE'] ? 'RUN_TESTS' : 'test'}"
-    system "#{test}" or abort 'Failed to test Urho3D library'
-    test = "&& echo#{ENV['OS'] ? '.' : ''} && #{test}"
   else
-    test = ''
-  end
-  # Skip scaffolding test when time up or packaging for iOS, tvOS, and Web platform or when the build config may run out of disk space
-  unless ENV['CI'] && ((ENV['IOS'] || ENV['TVOS'] || ENV['WEB']) && ENV['PACKAGE_UPLOAD'] || (ENV['CMAKE_BUILD_TYPE'] == 'Debug' && ENV['URHO3D_LIB_TYPE'] == 'STATIC')) || timeup
-    # Staged-install Urho3D SDK when on Travis-CI; normal install when on AppVeyor
-    ENV['DESTDIR'] = ENV['HOME'] unless ENV['APPVEYOR']
-    if !wait_for_block("Installing Urho3D SDK to #{ENV['DESTDIR'] ? "#{ENV['DESTDIR']}/usr/local" : 'default system-wide location'}...") { Thread.current[:subcommand_to_kill] = 'xcodebuild'; system "rake make target=install >#{ENV['OS'] ? 'nul' : '/dev/null'}" }
-      abort 'Failed to install Urho3D SDK' unless File.exists?('already_timeup.log')
-      $stderr.puts "Skipped the rest of the CI processes due to insufficient time"
-      next
-    end
-    # Alternate to use in-the-source build tree for test coverage
-    ENV['build_tree'] = '.' unless ENV['APPVEYOR']
-    # Ensure the following variables are auto-discovered during scaffolding test
-    ENV['URHO3D_64BIT'] = nil unless ENV['APPVEYOR']    # AppVeyor uses VS generator which always requires URHO3D_64BIT as input variable
-    ['URHO3D_LIB_TYPE', 'URHO3D_STATIC_RUNTIME', 'URHO3D_OPENGL', 'URHO3D_D3D11', 'URHO3D_SSE', 'URHO3D_DATABASE_ODBC', 'URHO3D_DATABASE_SQLITE', 'URHO3D_LUAJIT', 'URHO3D_TESTING'].each { |var| ENV[var] = nil }
-    # Alternate the scaffolding location between Travis CI and AppVeyor for test coverage; Travis CI uses build tree while AppVeyor using source tree
-    # First scaffolding test uses absolute path while second test uses relative path, also for test converage
-    # First test - create a new project on the fly that uses newly installed Urho3D SDK
-    org = (ENV['TRAVIS_REPO_SLUG'] || ENV['APPVEYOR_PROJECT_SLUG']).split('/').first
-    Dir.chdir scaffolding "#{ENV['APPVEYOR'] ? "C:/projects/#{org}/" : (ENV['TRAVIS'] ? "#{ENV['HOME']}/build/#{org}/Build/" : '../Build/')}UsingSDK" do   # The last rel path is for non-CI users, just in case
-      puts "\nConfiguring downstream project using Urho3D SDK...\n\n"; $stdout.flush
-      # SDK installation to a system-wide location does not need URHO3D_HOME to be defined, staged-installation does
-      system "#{ENV['DESTDIR'] ? 'URHO3D_HOME=~/usr/local' : ''} rake cmake #{generator} URHO3D_LUA=1 && rake make #{test}" or abort 'Failed to configure/build/test temporary downstream project using Urho3D as external library'
-    end
-    next if timeup
-    # Second test - create a new project on the fly that uses newly built Urho3D library in the build tree
-    Dir.chdir scaffolding "#{ENV['APPVEYOR'] ? '' : '../Build/'}UsingBuildTree" do
-      puts "Configuring downstream project using Urho3D library in its build tree...\n\n"; $stdout.flush
-      system "rake cmake #{generator} URHO3D_HOME=#{ENV['APPVEYOR'] ? "../../#{ENV['build_tree']}" : '..'} URHO3D_LUA=1 && rake make #{test}" or abort 'Failed to configure/build/test temporary downstream project using Urho3D as external library'
-    end
-  end
-  # Make, deploy, and test run Android APK in an Android (virtual) device
-  if ENV['AVD'] && !ENV['PACKAGE_UPLOAD'] && !timeup
-    puts "\nTest deploying and running Urho3D Samples APK..."
-    Dir.chdir '../Build' do
-      system 'android update project -p . && ant debug' or abort 'Failed to make Urho3D Samples APK'
-      if android_wait_for_device
-        system "ant -Dadb.device.arg='-s #{$specific_device}' installd" or abort 'Failed to deploy Urho3D Samples APK'
-        android_test_run or abort 'Failed to test run Urho3D Samples APK'
-      else
-        puts 'Skipped test running Urho3D Samples APK as emulator failed to start in time'
+    if ENV['URHO3D_TESTING'] && !timeup
+      # Multi-config CMake generators use different test target name than single-config ones for no good reason
+      test = "#{ENV['OSX'] || ENV['APPVEYOR'] ? '' : 'xvfb-run'} rake make target=#{(ENV['OS'] && !ENV['MINGW']) || ENV['XCODE'] ? 'RUN_TESTS' : 'test'}"
+      system "#{test}" or abort 'Failed to test Urho3D library'
+      test = "&& echo#{ENV['OS'] ? '.' : ''} && #{test}"
+    else
+      test = ''
+    end
+    # Skip scaffolding test when time up or packaging for iOS, tvOS, and Web platform or when the build config may run out of disk space
+    unless ENV['CI'] && ((ENV['IOS'] || ENV['TVOS'] || ENV['WEB']) && ENV['PACKAGE_UPLOAD'] || (ENV['CMAKE_BUILD_TYPE'] == 'Debug' && ENV['URHO3D_LIB_TYPE'] == 'STATIC')) || timeup
+      # Staged-install Urho3D SDK when on Travis-CI; normal install when on AppVeyor
+      ENV['DESTDIR'] = ENV['HOME'] unless ENV['APPVEYOR']
+      if !wait_for_block("Installing Urho3D SDK to #{ENV['DESTDIR'] ? "#{ENV['DESTDIR']}/usr/local" : 'default system-wide location'}...") { Thread.current[:subcommand_to_kill] = 'xcodebuild'; system "rake make target=install >#{ENV['OS'] ? 'nul' : '/dev/null'}" }
+        abort 'Failed to install Urho3D SDK' unless File.exists?('already_timeup.log')
+        $stderr.puts "Skipped the rest of the CI processes due to insufficient time"
+        next
+      end
+      urho3d_home = "#{Dir.pwd}/#{ENV['build_tree']}"
+      # Use non out-of-source build tree for scaffolding test
+      ENV['build_tree'] = '.'
+      # Ensure the following variables are auto-discovered during scaffolding test
+      ENV['URHO3D_64BIT'] = nil unless ENV['APPVEYOR']    # AppVeyor uses VS generator which always requires URHO3D_64BIT as input variable
+      ['URHO3D_LIB_TYPE', 'URHO3D_STATIC_RUNTIME', 'URHO3D_OPENGL', 'URHO3D_D3D11', 'URHO3D_SSE', 'URHO3D_DATABASE_ODBC', 'URHO3D_DATABASE_SQLITE', 'URHO3D_LUAJIT', 'URHO3D_TESTING'].each { |var| ENV[var] = nil }
+      # First test - create a new project on the fly that uses newly installed Urho3D SDK
+      Dir.chdir scaffolding 'UsingSDK' do
+        puts "\nConfiguring downstream project using Urho3D SDK...\n\n"; $stdout.flush
+        # SDK installation to a system-wide location does not need URHO3D_HOME to be defined, staged-installation does
+        system "#{ENV['DESTDIR'] ? 'URHO3D_HOME=~/usr/local' : ''} rake cmake #{generator} && rake make #{test}" or abort 'Failed to configure/build/test temporary downstream project using Urho3D as external library'
+      end
+      next if timeup
+      # Second test - create a new project on the fly that uses newly built Urho3D library in the build tree
+      Dir.chdir scaffolding 'UsingBuildTree' do
+        puts "Configuring downstream project using Urho3D library in its build tree...\n\n"; $stdout.flush
+        system "rake cmake #{generator} URHO3D_HOME=#{urho3d_home} && rake make #{test}" or abort 'Failed to configure/build/test temporary downstream project using Urho3D as external library'
+      end
+      # Clean up so that these test dirs do not show up in the CI mirror branches
+      require 'fileutils'
+      FileUtils.rm_rf(['UsingSDK', 'UsingBuildTree'])
+    end
+    # Make, deploy, and test run Android APK in an Android (virtual) device
+    if ENV['AVD'] && !ENV['PACKAGE_UPLOAD'] && !timeup
+      puts "\nTest deploying and running Urho3D Samples APK..."
+      Dir.chdir '../Build' do
+        system 'android update project -p . && ant debug' or abort 'Failed to make Urho3D Samples APK'
+        if android_wait_for_device
+          system "ant -Dadb.device.arg='-s #{$specific_device}' installd" or abort 'Failed to deploy Urho3D Samples APK'
+          android_test_run or abort 'Failed to test run Urho3D Samples APK'
+        else
+          puts 'Skipped test running Urho3D Samples APK as emulator failed to start in time'
+        end
       end
     end
   end
+  system 'ccache -s' if ENV['USE_CCACHE']
 end
 
 # Usage: NOT intended to be used manually
 desc 'Setup build cache'
 task :ci_setup_cache do
-  clear = /\[cache clear\]/ =~ ENV['COMMIT_MESSAGE']
-  # AppVeyor on Windows host has different kind of cache mechanism, not based on ccache
-  if ENV['APPVEYOR']
-    system "bash -c 'rm -rf #{ENV['build_tree']}'" if clear
-    if File.exists?("#{ENV['build_tree']}/.commits")
-      # Find the last valid commit SHA because the recorded commit SHAs may no longer be valid due to git reset/forced push
-      last_commit = File.read("#{ENV['build_tree']}/.commits").split.find { |sha| system "git cat-file -e #{sha}" }
-      # AppVeyor prefers CMD's FIND over MSYS's find, so we have to use fully qualified path to the MSYS's find
-      system "bash -c '/c/Program\\ Files/Git/usr/bin/find CMakeLists.txt CMake Docs Source |xargs touch -r #{ENV['build_tree']}/CMakeCache.txt && touch $(git diff --name-only #{last_commit} #{ENV['APPVEYOR_REPO_COMMIT']})'"
-    end
-    next
-  # Use internal cache store instead of using Travis CI one (this is a workaround for using ccache on Travis CI legacy build infra)
-  elsif ENV['USE_CCACHE'].to_i == 2
-    puts 'Setting up build cache'
-    job_number = ".#{ENV['TRAVIS_JOB_NUMBER'].split('.').last}"
-    repo_slug = "#{ENV['TRAVIS_REPO_SLUG'].split('/').first}/cache-store.git"
-    matched = /.*-([^-]+-[^-]+)$/.match(ENV['TRAVIS_BRANCH'])
-    base_mirror = matched ? matched[1] : nil
-    # Do not abort even when it fails here
-    system "if ! `git clone -q --depth 1 --branch #{ENV['TRAVIS_BRANCH']}#{job_number} https://github.com/#{repo_slug} ~/.ccache 2>/dev/null`; then if ! [ #{base_mirror} ] || ! `git clone -q --depth 1 --branch #{base_mirror}#{job_number} https://github.com/#{repo_slug} ~/.ccache 2>/dev/null`; then git clone -q --depth 1 https://github.com/#{repo_slug} ~/.ccache 2>/dev/null; fi && cd ~/.ccache && git checkout -qf -b #{ENV['TRAVIS_BRANCH']}#{job_number}; fi"
-    # Preserving .git directory before clearing the cache on Linux host system (ccache on Mac OSX does not have this problem)
-    `mv ~/.ccache/.git /tmp` if clear && ENV['OSX'].to_i != 1
-  end
-  # Clear ccache on demand
-  system "ccache -z -M #{ENV['CCACHE_MAXSIZE']} #{clear ? '-C' : ''}"
-  # Restoring .git directory if its backup exists
-  `if [ -e /tmp/.git ]; then mv /tmp/.git ~/.ccache; fi`
-end
-
-# Usage: NOT intended to be used manually
-desc 'Teardown build cache'
-task :ci_teardown_cache do
-  # AppVeyor on Windows host has different kind of cache mechanism, not based on ccache
-  if ENV['APPVEYOR']
-    # Keep the last 10 commit SHAs
-    commits = (File.exists?("#{ENV['build_tree']}/.commits") ? File.read("#{ENV['build_tree']}/.commits").split : []).unshift(`git rev-parse #{ENV['APPVEYOR_REPO_COMMIT']}`.chomp).take 10
-    File.open("#{ENV['build_tree']}/.commits", 'w') { |file| file.puts commits } if Dir.exist?(ENV['build_tree'])
-    # Exclude build artifacts from being cached due to cache size limitation
-    system "bash -c 'rm -f #{ENV['build_tree']}/bin/*.{exe,dll}'"
-    next
-  # Upload cache to internal cache store if it is our own
-  elsif ENV['USE_CCACHE'].to_i == 2
-    puts 'Storing build cache'
-    job_number = ".#{ENV['TRAVIS_JOB_NUMBER'].split('.').last}"
-    repo_slug = "#{ENV['TRAVIS_REPO_SLUG'].split('/').first}/cache-store.git"
-    # Do not abort even when it fails here
-    system "cd ~/.ccache && git config user.name $GIT_NAME && git config user.email $GIT_EMAIL && git remote set-url --push origin https://[email protected]/#{repo_slug} && git add -A . && git commit --amend -qm 'Travis CI: cache update at #{Time.now.utc}.' && git push -qf -u origin #{ENV['TRAVIS_BRANCH']}#{job_number} >/dev/null 2>&1"
-  end
-  system 'ccache -s'
+  puts 'Setting up build cache using docker volume...'
+  # This is a hack as it relies on docker volume internal directory structure
+  system 'docker volume create $(id -u).urho3d_home_dir && sudo rm -rf /var/lib/docker/volumes/$(id -u).urho3d_home_dir/_data && sudo ln -s $HOME/urho3d_home_dir /var/lib/docker/volumes/$(id -u).urho3d_home_dir/_data' or abort 'Failed to setup build cache'
+  # Ensure '.build-options' and '.env-file' are up-to-date
+  system 'bash', '-c', %q(perl -ne 'undef $/; print $1 if /(Build Option.*?(?=\n\n))/s' Docs/GettingStarted.dox |tail -n +3 |cut -d'|' -f2 |tr -d [:blank:] >script/.build-options && cat script/.build-options <(perl -ne 'while (/(\w+)=.+?/g) {print "$1\n"}' .travis.yml) <(perl -ne 'while (/ENV\[\x27(\w+)\x27\]/g) {print "$1\n"}' Rakefile) |sort |uniq |grep -Ev '^(HOME|PATH)$' >script/.env-file) or abort 'Failed to update .build-options and .env-file'
 end
 
 # Usage: NOT intended to be used manually

+ 1 - 0
script/.build-options

@@ -1,3 +1,4 @@
+ARM
 RPI
 MINGW
 WEB

+ 48 - 12
script/.env-file

@@ -1,30 +1,39 @@
+abi
 ANDROID
-ANDROID_CCACHE
-ANDROID_TMP
+ANDROID_ABI
+android_build_tree
+api
 APPLETVOS_DEPLOYMENT_TARGET
+APPVEYOR
+APPVEYOR_REPO_BRANCH
 APPVEYOR_REPO_COMMIT
+APPVEYOR_REPO_NAME
 ARCH
 ARM
 ARM_ABI_FLAGS
 ARM_PREFIX
 ARM_SYSROOT
-BINARYEN
-BRANCH
-build
+avd
+AVD
+baseline
+build_tree
+CC
 ccache
 CCACHE_COMPRESS
-CCACHE_MAXSIZE
 CCACHE_SLOPPINESS
+CI
 cmake
 CMAKE_BUILD_TYPE
 CMAKE_INSTALL_PREFIX
 CMAKE_OSX_DEPLOYMENT_TARGET
-CMAKE_PREFIX_PATH
 COMMIT_MESSAGE
+config
+CXX
+DESTDIR
+dir
 DIRECT3D_DLL_REDIST_SEARCH_PATHS
 DIRECTX_INC_SEARCH_PATHS
 DIRECTX_LIB_SEARCH_PATHS
-DISPLAY
 EMSCRIPTEN_ALLOW_MEMORY_GROWTH
 EMSCRIPTEN_AUTO_SHELL
 EMSCRIPTEN_EMRUN_BROWSER
@@ -33,14 +42,20 @@ EMSCRIPTEN_SHARE_DATA
 EMSCRIPTEN_SYSROOT
 EMSCRIPTEN_TOTAL_MEMORY
 EMSCRIPTEN_WASM
-EXTRA_PROPS
+excluded_sample
 format
+GH_TOKEN
+GIT_EMAIL
+GIT_NAME
 HOT
+included_sample
+intent
 IOS
 IPHONEOS_DEPLOYMENT_TARGET
 LINUX
 LLVM_CLANG_ROOT
 MAKEFILE
+master
 mcpu
 mfpu
 MINGW
@@ -50,11 +65,23 @@ MINGW_URL
 numjobs
 ORG_GRADLE_PROJECT_ANDROID_ABI
 ORG_GRADLE_PROJECT_URHO3D_LIB_TYPE
+ORG_GRADLE_PROJECT_URHO3D_LUAJIT
+ORG_GRADLE_PROJECT_URHO3D_SAMPLES
+OS
 OSX
+package
 PACKAGE_UPLOAD
+parameter
+payload
 PLATFORM
+project
+rebased_branch
+rebased_branch_suffix
 redundant
 RELEASE_TAG
+remote
+retries
+retry_interval
 RPI
 RPI_ABI
 RPI_PREFIX
@@ -62,17 +89,25 @@ RPI_SYSROOT
 sdk
 SF_DEFAULT
 SITE_UPDATE
+split_branch
+subdir
+success_indicator
 sw
-SYS_IMG
-SYSROOT
 TAG
+target
+TRAVIS
+TRAVIS_BRANCH
 TRAVIS_COMMIT
-triplet
+TRAVIS_JOB_NUMBER
+TRAVIS_PULL_REQUEST
+TRAVIS_REPO_SLUG
 ts
 TVOS
+upstream
 URHO3D_3DNOW
 URHO3D_64BIT
 URHO3D_ANGELSCRIPT
+URHO3D_BINDINGS
 URHO3D_D3D11
 URHO3D_DATABASE_ODBC
 URHO3D_DATABASE_SQLITE
@@ -117,6 +152,7 @@ URHO3D_USE_LIB64_RPM
 URHO3D_USE_LIB_DEB
 URHO3D_WEBP
 URHO3D_WIN32_CONSOLE
+url
 USE_CCACHE
 WEB
 XCODE