#!/bin/bash
#   Copyright 2016 RIFT.IO Inc
#
#   Licensed 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.
# 
# script to start a build. This is run inside a container
#
# 24 June 2016 -- Jeremy Mordkoff -- Genesis

HERE=$(realpath $(dirname $0))
OSM_JENKINS=$(dirname $HERE)
. $OSM_JENKINS/common/all_funcs
export OSM_MDG=riftware
OSM_load_config


if [ -d riftware ]; then
	INFO "reusing existing workspace"
	cd riftware
	git pull 
else
	INFO "install pre-requisites"
    yum install -y yum-utils curl 
    curl -o /etc/yum.repos.d/release.repo http://buildtracker.riftio.com/repo_file/fc20/OSM/
    yum install -y --nogpgcheck rw.tools-container-tools rw.tools-scripts
    /usr/rift/container_tools/mkcontainer  --modes build --internet --latest --repofile /usr/rift/container_tools/riftware.repo


	INFO "cloning MDG riftware from $OSM_GIT_URL/riftware"
    # these were missing once, so just to be safe, install them again here
    yum -y install cmake wget lcov
	git clone $OSM_GIT_URL/riftware
	cd riftware
fi

./rift-shell -r -- make rw.ext 
RC=$?

if [ $RC == 0 ]; then
    ./rift-shell -r -- make -j16 
    RC=$?
fi

INFO "done RC = $RC"
exit $RC



