#compdef mkdir gmkdir zf_mkdir

local curcontext="$curcontext" state line expl args variant ret=1
typeset -A opt_args

args=(
  '(-m --mode)'{-m,--mode=}'[set permission mode]:numeric mode'
  '(-p --parents)'{-p,--parents}'[make parent directories as needed]'
  '(-)*: :->directories'
)

case "$OSTYPE" in
  linux*)
    args+=(
      '(-Z --context)'{-Z,--context=}'[set SELinux context]:SELinux context'
    )
  ;;
esac

_pick_variant -r variant gnu=gnu zsh='\(eval\)' $OSTYPE --help



case $variant in
  gnu|freebsd*|dragonfly*)
    args+=(
      '(-v --verbose)'{-v,--verbose}'[print message for each created directory]'
    )
  ;|
  gnu)
    args+=(
      '(- :)--help[display help information]'
      '(- :)--version[display version information]'
    )
  ;;
  zsh) # remove all options
    args=( '*: :->directories' )
  ;;
  *) # non-GNU: remove long options
    args=( ${${${args:#(|*\))--*}//--[^ )]#/}/\( #\)/} )
  ;;
esac

_arguments -C -s $args && ret=0

case "$state" in
  directories)
    _wanted directories expl \
      'parent directory (alternatively specify name of directory)' \
      _path_files -/ && ret=0
  ;;
esac

return ret
