/*
 * 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.
 */
pluginManagement {
    plugins {
        id "com.google.protobuf" version "${protobufPluginVersion}"
        id "org.nosphere.apache.rat" version "${apcheRatPluginVersion}"
        id "com.github.johnrengelman.shadow" version "${shadowPluginVersion}"
        id "com.github.hierynomus.license" version "${licenseGradlePluginVersion}"
        id "com.github.spotbugs" version "${spotbugsPlugin}"
    }
}

rootProject.name = 'bookkeeper'

include(':bookkeeper-benchmark',
        ':bookkeeper-tools',
        ':bookkeeper-tools-framework',
        ':bookkeeper-tools-ledger',
        ':bookkeeper-tools-perf',
        ':bookkeeper-tools-stream',
        'bookkeeper-common',
        'bookkeeper-common-allocator',
        'bookkeeper-dist-all',
        'bookkeeper-dist-bkctl',
        'bookkeeper-dist-server',
        'bookkeeper-dist-src',
        'bookkeeper-dist:storage-bench',
        'bookkeeper-http:http-server',
        'bookkeeper-http:vertx-http-server',
        'bookkeeper-proto',
        'bookkeeper-server',
        'shaded:bookkeeper-server-shaded',
        'shaded:bookkeeper-server-tests-shaded',
        'bookkeeper-stats',
        'bookkeeper-stats-providers:prometheus-metrics-provider',
        'bookkeeper-stats-providers:codahale-metrics-provider',
        'buildtools',
        'circe-checksum',
        'circe-checksum:src:main:circe',
        'cpu-affinity',
        'cpu-affinity:src:main:affinity',
        'dev:release',
        'microbenchmarks',
        'shaded:distributedlog-core-shaded',
        'stats:utils',
        'stream:api',
        'stream:clients:java:all',
        'stream:clients:java:base',
        'stream:clients:java:kv',
        'stream:common',
        'stream:distributedlog:common',
        'stream:distributedlog:core',
        'stream:distributedlog:protocol',
        'stream:proto',
        'stream:server',
        'stream:statelib',
        'stream:storage:api',
        'stream:storage:impl',
        'stream:tests-common',
        'tests:integration-tests-base',
        'tests:integration-tests-topologies',
        'tests:integration-tests-utils',
        'tests:integration:cluster',
        'tests:integration:smoke',
        'tests:integration:standalone',
        'tools:framework')

project(':bookkeeper-tools').projectDir = file('tools/all')
project(':bookkeeper-tools-framework').projectDir = file('tools/framework')
project(':bookkeeper-tools-ledger').projectDir = file('tools/ledger')
project(':bookkeeper-tools-stream').projectDir = file('tools/stream')
project(':bookkeeper-tools-perf').projectDir = file('tools/perf')
project(':bookkeeper-dist-all').projectDir = file('bookkeeper-dist/all')
project(':bookkeeper-dist-bkctl').projectDir = file('bookkeeper-dist/bkctl')
project(':bookkeeper-dist-server').projectDir = file('bookkeeper-dist/server')
project(':bookkeeper-dist-src').projectDir = file('bookkeeper-dist')
include 'stream:perf'
findProject(':stream:perf')?.name = 'perf'
