# Constants and definitions
LW_VENDOR="likewise"
LW_PRODUCT="storage"
LW_VERSION_MAJOR="6"
LW_VERSION_MINOR="3"
LW_VERSION_MICRO="0"
LW_VERSION="$LW_VERSION_MAJOR.$LW_VERSION_MINOR.$LW_VERSION_MICRO"

LW_ALL_BUNDLED="\
    krb5 \
    cyrus-sasl \
    openldap \
    libiconv \
    libuuid \
    sqlite \
    openssl \
    curl \
    libedit"

LW_ALL_COMPONENTS="\
    lwbase \
    lwmsg \
    lwreg \
    lwadvapi \
    netlogon \
    lwio \
    libschannel \
    dcerpc \
    lsass \
    lwdns \
    srvsvc \
    lwnetapi \
    lwtools \
    lwsm \
    sysauth \
    lwupgrade \
    samba-interop \
    mod_auth_kerb"

# Build stuff
PROJECT_NAME="platform"
MODULES="core compiler chain-autotools moonunit pkg-config likewise dceidl fortune gnu-debuginfo darwin-debuginfo"
SUBDIRS="$LW_ALL_BUNDLED $LW_ALL_COMPONENTS config package"

defaults()
{
    PREFIX="/opt/likewise"
    SYSCONFDIR="/etc/likewise"
    LOCALSTATEDIR="/var"
    DATADIR="/opt/likewise/share"
    DOCDIR="/opt/likewise/share/doc"
    MANDIR="/usr/share/man"

    if [ "`uname`" = "Darwin" ]
    then
        LOCALSTATEDIR="/private/var"
        SYSCONFDIR="/private/etc/likewise"
    fi

    # Fail on warnings
    MK_FAIL_ON_WARN=yes
}

option()
{
    default_bundled="libuuid krb5 cyrus-sasl openldap sqlite openssl curl libedit"

    [ "$MK_HOST_OS" != "linux" ] && default_bundled="libiconv $default_bundled"

    mk_option \
        OPTION=samba-interop \
        PARAM="yes|no" \
        VAR="LW_SAMBA_INTEROP" \
        DEFAULT="no" \
        HELP="Build samba interop libraries"

    [ "$LW_SAMBA_INTEROP" = "yes" ] && default_bundled="$default_bundled libtdb"

    mk_option \
        OPTION=lw-bundled \
        PARAM='...' \
        VAR=LW_BUNDLED \
        DEFAULT="$default_bundled" \
        HELP="Use bundled 3rd-party components"

    _LW_BUNDLED="$LW_BUNDLED"

    unset LW_BUNDLED

    for i in ${_LW_BUNDLED}
    do
        case "$i" in
            +*)
                [ -z "$LW_BUNDLED" ] && LW_BUNDLED="$default_bundled"
                LW_BUNDLED="${LW_BUNDLED:+$LW_BUNDLED }${i#+}"
                ;;
            -*)
                [ -z "$LW_BUNDLED" ] && LW_BUNDLED="$default_bundled"
                lw_filter_bundled "${i#-}"
                ;;
            *)
                LW_BUNDLED="${LW_BUNDLED:+$LW_BUNDLED }${i}"
                ;;
        esac
    done

    mk_option \
        OPTION="build-revision" \
        PARAM="rev" \
        VAR="LW_BUILD_REVISION" \
        DEFAULT="" \
        HELP="Build revision"

    mk_option \
        OPTION="build-id" \
        PARAM="id" \
        VAR="LW_BUILD_ID" \
        DEFAULT="" \
        HELP="Build id"
}

configure()
{
    mk_msg "configuring $LW_VENDOR $LW_PRODUCT $LW_VERSION"
    mk_msg "using bundled libraries: $LW_BUNDLED"

    for comp in ${LW_ALL_BUNDLED}
    do
        lw_use_bundled "$comp" || mk_skip_subdir "$comp"
    done

    [ "$LW_SAMBA_INTEROP" = "yes" ] || mk_skip_subdir "samba-interop"
}

make()
{
    bundled_targets=""

    for comp in ${LW_ALL_BUNDLED}
    do
        lw_use_bundled "$comp" && bundled_targets="$bundled_targets @$comp"
    done

    mk_target \
        TARGET="@bundled" \
        DEPS="$bundled_targets"

    mk_add_phony_target "$result"

    lw_print_features
}

lw_filter_bundled()
{
    __needle="$1"
    set -- ${LW_BUNDLED}
    unset LW_BUNDLED
    for i
    do
        if [ "$i" != "$__needle" ]
        then
            LW_BUNDLED="${LW_BUNDLED:+$LW_BUNDLED }${i}"
        fi
    done
}


lw_use_bundled()
{
    for _dep in ${LW_BUNDLED}
    do
        [ "$_dep" = "$1" ] && return 0
    done

    return 1
}

lw_print_feature()
{
    printf "%-30s%s\n" "$1:" "$2"
}

lw_print_features()
{
    printf -- "\n---\nConfiguration summary\n---\n\n"

    set -- ${MK_HOST_ISAS}

    if [ "$#" -gt 1 -a "$MK_HOST_MULTIARCH" != "none" ]
    then
        lw_print_feature "Host system" "$MK_HOST_OS ($MK_HOST_MULTIARCH $MK_HOST_ISAS)"
    else
        lw_print_feature "Host system" "$MK_HOST_OS ($MK_HOST_ISAS)"
    fi

    lw_print_feature "Bundled libraries" "$LW_BUNDLED"
    lw_print_feature "Threadpool backend" "$LWBASE_THREADPOOL_BACKEND"
    lw_print_feature "FUSE support" "$LWIO_FUSE_ENABLED"
    lw_print_feature "EA support" "$LWIO_EA_ENABLED"
    lw_print_feature "Samba interoperability" "$LW_SAMBA_INTEROP"

    types=""

    mk_rpm_enabled && types="$types rpm"
    mk_deb_enabled && types="$types deb"

    [ -z "$types" ] && types="none"

    lw_print_feature "Package types" "${types# }"
}
