#!/bin/bash
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

### Run various checks to determine the health of a Fuchsia checkout.

## usage: fx doctor

# The goal of this script is to detect common issues with a Fuchsia
# checkout. For example, on OS X the xcode command line tool
# installation often lapses. Ensuring that `xcode select --install` is
# run as part of a checkout or build is problematic: the step involves
# manual input. Detecting that it needs to be run, however, is
# perfectly mechanizable.

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"/lib/vars.sh
fx-config-read

function dr-mac {
    # TODO actually check the need for this
    echo "A common issue with Fuchsia development on macOS is needing to"
    echo "re-run the \`xcode-select install\` step. The typical symptom is"
    echo "failure to find system C or C++ headers after a reboot or update."
    return
}

function dr-linux {
    return
}

function dr {
    return
}

function main {
    case $(uname) in
        Darwin)
            dr-mac
            ;;
        Linux)
            dr-linux
            ;;
    esac
    dr
    return
}

main "$@"
