annotate lisp/packages.el @ 5750:66d2f63df75f

Correct some spelling and formatting in behavior.el. Mentioned in tracker issue 826, the third thing mentioned there (the file name at the bottom of the file) had already been fixed. lisp/ChangeLog addition: 2013-08-05 Aidan Kehoe <kehoea@parhasard.net> * behavior.el: (override-behavior): Correct some spelling and formatting here, thank you Steven Mitchell in tracker issue 826.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 05 Aug 2013 10:05:32 +0100
parents b7ae5f44b950
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;;; packages.el --- Low level support for XEmacs packages
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1997 Free Software Foundation, Inc.
2557
8dc793d1d990 [xemacs-hg @ 2005-02-03 23:56:52 by ben]
ben
parents: 2481
diff changeset
4 ;; Copyright (C) 2002, 2003, 2004 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ;; Author: Steven L Baur <steve@xemacs.org>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; Maintainer: Steven L Baur <steve@xemacs.org>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ;; Keywords: internal, lisp, dumped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5264
diff changeset
12 ;; XEmacs is free software: you can redistribute it and/or modify it
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5264
diff changeset
13 ;; under the terms of the GNU General Public License as published by the
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5264
diff changeset
14 ;; Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5264
diff changeset
15 ;; option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5264
diff changeset
17 ;; XEmacs is distributed in the hope that it will be useful, but WITHOUT
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5264
diff changeset
18 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5264
diff changeset
19 ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5264
diff changeset
20 ;; for more details.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5264
diff changeset
23 ;; along with XEmacs. If not, see <http://www.gnu.org/licenses/>.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 ;;; Synched up with: Not in FSF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 ;; This file is dumped with XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 ;; This file provides low level facilities for XEmacs startup --
5284
d27c1ee1943b Make the order of preloaded-file-list more sane.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5264
diff changeset
32 ;; particularly regarding the package setup.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 ;; This file requires find-paths.el.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 ;;; Package versioning
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 (defvar packages-package-list nil
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 448
diff changeset
41 "Database of installed packages and version numbers")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
43 ;;; Directories and paths
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
44
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
45 ;;; Terminology:
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
46
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
47 ;;; A *package hierarchy* is a directory that contains a collection of
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
48 ;;; packages; it has lisp/, info/, etc/ etc. subdirectories that
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
49 ;;; contain the files constituting the packages.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
50
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
51 ;;; A *package directory* contains package hierarchies---the package
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
52 ;;; hierarchies are typically in directories "xemacs-packages",
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
53 ;;; "mule-packages", and so on. A package hierarchy might only be
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
54 ;;; applicable for specific variants of XEmacs.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
55
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
56 ;;; Package hierarchies come in "early", "late", and "last" variants,
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
57 ;;; depending on their relative location in the various paths.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
58 ;;; "Early" hierarchies are typically in the user's home directory,
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
59 ;;; "late" hierarchies are typically part of the XEmacs installation,
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
60 ;;; and "last" package hierarchies are for special purposes, such as
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
61 ;;; making the packages of some previous XEmacs version available.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 (defvar packages-load-path-depth 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 "Depth of load-path search in package hierarchies.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 (defvar packages-data-path-depth 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 "Depth of data-path search in package hierarchies.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
69 (defvar early-package-hierarchies nil
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
70 "Package hierarchies early in the load path.")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 (defvar early-package-load-path nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 "Load path for packages early in the load path.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
75 (defvar late-package-hierarchies nil
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
76 "Package hierarchies late in the load path.")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 (defvar late-package-load-path nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 "Load path for packages late in the load path.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
81 (defvar last-package-hierarchies nil
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
82 "Package hierarchies last in the load path.")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 (defvar last-package-load-path nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 "Load path for packages last in the load path.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
87 (defun packages-package-hierarchy-directory-names ()
5652
cc6f0266bc36 Avoid #'delq in core Lisp, for the sake of style, a very slightly smaller binary
Aidan Kehoe <kehoea@parhasard.net>
parents: 5583
diff changeset
88 "Returns a list of package hierarchy directory names.
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
89 These are the valid immediate directory names of package
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
90 directories, directories with higher priority first"
5652
cc6f0266bc36 Avoid #'delq in core Lisp, for the sake of style, a very slightly smaller binary
Aidan Kehoe <kehoea@parhasard.net>
parents: 5583
diff changeset
91 `("site-packages" ,@(when (featurep 'mule) '("mule-packages"))
cc6f0266bc36 Avoid #'delq in core Lisp, for the sake of style, a very slightly smaller binary
Aidan Kehoe <kehoea@parhasard.net>
parents: 5583
diff changeset
92 "xemacs-packages"))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 (defun package-get-key (name key)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 "Get info `key' from package `name'."
5655
b7ae5f44b950 Remove some redundant functions, change others to labels, lisp/
Aidan Kehoe <kehoea@parhasard.net>
parents: 5652
diff changeset
96 (getf (cdr (assq name packages-package-list)) key))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 (defun package-provide (name &rest attributes)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 (let ((info (if (and attributes (floatp (car attributes)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 (list :version (car attributes))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 attributes)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 (setq packages-package-list
5583
10f179710250 Deprecate #'remassoc, #'remassq, #'remrassoc, #'remrassq.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
103 (cons (cons name info) (delete* name packages-package-list
10f179710250 Deprecate #'remassoc, #'remassq, #'remrassoc, #'remrassq.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
104 :test #'eq :key #'car)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105
2557
8dc793d1d990 [xemacs-hg @ 2005-02-03 23:56:52 by ben]
ben
parents: 2481
diff changeset
106 (defun package-suppress (package file form)
8dc793d1d990 [xemacs-hg @ 2005-02-03 23:56:52 by ben]
ben
parents: 2481
diff changeset
107 "Set up a package-suppress condition FORM for FILE in PACKAGE.
8dc793d1d990 [xemacs-hg @ 2005-02-03 23:56:52 by ben]
ben
parents: 2481
diff changeset
108 When XEmacs searches for a file in the load path, it will ignore FILE
8dc793d1d990 [xemacs-hg @ 2005-02-03 23:56:52 by ben]
ben
parents: 2481
diff changeset
109 if FORM evaluates to non-nil."
8dc793d1d990 [xemacs-hg @ 2005-02-03 23:56:52 by ben]
ben
parents: 2481
diff changeset
110 (setq load-suppress-alist
8dc793d1d990 [xemacs-hg @ 2005-02-03 23:56:52 by ben]
ben
parents: 2481
diff changeset
111 (acons (expand-file-name file load-file-name) form
8dc793d1d990 [xemacs-hg @ 2005-02-03 23:56:52 by ben]
ben
parents: 2481
diff changeset
112 load-suppress-alist)))
8dc793d1d990 [xemacs-hg @ 2005-02-03 23:56:52 by ben]
ben
parents: 2481
diff changeset
113
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 (defun package-require (name version)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 (let ((pkg (assq name packages-package-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 (cond ((null pkg)
1410
44de306310b8 [xemacs-hg @ 2003-04-14 03:40:26 by youngs]
youngs
parents: 1365
diff changeset
117 (error 'invalid-state
44de306310b8 [xemacs-hg @ 2003-04-14 03:40:26 by youngs]
youngs
parents: 1365
diff changeset
118 (format "Package %s has not been loaded into this XEmacsen"
44de306310b8 [xemacs-hg @ 2003-04-14 03:40:26 by youngs]
youngs
parents: 1365
diff changeset
119 name)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 ((< (package-get-key name :version) version)
1410
44de306310b8 [xemacs-hg @ 2003-04-14 03:40:26 by youngs]
youngs
parents: 1365
diff changeset
121 (error 'search-failed
44de306310b8 [xemacs-hg @ 2003-04-14 03:40:26 by youngs]
youngs
parents: 1365
diff changeset
122 (format "Need version %g of package %s, got version %g"
2252
cd15d235fdeb [xemacs-hg @ 2004-09-07 00:08:15 by youngs]
youngs
parents: 1410
diff changeset
123 version name (package-get-key name :version))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 (t t))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 (defun package-delete-name (name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 (let (pkg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 ;; Delete ALL versions of package.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 ;; This is pretty memory-intensive, as we use copy-alist when deleting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 ;; package entries, to prevent side-effects in functions that call this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 ;; one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 (while (setq pkg (assq name packages-package-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 (setq packages-package-list (delete pkg (copy-alist
1365
02909207294a [xemacs-hg @ 2003-03-20 13:19:56 by youngs]
youngs
parents: 1330
diff changeset
134 packages-package-list))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 ;;; Build time stuff
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 (defvar autoload-file-name "auto-autoloads.el"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 "Filename that autoloads are expected to be found in.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140
1330
4542b72c005e [xemacs-hg @ 2003-03-01 07:25:26 by ben]
ben
parents: 1315
diff changeset
141 ;; Moved from help.el.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 ;; Unlike the FSF version, our `locate-library' uses the `locate-file'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 ;; primitive, which should make it lightning-fast.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 (defun locate-library (library &optional nosuffix path interactive-call)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 "Show the precise file name of Emacs library LIBRARY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 This command searches the directories in `load-path' like `M-x load-library'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 to find the file that `M-x load-library RET LIBRARY RET' would load.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 Optional second arg NOSUFFIX non-nil means don't add suffixes `.elc' or `.el'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 to the specified name LIBRARY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 If the optional third arg PATH is specified, that list of directories
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 is used instead of `load-path'."
624
59c2a61efa7d [xemacs-hg @ 2001-06-30 23:07:06 by youngs]
youngs
parents: 601
diff changeset
154 (interactive (list (read-library-name "Locate library: ")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 nil nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 (let ((result
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 (locate-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 library
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 (or path load-path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 (cond ((or (rassq 'jka-compr-handler file-name-handler-alist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 (and (boundp 'find-file-hooks)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 (member 'crypt-find-file-hook find-file-hooks)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 ;; Compression involved.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 (if nosuffix
448
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
166 '("" ".gz" ".Z" ".bz2")
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
167 '(".elc" ".elc.gz" "elc.Z" ".elc.bz2"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
168 ".el" ".el.gz" ".el.Z" ".el.bz2"
3078fd1074e8 Import from CVS: tag r21-2-39
cvs
parents: 444
diff changeset
169 "" ".gz" ".Z" ".bz2")))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 ;; No compression.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 (if nosuffix
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 ""
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 '(".elc" ".el" "")))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 (and interactive-call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 (if result
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 (message "Library is file %s" result)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 (message "No library %s in search path" library)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 result))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 (defun packages-add-suffix (str)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 (if (null (string-match "\\.el\\'" str))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 (concat str ".elc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 str))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 (defun packages-list-autoloads-path ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 "List autoloads from precomputed load-path."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 (let ((path load-path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 autoloads)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 (while path
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 (if (file-exists-p (concat (car path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 autoload-file-name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 (setq autoloads (cons (concat (car path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 autoload-file-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 autoloads)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 (setq path (cdr path)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 autoloads))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 (defun packages-list-autoloads (source-directory)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 "List autoload files in (what will be) the normal lisp search path.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 This function is used during build to find where the global symbol files so
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 they can be perused for their useful information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 (let ((files (directory-files (file-name-as-directory source-directory)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 t ".*"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 file autolist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 ;; (print (prin1-to-string source-directory))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 ;; (print (prin1-to-string files))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 (while (setq file (car-safe files))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 (if (and (file-directory-p file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 (file-exists-p (concat (file-name-as-directory file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 autoload-file-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 (setq autolist (cons (concat (file-name-as-directory file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 autoload-file-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 autolist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 (setq files (cdr files)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 autolist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 ;; The following function cannot be called from a bare temacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 (defun packages-new-autoloads ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 "Return autoloads files that have been added or modified since XEmacs dump."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 (require 'loadhist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 (let ((me (concat invocation-directory invocation-name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 (path load-path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 result dir)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 (while path
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 (setq dir (file-truename (car path)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 (let ((autoload-file (file-name-sans-extension (concat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 dir
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 autoload-file-name))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 ;; Check for:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 ;; 1. An auto-autoload file that hasn't provided a feature (because
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 ;; it has been installed since XEmacs was dumped).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 ;; 2. auto-autoload.el being newer than the executable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 ;; 3. auto-autoload.elc being newer than the executable (the .el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 ;; could be missing or compressed)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 (when (or (and (null (file-provides autoload-file))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 (or (file-exists-p (concat autoload-file ".elc"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 (file-exists-p (concat autoload-file ".el"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 (and (file-newer-than-file-p (concat autoload-file ".el") me)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 (setq autoload-file (concat autoload-file ".el")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 (and (file-newer-than-file-p (concat autoload-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 ".elc")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 me)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 (setq autoload-file (concat autoload-file ".elc"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 (push autoload-file result)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 (setq path (cdr path)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 result))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 ;; The following function cannot be called from a bare temacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 (defun packages-reload-autoloads ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 "Reload new or updated auto-autoloads files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 This is an extremely dangerous function to call after the user-init-files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 is run. Don't call it or you'll be sorry."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 (let ((autoload-list (packages-new-autoloads)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 (while autoload-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 (let* ((autoload-file (car autoload-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 (feature (car-safe (file-provides autoload-file))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 (when feature
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 ;; (message "(unload-feature %S)" feature)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 (unload-feature feature))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 (condition-case nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 (load autoload-file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 (t nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 (setq autoload-list (cdr autoload-list)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 ;; Data-directory is really a list now. Provide something to search it for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 ;; directories.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 (defun locate-data-directory-list (name &optional dir-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 "Locate the matching list of directories in a search path DIR-LIST.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 If no DIR-LIST is supplied, it defaults to `data-directory-list'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 (unless dir-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273 (setq dir-list data-directory-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 (let (found found-dir found-dir-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 (while dir-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 (setq found (file-name-as-directory (concat (car dir-list) name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 found-dir (file-directory-p found))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 (and found-dir
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
279 (setq found-dir-list (cons found found-dir-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 (setq dir-list (cdr dir-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 (nreverse found-dir-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 ;; Data-directory is really a list now. Provide something to search it for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 ;; a directory.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 (defun locate-data-directory (name &optional dir-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 "Locate a directory in a search path DIR-LIST (a list of directories).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 If no DIR-LIST is supplied, it defaults to `data-directory-list'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 (unless dir-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 (setq dir-list data-directory-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 (let (found found-dir)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 (while (and (null found-dir) dir-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 (setq found (file-name-as-directory (concat (car dir-list) name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294 found-dir (file-directory-p found))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 (or found-dir
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 (setq found nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 (setq dir-list (cdr dir-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
298 found))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 ;; Data-directory is really a list now. Provide something to search it for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301 ;; files.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 (defun locate-data-file (name &optional dir-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 "Locate a file in a search path DIR-LIST (a list of directories).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 If no DIR-LIST is supplied, it defaults to `data-directory-list'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 This function is basically a wrapper over `locate-file'."
633
4bf478127536 [xemacs-hg @ 2001-07-20 02:41:28 by youngs]
youngs
parents: 624
diff changeset
307 (locate-file name (or dir-list data-directory-list)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 ;; Path setup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
311 (defun packages-find-package-hierarchies-named (package-directories base)
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
312 "Find a set of package hierarchies within an XEmacs installation.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
313 PACKAGE-DIRECTORIES is a list of package directories.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
314 BASE is a subdirectory name for the hierarchy.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
315 Returns list of hierarchies."
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
316 (paths-directories-which-exist
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
317 (mapcar #'(lambda (package-directory)
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
318 (file-name-as-directory
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
319 (concat (file-name-as-directory package-directory)
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
320 base)))
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
321 package-directories)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 (defun packages-split-path (path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 "Split PATH at \"\", return pair with two components.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 The second component is shared with PATH."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 (let ((reverse-tail '())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 (rest path))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 (while (and rest (null (string-equal "" (car rest))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 (setq reverse-tail (cons (car rest) reverse-tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 (setq rest (cdr rest)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 (if (null rest)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 (cons path nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 (cons (nreverse reverse-tail) (cdr rest)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 (defun packages-split-package-path (package-path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 "Split up PACKAGE-PATH into early, late and last components.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 The separation is by \"\" components.
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
338 This returns
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
339 (LIST EARLY-PACKAGE-HIERARCHIES LATE-PACKAGE-HIERARCHIES LAST-PACKAGE-HIERARCHIES)."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 ;; When in doubt, it's late
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 (let* ((stuff (packages-split-path package-path))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 (early (and (cdr stuff) (car stuff)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 (late+last (or (cdr stuff) (car stuff)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 (stuff (packages-split-path late+last))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 (late (car stuff))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 (last (cdr stuff)))
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
347 (list (mapcar #'file-name-as-directory early)
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
348 (mapcar #'file-name-as-directory late)
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
349 (mapcar #'file-name-as-directory last))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 (defun packages-deconstruct (list consumer)
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
352 "Deconstruct LIST and feed it to CONSUMER.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
353 CONSUMER is a function that accepts the elements of LISTS as separate arguments."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 (apply consumer list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
356 (defun packages-find-installation-package-directories (roots)
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
357 "Find the package directories in the XEmacs installation.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
358 ROOTS is a list of installation roots."
5003
6b6b0f8ab749 #'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4919
diff changeset
359 (delete-duplicates
6b6b0f8ab749 #'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4919
diff changeset
360 (nconc (paths-find-version-directories roots (list "") nil nil nil t)
6b6b0f8ab749 #'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4919
diff changeset
361 (paths-find-site-directories roots (list "") nil))
6b6b0f8ab749 #'union doesn't preserve relative order; use #'delete-duplicates instead.
Aidan Kehoe <kehoea@parhasard.net>
parents: 4919
diff changeset
362 :test #'equal))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
364 (defun packages-find-package-hierarchies (package-directories &optional envvar default)
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
365 "Find package hierarchies in a list of package directories.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
366 PACKAGE-DIRECTORIES is a list of package directories.
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
367 DEFAULT is a default list of package hierarchies.
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
368 ENVVAR is the name of an environment variable that may override
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
369 the default."
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
370 (let* ((envvar-value (and envvar (getenv envvar)))
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
371 (package-directories
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
372 (if envvar-value
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
373 (split-path envvar-value)
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
374 package-directories)))
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
375
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
376 (or (and (not envvar-value) default)
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
377 (let ((package-hierarchies '())
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
378 (hierarchy-directories (packages-package-hierarchy-directory-names)))
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
379 (while hierarchy-directories
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
380 (setq package-hierarchies
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
381 (nconc package-hierarchies
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
382 (packages-find-package-hierarchies-named
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
383 package-directories
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
384 (car hierarchy-directories))))
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
385 (setq hierarchy-directories (cdr hierarchy-directories)))
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
386 package-hierarchies))))
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
387
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
388 (defun packages-find-all-package-hierarchies (roots)
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
389 "Find the package hierarchies.
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
390 ROOTS is a list of installation roots.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
391 Returns a list of three directory lists, the first being the list of early
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
392 hierarchies, the second that of the late hierarchies, and the third the
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
393 list of the last hierarchies."
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
394 ;; EMACSPACKAGEPATH is a historical kludge
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 (let ((envvar-value (getenv "EMACSPACKAGEPATH")))
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
396 (cond
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
397 (envvar-value
3184
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
398 (packages-deconstruct
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
399 (packages-split-package-path (paths-decode-directory-path envvar-value))
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
400 ;; we get package *directories*
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
401 #'(lambda (early late last)
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
402 (list
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
403 (packages-find-package-hierarchies early
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
404 "EMACSEARLYPACKAGES")
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
405 (packages-find-package-hierarchies late
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
406 "EMACSLATEPACKAGES")
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
407 (packages-find-package-hierarchies last
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
408 "EMACSLATEPACKAGES")))))
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
409 ;; --with-package-path is also a historical kludge
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
410 (configure-package-path
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 (packages-deconstruct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 (packages-split-package-path configure-package-path)
3184
072ccc89ac3c [xemacs-hg @ 2005-12-30 16:42:35 by michaels]
michaels
parents: 3179
diff changeset
413 ;; we get package *hierarchies*
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
414 #'(lambda (early late last)
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
415 (list
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
416 (packages-find-package-hierarchies (list user-init-directory)
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
417 "EMACSEARLYPACKAGES"
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
418 early)
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
419 (packages-find-package-hierarchies (packages-find-installation-package-directories roots)
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
420 "EMACSLATEPACKAGES"
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
421
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
422 late)
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
423 (packages-find-package-hierarchies '()
3179
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
424 "EMACSLASTPACKAGES"
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
425 last)))))
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
426 (t
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
427 (list
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
428 (packages-find-package-hierarchies (or configure-early-package-directories
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
429 (list user-init-directory))
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
430 "EMACSEARLYPACKAGES")
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
431 (packages-find-package-hierarchies (or configure-late-package-directories
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
432 (packages-find-installation-package-directories roots))
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
433 "EMACSLATEPACKAGES")
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
434 (packages-find-package-hierarchies configure-last-package-directories
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
435 "EMACSLASTPACKAGES"))))))
15139dbf89f4 [xemacs-hg @ 2005-12-27 18:50:47 by michaels]
michaels
parents: 2557
diff changeset
436
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
437 (defun packages-find-package-library-path (package-hierarchies suffixes)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 "Construct a path into a component of the packages hierarchy.
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
439 PACKAGE-HIERARCHIES is a list of package hierarchies.
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
440 SUFFIXES is a list of names of hierarchy subdirectories to look for."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 (let ((directories
5264
0d43872986b6 Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5228
diff changeset
442 (mapcan #'(lambda (hierarchy)
0d43872986b6 Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5228
diff changeset
443 (mapcar #'(lambda (suffix)
0d43872986b6 Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5228
diff changeset
444 (file-name-as-directory (concat hierarchy suffix)))
0d43872986b6 Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5228
diff changeset
445 suffixes))
0d43872986b6 Change (apply 'nconc (mapcar ...)) to (mapcan ...); warn about first form.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5228
diff changeset
446 package-hierarchies)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 (paths-directories-which-exist directories)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
449 (defun packages-find-package-load-path (package-hierarchies)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 "Construct the load-path component for packages.
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
451 PACKAGE-HIERARCHIES is a list of package hierarchies."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 (paths-find-recursive-load-path
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
453 (packages-find-package-library-path package-hierarchies
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 '("lisp"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 packages-load-path-depth))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
457 (defun packages-find-package-exec-path (package-hierarchies)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 "Construct the exec-path component for packages.
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
459 PACKAGE-HIERARCHIES is a list of package hierarchies."
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
460 (packages-find-package-library-path package-hierarchies
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 (list (paths-construct-path
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 (list "bin" system-configuration))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 "lib-src")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
465 (defun packages-find-package-info-path (package-hierarchies)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 "Construct the info-path component for packages.
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
467 PACKAGE-HIERARCHIES is a list of package directories."
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
468 (packages-find-package-library-path package-hierarchies '("info")))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
470 (defun packages-find-package-data-path (package-hierarchies)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 "Construct the data-path component for packages.
5384
3889ef128488 Fix misspelled words, and some grammar, across the entire source tree.
Jerry James <james@xemacs.org>
parents: 5363
diff changeset
472 PACKAGE-HIERARCHIES is a list of package hierarchies."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 (paths-find-recursive-load-path
2456
f4e405a9d18d [xemacs-hg @ 2004-12-27 12:25:14 by michaels]
michaels
parents: 2252
diff changeset
474 (packages-find-package-library-path package-hierarchies
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 '("etc"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 packages-data-path-depth))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 ;; Loading package initialization files
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 (defun packages-load-package-lisps (package-load-path base)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 "Load all Lisp files of a certain name along a load path.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 BASE is the base name of the files."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 (mapcar #'(lambda (dir)
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 689
diff changeset
484 (let ((file-name (expand-file-name base dir)))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 689
diff changeset
485 (with-trapping-errors
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 689
diff changeset
486 :operation (format "Autoload %s" file-name)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 689
diff changeset
487 :class 'packages
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 689
diff changeset
488 (load file-name t t))))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 689
diff changeset
489 package-load-path))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 (defun packages-load-package-auto-autoloads (package-load-path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 "Load auto-autoload files along a load path."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 (packages-load-package-lisps package-load-path
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 (file-name-sans-extension autoload-file-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 (defun packages-handle-package-dumped-lisps (handle package-load-path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 "Load dumped-lisp.el files along a load path.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 Call HANDLE on each file off definitions of PACKAGE-LISP there."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 (mapcar #'(lambda (dir)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 (let ((file-name (expand-file-name "dumped-lisp.el" dir)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 (if (file-exists-p file-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 (let (package-lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 ;; 20.4 packages could set this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 preloaded-file-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 (load file-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 ;; dumped-lisp.el could have set this ...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 (if package-lisp
5363
311f6817efc2 Remove various redundant wrapper lambdas, core lisp.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5284
diff changeset
508 (mapcar handle package-lisp))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 package-load-path))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 (defun packages-load-package-dumped-lisps (package-load-path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 "Load dumped-lisp.el files along a load path.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
513 Also load files off PACKAGE-LISP definitions there."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 (packages-handle-package-dumped-lisps #'load package-load-path))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 (defun packages-collect-package-dumped-lisps (package-load-path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 "Load dumped-lisp.el files along a load path.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
518 Return list of files off PACKAGE-LISP definitions there."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 (let ((*files* '()))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520 (packages-handle-package-dumped-lisps
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 #'(lambda (file)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
522 (setq *files* (cons file *files*)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 package-load-path)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
524 (reverse *files*)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
525
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 (provide 'packages)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 ;;; packages.el ends here