#!/bin/sh
#
# 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.
#


#
# Install C++ build and python tools to the standard places in a Unix buld
# WARNING: Will destroy any existing installation!
#

# NOTE: build must be configured like this:
# ../qpid/cpp/configure --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64
# NOTE: Must run as root.

usage() {
    cat <<EOF
Usage $0 -pc <cpp-build-directory>
-p <prefix> : Prefix to install python
-s : Skip C++ installation
EOF

    exit 1
}

fail() { echo $*; exit 1; }

while getopts "ps" opt; do
    case $opt in
        p) PY_PREFIX="--prefix $OPTARG";;
	s) SKIP_CPP=1;;
	*) usage;;
    esac
done
shift `expr $OPTIND - 1`
BUILD=$1
SRC=$(dirname $0)/..

# Install python
cd $SRC  || fail "No such directory: $SRC"
for d in python tools extras/qmf; do
    (
	cd $d || fail "No such directory: $(pwd)/$d"
	./setup.py install || fail Python install failed in $(pwd)
    )
done

if test $SKIP_CPP; then exit; fi

test -n "$BUILD" || { echo "No build directory."; usage; }
test -d "$BUILD" || fail "No such directory: $BUILD"
SRC=$(dirname $BUILD)

    # Install C++
cd $BUILD
make -j1 install || fail "C++ install failed in $BUILD"

# NOTE: setup.py does not uninstall, but you can get a list of files installed with:
# setup.py install --record <output-file>


