blob: d264754bae211daf3b2b21f46c6cabbb9893ce84 [file] [log] [blame]
#!/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 and potential conflicts in the user's shell environment.
#
# 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.
#
# For potential issues in the user's shell initialization script
# (such as ~/.bashrc), this script will also run a shell checkup
# script (for example, devshell/lib/bashrc_checkup.sh)
# under the user's bash "${SHELL}" (if different from /bin/bash),
# load the user's shell settings, and check for any known issues.
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
source "${FUCHSIA_DIR}/scripts/devshell/lib/style.sh" || exit $?
source "${FUCHSIA_DIR}/scripts/devshell/lib/common_term_styles.sh" || exit $?
fx-config-read || exit $?
dr_mac() {
local status=0
# TODO actually check the need for this
info "Make sure you've run \`xcode-select install\`"
details << EOF
A common issue with Fuchsia development on macOS is needing to
re-run the \`xcode-select install\` step. The typical symptom is
failure to find system C or C++ headers after a reboot or update.
See $(link 'https://fuchsia.googlesource.com/docs/getting_started.md#macos')
for more details.
EOF
return ${status}
}
dr_linux() {
local status=0
return ${status}
}
shell_checkup() {
local status=0
# If the user is using bash, their default interactive "${SHELL}"
# may differ from the script-standard "/bin/bash", and their ~/.bashrc
# may depend on features of their shell that are not present in
# /bin/bash, so launch the shell checkup script using "${SHELL}".
#
# For example, since MacOS includes only bash version 3, Homebrew users
# may install bash 4 in /usr/local/bin/bash, and then select
# bash 4 by adding it to /etc/shells, and running the "chsh" command.
local shell_type="$(basename "${SHELL}")"
case "${shell_type}" in
bash)
local current_debug_flag="$(echo $-|sed -n 's/.*x.*/-x/p')"
eval "${SHELL}" "${current_debug_flag}" "${FUCHSIA_DIR}/scripts/devshell/lib/bashrc_checkup.sh" || status=$?
;;
*)
info "No shell checkup for ${shell_type}"
;;
esac
return ${status}
}
dr_all() {
local status=0
shell_checkup || status=$?
return ${status}
}
main() {
local status=0
case $(uname) in
Darwin)
dr_mac || status=$?
;;
Linux)
dr_linux || status=$?
;;
esac
dr_all || status=$?
return ${status}
}
main "$@" || exit $?