language: objective-c
env:
  global:
  # DROPBOX_KEY=[secure]
  - secure: "W8vou0KRJOOboZXP9q+D/9Wl6LlBeVS2T85MHWPz7EwCMQbJq5xWnGzYLE6FmC0iILcZkXyP63vqoYMFo5MJaEQeALGx2RuIiW7XgrD+7Bn4Vfsp6BLT7K9/AJETGGTQnLs8oZJJCXHGtzbc8EPFIZd/ZPPrve4jhEE5ZNhXnRc="
  matrix:
  - CMAKE_CXX_COMPILER=g++-4.9 CMAKE_BUILD_TYPE=DEBUG   TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=51  MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=g++-4.9 CMAKE_BUILD_TYPE=RELEASE TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=51  MULTI_THREAD=ON UPLOAD=osx PACKAGE=TRUE
  - CMAKE_CXX_COMPILER=g++-4.9 CMAKE_BUILD_TYPE=DEBUG   TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=52  MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=g++-4.9 CMAKE_BUILD_TYPE=RELEASE TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=52  MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=g++-4.9 CMAKE_BUILD_TYPE=DEBUG   TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=JIT MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=g++-4.9 CMAKE_BUILD_TYPE=RELEASE TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=JIT MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=clang++ CMAKE_BUILD_TYPE=DEBUG   TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=51  MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=clang++ CMAKE_BUILD_TYPE=RELEASE TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=51  MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=clang++ CMAKE_BUILD_TYPE=DEBUG   TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=52  MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=clang++ CMAKE_BUILD_TYPE=RELEASE TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=52  MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=clang++ CMAKE_BUILD_TYPE=DEBUG   TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=JIT MULTI_THREAD=ON
  - CMAKE_CXX_COMPILER=clang++ CMAKE_BUILD_TYPE=RELEASE TCMALLOC=OFF PUSH_TO_CDASH=TRUE LUA=JIT MULTI_THREAD=ON

# Turn off tcmalloc on OSX due to segmentation fault.
# Soonho filed a bug report for this:
#   https://code.google.com/p/gperftools/issues/detail?id=573&thanks=573&ts=1379701793

install:
- brew update
- if [[ $CMAKE_CXX_COMPILER == g++-4.9 ]]; then
      brew install gcc;
      brew link gcc;
      COMPILER=g++-`${CMAKE_CXX_COMPILER} --version | head -n 1 | grep -o '[0-9]*\.[0-9]*\.[0-9]*$'`;
  fi
- if [[ $CMAKE_CXX_COMPILER == clang++ ]]; then
      COMPILER=${CMAKE_CXX_COMPILER}`${CMAKE_CXX_COMPILER} --version | head -n 1 | grep -o '[0-9]*\.[0-9]*\.[0-9]*'`;
  fi
- brew install gmp; brew link --overwrite gmp
- brew install mpfr; brew link --overwrite mpfr
- if [[ $LUA == 52 ]]; then
      brew install lua;
  fi
- if [[ $LUA == 51 ]]; then
      brew install lua51;
  fi
- if [[ $LUA == JIT ]]; then
      brew install luajit;
  fi
- brew list | grep "cmake" || brew install cmake
- brew list | grep "ninja" || brew install ninja
- if [[ $MEMCHECK == TRUE ]]; then
      brew install valgrind;
  fi
- if [[ $USE_TCMALLOC == TRUE ]]; then brew install google-perftools; fi
- if [[ $UPLOAD ]]; then
      brew install python; pip install dropbox;
  fi

before_script:
- mkdir -p build
- cd build
- cmake -DIGNORE_SORRY=ON -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DTCMALLOC=${TCMALLOC} -DMULTI_THREAD=${MULTI_THREAD} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} ../src -G Ninja
- cd ..

# Remark:
# Added flag "-E leanslowtests" to ctest when in Debug mode
# Reason: one of the tests was producing a stackoverflow.

script:
- cd build
- OSX_VERSION=`sw_vers | grep 'ProductVersion:' | grep -o '[0-9]*\.[0-9]*\.[0-9]*'`
- SITE=${OSX_VERSION}@Travis
- if [[ $CMAKE_BUILD_TYPE == RELEASE ]]; then
      BUILD_TYPE=Release;
  else
      BUILD_TYPE=Debug;
      CTEST_FLAGS="-E leanslowtests";
  fi
