Update reference to maintainer.
[gnu-stow.git] / doc / stow.texi
blobf13bf406cfbf0bca3035ca417318f07688b66379
1 \input texinfo @c -*- texinfo -*-
2 @c %**start of header
3 @setfilename stow.info
4 @settitle Stow
5 @finalout
6 @c @smallbook
7 @c @setchapternewpage odd
8 @c @footnotestyle separate
9 @c %**end of header
10 @dircategory Administration
11 @direntry
12 * Stow: (stow).           GNU Stow.
13 @end direntry
15 @include version.texi
17 @ifinfo
18 This file describes GNU Stow version @value{VERSION}, a program for
19 managing the installation of software packages.
21 Software and documentation is copyrighted by the following:
23 @copyright{} 1993, 1994, 1995, 1996 Bob Glickstein <bobg+stow@@zanshin.com>
25 @copyright{} 2000, 2001 Guillaume Morin <gmorin@@gnu.org>
27 @copyright{} 2007 Kahlil (Kal) Hodgson <kahlil@@internode.on.net>
29 @copyright{} 2011 Adam Spiers <stow@@adamspiers.org>
31 Permission is granted to make and distribute verbatim copies of this
32 manual provided the copyright notice and this permission notice are
33 preserved on all copies.
35 @ignore
36 Permission is granted to process this file through TeX and print the
37 results, provided the printed document carries a copying permission
38 notice identical to this one except for the removal of this paragraph
39 (this paragraph not being relevant to the printed manual).
40 @end ignore
42 Permission is granted to copy and distribute modified versions of this
43 manual under the conditions for verbatim copying, provided also that the
44 section entitled ``GNU General Public License'' is included with the
45 modified manual, and provided that the entire resulting derived work is
46 distributed under the terms of a permission notice identical to this
47 one.
49 Permission is granted to copy and distribute translations of this manual
50 into another language, under the above conditions for modified versions,
51 except that this permission notice may be stated in a translation
52 approved by the Free Software Foundation.
53 @end ifinfo
55 @titlepage
56 @title Stow @value{VERSION}
57 @subtitle Managing the installation of software packages
58 @author Bob Glickstein, Zanshin Software, Inc.
59 @author Kahlil Hodgson, RMIT Univerity, Australia.
60 @page
61 @vskip 0pt plus 1filll
62 This manual describes GNU Stow version @value{VERSION}, a program for
63 managing the installation of software packages.
65 Software and documentation is copyrighted by the following:
67 @copyright{} 1993, 1994, 1995, 1996 Bob Glickstein <bobg+stow@@zanshin.com>
69 @copyright{} 2000, 2001 Guillaume Morin <gmorin@@gnu.org>
71 @copyright{} 2007 Kahlil (Kal) Hodgson <kahlil@@internode.on.net>
73 @copyright{} 2011 Adam Spiers <stow@@adamspiers.org>
75 Permission is granted to make and distribute verbatim copies of this
76 manual provided the copyright notice and this permission notice are
77 preserved on all copies.
79 Permission is granted to copy and distribute modified versions of this
80 manual under the conditions for verbatim copying, provided also that the
81 section entitled ``GNU General Public License'' is included with the
82 modified manual, and provided that the entire resulting derived work is
83 distributed under the terms of a permission notice identical to this
84 one.
86 Permission is granted to copy and distribute translations of this manual
87 into another language, under the above conditions for modified versions,
88 except that this permission notice may be stated in a translation
89 approved by the Free Software Foundation.
90 @end titlepage
93 @c ==========================================================================
94 @node Top, Introduction, (dir), (dir)
95 @top
97 @ifinfo
98 This manual describes GNU Stow @value{VERSION}, a program for managing
99 the installation of software packages.
100 @end ifinfo
102 @menu
103 * Introduction::                Description of Stow.
104 * Terminology::                 Terms used by this manual.
105 * Invoking Stow::               Option summary.
106 * Ignore Lists::                Controlling what gets stowed.
107 * Installing Packages::         Using Stow to install.
108 * Deleting Packages::           Using Stow to uninstall.
109 * Conflicts::                   When Stow can't stow.
110 * Mixing Operations::           Multiple actions per invocation.
111 * Multiple Stow Directories::   Further segregating software.
112 * Target Maintenance::          Cleaning up mistakes.
113 * Resource Files::              Setting default command line options.
114 * Compile-time vs Install-time::  Faking out `make install'.
115 * Bootstrapping::               When stow and perl are not yet stowed.
116 * Reporting Bugs::              How, what, where, and when to report.
117 * Known Bugs::                  Don't report any of these.
118 * GNU General Public License::  Copying terms.
119 * Index::                       Index of concepts.
121 @detailmenu
122  --- The Detailed Node Listing ---
124 Ignore Lists
126 * Motivation For Ignore Lists::  
127 * Types And Syntax Of Ignore Lists::  
128 * Justification For Yet Another Set Of Ignore Files::  
130 Compile-time vs Install-time
132 * GNU Emacs::                   
133 * Other FSF Software::          
134 * Cygnus Software::             
135 * Perl and Perl 5 Modules::     
137 @end detailmenu
138 @end menu
140 @c ===========================================================================
141 @node Introduction, Terminology, Top, Top
142 @chapter Introduction
144 Stow is a tool for managing the installation of multiple software
145 packages in the same run-time directory tree.  One historical difficulty
146 of this task has been the need to administer, upgrade, install, and
147 remove files in independent packages without confusing them with other
148 files sharing the same file system space.  For instance, it is common to
149 install Perl and Emacs in @file{/usr/local}.  When one does so, one
150 winds up with the following files@footnote{As of Perl 4.036 and Emacs
151 19.22.} in @file{/usr/local/man/man1}:
153 @example
154 a2p.1
155 ctags.1
156 emacs.1
157 etags.1
158 h2ph.1
159 perl.1
160 s2p.1
161 @end example
163 @noindent
164 Now suppose it's time to uninstall Perl.  Which man pages
165 get removed?  Obviously @file{perl.1} is one of them, but it should not
166 be the administrator's responsibility to memorize the ownership of
167 individual files by separate packages.
169 The approach used by Stow is to install each package into its own
170 tree, then use symbolic links to make it appear as though the files are
171 installed in the common tree.  Administration can be performed in the
172 package's private tree in isolation from clutter from other packages.
173 Stow can then be used to update the symbolic links.  The structure
174 of each private tree should reflect the desired structure in the common
175 tree; i.e. (in the typical case) there should be a @file{bin} directory
176 containing executables, a @file{man/man1} directory containing section 1
177 man pages, and so on.
179 Stow was inspired by Carnegie Mellon's Depot program, but is
180 substantially simpler and safer.  Whereas Depot required database files
181 to keep things in sync, Stow stores no extra state between runs, so
182 there's no danger (as there was in Depot) of mangling directories when
183 file hierarchies don't match the database.  Also unlike Depot, Stow will
184 never delete any files, directories, or links that appear in a Stow
185 directory (e.g., @file{/usr/local/stow/emacs}), so it's always possible
186 to rebuild the target tree (e.g., @file{/usr/local}).
188 For information about the latest version of Stow, you can refer to
189 http://www.gnu.org/software/stow/.
192 @c ===========================================================================
193 @node Terminology, Invoking Stow, Introduction, Top
194 @chapter Terminology
196 @indent
197 @cindex package
198 A @dfn{package} is a related collection of files and directories that
199 you wish to administer as a unit --- e.g., Perl or Emacs --- and that needs
200 to be installed in a particular directory structure --- e.g., with
201 @file{bin}, @file{lib}, and @file{man} subdirectories.
203 @cindex target directory
204 A @dfn{target directory} is the root of a tree in which one or more
205 packages wish to @emph{appear} to be installed.  A common, but by no
206 means the only such location is @file{/usr/local}.  The examples in this
207 manual will use @file{/usr/local} as the target directory.
209 @cindex stow directory
210 A @dfn{stow directory} is the root of a tree containing separate
211 packages in private subtrees.  When Stow runs, it uses the current
212 directory as the default stow directory.  The examples in this manual
213 will use @file{/usr/local/stow} as the stow directory, so that
214 individual packages will be, for example, @file{/usr/local/stow/perl}
215 and @file{/usr/local/stow/emacs}.
217 @cindex installation image
218 An @dfn{installation image} is the layout of files and directories
219 required by a package, relative to the target directory.  Thus, the
220 installation image for Perl includes: a @file{bin} directory containing
221 @file{perl} and @file{a2p} (among others); an @file{info} directory
222 containing Texinfo documentation; a @file{lib/perl} directory containing
223 Perl libraries; and a @file{man/man1} directory containing man pages.
225 @cindex package directory
226 @cindex package name
227 A @dfn{package directory} is the root of a tree containing the
228 installation image for a particular package.  Each package directory
229 must reside in a stow directory --- e.g., the package directory
230 @file{/usr/local/stow/perl} must reside in the stow directory
231 @file{/usr/local/stow}.  The @dfn{name} of a package is the name of its
232 directory within the stow directory --- e.g., @file{perl}.
234 Thus, the Perl executable might reside in
235 @file{/usr/local/stow/perl/bin/perl}, where @file{/usr/local} is the
236 target directory, @file{/usr/local/stow} is the stow directory,
237 @file{/usr/local/stow/perl} is the package directory, and
238 @file{bin/perl} within is part of the installation image.
240 @cindex symlink
241 @cindex relative symlink
242 @cindex absolute symlink
243 A @dfn{symlink} is a symbolic link.  A symlink can be @dfn{relative} or
244 @dfn{absolute}.  An absolute symlink names a full path; that is, one
245 starting from @file{/}.  A relative symlink names a relative path; that
246 is, one not starting from @file{/}.  The target of a relative symlink is
247 computed starting from the symlink's own directory.  Stow only
248 creates relative symlinks.
250 @c ===========================================================================
251 @node Invoking Stow, Ignore Lists, Terminology, Top
252 @chapter Invoking Stow
254 The syntax of the @code{stow} command is:
256 @example
257 stow [@var{options}] [@var{action flag}] @var{package @dots{}}
258 @end example
260 @noindent
261 Each @var{package} is the name of a package (e.g., @samp{perl}) in the stow
262 directory that we wish to install into (or delete from) the target directory.
263 The default action is to install the given packages, although alternate actions
264 may be specified by preceding the package name(s) with an @var{action flag}.
266 @noindent
267 The following options are supported:
269 @table @samp
271 @item -d @var{dir}
272 @itemx --dir=@var{dir}
273 Set the stow directory to @var{dir}.  Defaults to the value of the environment
274 variable @env{STOW_DIR} if set, or the current directory otherwise.
276 @item -t @var{dir}
277 @itemx --target=@var{dir}
278 Set the target directory to @var{dir} instead of the parent of the stow
279 directory.  Defaults to the parent of the stow directory, so it is typical to
280 execute @code{stow} from the directory @file{/usr/local/stow}.
282 @item --ignore='<regex>'
283 This (repeatable) option lets you suppress acting on files that match the
284 given perl regular expression.  For example, using the options
286 @example
287 --ignore='*.orig' --ignore='*.dist'
288 @end example
290 @noindent
291 will cause stow to ignore files ending in @file{.orig} or @file{.dist}.
293 Note that the regular expression is anchored to the end of the filename,
294 because this is what you will want to do most of the time.
296 Also note that by default Stow automatically ignores a ``sensible''
297 built-in list of files and directories such as @file{CVS}, editor
298 backup files, and so on.  @xref{Ignore Lists}, for more details.
300 @item --defer='<regex>'
301 This (repeatable) option avoids stowing a file matching the given
302 regular expression, if that file is already stowed by another package.
303 This is effectively the opposite of @code{--override}.
305 (N.B. the name @code{--defer} was chosen in the sense that the package
306 currently being stowed is treated with lower precedence than any
307 already installed package, not in the sense that the operation is
308 being postponed to be run at a later point in time; do not confuse
309 this nomenclature with the wording used in @ref{Deferred Operation}.)
311 For example, the following options
313 @example
314 --defer='man' --defer='info'
315 @end example
317 @noindent
318 will cause stow to skip over pre-existing man and info pages.
320 Equivalently, you could use @code{--defer='man|info'} since the
321 argument is just a Perl regex.
323 Note that the regular expression is anchored to the beginning of the path
324 relative to the target directory, because this is what you will want to do most
325 of the time.
327 @item --override='<regex>'
328 This (repeatable) option forces any file matching the regular expression to be
329 stowed, even if the file is already stowed to another package. For example,
330 the following options
332 @example
333 --override='man' --override='info'
334 @end example
336 @noindent
337 will permit stow to overwrite links that point to pre-existing man and info
338 pages that are owned by stow and would otherwise cause a conflict.
340 The regular expression is anchored to the beginning of the path relative to
341 the target directory, because this is what you will want to do most of the time.
343 @item -n
344 @itemx --no
345 @itemx --simulate
346 Do not perform any operations that modify the file system; in combination with
347 @samp{-v} can be used to merely show what would happen.
349 @item -v
350 @itemx --verbose[=@var{n}]
351 Send verbose output to standard error describing what Stow is
352 doing.  Verbosity levels are 0, 1, 2, and 3; 0 is the default.  Using
353 @samp{-v} or @samp{--verbose} increases the verbosity by one; using
354 @samp{--verbose=@var{n}} sets it to @var{n}.
356 @item -p
357 @itemx --compat
358 Scan the whole target tree when unstowing.  By default, only
359 directories specified in the @dfn{installation image} are scanned
360 during an unstow operation.  Scanning the whole tree can be
361 prohibitive if your target tree is very large.  This option restores
362 the legacy behaviour; however, the @samp{--badlinks} option to the
363 @command{chkstow} utility may be a better way of ensuring that your
364 installation does not have any dangling symlinks (@pxref{Target
365 Maintenance}).
367 @item -V
368 @itemx --version
369 Show Stow version number, and exit.
371 @item -h
372 @itemx --help
373 Show Stow command syntax, and exit.
374 @end table
376 The following @var{action flags} are supported:
378 @table @samp
379 @item -D
380 @itemx --delete
381 Delete (unstow) the package name(s) that follow this option from the @dfn{target
382 directory}. This option may be repeated any number of times.
384 @item -R
385 @itemx --restow
386 Restow (first unstow, then stow again) the package names that follow this
387 option.  This is useful for pruning obsolete symlinks from the target tree
388 after updating the software in a package. This option may be repeated any
389 number of times.
391 @item -S
392 @item --stow
393 explictly stow the package name(s) that follow this option.  May be
394 omitted if you are not using the @samp{-D} or @samp{-R} options in the
395 same invocation.  @xref{Mixing Operations}, for details of when you
396 might like to use this feature. This option may be repeated any number
397 of times.
398 @end table
401 @c ===========================================================================
402 @node Ignore Lists, Installing Packages, Invoking Stow, Top
403 @chapter Ignore Lists
405 @cindex ignore lists
406 @cindex ignoring files and directories
408 @menu
409 * Motivation For Ignore Lists::  
410 * Types And Syntax Of Ignore Lists::  
411 * Justification For Yet Another Set Of Ignore Files::  
412 @end menu
414 @c ===========================================================================
415 @node Motivation For Ignore Lists, Types And Syntax Of Ignore Lists, Ignore Lists, Ignore Lists
416 @section Motivation For Ignore Lists
418 In many situations, there will exist files under the package
419 directories which it would be undesirable to stow into the target
420 directory.  For example, files related version control such as
421 @file{.gitignore}, @file{CVS}, @file{*,v} (RCS files) should typically
422 not have symlinks from the target tree pointing to them.  Also there
423 may be files or directories relating to the build of the package which
424 are not needed at run-time.
426 In these cases, it can be rather cumbersome to specify a
427 @samp{--ignore} parameter for each file or directory to be ignored.
428 This could be worked around by ensuring the existence of
429 @file{~/.stowrc} containing multiple @samp{--ignore} lines, or if a
430 different set of files/directories should be ignored depending on
431 which stow package is involved, a @file{.stowrc} file for each stow
432 package, but this would require the user to ensure that they were in
433 the correct directory before invoking stow, which would be tedious and
434 error-prone.  Furthermore, since Stow shifts parameters from
435 @file{.stowrc} onto ARGV at run-time, it could clutter up the process
436 table with excessively long parameter lists, or even worse, exceed the
437 operating system's limit for process arguments.
439 @cindex ignore lists
440 Therefore in addition to @samp{--ignore} parameters, Stow provides a
441 way to specify lists of files and directories to ignore.
443 @c ===========================================================================
444 @node Types And Syntax Of Ignore Lists, Justification For Yet Another Set Of Ignore Files, Motivation For Ignore Lists, Ignore Lists
445 @section Types And Syntax Of Ignore Lists
447 If you put Perl regular expressions, one per line, in a
448 @file{.stow-local-ignore} file within any top level package directory,
449 in which case any file or directory within that package matching any
450 of these regular expressions will be ignored.  In the absence of this
451 package-specific ignore list, Stow will instead use the contents of
452 @file{~/.stow-global-ignore}, if it exists.  If neither the
453 package-local or global ignore list exist, Stow will use its own
454 built-in default ignore list, which serves as a useful example of the
455 format of these ignore list files:
457 @example
458 @verbatiminclude default-ignore-list
459 @end example
461 Stow first iterates through the chosen ignore list (built-in, global,
462 or package-local) as per above, stripping out comments (if you want to
463 include the @samp{#} symbol in a regular expression, escape it with a
464 blackslash) and blank lines, placing each regular expressions into one
465 of two sets depending on whether it contains the @samp{/} forward
466 slash symbol.
468 Then in order to determine whether a file or directory should be
469 ignored:
471 @enumerate
472 @item
473 Stow calculates its path relative to the top-level package directory,
474 prefixing that with @samp{/}.  If any of the regular expressions
475 containing a @samp{/} @emph{exactly}@footnote{Exact matching means the
476 regular expression is anchored at the beginning and end, in contrast
477 to unanchored regular expressions which will match a substring.} match
478 a subpath@footnote{In this context, ``subpath'' means a contiguous
479 subset of path segments; e.g for the relative path
480 @file{one/two/three/four}, the following are examples of valid
481 subpaths: @file{one}, @file{two}, @file{two/three},
482 @file{two/three/four}.} of this relative path, then the file or
483 directory will be ignored.
485 @item
486 If none of the regular expressions containing a @samp{/} match in the
487 manner described above, Stow checks whether the
488 @emph{basename}@footnote{The ``basename'' is the name of the file or
489 directory itself, excluding any directory path prefix - as returned by
490 the @command{basename} command.} of the file or directory matches
491 @emph{exactly} against the remaining regular expressions which do not
492 contain a @samp{/}, and if so, ignores the file or directory.
494 @item
495 Otherwise, the file or directory is not ignored.
496 @end enumerate
498 @c N.B. if you change the examples below, please also consider
499 @c updating test_examples_in_manual() in t/ignore.t.
501 For example, if a file @file{bazqux} is in the @file{foo/bar}
502 subdirectory of the package directory, Stow would use
503 @code{/foo/bar/bazqux} as the text for matching against regular
504 expressions which contain @samp{/}, and @code{bazqux} as the text for
505 matching against regular expressions which don't contain @samp{/}.
506 Then regular expressions @code{bazqux}, @code{baz.*}, @code{.*qux},
507 @code{bar/.*x}, and @code{^/foo/.*qux} would all match (causing the
508 file to be ignored), whereas @code{bar}, @code{baz}, and @code{qux}
509 would not (although @code{bar} would cause its parent directory to be
510 ignored and prevent Stow from recursing into that anyway, in which
511 case the file @file{bazqux} would not even be considered for
512 stowing).
514 As a special exception to the above algorithm, any
515 @file{.stow-local-ignore} present in the top-level package directory
516 is @emph{always} ignored, regardless of the contents of any ignore
517 list, because this file serves no purpose outside the stow directory.
519 @c ===========================================================================
520 @node Justification For Yet Another Set Of Ignore Files,  , Types And Syntax Of Ignore Lists, Ignore Lists
521 @section Justification For Yet Another Set Of Ignore Files
523 The reader may note that this format is very similar to existing
524 ignore list file formats, such as those for @code{CVS}, @code{git},
525 @code{rsync} etc., and wonder if another set of ignore lists is
526 justified.  However there are good reasons why Stow does not simply
527 check for the presence of say, @code{.cvsignore}, and use that if it
528 exists.  Firstly, there is no guarantee that a stow package would
529 contain any version control meta-data, or permit introducing this if
530 it didn't already exist.  
532 Secondly even if it did, version control system ignore lists generally
533 reflect @emph{build-time} ignores rather than @emph{install-time}, and
534 there may be some intermediate or temporary files on those ignore
535 lists generated during development or at build-time which it would be
536 inappropriate to stow, even though many files generated at build-time
537 (binaries, libraries, documentation etc.) certainly do need to be
538 stowed.  Similarly, if a file is @emph{not} in the version control
539 system's ignore list, there is no way of knowing whether the file is
540 intended for end use, let alone whether the version control system is
541 tracking it or not.
543 Therefore it seems clear that ignore lists provided by version control
544 systems do not provide sufficient information for Stow to determine
545 which files and directories to stow, and so it makes sense for Stow to
546 support independent ignore lists.
548 @c ===========================================================================
549 @node Installing Packages, Deleting Packages, Ignore Lists, Top
550 @chapter Installing Packages
552 @cindex installation
553 The default action of Stow is to install a package.  This means creating
554 symlinks in the target tree that point into the package tree.  Stow
555 attempts to do this with as few symlinks as possible; in other words, if
556 Stow can create a single symlink that points to an entire subtree within
557 the package tree, it will choose to do that rather than create a
558 directory in the target tree and populate it with symlinks.
560 @cindex tree folding
561 @cindex directory folding
562 @cindex folding trees
563 For example, suppose that no packages have yet been installed in
564 @file{/usr/local}; it's completely empty (except for the @file{stow}
565 subdirectory, of course).  Now suppose the Perl package is installed.
566 Recall that it includes the following directories in its installation
567 image:  @file{bin}; @file{info}; @file{lib/perl}; @file{man/man1}.
568 Rather than creating the directory @file{/usr/local/bin} and populating
569 it with symlinks to @file{../stow/perl/bin/perl} and
570 @file{../stow/perl/bin/a2p} (and so on), Stow will create a
571 single symlink, @file{/usr/local/bin}, which points to
572 @file{stow/perl/bin}.  In this way, it still works to refer to
573 @file{/usr/local/bin/perl} and @file{/usr/local/bin/a2p}, and fewer
574 symlinks have been created.  This is called @dfn{tree folding}, since an
575 entire subtree is ``folded'' into a single symlink.
577 To complete this example, Stow will also create the symlink
578 @file{/usr/local/info} pointing to @file{stow/perl/info}; the symlink
579 @file{/usr/local/lib} pointing to @file{stow/perl/lib}; and the symlink
580 @file{/usr/local/man} pointing to @file{stow/perl/man}.
582 Now suppose that instead of installing the Perl package into an empty
583 target tree, the target tree is not empty to begin with.  Instead, it
584 contains several files and directories installed under a different
585 system-administration philosophy.  In particular, @file{/usr/local/bin}
586 already exists and is a directory, as are @file{/usr/local/lib} and
587 @file{/usr/local/man/man1}.  In this case, Stow will descend into
588 @file{/usr/local/bin} and create symlinks to
589 @file{../stow/perl/bin/perl} and @file{../stow/perl/bin/a2p} (etc.),
590 and it will descend into @file{/usr/local/lib} and create the
591 tree-folding symlink @file{perl} pointing to
592 @file{../stow/perl/lib/perl}, and so on.  As a rule, Stow only
593 descends as far as necessary into the target tree when it can create a
594 tree-folding symlink.
596 @cindex splitting open folded trees
597 @cindex unfolding trees
598 The time often comes when a tree-folding symlink has to be undone
599 because another package uses one or more of the folded subdirectories in
600 its installation image.  This operation is called @dfn{splitting open} or
601 @dfn{unfolding} a folded tree.  It involves removing the original symlink from
602 the target tree, creating a true directory in its place, and then populating the
603 new directory with symlinks to the newly-installed package @emph{and} to
604 the old package that used the old symlink.  For example, suppose that
605 after installing Perl into an empty @file{/usr/local}, we wish to
606 install Emacs.  Emacs's installation image includes a @file{bin}
607 directory containing the @file{emacs} and @file{etags} executables,
608 among others.  Stow must make these files appear to be installed
609 in @file{/usr/local/bin}, but presently @file{/usr/local/bin} is a
610 symlink to @file{stow/perl/bin}.  Stow therefore takes the
611 following steps:  the symlink @file{/usr/local/bin} is deleted; the
612 directory @file{/usr/local/bin} is created; links are made from
613 @file{/usr/local/bin} to @file{../stow/emacs/bin/emacs} and
614 @file{../stow/emacs/bin/etags}; and links are made from
615 @file{/usr/local/bin} to @file{../stow/perl/bin/perl} and
616 @file{../stow/perl/bin/a2p}.
618 @cindex ownership
619 When splitting open a folded tree, Stow makes sure that the
620 symlink it is about to remove points inside a valid package in the
621 current stow directory.  @emph{Stow will never delete anything
622 that it doesn't own}.  Stow ``owns'' everything living in the
623 target tree that points into a package in the stow directory.  Anything
624 Stow owns, it can recompute if lost: symlinks that point into a package in
625 the stow directory, or directories that only contain symlinks that stow
626 ``owns''.   Note that by this definition, Stow doesn't ``own'' anything
627 @emph{in} the stow directory or in any of the packages.
629 @cindex conflict
630 If Stow needs to create a directory or a symlink in the target
631 tree and it cannot because that name is already in use and is not owned
632 by Stow, then a @dfn{conflict} has arisen.  @xref{Conflicts}.
635 @c ===========================================================================
636 @node Deleting Packages, Conflicts, Installing Packages, Top
637 @chapter Deleting Packages
639 @cindex deletion
640 When the @samp{-D} option is given, the action of Stow is to
641 delete a package from the target tree.  Note that Stow will not
642 delete anything it doesn't ``own''.  Deleting a package does @emph{not}
643 mean removing it from the stow directory or discarding the package
644 tree.
646 To delete a package, Stow recursively scans the target tree, skipping over any
647 directory that is not included in the installation image.@footnote{This
648 approach was introduced in version 2 of GNU Stow.  Previously, the whole
649 target tree was scanned and stow directories were explicitly omitted.  This
650 became problematic when dealing with very large installations.  The only
651 situation where this is useful is if you accidentally delete a directory in
652 the package tree, leaving you with a whole bunch of dangling links.  Note that
653 you can enable the old approach with the @samp{-p} option.  Alternatively, you can
654 use the @samp{--badlinks} option get stow to search for dangling links in your target tree and remove the offenders manually.}
655 For example, if the target directory is @file{/usr/local} and the
656 installation image for the package being deleted has only a @file{bin}
657 directory and a @file{man} directory at the top level, then we only scan
658 @file{/usr/local/bin} and  @file{/usr/local/bin/man}, and not
659 @file{/usr/local/lib} or @file{/usr/local/share}, or for that matter
660 @file{/usr/local/stow}.  Any symlink it finds that points into the package
661 being deleted is removed.  Any directory that contained only symlinks to the
662 package being deleted is removed.  Any directory that, after removing symlinks
663 and empty subdirectories, contains only symlinks to a single other package, is
664 considered to be a previously ``folded'' tree that was ``split open.''  Stow
665 will re-fold the tree by removing the symlinks to the surviving package,
666 removing the directory, then linking the directory back to the surviving
667 package.
670 @c ===========================================================================
671 @node Conflicts, Mixing Operations, Deleting Packages, Top
672 @chapter Conflicts
674 If, during installation, a file or symlink exists in the target tree and
675 has the same name as something Stow needs to create, and if the
676 existing name is not a folded tree that can be split open, then a
677 @dfn{conflict} has arisen.  A conflict also occurs if a directory exists
678 where Stow needs to place a symlink to a non-directory.  On the
679 other hand, if the existing name is merely a symlink that already points
680 where Stow needs it to, then no conflict has occurred.  (Thus it
681 is harmless to install a package that has already been installed.)
683 For complex packages, scanning the stow and target trees in tandem,
684 and deciding whether to make directories or links, split-open or fold
685 directories, can actually take a long time (a number of seconds).
686 Moreover, an accurate analysis of potential conflicts requires us to
687 take into account all of these operations.
689 @anchor{Deferred Operation}
690 @section Deferred Operation
692 Since version 2.0, Stow now adopts a two-phase algorithm, first
693 scanning for any potential conflicts before any stowing or unstowing
694 operations are performed.  If any conflicts are found, they are
695 displayed and then Stow terminates without making any modifications to
696 the filesystem.  This means that there is much less risk of a package
697 being partially stowed or unstowed due to conflicts.
699 Prior to version 2.0, if a conflict was discovered, the stow or unstow
700 operation could be aborted mid-flow, leaving the target tree in an
701 inconsistent state.
703 @c ===========================================================================
704 @node Mixing Operations, Multiple Stow Directories, Conflicts, Top
705 @chapter Mixing Operations
707 Since version 2.0, multiple distinct actions can be specified in a single
708 invocation of GNU Stow.  For example, to update an installation of Emacs from
709 version 21.3 to 21.4a you can now do the following:
711 @example
712 stow -D emacs-21.3 -S emacs-21.4a
713 @end example
715 @noindent
716 which will replace emacs-21.3 with emacs-21.4a using a single invocation.
718 This is much faster and cleaner than performing two separate
719 invocations of stow, because redundant folding/unfolding operations
720 can be factored out.  In addition, all the operations are calculated
721 and merged before being executed (@pxref{Deferred Operation}), so the
722 amount of of time in which GNU Emacs is unavailable is minimised.
724 You can mix and match any number of actions, for example,
726 @example
727 stow -S pkg1 pkg2 -D pkg3 pkg4 -S pkg5 -R pkg6
728 @end example
730 @noindent
731 will unstow pkg3, pkg4 and pkg6, then stow pkg1, pkg2, pkg5 and pkg6.
733 @c ===========================================================================
734 @node Multiple Stow Directories, Target Maintenance, Mixing Operations, Top
735 @chapter Multiple Stow Directories
737 If there are two or more system administrators who wish to maintain
738 software separately, or if there is any other reason to want two or more
739 stow directories, it can be done by creating a file named @file{.stow}
740 in each stow directory.  The presence of @file{/usr/local/foo/.stow}
741 informs Stow that, though @file{foo} is not the current stow
742 directory, even if it is a subdirectory of the target directory,
743 nevertheless it is @emph{a} stow directory and as such Stow
744 doesn't ``own'' anything in it (@pxref{Installing Packages}).  This will
745 protect the contents of @file{foo} from a @samp{stow -D}, for instance.
747 @c There is a test for the following case in t/examples.t:
749 When multiple stow directories share a target tree, if a tree-folding
750 symlink is encountered and needs to be split open during an
751 installation, as long as the top-level stow directory into which the
752 existing symlink points contains @file{.stow}, Stow knows how to split
753 open the tree in the correct manner.
755 @c ===========================================================================
756 @node Target Maintenance, Resource Files, Multiple Stow Directories, Top
757 @chapter Target Maintenance
759 From time to time you will need to clean up your target tree.  Since
760 version 2, Stow provides a new utility @command{chkstow} to help with
761 this.  It includes three operational modes which performs checks that
762 would generally be too expensive to be performed during normal stow
763 execution.
765 The syntax of the @code{chkstow} command is:
767 @example
768 chkstow [@var{options}]
769 @end example
771 @noindent
772 The following options are supported:
774 @table @samp
776 @item -t @var{dir}
777 @itemx --target=@var{dir}
778 Set the target directory to @var{dir} instead of the parent of the stow
779 directory.  Defaults to the parent of the stow directory, so it is typical to
780 execute @code{stow} from the directory @file{/usr/local/stow}.
782 @item -b
783 @itemx --badlinks
784 Checks target directory for bogus symbolic links. That is, links that point to
785 non-existent files.
787 @item -a
788 @itemx --aliens
789 Checks for files in the target directory that are not symbolic links. The
790 target directory should be managed by stow alone, except for directories that
791 contain a @file{.stow} file.
793 @item -l
794 @itemx --list
795 Will display the target package for every symbolic link in the stow target
796 directory.
798 @end table
800 @c ===========================================================================
801 @node Resource Files, Compile-time vs Install-time, Target Maintenance, Top
802 @chapter Resource Files
804 Default command line options may be set in `.stowrc' (current directory) or
805 `~/.stowrc' (home directory). These are parsed in that order, and effectively
806 prepended to you command line.  This feature can be used for some interesting
807 effects.
809 For example, suppose your site uses more than one stow directory, perhaps in
810 order to share around responsibilities with a number of systems
811 administrators. One of the administrators might have the following in there
812 `~/.stowrc' file:
814 @example
815 --dir=/usr/local/stow2
816 --target=/usr/local
817 --ignore='~'
818 --ignore='^CVS'
819 @end example
821 so that the `stow' command will default to operating on the @file{/usr/local/stow2}
822 directory, with @file{/usr/local} as the target, and ignoring vi backup files
823 and CVS directories.
825 If you had a stow directory `/usr/local/stow/perl-extras' that was only used
826 for Perl modules, then you might place the following in
827 `/usr/local/stow/perl-extras/.stowrc':
829 @example
830 --dir=/usr/local/stow/perl-extras
831 --target=/usr/local
832 --override=bin
833 --override=man
834 --ignore='perllocal\.pod'
835 --ignore='\.packlist'
836 --ignore='\.bs'
837 @end example
839 so that the when your are in the @file{/usr/local/stow/perl-extras} directory,
840 `stow' will regard any subdirectories as stow packages, with @file{/usr/local}
841 as the target (rather than the immediate parent directoy
842 @file{/usr/local/stow}), overriding any pre-existing links to bin files or man
843 pages, and ignoring some cruft that gets installed by default.
846 @c ===========================================================================
847 @node Compile-time vs Install-time, Bootstrapping, Resource Files, Top
848 @chapter Compile-time vs Install-time
850 Software whose installation is managed with Stow needs to be installed
851 in one place (the package directory, e.g. @file{/usr/local/stow/perl})
852 but needs to appear to run in another place (the target tree, e.g.,
853 @file{/usr/local}).  Why is this important?  What's wrong with Perl, for
854 instance, looking for its files in @file{/usr/local/stow/perl} instead
855 of in @file{/usr/local}?
857 The answer is that there may be another package, e.g.,
858 @file{/usr/local/stow/perl-extras}, stowed under @file{/usr/local}.  If
859 Perl is configured to find its files in @file{/usr/local/stow/perl}, it
860 will never find the extra files in the @samp{perl-extras} package, even
861 though they're intended to be found by Perl.  On the other hand, if Perl
862 looks for its files in @file{/usr/local}, then it will find the
863 intermingled Perl and @samp{perl-extras} files.
865 This means that when you compile a package, you must tell it the
866 location of the run-time, or target tree; but when you install it, you
867 must place it in the stow tree.
869 Some software packages allow you to specify, at compile-time, separate
870 locations for installation and for run-time.  Perl is one such package;
871 see @ref{Perl and Perl 5 Modules}.  Others allow you to compile the
872 package, then give a different destination in the @samp{make install}
873 step without causing the binaries or other files to get rebuilt.  Most
874 GNU software falls into this category; Emacs is a notable exception.
875 @xref{GNU Emacs}, and @ref{Other FSF Software}.
877 Still other software packages cannot abide the idea of separate
878 installation and run-time locations at all.  If you try to @samp{make
879 install prefix=/usr/local/stow/@var{foo}}, then first the whole package
880 will be recompiled to hardwire the @file{/usr/local/stow/@var{foo}}
881 path.  With these packages, it is best to compile normally, then run
882 @samp{make -n install}, which should report all the steps needed to
883 install the just-built software.  Place this output into a file, edit
884 the commands in the file to remove recompilation steps and to reflect
885 the Stow-based installation location, and execute the edited file as a
886 shell script in place of @samp{make install}.  Be sure to execute the
887 script using the same shell that @samp{make install} would have used.
889 (If you use GNU Make and a shell [such as GNU bash] that understands
890 @code{pushd} and @code{popd}, you can do the following:
892 @enumerate
893 @item
894 Replace all lines matching @samp{make[@var{n}]: Entering directory
895 `@var{dir}'} with @code{pushd @var{dir}}.
896 @item
897 Replace all lines matching @samp{make[@var{n}]: Leaving directory
898 `@var{dir}'} with @code{popd}.
899 @item
900 Delete all lines matching @samp{make[@var{n}]: Nothing to be done for
901 @var{rule}}.
902 @end enumerate
904 Then find other lines in the output containing @code{cd} or @code{make}
905 commands and rewrite or delete them.  In particular, you should be able
906 to delete sections of the script that resemble this:
908 @example
909 for i in @var{dir_1} @var{dir_2} @r{@dots{}}; do \
910   (cd $i; make @var{args} @r{@dots{}}) \
911 done
912 @end example
914 @noindent
915 Note, that's ``should be able to,'' not ``can.''  Be sure to modulate
916 these guidelines with plenty of your own intelligence.
918 The details of stowing some specific packages are described in the
919 following sections.
921 @menu
922 * GNU Emacs::                   
923 * Other FSF Software::          
924 * Cygnus Software::             
925 * Perl and Perl 5 Modules::     
926 @end menu
928 @c ---------------------------------------------------------------------------
929 @node GNU Emacs, Other FSF Software, Compile-time vs Install-time, Compile-time vs Install-time
930 @section GNU Emacs
932 Although the Free Software Foundation has many enlightened practices
933 regarding Makefiles and software installation (see @pxref{Other FSF
934 Software}), Emacs, its flagship program, doesn't quite follow the
935 rules.  In particular, most GNU software allows you to write:
937 @example
938 make
939 make install prefix=/usr/local/stow/@var{package}
940 @end example
942 @noindent
943 If you try this with Emacs, then the new value for @code{prefix} in the
944 @samp{make install} step will cause some files to get recompiled with
945 the new value of @code{prefix} wired into them.  In Emacs 19.23 and
946 later,@footnote{As I write this, the current version of Emacs is 19.31.}
947 the way to work around this problem is:
949 @example
950 make
951 make install-arch-dep install-arch-indep prefix=/usr/local/stow/emacs
952 @end example
954 In 19.22 and some prior versions of Emacs, the workaround was:
956 @example
957 make
958 make do-install prefix=/usr/local/stow/emacs
959 @end example
961 @c ---------------------------------------------------------------------------
962 @node Other FSF Software, Cygnus Software, GNU Emacs, Compile-time vs Install-time
963 @section Other FSF Software
965 The Free Software Foundation, the organization behind the GNU project,
966 has been unifying the build procedure for its tools for some time.
967 Thanks to its tools @samp{autoconf} and @samp{automake}, most packages
968 now respond well to these simple steps, with no other intervention
969 necessary:
971 @example
972 ./configure @var{options}
973 make
974 make install prefix=/usr/local/stow/@var{package}
975 @end example
977 Hopefully, these tools can evolve to be aware of Stow-managed packages,
978 such that providing an option to @samp{configure} can allow @samp{make}
979 and @samp{make install} steps to work correctly without needing to
980 ``fool'' the build process.
982 @c ---------------------------------------------------------------------------
983 @node Cygnus Software, Perl and Perl 5 Modules, Other FSF Software, Compile-time vs Install-time
984 @section Cygnus Software
986 Cygnus is a commercial supplier and supporter of GNU software.  It has
987 also written several of its own packages, released under the terms of
988 the GNU General Public License; and it has taken over the maintenance of
989 other packages.  Among the packages released by Cygnus are @samp{gdb},
990 @samp{gnats}, and @samp{dejagnu}.
992 Cygnus packages have the peculiarity that each one unpacks into a
993 directory tree with a generic top-level Makefile, which is set up to
994 compile @emph{all} of Cygnus' packages, any number of which may reside
995 under the top-level directory.  In other words, even if you're only
996 building @samp{gnats}, the top-level Makefile will look for, and try to
997 build, @file{gdb} and @file{dejagnu} subdirectories, among many others.
999 The result is that if you try @samp{make -n install
1000 prefix=/usr/local/stow/@var{package}} at the top level of a Cygnus
1001 package, you'll get a bewildering amount of output.  It will then be
1002 very difficult to visually scan the output to see whether the install
1003 will proceed correctly.  Unfortunately, it's not always clear how to
1004 invoke an install from the subdirectory of interest.
1006 In cases like this, the best approach is to run your @samp{make install
1007 prefix=@r{@dots{}}}, but be ready to interrupt it if you detect that it
1008 is recompiling files.  Usually it will work just fine; otherwise,
1009 install manually.
1011 @c ---------------------------------------------------------------------------
1012 @node Perl and Perl 5 Modules,  , Cygnus Software, Compile-time vs Install-time
1013 @section Perl and Perl 5 Modules
1015 Perl 4.036 allows you to specify different locations for installation
1016 and for run-time.  It is the only widely-used package in this author's
1017 experience that allows this, though hopefully more packages will adopt
1018 this model.
1020 Unfortunately, the authors of Perl believed that only AFS sites need
1021 this ability.  The configuration instructions for Perl 4 misleadingly
1022 state that some occult means are used under AFS to transport files from
1023 their installation tree to their run-time tree.  In fact, that confusion
1024 arises from the fact that Depot, Stow's predecessor, originated at
1025 Carnegie Mellon University, which was also the birthplace of AFS.  CMU's
1026 need to separate install-time and run-time trees stemmed from its use of
1027 Depot, not from AFS.
1029 The result of this confusion is that Perl 5's configuration script
1030 doesn't even offer the option of separating install-time and run-time
1031 trees @emph{unless} you're running AFS.  Fortunately, after you've
1032 entered all the configuration settings, Perl's setup script gives you
1033 the opportunity to edit those settings in a file called
1034 @file{config.sh}.  When prompted, you should edit this file and replace
1035 occurrences of
1037 @example
1038 inst@r{@dots{}}/usr/local@r{@dots{}}
1039 @end example
1041 @noindent
1042 with
1044 @example
1045 inst@r{@dots{}}/usr/local/stow/perl@r{@dots{}}
1046 @end example
1048 @noindent
1049 You can do this with the following Unix command:
1051 @example
1052 sed 's,^\(inst.*/usr/local\),\1/stow/perl,' config.sh > config.sh.new
1053 mv config.sh.new config.sh
1054 @end example
1056 Hopefully, the Perl authors will correct this deficiency in Perl 5's
1057 configuration mechanism.
1059 Perl 5 modules---i.e., extensions to Perl 5---generally conform to a set
1060 of standards for building and installing them.  The standard says that
1061 the package comes with a top-level @file{Makefile.PL}, which is a Perl
1062 script.  When it runs, it generates a @file{Makefile}.
1064 If you followed the instructions above for editing @file{config.sh} when
1065 Perl was built, then when you create a @file{Makefile} from a
1066 @file{Makefile.PL}, it will contain separate locations for run-time
1067 (@file{/usr/local}) and install-time (@file{/usr/local/stow/perl}).
1068 Thus you can do
1070 @example
1071 perl Makefile.PL
1072 make
1073 make install
1074 @end example
1076 @noindent
1077 and the files will be installed into @file{/usr/local/stow/perl}.
1078 However, you might prefer each Perl module to be stowed separately.  In
1079 that case, you must edit the resulting Makefile, replacing
1080 @file{/usr/local/stow/perl} with @file{/usr/local/stow/@var{module}}.
1081 The best way to do this is:
1083 @example
1084 perl Makefile.PL
1085 find . -name Makefile -print | \
1086   xargs perl -pi~ -e 's,^(INST.*/stow)/perl,$1/@var{module},;'
1087 make
1088 make install
1089 @end example
1091 @noindent
1092 (The use of @samp{find} and @samp{xargs} ensures that all Makefiles in
1093 the module's source tree, even those in subdirectories, get edited.)  A
1094 good convention to follow is to name the stow directory for a Perl
1095 @var{module} @file{cpan.@var{module}}, where @samp{cpan} stands for
1096 Comprehensive Perl Archive Network, a collection of FTP sites that is
1097 the source of most Perl 5 extensions.  This way, it's easy to tell at a
1098 glance which of the subdirectories of @file{/usr/local/stow} are Perl 5
1099 extensions.
1101 When you stow separate Perl 5 modules separately, you are likely to
1102 encounter conflicts (@pxref{Conflicts}) with files named @file{.exists}
1103 and @file{perllocal.pod}.  One way to work around this is to remove
1104 those files before stowing the module.  If you use the
1105 @file{cpan.@var{module}} naming convention, you can simply do this:
1107 @example
1108 cd /usr/local/stow
1109 find cpan.* \( -name .exists -o -name perllocal.pod \) -print | \
1110   xargs rm
1111 @end example
1114 @c ---------------------------------------------------------------------------
1115 @node Bootstrapping, Reporting Bugs, Compile-time vs Install-time, Top
1116 @chapter Bootstrapping
1118 Suppose you have a stow directory all set up and ready to go:
1119 @file{/usr/local/stow/perl} contains the Perl installation,
1120 @file{/usr/local/stow/stow} contains Stow itself, and perhaps you have
1121 other packages waiting to be stowed.  You'd like to be able to do this:
1123 @example
1124 cd /usr/local/stow
1125 stow -vv *
1126 @end example
1128 @noindent
1129 but @code{stow} is not yet in your @code{PATH}.  Nor can you do this:
1131 @example
1132 cd /usr/local/stow
1133 stow/bin/stow -vv *
1134 @end example
1136 @noindent
1137 because the @samp{#!} line at the beginning of @code{stow} tries to
1138 locate Perl (usually in @file{/usr/local/bin/perl}), and that won't be
1139 found.  The solution you must use is:
1141 @example
1142 cd /usr/local/stow
1143 perl/bin/perl stow/bin/stow -vv *
1144 @end example
1146 @c ===========================================================================
1147 @node Reporting Bugs, Known Bugs, Bootstrapping, Top
1148 @chapter Reporting Bugs
1150 Please send bug reports to the current maintainers by electronic
1151 mail.  The address to use is @samp{<bug-stow@@gnu.org>}.  Please
1152 include:
1154 @itemize @bullet
1155 @item
1156 the version number of Stow (@samp{stow --version});
1158 @item
1159 the version number of Perl (@samp{perl -v});
1161 @item
1162 the system information, which can often be obtained with @samp{uname
1163 -a};
1165 @item
1166 a description of the bug;
1168 @item
1169 the precise command you gave;
1171 @item
1172 the output from the command (preferably verbose output, obtained by
1173 adding @samp{--verbose=3} to the Stow command line).
1174 @end itemize
1176 If you are really keen, consider developing a minimal test case and
1177 creating a new test.  See the @file{t/} for lots of examples.
1179 Before reporting a bug, please read the manual carefully, especially
1180 @ref{Known Bugs}, to see whether you're encountering
1181 something that doesn't need reporting.
1182 (@pxref{Conflicts}).
1184 @c ===========================================================================
1185 @node Known Bugs, GNU General Public License, Reporting Bugs, Top
1186 @chapter Known Bugs
1188 @itemize @bullet
1189 @item
1190 When using multiple stow directories (@pxref{Multiple Stow
1191 Directories}), Stow fails to ``split open'' tree-folding symlinks
1192 (@pxref{Installing Packages}) that point into a stow directory which is
1193 not the one in use by the current Stow command.  Before failing, it
1194 should search the target of the link to see whether any element of the
1195 path contains a @file{.stow} file.  If it finds one, it can ``learn''
1196 about the cooperating stow directory to short-circuit the @file{.stow}
1197 search the next time it encounters a tree-folding symlink.
1198 @end itemize
1200 @c ===========================================================================
1201 @node GNU General Public License, Index, Known Bugs, Top
1202 @unnumbered GNU General Public License
1204 @center Version 2, June 1991
1206 @display
1207 Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
1208 675 Mass Ave, Cambridge, MA 02139, USA
1210 Everyone is permitted to copy and distribute verbatim copies
1211 of this license document, but changing it is not allowed.
1212 @end display
1214 @unnumberedsec Preamble
1216   The licenses for most software are designed to take away your
1217 freedom to share and change it.  By contrast, the GNU General Public
1218 License is intended to guarantee your freedom to share and change free
1219 software---to make sure the software is free for all its users.  This
1220 General Public License applies to most of the Free Software
1221 Foundation's software and to any other program whose authors commit to
1222 using it.  (Some other Free Software Foundation software is covered by
1223 the GNU Library General Public License instead.)  You can apply it to
1224 your programs, too.
1226   When we speak of free software, we are referring to freedom, not
1227 price.  Our General Public Licenses are designed to make sure that you
1228 have the freedom to distribute copies of free software (and charge for
1229 this service if you wish), that you receive source code or can get it
1230 if you want it, that you can change the software or use pieces of it
1231 in new free programs; and that you know you can do these things.
1233   To protect your rights, we need to make restrictions that forbid
1234 anyone to deny you these rights or to ask you to surrender the rights.
1235 These restrictions translate to certain responsibilities for you if you
1236 distribute copies of the software, or if you modify it.
1238   For example, if you distribute copies of such a program, whether
1239 gratis or for a fee, you must give the recipients all the rights that
1240 you have.  You must make sure that they, too, receive or can get the
1241 source code.  And you must show them these terms so they know their
1242 rights.
1244   We protect your rights with two steps: (1) copyright the software, and
1245 (2) offer you this license which gives you legal permission to copy,
1246 distribute and/or modify the software.
1248   Also, for each author's protection and ours, we want to make certain
1249 that everyone understands that there is no warranty for this free
1250 software.  If the software is modified by someone else and passed on, we
1251 want its recipients to know that what they have is not the original, so
1252 that any problems introduced by others will not reflect on the original
1253 authors' reputations.
1255   Finally, any free program is threatened constantly by software
1256 patents.  We wish to avoid the danger that redistributors of a free
1257 program will individually obtain patent licenses, in effect making the
1258 program proprietary.  To prevent this, we have made it clear that any
1259 patent must be licensed for everyone's free use or not licensed at all.
1261   The precise terms and conditions for copying, distribution and
1262 modification follow.
1264 @iftex
1265 @unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
1266 @end iftex
1267 @ifinfo
1268 @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
1269 @end ifinfo
1271 @enumerate 0
1272 @item
1273 This License applies to any program or other work which contains
1274 a notice placed by the copyright holder saying it may be distributed
1275 under the terms of this General Public License.  The ``Program'', below,
1276 refers to any such program or work, and a ``work based on the Program''
1277 means either the Program or any derivative work under copyright law:
1278 that is to say, a work containing the Program or a portion of it,
1279 either verbatim or with modifications and/or translated into another
1280 language.  (Hereinafter, translation is included without limitation in
1281 the term ``modification''.)  Each licensee is addressed as ``you''.
1283 Activities other than copying, distribution and modification are not
1284 covered by this License; they are outside its scope.  The act of
1285 running the Program is not restricted, and the output from the Program
1286 is covered only if its contents constitute a work based on the
1287 Program (independent of having been made by running the Program).
1288 Whether that is true depends on what the Program does.
1290 @item
1291 You may copy and distribute verbatim copies of the Program's
1292 source code as you receive it, in any medium, provided that you
1293 conspicuously and appropriately publish on each copy an appropriate
1294 copyright notice and disclaimer of warranty; keep intact all the
1295 notices that refer to this License and to the absence of any warranty;
1296 and give any other recipients of the Program a copy of this License
1297 along with the Program.
1299 You may charge a fee for the physical act of transferring a copy, and
1300 you may at your option offer warranty protection in exchange for a fee.
1302 @item
1303 You may modify your copy or copies of the Program or any portion
1304 of it, thus forming a work based on the Program, and copy and
1305 distribute such modifications or work under the terms of Section 1
1306 above, provided that you also meet all of these conditions:
1308 @enumerate a
1309 @item
1310 You must cause the modified files to carry prominent notices
1311 stating that you changed the files and the date of any change.
1313 @item
1314 You must cause any work that you distribute or publish, that in
1315 whole or in part contains or is derived from the Program or any
1316 part thereof, to be licensed as a whole at no charge to all third
1317 parties under the terms of this License.
1319 @item
1320 If the modified program normally reads commands interactively
1321 when run, you must cause it, when started running for such
1322 interactive use in the most ordinary way, to print or display an
1323 announcement including an appropriate copyright notice and a
1324 notice that there is no warranty (or else, saying that you provide
1325 a warranty) and that users may redistribute the program under
1326 these conditions, and telling the user how to view a copy of this
1327 License.  (Exception: if the Program itself is interactive but
1328 does not normally print such an announcement, your work based on
1329 the Program is not required to print an announcement.)
1330 @end enumerate
1332 These requirements apply to the modified work as a whole.  If
1333 identifiable sections of that work are not derived from the Program,
1334 and can be reasonably considered independent and separate works in
1335 themselves, then this License, and its terms, do not apply to those
1336 sections when you distribute them as separate works.  But when you
1337 distribute the same sections as part of a whole which is a work based
1338 on the Program, the distribution of the whole must be on the terms of
1339 this License, whose permissions for other licensees extend to the
1340 entire whole, and thus to each and every part regardless of who wrote it.
1342 Thus, it is not the intent of this section to claim rights or contest
1343 your rights to work written entirely by you; rather, the intent is to
1344 exercise the right to control the distribution of derivative or
1345 collective works based on the Program.
1347 In addition, mere aggregation of another work not based on the Program
1348 with the Program (or with a work based on the Program) on a volume of
1349 a storage or distribution medium does not bring the other work under
1350 the scope of this License.
1352 @item
1353 You may copy and distribute the Program (or a work based on it,
1354 under Section 2) in object code or executable form under the terms of
1355 Sections 1 and 2 above provided that you also do one of the following:
1357 @enumerate a
1358 @item
1359 Accompany it with the complete corresponding machine-readable
1360 source code, which must be distributed under the terms of Sections
1361 1 and 2 above on a medium customarily used for software interchange; or,
1363 @item
1364 Accompany it with a written offer, valid for at least three
1365 years, to give any third party, for a charge no more than your
1366 cost of physically performing source distribution, a complete
1367 machine-readable copy of the corresponding source code, to be
1368 distributed under the terms of Sections 1 and 2 above on a medium
1369 customarily used for software interchange; or,
1371 @item
1372 Accompany it with the information you received as to the offer
1373 to distribute corresponding source code.  (This alternative is
1374 allowed only for noncommercial distribution and only if you
1375 received the program in object code or executable form with such
1376 an offer, in accord with Subsection b above.)
1377 @end enumerate
1379 The source code for a work means the preferred form of the work for
1380 making modifications to it.  For an executable work, complete source
1381 code means all the source code for all modules it contains, plus any
1382 associated interface definition files, plus the scripts used to
1383 control compilation and installation of the executable.  However, as a
1384 special exception, the source code distributed need not include
1385 anything that is normally distributed (in either source or binary
1386 form) with the major components (compiler, kernel, and so on) of the
1387 operating system on which the executable runs, unless that component
1388 itself accompanies the executable.
1390 If distribution of executable or object code is made by offering
1391 access to copy from a designated place, then offering equivalent
1392 access to copy the source code from the same place counts as
1393 distribution of the source code, even though third parties are not
1394 compelled to copy the source along with the object code.
1396 @item
1397 You may not copy, modify, sublicense, or distribute the Program
1398 except as expressly provided under this License.  Any attempt
1399 otherwise to copy, modify, sublicense or distribute the Program is
1400 void, and will automatically terminate your rights under this License.
1401 However, parties who have received copies, or rights, from you under
1402 this License will not have their licenses terminated so long as such
1403 parties remain in full compliance.
1405 @item
1406 You are not required to accept this License, since you have not
1407 signed it.  However, nothing else grants you permission to modify or
1408 distribute the Program or its derivative works.  These actions are
1409 prohibited by law if you do not accept this License.  Therefore, by
1410 modifying or distributing the Program (or any work based on the
1411 Program), you indicate your acceptance of this License to do so, and
1412 all its terms and conditions for copying, distributing or modifying
1413 the Program or works based on it.
1415 @item
1416 Each time you redistribute the Program (or any work based on the
1417 Program), the recipient automatically receives a license from the
1418 original licensor to copy, distribute or modify the Program subject to
1419 these terms and conditions.  You may not impose any further
1420 restrictions on the recipients' exercise of the rights granted herein.
1421 You are not responsible for enforcing compliance by third parties to
1422 this License.
1424 @item
1425 If, as a consequence of a court judgment or allegation of patent
1426 infringement or for any other reason (not limited to patent issues),
1427 conditions are imposed on you (whether by court order, agreement or
1428 otherwise) that contradict the conditions of this License, they do not
1429 excuse you from the conditions of this License.  If you cannot
1430 distribute so as to satisfy simultaneously your obligations under this
1431 License and any other pertinent obligations, then as a consequence you
1432 may not distribute the Program at all.  For example, if a patent
1433 license would not permit royalty-free redistribution of the Program by
1434 all those who receive copies directly or indirectly through you, then
1435 the only way you could satisfy both it and this License would be to
1436 refrain entirely from distribution of the Program.
1438 If any portion of this section is held invalid or unenforceable under
1439 any particular circumstance, the balance of the section is intended to
1440 apply and the section as a whole is intended to apply in other
1441 circumstances.
1443 It is not the purpose of this section to induce you to infringe any
1444 patents or other property right claims or to contest validity of any
1445 such claims; this section has the sole purpose of protecting the
1446 integrity of the free software distribution system, which is
1447 implemented by public license practices.  Many people have made
1448 generous contributions to the wide range of software distributed
1449 through that system in reliance on consistent application of that
1450 system; it is up to the author/donor to decide if he or she is willing
1451 to distribute software through any other system and a licensee cannot
1452 impose that choice.
1454 This section is intended to make thoroughly clear what is believed to
1455 be a consequence of the rest of this License.
1457 @item
1458 If the distribution and/or use of the Program is restricted in
1459 certain countries either by patents or by copyrighted interfaces, the
1460 original copyright holder who places the Program under this License
1461 may add an explicit geographical distribution limitation excluding
1462 those countries, so that distribution is permitted only in or among
1463 countries not thus excluded.  In such case, this License incorporates
1464 the limitation as if written in the body of this License.
1466 @item
1467 The Free Software Foundation may publish revised and/or new versions
1468 of the General Public License from time to time.  Such new versions will
1469 be similar in spirit to the present version, but may differ in detail to
1470 address new problems or concerns.
1472 Each version is given a distinguishing version number.  If the Program
1473 specifies a version number of this License which applies to it and ``any
1474 later version'', you have the option of following the terms and conditions
1475 either of that version or of any later version published by the Free
1476 Software Foundation.  If the Program does not specify a version number of
1477 this License, you may choose any version ever published by the Free Software
1478 Foundation.
1480 @item
1481 If you wish to incorporate parts of the Program into other free
1482 programs whose distribution conditions are different, write to the author
1483 to ask for permission.  For software which is copyrighted by the Free
1484 Software Foundation, write to the Free Software Foundation; we sometimes
1485 make exceptions for this.  Our decision will be guided by the two goals
1486 of preserving the free status of all derivatives of our free software and
1487 of promoting the sharing and reuse of software generally.
1489 @iftex
1490 @heading NO WARRANTY
1491 @end iftex
1492 @ifinfo
1493 @center NO WARRANTY
1494 @end ifinfo
1496 @item
1497 BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
1498 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW@.  EXCEPT WHEN
1499 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
1500 PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
1501 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
1502 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE@.  THE ENTIRE RISK AS
1503 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU@.  SHOULD THE
1504 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
1505 REPAIR OR CORRECTION.
1507 @item
1508 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
1509 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
1510 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
1511 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
1512 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
1513 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
1514 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
1515 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
1516 POSSIBILITY OF SUCH DAMAGES.
1517 @end enumerate
1519 @iftex
1520 @heading END OF TERMS AND CONDITIONS
1521 @end iftex
1522 @ifinfo
1523 @center END OF TERMS AND CONDITIONS
1524 @end ifinfo
1526 @page
1527 @unnumberedsec How to Apply These Terms to Your New Programs
1529   If you develop a new program, and you want it to be of the greatest
1530 possible use to the public, the best way to achieve this is to make it
1531 free software which everyone can redistribute and change under these terms.
1533   To do so, attach the following notices to the program.  It is safest
1534 to attach them to the start of each source file to most effectively
1535 convey the exclusion of warranty; and each file should have at least
1536 the ``copyright'' line and a pointer to where the full notice is found.
1538 @smallexample
1539 @var{one line to give the program's name and an idea of what it does.}
1540 Copyright (C) 19@var{yy}  @var{name of author}
1542 This program is free software; you can redistribute it and/or
1543 modify it under the terms of the GNU General Public License
1544 as published by the Free Software Foundation; either version 2
1545 of the License, or (at your option) any later version.
1547 This program is distributed in the hope that it will be useful,
1548 but WITHOUT ANY WARRANTY; without even the implied warranty of
1549 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE@.  See the
1550 GNU General Public License for more details.
1552 You should have received a copy of the GNU General Public License
1553 along with this program; if not, write to the Free Software
1554 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
1555 @end smallexample
1557 Also add information on how to contact you by electronic and paper mail.
1559 If the program is interactive, make it output a short notice like this
1560 when it starts in an interactive mode:
1562 @smallexample
1563 Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
1564 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
1565 type `show w'.  This is free software, and you are welcome
1566 to redistribute it under certain conditions; type `show c'
1567 for details.
1568 @end smallexample
1570 The hypothetical commands @samp{show w} and @samp{show c} should show
1571 the appropriate parts of the General Public License.  Of course, the
1572 commands you use may be called something other than @samp{show w} and
1573 @samp{show c}; they could even be mouse-clicks or menu items---whatever
1574 suits your program.
1576 You should also get your employer (if you work as a programmer) or your
1577 school, if any, to sign a ``copyright disclaimer'' for the program, if
1578 necessary.  Here is a sample; alter the names:
1580 @smallexample
1581 @group
1582 Yoyodyne, Inc., hereby disclaims all copyright
1583 interest in the program `Gnomovision'
1584 (which makes passes at compilers) written
1585 by James Hacker.
1587 @var{signature of Ty Coon}, 1 April 1989
1588 Ty Coon, President of Vice
1589 @end group
1590 @end smallexample
1592 This General Public License does not permit incorporating your program
1593 into proprietary programs.  If your program is a subroutine library, you
1594 may consider it more useful to permit linking proprietary applications
1595 with the library.  If this is what you want to do, use the GNU Library
1596 General Public License instead of this License.
1598 @node Index,  , GNU General Public License, Top
1599 @unnumbered Index
1601 @printindex cp
1603 @contents
1604 @bye