# 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.

dist: bionic
language: java
jdk: oraclejdk8
arch: arm64

addons:
    apt:
      packages:
        - ant
        - build-essential
        - automake
        - autoconf
        - tar
        - libssl-dev
        - subversion
        - git
        - libtool-bin

install:
    - ARCH=`uname -p`
    - echo $ARCH
    - JDK_X64="https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u242-b08/OpenJDK8U-jdk_x64_linux_hotspot_8u242b08.tar.gz"
    - JDK_ARM64="https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u232-b09/OpenJDK8U-jdk_aarch64_linux_hotspot_8u232b09.tar.gz"
    - if test "X$ARCH" = "Xaarch64"; then JDK_URL=$JDK_ARM64; else JDK_URL=$JDK_X64; fi
    - wget -q $JDK_URL && tar xzf OpenJDK*.tar.gz
    - mv jdk8* jdk
    - export JAVA_HOME=`pwd`/jdk
    - wget -q https://mirrors.netix.net/apache/ant/binaries/apache-ant-1.10.9-bin.tar.gz && tar xzf apache-ant-*-bin.tar.gz
    - export ANT_HOME=`pwd`/apache-ant-1.10.9
    - export PATH="$JAVA_HOME/bin:$ANT_HOME/bin:$PATH"
    - java -version
    - ant -version
    - rm -rf $HOME/tmp
    - export CURR_PWD=`pwd`
    - svn co -q https://svn.apache.org/repos/asf/apr/apr/branches/1.6.x/ $HOME/tmp/apr
    - cd $HOME/tmp/apr
    - ./buildconf
    - ./configure --prefix=$HOME/tmp/apr-build
    - make
    - make install
    - export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/tmp/apr-build/lib"
    - git clone -q https://github.com/apache/tomcat-native.git $HOME/tmp/tomcat-native
    - cd $HOME/tmp/tomcat-native/native
    - sh buildconf --with-apr=$HOME/tmp/apr
    - ./configure --with-apr=$HOME/tmp/apr --with-java-home=$JAVA_HOME --with-ssl=yes --prefix=$HOME/tmp/tomcat-native-build
    - make
    - make install
    - cd $CURR_PWD
    - yes | cp build.properties.default build.properties
    - echo >> build.properties
    - echo "test.threads=4" >> build.properties
    - echo "test.relaxTiming=true" >> build.properties
    - echo "test.excludePerformance=true" >> build.properties
    - echo "test.openssl.path=/dev/null/openssl" >> build.properties
    - echo "test.apr.loc=$HOME/tmp/tomcat-native-build/lib" >> build.properties


script:
    - ant -q clean
    - travis_wait 60 "./.travis/antTest.sh"

after_failure:
    - tail -n 5000 ant-test.log
    - tail -n 5000 test-failures.log
    - ls -laR $HOME/tomcat-build-libs

notifications:
    email:
      - dev@tomcat.apache.org
