| _fx_set__product_board() { | |
| compset -P "*." | |
| if [[ "$IPREFIX" = *. ]]; then | |
| # complete board | |
| compadd ${(u)$(echo ${fuchsia_dir}/boards/*.gni(N:t:r) ${fuchsia_dir}/vendor/*/boards/*.gni(N:t:r))} | |
| else | |
| # complete product followed by a dot | |
| compadd -S . ${(u)$(echo ${fuchsia_dir}/products/*.gni(N:t:r) ${fuchsia_dir}/vendor/*/products/*.gni(N:t:r))} | |
| fi | |
| } | |
| _fx_set__package_caching_policy() { | |
| test "${ninja_file}" -nt "$1" | |
| } | |
| # complete comma separated bundles labels | |
| _fx_set__with() { | |
| local -a package_patterns=( "//bundles/*" "//bundles/packages/*" ) | |
| for vendor in ${fuchsia_dir}/vendor/*(N/); do | |
| package_patterns+=( "//vendor/${vendor}/bundles" "//vendor/${vendor}/packages" ) | |
| done | |
| # apply a default caching policy if one isn't configured | |
| local cache_policy | |
| zstyle -s ":completion:${curcontext}:" cache-policy cache_policy | |
| zstyle ":completion:${curcontext}:" cache-policy \ | |
| ${cache_policy:-_fx_set__package_caching_policy} | |
| # if this file is newer than the cache file then the cache is stale | |
| local ninja_file=${fuchsia_dir}/${fuchsia_build_dir}/build.ninja | |
| local -a fx_packages | |
| if ! _retrieve_cache fx_packages ; then | |
| fx_packages=( $(${fuchsia_dir}/prebuilt/third_party/gn/${prebuilt_os}/gn ls ${fuchsia_dir}/${fuchsia_build_dir} ${package_patterns[@]} ) ) | |
| _store_cache fx_packages fx_packages | |
| fi | |
| compset -P "*," | |
| compadd -q -S "," ${fx_packages} | |
| } | |
| _gn_args_caching_policy() { | |
| test ${ninja_file} -nt $1 | |
| } | |
| _fx_set__gn_args() { | |
| if [ -z ${fuchsia_build_dir} ]; then | |
| return | |
| fi | |
| # apply a default caching policy if one isn't configured | |
| local cache_policy | |
| zstyle -s ":completion:${curcontext}:" cache-policy cache_policy | |
| zstyle ":completion:${curcontext}:" cache-policy \ | |
| ${cache_policy:-_gn_args_caching_policy} | |
| # if this file is newer than the cache file then the cache is stale | |
| local ninja_file=${fuchsia_dir}/${fuchsia_build_dir}/build.ninja | |
| local -a gn_args | |
| if ! _retrieve_cache gn_args ; then | |
| gn_args=( $(${fuchsia_dir}/prebuilt/third_party/gn/${prebuilt_os}/gn args ${fuchsia_dir}/${fuchsia_build_dir} --list --short|sed -e 's/ .*//') ) | |
| _store_cache gn_args gn_args | |
| fi | |
| echo $gn_args | |
| } | |
| _fx_set__gn_arg_equals() { | |
| # complete the list of gn args with an = suffix | |
| compadd -S = (${fx_set_gn_args}) | |
| } | |
| _fx_set__gn_arg_name() { | |
| # complete the list of gn args | |
| compadd (${fx_set_gn_args}) | |
| } | |
| # TODO: | |
| # - complete --variant | |
| # - complete --fuzz-with | |
| # arguments to fx set | |
| _arguments '1:arch:{_fx_set__product_board}' \ | |
| '(:)--with[Packages to include in the universe]:packages:_fx_set__with' \ | |
| '(:)--with-base[Additional packages to include in the base]:packages:_fx_set__with' \ | |
| '(:)*--variant[Pass a select_variant GN arg]: ' \ | |
| '(:)*--fuzz-with[A sanitizer name to fuzz with]: ' \ | |
| '(:)*--args[Arguments for GN gen]:args:{_fx_set___gn_arg_equals}' \ | |
| '(:)--help-args[Display GN argument documentation]:arg:{_fx_set__gn_arg_name}' \ | |
| "(:)--ccache[Use ccache]" \ | |
| "(:)--no-ccache[Don't use ccache]" \ | |
| '(:)--ide[Generate files for an IDE]:ide:(eclipse vs vs2013 vs2015 vs2017 xcode qcreator json)' \ | |
| '(:)--release[Release build]' | |