Nuke hand-written node pointers in doc/lispref
[bpt/emacs.git] / doc / lispref / package.texi
CommitLineData
fdc76236
TT
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
1e103a7c 3@c Copyright (C) 2010-2012 Free Software Foundation, Inc.
fdc76236 4@c See the file elisp.texi for copying conditions.
ecc6530d 5@node Packaging
fdc76236 6@chapter Preparing Lisp code for distribution
0b3ceceb
CY
7@cindex package
8@cindex Lisp package
fdc76236 9
120d9389
CY
10 Emacs provides a standard way to distribute Emacs Lisp code to
11users. A @dfn{package} is a collection of one or more files,
12formatted and bundled in such a way that users can easily download,
13install, uninstall, and upgrade it.
fdc76236 14
120d9389
CY
15 The following sections describe how to create a package, and how to
16put it in a @dfn{package archive} for others to download.
986bd52a
CY
17@xref{Packages,,, emacs, The GNU Emacs Manual}, for a description of
18user-level features of the packaging system.
fdc76236
TT
19
20@menu
21* Packaging Basics:: The basic concepts of Emacs Lisp packages.
22* Simple Packages:: How to package a single .el file.
23* Multi-file Packages:: How to package multiple files.
120d9389 24* Package Archives:: Maintaining package archives.
fdc76236
TT
25@end menu
26
27@node Packaging Basics
28@section Packaging Basics
fdc76236 29@cindex package attributes
0b3ceceb
CY
30@cindex package name
31@cindex package version
32@cindex dependencies
33@cindex package dependencies
fdc76236 34
120d9389
CY
35 A package is either a @dfn{simple package} or a @dfn{multi-file
36package}. A simple package is stored in a package archive as a single
37Emacs Lisp file, while a multi-file package is stored as a tar file
38(containing multiple Lisp files, and possibly non-Lisp files such as a
39manual).
40
41 In ordinary usage, the difference between simple packages and
42multi-file packages is relatively unimportant; the Package Menu
43interface makes no distinction between them. However, the procedure
44for creating them differs, as explained in the following sections.
45
46 Each package (whether simple or multi-file) has certain
47@dfn{attributes}:
48
fdc76236
TT
49@table @asis
50@item Name
120d9389
CY
51A short word (e.g. @samp{auctex}). This is usually also the symbol
52prefix used in the program (@pxref{Coding Conventions}).
fdc76236
TT
53
54@item Version
120d9389
CY
55A version number, in a form that the function @code{version-to-list}
56understands (e.g. @samp{11.86}). Each release of a package should be
57accompanied by an increase in the version number.
fdc76236
TT
58
59@item Brief description
120d9389
CY
60This is shown when the package is listed in the Package Menu. It
61should occupy a single line, ideally in 36 characters or less.
fdc76236
TT
62
63@item Long description
120d9389
CY
64This is shown in the buffer created by @kbd{C-h P}
65(@code{describe-package}), following the package's brief description
66and installation status. It normally spans multiple lines, and should
50b063c3
CY
67fully describe the package's capabilities and how to begin using it
68once it is installed.
fdc76236
TT
69
70@item Dependencies
120d9389
CY
71A list of other packages (possibly including minimal acceptable
72version numbers) on which this package depends. The list may be
73empty, meaning this package has no dependencies. Otherwise,
74installing this package also automatically installs its dependencies;
75if any dependency cannot be found, the package cannot be installed.
fdc76236
TT
76@end table
77
0b3ceceb 78@cindex content directory, package
7eac3782
GM
79 Installing a package, either via the command @code{package-install-file},
80or via the Package Menu, creates a subdirectory of
120d9389
CY
81@code{package-user-dir} named @file{@var{name}-@var{version}}, where
82@var{name} is the package's name and @var{version} its version
83(e.g. @file{~/.emacs.d/elpa/auctex-11.86/}). We call this the
84package's @dfn{content directory}. It is where Emacs puts the
85package's contents (the single Lisp file for a simple package, or the
86files extracted from a multi-file package).
87
0b3ceceb 88@cindex package autoloads
120d9389
CY
89 Emacs then searches every Lisp file in the content directory for
90autoload magic comments (@pxref{Autoload}). These autoload
91definitions are saved to a file named @file{@var{name}-autoloads.el}
92in the content directory. They are typically used to autoload the
93principal user commands defined in the package, but they can also
94perform other tasks, such as adding an element to
986bd52a
CY
95@code{auto-mode-alist} (@pxref{Auto Major Mode}). Note that a package
96typically does @emph{not} autoload every function and variable defined
97within it---only the handful of commands typically called to begin
98using the package. Emacs then byte-compiles every Lisp file in the
99package.
100
101 After installation, the installed package is @dfn{loaded}: Emacs
102adds the package's content directory to @code{load-path}, and
103evaluates the autoload definitions in @file{@var{name}-autoloads.el}.
104
105 Whenever Emacs starts up, it automatically calls the function
106@code{package-initialize} to load installed packages. This is done
107after loading the init file and abbrev file (if any) and before
108running @code{after-init-hook} (@pxref{Startup Summary}). Automatic
109package loading is disabled if the user option
110@code{package-enable-at-startup} is @code{nil}.
111
112@deffn Command package-initialize &optional no-activate
113This function initializes Emacs' internal record of which packages are
114installed, and loads them. The user option @code{package-load-list}
115specifies which packages to load; by default, all installed packages
116are loaded. @xref{Package Installation,,, emacs, The GNU Emacs
117Manual}.
118
119The optional argument @var{no-activate}, if non-@code{nil}, causes
120Emacs to update its record of installed packages without actually
121loading them; it is for internal use only.
122@end deffn
fdc76236 123
120d9389
CY
124@node Simple Packages
125@section Simple Packages
0b3ceceb
CY
126@cindex single file package
127@cindex simple package
fdc76236 128
120d9389
CY
129 A simple package consists of a single Emacs Lisp source file. The
130file must conform to the Emacs Lisp library header conventions
131(@pxref{Library Headers}). The package's attributes are taken from
132the various headers, as illustrated by the following example:
fdc76236 133
120d9389
CY
134@example
135@group
136;;; superfrobnicator.el --- Frobnicate and bifurcate flanges
fdc76236 137
120d9389
CY
138;; Copyright (C) 2011 Free Software Foundation, Inc.
139@end group
fdc76236 140
120d9389
CY
141;; Author: J. R. Hacker <jrh@@example.com>
142;; Version: 1.3
143;; Package-Requires: ((flange "1.0"))
144;; Keywords: frobnicate
fdc76236 145
120d9389 146@dots{}
fdc76236 147
120d9389 148;;; Commentary:
fdc76236 149
120d9389
CY
150;; This package provides a minor mode to frobnicate and/or
151;; bifurcate any flanges you desire. To activate it, just type
152@dots{}
fdc76236 153
120d9389
CY
154;;;###autoload
155(define-minor-mode superfrobnicator-mode
156@dots{}
157@end example
fdc76236 158
120d9389
CY
159 The name of the package is the same as the base name of the file, as
160written on the first line. Here, it is @samp{superfrobnicator}.
fdc76236 161
120d9389
CY
162 The brief description is also taken from the first line. Here, it
163is @samp{Frobnicate and bifurcate flanges}.
fdc76236 164
120d9389
CY
165 The version number comes from the @samp{Package-Version} header, if
166it exists, or from the @samp{Version} header otherwise. One or the
167other @emph{must} be present. Here, the version number is 1.3.
fdc76236 168
120d9389
CY
169 If the file has a @samp{;;; Commentary:} section, this section is
170used as the long description. (When displaying the description, Emacs
171omits the @samp{;;; Commentary:} line, as well as the leading comment
172characters in the commentary itself.)
fdc76236 173
120d9389
CY
174 If the file has a @samp{Package-Requires} header, that is used as
175the package dependencies. In the above example, the package depends
176on the @samp{flange} package, version 1.0 or higher. @xref{Library
177Headers}, for a description of the @samp{Package-Requires} header. If
178the header is omitted, the package has no dependencies.
fdc76236 179
120d9389
CY
180 The file ought to also contain one or more autoload magic comments,
181as explained in @ref{Packaging Basics}. In the above example, a magic
182comment autoloads @code{superfrobnicator-mode}.
fdc76236 183
120d9389
CY
184 @xref{Package Archives}, for a explanation of how to add a
185single-file package to a package archive.
fdc76236
TT
186
187@node Multi-file Packages
188@section Multi-file Packages
0b3ceceb 189@cindex multi-file package
fdc76236 190
120d9389
CY
191 A multi-file package is less convenient to create than a single-file
192package, but it offers more features: it can include multiple Emacs
193Lisp files, an Info manual, and other file types (such as images).
194
195 Prior to installation, a multi-file package is stored in a package
196archive as a tar file. The tar file must be named
197@file{@var{name}-@var{version}.tar}, where @var{name} is the package
198name and @var{version} is the version number. Its contents, once
199extracted, must all appear in a directory named
200@file{@var{name}-@var{version}}, the @dfn{content directory}
201(@pxref{Packaging Basics}). Files may also extract into
202subdirectories of the content directory.
203
204 One of the files in the content directory must be named
205@file{@var{name}-pkg.el}. It must contain a single Lisp form,
206consisting of a call to the function @code{define-package}, described
207below. This defines the package's version, brief description, and
208requirements.
209
210 For example, if we distribute version 1.3 of the superfrobnicator as
211a multi-file package, the tar file would be
212@file{superfrobnicator-1.3.tar}. Its contents would extract into the
213directory @file{superfrobnicator-1.3}, and one of these would be the
214file @file{superfrobnicator-pkg.el}.
fdc76236
TT
215
216@defun define-package name version &optional docstring requirements
120d9389
CY
217This function defines a package. @var{name} is the package name, a
218string. @var{version} is the version, as a string of a form that can
219be understood by the function @code{version-to-list}. @var{docstring}
220is the brief description.
221
fdc76236 222@var{requirements} is a list of required packages and their versions.
120d9389
CY
223Each element in this list should have the form @code{(@var{dep-name}
224@var{dep-version})}, where @var{dep-name} is a symbol whose name is
225the dependency's package name, and @var{dep-version} is the
226dependency's version (a string).
fdc76236
TT
227@end defun
228
120d9389
CY
229 If the content directory contains a file named @file{README}, this
230file is used as the long description.
fdc76236 231
120d9389
CY
232 If the content directory contains a file named @file{dir}, this is
233assumed to be an Info directory file made with @command{install-info}.
fdc76236 234@xref{Invoking install-info, Invoking install-info, Invoking
0b3ceceb
CY
235install-info, texinfo, Texinfo}. The relevant Info files should also
236be present in the content directory. In this case, Emacs will
237automatically add the content directory to @code{Info-directory-list}
238when the package is activated.
fdc76236 239
120d9389
CY
240 Do not include any @file{.elc} files in the package. Those are
241created when the package is installed. Note that there is no way to
242control the order in which files are byte-compiled.
fdc76236 243
120d9389
CY
244 Do not include any file named @file{@var{name}-autoloads.el}. This
245file is reserved for the package's autoload definitions
246(@pxref{Packaging Basics}). It is created automatically when the
247package is installed, by searching all the Lisp files in the package
248for autoload magic comments.
fdc76236 249
120d9389
CY
250 If the multi-file package contains auxiliary data files (such as
251images), the package's Lisp code can refer to these files via the
252variable @code{load-file-name} (@pxref{Loading}). Here is an example:
fdc76236
TT
253
254@smallexample
255(defconst superfrobnicator-base (file-name-directory load-file-name))
256
257(defun superfrobnicator-fetch-image (file)
258 (expand-file-name file superfrobnicator-base))
259@end smallexample
120d9389
CY
260
261@node Package Archives
262@section Creating and Maintaining Package Archives
0b3ceceb
CY
263@cindex package archive
264
265 Via the Package Menu, users may download packages from @dfn{package
266archives}. Such archives are specified by the variable
267@code{package-archives}, whose default value contains a single entry:
268the archive hosted by the GNU project at @url{elpa.gnu.org}. This
269section describes how to set up and maintain a package archive.
270
271@cindex base location, package archive
272@defopt package-archives
273The value of this variable is an alist of package archives recognized
274by the Emacs package manager.
275
276Each alist element corresponds to one archive, and should have the
277form @code{(@var{id} . @var{location})}, where @var{id} is the name of
278the archive (a string) and @var{location} is its @dfn{base location}
279(a string).
280
281If the base location starts with @samp{http:}, it is treated as a HTTP
282URL, and packages are downloaded from this archive via HTTP (as is the
283case for the default GNU archive).
284
285Otherwise, the base location should be a directory name. In this
286case, Emacs retrieves packages from this archive via ordinary file
287access. Such ``local'' archives are mainly useful for testing.
288@end defopt
289
290 A package archive is simply a directory in which the package files,
291and associated files, are stored. If you want the archive to be
292reachable via HTTP, this directory must be accessible to a web server.
293How to accomplish this is beyond the scope of this manual.
294
295 A convenient way to set up and update a package archive is via the
296@code{package-x} library. This is included with Emacs, but not loaded
0b128ac4
MR
297by default; type @kbd{M-x load-library @key{RET} package-x @key{RET}} to
298load it, or add @code{(require 'package-x)} to your init file.
0b3ceceb
CY
299@xref{Lisp Libraries,, Lisp Libraries, emacs, The GNU Emacs Manual}.
300Once loaded, you can make use of the following:
301
302@defopt package-archive-upload-base
303The value of this variable is the base location of a package archive,
304as a directory name. The commands in the @code{package-x} library
305will use this base location.
306
307The directory name should be absolute. You may specify a remote name,
308such as @file{/ssh:foo@@example.com:/var/www/packages/}, if the
309package archive is on a different machine. @xref{Remote Files,,
310Remote Files, emacs, The GNU Emacs Manual}.
311@end defopt
312
313@deffn Command package-upload-file filename
314This command prompts for @var{filename}, a file name, and uploads that
315file to @code{package-archive-upload-base}. The file must be either a
316simple package (a @file{.el} file) or a multi-file package (a
317@file{.tar} file); otherwise, an error is raised. The package
318attributes are automatically extracted, and the archive's contents
319list is updated with this information.
320
321If @code{package-archive-upload-base} does not specify a valid
322directory, the function prompts interactively for one. If the
323directory does not exist, it is created. The directory need not have
324any initial contents (i.e., you can use this command to populate an
325initially empty archive).
326@end deffn
327
328@deffn Command package-upload-buffer
329This command is similar to @code{package-upload-file}, but instead of
330prompting for a package file, it uploads the contents of the current
331buffer. The current buffer must be visiting a simple package (a
332@file{.el} file) or a multi-file package (a @file{.tar} file);
333otherwise, an error is raised.
334@end deffn
335
336@noindent
337After you create an archive, remember that it is not accessible in the
338Package Menu interface unless it is in @code{package-archives}.