#compdef wc gwc

local args

args=(
  '(-c --bytes)'{-c,--bytes}'[print byte counts]'
  '(-C -m --chars)'{-m,--chars}'[print character counts]'
  '(-w --words)'{-w,--words}'[print word counts]'
  '(-l --lines)'{-l,--lines}'[print line counts]'
)

if _pick_variant gnu='(GNU|uutils)' unix --version; then
  args+=(
    '(*)--files0-from=[read NUL-terminated file list from specified file]:file:_files'
    '(-L --max-line-length)'{-L,--max-line-length}'[print longest line lengths]'
    '--total=[when to print a line with total counts]:when:(auto always only never)'
  )
else
  args=( -A "-*" "${(@)args:#(|\(*\))(|\*)--*}" )
  case $OSTYPE in
    freebsd*|netbsd*|darwin*) args+=( '-L[print longest line lengths]' ) ;;
    openbsd*) args+=( '-h[human readable: use unit suffixes]' ) ;;
    solaris*) args+=( ${${(M)args:#*-m\[*}//-m\[/-C\[} ) ;;
  esac
fi

_arguments -s -S $args '*:file:_files'
