#!/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["openstacksdk"]=$DEST/openstacksdk
GITDIR["os-client-config"]=$DEST/os-client-config
GITDIR["osc-lib"]=$DEST/osc-lib
GITDIR["osc-placement"]=$DEST/osc-placement
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["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-resource-classes"]=$DEST/os-resource-classes
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 -bindep "$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 "openstacksdk"
    _install_lib_from_source "osc-lib"
    _install_lib_from_source "osc-placement"
    _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 "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-resource-classes"
    _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:
