;;; -*- Emacs-Lisp -*- ;;; WL-MK for byte-compile, install, uninstall ;;; ;;; Original by OKUNISHI Fujikazu ;;; Modified by Yuuichi Teranishi ;;;;;;;;;;;;;;;;;;;;; DO NOT EDIT THIS FILE ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;; INTERNAL USE ONLY ;;;;;;;;;;;;;;;;;;;;; ;;; Code (defvar WLDIR "./wl") (defvar ELMODIR "./elmo") (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.") ;;; INFO (defconst wl-ja-info "wl-ja.info") (defconst wl-ja-texi "wl-ja.texi") (defconst wl-en-info "wl.info") (defconst wl-en-texi "wl.texi") (defvar wl-info-lang "ja" "The language of info file (\"ja\" or \"en\").") ;; for Nemacs (dirty!) (or (fboundp 'file-executable-p) (fset 'file-executable-p 'file-exists-p)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'cl) (defvar INFODIR nil) (condition-case () (require 'custom) (error nil)) ;; for wl-vars.el (unless (and (fboundp 'defgroup) (fboundp 'defcustom) ;; ignore broken module (not (featurep 'tinycustom))) (when (and (boundp 'emacs-major-version) (eq emacs-major-version 19) (>= emacs-minor-version 29)) (message "%s" " Warning: You don't seem to have \"new custom\" package installed. It is recommended to use \"new custom\" package if you are using old Emacs, such as Mule 2.3. Get it from http://www.dina.kvl.dk/~abraham/custom/ and then apply the patch which is included in README file of APEL package. ")) (defmacro defgroup (&rest args)) (defmacro defcustom (symbol value &optional doc &rest args) (let ((doc (concat "*" (or doc "")))) (` (defvar (, symbol) (, value) (, doc)))))) (require 'bytecomp) (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)) (setq byte-compile-warnings '(free-vars unresolved callargs redefine)) ;; v18, v19 (if (or (boundp 'MULE) (fboundp 'nemacs-version)) (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")))) (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) (if (or (featurep 'xemacs) (and (boundp 'emacs-major-version) (>= emacs-major-version 21))) (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) ;; LISPDIR check. (let ((elispdir (car command-line-args-left))) (if (string= elispdir "NONE") (defvar LISPDIR (install-detect-elisp-directory)) (defvar LISPDIR elispdir))) (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 wl-scan-source (path) (let (ret) (mapcar '(lambda (x) (mapcar '(lambda (y) (setq ret (append (list y (concat y "c")) ret))) (directory-files x nil "\\(.+\\)\\.el$" t))) path) ret)) (defun wl-uninstall (objs path) ;(message (mapconcat 'identity objs " ")) (mapcar '(lambda (x) (let ((filename (expand-file-name x path))) (if (and (file-exists-p filename) (file-writable-p filename)) (progn (princ (format "%s was uninstalled.\n" filename)) (delete-file filename))))) objs)) (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 "\\.x[bp]m$")) 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" icon dest)) (copy-file icon dest t)))) (defun install-wl-package () (compile-wl-package) (let ((wl-install-dir (expand-file-name WL_PREFIX LISPDIR)) (elmo-install-dir (expand-file-name ELMO_PREFIX LISPDIR))) (mapcar '(lambda (x) (install-elisp-modules (cdr x) (car x) (if (string= (car x) ELMODIR) elmo-install-dir wl-install-dir))) modules-alist)) (if PIXMAPDIR (install-wl-icons))) (defun uninstall-wl-package () (config-wl-package) (let ((wl-install-dir (expand-file-name WL_PREFIX LISPDIR)) (elmo-install-dir (expand-file-name ELMO_PREFIX LISPDIR))) (wl-uninstall (wl-scan-source (list WLDIR UTILSDIR SASLDIR)) wl-install-dir) (wl-uninstall (wl-scan-source (list ELMODIR)) 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.")) (config-wl-package-subr) ;; PACKAGEDIR check. (let (package-dir) (and (setq package-dir (car command-line-args-left)) (if (string= "NONE" package-dir) (defvar PACKAGEDIR (if (boundp 'early-packages) (let ((dirs (append (if early-package-load-path early-packages) (if late-package-load-path late-packages) (if last-package-load-path last-packages))) dir) (while (not (file-exists-p (setq dir (car dirs)))) (setq dirs (cdr dirs))) dir))) (defvar PACKAGEDIR package-dir))) (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 () (config-wl-package-xmas) (setq autoload-package-name "wl") (add-to-list 'command-line-args-left WLDIR) (batch-update-directory) (add-to-list 'command-line-args-left WLDIR) (Custom-make-dependencies) ;; WL-AUTOLOAD-MODULES (compile-elisp-modules WL-AUTOLOAD-MODULES WLDIR) (mapcar '(lambda (x) (compile-elisp-modules (cdr x) (car x))) modules-alist)) (defun install-wl-package-xmas () (compile-wl-package-xmas) (let ((LISPDIR (expand-file-name "wl" (expand-file-name "lisp" PACKAGEDIR))) (DATADIR (expand-file-name "wl" (expand-file-name "etc" PACKAGEDIR))) (INFODIR (expand-file-name "info" PACKAGEDIR))) (or (file-exists-p DATADIR) (make-directory DATADIR t)) (or (file-exists-p INFODIR) (make-directory INFODIR t)) ;; copy xpm files (install-wl-icons) (mapcar '(lambda (x) (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))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Texinfo stuff (defun wl-texinfo-format-file (lang) (let ((infofile (symbol-value (intern (format "wl-%s-info" lang)))) (texifile (symbol-value (intern (format "wl-%s-texi" lang))))) (require 'wl-vars) ;; for 'wl-cs-local (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)) ;; We can't know file names if splitted. (texinfo-format-buffer t) ;; Emacs20.2's default is 'raw-text-unix. (and (fboundp 'set-buffer-file-coding-system) (set-buffer-file-coding-system wl-cs-local)) (save-buffer) (kill-buffer (current-buffer)) ;; info (kill-buffer obuf)) ;; texi ))) (defun wl-texinfo-format () (unless INFODIR (setq INFODIR (wl-detect-info-directory))) (cond ((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))) (defun wl-texinfo-install () (cond ((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)))))) (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)) (defun install-wl-info () (wl-texinfo-format) (wl-texinfo-install)) ;;; ToDo ;;; * MORE refine code (^_^; ;;; End