| _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}' \ |
| '(:)--auto-dir[Act like `fx --dir out/PRODUCT.BOARD set ...`]' \ |
| '(:)--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}' \ |
| '(:)--goma[Use GOMA]' \ |
| "(:)--no-goma[Don't use GOMA]" \ |
| "(:)--no-ensure-goma[Don't make sure GOMA is running]" \ |
| '(:)--goma-dir[GOMA directory to use]:directory:_files -/' \ |
| "(:)--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]' |
| |