Subject: bug#15108: [Patch] Updated package dependencies, again

From: Tom Willemse <[email-masked]>
Date: Wed, 11 Dec 2013 23:52:20 +0100

Hey,

Another update of my patch. Fixes two cases the last one missed or
messed up:

;; Package-Requires: ()
;; Package-Requires: ((foo))

The first is the same as not specifying any `Package-Requires' or
leaving it empty. The second is the equivalent of any one of:

;; Package-Requires: foo
;; Package-Requires: (foo)
;; Package-Requires: ((foo "0"))

Any other situations I might have to take into consideration?

=== modified file 'lisp/emacs-lisp/package.el'
*** lisp/emacs-lisp/package.el	2013-12-11 21:15:12 +0000
--- lisp/emacs-lisp/package.el	2013-12-11 22:29:35 +0000
***************
*** 1104,1109 ****
--- 1104,1124 ----
  
  (declare-function lm-homepage "lisp-mnt" (&optional file))
  
+ (defun package--prepare-dependencies (deps)
+   "Turn DEPS into an acceptable list of dependencies.
+ 
+ Any parts missing a version string get a default version string
+ of \"0\" (meaning any version) and an appropriate level of lists
+ is wrapped around any parts requiring it."
+   (cond
+    ((null deps) nil)
+    ((symbolp deps) `((,deps "0")))
+    ((stringp (cadr deps)) `(,deps))
+    ((and (listp deps) (listp (car deps))
+          (null (cdar deps)))
+     `((,(caar deps) "0")))
+    (t (mapcar (lambda (dep) (if (symbolp dep) `(,dep "0") dep)) deps))))
+ 
  (defun package-buffer-info ()
    "Return a `package-desc' describing the package in the current buffer.
  
***************
*** 1135,1141 ****
  	 "Package lacks a \"Version\" or \"Package-Version\" header"))
        (package-desc-from-define
         file-name pkg-version desc
!        (if requires-str (package-read-from-string requires-str))
         :kind 'single
         :url homepage))))
  
--- 1150,1158 ----
  	 "Package lacks a \"Version\" or \"Package-Version\" header"))
        (package-desc-from-define
         file-name pkg-version desc
!        (if requires-str
!            (package--prepare-dependencies
!             (package-read-from-string requires-str)))
         :kind 'single
         :url homepage))))