* COMPILE: Require 'riece-addon-modules.
[riece] / lisp / COMPILE
1 ;;; -*- Emacs-Lisp -*-
2
3 (require 'riece-addon-modules)
4
5 (defvar riece-modules
6   (nconc
7    (cons 'riece-compat
8          (cons (if (featurep 'xemacs)
9                    'riece-xemacs
10                  'riece-emacs)
11                '(riece-globals
12                  riece-options
13                  riece-debug
14                  riece-version
15                  riece-coding
16                  riece-complete
17                  riece-addon-modules
18                  riece-addon
19                  riece-ruby
20
21                  riece-mode
22                  ;; riece-identity -+-> riece-channel
23                  ;;                 +-> riece-user
24                  riece-identity
25                  riece-channel
26                  riece-user
27
28                  riece-misc
29                  riece-signal
30
31                  ;; riece-layout ---> riece-display
32                  riece-layout
33                  riece-display
34                  riece-server
35
36                  ;; riece-channel -+-> riece-naming
37                  ;; riece-user    -+
38                  riece-naming
39                  riece-message
40
41                  ;; riece-filter calls riece-{handle,000,200,300,400,500}
42                  riece-filter
43                  riece-handle
44                  riece-000
45                  riece-200
46                  riece-300
47                  riece-400
48                  riece-500
49
50                  riece-commands
51                  riece-irc
52                  riece)))
53    (mapcar #'car riece-addon-modules)))
54
55 (defvar riece-icons
56   '("riece-command-quit.xpm"
57     "riece-command-join.xpm"
58     "riece-command-part.xpm"
59     "riece-command-previous-channel.xpm"
60     "riece-command-next-channel.xpm"
61     "riece-command-change-layout.xpm"
62     "riece-submit-bug-report.xpm"))
63
64 (defvar riece-scripts
65   '("server.rb"
66     "aproxy.rb"))
67
68 (defun riece-compile-modules (modules)
69   (let ((load-path (cons nil load-path))
70         error-modules)
71     (while modules
72       (let ((source (expand-file-name
73                      (concat (symbol-name (car modules)) ".el"))))
74         (if (file-newer-than-file-p source (concat source "c"))
75             (condition-case error
76                 (byte-compile-file source)
77               (error
78                (setq error-modules (cons (car modules) error-modules))))))
79       (setq modules (cdr modules)))
80     (if error-modules
81         (princ (concat "\n\
82   WARNING: ---------------------------------------------------------
83   WARNING: Couldn't compile following modules:
84   WARNING: 
85   WARNING:   " (mapconcat #'symbol-name error-modules ", ") "\n\
86   WARNING: 
87   WARNING: You should probably stop here, try \"make distclean\" to clear
88   WARNING: the last build, and then reconfigure.
89   WARNING: ---------------------------------------------------------\n\n")))))
90
91 (defun riece-compile-module ()
92   (let ((load-path (cons nil load-path)))
93     (let ((source (expand-file-name
94                    (concat (car command-line-args-left) ".el"))))
95       (if (file-newer-than-file-p source (concat source "c"))
96           (byte-compile-file source)))))
97
98 (defun riece-install-modules (modules dest just-print)
99   (unless (or just-print (file-exists-p dest))
100     (make-directory dest t))
101   (while modules
102     (let ((name (symbol-name (car modules))))
103       (princ (format "%s.el -> %s\n" name dest))
104       (unless just-print
105         (copy-file (expand-file-name (concat name ".el"))
106                    (expand-file-name (concat name ".el") dest)
107                    t t))
108       (princ (format "%s.elc -> %s\n" name dest))
109       (unless just-print
110         (if (file-exists-p (expand-file-name (concat name ".elc")))
111             (copy-file (expand-file-name (concat name ".elc"))
112                        (expand-file-name (concat name ".elc") dest)
113                        t t)
114           (princ (format "(%s was not successfully compiled, ignored)\n"
115                          name)))))
116     (setq modules (cdr modules))))
117
118 (defun riece-install-icons (icons dest just-print)
119   (unless (or just-print (file-exists-p dest))
120     (make-directory dest t))
121   (while icons
122     (when (file-exists-p (expand-file-name (car icons)))
123       (princ (format "%s -> %s\n" (car icons) dest))
124       (unless just-print
125         (copy-file (expand-file-name (car icons))
126                    (expand-file-name (car icons) dest)
127                    t t)))
128     (setq icons (cdr icons))))
129
130 (defun riece-install-scripts (scripts dest just-print)
131   (unless (or just-print (file-exists-p dest))
132     (make-directory dest t))
133   (while scripts
134     (when (file-exists-p (expand-file-name (car scripts)))
135       (princ (format "%s -> %s\n" (car scripts) dest))
136       (unless just-print
137         (copy-file (expand-file-name (car scripts))
138                    (expand-file-name (car scripts) dest)
139                    t t)))
140     (setq scripts (cdr scripts))))
141
142 (defun riece-install-just-print-p ()
143   (let ((flag (getenv "MAKEFLAGS"))
144         case-fold-search)
145     (if flag
146         (string-match "^\\(\\(--[^ ]+ \\)+-\\|[^ =-]\\)*n" flag))))
147
148 (defun riece-examine ()
149   (princ (mapconcat #'symbol-name riece-modules " ")))
150
151 (defun riece-compile ()
152   (riece-compile-modules riece-modules))
153
154 (defun riece-install ()
155   (riece-install-modules
156    riece-modules
157    (expand-file-name "riece" (car command-line-args-left))
158    (riece-install-just-print-p))
159   (riece-install-icons
160    riece-icons
161    (expand-file-name "riece" (car command-line-args-left))
162    (riece-install-just-print-p))
163   (riece-install-scripts
164    riece-scripts
165    (expand-file-name "riece" (car command-line-args-left))
166    (riece-install-just-print-p)))
167
168 (defun riece-compile-package ()
169   (setq autoload-package-name "riece")
170   (add-to-list 'command-line-args-left ".")
171   (batch-update-directory)
172   (add-to-list 'command-line-args-left ".")
173   (Custom-make-dependencies)
174   (riece-compile-modules
175    (append riece-modules
176            '(auto-autoloads custom-load))))
177
178 (defun riece-install-package ()
179   (riece-install-modules
180    (append riece-modules
181            '(auto-autoloads custom-load))
182    (expand-file-name "lisp/riece" (car command-line-args-left))
183    (riece-install-just-print-p))
184   (riece-install-icons
185    riece-icons
186    (expand-file-name "etc/riece" (car command-line-args-left))
187    (riece-install-just-print-p))
188   (riece-install-scripts
189    riece-scripts
190    (expand-file-name "etc/riece" (car command-line-args-left))
191    (riece-install-just-print-p)))
192
193 (defun riece-test ()
194   (let ((load-path (cons (expand-file-name "test") (cons nil load-path)))
195         (files (directory-files "test" t "^test-.*\\.el$"))
196         suite)
197     (require 'lunit-report)
198     (setq suite (lunit-make-test-suite))
199     (while files
200       (when (file-regular-p (car files))
201         (load-file (car files))
202         (lunit-test-suite-add-test
203          suite
204          (lunit-make-test-suite-from-class
205           (intern (file-name-sans-extension
206                    (file-name-nondirectory (car files)))))))
207       (setq files (cdr files)))
208     (lunit-report suite (car command-line-args-left))))