+(put 'static-defconst 'lisp-indent-function 'defun)
+(defmacro static-defconst (symbol initvalue &optional docstring)
+ "Like `defconst', but evaluate INITVALUE at compile time.
+
+The variable SYMBOL can be referred at both compile time and run time."
+ (let ((value (eval initvalue)))
+ (eval (` (defconst (, symbol) (quote (, value)) (, docstring))))
+ (` (defconst (, symbol) (quote (, value)) (, docstring)))))
+
+(defmacro static-cond (&rest clauses)
+ "Like `cond', but evaluate CONDITION part of each clause at compile time."
+ (while (and clauses
+ (not (eval (car (car clauses)))))
+ (setq clauses (cdr clauses)))
+ (if clauses
+ (cons 'progn (cdr (car clauses)))))
+