Backport changes:
[elisp/wanderlust.git] / WL-MK
diff --git a/WL-MK b/WL-MK
index 09cb8f7..0227883 100644 (file)
--- a/WL-MK
+++ b/WL-MK
@@ -3,8 +3,6 @@
 ;;;
 ;;; Original by OKUNISHI Fujikazu <fuji0924@mbox.kyoto-inet.or.jp>
 ;;; Modified by Yuuichi Teranishi <teranisi@gohome.org>
-;;;
-;;; Time-stamp: <2000-03-30 15:55:13 teranisi>
 
 ;;;;;;;;;;;;;;;;;;;;;   DO NOT EDIT THIS FILE   ;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;     INTERNAL USE ONLY     ;;;;;;;;;;;;;;;;;;;;;
 (defvar DOCDIR "./doc")
 (defvar ICONDIR "./etc/icons")
 (defvar UTILSDIR "./utils")
-(defvar SASLDIR "./utils/sasl/lisp")
 (defvar WL_PREFIX "wl")
 (defvar ELMO_PREFIX "wl")
 
 (defvar COMPRESS-SUFFIX-LIST '("" ".gz" ".Z" ".bz2"))
 
 (defvar wl-install-utils nil
-  "if Non-nil, install `wl-utils-modules'.")
-(defvar wl-install-sasl nil
-  "if Non-nil, install sasl utilities.")
+  "If Non-nil, install `wl-utils-modules'.")
 
 ;;; INFO
 (defconst wl-ja-info "wl-ja.info")
 (defconst wl-en-info "wl.info")
 (defconst wl-en-texi "wl.texi")
 
