-(static-unless (and (fboundp 'md5) (subrp (symbol-function 'md5)))
- (eval-and-compile
- (require 'path-util)
- (if (module-installed-p 'md5)
- (progn
- (autoload 'md5 "md5")
- (fset 'pop3-md5 'md5))
-
- (defvar pop3-md5-program "md5"
- "*Program to encode its input in MD5.")
-
- (defun pop3-md5 (string)
- (with-temp-buffer
- (insert string)
- (call-process-region (point-min) (point-max)
- (or shell-file-name "/bin/sh")
- t (current-buffer) nil
- "-c" pop3-md5-program)
- ;; The meaningful output is the first 32 characters.
- ;; Don't return the newline that follows them!
- (buffer-substring (point-min) (+ (point-min) 32))))
- )))
+;; When this file is being compiled in the Gnus (not T-gnus) source
+;; tree, `md5' might have been defined in w3/md5.el, ./lpath.el or one
+;; of some other libraries and `md5' will accept only 3 arguments. We
+;; will deceive the byte-compiler not to say warnings.
+(eval-and-compile
+ (if (fboundp 'eval-when)
+ ;; `eval-when' might not be provided when loading .el file.
+ (eval-when 'compile
+ (let ((def (assq 'md5 byte-compile-function-environment)))
+ (if def
+ (setcdr def '(lambda (object &optional start end
+ coding-system noerror)))
+ (setq byte-compile-function-environment
+ (cons '(md5 . (lambda (object &optional start end
+ coding-system noerror)))
+ byte-compile-function-environment)))))))
+
+;; Note that `pop3-md5' should never encode a given string to use for
+;; the apop authentication.
+(eval-and-compile
+ (if (fboundp 'md5)
+ (if (condition-case nil
+ (md5 "\
+Check whether the 4th argument CODING-SYSTEM is allowed"
+ nil nil 'binary)
+ (error nil))
+ ;; Emacs 21 or XEmacs 21
+ ;; (md5 OBJECT &optional START END CODING-SYSTEM NOERROR)
+ (defun pop3-md5 (string)
+ (md5 string nil nil 'binary))
+ ;; The reason why the program reaches here:
+ ;; 1. XEmacs 20 is running and the built-in `md5' doesn't
+ ;; allow the 4th argument.
+ ;; 2. `md5' has been defined by one of some lisp libraries.
+ ;; 3. This file is being compiled in the Gnus source tree,
+ ;; and `md5' has been defined in lpath.el.
+ (defalias 'pop3-md5 'md5))
+ ;; The lisp function will be provided by FLIM or other libraries.
+ (autoload 'md5 "md5")
+ (defalias 'pop3-md5 'md5)))