;;; -*-Emacs-Lisp-*-

;; SEMI-MK: installer for SEMI.

;;; Code:

(defvar DOCDIR "./")
(defconst SEMI-INFO-LIST '("mime-ui-en.info" "mime-ui-ja.info"))
(defconst SEMI-TEXI-LIST '("mime-ui-en.texi" "mime-ui-ja.texi"))

(defun config-semi ()
  (let (prefix exec-prefix lisp-dir version-specific-lisp-dir)
    (and (setq prefix (car command-line-args-left))
	 (or (string-equal "NONE" prefix)
	     (defvar PREFIX prefix)
	     ))
    (setq command-line-args-left (cdr command-line-args-left))
    (and (setq lisp-dir (car command-line-args-left))
	 (or (string-equal "NONE" lisp-dir)
	     (defvar LISPDIR lisp-dir)
	     ))
    (setq command-line-args-left (cdr command-line-args-left))
    (and (setq version-specific-lisp-dir (car command-line-args-left))
	 (or (string-equal "NONE" version-specific-lisp-dir)
	     (progn
	       (defvar VERSION_SPECIFIC_LISPDIR version-specific-lisp-dir)
	       (princ (format "VERSION_SPECIFIC_LISPDIR=%s\n"
			      VERSION_SPECIFIC_LISPDIR)))
	     ))
    (setq command-line-args-left (cdr command-line-args-left))
    )
  (load-file "SEMI-CFG")
  (load-file "SEMI-ELS")
  (princ (format "PREFIX=%s
LISPDIR=%s\n" PREFIX LISPDIR))
  )

(defun directory= (dir1 dir2)
  (string= (file-name-as-directory dir1)(file-name-as-directory dir2))
  )

(defun compile-semi ()
  (config-semi)
  (print load-path)
  (compile-elisp-modules semi-modules-to-compile ".")
  (compile-elisp-module  'mime-setup		".")
  )

(defun install-semi ()
  (config-semi)
  (princ (format "%s\n" emacs-version))
  (install-elisp-modules semi-modules	 "."	SEMI_KERNEL_DIR)
  (install-elisp-modules '(mime-setup)	 "."	SETUP_FILE_DIR)
  )

(defun install-execs ()
  (config-semi)
  (install-files METHODS METHOD_SRC_DIR METHOD_DIR nil t)
  )

(defun config-semi-package ()
  (let (package-dir)
    (and (setq package-dir (car command-line-args-left))
	 (or (string= "NONE" package-dir)
	     (defvar PACKAGEDIR package-dir)
	     ))
    (setq command-line-args-left (cdr command-line-args-left))
    (load-file "SEMI-CFG")
    (load-file "SEMI-ELS")
					  
    (princ (format "PACKAGEDIR=%s\n" PACKAGEDIR))
    ))

(defun compile-semi-package ()
  (config-semi-package)

  (setq autoload-package-name "semi")
  (add-to-list 'command-line-args-left ".")
  (batch-update-directory)

  (add-to-list 'command-line-args-left ".")
  (Custom-make-dependencies)

  (compile-elisp-modules (append semi-modules-to-compile
				 '(mime-setup auto-autoloads custom-load))
			 ".")
  )

(defun install-semi-package ()
  (config-semi-package)
  (install-elisp-modules (append semi-modules
				 '(mime-setup auto-autoloads custom-load))
			 "./"
			 (expand-file-name SEMI_PREFIX
					   (expand-file-name "lisp"
							     PACKAGEDIR)))
  (delete-file "./auto-autoloads.el")
  (delete-file "./custom-load.el")
  )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Texinfo stuff

(defun semi-texinfo-format ()
;  (unless INFODIR
;    (setq INFODIR (wl-detect-info-directory)))
;  (require 'wl-vars) ;; for 'wl-cs-local
  (let (SEMI-INFO SEMI-TEXI)
    (while (and SEMI-INFO-LIST SEMI-TEXI-LIST)
      (setq SEMI-INFO (car SEMI-INFO-LIST))
      (setq SEMI-TEXI (car SEMI-TEXI-LIST))
      (setq SEMI-INFO-LIST (cdr SEMI-INFO-LIST))
      (setq SEMI-TEXI-LIST (cdr SEMI-TEXI-LIST))
      (or (file-newer-than-file-p (expand-file-name SEMI-INFO DOCDIR)
				  (expand-file-name SEMI-TEXI DOCDIR))
	  (let (obuf beg)
	    (find-file (expand-file-name SEMI-TEXI 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.
	    (and (fboundp 'set-buffer-file-coding-system)
		 ;;	     (set-buffer-file-coding-system wl-cs-local))
		 (set-buffer-file-coding-system 'euc-jp-unix))
	    (save-buffer)
	    (kill-buffer (current-buffer)) ;; info
	    (kill-buffer obuf)) ;; texi
	  ))))

;;; SEMI-MK ends here
