#!/bin/bash
#
# lib/oslo
#
# Functions to install libraries from git
#
# We need this to handle the fact that projects would like to use
# pre-released versions of oslo libraries.

# Dependencies:
#
# - ``functions`` file

# ``stack.sh`` calls the entry points in this order:
#
# - install_libraries

# Save trace setting
_XTRACE_LIB_LIBRARIES=$(set +o | grep xtrace)
set +o xtrace


# Defaults
# --------
GITDIR["automaton"]=$DEST/automaton
GITDIR["castellan"]=$DEST/castellan
GITDIR["cliff"]=$DEST/cliff
GITDIR["cursive"]=$DEST/cursive
GITDIR["debtcollector"]=$DEST/debtcollector
GITDIR["futurist"]=$DEST/futurist
GITDIR["os-client-config"]=$DEST/os-client-config
GITDIR["osc-lib"]=$DEST/osc-lib
GITDIR["oslo.cache"]=$DEST/oslo.cache
GITDIR["oslo.concurrency"]=$DEST/oslo.concurrency
GITDIR["oslo.config"]=$DEST/oslo.config
GITDIR["oslo.context"]=$DEST/oslo.context
GITDIR["oslo.db"]=$DEST/oslo.db
GITDIR["oslo.i18n"]=$DEST/oslo.i18n
GITDIR["oslo.log"]=$DEST/oslo.log
GITDIR["oslo.messaging"]=$DEST/oslo.messaging
GITDIR["oslo.middleware"]=$DEST/oslo.middleware
GITDIR["oslo.policy"]=$DEST/oslo.policy
GITDIR["oslo.privsep"]=$DEST/oslo.privsep
GITDIR["oslo.reports"]=$DEST/oslo.reports
GITDIR["oslo.rootwrap"]=$DEST/oslo.rootwrap
GITDIR["oslo.serialization"]=$DEST/oslo.serialization
GITDIR["oslo.service"]=$DEST/oslo.service
GITDIR["oslo.utils"]=$DEST/oslo.utils
GITDIR["oslo.versionedobjects"]=$DEST/oslo.versionedobjects
GITDIR["oslo.vmware"]=$DEST/oslo.vmware
GITDIR["osprofiler"]=$DEST/osprofiler
GITDIR["pycadf"]=$DEST/pycadf
GITDIR["python-openstacksdk"]=$DEST/python-openstacksdk
GITDIR["stevedore"]=$DEST/stevedore
GITDIR["taskflow"]=$DEST/taskflow
GITDIR["tooz"]=$DEST/tooz

# Non oslo libraries are welcomed below as well, this prevents
# duplication of this code.
GITDIR["os-brick"]=$DEST/os-brick
GITDIR["os-traits"]=$DEST/os-traits

# Support entry points installation of console scripts
OSLO_BIN_DIR=$(get_python_exec_prefix)


# Functions
# ---------

function _install_lib_from_source {
    local name=$1
    if use_library_from_git "$name"; then
        git_clone_by_name "$name"
        setup_dev_lib "$name"
    fi
}

# install_oslo - install libraries that oslo needs
function install_oslo {
    install_libs
}

# install_libs() - Install additional libraries that we need and want
# on all environments. Some will only install here if from source,
# others will always install.
function install_libs {
    _install_lib_from_source "automaton"
    _install_lib_from_source "castellan"
    _install_lib_from_source "cliff"
    _install_lib_from_source "cursive"
    _install_lib_from_source "debtcollector"
    _install_lib_from_source "futurist"
    _install_lib_from_source "osc-lib"
    _install_lib_from_source "os-client-config"
    _install_lib_from_source "oslo.cache"
    _install_lib_from_source "oslo.concurrency"
    _install_lib_from_source "oslo.config"
    _install_lib_from_source "oslo.context"
    _install_lib_from_source "oslo.db"
    _install_lib_from_source "oslo.i18n"
    _install_lib_from_source "oslo.log"
    _install_lib_from_source "oslo.messaging"
    _install_lib_from_source "oslo.middleware"
    _install_lib_from_source "oslo.policy"
    _install_lib_from_source "oslo.privsep"
    _install_lib_from_source "oslo.reports"
    _install_lib_from_source "oslo.rootwrap"
    _install_lib_from_source "oslo.serialization"
    _install_lib_from_source "oslo.service"
    _install_lib_from_source "oslo.utils"
    _install_lib_from_source "oslo.versionedobjects"
    _install_lib_from_source "oslo.vmware"
    _install_lib_from_source "osprofiler"
    _install_lib_from_source "pycadf"
    _install_lib_from_source "python-openstacksdk"
    _install_lib_from_source "stevedore"
    _install_lib_from_source "taskflow"
    _install_lib_from_source "tooz"
    # installation of additional libraries
    #
    # os-traits for nova
    _install_lib_from_source "os-brick"
    _install_lib_from_source "os-traits"
    #
    # python client libraries we might need from git can go here
    _install_lib_from_source "python-barbicanclient"


    # etcd (because tooz does not have a hard dependency on these)
    #
    # NOTE(sdague): this is currently a work around because tooz
    # doesn't pull in etcd3.
    pip_install etcd3
    pip_install etcd3gw
}

# Restore xtrace
$_XTRACE_LIB_LIBRARIES

# Tell emacs to use shell-script-mode
## Local variables:
## mode: shell-script
## End:
