docs: def _find_remove_targets(name=None,
                           version=None,
                           pkgs=None,
                           normalize=True,
                           ignore_epoch=False,
                           **kwargs):
      '''
      Inspect the arguments to pkg.removed and discover what packages need to
      be removed. Return a dict of packages to remove.
      '''
      if __grains__['os'] == 'FreeBSD':
          kwargs['with_origin'] = True
      cur_pkgs = __salt__['pkg.list_pkgs'](versions_as_list=True, **kwargs)
      if pkgs:
          to_remove = _repack_pkgs(pkgs, normalize=normalize)
  
          if not to_remove:
              # Badly-formatted SLS
              return {'name': name,
                      'changes': {},
                      'result': False,
                      'comment': 'Invalidly formatted pkgs parameter. See '
                                 'minion log.'}
      else:
          _normalize_name = \
              __salt__.get('pkg.normalize_name', lambda pkgname: pkgname)
          to_remove = {_normalize_name(name): version}
  
      version_spec = False
      # Find out which packages will be targeted in the call to pkg.remove
      # Check current versions against specified versions
      targets = []
      problems = []
      for pkgname, pkgver in six.iteritems(to_remove):
          # FreeBSD pkg supports `openjdk` and `java/openjdk7` package names
          origin = bool(re.search('/', pkgname))
  
          if __grains__['os'] == 'FreeBSD' and origin:
              cver = [k for k, v in six.iteritems(cur_pkgs) if v['origin'] == pkgname]
          else:
              cver = cur_pkgs.get(pkgname, [])
  
          # Package not installed, no need to remove
          if not cver:
              continue
          # No version specified and pkg is installed
          elif __salt__['pkg_resource.version_clean'](pkgver) is None:
              targets.append(pkgname)
              continue
          version_spec = True
          try:
              if _fulfills_version_string(cver, pkgver, ignore_epoch=ignore_epoch):
                  targets.append(pkgname)
              else:
                  log.debug(
                      'Current version (%s) did not match desired version '
                      'specification (%s), will not remove', cver, pkgver
                  )
          except CommandExecutionError as exc:
              problems.append(exc.strerror)
              continue
  
      if problems:
          return {'name': name,
                  'changes': {},
                  'result': False,
                  'comment': ' '.join(problems)}
  
      if not targets:
          # All specified packages are already absent
          msg = 'All specified packages{0} are already absent'.format(
              ' (matching specified versions)' if version_spec else ''
          )
          return {'name': name,
                  'changes': {},
                  'result': True,
                  'comment': msg}
  
      return targets