annotate lisp/package-admin.el @ 314:341dac730539 r21-0b55

Import from CVS: tag r21-0b55
author cvs
date Mon, 13 Aug 2007 10:44:22 +0200
parents ca9a9ec9c1c1
children afd57c14dfc8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
217
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
1 ;;; package-admin.el --- Installation and Maintenance of XEmacs packages
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
2
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
3 ;; Copyright (C) 1997 by Free Software Foundation, Inc.
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
4
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
5 ;; Author: SL Baur <steve@altair.xemacs.org>
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
6 ;; Keywords: internal
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
7
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
8 ;; This file is part of XEmacs.
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
9
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
10 ;; XEmacs is free software; you can redistribute it and/or modify it
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
11 ;; under the terms of the GNU General Public License as published by
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
13 ;; any later version.
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
14
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
15 ;; XEmacs is distributed in the hope that it will be useful, but
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
18 ;; General Public License for more details.
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
19
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
21 ;; along with XEmacs; see the file COPYING. If not, write to the Free
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
22 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
23 ;; 02111-1307, USA.
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
24
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
25 ;;; Synched up with: Not in FSF
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
26
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
27 ;;; Commentary:
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
28
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
29 ;; First pass at lisp front end to package maintenance.
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
30
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
31 ;;; Code:
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
32
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
33 (require 'config)
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
34
237
89ec2bb86eea Import from CVS: tag r20-5b17
cvs
parents: 217
diff changeset
35 (defvar package-admin-xemacs (concat invocation-directory invocation-name)
217
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
36 "Location of XEmacs binary to use.")
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
37
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
38 (defvar package-admin-temp-buffer "*Package Output*"
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
39 "Temporary buffer where output of backend commands is saved.")
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
40
314
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
41 (defvar package-admin-install-function 'package-admin-default-install-function
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
42 "The function to call to install a package.
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
43 Three args are passed: FILENAME PKG-DIR BUF
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
44 Install package FILENAME into directory PKG-DIR, with any messages output
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
45 to buffer BUF.")
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
46
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
47 (defvar package-admin-error-messages '(
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
48 "No space left on device"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
49 "No such file or directory"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
50 "Filename too long"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
51 "Read-only file system"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
52 "File too large"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
53 "Too many open files"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
54 "Not enough space"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
55 "Permission denied"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
56 "Input/output error"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
57 "Out of memory"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
58 "Unable to create directory"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
59 "Directory checksum error"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
60 "Cannot exclusively open file"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
61 "corrupted file"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
62 "incomplete .* tree"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
63 "Bad table"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
64 "corrupt input"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
65 "invalid compressed data"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
66 "too many leaves in Huffman tree"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
67 "not a valid zip file"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
68 "first entry not deflated or stored"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
69 "encrypted file --"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
70 "unexpected end of file"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
71 )
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
72 "Regular expressions of possible error messages.
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
73 After each package extraction, the `package-admin-temp-buffer' buffer is
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
74 scanned for these messages. An error code is returned if one of these are
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
75 found.
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
76
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
77 This is awful, but it exists because error return codes aren't reliable
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
78 under MS Windows.")
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
79
217
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
80 ;;;###autoload
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
81 (defun package-admin-add-single-file-package (file destdir &optional pkg-dir)
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
82 "Install a single file Lisp package into XEmacs package hierarchy.
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
83 `file' should be the full path to the lisp file to install.
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
84 `destdir' should be a simple directory name.
243
f220cc83d72e Import from CVS: tag r20-5b20
cvs
parents: 237
diff changeset
85 The optional `pkg-dir' can be used to override the default package hierarchy
274
ca9a9ec9c1c1 Import from CVS: tag r21-0b35
cvs
parents: 243
diff changeset
86 \(car \(last late-packages))."
217
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
87 (interactive "fLisp File: \nsDestination: ")
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
88 (when (null pkg-dir)
274
ca9a9ec9c1c1 Import from CVS: tag r21-0b35
cvs
parents: 243
diff changeset
89 (setq pkg-dir (car (last late-packages))))
217
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
90 (let ((destination (concat pkg-dir "/lisp/" destdir))
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
91 (buf (get-buffer-create package-admin-temp-buffer)))
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
92 (call-process "add-little-package.sh"
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
93 nil
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
94 buf
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
95 t
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
96 ;; rest of command line follows
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
97 package-admin-xemacs file destination)))
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
98
314
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
99 (defun package-admin-install-function-mswindows (file pkg-dir buf)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
100 "Install function for mswindows"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
101 (let ( (default-directory pkg-dir) )
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
102 (call-process "djtar" nil buf t "-x" file)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
103 ))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
104
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
105 (defun package-admin-default-install-function (file pkg-dir buf)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
106 "Default function to install a package.
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
107 Install package FILENAME into directory PKG-DIR, with any messages output
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
108 to buffer BUF."
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
109 (let (filename)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
110 (setq filename (expand-file-name file pkg-dir))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
111 (if (shell-command (concat "gunzip -c " filename " | tar xvf -") buf)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
112 0
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
113 1)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
114 ))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
115
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
116 ; (call-process "add-big-package.sh"
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
117 ; nil
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
118 ; buf
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
119 ; t
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
120 ; ;; rest of command line follows
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
121 ; package-admin-xemacs file pkg-dir))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
122
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
123 (defun package-admin-get-install-dir (pkg-dir)
217
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
124 (when (null pkg-dir)
274
ca9a9ec9c1c1 Import from CVS: tag r21-0b35
cvs
parents: 243
diff changeset
125 (when (or (not (listp late-packages))
ca9a9ec9c1c1 Import from CVS: tag r21-0b35
cvs
parents: 243
diff changeset
126 (not late-packages))
217
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
127 (error "No package path"))
274
ca9a9ec9c1c1 Import from CVS: tag r21-0b35
cvs
parents: 243
diff changeset
128 (setq pkg-dir (car (last late-packages))))
314
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
129 pkg-dir
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
130 )
217
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
131
314
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
132 ;;;###autoload
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
133 (defun package-admin-add-binary-package (file &optional pkg-dir)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
134 "Install a pre-bytecompiled XEmacs package into package hierarchy."
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
135 (interactive "fPackage tarball: ")
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
136 (setq pkg-dir (package-admin-get-install-dir pkg-dir))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
137 (let ((buf (get-buffer-create package-admin-temp-buffer))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
138 (status 1)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
139 start err-list
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
140 )
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
141 ;; Insure that the current directory doesn't change
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
142 (save-excursion
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
143 (set-buffer buf)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
144 (setq default-directory pkg-dir)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
145 (setq case-fold-search t)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
146 (buffer-disable-undo)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
147 (goto-char (setq start (point-max)))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
148 (if (= 0 (setq status (funcall package-admin-install-function
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
149 file pkg-dir buf)))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
150 (catch 'done
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
151 (goto-char start)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
152 (setq err-list package-admin-error-messages)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
153 (while err-list
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
154 (if (re-search-forward (car err-list) nil t)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
155 (progn
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
156 (setq status 1)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
157 (throw 'done nil)
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
158 ))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
159 (setq err-list (cdr err-list))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
160 )
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
161 ))
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
162 )
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
163 status
341dac730539 Import from CVS: tag r21-0b55
cvs
parents: 274
diff changeset
164 ))
217
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
165
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
166 (provide 'package-admin)
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
167
d44af0c54775 Import from CVS: tag r20-4b7
cvs
parents:
diff changeset
168 ;;; package-admin.el ends here