+ (` (defvar (, symbol) (, value) (, doc))))
+
+(defvar-maybe frame-background-mode nil
+ "*The brightness of the background.
+Set this to the symbol dark if your background color is dark, light if
+your background is light, or nil (default) if you want Emacs to
+examine the brightness for you. However, the old Emacsen might not
+examine the brightness, so you should set this value definitely.")
+
+(defun-maybe-cond custom-declare-face (face spec doc &rest args)
+ "Like `defface', but FACE is evaluated as a normal argument.
+Note that this function does not have the full specification; DOC or
+ARGS are ignored and some keywords are ignored in SPEC except for
+`:foreground', `:background', `:bold', `:italic' and `:underline'.
+It does nothing if FACE has been defined."
+ ((fboundp 'make-face)
+ (or (find-face face)
+ (let ((colorp (and window-system (x-display-color-p)))
+ display atts req item match done)
+ (make-face face)
+ (while (and spec (not done))
+ (setq display (car (car spec))
+ atts (car (cdr (car spec)))
+ spec (cdr spec))
+ (cond ((consp display)
+ (setq match t)
+ (while (and display match)
+ (setq req (car (car display))
+ item (car (cdr (car display)))
+ display (cdr display))
+ (cond ((eq 'type req)
+ (setq match (or (eq window-system item)
+ (and (not window-system)
+ (eq 'tty item)))))
+ ((eq 'class req)
+ (setq match (or (and colorp
+ (eq 'color item))
+ (and (not colorp)
+ (memq item
+ '(grayscale mono))))))
+ ((eq 'background req)
+ (setq match (eq (or frame-background-mode 'light)
+ item)))))
+ (setq done match))
+ ((eq t display)
+ (setq done t))))
+ (if done
+ (let ((alist
+ '((:foreground . set-face-foreground)
+ (:background . set-face-background)
+ (:bold . set-face-bold-p)
+ (:italic . set-face-italic-p)
+ (:underline . set-face-underline-p)))
+ function)
+ (while atts
+ (if (setq function (cdr (assq (car atts) alist)))
+ (funcall function face (car (cdr atts))))
+ (setq atts (cdr (cdr atts))))))
+ face)))
+ (t
+ nil))
+
+(defmacro-maybe defface (face spec doc &rest args)