-(defvar wl-info-lang "ja"
+(defvar wl-info-lang (if (featurep 'mule) '("ja" "en") '("en"))
   "The language of info file (\"ja\" or \"en\").")
 
-;; for Nemacs (dirty!)
-(or (fboundp 'file-executable-p)
-    (fset 'file-executable-p 'file-exists-p))
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 \f
 (require 'cl)
 (condition-case () (require 'custom) (error nil))
 ;; for wl-vars.el
 (unless (and (fboundp 'defgroup)
-             (fboundp 'defcustom)
-             ;; ignore broken module
-             (not (featurep 'tinycustom)))
+            (fboundp 'defcustom)
+            ;; ignore broken module
+            (not (featurep 'tinycustom)))
+  (when (and (boundp 'emacs-major-version)
+            (= emacs-major-version 19)
+            (>= emacs-minor-version 29))
+    (message "%s" "
+  Warning: You don't seem to have \"new custom\" package installed.
+           See README file of APEL package for more information.
+"))
   (require 'backquote)
   (defmacro defgroup (&rest args))
   (defmacro defcustom (symbol value &optional doc &rest args)
     (let ((doc (concat "*" (or doc ""))))
-      (` (defvar (, symbol) (, value) (, doc)))))
-  )
+      (` (defvar (, symbol) (, value) (, doc))))))
+
+(load "bytecomp" nil t)
+
+(unless (fboundp 'byte-compile-file-form-custom-declare-variable)
+  ;; Bind defcustom'ed variables.
+  (put 'custom-declare-variable 'byte-hunk-handler
+       'byte-compile-file-form-custom-declare-variable)
+  (defun byte-compile-file-form-custom-declare-variable (form)
+    (if (memq 'free-vars byte-compile-warnings)
+       (setq byte-compile-bound-variables
+             (cons (nth 1 (nth 1 form)) byte-compile-bound-variables)))
+    form))
+
+(condition-case nil
+    (char-after)
+  (wrong-number-of-arguments
+   ;; Optimize byte code for `char-after'.
+   (put 'char-after 'byte-optimizer 'byte-optimize-char-after)
+   (defun byte-optimize-char-after (form)
+     (if (null (cdr form))
+        '(char-after (point))
+       form))))
 
 (setq byte-compile-warnings '(free-vars unresolved callargs redefine))
 
 ;; v18, v19
-(if (or (boundp 'MULE)
-       (fboundp 'nemacs-version))
+(if (boundp 'MULE)
     (setq max-lisp-eval-depth 400))
 
+;; FIXME: it is currently needed to byte-compile with Emacs 21.
+(setq recursive-load-depth-limit nil)
+
 (condition-case () (require 'easymenu) (error nil))
 
 (defvar config-wl-package-done nil)
 
 (defun config-wl-package-subr ()
   (unless config-wl-package-done
-  (setq config-wl-package-done t)
-  (setq load-path (cons (expand-file-name ".") load-path))
-  (setq load-path (cons (expand-file-name WLDIR)
-                       (cons (expand-file-name ELMODIR) load-path)))
-  (setq wl-icon-dir (expand-file-name ICONDIR))
-;;; load custom file if exists.
-  (load "./WL-CFG" t nil t)
-;;; load-path
-  (if wl-install-utils
-      (setq load-path (cons (expand-file-name UTILSDIR) load-path)))
-  (if wl-install-sasl
-      (setq load-path (cons (expand-file-name SASLDIR) load-path)))
-  (require 'install)
-  (load "./WL-ELS")
-  (condition-case ()
-      (require 'mime-setup)
-    (error (error "No MIME module was detected. Please install SEMI or tm.")))
-  (if wl-use-semi
-      (princ (concat "\nUse SEMI" 
-                    (if wl-use-luna " with LUNA\n" " without LUNA\n")))
-    (princ "\nUse tm.\n"))))
+    (setq config-wl-package-done t)
+    (setq load-path (cons (expand-file-name ".") load-path))
+    (setq load-path (cons (expand-file-name WLDIR)
+                         (cons (expand-file-name ELMODIR) load-path)))
+    ;; load custom file if exists.  `WL-CFG.el' override for committer.
+    (load "./WL-CFG" t nil nil)
+    ;; load-path
+    (if wl-install-utils
+       (setq load-path (cons (expand-file-name UTILSDIR) load-path)))
+    (require 'install)
+    (load "./WL-ELS" nil nil t)
+    ;; product.el version check
+    (require 'product)
+    (if (not (fboundp 'product-version-as-string))
+       (error "Please install new APEL.  See INSTALL or INSTALL.ja"))
+    ;; smtp.el version check.
+    (require 'smtp)
+    (if (not (fboundp 'smtp-send-buffer))
+       (error "Please install new FLIM.  See INSTALL or INSTALL.ja"))
+    (condition-case ()
+       (require 'mime-setup)
+      (error (error "Cannot load `mime-setup'.  Please install SEMI")))))
+
+(defun config-wl-pixmap-dir (&optional packagedir)
+  "Examine pixmap directory where icon files should go."
+  (let ((pixmap-dir (car command-line-args-left)))
+    (defvar PIXMAPDIR
+      (if (string= pixmap-dir "NONE")
+         (if packagedir
+             (expand-file-name "etc/wl/" packagedir)
+           (expand-file-name "wl/icons/" data-directory))
+       pixmap-dir)))
+  (if PIXMAPDIR
+      (princ (format "PIXMAPDIR is %s\n" PIXMAPDIR)))
+  (setq command-line-args-left (cdr command-line-args-left)))
 
 (defun config-wl-package ()
   (config-wl-package-subr)
     (if (string= elispdir "NONE")
        (defvar LISPDIR (install-detect-elisp-directory))
       (defvar LISPDIR elispdir)))
-  (princ (format "LISPDIR is %s\n\n" LISPDIR))
-  (setq command-line-args-left (cdr command-line-args-left)))
-
+  (princ (format "LISPDIR is %s\n" LISPDIR))
+  (setq command-line-args-left (cdr command-line-args-left))
+  ;; PIXMAPDIR check.
+  (config-wl-pixmap-dir)
+  (princ "\n"))
+
+(defun update-version ()
+  "Update version number of documents."
+  (config-wl-package)
+  (load-file "elmo/elmo-version.el")
+  (let ((version (mapconcat
+                 'number-to-string
+                 (product-version (product-find 'elmo-version))
+                 ".")))
+    (princ (concat "Update version number to " version "\n"))
+    ;; generate version.tex
+    (with-temp-buffer
+      (insert "\\def\\versionnumber{" version "}\n")
+      (write-region (point-min) (point-max) (expand-file-name
+                                            "version.tex" "doc")))
+    ;; generate version.texi
+    (with-temp-buffer
+      (insert "@set VERSION " version "\n")
+      (write-region (point-min) (point-max) (expand-file-name
+                                            "version.texi" "doc")))))
+
+(defun test-wl ()
+  "Run test suite for developer."
+  (config-wl-package)
+  (require 'lunit)
+  (let ((files (directory-files "tests" t "^test-.*\\.el$"))
+       (suite (lunit-make-test-suite)))
+    (while files
+      (if (file-regular-p (car files))
+         (progn
+           (load-file (car files))
+           (lunit-test-suite-add-test
+            suite (lunit-make-test-suite-from-class
+                   (intern (file-name-sans-extension
+                            (file-name-nondirectory (car files))))))))
+      (setq files (cdr files)))
+    (lunit suite)))
+
+(defun check-wl ()
+  "Check user environment.  Not for developer."
+  (config-wl-package)
+  (require 'lunit)
+  (let ((files (directory-files "tests" t "^check-.*\\.el$"))
+       (suite (lunit-make-test-suite)))
+    (while files
+      (if (file-regular-p (car files))
+         (progn
+           (load-file (car files))
+           (lunit-test-suite-add-test
+            suite (lunit-make-test-suite-from-class
+                   (intern (file-name-sans-extension
+                            (file-name-nondirectory (car files))))))))
+      (setq files (cdr files)))
+    (lunit suite)))
 
 (defun wl-scan-source (path)
   (let (ret)
 
 
 (defun compile-wl-package ()
-  ;; For nemacs byte compiler's strange behavior(?).
   (config-wl-package)
-  (if (fboundp 'nemacs-version)
-      (load (expand-file-name "wl.el" WLDIR)))
   (mapcar
    '(lambda (x)
       (compile-elisp-modules (cdr x) (car x)))
    modules-alist))
 
+(defun install-wl-icons ()
+  (if (not (file-directory-p PIXMAPDIR))
+      (make-directory PIXMAPDIR t))
+  (let* ((case-fold-search t)
+        (icons (directory-files ICONDIR t
+                                (cond ((featurep 'xemacs)
+                                       "\\.x[bp]m$")
+                                      ((and (boundp 'emacs-major-version)
+                                            (>= emacs-major-version 21))
+                                       "\\.img$\\|\\.x[bp]m$")
+                                      ((featurep 'mule)
+                                       "\\.img$\\|\\.xbm$"))))
+        icon dest)
+    (while icons
+      (setq icon (car icons)
+           icons (cdr icons)
+           dest (expand-file-name (file-name-nondirectory icon) PIXMAPDIR))
+      (princ (format "%s -> %s\n"
+                    (file-name-nondirectory icon)
+                    (substring (file-name-directory dest) 0 -1)))
+      (copy-file icon dest t))))
+
 (defun install-wl-package ()
   (compile-wl-package)
   (let ((wl-install-dir (expand-file-name WL_PREFIX LISPDIR))
                               (if (string= (car x) ELMODIR)
                                   elmo-install-dir
                                 wl-install-dir)))
-     modules-alist)))
+     modules-alist))
+  (if PIXMAPDIR
+      (install-wl-icons)))
 
 
 (defun uninstall-wl-package ()
                                          LISPDIR))
        (elmo-install-dir (expand-file-name ELMO_PREFIX
                                            LISPDIR)))
-    (wl-uninstall (wl-scan-source (list WLDIR UTILSDIR SASLDIR))
+    (wl-uninstall (wl-scan-source (list WLDIR UTILSDIR))
                  wl-install-dir)
     (wl-uninstall (wl-scan-source (list ELMODIR))
-                 elmo-install-dir)
-    ))
+                 elmo-install-dir))
+  (if PIXMAPDIR
+      (let* ((case-fold-search t)
+            (icons (directory-files PIXMAPDIR t "\\.x[bp]m$"))
+            icon)
+       (while icons
+         (setq icon (car icons)
+               icons (cdr icons))
+         (if (and (file-exists-p icon)
+                  (file-writable-p icon))
+             (progn
+               (princ (format "%s was uninstalled.\n" icon))
+               (delete-file icon)))))))
 
 
 (defun config-wl-package-xmas ()
   (if (not (featurep 'xemacs))
-      (error "This directive is only for XEmacs."))
+      (error "This directive is only for XEmacs"))
   (config-wl-package-subr)
   ;; PACKAGEDIR check.
   (let (package-dir)
                       (setq dirs (cdr dirs)))
                     dir)))
           (defvar PACKAGEDIR package-dir)))
-    (princ (format "PACKAGEDIR is %s\n\n" PACKAGEDIR))
-    (setq command-line-args-left (cdr command-line-args-left))))
+    (princ (format "PACKAGEDIR is %s\n" PACKAGEDIR))
+    (setq command-line-args-left (cdr command-line-args-left)))
+  ;; PIXMAPDIR check.
+  (config-wl-pixmap-dir PACKAGEDIR)
+  (princ "\n"))
 
 ;; from SEMI-MK
 (defun compile-wl-package-xmas ()
     (or (file-exists-p INFODIR)
        (make-directory INFODIR t))
     ;; copy xpm files
-    (mapcar '(lambda (x) 
-              (let* ((src-file-nondirectory (file-name-nondirectory x))
-                     (dst-file (expand-file-name src-file-nondirectory
-                                                 DATADIR)))
-                (princ (format "%s->%s\n"
-                               x ; fullpath
-                               dst-file))
-                (copy-file x dst-file t)))
-           (directory-files "etc/icons" t "xpm"))
+    (install-wl-icons)
+
     (mapcar '(lambda (x)
-             (install-elisp-modules (cdr x) (car x) LISPDIR))
-                  modules-alist)
+              (install-elisp-modules (cdr x) (car x) LISPDIR))
+           modules-alist)
     ;; WL-AUTOLOAD-MODULES
     (install-elisp-modules WL-AUTOLOAD-MODULES WLDIR LISPDIR)
-    ;; 
+    ;;
     (wl-texinfo-format)
     (wl-texinfo-install)))
 
     (or (file-newer-than-file-p (expand-file-name infofile DOCDIR)
                                (expand-file-name texifile DOCDIR))
        (let (obuf beg)
+         ;; Support old texinfmt.el
+         (require 'ptexinfmt (expand-file-name "ptexinfmt.el" UTILSDIR))
          (find-file (expand-file-name texifile DOCDIR))
          (setq obuf (current-buffer))
-         ;; texinfmt.el 2.37 or earlier can't format @direntry
-         (require 'texinfmt)
-         (unless (fboundp 'texinfo-format-direntry)
-           (goto-char (point-min))
-           (when (re-search-forward "^@direntry" nil t)
-             (replace-match "@ifinfo\nSTART-INFO-DIR-ENTRY"))
-           (when (re-search-forward "^@end direntry" nil t)
-             (replace-match "END-INFO-DIR-ENTRY\n@end ifinfo"))
-           (set-buffer-modified-p nil))
          ;; We can't know file names if splitted.
          (texinfo-format-buffer t)
          ;; Emacs20.2's default is 'raw-text-unix.
        )))
 
 (defun wl-texinfo-format ()
-  (unless INFODIR
-    (setq INFODIR (wl-detect-info-directory)))
-  (cond ((listp wl-info-lang)
+  (wl-detect-info-directory)
+  (cond ((null wl-info-lang))
+       ((listp wl-info-lang)
         (mapcar 'wl-texinfo-format-file wl-info-lang))
        ((stringp wl-info-lang)
         (wl-texinfo-format-file wl-info-lang))))
 
 (defun wl-texinfo-install-file (lang)
   (let ((infofile (symbol-value (intern (format "wl-%s-info" lang)))))
-    (install-file infofile DOCDIR INFODIR)))
+    (install-file infofile DOCDIR INFODIR nil 'overwrite)))
 
 (defun wl-texinfo-install ()
-  (cond ((listp wl-info-lang)
+  (cond ((null wl-info-lang))
+       ((listp wl-info-lang)
         (mapcar 'wl-texinfo-install-file wl-info-lang))
        ((stringp wl-info-lang)
         (wl-texinfo-install-file wl-info-lang))))
 
 (defun wl-primary-info-file ()
   "Get primary info file (for wl-detect-info-directory)."
-  (cond
-   ((listp wl-info-lang)
-    (let ((wl-info-lang (car wl-info-lang)))
-      (wl-primary-info-file)))
-   ((stringp wl-info-lang)
-    (symbol-value (intern (format "wl-%s-info" wl-info-lang))))))
+  (cond ((null wl-info-lang))
+       ((listp wl-info-lang)
+        (let ((wl-info-lang (car wl-info-lang)))
+          (wl-primary-info-file)))
+       ((stringp wl-info-lang)
+        (symbol-value (intern (format "wl-%s-info" wl-info-lang))))))
 
 (defun wl-detect-info-directory ()
   (config-wl-package-subr)
-  (if (fboundp 'nemacs-version)
-      (error "Cannot format info on Nemacs. Please use another formatter."))
   ;; INFODIR check.
-  (require 'info)
-  (let ((infodir (car command-line-args-left))
-       (info (wl-primary-info-file))
-       previous INFODIR)
-    (setq INFODIR
-         (if (string= infodir "NONE")
-             (if (setq previous
-                       (exec-installed-p info Info-directory-list
-                                         COMPRESS-SUFFIX-LIST))
-                 ;;(progn
-                 ;;(condition-case nil (delete-file previous))
-                 (directory-file-name (file-name-directory previous));)
-               (car Info-directory-list))
-           infodir))
-    (setq command-line-args-left (cdr command-line-args-left))
-    (princ (format "INFODIR is %s\n\n" INFODIR))
-    INFODIR))
+  (when wl-info-lang
+    (require 'info)
+    (if (fboundp 'info-initialize)
+       (info-initialize))
+    (unless INFODIR
+      (let ((infodir (car command-line-args-left))
+           (info (wl-primary-info-file))
+           previous)
+       (setq INFODIR
+             (if (string= infodir "NONE")
+                 (if (setq previous
+                           (exec-installed-p info Info-directory-list
+                                             COMPRESS-SUFFIX-LIST))
+                     (directory-file-name (file-name-directory previous))
+                   (car Info-directory-list))
+               infodir))
+       (setq command-line-args-left (cdr command-line-args-left))))
+    (princ (format "INFODIR is %s\n\n" INFODIR))))
 
 (defun install-wl-info ()
   (wl-texinfo-format)