/*
 * Copyright (C) 2016 The Android Open Source Project
 *
 * Licensed 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.
 */

// If you change this file, you should also change the settings gradle inside
// the sub project.

def inAppToolkitProject = rootProject.name == "app-toolkit"
def supportRoot
if (inAppToolkitProject) {
    supportRoot = new File(rootProject.projectDir, "..").getCanonicalFile()
} else {
    supportRoot = rootProject.projectDir
}

println "support root:${supportRoot}"

include ':arch:runtime'
project(':arch:runtime').projectDir = new File(supportRoot, "app-toolkit/runtime")

include ':arch:common'
project(':arch:common').projectDir = new File(supportRoot, "app-toolkit/common")

include ':paging:common'
project(':paging:common').projectDir = new File(supportRoot, "paging/common")

include ":paging:runtime"
project(':paging:runtime').projectDir = new File(supportRoot, "paging/runtime")

include ':paging:integration-tests:testapp'
project(':paging:integration-tests:testapp').projectDir = new File(supportRoot, "paging/integration-tests/testapp")

include ':arch:core-testing'
project(':arch:core-testing').projectDir = new File(supportRoot, "app-toolkit/core-testing")

include ':lifecycle:livedata-core'
project(':lifecycle:livedata-core').projectDir = new File(supportRoot, "lifecycle/livedata-core")

include ':lifecycle:livedata'
project(':lifecycle:livedata').projectDir = new File(supportRoot, "lifecycle/livedata")

include ':lifecycle:viewmodel'
project(':lifecycle:viewmodel').projectDir = new File(supportRoot, "lifecycle/viewmodel")

include ':lifecycle:extensions'
project(':lifecycle:extensions').projectDir = new File(supportRoot, "lifecycle/extensions")

include ':lifecycle:extensions'
project(':lifecycle:extensions').projectDir = new File(supportRoot, "lifecycle/extensions")

include ':lifecycle:reactivestreams'
project(':lifecycle:reactivestreams').projectDir = new File(supportRoot, "lifecycle/reactivestreams")

include ':lifecycle:runtime'
project(':lifecycle:runtime').projectDir = new File(supportRoot, "lifecycle/runtime")

include ':lifecycle:common'
project(':lifecycle:common').projectDir = new File(supportRoot, "lifecycle/common")

include ':lifecycle:common-java8'
project(':lifecycle:common-java8').projectDir = new File(supportRoot, "lifecycle/common-java8")

include ':lifecycle:compiler'
project(':lifecycle:compiler').projectDir = new File(supportRoot, "lifecycle/compiler")

include ':lifecycle:integration-tests:testapp'
project(':lifecycle:integration-tests:testapp').projectDir = new File(supportRoot, "lifecycle/integration-tests/testapp")

include ':room:common'
project(':room:common').projectDir = new File(supportRoot, "room/common")

include ':room:runtime'
project(':room:runtime').projectDir = new File(supportRoot, "room/runtime")

include ':room:compiler'
project(':room:compiler').projectDir = new File(supportRoot, "room/compiler")

include ':room:migration'
project(':room:migration').projectDir = new File(supportRoot, "room/migration")

include ':persistence:db'
project(':persistence:db').projectDir = new File(supportRoot, "persistence/db")

include ":persistence:db-framework"
project(':persistence:db-framework').projectDir = new File(supportRoot, "persistence/db-framework")

include ":room:testing"
project(':room:testing').projectDir = new File(supportRoot, "room/testing")

include ":room:rxjava2"
project(':room:rxjava2').projectDir = new File(supportRoot, "room/rxjava2")

include ':room:integration-tests:testapp'
project(':room:integration-tests:testapp').projectDir = new File(supportRoot, "room/integration-tests/testapp")

include ':room:integration-tests:kotlintestapp'
project(':room:integration-tests:kotlintestapp').projectDir = new File(supportRoot, "room/integration-tests/kotlintestapp")

/////////////////////////////
//
// External
//
/////////////////////////////
if (inAppToolkitProject) {
    File externalRoot = new File(supportRoot, '../../external')

    includeBuild new File(externalRoot, 'doclava')

    includeBuild new File(externalRoot, 'jdiff')
}
