#!/bin/sh
:;exec emacs --script "$0" "$@"

(defun missing-packages (recipes packages)
  "Show elements of RECIPES that are no in PACKAGES."
  (let (missing)
    (while recipes
      (let ((recipe (car recipes))
            (package (car packages)))
        (cond
         ((or (not package) (string< recipe package))
          (setq missing (cons recipe missing)))
         ((string< package recipe)
          (error "Package has no recipe: %s" package))
         (t (setq packages (cdr packages)))))
      (setq recipes (cdr recipes)))
    (reverse missing)))

(defun package-sans-version (fn)
  "Strip the date and extension from FN."
  (string-match "\\(.*\\)-[0-9]+\\.[0-9]+\\.\\(el$\\|tar$\\)" fn)
  (match-string 1 fn))

(princ
    (mapconcat 'identity
      (missing-packages
       (sort (directory-files "recipes/" nil "^[^.].*") 'string<)
       (sort (delete-dups 
	       (mapcar 
		   'package-sans-version 
                   (directory-files "packages/" nil "^[^.].*\\\(el$\\\|tar$\\\)"))) 
             'string<)) "\n"))
(princ "\n")