- LUA_VERSION=LUA_${LUA}
- BUILD_NAME=${TRAVIS_BRANCH}_${COMPILER}_${BUILD_TYPE}_${LUA_VERSION}
- if [[ $TCMALLOC == ON ]]; then
      BUILD_NAME=${BUILD_NAME}_TC;
  fi;
- CONFIG_FILE=DartConfiguration.tcl
- sed -i "" "s/^Site:.*/Site:$SITE/" $CONFIG_FILE
- sed -i "" "s/BuildName:.*/BuildName:$BUILD_NAME/" $CONFIG_FILE
- ctest -D ExperimentalConfigure
- sed -i "" "s/^Site:.*/Site:$SITE/" $CONFIG_FILE
- sed -i "" "s/BuildName:.*/BuildName:$BUILD_NAME/" $CONFIG_FILE
- ctest -D ExperimentalBuild -VV
- yes "C" | ctest -D ExperimentalTest ${CTEST_FLAGS} -VV | ../script/demangle_cpptype.py;
- if [[ $PACKAGE == TRUE ]]; then
      ninja package;
  fi
- cd ..

after_script:
- if [[ $UPLOAD ]]; then
      UPLOAD_DIR=bin;
      BINARY=lean_${UPLOAD};
      NOW=`TZ='America/Los_Angeles' date +"%Y%m%d_%H%M"`;
      GIT_COMMIT=`git log HEAD~ --oneline -n 1 | cut -d ' ' -f 1`;
      OS=osx;
      LUA_VERSION=LUA_${LUA};
      ARCHIVE_BINARY=${NOW}_${TRAVIS_BRANCH}_${GIT_COMMIT}_${OS}_${CMAKE_CXX_COMPILER}_${BUILD_TYPE}_${LUA_VERSION};
      if [[ $TCMALLOC == ON ]]; then
          ARCHIVE_BINARY=${ARCHIVE_BINARY}_tcmalloc;
      fi;
      mkdir ${UPLOAD_DIR};
      if [[ $PACKAGE == TRUE ]]; then
          cp -v build/lean*.zip ${UPLOAD_DIR}/;
      fi;
      cp -v build/shell/lean ${UPLOAD_DIR}/${BINARY};
      tar cvfz ${UPLOAD_DIR}/${ARCHIVE_BINARY}.tar.gz ${UPLOAD_DIR}/${BINARY};
      script/dropbox_upload.py --srcpath ${UPLOAD_DIR} --destpath /Public/${UPLOAD_DIR} --dropbox-token ${DROPBOX_KEY};
  fi
- cd build
- if [[ $MEMCHECK == TRUE ]]; then
     yes "C" | ctest -D ExperimentalMemCheck -VV | ../script/demangle_cpptype.py;
  fi
- if [[ $PUSH_TO_CDASH == TRUE ]]; then
    GIT_COMMIT=`git log HEAD~ --oneline -n 1 | cut -d ' ' -f 1`;
    GIT_SUBJECT=`git log HEAD~ --oneline -n 1 | cut -d ' ' -f 2-`;
    GIT_SUBJECT=${GIT_SUBJECT//\"/\\\"};
    GIT_SUBJECT=${GIT_SUBJECT//,/\,};
    GIT_SUBJECT=$(echo -e $(printf '%q' "$GIT_SUBJECT"));
    find Testing -name "*.xml" -exec sed -i "" "s,Generator=\".*\",Generator=\"${GIT_COMMIT}###${GIT_SUBJECT}\"," {} ";";
    find Testing \( -name "LastTest_*.log" -o -name "LastDynamicAnalysis_*.log" \) -exec sh -c 'TMP=`mktemp /tmp/ctesttmp_XXXX`; ../script/demangle_cpptype.py {} > $TMP; mv -v $TMP {}' ";";
    ctest -D ExperimentalSubmit;
  fi
- cd ..

notifications:
  email:
    recipients:
    - lean-build@googlegroups.com
    on_success: change
    on_failure: always