Replacing this function in package.el allows for correct generation of the <package>-autoloads.el file for packages that have .el files in multiple subdirectories. The only thing changed is the line with 'apply' in it. It ignores symlinks to directories in case there are any. It is a simple change. I hope you like it.
This is important for larger packages such as my forthcoming Hyperbole package which includes a 2nd directory of code.
(defun package-generate-autoloads (name pkg-dir)
(let* ((auto-name (format "%s-autoloads.el" name))
;;(ignore-name (concat name "-pkg.el"))
(generated-autoload-file (expand-file-name auto-name pkg-dir))
;; Silence `autoload-generate-file-autoloads'.
(apply #'update-directory-autoloads pkg-dir
(delq nil (mapcar (lambda (f) (and (file-directory-p f)
(not (file-symlink-p f)) f))
(directory-files pkg-dir t "[a-zA-Z].*" nil))))
(let ((buf (find-buffer-visiting generated-autoload-file)))
(when buf (kill-buffer buf)))