#compdef ldd

if _pick_variant gnu='(GNU|EGLIBC)' solaris --version; then
  args=(
    '(- *)--version[display version information]'
    '(- *)--help[display help information]'
    '(-v --verbose)'{-v,--verbose}'[include symbol versioning information]'
    '(-d --data-relocs)'{-d,--data-relocs}'[perform data relocations and report missing objects]'
    '(-r --function-relocs)'{-r,--function-relocs}'[perform data/function relocations and report missing objects]'
    '(-u --unused)'{-u,--unused}'[display any unused objects]'
  )
else
  args=(
    -s
    '(-r)-d[check immediate references]'
    '(-d)-r[check immediate and lazy references]'
    '-u[display any unused objects]'
    '-U[display any unreferenced, or unused dependencies]'
    '-e[set specified environment variable]:environment variable:(LD_PRELOAD LD_LIBRARY_PATH LD_RUN_PATH LD_DEBUG LD_DEBUG_OUTPUT LD_NOCONFIG LD_NOAUXFLTR)'
    '-f[check for insecure executable]'
    '-i[display order of execution of initialization sections]'
    '-L[enable lazy loading]'
    '-l[force immediate processing of any filters]'
    '-s[display search path used]'
    '-v[displays all dependency relationships]'
  )
fi

_arguments $args \
  '*: : _alternative
    "executables:executable:_files -g \^\*.so\(\-\*\)"
      "shared-objects:shared object:_files -g \*.so\(-.\)"'
