# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
language: c

os:
  - osx

osx_image: xcode8.3

compiler:
  - clang

before_install:
  - brew --version
  - "brew update 2>&1 > /tmp/brew-update.txt || (cat /tmp/brew-update.txt && false)"
  - brew list --versions

install:
  - brew reinstall
      Gsasl
      boost
      bison
      ccache
      cpanm
      libevent
      maven
      openssl
      python
      snappy
      apr
      apr-util
  - brew reinstall
      protobuf
      protobuf-c
      thrift@0.9
      glog
      lz4
      libiconv
      jsoncpp
      hadoop
  - brew outdated libyaml || brew upgrade libyaml
  - git clone https://github.com/json-c/json-c.git
  - pushd json-c
  - git reset --hard json-c-0.12.1-20160607
  - sh autogen.sh
  - ./configure
  - make
  - make install
  - popd
  - rm -rf ./json-c
  - brew link --force thrift@0.9
  - ln -s /usr/local/opt/apr/libexec/lib/libapr-1.dylib /usr/local/lib/
  - ln -s /usr/local/opt/apr/libexec/bin/apr-1-config /usr/local/bin/apr-1-config
  - ln -s /usr/local/opt/openssl/lib/libcrypto.dylib /usr/local/lib/
  - ln -s /usr/local/opt/openssl/lib/libssl.dylib /usr/local/lib/
  - ln -s /usr/local/opt/openssl/bin/openssl /usr/local/bin/openssl
  - ln -s /usr/local/opt/libiconv/lib/libiconv.dylib /usr/local/lib/
  - ln -s /usr/local/opt/libiconv/lib/libcharset.dylib /usr/local/lib/
  - ln -s /usr/local/opt/libiconv/bin/iconv /usr/local/bin/iconv
  - cp /usr/local/opt/libiconv/include/* /usr/local/include/
  - brew outdated maven   || brew upgrade maven
  - brew install iproute2mac
  - brew list --versions
  - sudo curl https://bootstrap.pypa.io/get-pip.py |sudo python
  - sudo pip install pycrypto
  - sudo pip install cogapp
  - sudo cpanm install JSON
  

before_script:
  - mvn apache-rat:check
  - export DEPENDENCY_INSTALL_PREFIX=/usr/local/opt/openssl
  - cd $TRAVIS_BUILD_DIR
  - ./configure

script:
  - sudo install -o $USER -d /usr/local/hawq
  - make -j$(sysctl -n hw.ncpu)
  - make feature-test
  - make feature-test-clean

branches:
  except:
    - legacy
