(Download): Renamed from "Anonymous FTP"; modify for
[elisp/apel.git] / EMU-ELS
1 ;;; EMU-ELS --- list of EMU modules to install. -*-Emacs-Lisp-*-
2
3 ;;; Commentary:
4
5 ;; APEL-MK imports `emu-modules' and `emu-modules-to-compile' from here.
6
7 ;;; Code:
8
9 (defvar emu-modules-not-to-compile nil)
10 (defvar emu-modules-to-compile nil)
11
12 ;; We use compile-time evaluation heavily.  So, order of compilation is
13 ;; very significant.  For example, loading some module before compiling
14 ;; it will cause "compile-time" evaluation many times.
15 (defvar emu-modules
16   (nconc
17    ;; modules are sorted by compilation order.
18    '(static broken)
19
20    ;; product information.
21    '(product apel-ver)
22
23    ;; poe modules; poe modules depend on static.
24    '(pym)
25    (cond
26     ;; XEmacs.
27     ((featurep 'xemacs)
28      '(poe-xemacs poe))
29     ;; Emacs 19.29 and earlier. (yes, includes Emacs 19.29.)
30     ((and (= emacs-major-version 19)
31           (<= emacs-minor-version 29))
32      '(localhook poe))
33     ;; Emacs 19.30 and later.
34     ((>= emacs-major-version 19)
35      '(poe))
36     (t
37      ;; v18.
38      '(localhook env poe-18 poe)))
39
40    ;; pcustom modules; pcustom modules depend on poe.
41    (if (and (module-installed-p 'custom)
42             ;; new custom requires widget.
43             (module-installed-p 'widget))
44        ;; if both 'custom and 'widget are found, we have new custom.
45        '(pcustom)
46      ;; pcustom does (require 'custom) at compile-time, and tinycustom
47      ;; need to test existence of some custom macros at compile-time!
48      ;; so, we must compile tinycustom first.
49      '(tinycustom pcustom))
50
51    ;; pccl modules; pccl modules depend on broken.
52    (cond
53     ((featurep 'xemacs)
54      (cond
55       ;; XEmacs 21 w/ mule.
56       ((and (featurep 'mule)
57             (>= emacs-major-version 21))
58        '(pccl-20 pccl))
59       (t
60        '(pccl))))
61     ((featurep 'mule)
62      (cond
63       ;; Emacs 20.
64       ((>= emacs-major-version 20)
65        '(pccl-20 pccl))
66       ;; Mule 1.* and 2.*.
67       (t
68        '(pccl-om pccl))))
69     (t
70      '(pccl)))
71
72    ;; pces modules; pces modules depend on poe.
73    (cond
74     ((featurep 'xemacs)
75      (cond
76       ((featurep 'mule)
77        ;; XEmacs w/ mule.
78        ;; pces-xfc depends pces-20, so we compile pces-20 first.
79        '(pces-20 pces-xm pces-xfc pces))
80       ((featurep 'file-coding)
81        ;; XEmacs w/ file-coding.
82        ;; pces-xfc depends pces-20, so we compile pces-20 first.
83        '(pces-20 pces-xfc pces))
84       (t
85        '(pces-raw pces))))
86     ((featurep 'mule)
87      (cond
88       ;; Emacs 20.3 and later.
89       ((and (fboundp 'set-buffer-multibyte)
90             (subrp (symbol-function 'set-buffer-multibyte)))
91        ;; pces-e20 depends pces-20, so we compile pces-20 first.
92        '(pces-20 pces-e20 pces))
93       ;; Emacs 20.1 and 20.2.
94       ((= emacs-major-version 20)
95        ;; pces-e20 depends pces-20, so we compile pces-20 first.
96        '(pces-20 pces-e20_2 pces-e20 pces))
97       (t
98        ;; Mule 1.* and 2.*.
99        '(pces-om pces))))
100     ((boundp 'NEMACS)
101      ;; Nemacs.
102      '(pces-nemacs pces))
103     (t
104      '(pces-raw pces)))
105
106    ;; poem modules; poem modules depend on pces.
107    (cond
108     ((featurep 'mule)
109      (cond
110       ((featurep 'xemacs)
111        ;; XEmacs w/ mule.
112        '(poem-xm poem))
113       ((>= emacs-major-version 20)
114        (if (and (fboundp 'set-buffer-multibyte)
115                 (subrp (symbol-function 'set-buffer-multibyte)))
116            ;; Emacs 20.3 and later.
117            '(poem-e20_3 poem-e20 poem)
118          ;; Emacs 20.1 and 20.2.
119          '(poem-e20_2 poem-e20 poem)))
120       (t
121        ;; Mule 1.* and 2.*.
122        '(poem-om poem))))
123     ((boundp 'NEMACS)
124      '(poem-nemacs poem))
125     (t
126      '(poem-ltn1 poem)))
127
128    ;; mcharset modules; mcharset modules depend on poem and pcustom.
129    (cond
130     ((featurep 'mule)
131      (cond
132       ((featurep 'xemacs)
133        ;; XEmacs w/ mule.
134        (if (featurep 'utf-2000)
135            ;; XEmacs w/ UTF-2000.
136            (setq emu-modules-not-to-compile
137                  (cons 'mcs-xmu emu-modules-not-to-compile)))
138        ;; mcs-xm depends mcs-20, so we compile mcs-20 first.
139        '(mcs-20 mcs-xmu mcs-xm mcharset))
140       ((>= emacs-major-version 20)
141        ;; Emacs 20 and later.
142        ;; mcs-e20 depends mcs-20, so we compile mcs-20 first.
143        '(mcs-20 mcs-e20 mcharset))
144       (t
145        ;; Mule 1.* and 2.*.
146        '(mcs-om mcharset))))
147     ((boundp 'NEMACS)
148      ;; Nemacs.
149      '(mcs-nemacs mcharset))
150     (t
151      '(mcs-ltn1 mcharset)))
152
153    ;; timezone.el; Some versions have Y2K problem.
154    (condition-case nil
155        (let ((load-path (delete (expand-file-name ".")
156                                 (copy-sequence load-path))))
157          ;; v18 does not have timezone.el.
158          (require 'timezone)
159          ;; Is timezone.el APEL version?
160          (if (product-find 'timezone)
161              (error "timezone.el is APEL version. Install newer version."))
162          ;; Y2K test.
163          (or (string= (aref (timezone-parse-date "Sat, 1 Jan 00 00:00:00 GMT")
164                             0)
165                       "2000")
166              (error "timezone.el has Y2K problem. Install fixed version."))
167          ;; Old parser test.
168          (if (string=
169               (aref (timezone-parse-date "Wednesday, 31-Jan-01 09:00:00 GMT")
170                     0)
171               "0")
172              (error "timezone.el has old date parser. Install fixed version."))
173          ;; no problem.
174          '())
175      (error
176       '(timezone)))
177
178    ;; invisible modules; provided for backward compatibility with old "tm".
179    (cond
180     ((featurep 'xemacs)
181      ;; XEmacs.
182      '(inv-xemacs invisible))
183     ((>= emacs-major-version 23)
184      ;; Emacs 23 and later
185      '(inv-23 invisible))
186     ((>= emacs-major-version 19)
187      ;; Emacs 19 and later.
188      '(inv-19 invisible))
189     (t
190      ;; v18.
191      '(inv-18 invisible)))
192
193    ;; emu modules; provided for backward compatibility with old "tm".
194    (if (and (featurep 'mule)
195             (< emacs-major-version 20))
196        ;; Mule 1.* and 2.*.
197        '(emu-mule emu)
198      '(emu))
199
200    ;; emu submodules; text/richtext and text/enriched support.
201    (if (if (featurep 'xemacs)
202            (or (>= emacs-major-version 20)
203                (and (= emacs-major-version 19)
204                     (>= emacs-minor-version 14)))
205          (or (>= emacs-major-version 20)
206              (and (= emacs-major-version 19)
207                   (>= emacs-minor-version 29))))
208        ;; XEmacs 19.14 and later, or Emacs 19.29 and later.
209        '(richtext)
210      '(tinyrich))
211
212    ;; mule-caesar.el; part of apel-modules, but it is version-dependent.
213    '(mule-caesar)))
214
215 ;; Generate `emu-modules-to-compile' from `emu-modules-not-to-compile'
216 ;; and `emu-modules'.
217 (let ((modules emu-modules-not-to-compile))
218   (setq emu-modules-to-compile (copy-sequence emu-modules))
219   (while modules
220     (setq emu-modules-to-compile (delq (car modules) emu-modules-to-compile)
221           modules (cdr modules))))
222
223 ;;; EMU-ELS ends here