| #!/bin/bash | |
| # Copyright 2020 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. | |
| function list_optional_features { | |
| echo \ | |
| "fxtest_auto_publishes_packages" \ | |
| "incremental" \ | |
| "incremental_legacy" \ | |
| "incremental_new" \ | |
| "legacy_fastboot" | |
| } | |
| # Return 0 (true) if the default of the given feature is enabled, 1 (false) otherwise. | |
| function is_feature_enabled_by_default { | |
| case "$1" in | |
| "fxtest_auto_publishes_publishes") return 0;; | |
| "incremental") return 0 ;; | |
| "incremental_legacy") return 1 ;; | |
| "incremental_new") return 1 ;; | |
| "legacy_fastboot") return 1 ;; | |
| esac | |
| # global default is enabled | |
| return 0 | |
| } | |
| _FX_INDENT=" " | |
| function help_optional_feature { | |
| local h=() | |
| case "$1" in | |
| "fxtest_auto_publishes_packages") | |
| h=( | |
| "Enables 'fx test' to automatically publish packages to the package" | |
| "repository server." | |
| ) | |
| ;; | |
| "incremental_legacy") | |
| h=( | |
| "Packages are published and served incrementally by 'fx serve'" | |
| "as they are built using the legacy incremental publisher. Explicit" | |
| "'fx build' is not required for most operations." | |
| ) | |
| ;; | |
| "incremental" | "incremental_new") | |
| h=( | |
| "Packages are published and served incrementally by 'fx serve'" | |
| "as they are built. Explicit 'fx build' is not required for most operations." | |
| ) | |
| ;; | |
| "legacy_fastboot") | |
| h=( | |
| "Device provisioning based on legacy fastboot instead of ffx." | |
| ) | |
| ;; | |
| esac | |
| printf "${_FX_INDENT}${_FX_INDENT}%s\n" "${h[@]}" | |
| } | |
| function help_optional_features { | |
| for el in $(list_optional_features); do | |
| local default current | |
| is_feature_enabled_by_default $el && default="enabled" || default="disabled" | |
| is_feature_enabled $el && current="enabled" || current="disabled" | |
| echo "${_FX_INDENT}${el}" | |
| echo "${_FX_INDENT}${_FX_INDENT}(default=$default, current=$current)" | |
| help_optional_feature $el | |
| done | |
| } | |
| function warn_if_feature_enabled { | |
| local feature | |
| feature="$1" | |
| if is_feature_enabled "$feature"; then | |
| echo "Feature \"$feature\" is enabled." | |
| fi | |
| } | |
| function is_valid_feature { | |
| local el feature | |
| feature="$1" | |
| for el in $(list_optional_features); do | |
| if [[ "${el}" == "${feature}" ]]; then | |
| return 0 | |
| fi | |
| done | |
| return 1 | |
| } | |
| function get_fx_flags_non_default_features { | |
| local out=() | |
| for el in $(list_optional_features); do | |
| local default=false | |
| local current=false | |
| is_feature_enabled_by_default $el && default=true | |
| is_feature_enabled $el && current=true | |
| if $default && ! $current; then | |
| out+=("--disable=$el") | |
| elif ! $default && $current; then | |
| out+=("--enable=$el") | |
| fi | |
| done | |
| echo "${out[@]}" | |
| } | |
| function get_disable_feature_env_name { | |
| local feature | |
| feature="$1" | |
| echo "FUCHSIA_DISABLED_${feature}" | |
| } | |
| # Return code 0 (true) if the given feature is enabled, 1 (false) otherwise. | |
| function is_feature_enabled { | |
| local feature | |
| feature="$1" | |
| if ! is_valid_feature "${feature}"; then | |
| return 1 | |
| fi | |
| local disabled_env | |
| disabled_env="$(get_disable_feature_env_name "${feature}")" | |
| # if ${disabled_env} is not set, use the default | |
| if [[ -z ${!disabled_env+x} ]]; then | |
| is_feature_enabled_by_default "$feature" | |
| else | |
| test "${!disabled_env}" != "1" | |
| fi | |
| } | |
| function get_env_vars_non_default_features { | |
| local out=() | |
| for el in $(list_optional_features); do | |
| local default=false | |
| local current=false | |
| is_feature_enabled_by_default $el && default=true | |
| is_feature_enabled $el && current=true | |
| if $default && ! $current; then | |
| out+=("$(get_disable_feature_env_name $el)=1") | |
| elif ! $default && $current; then | |
| out+=("$(get_disable_feature_env_name $el)=0") | |
| fi | |
| done | |
| echo "${out[@]}" | |
| } |