From db7dcc065397a1b346a3492aa9b57df866592f24 Mon Sep 17 00:00:00 2001 From: Danielle McLean Date: Mon, 3 Oct 2016 23:05:44 +1100 Subject: [PATCH] Initial build - GNU stow suitable for linking into your home dir using GNU stow --- .local/bin/chkstow | 113 + .local/bin/stow | 667 +++++ .local/share/doc/stow/ChangeLog | 1980 +++++++++++++ .local/share/doc/stow/ChangeLog.OLD | 232 ++ .local/share/doc/stow/README | 53 + .local/share/doc/stow/manual-single.html | 2534 +++++++++++++++++ .../doc/stow/manual-split/Bootstrapping.html | 89 + .../Compile_002dtime-vs-Install_002dtime.html | 144 + .../doc/stow/manual-split/Conflicts.html | 100 + .../stow/manual-split/Cygnus-Software.html | 95 + .../stow/manual-split/Deferred-Operation.html | 1 + .../stow/manual-split/Deleting-Packages.html | 112 + .../doc/stow/manual-split/GNU-Emacs.html | 97 + .../GNU-General-Public-License.html | 411 +++ .../doc/stow/manual-split/Ignore-Lists.html | 77 + .../manual-split/Installing-Packages.html | 156 + .../doc/stow/manual-split/Introduction.html | 119 + .../doc/stow/manual-split/Invoking-Stow.html | 206 ++ ...n-For-Yet-Another-Set-Of-Ignore-Files.html | 93 + .../doc/stow/manual-split/Known-Bugs.html | 76 + .../stow/manual-split/Mixing-Operations.html | 90 + .../Motivation-For-Ignore-Lists.html | 94 + .../Multiple-Stow-Directories.html | 86 + .../stow/manual-split/Other-FSF-Software.html | 85 + .../manual-split/Perl-and-Perl-5-Modules.html | 150 + .../doc/stow/manual-split/Reporting-Bugs.html | 98 + .../doc/stow/manual-split/Resource-Files.html | 108 + .../stow/manual-split/Target-Maintenance.html | 98 + .../doc/stow/manual-split/Terminology.html | 113 + .../doc/stow/manual-split/Tree-unfolding.html | 1 + .../Types-And-Syntax-Of-Ignore-Lists.html | 167 ++ .local/share/doc/stow/manual-split/index.html | 164 ++ .../doc/stow/manual-split/tree-folding.html | 1 + .../doc/stow/manual-split/tree-refolding.html | 1 + .local/share/doc/stow/manual.pdf | Bin 0 -> 257587 bytes .local/share/doc/stow/version.texi | 4 + .local/share/info/dir | 18 + .local/share/info/stow.info | 1585 +++++++++++ .local/share/man/man8/stow.8 | 508 ++++ .local/share/perl/Stow.pm | 2110 ++++++++++++++ .local/share/perl/Stow/Util.pm | 208 ++ 41 files changed, 13044 insertions(+) create mode 100755 .local/bin/chkstow create mode 100755 .local/bin/stow create mode 100644 .local/share/doc/stow/ChangeLog create mode 100644 .local/share/doc/stow/ChangeLog.OLD create mode 100644 .local/share/doc/stow/README create mode 100644 .local/share/doc/stow/manual-single.html create mode 100644 .local/share/doc/stow/manual-split/Bootstrapping.html create mode 100644 .local/share/doc/stow/manual-split/Compile_002dtime-vs-Install_002dtime.html create mode 100644 .local/share/doc/stow/manual-split/Conflicts.html create mode 100644 .local/share/doc/stow/manual-split/Cygnus-Software.html create mode 100644 .local/share/doc/stow/manual-split/Deferred-Operation.html create mode 100644 .local/share/doc/stow/manual-split/Deleting-Packages.html create mode 100644 .local/share/doc/stow/manual-split/GNU-Emacs.html create mode 100644 .local/share/doc/stow/manual-split/GNU-General-Public-License.html create mode 100644 .local/share/doc/stow/manual-split/Ignore-Lists.html create mode 100644 .local/share/doc/stow/manual-split/Installing-Packages.html create mode 100644 .local/share/doc/stow/manual-split/Introduction.html create mode 100644 .local/share/doc/stow/manual-split/Invoking-Stow.html create mode 100644 .local/share/doc/stow/manual-split/Justification-For-Yet-Another-Set-Of-Ignore-Files.html create mode 100644 .local/share/doc/stow/manual-split/Known-Bugs.html create mode 100644 .local/share/doc/stow/manual-split/Mixing-Operations.html create mode 100644 .local/share/doc/stow/manual-split/Motivation-For-Ignore-Lists.html create mode 100644 .local/share/doc/stow/manual-split/Multiple-Stow-Directories.html create mode 100644 .local/share/doc/stow/manual-split/Other-FSF-Software.html create mode 100644 .local/share/doc/stow/manual-split/Perl-and-Perl-5-Modules.html create mode 100644 .local/share/doc/stow/manual-split/Reporting-Bugs.html create mode 100644 .local/share/doc/stow/manual-split/Resource-Files.html create mode 100644 .local/share/doc/stow/manual-split/Target-Maintenance.html create mode 100644 .local/share/doc/stow/manual-split/Terminology.html create mode 100644 .local/share/doc/stow/manual-split/Tree-unfolding.html create mode 100644 .local/share/doc/stow/manual-split/Types-And-Syntax-Of-Ignore-Lists.html create mode 100644 .local/share/doc/stow/manual-split/index.html create mode 100644 .local/share/doc/stow/manual-split/tree-folding.html create mode 100644 .local/share/doc/stow/manual-split/tree-refolding.html create mode 100644 .local/share/doc/stow/manual.pdf create mode 100644 .local/share/doc/stow/version.texi create mode 100644 .local/share/info/dir create mode 100644 .local/share/info/stow.info create mode 100644 .local/share/man/man8/stow.8 create mode 100644 .local/share/perl/Stow.pm create mode 100644 .local/share/perl/Stow/Util.pm diff --git a/.local/bin/chkstow b/.local/bin/chkstow new file mode 100755 index 0000000..b3a55b0 --- /dev/null +++ b/.local/bin/chkstow @@ -0,0 +1,113 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +require 5.006_001; + +use File::Find; +use Getopt::Long; + +my $DEFAULT_TARGET = '/usr/local/'; + +our $Wanted = \&bad_links; +our %Package = (); +our $Stow_dir = ''; +our $Target = $DEFAULT_TARGET; + +# put the main loop into a block so that tests can load this as a module +if ( not caller() ) { + if (@ARGV == 0) { + usage(); + } + process_options(); + #check_stow($Target, $Wanted); + check_stow(); +} + +sub process_options { + GetOptions( + 'b|badlinks' => sub { $Wanted = \&bad_links }, + 'a|aliens' => sub { $Wanted = \&aliens }, + 'l|list' => sub { $Wanted = \&list }, + 't|target=s' => \$Target, + ) or usage(); + return; +} + +sub usage { + print <<"EOT"; +USAGE: chkstow [options] + +Options: + -t DIR, --target=DIR Set the target directory to DIR + (default is $DEFAULT_TARGET) + -b, --badlinks Report symlinks that point to non-existent files + -a, --aliens Report non-symlinks in the target directory + -l, --list List packages in the target directory + +--badlinks is the default mode. +EOT + exit(0); +} + +sub check_stow { + #my ($Target, $Wanted) = @_; + + my (%options) = ( + wanted => $Wanted, + preprocess => \&skip_dirs, + ); + + find(\%options, $Target); + + if ($Wanted == \&list) { + delete $Package{''}; + delete $Package{'..'}; + + if (keys %Package) { + print map "$_\n", sort(keys %Package); + } + } + return; +} + +sub skip_dirs { + # skip stow source and unstowed targets + if (-e ".stow" || -e ".notstowed" ) { + warn "skipping $File::Find::dir\n"; + return (); + } + else { + return @_; + } +} + +# checking for files that do not link to anything +sub bad_links { + -l && !-e && print "Bogus link: $File::Find::name\n"; +} + +# checking for files that are not owned by stow +sub aliens { + !-l && !-d && print "Unstowed file: $File::Find::name\n"; +} + +# just list the packages in the the target directory +# FIXME: what if the stow dir is not called 'stow'? +sub list { + if (-l) { + $_ = readlink; + s{\A(?:\.\./)+stow/}{}g; + s{/.*}{}g; + $Package{$_} = 1; + } +} + +1; # Hey, it's a module! + +# Local variables: +# mode: perl +# cperl-indent-level: 4 +# End: +# vim: ft=perl diff --git a/.local/bin/stow b/.local/bin/stow new file mode 100755 index 0000000..7acad8b --- /dev/null +++ b/.local/bin/stow @@ -0,0 +1,667 @@ +#!/usr/bin/perl + +# GNU Stow - manage the installation of multiple software packages +# Copyright (C) 1993, 1994, 1995, 1996 by Bob Glickstein +# Copyright (C) 2000, 2001 Guillaume Morin +# Copyright (C) 2007 Kahlil Hodgson +# Copyright (C) 2011 Adam Spiers +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . + +=head1 NAME + +stow - software package installation manager + +=head1 SYNOPSIS + +stow [ options ] package ... + +=head1 DESCRIPTION + +This manual page describes GNU Stow 2.2.2, a program for managing +the installation of software packages. This is not the definitive +documentation for stow; for that, see the info manual. + +Stow is a tool for managing the installation of multiple software +packages in the same run-time directory tree. One historical +difficulty of this task has been the need to administer, upgrade, +install, and remove files in independent packages without confusing +them with other files sharing the same filesystem space. For instance, +it is common to install Perl and Emacs in F. When one +does so, one winds up (as of Perl 4.036 and Emacs 19.22) with the +following files in F: F; F; +F; F; F; F; and F. Now +suppose it's time to uninstall Perl. Which man pages get removed? +Obviously F is one of them, but it should not be the +administrator's responsibility to memorize the ownership of individual +files by separate packages. + +The approach used by Stow is to install each package into its own +tree, then use symbolic links to make it appear as though the files +are installed in the common tree. Administration can be performed in +the package's private tree in isolation from clutter from other +packages. Stow can then be used to update the symbolic links. The +structure of each private tree should reflect the desired structure in +the common tree; i.e. (in the typical case) there should be a F +directory containing executables, a F directory containing +section 1 man pages, and so on. + +Stow was inspired by Carnegie Mellon's Depot program, but is +substantially simpler and safer. Whereas Depot required database files +to keep things in sync, Stow stores no extra state between runs, so +there's no danger (as there was in Depot) of mangling directories when +file hierarchies don't match the database. Also unlike Depot, Stow +will never delete any files, directories, or links that appear in a +Stow directory (e.g., F), so it's always +possible to rebuild the target tree (e.g., F). + +=head1 TERMINOLOGY + +A "package" is a related collection of files and directories that +you wish to administer as a unit -- e.g., Perl or Emacs -- and that +needs to be installed in a particular directory structure -- e.g., +with F, F, and F subdirectories. + +A "target directory" is the root of a tree in which one or more +packages wish to B to be installed. A common, but by no means +the only such location is F. The examples in this manual +page will use F as the target directory. + +A "stow directory" is the root of a tree containing separate +packages in private subtrees. When Stow runs, it uses the current +directory as the default stow directory. The examples in this manual +page will use F as the stow directory, so that +individual packages will be, for example, F and +F. + +An "installation image" is the layout of files and directories +required by a package, relative to the target directory. Thus, the +installation image for Perl includes: a F directory containing +F and F (among others); an F directory containing +Texinfo documentation; a F directory containing Perl +libraries; and a F directory containing man pages. + +A "package directory" is the root of a tree containing the +installation image for a particular package. Each package directory +must reside in a stow directory -- e.g., the package directory +F must reside in the stow directory +F. The "name" of a package is the name of its +directory within the stow directory -- e.g., F. + +Thus, the Perl executable might reside in +F, where F is the target +directory, F is the stow directory, +F is the package directory, and F +within is part of the installation image. + +A "symlink" is a symbolic link. A symlink can be "relative" or +"absolute". An absolute symlink names a full path; that is, one +starting from F. A relative symlink names a relative path; that +is, one not starting from F. The target of a relative symlink is +computed starting from the symlink's own directory. Stow only creates +relative symlinks. + +=head1 OPTIONS + +The stow directory is assumed to be the value of the C +environment variable or if unset the current directory, and the target +directory is assumed to be the parent of the current directory (so it +is typical to execute F from the directory F). +Each F given on the command line is the name of a package in +the stow directory (e.g., F). By default, they are installed +into the target directory (but they can be deleted instead using +C<-D>). + +=over 4 + +=item -n + +=item --no + +Do not perform any operations that modify the filesystem; merely show +what would happen. + +=item -d DIR + +=item --dir=DIR + +Set the stow directory to C instead of the current directory. +This also has the effect of making the default target directory be the +parent of C. + +=item -t DIR + +=item --target=DIR + +Set the target directory to C instead of the parent of the stow +directory. + +=item -v + +=item --verbose[=N] + +Send verbose output to standard error describing what Stow is +doing. Verbosity levels are 0, 1, 2, 3, and 4; 0 is the default. +Using C<-v> or C<--verbose> increases the verbosity by one; using +`--verbose=N' sets it to N. + +=item -S + +=item --stow + +Stow the packages that follow this option into the target directory. +This is the default action and so can be omitted if you are only +stowing packages rather than performing a mixture of +stow/delete/restow actions. + +=item -D + +=item --delete + +Unstow the packages that follow this option from the target directory rather +than installing them. + +=item -R + +=item --restow + +Restow packages (first unstow, then stow again). This is useful +for pruning obsolete symlinks from the target tree after updating +the software in a package. + +=item --adopt + +B This behaviour is specifically intended to alter the +contents of your stow directory. If you do not want that, this option +is not for you. + +When stowing, if a target is encountered which already exists but is a +plain file (and hence not owned by any existing stow package), then +normally Stow will register this as a conflict and refuse to proceed. +This option changes that behaviour so that the file is moved to the +same relative place within the package's installation image within the +stow directory, and then stowing proceeds as before. So effectively, +the file becomes adopted by the stow package, without its contents +changing. + +=item --no-folding + +Disable folding of newly stowed directories when stowing, and +refolding of newly foldable directories when unstowing. + +=item --ignore=REGEX + +Ignore files ending in this Perl regex. + +=item --defer=REGEX + +Don't stow files beginning with this Perl regex if the file is already +stowed to another package. + +=item --override=REGEX + +Force stowing files beginning with this Perl regex if the file is +already stowed to another package. + +=item -V + +=item --version + +Show Stow version number, and exit. + +=item -h + +=item --help + +Show Stow command syntax, and exit. + +=back + +=head1 INSTALLING PACKAGES + +The default action of Stow is to install a package. This means +creating symlinks in the target tree that point into the package tree. +Stow attempts to do this with as few symlinks as possible; in other +words, if Stow can create a single symlink that points to an entire +subtree within the package tree, it will choose to do that rather than +create a directory in the target tree and populate it with symlinks. + +For example, suppose that no packages have yet been installed in +F; it's completely empty (except for the F +subdirectory, of course). Now suppose the Perl package is installed. +Recall that it includes the following directories in its installation +image: F; F; F; F. Rather than +creating the directory F and populating it with +symlinks to F<../stow/perl/bin/perl> and F<../stow/perl/bin/a2p> (and +so on), Stow will create a single symlink, F, which +points to F. In this way, it still works to refer to +F and F, and fewer symlinks +have been created. This is called "tree folding", since an entire +subtree is "folded" into a single symlink. + +To complete this example, Stow will also create the symlink +F pointing to F; the symlink +F pointing to F; and the symlink +F pointing to F. + +Now suppose that instead of installing the Perl package into an empty +target tree, the target tree is not empty to begin with. Instead, it +contains several files and directories installed under a different +system-administration philosophy. In particular, F +already exists and is a directory, as are F and +F. In this case, Stow will descend into +F and create symlinks to F<../stow/perl/bin/perl> and +F<../stow/perl/bin/a2p> (etc.), and it will descend into +F and create the tree-folding symlink F pointing +to F<../stow/perl/lib/perl>, and so on. As a rule, Stow only descends +as far as necessary into the target tree when it can create a +tree-folding symlink. + +The time often comes when a tree-folding symlink has to be undone +because another package uses one or more of the folded subdirectories +in its installation image. This operation is called "splitting open" +a folded tree. It involves removing the original symlink from the +target tree, creating a true directory in its place, and then +populating the new directory with symlinks to the newly-installed +package B to the old package that used the old symlink. For +example, suppose that after installing Perl into an empty +F, we wish to install Emacs. Emacs's installation image +includes a F directory containing the F and F +executables, among others. Stow must make these files appear to be +installed in F, but presently F is a +symlink to F. Stow therefore takes the following +steps: the symlink F is deleted; the directory +F is created; links are made from F to +F<../stow/emacs/bin/emacs> and F<../stow/emacs/bin/etags>; and links +are made from F to F<../stow/perl/bin/perl> and +F<../stow/perl/bin/a2p>. + +When splitting open a folded tree, Stow makes sure that the symlink +it is about to remove points inside a valid package in the current stow +directory. + +=head2 Stow will never delete anything that it doesn't own. + +Stow "owns" everything living in the target tree that points into a +package in the stow directory. Anything Stow owns, it can recompute if +lost. Note that by this definition, Stow doesn't "own" anything +B the stow directory or in any of the packages. + +If Stow needs to create a directory or a symlink in the target tree +and it cannot because that name is already in use and is not owned by +Stow, then a conflict has arisen. See the "Conflicts" section in the +info manual. + +=head1 DELETING PACKAGES + +When the C<-D> option is given, the action of Stow is to delete a +package from the target tree. Note that Stow will not delete anything +it doesn't "own". Deleting a package does B mean removing it from +the stow directory or discarding the package tree. + +To delete a package, Stow recursively scans the target tree, skipping +over the stow directory (since that is usually a subdirectory of the +target tree) and any other stow directories it encounters (see +"Multiple stow directories" in the info manual). Any symlink it +finds that points into the package being deleted is removed. Any +directory that contained only symlinks to the package being deleted is +removed. Any directory that, after removing symlinks and empty +subdirectories, contains only symlinks to a single other package, is +considered to be a previously "folded" tree that was "split open." +Stow will re-fold the tree by removing the symlinks to the surviving +package, removing the directory, then linking the directory back to +the surviving package. + +=head1 SEE ALSO + +The full documentation for F is maintained as a Texinfo manual. +If the F and F programs are properly installed at your site, the command + + info stow + +should give you access to the complete manual. + +=head1 BUGS + +Please report bugs in Stow using the Debian bug tracking system. + +Currently known bugs include: + +=over 4 + +=item * The empty-directory problem. + +If package F includes an empty directory -- say, F -- +then if no other package has a F subdirectory, everything's fine. +If another stowed package F, has a F subdirectory, then +when stowing, F will be "split open" and the contents +of F will be individually stowed. So far, so good. But when +unstowing F, F will be removed, even though +F needs it to remain. A workaround for this problem is to +create a file in F as a placeholder. If you name that file +F<.placeholder>, it will be easy to find and remove such files when +this bug is fixed. + +=item * + +When using multiple stow directories (see "Multiple stow directories" +in the info manual), Stow fails to "split open" tree-folding symlinks +(see "Installing packages" in the info manual) that point into a stow +directory which is not the one in use by the current Stow +command. Before failing, it should search the target of the link to +see whether any element of the path contains a F<.stow> file. If it +finds one, it can "learn" about the cooperating stow directory to +short-circuit the F<.stow> search the next time it encounters a +tree-folding symlink. + +=back + +=head1 AUTHOR + +This man page was originally constructed by Charles Briscoe-Smith from +parts of Stow's info manual, and then converted to POD format by Adam +Spiers. The info manual contains the following notice, which, as it +says, applies to this manual page, too. The text of the section +entitled "GNU General Public License" can be found in the file +F on any Debian GNU/Linux system. If +you don't have access to a Debian system, or the GPL is not there, +write to the Free Software Foundation, Inc., 59 Temple Place, Suite +330, Boston, MA, 02111-1307, USA. + +=head1 COPYRIGHT + +Copyright (C) +1993, 1994, 1995, 1996 by Bob Glickstein ; +2000, 2001 by Guillaume Morin; +2007 by Kahlil Hodgson; +2011 by Adam Spiers; +and others. + +Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided also that +the section entitled "GNU General Public License" is included with the +modified manual, and provided that the entire resulting derived work +is distributed under the terms of a permission notice identical to +this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Free Software Foundation. + +=cut + +use strict; +use warnings; + +require 5.006_001; + +use POSIX qw(getcwd); +use Getopt::Long; + +use Cwd qw(abs_path); +use File::Basename qw(dirname); +use lib dirname(dirname(abs_path($0))) . '/share/perl'; +use Stow; +use Stow::Util qw(parent error); + +my $ProgramName = $0; +$ProgramName =~ s{.*/}{}; + +main() unless caller(); + +sub main { + my ($options, $pkgs_to_unstow, $pkgs_to_stow) = process_options(); + + my $stow = new Stow(%$options); + # current dir is now the target directory + + $stow->plan_unstow(@$pkgs_to_unstow); + $stow->plan_stow (@$pkgs_to_stow); + + my %conflicts = $stow->get_conflicts; + + if (%conflicts) { + foreach my $action ('unstow', 'stow') { + next unless $conflicts{$action}; + foreach my $package (sort keys %{ $conflicts{$action} }) { + warn "WARNING! ${action}ing $package would cause conflicts:\n"; + #if $stow->get_action_count > 1; + foreach my $message (sort @{ $conflicts{$action}{$package} }) { + warn " * $message\n"; + } + } + } + warn "All operations aborted.\n"; + exit 1; + } + else { + if ($options->{simulate}) { + warn "WARNING: in simulation mode so not modifying filesystem.\n"; + return; + } + + $stow->process_tasks(); + } +} + + +#===== SUBROUTINE =========================================================== +# Name : process_options() +# Purpose : parse command line options +# Parameters: none +# Returns : (\%options, \@pkgs_to_unstow, \@pkgs_to_stow) +# Throws : a fatal error if a bad command line option is given +# Comments : checks @ARGV for valid package names +#============================================================================ +sub process_options { + my %options = (); + my @pkgs_to_unstow = (); + my @pkgs_to_stow = (); + my $action = 'stow'; + + unshift @ARGV, get_config_file_options(); + #$,="\n"; print @ARGV,"\n"; # for debugging rc file + + Getopt::Long::config('no_ignore_case', 'bundling', 'permute'); + GetOptions( + \%options, + 'verbose|v:+', 'help|h', 'simulate|n|no', + 'version|V', 'compat|p', 'dir|d=s', 'target|t=s', + 'adopt', 'no-folding', + + # clean and pre-compile any regex's at parse time + 'ignore=s' => + sub { + my $regex = $_[1]; + push @{$options{ignore}}, qr($regex\z); + }, + + 'override=s' => + sub { + my $regex = $_[1]; + push @{$options{override}}, qr(\A$regex); + }, + + 'defer=s' => + sub { + my $regex = $_[1]; + push @{$options{defer}}, qr(\A$regex); + }, + + # a little craziness so we can do different actions on the same line: + # a -D, -S, or -R changes the action that will be performed on the + # package arguments that follow it. + 'D|delete' => sub { $action = 'unstow' }, + 'S|stow' => sub { $action = 'stow' }, + 'R|restow' => sub { $action = 'restow' }, + + # Handler for non-option arguments + '<>' => + sub { + if ($action eq 'restow') { + push @pkgs_to_unstow, $_[0]; + push @pkgs_to_stow, $_[0]; + } + elsif ($action eq 'unstow') { + push @pkgs_to_unstow, $_[0]; + } + else { + push @pkgs_to_stow, $_[0]; + } + }, + ) or usage(); + + usage() if $options{help}; + version() if $options{version}; + + sanitize_path_options(\%options); + check_packages(\@pkgs_to_unstow, \@pkgs_to_stow); + + return (\%options, \@pkgs_to_unstow, \@pkgs_to_stow); +} + +sub sanitize_path_options { + my ($options) = @_; + + if (exists $options->{dir}) { + $options->{dir} =~ s/\A +//; + $options->{dir} =~ s/ +\z//; + } + else { + $options->{dir} = exists $ENV{STOW_DIR} ? $ENV{STOW_DIR} : getcwd(); + } + + if (exists $options->{target}) { + $options->{target} =~ s/\A +//; + $options->{target} =~ s/ +\z//; + } + else { + $options->{target} = parent($options->{dir}) || '.'; + } +} + +sub check_packages { + my ($pkgs_to_stow, $pkgs_to_unstow) = @_; + + if (not @$pkgs_to_stow and not @$pkgs_to_unstow) { + usage("No packages to stow or unstow"); + } + + # check package arguments + for my $package (@$pkgs_to_stow, @$pkgs_to_unstow) { + $package =~ s{/+$}{}; # delete trailing slashes + if ($package =~ m{/}) { + error("Slashes are not permitted in package names"); + } + } +} + + +#===== SUBROUTINE ============================================================ +# Name : get_config_file_options() +# Purpose : search for default settings in any .stowrc files +# Parameters: none +# Returns : a list of default options +# Throws : no exceptions +# Comments : prepends the contents of '~/.stowrc' and '.stowrc' to the command +# : line so they get parsed just like normal arguments. (This was +# : hacked in so that Emil and I could set different preferences). +#============================================================================= +sub get_config_file_options { + my @defaults = (); + for my $file ("$ENV{HOME}/.stowrc", '.stowrc') { + if (-r $file) { + warn "Loading defaults from $file\n"; + open my $FILE, '<', $file + or die "Could not open $file for reading\n"; + while (my $line = <$FILE>){ + chomp $line; + push @defaults, split " ", $line; + } + close $FILE or die "Could not close open file: $file\n"; + } + } + return @defaults; +} + +#===== SUBROUTINE =========================================================== +# Name : usage() +# Purpose : print program usage message and exit +# Parameters: $msg => string to prepend to the usage message +# Returns : n/a +# Throws : n/a +# Comments : if 'msg' is given, then exit with non-zero status +#============================================================================ +sub usage { + my ($msg) = @_; + + if ($msg) { + print "$ProgramName: $msg\n\n"; + } + + print <<"EOT"; +$ProgramName (GNU Stow) version $Stow::VERSION + +SYNOPSIS: + + $ProgramName [OPTION ...] [-D|-S|-R] PACKAGE ... [-D|-S|-R] PACKAGE ... + +OPTIONS: + + -d DIR, --dir=DIR Set stow dir to DIR (default is current dir) + -t DIR, --target=DIR Set target to DIR (default is parent of stow dir) + + -S, --stow Stow the package names that follow this option + -D, --delete Unstow the package names that follow this option + -R, --restow Restow (like stow -D followed by stow -S) + + --ignore=REGEX Ignore files ending in this Perl regex + --defer=REGEX Don't stow files beginning with this Perl regex + if the file is already stowed to another package + --override=REGEX Force stowing files beginning with this Perl regex + if the file is already stowed to another package + --adopt (Use with care!) Import existing files into stow package + from target. Please read docs before using. + -p, --compat Use legacy algorithm for unstowing + + -n, --no, --simulate Do not actually make any filesystem changes + -v, --verbose[=N] Increase verbosity (levels are 0,1,2,3; + -v or --verbose adds 1; --verbose=N sets level) + -V, --version Show stow version number + -h, --help Show this help + +Report bugs to: bug-stow\@gnu.org +Stow home page: +General help using GNU software: +EOT + exit defined $msg ? 1 : 0; +} + +sub version { + print "$ProgramName (GNU Stow) version $Stow::VERSION\n"; + exit 0; +} + +1; # This file is required by t/stow.t + +# Local variables: +# mode: perl +# cperl-indent-level: 4 +# end: +# vim: ft=perl diff --git a/.local/share/doc/stow/ChangeLog b/.local/share/doc/stow/ChangeLog new file mode 100644 index 0000000..ec7f8e1 --- /dev/null +++ b/.local/share/doc/stow/ChangeLog @@ -0,0 +1,1980 @@ +Mon Nov 9 12:37:09 2015 +0000 Adam Spiers + + * More fixes to "make distcheck" As with dc6a141d, the dependency of + distributed files on non-distributed files was causing this error: + + ERROR: files left in build directory after distclean: + + The automake FAQ explains why this happens: + + + https://www.gnu.org/software/automake/manual/html_node/Errors-with-distclean.html + + so change the dependency to Makefile.am which is distributed. + + + M Makefile.am + +Mon Nov 9 11:48:55 2015 +0000 Adam Spiers + + * NEWS: Explain why 2.2.1 was not released + + M NEWS + +Mon Nov 9 11:46:50 2015 +0000 Adam Spiers + + * Bump version to 2.2.2 + + M META.json + M META.yml + M configure.ac + +Mon Nov 9 11:36:11 2015 +0000 Adam Spiers + + * add Stow/Util.pm.in with @VERSION@ substitution This is now necessary + in order to prevent pause.perl.org from complaining: + + Status: Decreasing version number + ================================= + + module : Stow::Util + version: undef + in file: lib/Stow/Util.pm + status : Not indexed because lib/Stow/Util.pm in + A/AS/ASPIERS/Stow-v2.2.0.tar.gz has a higher + version number + (0) + + + M .gitignore + M MANIFEST + M META.json + M META.yml + M Makefile.am + M NEWS + D lib/Stow/Util.pm + A lib/Stow/Util.pm.in + +Mon Nov 9 11:05:00 2015 +0000 Adam Spiers + + * HOWTO-RELEASE: remove body indent + + M doc/HOWTO-RELEASE + +Mon Nov 9 11:04:21 2015 +0000 Adam Spiers + + * HOWTO-RELEASE: add link to official GNU maintainers guide + + M doc/HOWTO-RELEASE + +Mon Nov 9 10:13:34 2015 +0000 Adam Spiers + + * HOWTO-RELEASE: encourage use of SemVer + + M doc/HOWTO-RELEASE + +Mon Nov 9 10:11:59 2015 +0000 Adam Spiers + + * HOWTO-RELEASE: encourage GPG-signing of release tags + + M doc/HOWTO-RELEASE + +Mon Nov 9 10:10:36 2015 +0000 Adam Spiers + + * HOWTO-RELEASE: use gnulib for gendocs instead of texinfo These days it + seems that gendocs can be done entirely from the templates in + gnulib, rather than requiring the texinfo repository. + + + M doc/HOWTO-RELEASE + +Mon Nov 9 10:08:31 2015 +0000 Adam Spiers + + * fix make distcheck The dependency of the distributed file stow.8 on + the non-distributed file Makefile was causing this error: + + ERROR: files left in build directory after distclean: + ./doc/stow.8 + + The automake FAQ explains why this happens: + + + https://www.gnu.org/software/automake/manual/html_node/Errors-with-distclean.html + + so change stow.8 to depend on Makefile.am which is distributed. + + + M Makefile.am + +Mon Nov 9 09:28:11 2015 +0000 Adam Spiers + + * HOWTO-RELEASE: include automake --add-missing This is necessary since + automake files were removed from the repository recently. + + + M doc/HOWTO-RELEASE + +Mon Nov 9 09:27:49 2015 +0000 Adam Spiers + + * Update META.{yml,json} Rebuilt with newer Module::Build. + + + M META.json + M META.yml + +Mon Nov 9 09:17:34 2015 +0000 Adam Spiers + + * Bump version to 2.2.1 + + M configure.ac + +Mon Nov 9 09:16:32 2015 +0000 Adam Spiers + + * Prepare NEWS file for 2.2.1 release + + M NEWS + +Mon Nov 9 09:15:51 2015 +0000 Adam Spiers + + * Remove trailing whitespace from NEWS file + + M NEWS + +Mon Sep 17 16:55:17 2012 +0100 Adam Spiers + + * Add more index entries to the manual. + + M doc/stow.texi + +Mon Sep 17 16:55:03 2012 +0100 Adam Spiers + + * Fix a typo in the docs. + + M doc/stow.texi + +Sat Feb 7 19:29:43 2015 +0000 Adam Spiers + + * substitute @VERSION@ in stow.8 man page Thanks to Yue Du for spotting + this issue and providing the fix. + + + M Makefile.am + +Sat Feb 7 19:24:22 2015 +0000 Adam Spiers + + * remove automake files These should be generated at development / + install-time, rather than distributing versions via git which will + inevitably age over time. + + + A automake/.gitignore + D automake/install-sh + D automake/mdate-sh + D automake/missing + +Thu Jan 1 19:02:46 2015 +0000 Adam Spiers + + * fix stowing of relative links when --no-folding is used With a tree + like this: + + . + |-- stow + | `-- pkg + | `-- lib + | |-- itk-current -> itk4.0.0 + | `-- itk4.0.0 + | `-- libitk4.0.0.so + `-- target + `-- lib + |-- itk4.0.0 -> ../../stow/pkg/lib/itk4.0.0 + `-- libfoo-1.2.3.so + + stowing pkg with the --no-folding option resulted in itk-current + being "unpacked": + + . + `-- target + `-- lib + |-- itk-current + | `-- libitk4.0.0.so -> + ../../../stow/pkg/lib/itk-current/libitk4.0.0.so + |-- itk4.0.0 + | `-- libitk4.0.0.so -> + ../../../stow/pkg/lib/itk4.0.0/libitk4.0.0.so + `-- libfoo-1.2.3.so + + This commit fixes it so that it gets stowed as a symlink: + + . + `-- target + `-- lib + ... + |-- itk-current -> ../../stow/pkg/lib/itk-current + ... + + Thanks to Gabriele Balducci for reporting this problem: + + http://thread.gmane.org/gmane.comp.gnu.stow.general/6676 + + + M lib/Stow.pm.in + M t/stow.t + +Thu Jan 1 19:02:26 2015 +0000 Adam Spiers + + * improve debug + + M lib/Stow.pm.in + +Mon Sep 22 00:36:25 2014 +0100 Adam Spiers + + * make it more obvious when target (sub)directory is skipped This should + avoid the sort of confusion seen in: + + https://github.com/aspiers/shell-env/issues/1 + + + M lib/Stow.pm.in + M t/stow.t + M t/testutil.pm + M t/unstow.t + M t/unstow_orig.t + +Mon Sep 22 00:40:25 2014 +0100 Adam Spiers + + * trim trailing whitespace + + M t/stow.t + +Mon Sep 22 00:14:56 2014 +0100 Adam Spiers + + * update aclocal + + M aclocal.m4 + +Mon Jun 16 10:22:55 2014 +0100 Adam Spiers + + * avoid precedence warning With Perl 5.20, installing a package with + stow gives a warning like this: + + Possible precedence issue with control flow operator at + /gar/packages/stow-2.2.0/lib/perl5/site_perl/5.20.0/Stow.pm line + 1736. + + http://lists.gnu.org/archive/html/bug-stow/2014-06/msg00000.html + + Suggested-by: Adam Sampson + + + M lib/Stow.pm.in + +Wed Apr 24 08:44:32 2013 +0100 Adam Spiers + + * add TODO for install-hooks + + M TODO + +Fri Apr 12 17:47:29 2013 +0100 Adam Spiers + + * correctly handle the stow/target directories as non-canonical paths + Fix the case discovered by Hiroyuki Iwatsuki where stowing fails + if the stow / target directories are non-canonical paths. For + example, on FreeBSD /home is a symlink pointing to 'usr/home', so + running with the stow directory as /home/user/local/stow and the + target directory as /home/user/local previously resulted in the + stow directory path being calculated as + ../../../usr/home/user/local/stow relative to the target. + + http://article.gmane.org/gmane.comp.gnu.stow.bugs/8820 + + + M lib/Stow.pm.in + +Thu Jan 17 12:25:43 2013 +0000 Adam Spiers + + * default-ignore-list: ignore top-level README.*, LICENSE.*, and COPYING + These files are by definition specific to a given package, so if + they exist in the top-level directory, they should not be stowed. + + + M default-ignore-list + +Mon Jul 9 01:06:13 2012 +0100 Adam Spiers + + * Only include $! in error messages for failed syscalls. + + M lib/Stow.pm.in + M lib/Stow/Util.pm + +Mon Jul 9 01:05:27 2012 +0100 Adam Spiers + + * Fix RT ticket #75349 https://rt.cpan.org/Ticket/Display.html?id=75349 + + + M bin/stow.in + +Wed May 16 11:00:38 2012 +0100 Adam Spiers + + * Bug #36478 - fix Perl warnings from 'require 5.6.1;' + https://savannah.gnu.org/bugs/?36478 + + + M bin/chkstow.in + M bin/stow.in + +Thu Mar 1 11:40:34 2012 +0000 Adam Spiers + + * Revamp README. + + M README + +Sun Feb 19 19:15:48 2012 +0000 Adam Spiers + + * Remove accidentally duplicated code. + + M t/examples.t + +Sun Feb 19 11:54:53 2012 +0000 Adam Spiers + + * Improve docs for path_owned_by_package() + + M lib/Stow.pm.in + +Sun Feb 19 01:42:10 2012 +0000 Adam Spiers + + * Fix typo in manual. + + M doc/stow.texi + +Sun Feb 19 01:42:04 2012 +0000 Adam Spiers + + * Add a few more items to index. + + M doc/stow.texi + +Sat Feb 18 20:43:20 2012 +0000 Adam Spiers + + * Add boilerplate commit message for web docs update. + + M doc/HOWTO-RELEASE + +Sat Feb 18 17:08:19 2012 +0000 Adam Spiers + + * Bump version to 2.2.0 + + M META.json + M META.yml + M NEWS + M configure.ac + +Sat Feb 18 20:13:32 2012 +0000 Adam Spiers + + * Add --no-folding option. + + M NEWS + M bin/stow.in + M doc/stow.texi + M lib/Stow.pm.in + M t/stow.t + M t/testutil.pm + M t/unstow.t + +Sat Feb 18 14:20:07 2012 +0000 Adam Spiers + + * Remove -a option for safety reasons (but keep --adopt). + + M NEWS + M bin/stow.in + M doc/stow.texi + +Sat Feb 18 20:12:14 2012 +0000 Adam Spiers + + * Improve error message when package is not found. + + M NEWS + M lib/Stow.pm.in + +Sat Feb 18 20:19:05 2012 +0000 Adam Spiers + + * Use make_invalid_link() to reliably setup symlink fixtures. + + M NEWS + M t/chkstow.t + M t/cleanup_invalid_links.t + M t/stow.t + M t/testutil.pm + M t/unstow.t + M t/unstow_orig.t + +Sat Feb 18 15:47:36 2012 +0000 Adam Spiers + + * Add documentation improvements to NEWS. + + M NEWS + +Sat Feb 18 17:07:15 2012 +0000 Adam Spiers + + * Update TODO + + M TODO + +Sat Feb 18 20:32:40 2012 +0000 Adam Spiers + + * Last known bug was fixed a long time ago :-) + + M doc/stow.texi + +Sat Feb 18 15:47:19 2012 +0000 Adam Spiers + + * Update structure of manual to match recommended texinfo structure. TOC + now appears after title page. Copying information is no longer + duplicated. + + + M doc/stow.texi + +Sat Feb 18 15:46:14 2012 +0000 Adam Spiers + + * Fix various formatting issues in the manual. + + M doc/stow.texi + +Sat Feb 18 15:45:49 2012 +0000 Adam Spiers + + * Add some more index entries to the manual. + + M doc/stow.texi + +Sat Feb 18 15:45:16 2012 +0000 Adam Spiers + + * Add some @sections to the manual to break larger nodes up. + + M doc/stow.texi + +Sat Feb 18 15:17:21 2012 +0000 Adam Spiers + + * Use @command / @samp / @env / @var in the manual where appropriate, + rather than @code. + + M doc/stow.texi + +Sat Feb 18 15:03:52 2012 +0000 Adam Spiers + + * Fix formatting of regexp values in the manual. + + M doc/stow.texi + +Sat Feb 18 14:15:14 2012 +0000 Adam Spiers + + * Add --adopt to usage text. + + M bin/stow.in + +Sat Feb 18 14:11:33 2012 +0000 Adam Spiers + + * Improve ordering of options in usage text. + + M bin/stow.in + +Sat Feb 18 14:08:17 2012 +0000 Adam Spiers + + * Add missing options to pod, and reference to front-end documentation. + + M lib/Stow.pm.in + +Sat Feb 18 14:07:45 2012 +0000 Adam Spiers + + * Ignore tmp-testing-trees anywhere. + + M .gitignore + M MANIFEST.SKIP + +Sat Feb 18 12:28:00 2012 +0000 Adam Spiers + + * Make shared library tests match real-world scenarios. Typically, + libfoo.so.X.Y.Z is the file, and libfoo.so is the symlink which + points to it. + + + M t/stow.t + +Sat Feb 18 11:53:46 2012 +0000 Adam Spiers + + * Include --simulate in usage text. + + M bin/stow.in + +Fri Jan 13 11:34:55 2012 +0000 Adam Spiers + + * Avoid "Use of uninitialized value" warnings from test suite. Happened + on some versions of Perl when TEST_VERBOSE not yet. Thanks Adam + Sampson! + + + M lib/Stow.pm.in + +Thu Jan 12 17:54:32 2012 +0000 Adam Spiers + + * Remove reference to old FSF address (thank you rpmlint for catching + this!) + + M bin/stow.in + +Wed Jan 11 14:01:40 2012 +0000 Adam Spiers + + * Remove "There are no outstanding operations to perform" warning. This + is more in keeping with the UNIX convention of no output on + success, and is also the way Stow v1.x behaved. Thanks to Adam + Sampson for the suggestion. + + + M NEWS + M THANKS + M lib/Stow.pm.in + M t/stow.t + M t/unstow.t + M t/unstow_orig.t + +Tue Jan 10 12:17:58 2012 +0000 Adam Spiers + + * Fix wrong version number in NEWS. + + M NEWS + +Mon Jan 9 21:39:35 2012 +0000 Adam Spiers + + * Bump version to 2.1.3 + + M META.json + M META.yml + M NEWS + M configure.ac + +Mon Jan 9 21:32:31 2012 +0000 Adam Spiers + + * Rename test files to reflect their purpose. + + M MANIFEST + A t/stow.t + D t/stow_contents.t + A t/unstow.t + D t/unstow_contents.t + D t/unstow_contents_orig.t + A t/unstow_orig.t + +Mon Jan 9 21:31:46 2012 +0000 Adam Spiers + + * Rename stow.t to be more consistent with its purpose. + + M MANIFEST + A t/cli_options.t + D t/stow.t + +Mon Jan 9 22:10:19 2012 +0000 Adam Spiers + + * perl Build.PL needs a prefix during testing + + M doc/HOWTO-RELEASE + +Mon Jan 9 21:25:35 2012 +0000 Adam Spiers + + * Add --adopt / -a option. + + M NEWS + M bin/stow.in + M doc/stow.texi + M lib/Stow.pm.in + M lib/Stow/Util.pm + M t/stow_contents.t + M t/testutil.pm + +Mon Jan 9 21:11:58 2012 +0000 Adam Spiers + + * Add stacktrace to internal error report to aid debugging. + + M lib/Stow.pm.in + +Mon Jan 9 18:32:06 2012 +0000 Adam Spiers + + * Use get_conflict_count() in tests since get_conflicts() no longer + returns a flat structure. + + M t/cleanup_invalid_links.t + M t/examples.t + M t/stow_contents.t + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Mon Jan 9 17:52:11 2012 +0000 Adam Spiers + + * Link to website to encourage users to report bugs. + + M lib/Stow.pm.in + +Mon Jan 9 16:42:40 2012 +0000 Adam Spiers + + * Improve readability of NEWS file when viewed raw. + + M NEWS + +Mon Jan 9 16:25:27 2012 +0000 Adam Spiers + + * Improve existing comments. + + M lib/Stow.pm.in + +Wed Dec 21 11:45:59 2011 +0000 Adam Spiers + + * Improve the footnote which defines 'subpath'. + + M doc/stow.texi + +Wed Dec 21 11:45:43 2011 +0000 Adam Spiers + + * Add another ignore example to the manual and test suite. + + M doc/stow.texi + M t/ignore.t + +Thu Dec 15 21:14:07 2011 +0000 Adam Spiers + + * Fix some incorrect CPAN meta-data about the project. + + M Build.PL + M META.json + M META.yml + +Tue Dec 13 16:12:29 2011 +0000 Adam Spiers + + * Make configure check for Perl modules required by test suite. + + M NEWS + M configure.ac + +Sun Dec 11 13:23:37 2011 +0000 Adam Spiers + + * Make stow script return true for t/stow.t According to + http://matrix.cpantesters.org/?dist=Stow this only seems to be an + issue with Perl <= 5.8.7. + + + M bin/stow.in + +Sun Dec 11 13:12:32 2011 +0000 Adam Spiers + + * Automate check for 'use lib' line in bin/stow. + + M Build.PL + M doc/HOWTO-RELEASE + +Tue Dec 6 18:30:28 2011 +0000 Adam Spiers + + * Bump version to 2.1.2. + + M META.json + M META.yml + M configure.ac + +Wed Dec 7 20:28:28 2011 +0000 Adam Spiers + + * Significantly improve the handling of --with-pmdir. + + M INSTALL + M Makefile.am + M NEWS + M bin/stow.in + M configure.ac + M doc/HOWTO-RELEASE + +Wed Dec 7 01:20:07 2011 +0000 Adam Spiers + + * Make capitalisation consistent in usage text. + + M bin/stow.in + +Wed Dec 7 20:31:18 2011 +0000 Adam Spiers + + * Abort ./configure if we can't find Perl. + + M NEWS + M configure.ac + +Wed Dec 7 01:23:41 2011 +0000 Adam Spiers + + * Ensure the ChangeLog is up-to-date when making a new distribution. + Thanks to Stefano Lattarini for this suggestion. + + + M Makefile.am + M NEWS + M doc/HOWTO-RELEASE + +Wed Dec 7 00:38:16 2011 +0000 Adam Spiers + + * Use maintainer-clean-local rule, not maintainer-clean. + + M Makefile.am + +Tue Dec 6 18:20:03 2011 +0000 Adam Spiers + + * `make clean' shouldn't remove files which the user may not be able to + rebuild. + + M Makefile.am + +Tue Dec 6 10:35:31 2011 +0000 Adam Spiers + + * Bump version to 2.1.1 + + M META.json + M META.yml + M NEWS + M configure.ac + +Tue Dec 6 17:33:41 2011 +0000 Adam Spiers + + * Ignore .mrdownload files from my `download' plugin to Joey Hess' mr + utility. + + M MANIFEST.SKIP + +Tue Dec 6 17:30:58 2011 +0000 Adam Spiers + + * Add a workaround for not being able to ensure that git commit triggers + ChangeLog update. + + M doc/HOWTO-RELEASE + +Tue Dec 6 17:24:44 2011 +0000 Adam Spiers + + * Show when ChangeLog is rebuilt. + + M Makefile.am + +Tue Dec 6 17:22:21 2011 +0000 Adam Spiers + + * Fix release instructions regarding CPAN distribution. + + M doc/HOWTO-RELEASE + +Tue Dec 6 17:08:21 2011 +0000 Adam Spiers + + * Refill paragraph in README. + + M README + +Tue Dec 6 17:08:13 2011 +0000 Adam Spiers + + * Don't duplicate information from INSTALL. + + M README + +Tue Dec 6 17:07:29 2011 +0000 Adam Spiers + + * Document installation via Module::Build. + + M INSTALL + +Tue Dec 6 17:06:59 2011 +0000 Adam Spiers + + * Document prerequisites for installation. + + M INSTALL + +Tue Dec 6 17:04:50 2011 +0000 Adam Spiers + + * chkstow was missing from Module::Build install. + + M Build.PL + +Tue Dec 6 17:04:37 2011 +0000 Adam Spiers + + * File::Slurp is no longer used. + + M Build.PL + M META.json + M META.yml + +Tue Dec 6 16:20:52 2011 +0000 Adam Spiers + + * Fix automake issues (thanks to Stefano Lattarini for spotting these!) + + M Build.PL + M Makefile.am + M NEWS + M THANKS + +Tue Dec 6 16:47:32 2011 +0000 Adam Spiers + + * Add $(PDF) and $(HTML) variables. + + M Makefile.am + +Tue Dec 6 16:39:57 2011 +0000 Adam Spiers + + * Add *.orig to MANIFEST.SKIP. + + M MANIFEST.SKIP + +Tue Dec 6 15:57:36 2011 +0000 Adam Spiers + + * Ditch deprecated AM_MAINTAINER_MODE. + + M aclocal.m4 + M configure.ac + +Tue Dec 6 15:56:43 2011 +0000 Adam Spiers + + * Add licensing changes to TODO. + + M TODO + +Tue Dec 6 15:41:33 2011 +0000 Adam Spiers + + * Add bug-reporting email address and a couple of URLs to usage text to + comply with GNU Coding Standards for --help option. + + M bin/stow.in + +Tue Dec 6 15:57:20 2011 +0000 Adam Spiers + + * Calculated the correct default value for pmdir based on the local Perl + installation. + + M NEWS + M configure.ac + +Tue Dec 6 10:33:34 2011 +0000 Adam Spiers + + * Fixed bug where --with-pmdir was ineffectual. + + M Makefile.am + M NEWS + M configure.ac + +Sun Dec 4 14:57:34 2011 +0000 Adam Spiers + + * Change @dircategory to `System administration' as suggested by Karl + Berry. + + M doc/stow.texi + +Sat Dec 3 18:13:09 2011 +0000 Adam Spiers + + * Add git push and update of online documentation to HOWTO-RELEASE. + + M doc/HOWTO-RELEASE + +Sat Dec 3 17:51:48 2011 +0000 Adam Spiers + + * Release announcements should go to stow-devel too. + + M doc/HOWTO-RELEASE + +Sat Dec 3 17:51:44 2011 +0000 Adam Spiers + + * Fix error in gnupload command-line. + + M doc/HOWTO-RELEASE + +Sat Dec 3 17:09:48 2011 +0000 Adam Spiers + + * Add a missing space. + + M AUTHORS + +Sat Dec 3 16:40:20 2011 +0000 Adam Spiers + + * Add a missing hyperlink to the Stow homepage. + + M doc/stow.texi + +Sat Dec 3 14:03:58 2011 +0000 Adam Spiers + + * Give up on automake's built-in rules for generating PDF and HTML and + use our own. Also include split version of the manual. + + M .gitignore + M MANIFEST + M MANIFEST.SKIP + M Makefile.am + M NEWS + +Sat Dec 3 02:07:19 2011 +0000 Adam Spiers + + * Update reference to maintainer. + + M AUTHORS + M README + M doc/stow.texi + +Sat Dec 3 01:30:08 2011 +0000 Adam Spiers + + * Temporarily remove PDF from dist_doc_DATA due to automake issue. + http://article.gmane.org/gmane.comp.sysutils.automake.general/13192 + + This means that it is still included in the distribution and + installed, but is only automatically (re)built when making a new + distribution - if stow.texi changes during development, it has to + be rebuilt manually via 'make pdf'. + + + M MANIFEST + M MANIFEST.SKIP + M Makefile.am + +Sat Dec 3 00:54:05 2011 +0000 Adam Spiers + + * Module::Build generates archive files with 'v' for version + + M MANIFEST.SKIP + +Fri Dec 2 14:55:44 2011 +0000 Adam Spiers + + * Add TODOs for .rpm and .deb support. + + M TODO + +Thu Dec 1 18:03:16 2011 +0000 Adam Spiers + + * Add doc/version.texi to distribution. + + M Makefile.am + +Thu Dec 1 17:25:24 2011 +0000 Adam Spiers + + * Switch to renaming to manual via install hook as suggested by Stefano + Lattarini + http://article.gmane.org/gmane.comp.sysutils.automake.general/13191 + + + M MANIFEST + M MANIFEST.SKIP + M Makefile.am + +Thu Dec 1 16:23:04 2011 +0000 Adam Spiers + + * Fix corner case where only -d is specified as a single directory. + + M bin/stow.in + +Mon Nov 28 23:20:14 2011 +0000 Adam Spiers + + * Add result of ./Build dist to .gitignore + + M .gitignore + +Mon Nov 28 23:18:58 2011 +0000 Adam Spiers + + * Synchronise CPAN MANIFEST files with automake distribution list. + + M MANIFEST + M MANIFEST.SKIP + +Mon Nov 28 23:18:36 2011 +0000 Adam Spiers + + * Ignore split page version of HTML manual. + + M .gitignore + +Mon Nov 28 23:17:50 2011 +0000 Adam Spiers + + * Don't duplicate stow.texi to manual.texi. + + M MANIFEST + M MANIFEST.SKIP + M Makefile.am + +Sat Nov 26 18:55:10 2011 +0000 Adam Spiers + + * Improve debug levels. + + M lib/Stow.pm.in + M lib/Stow/Util.pm + +Sat Nov 26 18:24:35 2011 +0000 Adam Spiers + + * Add a TODO concerning .nonstow. + + M TODO + +Sat Nov 26 18:15:26 2011 +0000 Adam Spiers + + * Add HOWTO-RELEASE + + A doc/HOWTO-RELEASE + +Thu Nov 24 01:27:41 2011 +0000 Adam Spiers + + * Add NEWS entry for 2.1.0 + + M NEWS + +Thu Nov 24 00:26:50 2011 +0000 Adam Spiers + + * Bump version to 2.1.0 + + M META.json + M META.yml + M configure.ac + +Fri Nov 25 15:23:08 2011 +0000 Adam Spiers + + * Fix documentation regarding splitting of symlinks across multiple stow + directories. + + M doc/stow.texi + M lib/Stow.pm.in + +Fri Nov 25 15:14:07 2011 +0000 Adam Spiers + + * Tidy up chkstow code and documentation. + + M bin/chkstow.in + M doc/stow.texi + +Fri Nov 25 15:03:46 2011 +0000 Adam Spiers + + * Add chkstow to NEWS + + M NEWS + +Fri Nov 25 14:45:28 2011 +0000 Adam Spiers + + * Add comment to manual about test_examples_in_manual() in t/ignore.t. + + M doc/stow.texi + +Sat Nov 26 16:32:25 2011 +0000 Adam Spiers + + * Remove quote stripping code. I'm guessing it was added due to a + misunderstanding of how shell quoting works. When you invoke + + stow --ignore=".#.*" ... + + the shell strips out the quotes before the Perl process ever sees + them. I can't imagine any sensible scenario in which you would + need to invoke + + stow --ignore='"foo"' + + but if the user has a filename containing quotes at the beginning + and end, they can now choose to ignore it (prior to this patch, + they couldn't). + + + M bin/stow.in + M t/stow.t + +Thu Nov 24 22:49:22 2011 +0000 Adam Spiers + + * Improve conflict reporting + + M bin/stow.in + M lib/Stow.pm.in + M t/stow_contents.t + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Thu Nov 24 18:05:57 2011 +0000 Adam Spiers + + * Sync up .gitignore and MANIFEST* with recent changes. + + M .gitignore + M MANIFEST + M MANIFEST.SKIP + +Thu Nov 24 20:47:39 2011 +0000 Adam Spiers + + * Ditch obsolete --conflicts option and update misleading documentation. + + M bin/stow.in + M doc/stow.texi + M lib/Stow.pm.in + +Thu Nov 24 17:00:33 2011 +0000 Adam Spiers + + * Auto-generate ChangeLog from git + + M .gitignore + D ChangeLog + M Makefile.am + A doc/ChangeLog.OLD + +Thu Nov 24 16:59:45 2011 +0000 Adam Spiers + + * Sort .gitignore alphabetically + + M .gitignore + +Thu Nov 24 16:59:26 2011 +0000 Adam Spiers + + * Add some missing stuff to .gitignore + + M .gitignore + +Thu Nov 24 16:22:11 2011 +0000 Adam Spiers + + * Distribute .tar.gz and .tar.bz2 but not .shar.gz + + M Makefile.am + M configure.ac + +Thu Nov 24 16:32:01 2011 +0000 Adam Spiers + + * Numerous fixes so that `make distcheck' succeeds. Moves temporary test + trees into a separate directory. + + M .gitignore + M Makefile.am + M configure.ac + M t/chkstow.t + M t/cleanup_invalid_links.t + M t/defer.t + M t/examples.t + M t/find_stowed_path.t + M t/foldable.t + M t/ignore.t + M t/stow.t + M t/stow_contents.t + M t/testutil.pm + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Thu Nov 24 00:45:29 2011 +0000 Adam Spiers + + * Strip superfluous quotes from $hash{'lookups'} + + M bin/stow.in + M lib/Stow.pm.in + M t/chkstow.t + M t/stow.t + +Thu Nov 24 17:15:02 2011 +0000 Adam Spiers + + * Tidy up the copyright attributions in the manual. + + M doc/stow.texi + +Thu Nov 24 17:14:51 2011 +0000 Adam Spiers + + * Fix some minor issues in the manual. + + M doc/stow.texi + +Thu Nov 24 17:33:36 2011 +0000 Adam Spiers + + * Add HTML and PDF versions of manual to distribution. + + M .gitignore + M Makefile.am + +Wed Nov 23 23:45:48 2011 +0000 Adam Spiers + + * Add support for ignore lists. + + M AUTHORS + M Makefile.am + M TODO + A default-ignore-list + M doc/stow.texi + M lib/Stow.pm.in + M lib/Stow/Util.pm + M t/chkstow.t + M t/cleanup_invalid_links.t + M t/examples.t + M t/find_stowed_path.t + M t/foldable.t + A t/ignore.t + M t/stow.t + M t/stow_contents.t + M t/testutil.pm + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Tue Nov 22 15:59:07 2011 +0000 Adam Spiers + + * Rename $old_* to $existing_* + + M lib/Stow.pm.in + +Tue Nov 22 15:50:12 2011 +0000 Adam Spiers + + * Rename protected_dir() to marked_stow_dir(). + + M lib/Stow.pm.in + +Tue Nov 22 15:48:08 2011 +0000 Adam Spiers + + * Rename should_skip_stow_dir_target() to + should_skip_target_which_is_stow_dir() + + M lib/Stow.pm.in + +Tue Nov 22 15:46:05 2011 +0000 Adam Spiers + + * Be clearer when we're not actually (un)stowing, just planning. + + M lib/Stow.pm.in + +Tue Nov 22 14:29:52 2011 +0000 Adam Spiers + + * Add another test to join_paths.t + + M t/join_paths.t + +Tue Nov 22 14:29:42 2011 +0000 Adam Spiers + + * Clean up coding style in tests + + M t/chkstow.t + M t/cleanup_invalid_links.t + M t/find_stowed_path.t + M t/join_paths.t + M t/parent.t + +Tue Nov 22 14:28:37 2011 +0000 Adam Spiers + + * Avoid use of map in void context + + M bin/stow.in + +Mon Nov 21 23:24:02 2011 +0000 Adam Spiers + + * Add a comment about a relative weakness of compat mode. + + M lib/Stow.pm.in + +Mon Nov 21 23:23:43 2011 +0000 Adam Spiers + + * Test stow/unstow with stow dir / target dir as absolute paths. + + M t/stow_contents.t + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Mon Nov 21 23:21:48 2011 +0000 Adam Spiers + + * Fix more inconsistencies in coding style. + + M lib/Stow.pm.in + +Mon Nov 21 23:15:47 2011 +0000 Adam Spiers + + * Fix typos + + M lib/Stow.pm.in + +Mon Nov 21 22:08:52 2011 +0000 Adam Spiers + + * Fix/remove some outdated TODOs + + M TODO + +Mon Nov 21 18:04:58 2011 +0000 Adam Spiers + + * Add build-time dependencies on Test::More and Test::Output. + + M Build.PL + M META.json + M META.yml + M TODO + +Mon Nov 21 14:48:58 2011 +0000 Adam Spiers + + * Add MYMETA.* to .gitignore + + M .gitignore + +Mon Nov 21 14:46:27 2011 +0000 Adam Spiers + + * Add .dirstamp and stamp-vti to .gitignore + + M .gitignore + +Thu Nov 24 16:52:50 2011 +0000 Adam Spiers + + * Convert man page to POD format which is easier to maintain within + stow.in. + + M .gitignore + M Makefile.am + M bin/stow.in + D doc/stow.8 + +Mon Nov 21 13:59:36 2011 +0000 Adam Spiers + + * Reorganise more files into subdirectories and add CPAN support via + Module::Build + + A Build.PL + A MANIFEST + A MANIFEST.SKIP + A META.json + A META.yml + M Makefile.am + A automake/install-sh + A automake/mdate-sh + A automake/missing + A bin/chkstow.in + A bin/stow.in + D chkstow.in + M configure.ac + A doc/stow.8 + A doc/stow.texi + A doc/texinfo.tex + D install-sh + D mdate-sh + D missing + D stow.8 + D stow.in + D stow.texi + D texinfo.tex + +Mon Nov 21 14:07:39 2011 +0000 Adam Spiers + + * Add myself (Adam) to AUTHORS and THANKS ;-) + + M AUTHORS + M THANKS + +Thu Nov 24 16:28:09 2011 +0000 Adam Spiers + + * Major refactoring of code into separate Stow and Stow::Util Perl + modules + + M .gitignore + M Makefile.am + M TODO + M configure.ac + A lib/Stow.pm.in + A lib/Stow/Util.pm + M stow.in + M t/chkstow.t + M t/cleanup_invalid_links.t + M t/defer.t + M t/examples.t + M t/find_stowed_path.t + M t/foldable.t + M t/join_paths.t + M t/parent.t + M t/stow.t + M t/stow_contents.t + A t/testutil.pm + M t/unstow_contents.t + M t/unstow_contents_orig.t + D t/util.pm + +Fri Nov 18 15:09:39 2011 +0000 Adam Spiers + + * Fix indentation in Makefile.am + + M Makefile.am + +Fri Nov 18 11:24:36 2011 +0000 Adam Spiers + + * Test unstowing when target contains a real file generates a conflict. + + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Thu Nov 17 20:11:06 2011 +0000 Adam Spiers + + * Test unstowing stuff which doesn't exist in the target tree. + + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Thu Nov 17 20:11:32 2011 +0000 Adam Spiers + + * Add a missing conflict if we tried to unstow a file in compat mode. + + M stow.in + +Fri Nov 18 12:00:05 2011 +0000 Adam Spiers + + * Remove setting of verbosity from tests + + M t/cleanup_invalid_links.t + M t/examples.t + M t/foldable.t + M t/stow_contents.t + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Fri Nov 18 11:14:50 2011 +0000 Adam Spiers + + * Make 'verbose' option default to 0 in testmode. + + M stow.in + +Fri Nov 18 10:48:48 2011 +0000 Adam Spiers + + * Add protection against stowing into stow dirs + + M stow.in + M t/stow_contents.t + +Fri Nov 18 10:34:23 2011 +0000 Adam Spiers + + * Debug stow dir in stow/unstow contents routines + + M stow.in + +Fri Nov 18 10:33:08 2011 +0000 Adam Spiers + + * Trace individual cases separately when skipping stow dirs during + unstow. + + M stow.in + +Fri Nov 18 10:29:15 2011 +0000 Adam Spiers + + * Allow TEST_VERBOSE to control level of verbosity. Defaults to 3. + 'verbose' option now has precedence if set. + + M stow.in + +Thu Nov 17 20:32:48 2011 +0000 Adam Spiers + + * Debug when skipping over stow directories + + M stow.in + +Thu Nov 17 20:10:42 2011 +0000 Adam Spiers + + * Add debug when target to be unstowed doesn't exist + + M stow.in + +Thu Nov 17 20:09:42 2011 +0000 Adam Spiers + + * Add comments justifying is_a_node($target) check in unstow_contents(). + + M stow.in + +Thu Nov 17 19:33:09 2011 +0000 Adam Spiers + + * Test unstowing an already unstowed package + + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Thu Nov 17 19:10:02 2011 +0000 Adam Spiers + + * Fix incorrect comments. + + M stow.in + +Thu Nov 17 19:04:10 2011 +0000 Adam Spiers + + * Sync t/unstow_contents{,_orig}.t + + M t/unstow_contents_orig.t + +Thu Nov 17 18:46:32 2011 +0000 Adam Spiers + + * Debug with maximum verbosity to STDOUT when running tests. + + M stow.in + M t/util.pm + +Thu Nov 17 18:46:13 2011 +0000 Adam Spiers + + * Refactored reset_state() into t/util.pm + + M t/cleanup_invalid_links.t + M t/examples.t + M t/stow_contents.t + M t/unstow_contents.t + M t/unstow_contents_orig.t + M t/util.pm + +Thu Nov 17 18:24:53 2011 +0000 Adam Spiers + + * Refactored is_a_{link,dir,node}() code. + + M stow.in + +Thu Nov 17 17:23:04 2011 +0000 Adam Spiers + + * Improve tree splitting comments. + + M stow.in + +Thu Nov 17 16:39:02 2011 +0000 Adam Spiers + + * Don't tolerate '' as value for $target parameter to (un)stow_contents + + M stow.in + M t/stow_contents.t + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Thu Nov 17 16:37:37 2011 +0000 Adam Spiers + + * Add debug tracing to helper routines + + M stow.in + +Thu Nov 17 16:35:57 2011 +0000 Adam Spiers + + * Fix Parameters comments. + + M stow.in + +Thu Nov 17 19:47:20 2011 +0000 Adam Spiers + + * Improve debug output + + M stow.in + +Thu Nov 17 15:32:51 2011 +0000 Adam Spiers + + * Clarify meaning of `--defer' in the manual. + + M stow.texi + +Thu Nov 17 15:22:58 2011 +0000 Adam Spiers + + * Finish "Deferred Operation" section in manual. + + M TODO + M stow.texi + +Thu Nov 17 14:17:24 2011 +0000 Adam Spiers + + * Fix inconsistencies in coding style. + + M stow.in + M t/util.pm + +Thu Nov 17 14:12:14 2011 +0000 Adam Spiers + + * Set cperl-indent-level to 4 + + M stow.in + +Thu Nov 17 14:12:12 2011 +0000 Adam Spiers + + * Simplify GetOptions() code + + M stow.in + +Thu Nov 17 13:26:04 2011 +0000 Adam Spiers + + * Refactor verbosity-controlled output to STDERR into debug() + subroutine. + + M stow.in + +Thu Nov 17 12:45:36 2011 +0000 Adam Spiers + + * Fix broken 'make install' due to man page being duplicated in + install-man8 target + + M Makefile.am + +Wed Nov 16 16:52:03 2011 +0000 Adam Spiers + + * Stow directory now defaults to STOW_DIR environment variable if set. + + M ChangeLog + M stow.8 + M stow.in + M stow.texi + +Wed Nov 16 15:57:17 2011 +0000 Adam Spiers + + * Use File::Spec->abs2rel() instead of home-grown relative_path which + actually gets some inputs wrong (e.g. "/" relative to "/") + + M Makefile.am + M stow.in + D t/relative_path.t + +Wed Nov 16 15:51:54 2011 +0000 Adam Spiers + + * Add a bunch of stuff to the TODO + + M TODO + +Wed Nov 16 15:42:42 2011 +0000 Adam Spiers + + * Add FIXME for Deferred Operation section in manual. + + M TODO + M stow.texi + +Wed Nov 16 15:40:46 2011 +0000 Adam Spiers + + * Fix indentation issues in NEWS + + M NEWS + +Wed Nov 16 15:38:47 2011 +0000 Adam Spiers + + * Switch NEWS and TODO to org-mode. org-mode has been included in emacs + by default for a long time and is much more friendly than + outline-mode. No impact to non-emacs users. + + + M NEWS + M TODO + +Wed Nov 16 15:22:12 2011 +0000 Adam Spiers + + * Stow now requires Perl 5.6.1 or newer, due to use of 'our'. + + M README + M chkstow.in + M stow.in + +Wed Nov 16 15:20:21 2011 +0000 Adam Spiers + + * Troy is the maintainer now. + + M AUTHORS + M README + M TODO + M stow.texi + +Wed Nov 16 14:59:58 2011 +0000 Adam Spiers + + * Fix typos + + M AUTHORS + M TODO + M stow.in + M stow.texi + M t/relative_path.t + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Wed Nov 16 15:16:53 2011 +0000 Adam Spiers + + * Catch warnings in tests when no outstanding operations to perform. + Tests now all pass completely cleanly. + + M t/stow_contents.t + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Wed Nov 16 15:07:26 2011 +0000 Adam Spiers + + * Fix %Options typo in several tests + + M t/cleanup_invalid_links.t + M t/examples.t + M t/stow_contents.t + M t/unstow_contents.t + M t/unstow_contents_orig.t + +Wed Nov 16 15:04:21 2011 +0000 Adam Spiers + + * Fix t/stow.t + + M t/stow.t + +Wed Nov 16 14:51:38 2011 +0000 Adam Spiers + + * Fix chkstow.t + + M chkstow.in + M t/chkstow.t + +Wed Nov 16 14:46:31 2011 +0000 Adam Spiers + + * Add #! header to t/util.pm for benefit of editor mode selection + + M t/util.pm + +Wed Nov 16 14:45:56 2011 +0000 Adam Spiers + + * Fix chkstow.in for emacs users + + M chkstow.in + +Wed Nov 16 14:34:02 2011 +0000 Adam Spiers + + * Support ./configure --disable-maintainer-mode to optionally avoid + auto-reconfiguring on make. + + M aclocal.m4 + M configure.ac + +Wed Nov 16 14:31:32 2011 +0000 Adam Spiers + + * Run autoreconf with more recent GNU autotools. + + M aclocal.m4 + +Wed Nov 16 14:30:55 2011 +0000 Adam Spiers + + * Add test target to Makefile + + M Makefile.am + +Thu Nov 24 16:55:43 2011 +0000 Adam Spiers + + * Remove auto-generated files from git. + + M .gitignore + D Makefile.in + D configure + D stamp-vti + D stow.info + D version.texi + +Wed Nov 16 14:30:39 2011 +0000 Adam Spiers + + * Add .gitignore + + A .gitignore + +Sun Apr 12 23:04:33 2009 -0700 Troy Will + + * made numeric argument to --verbose optional + + M stow.in + +Sun Apr 12 21:59:24 2009 -0700 Troy Will + + * Remove stow, config.status, config.log, Makefile + + D Makefile + D config.log + D config.status + D stow +Thu Jan 31 2008 Kahlil Hodgson + + * stow.texi: Austin Wood and Chris Hoobin clean this up for version 2. + + * texi2man: new script by Austin and Chris to generate a man page from the + texinfo file. + + +Sun Nov 25 19:31:32 2007 Kahlil Hodgson + * all: Version 2.0.1 + + * AUTHORS: added Kahlil Hodgson as a new author and current maintainer. + + * stow.in: major rewrite to produce version 2.0.1 see NEWS for details + + * t/: added test suite and support code + + * configure.in: renamed to configure.ac as per autotools recommendation. + + * configure.ac: + Use AC_INT rather than obsolete AM_INTI_MAKEFILE usage. + Remove redundant VERSION and PACKAGE setttings + Remove redundant AC_ARG_PROGRAM + Use AM_INIT_AUTOMAKE([-Wall -Werror]) because we are pedantic. + Add AC_PREREQ([2.6.1]) + + * Makefile.am, configure.ac: + Use explicit rewrite in Makefile.am, rather than AC_CONFIG_FILES(stow.in), + as per autotools recommendation. + + * Makefile.am: + Add TESTS and TEST_ENVIRONMENT for files in t/ + Use dist_man_MANS instead of EXTRA_DIST for man page + + * INSTALL: update to reflect autotools modernization. + + * NEWS: update to describe cahnges in Version 2.0.1. + + * README: update to point to the right websites and email addresses. + + * THANKS: + Add Emil Mikulc who's ideas largely inspired Version 2 and + and Geoffrey Giesemann who did some initial testing and found some + important bugs. + + * TODO: remove tasks that where implemented in Version 2 + + * stow.texi: update documentation to reflect Version 2 changes. + + * stow.8: update to reflect Version 2 changes. + +Sat Jan 26 16:15:21 2002 Guillaume Morin + + * stow.in: if $ENV{'STOW_DIR'} is set, this becomes the default + Stow directory. + +Sun Jan 06 12:18:50 2002 Guillaume Morin + + * Makefile.am: use EXTRA_DIST to include manpage in distribution + +Wed Jan 02 21:33:41 2002 Guillaume Morin + + * stow.in: Stow now only warns the user if a subdirectory + is unreadable during unstowing. + +Wed Jan 02 20:58:05 2002 Guillaume Morin + + * stow.in: fixed JoinPaths so that subdirs called "0" are + correctly pushed. Thanks a lot to Gergely Nagy + who patiently helped me to chase + this bug. + +Sun Dec 30 21:58:25 2001 Guillaume Morin + + * stow.in: fixed a bug introduced by previous changes when + Target argument was relative. (thanks to Luca Filipozzi + for pointing this out) + +Sun Dec 30 18:23:25 2001 Guillaume Morin + + * stow.in: now requires Perl 5. Use POSIX getcwd instead of broken + fastcwd. Fixed bug when CommonParent is /. Stow does not remove + initially empty directories anymore. + +Sun Dec 30 18:07:51 2001 Guillaume Morin + + * configure.in: automake fixes (fp_ -> AC, +AC_INIT_AUTOMAKE) + +Fri Oct 11 22:09:45 1996 Bob Glickstein + + * stow.html, configure.in: Version 1.3.2. + + * README, stow.texi: Correct the URL again. + +Fri Oct 11 18:20:42 1996 Bob Glickstein + + * configure.in: Version 1.3.1. + + * stow.html: Update Stow manual URL. Mention version 1.3.1. + + * README: Update Stow URL. + + * Makefile.am: stow-manual.html -> manual.html. + + * stow.texi: + Add a reference to the Stow home page on the GNU web server. Change + several occurrences of "which" to "that" for grammatical superiority. + +Wed Oct 9 00:34:07 1996 Bob Glickstein + + * Makefile.am: + Add maintainer-only rules for stow-manual.html and stow-manual.texi. + +Wed Oct 9 00:32:31 1996 Bob Glickstein + + * README: Refer to the new location for the Stow home page. + + * stow.html: Make it right for the GNU web server. + +Tue Oct 8 21:54:09 1996 Bob Glickstein + + * stow.texi: Document --restow + + * stow.in: Add --restow (-R) option + + * configure.in: Add "perl4" to search for Perl binary. + Bump version number to 1.3. + +Mon Jun 24 23:23:03 1996 Bob Glickstein + + * stow.texi: Delete trailing whitespace. + +Fri Jun 21 19:44:26 1996 Bob Glickstein + + * Makefile.am: + Don't explicitly mention version.texi. Automake now does it + automagically, by noticing the `@include version.texi' in + stow.texi. Awesome. + + * stow.texi: + Use @include instead of @input. This is more Texinfoid, plus + allows Automake to automatically deduce the need for + version.texi. + + * stow.in: + Elide trailing slashes from package names, then complain if + package names have slashes in them. + +Tue Jun 18 23:19:04 1996 Bob Glickstein + + * README: Call it "Gnu Stow". + +Tue Jun 18 22:15:45 1996 Bob Glickstein + + * configure.in: + Bump version number to 1.2. + + Look for Perl under the names `perl' and `perl5'. If not found, + print a warning. + + * stow.texi: + Add a section about bootstrapping. Add text about hacking Gnu + Make output. + + * INSTALL: + Describe what happens when Perl isn't found during `configure'. + +Mon Jun 17 19:43:25 1996 Bob Glickstein + + * THANKS: Thank Fritz. + +Fri Jun 14 19:18:50 1996 Bob Glickstein + + * AUTHORS: Credit John Bazik and Gord Matzigkeit. + + * stow.texi: Remove a "known bug" -- the pwd dependency is gone. + + * stow.in: + Use fastcwd, from fastcwd.pl (which is GPL'd), to remove + dependency on an external pwd binary. Suggested by Gord + Matzigkeit. + + * stow.in: Add a missing comma. + +Thu Jun 13 21:52:10 1996 Bob Glickstein + + * stow.in: + Change three occurrences of `my' to `local' for Perl 4 + compatibility. + +Thu Jun 13 18:07:37 1996 Bob Glickstein + + * configure.in: Bump version number to 1.1. + + * Makefile.am: + Add `stow' to the list of clean targets. Don't redirect output + directly into a make target. + + * AUTHORS, README: + Use as the contact address. + + * TODO: New file. + + * stow.in: + Refer to "Gnu Stow" in a few places. Use + as the contact address. Handle long and short options. Handle + `version' and `help' options. Refer to "packages," not + "collections," for consistency with the manual. + + * stow.texi: + Refer to "Gnu Stow" in a few places. Use + as the contact address. Add sections on Reporting bugs and Known + bugs. Create a master menu. Minor rewording. Remove the period + from a node name. + + * TODO, THANKS: New files. + +Mon Jun 10 14:44:13 1996 Bob Glickstein + + * NEWS: Create NEWS file for release. 1.0 now ready. + + * stow.texi: Big revisions in preparation for release. + +Sun Jun 9 15:47:19 1996 Bob Glickstein + + * stow.in: Enhance argument parsing, losing Perl 4 support in the + process. + (later) Perl 4 support restored. + +Fri Jun 7 12:13:33 1996 Bob Glickstein + + * Created stow, formerly "depot." diff --git a/.local/share/doc/stow/ChangeLog.OLD b/.local/share/doc/stow/ChangeLog.OLD new file mode 100644 index 0000000..ba07eb7 --- /dev/null +++ b/.local/share/doc/stow/ChangeLog.OLD @@ -0,0 +1,232 @@ +Thu Jan 31 2008 Kahlil Hodgson + + * stow.texi: Austin Wood and Chris Hoobin clean this up for version 2. + + * texi2man: new script by Austin and Chris to generate a man page from the + texinfo file. + + +Sun Nov 25 19:31:32 2007 Kahlil Hodgson + * all: Version 2.0.1 + + * AUTHORS: added Kahlil Hodgson as a new author and current maintainer. + + * stow.in: major rewrite to produce version 2.0.1 see NEWS for details + + * t/: added test suite and support code + + * configure.in: renamed to configure.ac as per autotools recommendation. + + * configure.ac: + Use AC_INT rather than obsolete AM_INTI_MAKEFILE usage. + Remove redundant VERSION and PACKAGE setttings + Remove redundant AC_ARG_PROGRAM + Use AM_INIT_AUTOMAKE([-Wall -Werror]) because we are pedantic. + Add AC_PREREQ([2.6.1]) + + * Makefile.am, configure.ac: + Use explicit rewrite in Makefile.am, rather than AC_CONFIG_FILES(stow.in), + as per autotools recommendation. + + * Makefile.am: + Add TESTS and TEST_ENVIRONMENT for files in t/ + Use dist_man_MANS instead of EXTRA_DIST for man page + + * INSTALL: update to reflect autotools modernization. + + * NEWS: update to describe cahnges in Version 2.0.1. + + * README: update to point to the right websites and email addresses. + + * THANKS: + Add Emil Mikulc who's ideas largely inspired Version 2 and + and Geoffrey Giesemann who did some initial testing and found some + important bugs. + + * TODO: remove tasks that where implemented in Version 2 + + * stow.texi: update documentation to reflect Version 2 changes. + + * stow.8: update to reflect Version 2 changes. + +Sat Jan 26 16:15:21 2002 Guillaume Morin + + * stow.in: if $ENV{'STOW_DIR'} is set, this becomes the default + Stow directory. + +Sun Jan 06 12:18:50 2002 Guillaume Morin + + * Makefile.am: use EXTRA_DIST to include manpage in distribution + +Wed Jan 02 21:33:41 2002 Guillaume Morin + + * stow.in: Stow now only warns the user if a subdirectory + is unreadable during unstowing. + +Wed Jan 02 20:58:05 2002 Guillaume Morin + + * stow.in: fixed JoinPaths so that subdirs called "0" are + correctly pushed. Thanks a lot to Gergely Nagy + who patiently helped me to chase + this bug. + +Sun Dec 30 21:58:25 2001 Guillaume Morin + + * stow.in: fixed a bug introduced by previous changes when + Target argument was relative. (thanks to Luca Filipozzi + for pointing this out) + +Sun Dec 30 18:23:25 2001 Guillaume Morin + + * stow.in: now requires Perl 5. Use POSIX getcwd instead of broken + fastcwd. Fixed bug when CommonParent is /. Stow does not remove + initially empty directories anymore. + +Sun Dec 30 18:07:51 2001 Guillaume Morin + + * configure.in: automake fixes (fp_ -> AC, +AC_INIT_AUTOMAKE) + +Fri Oct 11 22:09:45 1996 Bob Glickstein + + * stow.html, configure.in: Version 1.3.2. + + * README, stow.texi: Correct the URL again. + +Fri Oct 11 18:20:42 1996 Bob Glickstein + + * configure.in: Version 1.3.1. + + * stow.html: Update Stow manual URL. Mention version 1.3.1. + + * README: Update Stow URL. + + * Makefile.am: stow-manual.html -> manual.html. + + * stow.texi: + Add a reference to the Stow home page on the GNU web server. Change + several occurrences of "which" to "that" for grammatical superiority. + +Wed Oct 9 00:34:07 1996 Bob Glickstein + + * Makefile.am: + Add maintainer-only rules for stow-manual.html and stow-manual.texi. + +Wed Oct 9 00:32:31 1996 Bob Glickstein + + * README: Refer to the new location for the Stow home page. + + * stow.html: Make it right for the GNU web server. + +Tue Oct 8 21:54:09 1996 Bob Glickstein + + * stow.texi: Document --restow + + * stow.in: Add --restow (-R) option + + * configure.in: Add "perl4" to search for Perl binary. + Bump version number to 1.3. + +Mon Jun 24 23:23:03 1996 Bob Glickstein + + * stow.texi: Delete trailing whitespace. + +Fri Jun 21 19:44:26 1996 Bob Glickstein + + * Makefile.am: + Don't explicitly mention version.texi. Automake now does it + automagically, by noticing the `@include version.texi' in + stow.texi. Awesome. + + * stow.texi: + Use @include instead of @input. This is more Texinfoid, plus + allows Automake to automatically deduce the need for + version.texi. + + * stow.in: + Elide trailing slashes from package names, then complain if + package names have slashes in them. + +Tue Jun 18 23:19:04 1996 Bob Glickstein + + * README: Call it "Gnu Stow". + +Tue Jun 18 22:15:45 1996 Bob Glickstein + + * configure.in: + Bump version number to 1.2. + + Look for Perl under the names `perl' and `perl5'. If not found, + print a warning. + + * stow.texi: + Add a section about bootstrapping. Add text about hacking Gnu + Make output. + + * INSTALL: + Describe what happens when Perl isn't found during `configure'. + +Mon Jun 17 19:43:25 1996 Bob Glickstein + + * THANKS: Thank Fritz. + +Fri Jun 14 19:18:50 1996 Bob Glickstein + + * AUTHORS: Credit John Bazik and Gord Matzigkeit. + + * stow.texi: Remove a "known bug" -- the pwd dependency is gone. + + * stow.in: + Use fastcwd, from fastcwd.pl (which is GPL'd), to remove + dependency on an external pwd binary. Suggested by Gord + Matzigkeit. + + * stow.in: Add a missing comma. + +Thu Jun 13 21:52:10 1996 Bob Glickstein + + * stow.in: + Change three occurrences of `my' to `local' for Perl 4 + compatibility. + +Thu Jun 13 18:07:37 1996 Bob Glickstein + + * configure.in: Bump version number to 1.1. + + * Makefile.am: + Add `stow' to the list of clean targets. Don't redirect output + directly into a make target. + + * AUTHORS, README: + Use as the contact address. + + * TODO: New file. + + * stow.in: + Refer to "Gnu Stow" in a few places. Use + as the contact address. Handle long and short options. Handle + `version' and `help' options. Refer to "packages," not + "collections," for consistency with the manual. + + * stow.texi: + Refer to "Gnu Stow" in a few places. Use + as the contact address. Add sections on Reporting bugs and Known + bugs. Create a master menu. Minor rewording. Remove the period + from a node name. + + * TODO, THANKS: New files. + +Mon Jun 10 14:44:13 1996 Bob Glickstein + + * NEWS: Create NEWS file for release. 1.0 now ready. + + * stow.texi: Big revisions in preparation for release. + +Sun Jun 9 15:47:19 1996 Bob Glickstein + + * stow.in: Enhance argument parsing, losing Perl 4 support in the + process. + (later) Perl 4 support restored. + +Fri Jun 7 12:13:33 1996 Bob Glickstein + + * Created stow, formerly "depot." diff --git a/.local/share/doc/stow/README b/.local/share/doc/stow/README new file mode 100644 index 0000000..d8df705 --- /dev/null +++ b/.local/share/doc/stow/README @@ -0,0 +1,53 @@ +README for GNU Stow +=================== + +This is GNU Stow, a symlink farm manager program which takes distinct +packages of software and/or data located in separate directories on +the filesystem, and makes them appear to be installed in the same +place. For example, /usr/local/bin could contain symlinks to files +within /usr/local/stow/emacs/bin, /usr/local/stow/perl/bin etc., and +likewise recursively for any other subdirectories such as .../share, +.../man, and so on. + +This is particularly useful for keeping track of system-wide and +per-user installations of software built from source, but can also +facilitate a more controlled approach to management of configuration +files in the user's home directory, especially when coupled with +version control systems. + +Stow is implemented as a combination of a Perl script providing a CLI +interface, and a backend Perl module which does most of the work. + +You can get the latest information about Stow from the home page: + + http://www.gnu.org/software/stow/ + +License +------- + +Stow is free software, licensed under the GNU General Public License, +which can be found in the file COPYING. + +Installation +------------ + +See INSTALL for installation instructions. + +Feedback +-------- + +Please do send comments, questions, and constructive criticism. The +mailing lists and any other communication channels are detailed on the +above home page. + +Brief history +------------- + +Stow was inspired by Carnegie Mellon's "Depot" program, but is +substantially simpler. Whereas Depot requires database files to keep +things in sync, Stow stores no extra state between runs, so there's no +danger (as there is in Depot) of mangling directories when file +hierarchies don't match the database. Also unlike Depot, Stow will +never delete any files, directories, or links that appear in a Stow +directory (e.g., /usr/local/stow/emacs), so it's always possible to +rebuild the target tree (e.g., /usr/local). diff --git a/.local/share/doc/stow/manual-single.html b/.local/share/doc/stow/manual-single.html new file mode 100644 index 0000000..6f112cc --- /dev/null +++ b/.local/share/doc/stow/manual-single.html @@ -0,0 +1,2534 @@ + + + + + +Stow + + + + + + + + + + + + + + + + + + + + +
[Top][Contents][Index][ ? ]
+ +

Stow

+ +

This manual describes GNU Stow 2.2.2 (9 November 2015), a +program for managing the installation of software packages. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

1. Introduction

+ +

Stow is a tool for managing the installation of multiple software +packages in the same run-time directory tree. One historical difficulty +of this task has been the need to administer, upgrade, install, and +remove files in independent packages without confusing them with other +files sharing the same file system space. For instance, it is common to +install Perl and Emacs in ‘/usr/local’. When one does so, one +winds up with the following files(1) in ‘/usr/local/man/man1’: +

+
 
a2p.1
+ctags.1
+emacs.1
+etags.1
+h2ph.1
+perl.1
+s2p.1
+
+ +

Now suppose it’s time to uninstall Perl. Which man pages +get removed? Obviously ‘perl.1’ is one of them, but it should not +be the administrator’s responsibility to memorize the ownership of +individual files by separate packages. +

+

The approach used by Stow is to install each package into its own +tree, then use symbolic links to make it appear as though the files are +installed in the common tree. Administration can be performed in the +package’s private tree in isolation from clutter from other packages. +Stow can then be used to update the symbolic links. The structure +of each private tree should reflect the desired structure in the common +tree; i.e. (in the typical case) there should be a ‘bin’ directory +containing executables, a ‘man/man1’ directory containing section 1 +man pages, and so on. +

+

Stow was inspired by Carnegie Mellon’s Depot program, but is +substantially simpler and safer. Whereas Depot required database files +to keep things in sync, Stow stores no extra state between runs, so +there’s no danger (as there was in Depot) of mangling directories when +file hierarchies don’t match the database. Also unlike Depot, Stow will +never delete any files, directories, or links that appear in a Stow +directory (e.g., ‘/usr/local/stow/emacs’), so it’s always possible +to rebuild the target tree (e.g., ‘/usr/local’). +

+

For information about the latest version of Stow, you can refer to +http://www.gnu.org/software/stow/. +

+ +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

2. Terminology

+ + +

A package is a related collection of files and directories that +you wish to administer as a unit — e.g., Perl or Emacs — and that needs +to be installed in a particular directory structure — e.g., with +‘bin’, ‘lib’, and ‘man’ subdirectories. +

+ +

A target directory is the root of a tree in which one or more +packages wish to appear to be installed. A common, but by no +means the only such location is ‘/usr/local’. The examples in this +manual will use ‘/usr/local’ as the target directory. +

+ +

A stow directory is the root of a tree containing separate +packages in private subtrees. When Stow runs, it uses the current +directory as the default stow directory. The examples in this manual +will use ‘/usr/local/stow’ as the stow directory, so that +individual packages will be, for example, ‘/usr/local/stow/perl’ +and ‘/usr/local/stow/emacs’. +

+ +

An installation image is the layout of files and directories +required by a package, relative to the target directory. Thus, the +installation image for Perl includes: a ‘bin’ directory containing +‘perl’ and ‘a2p’ (among others); an ‘info’ directory +containing Texinfo documentation; a ‘lib/perl’ directory containing +Perl libraries; and a ‘man/man1’ directory containing man pages. +

+ + +

A package directory is the root of a tree containing the +installation image for a particular package. Each package directory +must reside in a stow directory — e.g., the package directory +‘/usr/local/stow/perl’ must reside in the stow directory +‘/usr/local/stow’. The name of a package is the name of its +directory within the stow directory — e.g., ‘perl’. +

+

Thus, the Perl executable might reside in +‘/usr/local/stow/perl/bin/perl’, where ‘/usr/local’ is the +target directory, ‘/usr/local/stow’ is the stow directory, +‘/usr/local/stow/perl’ is the package directory, and +‘bin/perl’ within is part of the installation image. +

+ + + +

A symlink is a symbolic link. A symlink can be relative or +absolute. An absolute symlink names a full path; that is, one +starting from ‘/’. A relative symlink names a relative path; that +is, one not starting from ‘/’. The target of a relative symlink is +computed starting from the symlink’s own directory. Stow only +creates relative symlinks. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

3. Invoking Stow

+ +

The syntax of the stow command is: +

+
 
stow [options] [action flag] package …
+
+ +

Each package is the name of a package (e.g., ‘perl’) in the stow +directory that we wish to install into (or delete from) the target directory. +The default action is to install the given packages, although alternate actions +may be specified by preceding the package name(s) with an action flag. +

+

The following options are supported: +

+
+
-d dir
+
--dir=dir
+

Set the stow directory to dir. Defaults to the value of the environment +variable STOW_DIR if set, or the current directory otherwise. +

+
+
-t dir
+
--target=dir
+

Set the target directory to dir instead of the parent of the stow +directory. Defaults to the parent of the stow directory, so it is typical to +execute stow from the directory ‘/usr/local/stow’. +

+
+
--ignore=regexp
+

This (repeatable) option lets you suppress acting on files that match the +given perl regular expression. For example, using the options +

+
 
--ignore='*.orig' --ignore='*.dist'
+
+ +

will cause stow to ignore files ending in ‘.orig’ or ‘.dist’. +

+

Note that the regular expression is anchored to the end of the filename, +because this is what you will want to do most of the time. +

+

Also note that by default Stow automatically ignores a “sensible” +built-in list of files and directories such as ‘CVS’, editor +backup files, and so on. See section Ignore Lists, for more details. +

+
+
--defer=regexp
+

This (repeatable) option avoids stowing a file matching the given +regular expression, if that file is already stowed by another package. +This is effectively the opposite of ‘--override’. +

+

(N.B. the name ‘--defer’ was chosen in the sense that the package +currently being stowed is treated with lower precedence than any +already installed package, not in the sense that the operation is +being postponed to be run at a later point in time; do not confuse +this nomenclature with the wording used in Deferred Operation.) +

+

For example, the following options +

+
 
--defer=man --defer=info
+
+ +

will cause stow to skip over pre-existing man and info pages. +

+

Equivalently, you could use ‘--defer='man|info'’ since the +argument is just a Perl regex. +

+

Note that the regular expression is anchored to the beginning of the path +relative to the target directory, because this is what you will want to do most +of the time. +

+
+
--override=regexp
+

This (repeatable) option forces any file matching the regular expression to be +stowed, even if the file is already stowed to another package. For example, +the following options +

+
 
--override=man --override=info
+
+ +

will permit stow to overwrite links that point to pre-existing man and info +pages that are owned by stow and would otherwise cause a conflict. +

+

The regular expression is anchored to the beginning of the path relative to +the target directory, because this is what you will want to do most of the time. +

+
+
--no-folding
+
+

This disables any further tree folding or tree refolding. +If a new subdirectory is encountered whilst stowing a new package, the +subdirectory is created within the target, and its contents are +symlinked, rather than just creating a symlink for the directory. If +removal of symlinks whilst unstowing a package causes a subtree to be +foldable (i.e. only containing symlinks to a single package), that +subtree will not be removed and replaced with a symlink. +

+ +
+
--adopt
+

Warning! This behaviour is specifically intended to alter the +contents of your stow directory. If you do not want that, this option +is not for you. +

+

When stowing, if a target is encountered which already exists but is a +plain file (and hence not owned by any existing stow package), then +normally Stow will register this as a conflict and refuse to proceed. +This option changes that behaviour so that the file is moved to the +same relative place within the package’s installation image within the +stow directory, and then stowing proceeds as before. So effectively, +the file becomes adopted by the stow package, without its contents +changing. +

+

This is particularly useful when the stow package is under the control +of a version control system, because it allows files in the target +tree, with potentially different contents to the equivalent versions +in the stow package’s installation image, to be adopted into the +package, then compared by running something like ‘git diff ...’ +inside the stow package, and finally either kept (e.g. via ‘git +commit ...’) or discarded (‘git checkout HEAD ...’). +

+ + +
+
-n
+
--no
+
--simulate
+

Do not perform any operations that modify the file system; in combination with +‘-v’ can be used to merely show what would happen. +

+ +
+
-v
+
--verbose[=n]
+

Send verbose output to standard error describing what Stow is +doing. Verbosity levels are 0, 1, 2, and 3; 0 is the default. Using +‘-v’ or ‘--verbose’ increases the verbosity by one; using +‘--verbose=n’ sets it to n. +

+
+
-p
+
--compat
+

Scan the whole target tree when unstowing. By default, only +directories specified in the installation image are scanned +during an unstow operation. Scanning the whole tree can be +prohibitive if your target tree is very large. This option restores +the legacy behaviour; however, the ‘--badlinks’ option to the +chkstow utility may be a better way of ensuring that your +installation does not have any dangling symlinks (see section Target Maintenance). +

+
+
-V
+
--version
+

Show Stow version number, and exit. +

+
+
-h
+
--help
+

Show Stow command syntax, and exit. +

+
+ +

The following action flags are supported: +

+
+
-D
+
--delete
+

Delete (unstow) the package name(s) that follow this option from the target +directory. This option may be repeated any number of times. +

+
+
-R
+
--restow
+

Restow (first unstow, then stow again) the package names that follow this +option. This is useful for pruning obsolete symlinks from the target tree +after updating the software in a package. This option may be repeated any +number of times. +

+
+
-S
+
--stow
+

explictly stow the package name(s) that follow this option. May be +omitted if you are not using the ‘-D’ or ‘-R’ options in the +same invocation. See section Mixing Operations, for details of when you +might like to use this feature. This option may be repeated any number +of times. +

+
+ + +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

4. Ignore Lists

+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

4.1 Motivation For Ignore Lists

+ +

In many situations, there will exist files under the package +directories which it would be undesirable to stow into the target +directory. For example, files related version control such as +‘.gitignore’, ‘CVS’, ‘*,v’ (RCS files) should typically +not have symlinks from the target tree pointing to them. Also there +may be files or directories relating to the build of the package which +are not needed at run-time. +

+

In these cases, it can be rather cumbersome to specify a +‘--ignore’ parameter for each file or directory to be ignored. +This could be worked around by ensuring the existence of +‘~/.stowrc’ containing multiple ‘--ignore’ lines, or if a +different set of files/directories should be ignored depending on +which stow package is involved, a ‘.stowrc’ file for each stow +package, but this would require the user to ensure that they were in +the correct directory before invoking stow, which would be tedious and +error-prone. Furthermore, since Stow shifts parameters from +‘.stowrc’ onto ARGV at run-time, it could clutter up the process +table with excessively long parameter lists, or even worse, exceed the +operating system’s limit for process arguments. +

+ +

Therefore in addition to ‘--ignore’ parameters, Stow provides a +way to specify lists of files and directories to ignore. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

4.2 Types And Syntax Of Ignore Lists

+ +

If you put Perl regular expressions, one per line, in a +‘.stow-local-ignore’ file within any top level package directory, +in which case any file or directory within that package matching any +of these regular expressions will be ignored. In the absence of this +package-specific ignore list, Stow will instead use the contents of +‘~/.stow-global-ignore’, if it exists. If neither the +package-local or global ignore list exist, Stow will use its own +built-in default ignore list, which serves as a useful example of the +format of these ignore list files: +

+
 
# Comments and blank lines are allowed.
+
+RCS
+.+,v
+
+CVS
+\.\#.+       # CVS conflict files / emacs lock files
+\.cvsignore
+
+\.svn
+_darcs
+\.hg
+
+\.git
+\.gitignore
+
+.+~          # emacs backup files
+\#.*\#       # emacs autosave files
+
+^/README.*
+^/LICENSE.*
+^/COPYING
+
+ +

Stow first iterates through the chosen ignore list (built-in, global, +or package-local) as per above, stripping out comments (if you want to +include the ‘#’ symbol in a regular expression, escape it with a +blackslash) and blank lines, placing each regular expressions into one +of two sets depending on whether it contains the ‘/’ forward +slash symbol. +

+

Then in order to determine whether a file or directory should be +ignored: +

+
    +
  1. +Stow calculates its path relative to the top-level package directory, +prefixing that with ‘/’. If any of the regular expressions +containing a ‘/exactly(2) match +a subpath(3) of this relative path, then the file or +directory will be ignored. + +
  2. +If none of the regular expressions containing a ‘/’ match in the +manner described above, Stow checks whether the +basename(4) of the file or directory matches +exactly against the remaining regular expressions which do not +contain a ‘/’, and if so, ignores the file or directory. + +
  3. +Otherwise, the file or directory is not ignored. +
+ + +

For example, if a file ‘bazqux’ is in the ‘foo/bar’ +subdirectory of the package directory, Stow would use +‘/foo/bar/bazqux’ as the text for matching against regular +expressions which contain ‘/’, and ‘bazqux’ as the text for +matching against regular expressions which don’t contain ‘/’. +Then regular expressions ‘bazqux’, ‘baz.*’, ‘.*qux’, +‘bar/.*x’, and ‘^/foo/.*qux’ would all match (causing the +file to be ignored), whereas ‘bar’, ‘baz’, ‘qux’, and +‘o/bar/b’ would not (although ‘bar’ would cause its parent +directory to be ignored and prevent Stow from recursing into that +anyway, in which case the file ‘bazqux’ would not even be +considered for stowing). +

+

As a special exception to the above algorithm, any +‘.stow-local-ignore’ present in the top-level package directory +is always ignored, regardless of the contents of any ignore +list, because this file serves no purpose outside the stow directory. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

4.3 Justification For Yet Another Set Of Ignore Files

+ +

The reader may note that this format is very similar to existing +ignore list file formats, such as those for cvs, git, +rsync etc., and wonder if another set of ignore lists is +justified. However there are good reasons why Stow does not simply +check for the presence of say, ‘.cvsignore’, and use that if it +exists. Firstly, there is no guarantee that a stow package would +contain any version control meta-data, or permit introducing this if +it didn’t already exist. +

+

Secondly even if it did, version control system ignore lists generally +reflect build-time ignores rather than install-time, and +there may be some intermediate or temporary files on those ignore +lists generated during development or at build-time which it would be +inappropriate to stow, even though many files generated at build-time +(binaries, libraries, documentation etc.) certainly do need to be +stowed. Similarly, if a file is not in the version control +system’s ignore list, there is no way of knowing whether the file is +intended for end use, let alone whether the version control system is +tracking it or not. +

+

Therefore it seems clear that ignore lists provided by version control +systems do not provide sufficient information for Stow to determine +which files and directories to stow, and so it makes sense for Stow to +support independent ignore lists. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

5. Installing Packages

+ + +

The default action of Stow is to install a package. This means creating +symlinks in the target tree that point into the package tree. Stow +attempts to do this with as few symlinks as possible; in other words, if +Stow can create a single symlink that points to an entire subtree within +the package tree, it will choose to do that rather than create a +directory in the target tree and populate it with symlinks. +

+

+


+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

5.1 Tree folding

+ + + +

For example, suppose that no packages have yet been installed in +‘/usr/local’; it’s completely empty (except for the ‘stow’ +subdirectory, of course). Now suppose the Perl package is installed. +Recall that it includes the following directories in its installation +image: ‘bin’; ‘info’; ‘lib/perl’; ‘man/man1’. +Rather than creating the directory ‘/usr/local/bin’ and populating +it with symlinks to ‘../stow/perl/bin/perl’ and +‘../stow/perl/bin/a2p’ (and so on), Stow will create a +single symlink, ‘/usr/local/bin’, which points to +‘stow/perl/bin’. In this way, it still works to refer to +‘/usr/local/bin/perl’ and ‘/usr/local/bin/a2p’, and fewer +symlinks have been created. This is called tree folding, since an +entire subtree is “folded” into a single symlink. +

+

To complete this example, Stow will also create the symlink +‘/usr/local/info’ pointing to ‘stow/perl/info’; the symlink +‘/usr/local/lib’ pointing to ‘stow/perl/lib’; and the symlink +‘/usr/local/man’ pointing to ‘stow/perl/man’. +

+

Now suppose that instead of installing the Perl package into an empty +target tree, the target tree is not empty to begin with. Instead, it +contains several files and directories installed under a different +system-administration philosophy. In particular, ‘/usr/local/bin’ +already exists and is a directory, as are ‘/usr/local/lib’ and +‘/usr/local/man/man1’. In this case, Stow will descend into +‘/usr/local/bin’ and create symlinks to +‘../stow/perl/bin/perl’ and ‘../stow/perl/bin/a2p’ (etc.), +and it will descend into ‘/usr/local/lib’ and create the +tree-folding symlink ‘perl’ pointing to +‘../stow/perl/lib/perl’, and so on. As a rule, Stow only +descends as far as necessary into the target tree when it can create a +tree-folding symlink. However, this behaviour can be changed via +the ‘--no-folding’ option; see section Invoking Stow. +

+

+


+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

5.2 Tree unfolding

+ + + + +

The time often comes when a tree-folding symlink has to be undone +because another package uses one or more of the folded subdirectories in +its installation image. This operation is called splitting open or +unfolding a folded tree. It involves removing the original symlink from +the target tree, creating a true directory in its place, and then populating the +new directory with symlinks to the newly-installed package and to +the old package that used the old symlink. For example, suppose that +after installing Perl into an empty ‘/usr/local’, we wish to +install Emacs. Emacs’s installation image includes a ‘bin’ +directory containing the ‘emacs’ and ‘etags’ executables, +among others. Stow must make these files appear to be installed +in ‘/usr/local/bin’, but presently ‘/usr/local/bin’ is a +symlink to ‘stow/perl/bin’. Stow therefore takes the +following steps: the symlink ‘/usr/local/bin’ is deleted; the +directory ‘/usr/local/bin’ is created; links are made from +‘/usr/local/bin’ to ‘../stow/emacs/bin/emacs’ and +‘../stow/emacs/bin/etags’; and links are made from +‘/usr/local/bin’ to ‘../stow/perl/bin/perl’ and +‘../stow/perl/bin/a2p’. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

5.3 Ownership

+ +

When splitting open a folded tree, Stow makes sure that the +symlink it is about to remove points inside a valid package in the +current stow directory. Stow will never delete anything +that it doesn’t own. Stow “owns” everything living in the +target tree that points into a package in the stow directory. Anything +Stow owns, it can recompute if lost: symlinks that point into a package in +the stow directory, or directories that only contain symlinks that stow +“owns”. Note that by this definition, Stow doesn’t “own” anything +in the stow directory or in any of the packages. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

5.4 Conflicts during installation

+ + +

If Stow needs to create a directory or a symlink in the target +tree and it cannot because that name is already in use and is not owned +by Stow, then a conflict has arisen. See section Conflicts. +

+ +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

6. Deleting Packages

+ + +

When the ‘-D’ option is given, the action of Stow is to +delete a package from the target tree. Note that Stow will not +delete anything it doesn’t “own”. Deleting a package does not +mean removing it from the stow directory or discarding the package +tree. +

+

To delete a package, Stow recursively scans the target tree, skipping over any +directory that is not included in the installation image.(5) +For example, if the target directory is ‘/usr/local’ and the +installation image for the package being deleted has only a ‘bin’ +directory and a ‘man’ directory at the top level, then we only scan +‘/usr/local/bin’ and ‘/usr/local/bin/man’, and not +‘/usr/local/lib’ or ‘/usr/local/share’, or for that matter +‘/usr/local/stow’. Any symlink it finds that points into the package +being deleted is removed. Any directory that contained only symlinks to the +package being deleted is removed. +

+

+


+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

6.1 Refolding “foldable” trees.

+ + + +

After removing symlinks and empty subdirectories, any directory that +contains only symlinks to a single other package is considered to be a +previously “folded” tree that was “split open.” Stow will refold +the tree by removing the symlinks to the surviving package, removing +the directory, then linking the directory back to the surviving +package. However, this behaviour can be prevented via the +‘--no-folding’ option; see section Invoking Stow. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

7. Conflicts

+ + +

If, during installation, a file or symlink exists in the target tree and +has the same name as something Stow needs to create, and if the +existing name is not a folded tree that can be split open, then a +conflict has arisen. A conflict also occurs if a directory exists +where Stow needs to place a symlink to a non-directory. On the +other hand, if the existing name is merely a symlink that already points +where Stow needs it to, then no conflict has occurred. (Thus it +is harmless to install a package that has already been installed.) +

+

For complex packages, scanning the stow and target trees in tandem, +and deciding whether to make directories or links, split-open or fold +directories, can actually take a long time (a number of seconds). +Moreover, an accurate analysis of potential conflicts requires us to +take into account all of these operations. +

+

+


+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

7.1 Deferred Operation

+ + +

Since version 2.0, Stow now adopts a two-phase algorithm, first +scanning for any potential conflicts before any stowing or unstowing +operations are performed. If any conflicts are found, they are +displayed and then Stow terminates without making any modifications to +the filesystem. This means that there is much less risk of a package +being partially stowed or unstowed due to conflicts. +

+

Prior to version 2.0, if a conflict was discovered, the stow or unstow +operation could be aborted mid-flow, leaving the target tree in an +inconsistent state. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

8. Mixing Operations

+ + +

Since version 2.0, multiple distinct actions can be specified in a single +invocation of GNU Stow. For example, to update an installation of Emacs from +version 21.3 to 21.4a you can now do the following: +

+
 
stow -D emacs-21.3 -S emacs-21.4a
+
+ +

which will replace emacs-21.3 with emacs-21.4a using a single invocation. +

+ +

This is much faster and cleaner than performing two separate +invocations of stow, because redundant folding/unfolding operations +can be factored out. In addition, all the operations are calculated +and merged before being executed (see Deferred Operation), so the +amount of of time in which GNU Emacs is unavailable is minimised. +

+

You can mix and match any number of actions, for example, +

+
 
stow -S pkg1 pkg2 -D pkg3 pkg4 -S pkg5 -R pkg6
+
+ +

will unstow pkg3, pkg4 and pkg6, then stow pkg1, pkg2, pkg5 and pkg6. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

9. Multiple Stow Directories

+ +

If there are two or more system administrators who wish to maintain +software separately, or if there is any other reason to want two or more +stow directories, it can be done by creating a file named ‘.stow’ +in each stow directory. The presence of ‘/usr/local/foo/.stow’ +informs Stow that, though ‘foo’ is not the current stow +directory, even if it is a subdirectory of the target directory, +nevertheless it is a stow directory and as such Stow +doesn’t “own” anything in it (see section Installing Packages). This will +protect the contents of ‘foo’ from a ‘stow -D’, for instance. +

+ +

When multiple stow directories share a target tree, if a tree-folding +symlink is encountered and needs to be split open during an +installation, as long as the top-level stow directory into which the +existing symlink points contains ‘.stow’, Stow knows how to split +open the tree in the correct manner. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

10. Target Maintenance

+ + +

From time to time you will need to clean up your target tree. Since +version 2, Stow provides a new utility chkstow to help with +this. It includes three operational modes which performs checks that +would generally be too expensive to be performed during normal stow +execution. +

+

The syntax of the chkstow command is: +

+
 
chkstow [options]
+
+ +

The following options are supported: +

+
+
-t dir
+
--target=dir
+

Set the target directory to dir instead of the parent of the stow +directory. Defaults to the parent of the stow directory, so it is typical to +execute stow from the directory ‘/usr/local/stow’. +

+
+
-b
+
--badlinks
+

Checks target directory for bogus symbolic links. That is, links that point to +non-existent files. +

+
+
-a
+
--aliens
+

Checks for files in the target directory that are not symbolic links. The +target directory should be managed by stow alone, except for directories that +contain a ‘.stow’ file. +

+
+
-l
+
--list
+

Will display the target package for every symbolic link in the stow target +directory. +

+
+
+ +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

11. Resource Files

+ + + +

Default command line options may be set in ‘.stowrc’ (current directory) or +‘~/.stowrc’ (home directory). These are parsed in that order, and effectively +prepended to you command line. This feature can be used for some interesting +effects. +

+

For example, suppose your site uses more than one stow directory, perhaps in +order to share around responsibilities with a number of systems +administrators. One of the administrators might have the following in their +‘~/.stowrc’ file: +

+
 
--dir=/usr/local/stow2
+--target=/usr/local
+--ignore='~'
+--ignore='^CVS'
+
+ +

so that the stow command will default to operating on the +‘/usr/local/stow2’ directory, with ‘/usr/local’ as the +target, and ignoring vi backup files and CVS directories. +

+

If you had a stow directory ‘/usr/local/stow/perl-extras’ that +was only used for Perl modules, then you might place the following in +‘/usr/local/stow/perl-extras/.stowrc’: +

+
 
--dir=/usr/local/stow/perl-extras
+--target=/usr/local
+--override=bin
+--override=man
+--ignore='perllocal\.pod'
+--ignore='\.packlist'
+--ignore='\.bs'
+
+ +

so that when you are in the ‘/usr/local/stow/perl-extras’ +directory, stow will regard any subdirectories as stow +packages, with ‘/usr/local’ as the target (rather than the +immediate parent directory ‘/usr/local/stow’), overriding any +pre-existing links to bin files or man pages, and ignoring some cruft +that gets installed by default. +

+ +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

12. Compile-time vs Install-time

+ +

Software whose installation is managed with Stow needs to be installed +in one place (the package directory, e.g. ‘/usr/local/stow/perl’) +but needs to appear to run in another place (the target tree, e.g., +‘/usr/local’). Why is this important? What’s wrong with Perl, for +instance, looking for its files in ‘/usr/local/stow/perl’ instead +of in ‘/usr/local’? +

+

The answer is that there may be another package, e.g., +‘/usr/local/stow/perl-extras’, stowed under ‘/usr/local’. If +Perl is configured to find its files in ‘/usr/local/stow/perl’, it +will never find the extra files in the ‘perl-extras’ package, even +though they’re intended to be found by Perl. On the other hand, if Perl +looks for its files in ‘/usr/local’, then it will find the +intermingled Perl and ‘perl-extras’ files. +

+

This means that when you compile a package, you must tell it the +location of the run-time, or target tree; but when you install it, you +must place it in the stow tree. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

12.1 Advice on changing compilation and installation parameters

+

Some software packages allow you to specify, at compile-time, separate +locations for installation and for run-time. Perl is one such package; +see Perl and Perl 5 Modules. Others allow you to compile the +package, then give a different destination in the ‘make install’ +step without causing the binaries or other files to get rebuilt. Most +GNU software falls into this category; Emacs is a notable exception. +See section GNU Emacs, and Other FSF Software. +

+

Still other software packages cannot abide the idea of separate +installation and run-time locations at all. If you try to ‘make +install prefix=/usr/local/stow/foo’, then first the whole package +will be recompiled to hardwire the ‘/usr/local/stow/foo’ +path. With these packages, it is best to compile normally, then run +‘make -n install’, which should report all the steps needed to +install the just-built software. Place this output into a file, edit +the commands in the file to remove recompilation steps and to reflect +the Stow-based installation location, and execute the edited file as a +shell script in place of ‘make install’. Be sure to execute the +script using the same shell that ‘make install’ would have used. +

+

(If you use GNU Make and a shell [such as GNU bash] that understands +pushd and popd, you can do the following: +

+
    +
  1. +Replace all lines matching ‘make[n]: Entering directory +dir’ with ‘pushd dir’. +
  2. +Replace all lines matching ‘make[n]: Leaving directory +dir’ with ‘popd’. +
  3. +Delete all lines matching ‘make[n]: Nothing to be done for +rule’. +
+ +

Then find other lines in the output containing cd or make +commands and rewrite or delete them. In particular, you should be able +to delete sections of the script that resemble this: +

+
 
for i in dir_1 dir_2 ; do \
+  (cd $i; make args ) \
+done
+
+ +

Note, that’s “should be able to,” not “can.” Be sure to modulate +these guidelines with plenty of your own intelligence. +

+

The details of stowing some specific packages are described in the +following sections. +

+ + + + + + + +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

12.2 GNU Emacs

+ +

Although the Free Software Foundation has many enlightened practices +regarding Makefiles and software installation (see see section Other FSF Software), Emacs, its flagship program, doesn’t quite follow the +rules. In particular, most GNU software allows you to write: +

+
 
make
+make install prefix=/usr/local/stow/package
+
+ +

If you try this with Emacs, then the new value for prefix in the +‘make install’ step will cause some files to get recompiled with +the new value of prefix wired into them. In Emacs 19.23 and +later,(6) +the way to work around this problem is: +

+
 
make
+make install-arch-dep install-arch-indep prefix=/usr/local/stow/emacs
+
+ +

In 19.22 and some prior versions of Emacs, the workaround was: +

+
 
make
+make do-install prefix=/usr/local/stow/emacs
+
+ +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

12.3 Other FSF Software

+ +

The Free Software Foundation, the organization behind the GNU project, +has been unifying the build procedure for its tools for some time. +Thanks to its tools ‘autoconf’ and ‘automake’, most packages +now respond well to these simple steps, with no other intervention +necessary: +

+
 
./configure options
+make
+make install prefix=/usr/local/stow/package
+
+ +

Hopefully, these tools can evolve to be aware of Stow-managed packages, +such that providing an option to ‘configure’ can allow ‘make’ +and ‘make install’ steps to work correctly without needing to +“fool” the build process. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

12.4 Cygnus Software

+ +

Cygnus is a commercial supplier and supporter of GNU software. It has +also written several of its own packages, released under the terms of +the GNU General Public License; and it has taken over the maintenance of +other packages. Among the packages released by Cygnus are ‘gdb’, +‘gnats’, and ‘dejagnu’. +

+

Cygnus packages have the peculiarity that each one unpacks into a +directory tree with a generic top-level Makefile, which is set up to +compile all of Cygnus’ packages, any number of which may reside +under the top-level directory. In other words, even if you’re only +building ‘gnats’, the top-level Makefile will look for, and try to +build, ‘gdb’ and ‘dejagnu’ subdirectories, among many others. +

+

The result is that if you try ‘make -n install +prefix=/usr/local/stow/package’ at the top level of a Cygnus +package, you’ll get a bewildering amount of output. It will then be +very difficult to visually scan the output to see whether the install +will proceed correctly. Unfortunately, it’s not always clear how to +invoke an install from the subdirectory of interest. +

+

In cases like this, the best approach is to run your ‘make install +prefix=’, but be ready to interrupt it if you detect that it +is recompiling files. Usually it will work just fine; otherwise, +install manually. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

12.5 Perl and Perl 5 Modules

+ +

Perl 4.036 allows you to specify different locations for installation +and for run-time. It is the only widely-used package in this author’s +experience that allows this, though hopefully more packages will adopt +this model. +

+

Unfortunately, the authors of Perl believed that only AFS sites need +this ability. The configuration instructions for Perl 4 misleadingly +state that some occult means are used under AFS to transport files from +their installation tree to their run-time tree. In fact, that confusion +arises from the fact that Depot, Stow’s predecessor, originated at +Carnegie Mellon University, which was also the birthplace of AFS. CMU’s +need to separate install-time and run-time trees stemmed from its use of +Depot, not from AFS. +

+

The result of this confusion is that Perl 5’s configuration script +doesn’t even offer the option of separating install-time and run-time +trees unless you’re running AFS. Fortunately, after you’ve +entered all the configuration settings, Perl’s setup script gives you +the opportunity to edit those settings in a file called +‘config.sh’. When prompted, you should edit this file and replace +occurrences of +

+
 
inst/usr/local
+
+ +

with +

+
 
inst/usr/local/stow/perl
+
+ +

You can do this with the following Unix command: +

+
 
sed 's,^\(inst.*/usr/local\),\1/stow/perl,' config.sh > config.sh.new
+mv config.sh.new config.sh
+
+ +

Hopefully, the Perl authors will correct this deficiency in Perl 5’s +configuration mechanism. +

+

Perl 5 modules—i.e., extensions to Perl 5—generally conform to a set +of standards for building and installing them. The standard says that +the package comes with a top-level ‘Makefile.PL’, which is a Perl +script. When it runs, it generates a ‘Makefile’. +

+

If you followed the instructions above for editing ‘config.sh’ when +Perl was built, then when you create a ‘Makefile’ from a +‘Makefile.PL’, it will contain separate locations for run-time +(‘/usr/local’) and install-time (‘/usr/local/stow/perl’). +Thus you can do +

+
 
perl Makefile.PL
+make
+make install
+
+ +

and the files will be installed into ‘/usr/local/stow/perl’. +However, you might prefer each Perl module to be stowed separately. In +that case, you must edit the resulting Makefile, replacing +‘/usr/local/stow/perl’ with ‘/usr/local/stow/module’. +The best way to do this is: +

+
 
perl Makefile.PL
+find . -name Makefile -print | \
+  xargs perl -pi~ -e 's,^(INST.*/stow)/perl,$1/module,;'
+make
+make install
+
+ +

(The use of ‘find’ and ‘xargs’ ensures that all Makefiles in +the module’s source tree, even those in subdirectories, get edited.) A +good convention to follow is to name the stow directory for a Perl +modulecpan.module’, where ‘cpan’ stands for +Comprehensive Perl Archive Network, a collection of FTP sites that is +the source of most Perl 5 extensions. This way, it’s easy to tell at a +glance which of the subdirectories of ‘/usr/local/stow’ are Perl 5 +extensions. +

+

When you stow separate Perl 5 modules separately, you are likely to +encounter conflicts (see section Conflicts) with files named ‘.exists’ +and ‘perllocal.pod’. One way to work around this is to remove +those files before stowing the module. If you use the +‘cpan.module’ naming convention, you can simply do this: +

+
 
cd /usr/local/stow
+find cpan.* \( -name .exists -o -name perllocal.pod \) -print | \
+  xargs rm
+
+ + +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

13. Bootstrapping

+ +

Suppose you have a stow directory all set up and ready to go: +‘/usr/local/stow/perl’ contains the Perl installation, +‘/usr/local/stow/stow’ contains Stow itself, and perhaps you have +other packages waiting to be stowed. You’d like to be able to do this: +

+
 
cd /usr/local/stow
+stow -vv *
+
+ +

but stow is not yet in your PATH. Nor can you do this: +

+
 
cd /usr/local/stow
+stow/bin/stow -vv *
+
+ +

because the ‘#!’ line at the beginning of stow tries to +locate Perl (usually in ‘/usr/local/bin/perl’), and that won’t be +found. The solution you must use is: +

+
 
cd /usr/local/stow
+perl/bin/perl stow/bin/stow -vv *
+
+ +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

14. Reporting Bugs

+ +

Please send bug reports to the current maintainers by electronic +mail. The address to use is ‘<bug-stow@gnu.org>’. Please +include: +

+
    +
  • +the version number of Stow (‘stow --version’); + +
  • +the version number of Perl (‘perl -v’); + +
  • +the system information, which can often be obtained with ‘uname +-a’; + +
  • +a description of the bug; + +
  • +the precise command you gave; + +
  • +the output from the command (preferably verbose output, obtained by +adding ‘--verbose=3’ to the Stow command line). +
+ +

If you are really keen, consider developing a minimal test case and +creating a new test. See the ‘t/’ directory in the source for +lots of examples. +

+

Before reporting a bug, please read the manual carefully, especially +Known Bugs, to see whether you’re encountering +something that doesn’t need reporting. +(see section Conflicts). +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

15. Known Bugs

+ +

There are no known bugs in Stow version 2.2.2! +If you think you have found one, please see section Reporting Bugs. +

+ +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

GNU General Public License

+ +

Version 2, June 1991 +

+
 
Copyright © 1989, 1991 Free Software Foundation, Inc.
+675 Mass Ave, Cambridge, MA 02139, USA
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+
+ +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

Preamble

+ +

The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software—to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation’s software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. +

+

When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. +

+

To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. +

+

For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. +

+

We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. +

+

Also, for each author’s protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors’ reputations. +

+

Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone’s free use or not licensed at all. +

+

The precise terms and conditions for copying, distribution and +modification follow. +

+

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +

+
    +
  1. +This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The “Program”, below, +refers to any such program or work, and a “work based on the Program” +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term “modification”.) Each licensee is addressed as “you”. + +

    Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. +

    +
  2. +You may copy and distribute verbatim copies of the Program’s +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +

    You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. +

    +
  3. +You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + +
      +
    1. +You must cause the modified files to carry prominent notices +stating that you changed the files and the date of any change. + +
    2. +You must cause any work that you distribute or publish, that in +whole or in part contains or is derived from the Program or any +part thereof, to be licensed as a whole at no charge to all third +parties under the terms of this License. + +
    3. +If the modified program normally reads commands interactively +when run, you must cause it, when started running for such +interactive use in the most ordinary way, to print or display an +announcement including an appropriate copyright notice and a +notice that there is no warranty (or else, saying that you provide +a warranty) and that users may redistribute the program under +these conditions, and telling the user how to view a copy of this +License. (Exception: if the Program itself is interactive but +does not normally print such an announcement, your work based on +the Program is not required to print an announcement.) +
    + +

    These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. +

    +

    Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. +

    +

    In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. +

    +
  4. +You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + +
      +
    1. +Accompany it with the complete corresponding machine-readable +source code, which must be distributed under the terms of Sections +1 and 2 above on a medium customarily used for software interchange; or, + +
    2. +Accompany it with a written offer, valid for at least three +years, to give any third party, for a charge no more than your +cost of physically performing source distribution, a complete +machine-readable copy of the corresponding source code, to be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, + +
    3. +Accompany it with the information you received as to the offer +to distribute corresponding source code. (This alternative is +allowed only for noncommercial distribution and only if you +received the program in object code or executable form with such +an offer, in accord with Subsection b above.) +
    + +

    The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. +

    +

    If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. +

    +
  5. +You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + +
  6. +You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +
  7. +Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients’ exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + +
  8. +If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +

    If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. +

    +

    It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. +

    +

    This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. +

    +
  9. +If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + +
  10. +The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +

    Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and “any +later version”, you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. +

    +
  11. +If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +

    NO WARRANTY +

    +
  12. +BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + +
  13. +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. +
+ +

END OF TERMS AND CONDITIONS +

+ +
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

How to Apply These Terms to Your New Programs

+ +

If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. +

+

To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the “copyright” line and a pointer to where the full notice is found. +

+
 
one line to give the program's name and an idea of what it does.
+Copyright (C) 19yy  name of author
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ +

Also add information on how to contact you by electronic and paper mail. +

+

If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: +

+
 
Gnomovision version 69, Copyright (C) 19yy name of author
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'.  This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c'
+for details.
+
+ +

The hypothetical commands ‘show w’ and ‘show c’ should show +the appropriate parts of the General Public License. Of course, the +commands you use may be called something other than ‘show w’ and +‘show c’; they could even be mouse-clicks or menu items—whatever +suits your program. +

+

You should also get your employer (if you work as a programmer) or your +school, if any, to sign a “copyright disclaimer” for the program, if +necessary. Here is a sample; alter the names: +

+
 
Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written
+by James Hacker.
+
+signature of Ty Coon, 1 April 1989
+Ty Coon, President of Vice
+
+ +

This General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications +with the library. If this is what you want to do, use the GNU Library +General Public License instead of this License. +

+
+ + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+ +

Index

+ +
Jump to:   A +   +C +   +D +   +F +   +I +   +M +   +O +   +P +   +R +   +S +   +T +   +U +   +V +   +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Index Entry Section

A
absolute symlink2. Terminology
adopting existing files3. Invoking Stow

C
configuration files11. Resource Files
conflicts5.4 Conflicts during installation
conflicts7. Conflicts

D
deferred operation7.1 Deferred Operation
deferred operation8. Mixing Operations
deletion6. Deleting Packages
directory folding5.1 Tree folding
dry run3. Invoking Stow

F
folding trees5.1 Tree folding

I
ignore lists4. Ignore Lists
ignore lists4.1 Motivation For Ignore Lists
ignoring files and directories4. Ignore Lists
installation5. Installing Packages
installation conflicts5.4 Conflicts during installation
installation image2. Terminology

M
maintenance10. Target Maintenance
mixing operations8. Mixing Operations

O
ownership5.3 Ownership

P
package2. Terminology
package directory2. Terminology
package name2. Terminology

R
refolding trees6.1 Refolding “foldable” trees.
relative symlink2. Terminology
resource files11. Resource Files

S
simulated run3. Invoking Stow
splitting open folded trees5.2 Tree unfolding
stow directory2. Terminology
symlink2. Terminology

T
target directory2. Terminology
tree folding5.1 Tree folding
tree refolding6.1 Refolding “foldable” trees.
tree unfolding5.2 Tree unfolding
tree unsplitting5.2 Tree unfolding

U
unfolding trees5.2 Tree unfolding

V
verbosity levels3. Invoking Stow

+
Jump to:   A +   +C +   +D +   +F +   +I +   +M +   +O +   +P +   +R +   +S +   +T +   +U +   +V +   +
+ +
+ + + + + + +
[Top][Contents][Index][ ? ]
+

Footnotes

+

(1)

+

As of Perl 4.036 and Emacs +19.22. +

(2)

+

Exact matching means the +regular expression is anchored at the beginning and end, in contrast +to unanchored regular expressions which will match a substring. +

(3)

+

In this context, “subpath” means a contiguous +subset of path segments; e.g for the relative path +‘one/two/three’, there are six valid subpaths: ‘one’, +‘two’, ‘three’, ‘one/two’, ‘two/three’, +‘one/two/three’. +

(4)

+

The “basename” is the name of the file or +directory itself, excluding any directory path prefix - as returned by +the basename command. +

(5)

+

This +approach was introduced in version 2 of GNU Stow. Previously, the whole +target tree was scanned and stow directories were explicitly omitted. This +became problematic when dealing with very large installations. The only +situation where this is useful is if you accidentally delete a directory in +the package tree, leaving you with a whole bunch of dangling links. Note that +you can enable the old approach with the ‘-p’ option. Alternatively, you can +use the ‘--badlinks’ option get stow to search for dangling links in your target tree and remove the offenders manually. +

(6)

+

As I write this, the current version of Emacs is 19.31. +


+ + + + + + +
[Top][Contents][Index][ ? ]
+

Table of Contents

+ +
+ + + + + + +
[Top][Contents][Index][ ? ]
+

About This Document

+

+ This document was generated by Adam Spiers on November 9, 2015 using texi2html 1.82. +

+

+ The buttons in the navigation panels have the following meaning: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Button Name Go to From 1.2.3 go to
[ < ] BackPrevious section in reading order1.2.2
[ > ] ForwardNext section in reading order1.2.4
[ << ] FastBackBeginning of this chapter or previous chapter1
[ Up ] UpUp section1.2
[ >> ] FastForwardNext chapter2
[Top] TopCover (top) of document  
[Contents] ContentsTable of contents  
[Index] IndexIndex  
[ ? ] AboutAbout (help)  
+ +

+ where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure: +

+ +
    +
  • 1. Section One +
      +
    • 1.1 Subsection One-One +
        +
      • ...
      • +
      +
    • +
    • 1.2 Subsection One-Two +
        +
      • 1.2.1 Subsubsection One-Two-One
      • +
      • 1.2.2 Subsubsection One-Two-Two
      • +
      • 1.2.3 Subsubsection One-Two-Three     + <== Current Position
      • +
      • 1.2.4 Subsubsection One-Two-Four
      • +
      +
    • +
    • 1.3 Subsection One-Three +
        +
      • ...
      • +
      +
    • +
    • 1.4 Subsection One-Four
    • +
    +
  • +
+ +
+

+ + This document was generated by Adam Spiers on November 9, 2015 using texi2html 1.82. + +
+ +

+ + diff --git a/.local/share/doc/stow/manual-split/Bootstrapping.html b/.local/share/doc/stow/manual-split/Bootstrapping.html new file mode 100644 index 0000000..40ee46e --- /dev/null +++ b/.local/share/doc/stow/manual-split/Bootstrapping.html @@ -0,0 +1,89 @@ + + +Bootstrapping - Stow + + + + + + + + + + + + +
+ +

+Next: , +Previous: Compile-time vs Install-time, +Up: Top +


+
+ +

13 Bootstrapping

+ +

Suppose you have a stow directory all set up and ready to go: +/usr/local/stow/perl contains the Perl installation, +/usr/local/stow/stow contains Stow itself, and perhaps you have +other packages waiting to be stowed. You'd like to be able to do this: + +

     cd /usr/local/stow
+     stow -vv *
+
+

but stow is not yet in your PATH. Nor can you do this: + +

     cd /usr/local/stow
+     stow/bin/stow -vv *
+
+

because the ‘#!’ line at the beginning of stow tries to +locate Perl (usually in /usr/local/bin/perl), and that won't be +found. The solution you must use is: + +

     cd /usr/local/stow
+     perl/bin/perl stow/bin/stow -vv *
+
+ + + diff --git a/.local/share/doc/stow/manual-split/Compile_002dtime-vs-Install_002dtime.html b/.local/share/doc/stow/manual-split/Compile_002dtime-vs-Install_002dtime.html new file mode 100644 index 0000000..cb7776e --- /dev/null +++ b/.local/share/doc/stow/manual-split/Compile_002dtime-vs-Install_002dtime.html @@ -0,0 +1,144 @@ + + +Compile-time vs Install-time - Stow + + + + + + + + + + + + +
+ + +

+Next: , +Previous: Resource Files, +Up: Top +


+
+ +

12 Compile-time vs Install-time

+ +

Software whose installation is managed with Stow needs to be installed +in one place (the package directory, e.g. /usr/local/stow/perl) +but needs to appear to run in another place (the target tree, e.g., +/usr/local). Why is this important? What's wrong with Perl, for +instance, looking for its files in /usr/local/stow/perl instead +of in /usr/local? + +

The answer is that there may be another package, e.g., +/usr/local/stow/perl-extras, stowed under /usr/local. If +Perl is configured to find its files in /usr/local/stow/perl, it +will never find the extra files in the ‘perl-extras’ package, even +though they're intended to be found by Perl. On the other hand, if Perl +looks for its files in /usr/local, then it will find the +intermingled Perl and ‘perl-extras’ files. + +

This means that when you compile a package, you must tell it the +location of the run-time, or target tree; but when you install it, you +must place it in the stow tree. + +

12.1 Advice on changing compilation and installation parameters

+ +

Some software packages allow you to specify, at compile-time, separate +locations for installation and for run-time. Perl is one such package; +see Perl and Perl 5 Modules. Others allow you to compile the +package, then give a different destination in the ‘make install’ +step without causing the binaries or other files to get rebuilt. Most +GNU software falls into this category; Emacs is a notable exception. +See GNU Emacs, and Other FSF Software. + +

Still other software packages cannot abide the idea of separate +installation and run-time locations at all. If you try to ‘make +install prefix=/usr/local/stow/foo’, then first the whole package +will be recompiled to hardwire the /usr/local/stow/foo +path. With these packages, it is best to compile normally, then run +‘make -n install’, which should report all the steps needed to +install the just-built software. Place this output into a file, edit +the commands in the file to remove recompilation steps and to reflect +the Stow-based installation location, and execute the edited file as a +shell script in place of ‘make install’. Be sure to execute the +script using the same shell that ‘make install’ would have used. + +

(If you use GNU Make and a shell [such as GNU bash] that understands +pushd and popd, you can do the following: + +

    +
  1. Replace all lines matching ‘make[n]: Entering directory +dir’ with ‘pushd dir’. +
  2. Replace all lines matching ‘make[n]: Leaving directory +dir’ with ‘popd’. +
  3. Delete all lines matching ‘make[n]: Nothing to be done for +rule’. +
+ +

Then find other lines in the output containing cd or make +commands and rewrite or delete them. In particular, you should be able +to delete sections of the script that resemble this: + +

     for i in dir_1 dir_2 ...; do \
+       (cd $i; make args ...) \
+     done
+
+

Note, that's “should be able to,” not “can.” Be sure to modulate +these guidelines with plenty of your own intelligence. + +

The details of stowing some specific packages are described in the +following sections. + +

+ + + + diff --git a/.local/share/doc/stow/manual-split/Conflicts.html b/.local/share/doc/stow/manual-split/Conflicts.html new file mode 100644 index 0000000..6c58620 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Conflicts.html @@ -0,0 +1,100 @@ + + +Conflicts - Stow + + + + + + + + + + + + +
+ +

+Next: , +Previous: Deleting Packages, +Up: Top +


+
+ +

7 Conflicts

+ +

If, during installation, a file or symlink exists in the target tree and +has the same name as something Stow needs to create, and if the +existing name is not a folded tree that can be split open, then a +conflict has arisen. A conflict also occurs if a directory exists +where Stow needs to place a symlink to a non-directory. On the +other hand, if the existing name is merely a symlink that already points +where Stow needs it to, then no conflict has occurred. (Thus it +is harmless to install a package that has already been installed.) + +

For complex packages, scanning the stow and target trees in tandem, +and deciding whether to make directories or links, split-open or fold +directories, can actually take a long time (a number of seconds). +Moreover, an accurate analysis of potential conflicts requires us to +take into account all of these operations. + +

+ +

7.1 Deferred Operation

+ +

+Since version 2.0, Stow now adopts a two-phase algorithm, first +scanning for any potential conflicts before any stowing or unstowing +operations are performed. If any conflicts are found, they are +displayed and then Stow terminates without making any modifications to +the filesystem. This means that there is much less risk of a package +being partially stowed or unstowed due to conflicts. + +

Prior to version 2.0, if a conflict was discovered, the stow or unstow +operation could be aborted mid-flow, leaving the target tree in an +inconsistent state. + + + + diff --git a/.local/share/doc/stow/manual-split/Cygnus-Software.html b/.local/share/doc/stow/manual-split/Cygnus-Software.html new file mode 100644 index 0000000..a98b83d --- /dev/null +++ b/.local/share/doc/stow/manual-split/Cygnus-Software.html @@ -0,0 +1,95 @@ + + +Cygnus Software - Stow + + + + + + + + + + + + + +

+ +

12.4 Cygnus Software

+ +

Cygnus is a commercial supplier and supporter of GNU software. It has +also written several of its own packages, released under the terms of +the GNU General Public License; and it has taken over the maintenance of +other packages. Among the packages released by Cygnus are ‘gdb’, +‘gnats’, and ‘dejagnu’. + +

Cygnus packages have the peculiarity that each one unpacks into a +directory tree with a generic top-level Makefile, which is set up to +compile all of Cygnus' packages, any number of which may reside +under the top-level directory. In other words, even if you're only +building ‘gnats’, the top-level Makefile will look for, and try to +build, gdb and dejagnu subdirectories, among many others. + +

The result is that if you try ‘make -n install +prefix=/usr/local/stow/package’ at the top level of a Cygnus +package, you'll get a bewildering amount of output. It will then be +very difficult to visually scan the output to see whether the install +will proceed correctly. Unfortunately, it's not always clear how to +invoke an install from the subdirectory of interest. + +

In cases like this, the best approach is to run your ‘make install +prefix=...’, but be ready to interrupt it if you detect that it +is recompiling files. Usually it will work just fine; otherwise, +install manually. + + + + diff --git a/.local/share/doc/stow/manual-split/Deferred-Operation.html b/.local/share/doc/stow/manual-split/Deferred-Operation.html new file mode 100644 index 0000000..ff438aa --- /dev/null +++ b/.local/share/doc/stow/manual-split/Deferred-Operation.html @@ -0,0 +1 @@ + diff --git a/.local/share/doc/stow/manual-split/Deleting-Packages.html b/.local/share/doc/stow/manual-split/Deleting-Packages.html new file mode 100644 index 0000000..0257f0e --- /dev/null +++ b/.local/share/doc/stow/manual-split/Deleting-Packages.html @@ -0,0 +1,112 @@ + + +Deleting Packages - Stow + + + + + + + + + + + + +

+ +

+Next: , +Previous: Installing Packages, +Up: Top +


+
+ +

6 Deleting Packages

+ +

When the -D option is given, the action of Stow is to +delete a package from the target tree. Note that Stow will not +delete anything it doesn't “own”. Deleting a package does not +mean removing it from the stow directory or discarding the package +tree. + +

To delete a package, Stow recursively scans the target tree, skipping over any +directory that is not included in the installation image.1 +For example, if the target directory is /usr/local and the +installation image for the package being deleted has only a bin +directory and a man directory at the top level, then we only scan +/usr/local/bin and /usr/local/bin/man, and not +/usr/local/lib or /usr/local/share, or for that matter +/usr/local/stow. Any symlink it finds that points into the package +being deleted is removed. Any directory that contained only symlinks to the +package being deleted is removed. + +

+ +

6.1 Refolding “foldable” trees.

+ +

+After removing symlinks and empty subdirectories, any directory that +contains only symlinks to a single other package is considered to be a +previously “folded” tree that was “split open.” Stow will refold +the tree by removing the symlinks to the surviving package, removing +the directory, then linking the directory back to the surviving +package. However, this behaviour can be prevented via the +--no-folding option; see Invoking Stow. + + +

+
+

Footnotes

[1] This +approach was introduced in version 2 of GNU Stow. Previously, the whole +target tree was scanned and stow directories were explicitly omitted. This +became problematic when dealing with very large installations. The only +situation where this is useful is if you accidentally delete a directory in +the package tree, leaving you with a whole bunch of dangling links. Note that +you can enable the old approach with the -p option. Alternatively, you can +use the --badlinks option get stow to search for dangling links in your target tree and remove the offenders manually.

+ +
+ + + diff --git a/.local/share/doc/stow/manual-split/GNU-Emacs.html b/.local/share/doc/stow/manual-split/GNU-Emacs.html new file mode 100644 index 0000000..3f44cce --- /dev/null +++ b/.local/share/doc/stow/manual-split/GNU-Emacs.html @@ -0,0 +1,97 @@ + + +GNU Emacs - Stow + + + + + + + + + + + + + + + +

12.2 GNU Emacs

+ +

Although the Free Software Foundation has many enlightened practices +regarding Makefiles and software installation (see see Other FSF Software), Emacs, its flagship program, doesn't quite follow the +rules. In particular, most GNU software allows you to write: + +

     make
+     make install prefix=/usr/local/stow/package
+
+

If you try this with Emacs, then the new value for prefix in the +‘make install’ step will cause some files to get recompiled with +the new value of prefix wired into them. In Emacs 19.23 and +later,1 +the way to work around this problem is: + +

     make
+     make install-arch-dep install-arch-indep prefix=/usr/local/stow/emacs
+
+

In 19.22 and some prior versions of Emacs, the workaround was: + +

     make
+     make do-install prefix=/usr/local/stow/emacs
+
+ +
+
+

Footnotes

[1] As I write this, the current version of Emacs is 19.31.

+ +
+ + + diff --git a/.local/share/doc/stow/manual-split/GNU-General-Public-License.html b/.local/share/doc/stow/manual-split/GNU-General-Public-License.html new file mode 100644 index 0000000..32b3c18 --- /dev/null +++ b/.local/share/doc/stow/manual-split/GNU-General-Public-License.html @@ -0,0 +1,411 @@ + + +GNU General Public License - Stow + + + + + + + + + + + + +
+ +

+Next: , +Previous: Known Bugs, +Up: Top +


+
+ +

GNU General Public License

+ +
Version 2, June 1991
+ +
     Copyright © 1989, 1991 Free Software Foundation, Inc.
+     675 Mass Ave, Cambridge, MA 02139, USA
+     
+     Everyone is permitted to copy and distribute verbatim copies
+     of this license document, but changing it is not allowed.
+
+

Preamble

+ +

The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software—to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + +

When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + +

To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + +

For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + +

We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + +

Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + +

Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + +

The precise terms and conditions for copying, distribution and +modification follow. + +

    +
  1. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The “Program”, below, +refers to any such program or work, and a “work based on the Program” +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term “modification”.) Each licensee is addressed as “you”. + +

    Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + +

  2. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +

    You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + +

  3. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + +
      +
    1. You must cause the modified files to carry prominent notices +stating that you changed the files and the date of any change. + +
    2. You must cause any work that you distribute or publish, that in +whole or in part contains or is derived from the Program or any +part thereof, to be licensed as a whole at no charge to all third +parties under the terms of this License. + +
    3. If the modified program normally reads commands interactively +when run, you must cause it, when started running for such +interactive use in the most ordinary way, to print or display an +announcement including an appropriate copyright notice and a +notice that there is no warranty (or else, saying that you provide +a warranty) and that users may redistribute the program under +these conditions, and telling the user how to view a copy of this +License. (Exception: if the Program itself is interactive but +does not normally print such an announcement, your work based on +the Program is not required to print an announcement.) +
    + +

    These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +

    Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +

    In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + +

  4. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + +
      +
    1. Accompany it with the complete corresponding machine-readable +source code, which must be distributed under the terms of Sections +1 and 2 above on a medium customarily used for software interchange; or, + +
    2. Accompany it with a written offer, valid for at least three +years, to give any third party, for a charge no more than your +cost of physically performing source distribution, a complete +machine-readable copy of the corresponding source code, to be +distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, + +
    3. Accompany it with the information you received as to the offer +to distribute corresponding source code. (This alternative is +allowed only for noncommercial distribution and only if you +received the program in object code or executable form with such +an offer, in accord with Subsection b above.) +
    + +

    The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +

    If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + +

  5. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + +
  6. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +
  7. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + +
  8. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +

    If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +

    It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +

    This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + +

  9. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + +
  10. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +

    Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and “any +later version”, you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + +

  11. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + +
  12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + +
  13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. +
+ +

How to Apply These Terms to Your New Programs

+ +

If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +

To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the “copyright” line and a pointer to where the full notice is found. + +

     one line to give the program's name and an idea of what it does.
+     Copyright (C) 19yy  name of author
+     
+     This program is free software; you can redistribute it and/or
+     modify it under the terms of the GNU General Public License
+     as published by the Free Software Foundation; either version 2
+     of the License, or (at your option) any later version.
+     
+     This program is distributed in the hope that it will be useful,
+     but WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+     GNU General Public License for more details.
+     
+     You should have received a copy of the GNU General Public License
+     along with this program; if not, write to the Free Software
+     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+

Also add information on how to contact you by electronic and paper mail. + +

If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + +

     Gnomovision version 69, Copyright (C) 19yy name of author
+     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+     type `show w'.  This is free software, and you are welcome
+     to redistribute it under certain conditions; type `show c'
+     for details.
+
+

The hypothetical commands ‘show w’ and ‘show c’ should show +the appropriate parts of the General Public License. Of course, the +commands you use may be called something other than ‘show w’ and +‘show c’; they could even be mouse-clicks or menu items—whatever +suits your program. + +

You should also get your employer (if you work as a programmer) or your +school, if any, to sign a “copyright disclaimer” for the program, if +necessary. Here is a sample; alter the names: + +

     Yoyodyne, Inc., hereby disclaims all copyright
+     interest in the program `Gnomovision'
+     (which makes passes at compilers) written
+     by James Hacker.
+     
+     signature of Ty Coon, 1 April 1989
+     Ty Coon, President of Vice
+
+

This General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications +with the library. If this is what you want to do, use the GNU Library +General Public License instead of this License. + + + diff --git a/.local/share/doc/stow/manual-split/Ignore-Lists.html b/.local/share/doc/stow/manual-split/Ignore-Lists.html new file mode 100644 index 0000000..219962e --- /dev/null +++ b/.local/share/doc/stow/manual-split/Ignore-Lists.html @@ -0,0 +1,77 @@ + + +Ignore Lists - Stow + + + + + + + + + + + + +

+ +

+Next: , +Previous: Invoking Stow, +Up: Top +


+
+ +

4 Ignore Lists

+ +

+ +

+ + + + diff --git a/.local/share/doc/stow/manual-split/Installing-Packages.html b/.local/share/doc/stow/manual-split/Installing-Packages.html new file mode 100644 index 0000000..a0abce2 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Installing-Packages.html @@ -0,0 +1,156 @@ + + +Installing Packages - Stow + + + + + + + + + + + + +
+ +

+Next: , +Previous: Ignore Lists, +Up: Top +


+
+ +

5 Installing Packages

+ +

The default action of Stow is to install a package. This means creating +symlinks in the target tree that point into the package tree. Stow +attempts to do this with as few symlinks as possible; in other words, if +Stow can create a single symlink that points to an entire subtree within +the package tree, it will choose to do that rather than create a +directory in the target tree and populate it with symlinks. + +

+ +

5.1 Tree folding

+ +

For example, suppose that no packages have yet been installed in +/usr/local; it's completely empty (except for the stow +subdirectory, of course). Now suppose the Perl package is installed. +Recall that it includes the following directories in its installation +image: bin; info; lib/perl; man/man1. +Rather than creating the directory /usr/local/bin and populating +it with symlinks to ../stow/perl/bin/perl and +../stow/perl/bin/a2p (and so on), Stow will create a +single symlink, /usr/local/bin, which points to +stow/perl/bin. In this way, it still works to refer to +/usr/local/bin/perl and /usr/local/bin/a2p, and fewer +symlinks have been created. This is called tree folding, since an +entire subtree is “folded” into a single symlink. + +

To complete this example, Stow will also create the symlink +/usr/local/info pointing to stow/perl/info; the symlink +/usr/local/lib pointing to stow/perl/lib; and the symlink +/usr/local/man pointing to stow/perl/man. + +

Now suppose that instead of installing the Perl package into an empty +target tree, the target tree is not empty to begin with. Instead, it +contains several files and directories installed under a different +system-administration philosophy. In particular, /usr/local/bin +already exists and is a directory, as are /usr/local/lib and +/usr/local/man/man1. In this case, Stow will descend into +/usr/local/bin and create symlinks to +../stow/perl/bin/perl and ../stow/perl/bin/a2p (etc.), +and it will descend into /usr/local/lib and create the +tree-folding symlink perl pointing to +../stow/perl/lib/perl, and so on. As a rule, Stow only +descends as far as necessary into the target tree when it can create a +tree-folding symlink. However, this behaviour can be changed via +the --no-folding option; see Invoking Stow. + +

+ +

5.2 Tree unfolding

+ +

The time often comes when a tree-folding symlink has to be undone +because another package uses one or more of the folded subdirectories in +its installation image. This operation is called splitting open or +unfolding a folded tree. It involves removing the original symlink from +the target tree, creating a true directory in its place, and then populating the +new directory with symlinks to the newly-installed package and to +the old package that used the old symlink. For example, suppose that +after installing Perl into an empty /usr/local, we wish to +install Emacs. Emacs's installation image includes a bin +directory containing the emacs and etags executables, +among others. Stow must make these files appear to be installed +in /usr/local/bin, but presently /usr/local/bin is a +symlink to stow/perl/bin. Stow therefore takes the +following steps: the symlink /usr/local/bin is deleted; the +directory /usr/local/bin is created; links are made from +/usr/local/bin to ../stow/emacs/bin/emacs and +../stow/emacs/bin/etags; and links are made from +/usr/local/bin to ../stow/perl/bin/perl and +../stow/perl/bin/a2p. + +

5.3 Ownership

+ +

When splitting open a folded tree, Stow makes sure that the +symlink it is about to remove points inside a valid package in the +current stow directory. Stow will never delete anything +that it doesn't own. Stow “owns” everything living in the +target tree that points into a package in the stow directory. Anything +Stow owns, it can recompute if lost: symlinks that point into a package in +the stow directory, or directories that only contain symlinks that stow +“owns”. Note that by this definition, Stow doesn't “own” anything +in the stow directory or in any of the packages. + +

5.4 Conflicts during installation

+ +

If Stow needs to create a directory or a symlink in the target +tree and it cannot because that name is already in use and is not owned +by Stow, then a conflict has arisen. See Conflicts. + + + + diff --git a/.local/share/doc/stow/manual-split/Introduction.html b/.local/share/doc/stow/manual-split/Introduction.html new file mode 100644 index 0000000..0d971de --- /dev/null +++ b/.local/share/doc/stow/manual-split/Introduction.html @@ -0,0 +1,119 @@ + + +Introduction - Stow + + + + + + + + + + + + +

+ +

+Next: , +Previous: Top, +Up: Top +


+
+ +

1 Introduction

+ +

Stow is a tool for managing the installation of multiple software +packages in the same run-time directory tree. One historical difficulty +of this task has been the need to administer, upgrade, install, and +remove files in independent packages without confusing them with other +files sharing the same file system space. For instance, it is common to +install Perl and Emacs in /usr/local. When one does so, one +winds up with the following files1 in /usr/local/man/man1: + +

     a2p.1
+     ctags.1
+     emacs.1
+     etags.1
+     h2ph.1
+     perl.1
+     s2p.1
+
+

Now suppose it's time to uninstall Perl. Which man pages +get removed? Obviously perl.1 is one of them, but it should not +be the administrator's responsibility to memorize the ownership of +individual files by separate packages. + +

The approach used by Stow is to install each package into its own +tree, then use symbolic links to make it appear as though the files are +installed in the common tree. Administration can be performed in the +package's private tree in isolation from clutter from other packages. +Stow can then be used to update the symbolic links. The structure +of each private tree should reflect the desired structure in the common +tree; i.e. (in the typical case) there should be a bin directory +containing executables, a man/man1 directory containing section 1 +man pages, and so on. + +

Stow was inspired by Carnegie Mellon's Depot program, but is +substantially simpler and safer. Whereas Depot required database files +to keep things in sync, Stow stores no extra state between runs, so +there's no danger (as there was in Depot) of mangling directories when +file hierarchies don't match the database. Also unlike Depot, Stow will +never delete any files, directories, or links that appear in a Stow +directory (e.g., /usr/local/stow/emacs), so it's always possible +to rebuild the target tree (e.g., /usr/local). + +

For information about the latest version of Stow, you can refer to +http://www.gnu.org/software/stow/. + + +

+
+

Footnotes

[1] As of Perl 4.036 and Emacs +19.22.

+ +
+ + + diff --git a/.local/share/doc/stow/manual-split/Invoking-Stow.html b/.local/share/doc/stow/manual-split/Invoking-Stow.html new file mode 100644 index 0000000..ba12b4d --- /dev/null +++ b/.local/share/doc/stow/manual-split/Invoking-Stow.html @@ -0,0 +1,206 @@ + + +Invoking Stow - Stow + + + + + + + + + + + + +
+ +

+Next: , +Previous: Terminology, +Up: Top +


+
+ +

3 Invoking Stow

+ +

The syntax of the stow command is: + +

     stow [options] [action flag] package ...
+
+

Each package is the name of a package (e.g., ‘perl’) in the stow +directory that we wish to install into (or delete from) the target directory. +The default action is to install the given packages, although alternate actions +may be specified by preceding the package name(s) with an action flag. + +

The following options are supported: + +

+
-d dir
--dir=dir
Set the stow directory to dir. Defaults to the value of the environment +variable STOW_DIR if set, or the current directory otherwise. + +
-t dir
--target=dir
Set the target directory to dir instead of the parent of the stow +directory. Defaults to the parent of the stow directory, so it is typical to +execute stow from the directory /usr/local/stow. + +
--ignore=regexp
This (repeatable) option lets you suppress acting on files that match the +given perl regular expression. For example, using the options + +
          --ignore='*.orig' --ignore='*.dist'
+
+

will cause stow to ignore files ending in .orig or .dist. + +

Note that the regular expression is anchored to the end of the filename, +because this is what you will want to do most of the time. + +

Also note that by default Stow automatically ignores a “sensible” +built-in list of files and directories such as CVS, editor +backup files, and so on. See Ignore Lists, for more details. + +

--defer=regexp
This (repeatable) option avoids stowing a file matching the given +regular expression, if that file is already stowed by another package. +This is effectively the opposite of --override. + +

(N.B. the name --defer was chosen in the sense that the package +currently being stowed is treated with lower precedence than any +already installed package, not in the sense that the operation is +being postponed to be run at a later point in time; do not confuse +this nomenclature with the wording used in Deferred Operation.) + +

For example, the following options + +

          --defer=man --defer=info
+
+

will cause stow to skip over pre-existing man and info pages. + +

Equivalently, you could use ‘--defer='man|info'’ since the +argument is just a Perl regex. + +

Note that the regular expression is anchored to the beginning of the path +relative to the target directory, because this is what you will want to do most +of the time. + +

--override=regexp
This (repeatable) option forces any file matching the regular expression to be +stowed, even if the file is already stowed to another package. For example, +the following options + +
          --override=man --override=info
+
+

will permit stow to overwrite links that point to pre-existing man and info +pages that are owned by stow and would otherwise cause a conflict. + +

The regular expression is anchored to the beginning of the path relative to +the target directory, because this is what you will want to do most of the time. + +

--no-folding
+This disables any further tree folding or tree refolding. +If a new subdirectory is encountered whilst stowing a new package, the +subdirectory is created within the target, and its contents are +symlinked, rather than just creating a symlink for the directory. If +removal of symlinks whilst unstowing a package causes a subtree to be +foldable (i.e. only containing symlinks to a single package), that +subtree will not be removed and replaced with a symlink. + +


--adopt
Warning! This behaviour is specifically intended to alter the +contents of your stow directory. If you do not want that, this option +is not for you. + +

When stowing, if a target is encountered which already exists but is a +plain file (and hence not owned by any existing stow package), then +normally Stow will register this as a conflict and refuse to proceed. +This option changes that behaviour so that the file is moved to the +same relative place within the package's installation image within the +stow directory, and then stowing proceeds as before. So effectively, +the file becomes adopted by the stow package, without its contents +changing. + +

This is particularly useful when the stow package is under the control +of a version control system, because it allows files in the target +tree, with potentially different contents to the equivalent versions +in the stow package's installation image, to be adopted into the +package, then compared by running something like ‘git diff ...’ +inside the stow package, and finally either kept (e.g. via ‘git +commit ...’) or discarded (‘git checkout HEAD ...’). + +


-n
--no
--simulate
Do not perform any operations that modify the file system; in combination with +-v can be used to merely show what would happen. + +


-v
--verbose[=n]
Send verbose output to standard error describing what Stow is +doing. Verbosity levels are 0, 1, 2, and 3; 0 is the default. Using +-v or --verbose increases the verbosity by one; using +‘--verbose=n’ sets it to n. + +
-p
--compat
Scan the whole target tree when unstowing. By default, only +directories specified in the installation image are scanned +during an unstow operation. Scanning the whole tree can be +prohibitive if your target tree is very large. This option restores +the legacy behaviour; however, the --badlinks option to the +chkstow utility may be a better way of ensuring that your +installation does not have any dangling symlinks (see Target Maintenance). + +
-V
--version
Show Stow version number, and exit. + +
-h
--help
Show Stow command syntax, and exit. +
+ +

The following action flags are supported: + +

+
-D
--delete
Delete (unstow) the package name(s) that follow this option from the target +directory. This option may be repeated any number of times. + +
-R
--restow
Restow (first unstow, then stow again) the package names that follow this +option. This is useful for pruning obsolete symlinks from the target tree +after updating the software in a package. This option may be repeated any +number of times. + +
-S
--stow
explictly stow the package name(s) that follow this option. May be +omitted if you are not using the -D or -R options in the +same invocation. See Mixing Operations, for details of when you +might like to use this feature. This option may be repeated any number +of times. +
+ + + + diff --git a/.local/share/doc/stow/manual-split/Justification-For-Yet-Another-Set-Of-Ignore-Files.html b/.local/share/doc/stow/manual-split/Justification-For-Yet-Another-Set-Of-Ignore-Files.html new file mode 100644 index 0000000..c6cc9c3 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Justification-For-Yet-Another-Set-Of-Ignore-Files.html @@ -0,0 +1,93 @@ + + +Justification For Yet Another Set Of Ignore Files - Stow + + + + + + + + + + + + + + +

4.3 Justification For Yet Another Set Of Ignore Files

+ +

The reader may note that this format is very similar to existing +ignore list file formats, such as those for cvs, git, +rsync etc., and wonder if another set of ignore lists is +justified. However there are good reasons why Stow does not simply +check for the presence of say, .cvsignore, and use that if it +exists. Firstly, there is no guarantee that a stow package would +contain any version control meta-data, or permit introducing this if +it didn't already exist. + +

Secondly even if it did, version control system ignore lists generally +reflect build-time ignores rather than install-time, and +there may be some intermediate or temporary files on those ignore +lists generated during development or at build-time which it would be +inappropriate to stow, even though many files generated at build-time +(binaries, libraries, documentation etc.) certainly do need to be +stowed. Similarly, if a file is not in the version control +system's ignore list, there is no way of knowing whether the file is +intended for end use, let alone whether the version control system is +tracking it or not. + +

Therefore it seems clear that ignore lists provided by version control +systems do not provide sufficient information for Stow to determine +which files and directories to stow, and so it makes sense for Stow to +support independent ignore lists. + + + + diff --git a/.local/share/doc/stow/manual-split/Known-Bugs.html b/.local/share/doc/stow/manual-split/Known-Bugs.html new file mode 100644 index 0000000..bef4833 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Known-Bugs.html @@ -0,0 +1,76 @@ + + +Known Bugs - Stow + + + + + + + + + + + + +

+ +

+Next: , +Previous: Reporting Bugs, +Up: Top +


+
+ +

15 Known Bugs

+ +

There are no known bugs in Stow version 2.2.2! +If you think you have found one, please see Reporting Bugs. + + + + + + + + diff --git a/.local/share/doc/stow/manual-split/Mixing-Operations.html b/.local/share/doc/stow/manual-split/Mixing-Operations.html new file mode 100644 index 0000000..1267fc1 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Mixing-Operations.html @@ -0,0 +1,90 @@ + + +Mixing Operations - Stow + + + + + + + + + + + + +

+ +

+Next: , +Previous: Conflicts, +Up: Top +


+
+ +

8 Mixing Operations

+ +

+Since version 2.0, multiple distinct actions can be specified in a single +invocation of GNU Stow. For example, to update an installation of Emacs from +version 21.3 to 21.4a you can now do the following: + +

     stow -D emacs-21.3 -S emacs-21.4a
+
+

which will replace emacs-21.3 with emacs-21.4a using a single invocation. + +

This is much faster and cleaner than performing two separate +invocations of stow, because redundant folding/unfolding operations +can be factored out. In addition, all the operations are calculated +and merged before being executed (see Deferred Operation), so the +amount of of time in which GNU Emacs is unavailable is minimised. + +

You can mix and match any number of actions, for example, + +

     stow -S pkg1 pkg2 -D pkg3 pkg4 -S pkg5 -R pkg6
+
+

will unstow pkg3, pkg4 and pkg6, then stow pkg1, pkg2, pkg5 and pkg6. + + + + diff --git a/.local/share/doc/stow/manual-split/Motivation-For-Ignore-Lists.html b/.local/share/doc/stow/manual-split/Motivation-For-Ignore-Lists.html new file mode 100644 index 0000000..37461e4 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Motivation-For-Ignore-Lists.html @@ -0,0 +1,94 @@ + + +Motivation For Ignore Lists - Stow + + + + + + + + + + + + + +

+ +

+Next: , +Previous: Ignore Lists, +Up: Ignore Lists +


+
+ +

4.1 Motivation For Ignore Lists

+ +

In many situations, there will exist files under the package +directories which it would be undesirable to stow into the target +directory. For example, files related version control such as +.gitignore, CVS, *,v (RCS files) should typically +not have symlinks from the target tree pointing to them. Also there +may be files or directories relating to the build of the package which +are not needed at run-time. + +

In these cases, it can be rather cumbersome to specify a +--ignore parameter for each file or directory to be ignored. +This could be worked around by ensuring the existence of +~/.stowrc containing multiple --ignore lines, or if a +different set of files/directories should be ignored depending on +which stow package is involved, a .stowrc file for each stow +package, but this would require the user to ensure that they were in +the correct directory before invoking stow, which would be tedious and +error-prone. Furthermore, since Stow shifts parameters from +.stowrc onto ARGV at run-time, it could clutter up the process +table with excessively long parameter lists, or even worse, exceed the +operating system's limit for process arguments. + +

Therefore in addition to --ignore parameters, Stow provides a +way to specify lists of files and directories to ignore. + + + + diff --git a/.local/share/doc/stow/manual-split/Multiple-Stow-Directories.html b/.local/share/doc/stow/manual-split/Multiple-Stow-Directories.html new file mode 100644 index 0000000..e8573d1 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Multiple-Stow-Directories.html @@ -0,0 +1,86 @@ + + +Multiple Stow Directories - Stow + + + + + + + + + + + + +

+ +

+Next: , +Previous: Mixing Operations, +Up: Top +


+
+ +

9 Multiple Stow Directories

+ +

If there are two or more system administrators who wish to maintain +software separately, or if there is any other reason to want two or more +stow directories, it can be done by creating a file named .stow +in each stow directory. The presence of /usr/local/foo/.stow +informs Stow that, though foo is not the current stow +directory, even if it is a subdirectory of the target directory, +nevertheless it is a stow directory and as such Stow +doesn't “own” anything in it (see Installing Packages). This will +protect the contents of foo from a ‘stow -D’, for instance. + + +

When multiple stow directories share a target tree, if a tree-folding +symlink is encountered and needs to be split open during an +installation, as long as the top-level stow directory into which the +existing symlink points contains .stow, Stow knows how to split +open the tree in the correct manner. + + + + diff --git a/.local/share/doc/stow/manual-split/Other-FSF-Software.html b/.local/share/doc/stow/manual-split/Other-FSF-Software.html new file mode 100644 index 0000000..46a1d20 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Other-FSF-Software.html @@ -0,0 +1,85 @@ + + +Other FSF Software - Stow + + + + + + + + + + + + + +

+ +

+Next: , +Previous: GNU Emacs, +Up: Compile-time vs Install-time +


+
+ +

12.3 Other FSF Software

+ +

The Free Software Foundation, the organization behind the GNU project, +has been unifying the build procedure for its tools for some time. +Thanks to its tools ‘autoconf’ and ‘automake’, most packages +now respond well to these simple steps, with no other intervention +necessary: + +

     ./configure options
+     make
+     make install prefix=/usr/local/stow/package
+
+

Hopefully, these tools can evolve to be aware of Stow-managed packages, +such that providing an option to ‘configure’ can allow ‘make’ +and ‘make install’ steps to work correctly without needing to +“fool” the build process. + + + + diff --git a/.local/share/doc/stow/manual-split/Perl-and-Perl-5-Modules.html b/.local/share/doc/stow/manual-split/Perl-and-Perl-5-Modules.html new file mode 100644 index 0000000..6c082bb --- /dev/null +++ b/.local/share/doc/stow/manual-split/Perl-and-Perl-5-Modules.html @@ -0,0 +1,150 @@ + + +Perl and Perl 5 Modules - Stow + + + + + + + + + + + + +

+ +

+Previous: Cygnus Software, +Up: Compile-time vs Install-time +


+
+ +

12.5 Perl and Perl 5 Modules

+ +

Perl 4.036 allows you to specify different locations for installation +and for run-time. It is the only widely-used package in this author's +experience that allows this, though hopefully more packages will adopt +this model. + +

Unfortunately, the authors of Perl believed that only AFS sites need +this ability. The configuration instructions for Perl 4 misleadingly +state that some occult means are used under AFS to transport files from +their installation tree to their run-time tree. In fact, that confusion +arises from the fact that Depot, Stow's predecessor, originated at +Carnegie Mellon University, which was also the birthplace of AFS. CMU's +need to separate install-time and run-time trees stemmed from its use of +Depot, not from AFS. + +

The result of this confusion is that Perl 5's configuration script +doesn't even offer the option of separating install-time and run-time +trees unless you're running AFS. Fortunately, after you've +entered all the configuration settings, Perl's setup script gives you +the opportunity to edit those settings in a file called +config.sh. When prompted, you should edit this file and replace +occurrences of + +

     inst.../usr/local...
+
+

with + +

     inst.../usr/local/stow/perl...
+
+

You can do this with the following Unix command: + +

     sed 's,^\(inst.*/usr/local\),\1/stow/perl,' config.sh > config.sh.new
+     mv config.sh.new config.sh
+
+

Hopefully, the Perl authors will correct this deficiency in Perl 5's +configuration mechanism. + +

Perl 5 modules—i.e., extensions to Perl 5—generally conform to a set +of standards for building and installing them. The standard says that +the package comes with a top-level Makefile.PL, which is a Perl +script. When it runs, it generates a Makefile. + +

If you followed the instructions above for editing config.sh when +Perl was built, then when you create a Makefile from a +Makefile.PL, it will contain separate locations for run-time +(/usr/local) and install-time (/usr/local/stow/perl). +Thus you can do + +

     perl Makefile.PL
+     make
+     make install
+
+

and the files will be installed into /usr/local/stow/perl. +However, you might prefer each Perl module to be stowed separately. In +that case, you must edit the resulting Makefile, replacing +/usr/local/stow/perl with /usr/local/stow/module. +The best way to do this is: + +

     perl Makefile.PL
+     find . -name Makefile -print | \
+       xargs perl -pi~ -e 's,^(INST.*/stow)/perl,$1/module,;'
+     make
+     make install
+
+

(The use of ‘find’ and ‘xargs’ ensures that all Makefiles in +the module's source tree, even those in subdirectories, get edited.) A +good convention to follow is to name the stow directory for a Perl +module cpan.module, where ‘cpan’ stands for +Comprehensive Perl Archive Network, a collection of FTP sites that is +the source of most Perl 5 extensions. This way, it's easy to tell at a +glance which of the subdirectories of /usr/local/stow are Perl 5 +extensions. + +

When you stow separate Perl 5 modules separately, you are likely to +encounter conflicts (see Conflicts) with files named .exists +and perllocal.pod. One way to work around this is to remove +those files before stowing the module. If you use the +cpan.module naming convention, you can simply do this: + +

     cd /usr/local/stow
+     find cpan.* \( -name .exists -o -name perllocal.pod \) -print | \
+       xargs rm
+
+ + + diff --git a/.local/share/doc/stow/manual-split/Reporting-Bugs.html b/.local/share/doc/stow/manual-split/Reporting-Bugs.html new file mode 100644 index 0000000..6f3f6c2 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Reporting-Bugs.html @@ -0,0 +1,98 @@ + + +Reporting Bugs - Stow + + + + + + + + + + + + +
+ +

+Next: , +Previous: Bootstrapping, +Up: Top +


+
+ +

14 Reporting Bugs

+ +

Please send bug reports to the current maintainers by electronic +mail. The address to use is ‘<bug-stow@gnu.org>’. Please +include: + +

    +
  • the version number of Stow (‘stow --version’); + +
  • the version number of Perl (‘perl -v’); + +
  • the system information, which can often be obtained with ‘uname +-a’; + +
  • a description of the bug; + +
  • the precise command you gave; + +
  • the output from the command (preferably verbose output, obtained by +adding ‘--verbose=3’ to the Stow command line). +
+ +

If you are really keen, consider developing a minimal test case and +creating a new test. See the t/ directory in the source for +lots of examples. + +

Before reporting a bug, please read the manual carefully, especially +Known Bugs, to see whether you're encountering +something that doesn't need reporting. +(see Conflicts). + + + + diff --git a/.local/share/doc/stow/manual-split/Resource-Files.html b/.local/share/doc/stow/manual-split/Resource-Files.html new file mode 100644 index 0000000..7abb7fc --- /dev/null +++ b/.local/share/doc/stow/manual-split/Resource-Files.html @@ -0,0 +1,108 @@ + + +Resource Files - Stow + + + + + + + + + + + + +

+ +

+Next: , +Previous: Target Maintenance, +Up: Top +


+
+ +

11 Resource Files

+ +

+Default command line options may be set in .stowrc (current directory) or +~/.stowrc (home directory). These are parsed in that order, and effectively +prepended to you command line. This feature can be used for some interesting +effects. + +

For example, suppose your site uses more than one stow directory, perhaps in +order to share around responsibilities with a number of systems +administrators. One of the administrators might have the following in their +~/.stowrc file: + +

     --dir=/usr/local/stow2
+     --target=/usr/local
+     --ignore='~'
+     --ignore='^CVS'
+
+

so that the stow command will default to operating on the +/usr/local/stow2 directory, with /usr/local as the +target, and ignoring vi backup files and CVS directories. + +

If you had a stow directory /usr/local/stow/perl-extras that +was only used for Perl modules, then you might place the following in +/usr/local/stow/perl-extras/.stowrc: + +

     --dir=/usr/local/stow/perl-extras
+     --target=/usr/local
+     --override=bin
+     --override=man
+     --ignore='perllocal\.pod'
+     --ignore='\.packlist'
+     --ignore='\.bs'
+
+

so that when you are in the /usr/local/stow/perl-extras +directory, stow will regard any subdirectories as stow +packages, with /usr/local as the target (rather than the +immediate parent directory /usr/local/stow), overriding any +pre-existing links to bin files or man pages, and ignoring some cruft +that gets installed by default. + + + + diff --git a/.local/share/doc/stow/manual-split/Target-Maintenance.html b/.local/share/doc/stow/manual-split/Target-Maintenance.html new file mode 100644 index 0000000..d283e35 --- /dev/null +++ b/.local/share/doc/stow/manual-split/Target-Maintenance.html @@ -0,0 +1,98 @@ + + +Target Maintenance - Stow + + + + + + + + + + + + +

+ +

+Next: , +Previous: Multiple Stow Directories, +Up: Top +


+
+ +

10 Target Maintenance

+ +

From time to time you will need to clean up your target tree. Since +version 2, Stow provides a new utility chkstow to help with +this. It includes three operational modes which performs checks that +would generally be too expensive to be performed during normal stow +execution. + +

The syntax of the chkstow command is: + +

     chkstow [options]
+
+

The following options are supported: + +

+
-t dir
--target=dir
Set the target directory to dir instead of the parent of the stow +directory. Defaults to the parent of the stow directory, so it is typical to +execute stow from the directory /usr/local/stow. + +
-b
--badlinks
Checks target directory for bogus symbolic links. That is, links that point to +non-existent files. + +
-a
--aliens
Checks for files in the target directory that are not symbolic links. The +target directory should be managed by stow alone, except for directories that +contain a .stow file. + +
-l
--list
Will display the target package for every symbolic link in the stow target +directory. + +
+ + + + diff --git a/.local/share/doc/stow/manual-split/Terminology.html b/.local/share/doc/stow/manual-split/Terminology.html new file mode 100644 index 0000000..a7b403e --- /dev/null +++ b/.local/share/doc/stow/manual-split/Terminology.html @@ -0,0 +1,113 @@ + + +Terminology - Stow + + + + + + + + + + + + +
+ +

+Next: , +Previous: Introduction, +Up: Top +


+
+ +

2 Terminology

+ +

A package is a related collection of files and directories that +you wish to administer as a unit — e.g., Perl or Emacs — and that needs +to be installed in a particular directory structure — e.g., with +bin, lib, and man subdirectories. + +

A target directory is the root of a tree in which one or more +packages wish to appear to be installed. A common, but by no +means the only such location is /usr/local. The examples in this +manual will use /usr/local as the target directory. + +

A stow directory is the root of a tree containing separate +packages in private subtrees. When Stow runs, it uses the current +directory as the default stow directory. The examples in this manual +will use /usr/local/stow as the stow directory, so that +individual packages will be, for example, /usr/local/stow/perl +and /usr/local/stow/emacs. + +

An installation image is the layout of files and directories +required by a package, relative to the target directory. Thus, the +installation image for Perl includes: a bin directory containing +perl and a2p (among others); an info directory +containing Texinfo documentation; a lib/perl directory containing +Perl libraries; and a man/man1 directory containing man pages. + +

A package directory is the root of a tree containing the +installation image for a particular package. Each package directory +must reside in a stow directory — e.g., the package directory +/usr/local/stow/perl must reside in the stow directory +/usr/local/stow. The name of a package is the name of its +directory within the stow directory — e.g., perl. + +

Thus, the Perl executable might reside in +/usr/local/stow/perl/bin/perl, where /usr/local is the +target directory, /usr/local/stow is the stow directory, +/usr/local/stow/perl is the package directory, and +bin/perl within is part of the installation image. + +

A symlink is a symbolic link. A symlink can be relative or +absolute. An absolute symlink names a full path; that is, one +starting from /. A relative symlink names a relative path; that +is, one not starting from /. The target of a relative symlink is +computed starting from the symlink's own directory. Stow only +creates relative symlinks. + + + + diff --git a/.local/share/doc/stow/manual-split/Tree-unfolding.html b/.local/share/doc/stow/manual-split/Tree-unfolding.html new file mode 100644 index 0000000..f9d21bf --- /dev/null +++ b/.local/share/doc/stow/manual-split/Tree-unfolding.html @@ -0,0 +1 @@ + diff --git a/.local/share/doc/stow/manual-split/Types-And-Syntax-Of-Ignore-Lists.html b/.local/share/doc/stow/manual-split/Types-And-Syntax-Of-Ignore-Lists.html new file mode 100644 index 0000000..879192c --- /dev/null +++ b/.local/share/doc/stow/manual-split/Types-And-Syntax-Of-Ignore-Lists.html @@ -0,0 +1,167 @@ + + +Types And Syntax Of Ignore Lists - Stow + + + + + + + + + + + + + +

+ +

4.2 Types And Syntax Of Ignore Lists

+ +

If you put Perl regular expressions, one per line, in a +.stow-local-ignore file within any top level package directory, +in which case any file or directory within that package matching any +of these regular expressions will be ignored. In the absence of this +package-specific ignore list, Stow will instead use the contents of +~/.stow-global-ignore, if it exists. If neither the +package-local or global ignore list exist, Stow will use its own +built-in default ignore list, which serves as a useful example of the +format of these ignore list files: + +

     # Comments and blank lines are allowed.
+     
+     RCS
+     .+,v
+     
+     CVS
+     \.\#.+       # CVS conflict files / emacs lock files
+     \.cvsignore
+     
+     \.svn
+     _darcs
+     \.hg
+     
+     \.git
+     \.gitignore
+     
+     .+~          # emacs backup files
+     \#.*\#       # emacs autosave files
+     
+     ^/README.*
+     ^/LICENSE.*
+     ^/COPYING
+
+

Stow first iterates through the chosen ignore list (built-in, global, +or package-local) as per above, stripping out comments (if you want to +include the ‘#’ symbol in a regular expression, escape it with a +blackslash) and blank lines, placing each regular expressions into one +of two sets depending on whether it contains the ‘/’ forward +slash symbol. + +

Then in order to determine whether a file or directory should be +ignored: + +

    +
  1. Stow calculates its path relative to the top-level package directory, +prefixing that with ‘/’. If any of the regular expressions +containing a ‘/exactly1 match +a subpath2 of this relative path, then the file or +directory will be ignored. + +
  2. If none of the regular expressions containing a ‘/’ match in the +manner described above, Stow checks whether the +basename3 of the file or directory matches +exactly against the remaining regular expressions which do not +contain a ‘/’, and if so, ignores the file or directory. + +
  3. Otherwise, the file or directory is not ignored. +
+ + + +

For example, if a file bazqux is in the foo/bar +subdirectory of the package directory, Stow would use +‘/foo/bar/bazqux’ as the text for matching against regular +expressions which contain ‘/’, and ‘bazqux’ as the text for +matching against regular expressions which don't contain ‘/’. +Then regular expressions ‘bazqux’, ‘baz.*’, ‘.*qux’, +‘bar/.*x’, and ‘^/foo/.*qux’ would all match (causing the +file to be ignored), whereas ‘bar’, ‘baz’, ‘qux’, and +‘o/bar/b’ would not (although ‘bar’ would cause its parent +directory to be ignored and prevent Stow from recursing into that +anyway, in which case the file bazqux would not even be +considered for stowing). + +

As a special exception to the above algorithm, any +.stow-local-ignore present in the top-level package directory +is always ignored, regardless of the contents of any ignore +list, because this file serves no purpose outside the stow directory. + + +

+
+

Footnotes

[1] Exact matching means the +regular expression is anchored at the beginning and end, in contrast +to unanchored regular expressions which will match a substring.

+ +

[2] In this context, “subpath” means a contiguous +subset of path segments; e.g for the relative path +one/two/three, there are six valid subpaths: one, +two, three, one/two, two/three, +one/two/three.

+ +

[3] The “basename” is the name of the file or +directory itself, excluding any directory path prefix - as returned by +the basename command.

+ +
+ + + diff --git a/.local/share/doc/stow/manual-split/index.html b/.local/share/doc/stow/manual-split/index.html new file mode 100644 index 0000000..e8dd536 --- /dev/null +++ b/.local/share/doc/stow/manual-split/index.html @@ -0,0 +1,164 @@ + + +Stow + + + + + + + + + + +

Stow

+ + + + + +
+ +

+Next: , +Up: (dir) +


+
+ +

Stow

+ + +

--- The Detailed Node Listing --- + +

Ignore Lists + +

+ +

Advice on changing compilation and installation parameters + +

+ + + + + diff --git a/.local/share/doc/stow/manual-split/tree-folding.html b/.local/share/doc/stow/manual-split/tree-folding.html new file mode 100644 index 0000000..cc06e05 --- /dev/null +++ b/.local/share/doc/stow/manual-split/tree-folding.html @@ -0,0 +1 @@ + diff --git a/.local/share/doc/stow/manual-split/tree-refolding.html b/.local/share/doc/stow/manual-split/tree-refolding.html new file mode 100644 index 0000000..5d17385 --- /dev/null +++ b/.local/share/doc/stow/manual-split/tree-refolding.html @@ -0,0 +1 @@ + diff --git a/.local/share/doc/stow/manual.pdf b/.local/share/doc/stow/manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..38eb34886cd4e19d68370865dc38beb0d4c992a3 GIT binary patch literal 257587 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

cKMS#5LDauZ?9iQT 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

ZGPS7qjJM#(cJX$HlM=C*5dpu(q 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 vEp9fnO(jEbH<|94Bo9gd{GWTIr" visits the Emacs manual, etc. + + In Emacs, you can click mouse button 2 on a menu item or cross reference + to select it. + +* Menu: + +System administration +* Stow: (stow). GNU Stow. diff --git a/.local/share/info/stow.info b/.local/share/info/stow.info new file mode 100644 index 0000000..0ee4e1d --- /dev/null +++ b/.local/share/info/stow.info @@ -0,0 +1,1585 @@ +This is doc/stow.info, produced by makeinfo version 4.13 from +./doc/stow.texi. + +This manual describes GNU Stow version 2.2.2 (9 November 2015), a +program for managing the installation of software packages. + + Software and documentation is copyrighted by the following: + + (C) 1993, 1994, 1995, 1996 Bob Glickstein +(C) 2000, 2001 Guillaume Morin +(C) 2007 Kahlil (Kal) Hodgson +(C) 2011 Adam Spiers + + Permission is granted to make and distribute verbatim copies of + this manual provided the copyright notice and this permission + notice are preserved on all copies. + + Permission is granted to copy and distribute modified versions of + this manual under the conditions for verbatim copying, provided + also that the section entitled "GNU General Public License" is + included with the modified manual, and provided that the entire + resulting derived work is distributed under the terms of a + permission notice identical to this one. + + Permission is granted to copy and distribute translations of this + manual into another language, under the above conditions for + modified versions, except that this permission notice may be + stated in a translation approved by the Free Software Foundation. + +INFO-DIR-SECTION System administration +START-INFO-DIR-ENTRY +* Stow: (stow). GNU Stow. +END-INFO-DIR-ENTRY + + +File: stow.info, Node: Top, Next: Introduction, Up: (dir) + +Stow +**** + +This manual describes GNU Stow 2.2.2 (9 November 2015), a program for +managing the installation of software packages. + +* Menu: + +* Introduction:: Description of Stow. +* Terminology:: Terms used by this manual. +* Invoking Stow:: Option summary. +* Ignore Lists:: Controlling what gets stowed. +* Installing Packages:: Using Stow to install. +* Deleting Packages:: Using Stow to uninstall. +* Conflicts:: When Stow can't stow. +* Mixing Operations:: Multiple actions per invocation. +* Multiple Stow Directories:: Further segregating software. +* Target Maintenance:: Cleaning up mistakes. +* Resource Files:: Setting default command line options. +* Compile-time vs Install-time:: Faking out `make install'. +* Bootstrapping:: When stow and perl are not yet stowed. +* Reporting Bugs:: How, what, where, and when to report. +* Known Bugs:: Don't report any of these. +* GNU General Public License:: Copying terms. +* Index:: Index of concepts. + + --- The Detailed Node Listing --- + +Ignore Lists + +* Motivation For Ignore Lists:: +* Types And Syntax Of Ignore Lists:: +* Justification For Yet Another Set Of Ignore Files:: + +Advice on changing compilation and installation parameters + +* GNU Emacs:: +* Other FSF Software:: +* Cygnus Software:: +* Perl and Perl 5 Modules:: + + +File: stow.info, Node: Introduction, Next: Terminology, Prev: Top, Up: Top + +1 Introduction +************** + +Stow is a tool for managing the installation of multiple software +packages in the same run-time directory tree. One historical difficulty +of this task has been the need to administer, upgrade, install, and +remove files in independent packages without confusing them with other +files sharing the same file system space. For instance, it is common to +install Perl and Emacs in `/usr/local'. When one does so, one winds up +with the following files(1) in `/usr/local/man/man1': + + a2p.1 + ctags.1 + emacs.1 + etags.1 + h2ph.1 + perl.1 + s2p.1 + +Now suppose it's time to uninstall Perl. Which man pages get removed? +Obviously `perl.1' is one of them, but it should not be the +administrator's responsibility to memorize the ownership of individual +files by separate packages. + + The approach used by Stow is to install each package into its own +tree, then use symbolic links to make it appear as though the files are +installed in the common tree. Administration can be performed in the +package's private tree in isolation from clutter from other packages. +Stow can then be used to update the symbolic links. The structure of +each private tree should reflect the desired structure in the common +tree; i.e. (in the typical case) there should be a `bin' directory +containing executables, a `man/man1' directory containing section 1 man +pages, and so on. + + Stow was inspired by Carnegie Mellon's Depot program, but is +substantially simpler and safer. Whereas Depot required database files +to keep things in sync, Stow stores no extra state between runs, so +there's no danger (as there was in Depot) of mangling directories when +file hierarchies don't match the database. Also unlike Depot, Stow will +never delete any files, directories, or links that appear in a Stow +directory (e.g., `/usr/local/stow/emacs'), so it's always possible to +rebuild the target tree (e.g., `/usr/local'). + + For information about the latest version of Stow, you can refer to +`http://www.gnu.org/software/stow/'. + + ---------- Footnotes ---------- + + (1) As of Perl 4.036 and Emacs 19.22. + + +File: stow.info, Node: Terminology, Next: Invoking Stow, Prev: Introduction, Up: Top + +2 Terminology +************* + + A "package" is a related collection of files and directories that +you wish to administer as a unit -- e.g., Perl or Emacs -- and that +needs to be installed in a particular directory structure -- e.g., with +`bin', `lib', and `man' subdirectories. + + A "target directory" is the root of a tree in which one or more +packages wish to _appear_ to be installed. A common, but by no means +the only such location is `/usr/local'. The examples in this manual +will use `/usr/local' as the target directory. + + A "stow directory" is the root of a tree containing separate +packages in private subtrees. When Stow runs, it uses the current +directory as the default stow directory. The examples in this manual +will use `/usr/local/stow' as the stow directory, so that individual +packages will be, for example, `/usr/local/stow/perl' and +`/usr/local/stow/emacs'. + + An "installation image" is the layout of files and directories +required by a package, relative to the target directory. Thus, the +installation image for Perl includes: a `bin' directory containing +`perl' and `a2p' (among others); an `info' directory containing Texinfo +documentation; a `lib/perl' directory containing Perl libraries; and a +`man/man1' directory containing man pages. + + A "package directory" is the root of a tree containing the +installation image for a particular package. Each package directory +must reside in a stow directory -- e.g., the package directory +`/usr/local/stow/perl' must reside in the stow directory +`/usr/local/stow'. The "name" of a package is the name of its +directory within the stow directory -- e.g., `perl'. + + Thus, the Perl executable might reside in +`/usr/local/stow/perl/bin/perl', where `/usr/local' is the target +directory, `/usr/local/stow' is the stow directory, +`/usr/local/stow/perl' is the package directory, and `bin/perl' within +is part of the installation image. + + A "symlink" is a symbolic link. A symlink can be "relative" or +"absolute". An absolute symlink names a full path; that is, one +starting from `/'. A relative symlink names a relative path; that is, +one not starting from `/'. The target of a relative symlink is +computed starting from the symlink's own directory. Stow only creates +relative symlinks. + + +File: stow.info, Node: Invoking Stow, Next: Ignore Lists, Prev: Terminology, Up: Top + +3 Invoking Stow +*************** + +The syntax of the `stow' command is: + + stow [OPTIONS] [ACTION FLAG] PACKAGE ... + +Each PACKAGE is the name of a package (e.g., `perl') in the stow +directory that we wish to install into (or delete from) the target +directory. The default action is to install the given packages, +although alternate actions may be specified by preceding the package +name(s) with an ACTION FLAG. + +The following options are supported: + +`-d DIR' +`--dir=DIR' + Set the stow directory to DIR. Defaults to the value of the + environment variable `STOW_DIR' if set, or the current directory + otherwise. + +`-t DIR' +`--target=DIR' + Set the target directory to DIR instead of the parent of the stow + directory. Defaults to the parent of the stow directory, so it is + typical to execute `stow' from the directory `/usr/local/stow'. + +`--ignore=REGEXP' + This (repeatable) option lets you suppress acting on files that + match the given perl regular expression. For example, using the + options + + --ignore='*.orig' --ignore='*.dist' + + will cause stow to ignore files ending in `.orig' or `.dist'. + + Note that the regular expression is anchored to the end of the + filename, because this is what you will want to do most of the + time. + + Also note that by default Stow automatically ignores a "sensible" + built-in list of files and directories such as `CVS', editor + backup files, and so on. *Note Ignore Lists::, for more details. + +`--defer=REGEXP' + This (repeatable) option avoids stowing a file matching the given + regular expression, if that file is already stowed by another + package. This is effectively the opposite of `--override'. + + (N.B. the name `--defer' was chosen in the sense that the package + currently being stowed is treated with lower precedence than any + already installed package, not in the sense that the operation is + being postponed to be run at a later point in time; do not confuse + this nomenclature with the wording used in *note Deferred + Operation::.) + + For example, the following options + + --defer=man --defer=info + + will cause stow to skip over pre-existing man and info pages. + + Equivalently, you could use `--defer='man|info'' since the + argument is just a Perl regex. + + Note that the regular expression is anchored to the beginning of + the path relative to the target directory, because this is what + you will want to do most of the time. + +`--override=REGEXP' + This (repeatable) option forces any file matching the regular + expression to be stowed, even if the file is already stowed to + another package. For example, the following options + + --override=man --override=info + + will permit stow to overwrite links that point to pre-existing man + and info pages that are owned by stow and would otherwise cause a + conflict. + + The regular expression is anchored to the beginning of the path + relative to the target directory, because this is what you will + want to do most of the time. + +`--no-folding' + This disables any further *note tree folding:: or *note tree + refolding::. If a new subdirectory is encountered whilst stowing + a new package, the subdirectory is created within the target, and + its contents are symlinked, rather than just creating a symlink + for the directory. If removal of symlinks whilst unstowing a + package causes a subtree to be foldable (i.e. only containing + symlinks to a single package), that subtree will not be removed + and replaced with a symlink. + +`--adopt' + *Warning!* This behaviour is specifically intended to alter the + contents of your stow directory. If you do not want that, this + option is not for you. + + When stowing, if a target is encountered which already exists but + is a plain file (and hence not owned by any existing stow + package), then normally Stow will register this as a conflict and + refuse to proceed. This option changes that behaviour so that the + file is moved to the same relative place within the package's + installation image within the stow directory, and then stowing + proceeds as before. So effectively, the file becomes adopted by + the stow package, without its contents changing. + + This is particularly useful when the stow package is under the + control of a version control system, because it allows files in + the target tree, with potentially different contents to the + equivalent versions in the stow package's installation image, to + be adopted into the package, then compared by running something + like `git diff ...' inside the stow package, and finally either + kept (e.g. via `git commit ...') or discarded (`git checkout HEAD + ...'). + +`-n' +`--no' +`--simulate' + Do not perform any operations that modify the file system; in + combination with `-v' can be used to merely show what would happen. + +`-v' +`--verbose[=N]' + Send verbose output to standard error describing what Stow is + doing. Verbosity levels are 0, 1, 2, and 3; 0 is the default. + Using `-v' or `--verbose' increases the verbosity by one; using + `--verbose=N' sets it to N. + +`-p' +`--compat' + Scan the whole target tree when unstowing. By default, only + directories specified in the "installation image" are scanned + during an unstow operation. Scanning the whole tree can be + prohibitive if your target tree is very large. This option + restores the legacy behaviour; however, the `--badlinks' option to + the `chkstow' utility may be a better way of ensuring that your + installation does not have any dangling symlinks (*note Target + Maintenance::). + +`-V' +`--version' + Show Stow version number, and exit. + +`-h' +`--help' + Show Stow command syntax, and exit. + + The following ACTION FLAGS are supported: + +`-D' +`--delete' + Delete (unstow) the package name(s) that follow this option from + the "target directory". This option may be repeated any number of + times. + +`-R' +`--restow' + Restow (first unstow, then stow again) the package names that + follow this option. This is useful for pruning obsolete symlinks + from the target tree after updating the software in a package. + This option may be repeated any number of times. + +`-S' + +`--stow' + explictly stow the package name(s) that follow this option. May be + omitted if you are not using the `-D' or `-R' options in the same + invocation. *Note Mixing Operations::, for details of when you + might like to use this feature. This option may be repeated any + number of times. + + +File: stow.info, Node: Ignore Lists, Next: Installing Packages, Prev: Invoking Stow, Up: Top + +4 Ignore Lists +************** + +* Menu: + +* Motivation For Ignore Lists:: +* Types And Syntax Of Ignore Lists:: +* Justification For Yet Another Set Of Ignore Files:: + + +File: stow.info, Node: Motivation For Ignore Lists, Next: Types And Syntax Of Ignore Lists, Prev: Ignore Lists, Up: Ignore Lists + +4.1 Motivation For Ignore Lists +=============================== + +In many situations, there will exist files under the package +directories which it would be undesirable to stow into the target +directory. For example, files related version control such as +`.gitignore', `CVS', `*,v' (RCS files) should typically not have +symlinks from the target tree pointing to them. Also there may be +files or directories relating to the build of the package which are not +needed at run-time. + + In these cases, it can be rather cumbersome to specify a `--ignore' +parameter for each file or directory to be ignored. This could be +worked around by ensuring the existence of `~/.stowrc' containing +multiple `--ignore' lines, or if a different set of files/directories +should be ignored depending on which stow package is involved, a +`.stowrc' file for each stow package, but this would require the user +to ensure that they were in the correct directory before invoking stow, +which would be tedious and error-prone. Furthermore, since Stow shifts +parameters from `.stowrc' onto ARGV at run-time, it could clutter up +the process table with excessively long parameter lists, or even worse, +exceed the operating system's limit for process arguments. + + Therefore in addition to `--ignore' parameters, Stow provides a way +to specify lists of files and directories to ignore. + + +File: stow.info, Node: Types And Syntax Of Ignore Lists, Next: Justification For Yet Another Set Of Ignore Files, Prev: Motivation For Ignore Lists, Up: Ignore Lists + +4.2 Types And Syntax Of Ignore Lists +==================================== + +If you put Perl regular expressions, one per line, in a +`.stow-local-ignore' file within any top level package directory, in +which case any file or directory within that package matching any of +these regular expressions will be ignored. In the absence of this +package-specific ignore list, Stow will instead use the contents of +`~/.stow-global-ignore', if it exists. If neither the package-local or +global ignore list exist, Stow will use its own built-in default ignore +list, which serves as a useful example of the format of these ignore +list files: + + # Comments and blank lines are allowed. + + RCS + .+,v + + CVS + \.\#.+ # CVS conflict files / emacs lock files + \.cvsignore + + \.svn + _darcs + \.hg + + \.git + \.gitignore + + .+~ # emacs backup files + \#.*\# # emacs autosave files + + ^/README.* + ^/LICENSE.* + ^/COPYING + + Stow first iterates through the chosen ignore list (built-in, global, +or package-local) as per above, stripping out comments (if you want to +include the `#' symbol in a regular expression, escape it with a +blackslash) and blank lines, placing each regular expressions into one +of two sets depending on whether it contains the `/' forward slash +symbol. + + Then in order to determine whether a file or directory should be +ignored: + + 1. Stow calculates its path relative to the top-level package + directory, prefixing that with `/'. If any of the regular + expressions containing a `/' _exactly_(1) match a subpath(2) of + this relative path, then the file or directory will be ignored. + + 2. If none of the regular expressions containing a `/' match in the + manner described above, Stow checks whether the _basename_(3) of + the file or directory matches _exactly_ against the remaining + regular expressions which do not contain a `/', and if so, ignores + the file or directory. + + 3. Otherwise, the file or directory is not ignored. + + For example, if a file `bazqux' is in the `foo/bar' subdirectory of +the package directory, Stow would use `/foo/bar/bazqux' as the text for +matching against regular expressions which contain `/', and `bazqux' as +the text for matching against regular expressions which don't contain +`/'. Then regular expressions `bazqux', `baz.*', `.*qux', `bar/.*x', +and `^/foo/.*qux' would all match (causing the file to be ignored), +whereas `bar', `baz', `qux', and `o/bar/b' would not (although `bar' +would cause its parent directory to be ignored and prevent Stow from +recursing into that anyway, in which case the file `bazqux' would not +even be considered for stowing). + + As a special exception to the above algorithm, any +`.stow-local-ignore' present in the top-level package directory is +_always_ ignored, regardless of the contents of any ignore list, +because this file serves no purpose outside the stow directory. + + ---------- Footnotes ---------- + + (1) Exact matching means the regular expression is anchored at the +beginning and end, in contrast to unanchored regular expressions which +will match a substring. + + (2) In this context, "subpath" means a contiguous subset of path +segments; e.g for the relative path `one/two/three', there are six +valid subpaths: `one', `two', `three', `one/two', `two/three', +`one/two/three'. + + (3) The "basename" is the name of the file or directory itself, +excluding any directory path prefix - as returned by the `basename' +command. + + +File: stow.info, Node: Justification For Yet Another Set Of Ignore Files, Prev: Types And Syntax Of Ignore Lists, Up: Ignore Lists + +4.3 Justification For Yet Another Set Of Ignore Files +===================================================== + +The reader may note that this format is very similar to existing ignore +list file formats, such as those for `cvs', `git', `rsync' etc., and +wonder if another set of ignore lists is justified. However there are +good reasons why Stow does not simply check for the presence of say, +`.cvsignore', and use that if it exists. Firstly, there is no +guarantee that a stow package would contain any version control +meta-data, or permit introducing this if it didn't already exist. + + Secondly even if it did, version control system ignore lists +generally reflect _build-time_ ignores rather than _install-time_, and +there may be some intermediate or temporary files on those ignore lists +generated during development or at build-time which it would be +inappropriate to stow, even though many files generated at build-time +(binaries, libraries, documentation etc.) certainly do need to be +stowed. Similarly, if a file is _not_ in the version control system's +ignore list, there is no way of knowing whether the file is intended +for end use, let alone whether the version control system is tracking +it or not. + + Therefore it seems clear that ignore lists provided by version +control systems do not provide sufficient information for Stow to +determine which files and directories to stow, and so it makes sense +for Stow to support independent ignore lists. + + +File: stow.info, Node: Installing Packages, Next: Deleting Packages, Prev: Ignore Lists, Up: Top + +5 Installing Packages +********************* + +The default action of Stow is to install a package. This means creating +symlinks in the target tree that point into the package tree. Stow +attempts to do this with as few symlinks as possible; in other words, if +Stow can create a single symlink that points to an entire subtree within +the package tree, it will choose to do that rather than create a +directory in the target tree and populate it with symlinks. + +5.1 Tree folding +================ + +For example, suppose that no packages have yet been installed in +`/usr/local'; it's completely empty (except for the `stow' +subdirectory, of course). Now suppose the Perl package is installed. +Recall that it includes the following directories in its installation +image: `bin'; `info'; `lib/perl'; `man/man1'. Rather than creating +the directory `/usr/local/bin' and populating it with symlinks to +`../stow/perl/bin/perl' and `../stow/perl/bin/a2p' (and so on), Stow +will create a single symlink, `/usr/local/bin', which points to +`stow/perl/bin'. In this way, it still works to refer to +`/usr/local/bin/perl' and `/usr/local/bin/a2p', and fewer symlinks have +been created. This is called "tree folding", since an entire subtree +is "folded" into a single symlink. + + To complete this example, Stow will also create the symlink +`/usr/local/info' pointing to `stow/perl/info'; the symlink +`/usr/local/lib' pointing to `stow/perl/lib'; and the symlink +`/usr/local/man' pointing to `stow/perl/man'. + + Now suppose that instead of installing the Perl package into an empty +target tree, the target tree is not empty to begin with. Instead, it +contains several files and directories installed under a different +system-administration philosophy. In particular, `/usr/local/bin' +already exists and is a directory, as are `/usr/local/lib' and +`/usr/local/man/man1'. In this case, Stow will descend into +`/usr/local/bin' and create symlinks to `../stow/perl/bin/perl' and +`../stow/perl/bin/a2p' (etc.), and it will descend into +`/usr/local/lib' and create the tree-folding symlink `perl' pointing to +`../stow/perl/lib/perl', and so on. As a rule, Stow only descends as +far as necessary into the target tree when it can create a tree-folding +symlink. However, this behaviour can be changed via the `--no-folding' +option; *note Invoking Stow::. + +5.2 Tree unfolding +================== + +The time often comes when a tree-folding symlink has to be undone +because another package uses one or more of the folded subdirectories in +its installation image. This operation is called "splitting open" or +"unfolding" a folded tree. It involves removing the original symlink +from the target tree, creating a true directory in its place, and then +populating the new directory with symlinks to the newly-installed +package _and_ to the old package that used the old symlink. For +example, suppose that after installing Perl into an empty `/usr/local', +we wish to install Emacs. Emacs's installation image includes a `bin' +directory containing the `emacs' and `etags' executables, among others. +Stow must make these files appear to be installed in `/usr/local/bin', +but presently `/usr/local/bin' is a symlink to `stow/perl/bin'. Stow +therefore takes the following steps: the symlink `/usr/local/bin' is +deleted; the directory `/usr/local/bin' is created; links are made from +`/usr/local/bin' to `../stow/emacs/bin/emacs' and +`../stow/emacs/bin/etags'; and links are made from `/usr/local/bin' to +`../stow/perl/bin/perl' and `../stow/perl/bin/a2p'. + +5.3 Ownership +============= + +When splitting open a folded tree, Stow makes sure that the symlink it +is about to remove points inside a valid package in the current stow +directory. _Stow will never delete anything that it doesn't own_. +Stow "owns" everything living in the target tree that points into a +package in the stow directory. Anything Stow owns, it can recompute if +lost: symlinks that point into a package in the stow directory, or +directories that only contain symlinks that stow "owns". Note that by +this definition, Stow doesn't "own" anything _in_ the stow directory or +in any of the packages. + +5.4 Conflicts during installation +================================= + +If Stow needs to create a directory or a symlink in the target tree and +it cannot because that name is already in use and is not owned by Stow, +then a "conflict" has arisen. *Note Conflicts::. + + +File: stow.info, Node: Deleting Packages, Next: Conflicts, Prev: Installing Packages, Up: Top + +6 Deleting Packages +******************* + +When the `-D' option is given, the action of Stow is to delete a +package from the target tree. Note that Stow will not delete anything +it doesn't "own". Deleting a package does _not_ mean removing it from +the stow directory or discarding the package tree. + + To delete a package, Stow recursively scans the target tree, +skipping over any directory that is not included in the installation +image.(1) For example, if the target directory is `/usr/local' and the +installation image for the package being deleted has only a `bin' +directory and a `man' directory at the top level, then we only scan +`/usr/local/bin' and `/usr/local/bin/man', and not `/usr/local/lib' or +`/usr/local/share', or for that matter `/usr/local/stow'. Any symlink +it finds that points into the package being deleted is removed. Any +directory that contained only symlinks to the package being deleted is +removed. + +6.1 Refolding "foldable" trees. +=============================== + +After removing symlinks and empty subdirectories, any directory that +contains only symlinks to a single other package is considered to be a +previously "folded" tree that was "split open." Stow will refold the +tree by removing the symlinks to the surviving package, removing the +directory, then linking the directory back to the surviving package. +However, this behaviour can be prevented via the `--no-folding' option; +*note Invoking Stow::. + + ---------- Footnotes ---------- + + (1) This approach was introduced in version 2 of GNU Stow. +Previously, the whole target tree was scanned and stow directories were +explicitly omitted. This became problematic when dealing with very +large installations. The only situation where this is useful is if you +accidentally delete a directory in the package tree, leaving you with a +whole bunch of dangling links. Note that you can enable the old +approach with the `-p' option. Alternatively, you can use the +`--badlinks' option get stow to search for dangling links in your +target tree and remove the offenders manually. + + +File: stow.info, Node: Conflicts, Next: Mixing Operations, Prev: Deleting Packages, Up: Top + +7 Conflicts +*********** + +If, during installation, a file or symlink exists in the target tree and +has the same name as something Stow needs to create, and if the +existing name is not a folded tree that can be split open, then a +"conflict" has arisen. A conflict also occurs if a directory exists +where Stow needs to place a symlink to a non-directory. On the other +hand, if the existing name is merely a symlink that already points +where Stow needs it to, then no conflict has occurred. (Thus it is +harmless to install a package that has already been installed.) + + For complex packages, scanning the stow and target trees in tandem, +and deciding whether to make directories or links, split-open or fold +directories, can actually take a long time (a number of seconds). +Moreover, an accurate analysis of potential conflicts requires us to +take into account all of these operations. + +7.1 Deferred Operation +====================== + +Since version 2.0, Stow now adopts a two-phase algorithm, first +scanning for any potential conflicts before any stowing or unstowing +operations are performed. If any conflicts are found, they are +displayed and then Stow terminates without making any modifications to +the filesystem. This means that there is much less risk of a package +being partially stowed or unstowed due to conflicts. + + Prior to version 2.0, if a conflict was discovered, the stow or +unstow operation could be aborted mid-flow, leaving the target tree in +an inconsistent state. + + +File: stow.info, Node: Mixing Operations, Next: Multiple Stow Directories, Prev: Conflicts, Up: Top + +8 Mixing Operations +******************* + +Since version 2.0, multiple distinct actions can be specified in a +single invocation of GNU Stow. For example, to update an installation +of Emacs from version 21.3 to 21.4a you can now do the following: + + stow -D emacs-21.3 -S emacs-21.4a + +which will replace emacs-21.3 with emacs-21.4a using a single +invocation. + + This is much faster and cleaner than performing two separate +invocations of stow, because redundant folding/unfolding operations can +be factored out. In addition, all the operations are calculated and +merged before being executed (*note Deferred Operation::), so the +amount of of time in which GNU Emacs is unavailable is minimised. + + You can mix and match any number of actions, for example, + + stow -S pkg1 pkg2 -D pkg3 pkg4 -S pkg5 -R pkg6 + +will unstow pkg3, pkg4 and pkg6, then stow pkg1, pkg2, pkg5 and pkg6. + + +File: stow.info, Node: Multiple Stow Directories, Next: Target Maintenance, Prev: Mixing Operations, Up: Top + +9 Multiple Stow Directories +*************************** + +If there are two or more system administrators who wish to maintain +software separately, or if there is any other reason to want two or more +stow directories, it can be done by creating a file named `.stow' in +each stow directory. The presence of `/usr/local/foo/.stow' informs +Stow that, though `foo' is not the current stow directory, even if it +is a subdirectory of the target directory, nevertheless it is _a_ stow +directory and as such Stow doesn't "own" anything in it (*note +Installing Packages::). This will protect the contents of `foo' from a +`stow -D', for instance. + + When multiple stow directories share a target tree, if a tree-folding +symlink is encountered and needs to be split open during an +installation, as long as the top-level stow directory into which the +existing symlink points contains `.stow', Stow knows how to split open +the tree in the correct manner. + + +File: stow.info, Node: Target Maintenance, Next: Resource Files, Prev: Multiple Stow Directories, Up: Top + +10 Target Maintenance +********************* + +From time to time you will need to clean up your target tree. Since +version 2, Stow provides a new utility `chkstow' to help with this. It +includes three operational modes which performs checks that would +generally be too expensive to be performed during normal stow execution. + + The syntax of the `chkstow' command is: + + chkstow [OPTIONS] + +The following options are supported: + +`-t DIR' +`--target=DIR' + Set the target directory to DIR instead of the parent of the stow + directory. Defaults to the parent of the stow directory, so it is + typical to execute `stow' from the directory `/usr/local/stow'. + +`-b' +`--badlinks' + Checks target directory for bogus symbolic links. That is, links + that point to non-existent files. + +`-a' +`--aliens' + Checks for files in the target directory that are not symbolic + links. The target directory should be managed by stow alone, + except for directories that contain a `.stow' file. + +`-l' +`--list' + Will display the target package for every symbolic link in the + stow target directory. + + + +File: stow.info, Node: Resource Files, Next: Compile-time vs Install-time, Prev: Target Maintenance, Up: Top + +11 Resource Files +***************** + +Default command line options may be set in `.stowrc' (current +directory) or `~/.stowrc' (home directory). These are parsed in that +order, and effectively prepended to you command line. This feature can +be used for some interesting effects. + + For example, suppose your site uses more than one stow directory, +perhaps in order to share around responsibilities with a number of +systems administrators. One of the administrators might have the +following in their `~/.stowrc' file: + + --dir=/usr/local/stow2 + --target=/usr/local + --ignore='~' + --ignore='^CVS' + + so that the `stow' command will default to operating on the +`/usr/local/stow2' directory, with `/usr/local' as the target, and +ignoring vi backup files and CVS directories. + + If you had a stow directory `/usr/local/stow/perl-extras' that was +only used for Perl modules, then you might place the following in +`/usr/local/stow/perl-extras/.stowrc': + + --dir=/usr/local/stow/perl-extras + --target=/usr/local + --override=bin + --override=man + --ignore='perllocal\.pod' + --ignore='\.packlist' + --ignore='\.bs' + + so that when you are in the `/usr/local/stow/perl-extras' directory, +`stow' will regard any subdirectories as stow packages, with +`/usr/local' as the target (rather than the immediate parent directory +`/usr/local/stow'), overriding any pre-existing links to bin files or +man pages, and ignoring some cruft that gets installed by default. + + +File: stow.info, Node: Compile-time vs Install-time, Next: Bootstrapping, Prev: Resource Files, Up: Top + +12 Compile-time vs Install-time +******************************* + +Software whose installation is managed with Stow needs to be installed +in one place (the package directory, e.g. `/usr/local/stow/perl') but +needs to appear to run in another place (the target tree, e.g., +`/usr/local'). Why is this important? What's wrong with Perl, for +instance, looking for its files in `/usr/local/stow/perl' instead of in +`/usr/local'? + + The answer is that there may be another package, e.g., +`/usr/local/stow/perl-extras', stowed under `/usr/local'. If Perl is +configured to find its files in `/usr/local/stow/perl', it will never +find the extra files in the `perl-extras' package, even though they're +intended to be found by Perl. On the other hand, if Perl looks for its +files in `/usr/local', then it will find the intermingled Perl and +`perl-extras' files. + + This means that when you compile a package, you must tell it the +location of the run-time, or target tree; but when you install it, you +must place it in the stow tree. + +12.1 Advice on changing compilation and installation parameters +=============================================================== + +Some software packages allow you to specify, at compile-time, separate +locations for installation and for run-time. Perl is one such package; +see *note Perl and Perl 5 Modules::. Others allow you to compile the +package, then give a different destination in the `make install' step +without causing the binaries or other files to get rebuilt. Most GNU +software falls into this category; Emacs is a notable exception. *Note +GNU Emacs::, and *note Other FSF Software::. + + Still other software packages cannot abide the idea of separate +installation and run-time locations at all. If you try to `make +install prefix=/usr/local/stow/FOO', then first the whole package will +be recompiled to hardwire the `/usr/local/stow/FOO' path. With these +packages, it is best to compile normally, then run `make -n install', +which should report all the steps needed to install the just-built +software. Place this output into a file, edit the commands in the file +to remove recompilation steps and to reflect the Stow-based +installation location, and execute the edited file as a shell script in +place of `make install'. Be sure to execute the script using the same +shell that `make install' would have used. + + (If you use GNU Make and a shell [such as GNU bash] that understands +`pushd' and `popd', you can do the following: + + 1. Replace all lines matching `make[N]: Entering directory DIR' with + `pushd DIR'. + + 2. Replace all lines matching `make[N]: Leaving directory DIR' with + `popd'. + + 3. Delete all lines matching `make[N]: Nothing to be done for RULE'. + + Then find other lines in the output containing `cd' or `make' +commands and rewrite or delete them. In particular, you should be able +to delete sections of the script that resemble this: + + for i in DIR_1 DIR_2 ...; do \ + (cd $i; make ARGS ...) \ + done + +Note, that's "should be able to," not "can." Be sure to modulate these +guidelines with plenty of your own intelligence. + + The details of stowing some specific packages are described in the +following sections. + +* Menu: + +* GNU Emacs:: +* Other FSF Software:: +* Cygnus Software:: +* Perl and Perl 5 Modules:: + + +File: stow.info, Node: GNU Emacs, Next: Other FSF Software, Prev: Compile-time vs Install-time, Up: Compile-time vs Install-time + +12.2 GNU Emacs +============== + +Although the Free Software Foundation has many enlightened practices +regarding Makefiles and software installation (see *note Other FSF +Software::), Emacs, its flagship program, doesn't quite follow the +rules. In particular, most GNU software allows you to write: + + make + make install prefix=/usr/local/stow/PACKAGE + +If you try this with Emacs, then the new value for PREFIX in the `make +install' step will cause some files to get recompiled with the new +value of PREFIX wired into them. In Emacs 19.23 and later,(1) the way +to work around this problem is: + + make + make install-arch-dep install-arch-indep prefix=/usr/local/stow/emacs + + In 19.22 and some prior versions of Emacs, the workaround was: + + make + make do-install prefix=/usr/local/stow/emacs + + ---------- Footnotes ---------- + + (1) As I write this, the current version of Emacs is 19.31. + + +File: stow.info, Node: Other FSF Software, Next: Cygnus Software, Prev: GNU Emacs, Up: Compile-time vs Install-time + +12.3 Other FSF Software +======================= + +The Free Software Foundation, the organization behind the GNU project, +has been unifying the build procedure for its tools for some time. +Thanks to its tools `autoconf' and `automake', most packages now +respond well to these simple steps, with no other intervention +necessary: + + ./configure OPTIONS + make + make install prefix=/usr/local/stow/PACKAGE + + Hopefully, these tools can evolve to be aware of Stow-managed +packages, such that providing an option to `configure' can allow `make' +and `make install' steps to work correctly without needing to "fool" +the build process. + + +File: stow.info, Node: Cygnus Software, Next: Perl and Perl 5 Modules, Prev: Other FSF Software, Up: Compile-time vs Install-time + +12.4 Cygnus Software +==================== + +Cygnus is a commercial supplier and supporter of GNU software. It has +also written several of its own packages, released under the terms of +the GNU General Public License; and it has taken over the maintenance of +other packages. Among the packages released by Cygnus are `gdb', +`gnats', and `dejagnu'. + + Cygnus packages have the peculiarity that each one unpacks into a +directory tree with a generic top-level Makefile, which is set up to +compile _all_ of Cygnus' packages, any number of which may reside under +the top-level directory. In other words, even if you're only building +`gnats', the top-level Makefile will look for, and try to build, `gdb' +and `dejagnu' subdirectories, among many others. + + The result is that if you try `make -n install +prefix=/usr/local/stow/PACKAGE' at the top level of a Cygnus package, +you'll get a bewildering amount of output. It will then be very +difficult to visually scan the output to see whether the install will +proceed correctly. Unfortunately, it's not always clear how to invoke +an install from the subdirectory of interest. + + In cases like this, the best approach is to run your `make install +prefix=...', but be ready to interrupt it if you detect that it is +recompiling files. Usually it will work just fine; otherwise, install +manually. + + +File: stow.info, Node: Perl and Perl 5 Modules, Prev: Cygnus Software, Up: Compile-time vs Install-time + +12.5 Perl and Perl 5 Modules +============================ + +Perl 4.036 allows you to specify different locations for installation +and for run-time. It is the only widely-used package in this author's +experience that allows this, though hopefully more packages will adopt +this model. + + Unfortunately, the authors of Perl believed that only AFS sites need +this ability. The configuration instructions for Perl 4 misleadingly +state that some occult means are used under AFS to transport files from +their installation tree to their run-time tree. In fact, that confusion +arises from the fact that Depot, Stow's predecessor, originated at +Carnegie Mellon University, which was also the birthplace of AFS. CMU's +need to separate install-time and run-time trees stemmed from its use of +Depot, not from AFS. + + The result of this confusion is that Perl 5's configuration script +doesn't even offer the option of separating install-time and run-time +trees _unless_ you're running AFS. Fortunately, after you've entered +all the configuration settings, Perl's setup script gives you the +opportunity to edit those settings in a file called `config.sh'. When +prompted, you should edit this file and replace occurrences of + + inst.../usr/local... + +with + + inst.../usr/local/stow/perl... + +You can do this with the following Unix command: + + sed 's,^\(inst.*/usr/local\),\1/stow/perl,' config.sh > config.sh.new + mv config.sh.new config.sh + + Hopefully, the Perl authors will correct this deficiency in Perl 5's +configuration mechanism. + + Perl 5 modules--i.e., extensions to Perl 5--generally conform to a +set of standards for building and installing them. The standard says +that the package comes with a top-level `Makefile.PL', which is a Perl +script. When it runs, it generates a `Makefile'. + + If you followed the instructions above for editing `config.sh' when +Perl was built, then when you create a `Makefile' from a `Makefile.PL', +it will contain separate locations for run-time (`/usr/local') and +install-time (`/usr/local/stow/perl'). Thus you can do + + perl Makefile.PL + make + make install + +and the files will be installed into `/usr/local/stow/perl'. However, +you might prefer each Perl module to be stowed separately. In that +case, you must edit the resulting Makefile, replacing +`/usr/local/stow/perl' with `/usr/local/stow/MODULE'. The best way to +do this is: + + perl Makefile.PL + find . -name Makefile -print | \ + xargs perl -pi~ -e 's,^(INST.*/stow)/perl,$1/MODULE,;' + make + make install + +(The use of `find' and `xargs' ensures that all Makefiles in the +module's source tree, even those in subdirectories, get edited.) A +good convention to follow is to name the stow directory for a Perl +MODULE `cpan.MODULE', where `cpan' stands for Comprehensive Perl +Archive Network, a collection of FTP sites that is the source of most +Perl 5 extensions. This way, it's easy to tell at a glance which of +the subdirectories of `/usr/local/stow' are Perl 5 extensions. + + When you stow separate Perl 5 modules separately, you are likely to +encounter conflicts (*note Conflicts::) with files named `.exists' and +`perllocal.pod'. One way to work around this is to remove those files +before stowing the module. If you use the `cpan.MODULE' naming +convention, you can simply do this: + + cd /usr/local/stow + find cpan.* \( -name .exists -o -name perllocal.pod \) -print | \ + xargs rm + + +File: stow.info, Node: Bootstrapping, Next: Reporting Bugs, Prev: Compile-time vs Install-time, Up: Top + +13 Bootstrapping +**************** + +Suppose you have a stow directory all set up and ready to go: +`/usr/local/stow/perl' contains the Perl installation, +`/usr/local/stow/stow' contains Stow itself, and perhaps you have other +packages waiting to be stowed. You'd like to be able to do this: + + cd /usr/local/stow + stow -vv * + +but `stow' is not yet in your `PATH'. Nor can you do this: + + cd /usr/local/stow + stow/bin/stow -vv * + +because the `#!' line at the beginning of `stow' tries to locate Perl +(usually in `/usr/local/bin/perl'), and that won't be found. The +solution you must use is: + + cd /usr/local/stow + perl/bin/perl stow/bin/stow -vv * + + +File: stow.info, Node: Reporting Bugs, Next: Known Bugs, Prev: Bootstrapping, Up: Top + +14 Reporting Bugs +***************** + +Please send bug reports to the current maintainers by electronic mail. +The address to use is `'. Please include: + + * the version number of Stow (`stow --version'); + + * the version number of Perl (`perl -v'); + + * the system information, which can often be obtained with `uname + -a'; + + * a description of the bug; + + * the precise command you gave; + + * the output from the command (preferably verbose output, obtained by + adding `--verbose=3' to the Stow command line). + + If you are really keen, consider developing a minimal test case and +creating a new test. See the `t/' directory in the source for lots of +examples. + + Before reporting a bug, please read the manual carefully, especially +*note Known Bugs::, to see whether you're encountering something that +doesn't need reporting. (*note Conflicts::). + + +File: stow.info, Node: Known Bugs, Next: GNU General Public License, Prev: Reporting Bugs, Up: Top + +15 Known Bugs +************* + +There are no known bugs in Stow version 2.2.2! If you think you have +found one, please *note Reporting Bugs::. + + +File: stow.info, Node: GNU General Public License, Next: Index, Prev: Known Bugs, Up: Top + +GNU General Public License +************************** + + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +Preamble +======== + +The licenses for most software are designed to take away your freedom +to share and change it. By contrast, the GNU General Public License is +intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it in +new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, +and (2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed + under the terms of this General Public License. The "Program", + below, refers to any such program or work, and a "work based on + the Program" means either the Program or any derivative work under + copyright law: that is to say, a work containing the Program or a + portion of it, either verbatim or with modifications and/or + translated into another language. (Hereinafter, translation is + included without limitation in the term "modification".) Each + licensee is addressed as "you". + + Activities other than copying, distribution and modification are + not covered by this License; they are outside its scope. The act + of running the Program is not restricted, and the output from the + Program is covered only if its contents constitute a work based on + the Program (independent of having been made by running the + Program). Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's + source code as you receive it, in any medium, provided that you + conspicuously and appropriately publish on each copy an appropriate + copyright notice and disclaimer of warranty; keep intact all the + notices that refer to this License and to the absence of any + warranty; and give any other recipients of the Program a copy of + this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, + and you may at your option offer warranty protection in exchange + for a fee. + + 2. You may modify your copy or copies of the Program or any portion + of it, thus forming a work based on the Program, and copy and + distribute such modifications or work under the terms of Section 1 + above, provided that you also meet all of these conditions: + + a. You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b. You must cause any work that you distribute or publish, that + in whole or in part contains or is derived from the Program + or any part thereof, to be licensed as a whole at no charge + to all third parties under the terms of this License. + + c. If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display + an announcement including an appropriate copyright notice and + a notice that there is no warranty (or else, saying that you + provide a warranty) and that users may redistribute the + program under these conditions, and telling the user how to + view a copy of this License. (Exception: if the Program + itself is interactive but does not normally print such an + announcement, your work based on the Program is not required + to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the + Program, and can be reasonably considered independent and separate + works in themselves, then this License, and its terms, do not + apply to those sections when you distribute them as separate + works. But when you distribute the same sections as part of a + whole which is a work based on the Program, the distribution of + the whole must be on the terms of this License, whose permissions + for other licensees extend to the entire whole, and thus to each + and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or + contest your rights to work written entirely by you; rather, the + intent is to exercise the right to control the distribution of + derivative or collective works based on the Program. + + In addition, mere aggregation of another work not based on the + Program with the Program (or with a work based on the Program) on + a volume of a storage or distribution medium does not bring the + other work under the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms + of Sections 1 and 2 above provided that you also do one of the + following: + + a. Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Sections 1 and 2 above on a medium customarily used for + software interchange; or, + + b. Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a + medium customarily used for software interchange; or, + + c. Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with + such an offer, in accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete + source code means all the source code for all modules it contains, + plus any associated interface definition files, plus the scripts + used to control compilation and installation of the executable. + However, as a special exception, the source code distributed need + not include anything that is normally distributed (in either + source or binary form) with the major components (compiler, + kernel, and so on) of the operating system on which the executable + runs, unless that component itself accompanies the executable. + + If distribution of executable or object code is made by offering + access to copy from a designated place, then offering equivalent + access to copy the source code from the same place counts as + distribution of the source code, even though third parties are not + compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense or distribute the Program is + void, and will automatically terminate your rights under this + License. However, parties who have received copies, or rights, + from you under this License will not have their licenses + terminated so long as such parties remain in full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify + or distribute the Program or its derivative works. These actions + are prohibited by law if you do not accept this License. + Therefore, by modifying or distributing the Program (or any work + based on the Program), you indicate your acceptance of this + License to do so, and all its terms and conditions for copying, + distributing or modifying the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program + subject to these terms and conditions. You may not impose any + further restrictions on the recipients' exercise of the rights + granted herein. You are not responsible for enforcing compliance + by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent + issues), conditions are imposed on you (whether by court order, + agreement or otherwise) that contradict the conditions of this + License, they do not excuse you from the conditions of this + License. If you cannot distribute so as to satisfy simultaneously + your obligations under this License and any other pertinent + obligations, then as a consequence you may not distribute the + Program at all. For example, if a patent license would not permit + royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only + way you could satisfy both it and this License would be to refrain + entirely from distribution of the Program. + + If any portion of this section is held invalid or unenforceable + under any particular circumstance, the balance of the section is + intended to apply and the section as a whole is intended to apply + in other circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of + any such claims; this section has the sole purpose of protecting + the integrity of the free software distribution system, which is + implemented by public license practices. Many people have made + generous contributions to the wide range of software distributed + through that system in reliance on consistent application of that + system; it is up to the author/donor to decide if he or she is + willing to distribute software through any other system and a + licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed + to be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, + the original copyright holder who places the Program under this + License may add an explicit geographical distribution limitation + excluding those countries, so that distribution is permitted only + in or among countries not thus excluded. In such case, this + License incorporates the limitation as if written in the body of + this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such + new versions will be similar in spirit to the present version, but + may differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the + Program specifies a version number of this License which applies + to it and "any later version", you have the option of following + the terms and conditions either of that version or of any later + version published by the Free Software Foundation. If the Program + does not specify a version number of this License, you may choose + any version ever published by the Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted + by the Free Software Foundation, write to the Free Software + Foundation; we sometimes make exceptions for this. Our decision + will be guided by the two goals of preserving the free status of + all derivatives of our free software and of promoting the sharing + and reuse of software generally. + + NO WARRANTY + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE + LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT + HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT + WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT + NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE + QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE + PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY + SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY + MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE + LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, + INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR + INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF + DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU + OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY + OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS +How to Apply These Terms to Your New Programs +============================================= + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + ONE LINE TO GIVE THE PROGRAM'S NAME AND AN IDEA OF WHAT IT DOES. + Copyright (C) 19YY NAME OF AUTHOR + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Also add information on how to contact you by electronic and paper +mail. + + If the program is interactive, make it output a short notice like +this when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details + type `show w'. This is free software, and you are welcome + to redistribute it under certain conditions; type `show c' + for details. + + The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + + You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the program, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright + interest in the program `Gnomovision' + (which makes passes at compilers) written + by James Hacker. + + SIGNATURE OF TY COON, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Library General Public License instead of this License. + + +File: stow.info, Node: Index, Prev: GNU General Public License, Up: Top + +Index +***** + +[index] +* Menu: + +* absolute symlink: Terminology. (line 43) +* adopting existing files: Invoking Stow. (line 97) +* configuration files: Resource Files. (line 6) +* conflicts <1>: Conflicts. (line 6) +* conflicts: Installing Packages. (line 85) +* deferred operation <1>: Mixing Operations. (line 15) +* deferred operation: Conflicts. (line 24) +* deletion: Deleting Packages. (line 6) +* directory folding: Installing Packages. (line 16) +* dry run: Invoking Stow. (line 120) +* folding trees: Installing Packages. (line 16) +* ignore lists <1>: Motivation For Ignore Lists. + (line 26) +* ignore lists: Ignore Lists. (line 6) +* ignoring files and directories: Ignore Lists. (line 6) +* installation: Installing Packages. (line 6) +* installation conflicts: Installing Packages. (line 85) +* installation image: Terminology. (line 23) +* maintenance: Target Maintenance. (line 6) +* mixing operations: Mixing Operations. (line 6) +* ownership: Installing Packages. (line 72) +* package: Terminology. (line 6) +* package directory: Terminology. (line 30) +* package name: Terminology. (line 30) +* refolding trees: Deleting Packages. (line 25) +* relative symlink: Terminology. (line 43) +* resource files: Resource Files. (line 6) +* simulated run: Invoking Stow. (line 120) +* splitting open folded trees: Installing Packages. (line 51) +* stow directory: Terminology. (line 16) +* symlink: Terminology. (line 43) +* target directory: Terminology. (line 11) +* tree folding: Installing Packages. (line 16) +* tree refolding: Deleting Packages. (line 25) +* tree unfolding: Installing Packages. (line 51) +* tree unsplitting: Installing Packages. (line 51) +* unfolding trees: Installing Packages. (line 51) +* verbosity levels: Invoking Stow. (line 126) + + + +Tag Table: +Node: Top1445 +Node: Introduction2967 +Ref: Introduction-Footnote-15130 +Node: Terminology5172 +Node: Invoking Stow7535 +Node: Ignore Lists14338 +Node: Motivation For Ignore Lists14602 +Node: Types And Syntax Of Ignore Lists16097 +Ref: Types And Syntax Of Ignore Lists-Footnote-119260 +Ref: Types And Syntax Of Ignore Lists-Footnote-219426 +Ref: Types And Syntax Of Ignore Lists-Footnote-319642 +Node: Justification For Yet Another Set Of Ignore Files19787 +Node: Installing Packages21385 +Ref: tree folding21947 +Ref: Tree unfolding23825 +Node: Deleting Packages25893 +Ref: tree refolding26925 +Ref: Deleting Packages-Footnote-127470 +Node: Conflicts28058 +Ref: Deferred Operation29044 +Node: Mixing Operations29645 +Node: Multiple Stow Directories30637 +Node: Target Maintenance31697 +Node: Resource Files32927 +Node: Compile-time vs Install-time34533 +Node: GNU Emacs37943 +Ref: GNU Emacs-Footnote-138928 +Node: Other FSF Software38992 +Node: Cygnus Software39753 +Node: Perl and Perl 5 Modules41232 +Node: Bootstrapping44787 +Node: Reporting Bugs45568 +Node: Known Bugs46547 +Node: GNU General Public License46795 +Node: Index65935 + +End Tag Table diff --git a/.local/share/man/man8/stow.8 b/.local/share/man/man8/stow.8 new file mode 100644 index 0000000..ff4542f --- /dev/null +++ b/.local/share/man/man8/stow.8 @@ -0,0 +1,508 @@ +.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +. ds C` +. ds C' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.\" +.\" Avoid warning from groff about undefined register 'F'. +.de IX +.. +.nr rF 0 +.if \n(.g .if rF .nr rF 1 +.if (\n(rF:(\n(.g==0)) \{ +. if \nF \{ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. if !\nF==2 \{ +. nr % 0 +. nr F 2 +. \} +. \} +.\} +.rr rF +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "IO::FILE=IO(0X81D9F0) 1" +.TH IO::FILE=IO(0X81D9F0) 1 "2015-11-09" "perl v5.20.1" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +stow \- software package installation manager +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +stow [ options ] package ... +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This manual page describes \s-1GNU\s0 Stow 2.2.2, a program for managing +the installation of software packages. This is not the definitive +documentation for stow; for that, see the info manual. +.PP +Stow is a tool for managing the installation of multiple software +packages in the same run-time directory tree. One historical +difficulty of this task has been the need to administer, upgrade, +install, and remove files in independent packages without confusing +them with other files sharing the same filesystem space. For instance, +it is common to install Perl and Emacs in \fI/usr/local\fR. When one +does so, one winds up (as of Perl 4.036 and Emacs 19.22) with the +following files in \fI/usr/local/man/man1\fR: \fIa2p.1\fR; \fIctags.1\fR; +\&\fIemacs.1\fR; \fIetags.1\fR; \fIh2ph.1\fR; \fIperl.1\fR; and \fIs2p.1\fR. Now +suppose it's time to uninstall Perl. Which man pages get removed? +Obviously \fIperl.1\fR is one of them, but it should not be the +administrator's responsibility to memorize the ownership of individual +files by separate packages. +.PP +The approach used by Stow is to install each package into its own +tree, then use symbolic links to make it appear as though the files +are installed in the common tree. Administration can be performed in +the package's private tree in isolation from clutter from other +packages. Stow can then be used to update the symbolic links. The +structure of each private tree should reflect the desired structure in +the common tree; i.e. (in the typical case) there should be a \fIbin\fR +directory containing executables, a \fIman/man1\fR directory containing +section 1 man pages, and so on. +.PP +Stow was inspired by Carnegie Mellon's Depot program, but is +substantially simpler and safer. Whereas Depot required database files +to keep things in sync, Stow stores no extra state between runs, so +there's no danger (as there was in Depot) of mangling directories when +file hierarchies don't match the database. Also unlike Depot, Stow +will never delete any files, directories, or links that appear in a +Stow directory (e.g., \fI/usr/local/stow/emacs\fR), so it's always +possible to rebuild the target tree (e.g., \fI/usr/local\fR). +.SH "TERMINOLOGY" +.IX Header "TERMINOLOGY" +A \*(L"package\*(R" is a related collection of files and directories that +you wish to administer as a unit \*(-- e.g., Perl or Emacs \*(-- and that +needs to be installed in a particular directory structure \*(-- e.g., +with \fIbin\fR, \fIlib\fR, and \fIman\fR subdirectories. +.PP +A \*(L"target directory\*(R" is the root of a tree in which one or more +packages wish to \fBappear\fR to be installed. A common, but by no means +the only such location is \fI/usr/local\fR. The examples in this manual +page will use \fI/usr/local\fR as the target directory. +.PP +A \*(L"stow directory\*(R" is the root of a tree containing separate +packages in private subtrees. When Stow runs, it uses the current +directory as the default stow directory. The examples in this manual +page will use \fI/usr/local/stow\fR as the stow directory, so that +individual packages will be, for example, \fI/usr/local/stow/perl\fR and +\&\fI/usr/local/stow/emacs\fR. +.PP +An \*(L"installation image\*(R" is the layout of files and directories +required by a package, relative to the target directory. Thus, the +installation image for Perl includes: a \fIbin\fR directory containing +\&\fIperl\fR and \fIa2p\fR (among others); an \fIinfo\fR directory containing +Texinfo documentation; a \fIlib/perl\fR directory containing Perl +libraries; and a \fIman/man1\fR directory containing man pages. +.PP +A \*(L"package directory\*(R" is the root of a tree containing the +installation image for a particular package. Each package directory +must reside in a stow directory \*(-- e.g., the package directory +\&\fI/usr/local/stow/perl\fR must reside in the stow directory +\&\fI/usr/local/stow\fR. The \*(L"name\*(R" of a package is the name of its +directory within the stow directory \*(-- e.g., \fIperl\fR. +.PP +Thus, the Perl executable might reside in +\&\fI/usr/local/stow/perl/bin/perl\fR, where \fI/usr/local\fR is the target +directory, \fI/usr/local/stow\fR is the stow directory, +\&\fI/usr/local/stow/perl\fR is the package directory, and \fIbin/perl\fR +within is part of the installation image. +.PP +A \*(L"symlink\*(R" is a symbolic link. A symlink can be \*(L"relative\*(R" or +\&\*(L"absolute\*(R". An absolute symlink names a full path; that is, one +starting from \fI/\fR. A relative symlink names a relative path; that +is, one not starting from \fI/\fR. The target of a relative symlink is +computed starting from the symlink's own directory. Stow only creates +relative symlinks. +.SH "OPTIONS" +.IX Header "OPTIONS" +The stow directory is assumed to be the value of the \f(CW\*(C`STOW_DIR\*(C'\fR +environment variable or if unset the current directory, and the target +directory is assumed to be the parent of the current directory (so it +is typical to execute \fIstow\fR from the directory \fI/usr/local/stow\fR). +Each \fIpackage\fR given on the command line is the name of a package in +the stow directory (e.g., \fIperl\fR). By default, they are installed +into the target directory (but they can be deleted instead using +\&\f(CW\*(C`\-D\*(C'\fR). +.IP "\-n" 4 +.IX Item "-n" +.PD 0 +.IP "\-\-no" 4 +.IX Item "--no" +.PD +Do not perform any operations that modify the filesystem; merely show +what would happen. +.IP "\-d \s-1DIR\s0" 4 +.IX Item "-d DIR" +.PD 0 +.IP "\-\-dir=DIR" 4 +.IX Item "--dir=DIR" +.PD +Set the stow directory to \f(CW\*(C`DIR\*(C'\fR instead of the current directory. +This also has the effect of making the default target directory be the +parent of \f(CW\*(C`DIR\*(C'\fR. +.IP "\-t \s-1DIR\s0" 4 +.IX Item "-t DIR" +.PD 0 +.IP "\-\-target=DIR" 4 +.IX Item "--target=DIR" +.PD +Set the target directory to \f(CW\*(C`DIR\*(C'\fR instead of the parent of the stow +directory. +.IP "\-v" 4 +.IX Item "-v" +.PD 0 +.IP "\-\-verbose[=N]" 4 +.IX Item "--verbose[=N]" +.PD +Send verbose output to standard error describing what Stow is +doing. Verbosity levels are 0, 1, 2, 3, and 4; 0 is the default. +Using \f(CW\*(C`\-v\*(C'\fR or \f(CW\*(C`\-\-verbose\*(C'\fR increases the verbosity by one; using +`\-\-verbose=N' sets it to N. +.IP "\-S" 4 +.IX Item "-S" +.PD 0 +.IP "\-\-stow" 4 +.IX Item "--stow" +.PD +Stow the packages that follow this option into the target directory. +This is the default action and so can be omitted if you are only +stowing packages rather than performing a mixture of +stow/delete/restow actions. +.IP "\-D" 4 +.IX Item "-D" +.PD 0 +.IP "\-\-delete" 4 +.IX Item "--delete" +.PD +Unstow the packages that follow this option from the target directory rather +than installing them. +.IP "\-R" 4 +.IX Item "-R" +.PD 0 +.IP "\-\-restow" 4 +.IX Item "--restow" +.PD +Restow packages (first unstow, then stow again). This is useful +for pruning obsolete symlinks from the target tree after updating +the software in a package. +.IP "\-\-adopt" 4 +.IX Item "--adopt" +\&\fBWarning!\fR This behaviour is specifically intended to alter the +contents of your stow directory. If you do not want that, this option +is not for you. +.Sp +When stowing, if a target is encountered which already exists but is a +plain file (and hence not owned by any existing stow package), then +normally Stow will register this as a conflict and refuse to proceed. +This option changes that behaviour so that the file is moved to the +same relative place within the package's installation image within the +stow directory, and then stowing proceeds as before. So effectively, +the file becomes adopted by the stow package, without its contents +changing. +.IP "\-\-no\-folding" 4 +.IX Item "--no-folding" +Disable folding of newly stowed directories when stowing, and +refolding of newly foldable directories when unstowing. +.IP "\-\-ignore=REGEX" 4 +.IX Item "--ignore=REGEX" +Ignore files ending in this Perl regex. +.IP "\-\-defer=REGEX" 4 +.IX Item "--defer=REGEX" +Don't stow files beginning with this Perl regex if the file is already +stowed to another package. +.IP "\-\-override=REGEX" 4 +.IX Item "--override=REGEX" +Force stowing files beginning with this Perl regex if the file is +already stowed to another package. +.IP "\-V" 4 +.IX Item "-V" +.PD 0 +.IP "\-\-version" 4 +.IX Item "--version" +.PD +Show Stow version number, and exit. +.IP "\-h" 4 +.IX Item "-h" +.PD 0 +.IP "\-\-help" 4 +.IX Item "--help" +.PD +Show Stow command syntax, and exit. +.SH "INSTALLING PACKAGES" +.IX Header "INSTALLING PACKAGES" +The default action of Stow is to install a package. This means +creating symlinks in the target tree that point into the package tree. +Stow attempts to do this with as few symlinks as possible; in other +words, if Stow can create a single symlink that points to an entire +subtree within the package tree, it will choose to do that rather than +create a directory in the target tree and populate it with symlinks. +.PP +For example, suppose that no packages have yet been installed in +\&\fI/usr/local\fR; it's completely empty (except for the \fIstow\fR +subdirectory, of course). Now suppose the Perl package is installed. +Recall that it includes the following directories in its installation +image: \fIbin\fR; \fIinfo\fR; \fIlib/perl\fR; \fIman/man1\fR. Rather than +creating the directory \fI/usr/local/bin\fR and populating it with +symlinks to \fI../stow/perl/bin/perl\fR and \fI../stow/perl/bin/a2p\fR (and +so on), Stow will create a single symlink, \fI/usr/local/bin\fR, which +points to \fIstow/perl/bin\fR. In this way, it still works to refer to +\&\fI/usr/local/bin/perl\fR and \fI/usr/local/bin/a2p\fR, and fewer symlinks +have been created. This is called \*(L"tree folding\*(R", since an entire +subtree is \*(L"folded\*(R" into a single symlink. +.PP +To complete this example, Stow will also create the symlink +\&\fI/usr/local/info\fR pointing to \fIstow/perl/info\fR; the symlink +\&\fI/usr/local/lib\fR pointing to \fIstow/perl/lib\fR; and the symlink +\&\fI/usr/local/man\fR pointing to \fIstow/perl/man\fR. +.PP +Now suppose that instead of installing the Perl package into an empty +target tree, the target tree is not empty to begin with. Instead, it +contains several files and directories installed under a different +system-administration philosophy. In particular, \fI/usr/local/bin\fR +already exists and is a directory, as are \fI/usr/local/lib\fR and +\&\fI/usr/local/man/man1\fR. In this case, Stow will descend into +\&\fI/usr/local/bin\fR and create symlinks to \fI../stow/perl/bin/perl\fR and +\&\fI../stow/perl/bin/a2p\fR (etc.), and it will descend into +\&\fI/usr/local/lib\fR and create the tree-folding symlink \fIperl\fR pointing +to \fI../stow/perl/lib/perl\fR, and so on. As a rule, Stow only descends +as far as necessary into the target tree when it can create a +tree-folding symlink. +.PP +The time often comes when a tree-folding symlink has to be undone +because another package uses one or more of the folded subdirectories +in its installation image. This operation is called \*(L"splitting open\*(R" +a folded tree. It involves removing the original symlink from the +target tree, creating a true directory in its place, and then +populating the new directory with symlinks to the newly-installed +package \fBand\fR to the old package that used the old symlink. For +example, suppose that after installing Perl into an empty +\&\fI/usr/local\fR, we wish to install Emacs. Emacs's installation image +includes a \fIbin\fR directory containing the \fIemacs\fR and \fIetags\fR +executables, among others. Stow must make these files appear to be +installed in \fI/usr/local/bin\fR, but presently \fI/usr/local/bin\fR is a +symlink to \fIstow/perl/bin\fR. Stow therefore takes the following +steps: the symlink \fI/usr/local/bin\fR is deleted; the directory +\&\fI/usr/local/bin\fR is created; links are made from \fI/usr/local/bin\fR to +\&\fI../stow/emacs/bin/emacs\fR and \fI../stow/emacs/bin/etags\fR; and links +are made from \fI/usr/local/bin\fR to \fI../stow/perl/bin/perl\fR and +\&\fI../stow/perl/bin/a2p\fR. +.PP +When splitting open a folded tree, Stow makes sure that the symlink +it is about to remove points inside a valid package in the current stow +directory. +.SS "Stow will never delete anything that it doesn't own." +.IX Subsection "Stow will never delete anything that it doesn't own." +Stow \*(L"owns\*(R" everything living in the target tree that points into a +package in the stow directory. Anything Stow owns, it can recompute if +lost. Note that by this definition, Stow doesn't \*(L"own\*(R" anything +\&\fBin\fR the stow directory or in any of the packages. +.PP +If Stow needs to create a directory or a symlink in the target tree +and it cannot because that name is already in use and is not owned by +Stow, then a conflict has arisen. See the \*(L"Conflicts\*(R" section in the +info manual. +.SH "DELETING PACKAGES" +.IX Header "DELETING PACKAGES" +When the \f(CW\*(C`\-D\*(C'\fR option is given, the action of Stow is to delete a +package from the target tree. Note that Stow will not delete anything +it doesn't \*(L"own\*(R". Deleting a package does \fBnot\fR mean removing it from +the stow directory or discarding the package tree. +.PP +To delete a package, Stow recursively scans the target tree, skipping +over the stow directory (since that is usually a subdirectory of the +target tree) and any other stow directories it encounters (see +\&\*(L"Multiple stow directories\*(R" in the info manual). Any symlink it +finds that points into the package being deleted is removed. Any +directory that contained only symlinks to the package being deleted is +removed. Any directory that, after removing symlinks and empty +subdirectories, contains only symlinks to a single other package, is +considered to be a previously \*(L"folded\*(R" tree that was \*(L"split open.\*(R" +Stow will re-fold the tree by removing the symlinks to the surviving +package, removing the directory, then linking the directory back to +the surviving package. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +The full documentation for \fIstow\fR is maintained as a Texinfo manual. +If the \fIinfo\fR and \fIstow\fR programs are properly installed at your site, the command +.PP +.Vb 1 +\& info stow +.Ve +.PP +should give you access to the complete manual. +.SH "BUGS" +.IX Header "BUGS" +Please report bugs in Stow using the Debian bug tracking system. +.PP +Currently known bugs include: +.IP "\(bu" 4 +The empty-directory problem. +.Sp +If package \fIfoo\fR includes an empty directory \*(-- say, \fIfoo/bar\fR \*(-- +then if no other package has a \fIbar\fR subdirectory, everything's fine. +If another stowed package \fIquux\fR, has a \fIbar\fR subdirectory, then +when stowing, \fItargetdir/bar\fR will be \*(L"split open\*(R" and the contents +of \fIquux/bar\fR will be individually stowed. So far, so good. But when +unstowing \fIquux\fR, \fItargetdir/bar\fR will be removed, even though +\&\fIfoo/bar\fR needs it to remain. A workaround for this problem is to +create a file in \fIfoo/bar\fR as a placeholder. If you name that file +\&\fI.placeholder\fR, it will be easy to find and remove such files when +this bug is fixed. +.IP "\(bu" 4 +When using multiple stow directories (see \*(L"Multiple stow directories\*(R" +in the info manual), Stow fails to \*(L"split open\*(R" tree-folding symlinks +(see \*(L"Installing packages\*(R" in the info manual) that point into a stow +directory which is not the one in use by the current Stow +command. Before failing, it should search the target of the link to +see whether any element of the path contains a \fI.stow\fR file. If it +finds one, it can \*(L"learn\*(R" about the cooperating stow directory to +short-circuit the \fI.stow\fR search the next time it encounters a +tree-folding symlink. +.SH "AUTHOR" +.IX Header "AUTHOR" +This man page was originally constructed by Charles Briscoe-Smith from +parts of Stow's info manual, and then converted to \s-1POD\s0 format by Adam +Spiers. The info manual contains the following notice, which, as it +says, applies to this manual page, too. The text of the section +entitled \*(L"\s-1GNU\s0 General Public License\*(R" can be found in the file +\&\fI/usr/share/common\-licenses/GPL\fR on any Debian GNU/Linux system. If +you don't have access to a Debian system, or the \s-1GPL\s0 is not there, +write to the Free Software Foundation, Inc., 59 Temple Place, Suite +330, Boston, \s-1MA, 02111\-1307, USA.\s0 +.SH "COPYRIGHT" +.IX Header "COPYRIGHT" +Copyright (C) +1993, 1994, 1995, 1996 by Bob Glickstein ; +2000, 2001 by Guillaume Morin; +2007 by Kahlil Hodgson; +2011 by Adam Spiers; +and others. +.PP +Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. +.PP +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided also that +the section entitled \*(L"\s-1GNU\s0 General Public License\*(R" is included with the +modified manual, and provided that the entire resulting derived work +is distributed under the terms of a permission notice identical to +this one. +.PP +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the Free Software Foundation. diff --git a/.local/share/perl/Stow.pm b/.local/share/perl/Stow.pm new file mode 100644 index 0000000..bda7d3a --- /dev/null +++ b/.local/share/perl/Stow.pm @@ -0,0 +1,2110 @@ +#!/usr/bin/perl + +package Stow; + +=head1 NAME + +Stow - manage the installation of multiple software packages + +=head1 SYNOPSIS + + my $stow = new Stow(%$options); + + $stow->plan_unstow(@pkgs_to_unstow); + $stow->plan_stow (@pkgs_to_stow); + + my %conflicts = $stow->get_conflicts; + $stow->process_tasks() unless %conflicts; + +=head1 DESCRIPTION + +This is the backend Perl module for GNU Stow, a program for managing +the installation of software packages, keeping them separate +(C vs. C, for example) +while making them appear to be installed in the same place +(C). + +Stow doesn't store an extra state between runs, so there's no danger +of mangling directories when file hierarchies don't match the +database. Also, stow will never delete any files, directories, or +links that appear in a stow directory, so it is always possible to +rebuild the target tree. + +=cut + +use strict; +use warnings; + +use Carp qw(carp cluck croak confess longmess); +use File::Copy qw(move); +use File::Spec; +use POSIX qw(getcwd); + +use Stow::Util qw(set_debug_level debug error set_test_mode + join_paths restore_cwd canon_path parent); + +our $ProgramName = 'stow'; +our $VERSION = '2.2.2'; + +our $LOCAL_IGNORE_FILE = '.stow-local-ignore'; +our $GLOBAL_IGNORE_FILE = '.stow-global-ignore'; + +our @default_global_ignore_regexps = + __PACKAGE__->get_default_global_ignore_regexps(); + +# These are the default options for each Stow instance. +our %DEFAULT_OPTIONS = ( + conflicts => 0, + simulate => 0, + verbose => 0, + paranoid => 0, + compat => 0, + test_mode => 0, + adopt => 0, + 'no-folding' => 0, + ignore => [], + override => [], + defer => [], +); + +=head1 CONSTRUCTORS + +=head2 new(%options) + +=head3 Required options + +=over 4 + +=item * dir - the stow directory + +=item * target - the target directory + +=back + +=head3 Non-mandatory options + +See the documentation for the F CLI front-end for information on these. + +=over 4 + +=item * conflicts + +=item * simulate + +=item * verbose + +=item * paranoid + +=item * compat + +=item * test_mode + +=item * adopt + +=item * no-folding + +=item * ignore + +=item * override + +=item * defer + +=back + +N.B. This sets the current working directory to the target directory. + +=cut + +sub new { + my $self = shift; + my $class = ref($self) || $self; + my %opts = @_; + + my $new = bless { }, $class; + + $new->{action_count} = 0; + + for my $required_arg (qw(dir target)) { + croak "$class->new() called without '$required_arg' parameter\n" + unless exists $opts{$required_arg}; + $new->{$required_arg} = delete $opts{$required_arg}; + } + + for my $opt (keys %DEFAULT_OPTIONS) { + $new->{$opt} = exists $opts{$opt} ? delete $opts{$opt} + : $DEFAULT_OPTIONS{$opt}; + } + + if (%opts) { + croak "$class->new() called with unrecognised parameter(s): ", + join(", ", keys %opts), "\n"; + } + + set_debug_level($new->get_verbosity()); + set_test_mode($new->{test_mode}); + $new->set_stow_dir(); + $new->init_state(); + + return $new; +} + +sub get_verbosity { + my $self = shift; + + return $self->{verbose} unless $self->{test_mode}; + + return 0 unless exists $ENV{TEST_VERBOSE}; + return 0 unless length $ENV{TEST_VERBOSE}; + + # Convert TEST_VERBOSE=y into numeric value + $ENV{TEST_VERBOSE} = 3 if $ENV{TEST_VERBOSE} !~ /^\d+$/; + + return $ENV{TEST_VERBOSE}; +} + +=head2 set_stow_dir([$dir]) + +Sets a new stow directory. This allows the use of multiple stow +directories within one Stow instance, e.g. + + $stow->plan_stow('foo'); + $stow->set_stow_dir('/different/stow/dir'); + $stow->plan_stow('bar'); + $stow->process_tasks; + +If C<$dir> is omitted, uses the value of the C

parameter passed +to the L constructor. + +=cut + +sub set_stow_dir { + my $self = shift; + my ($dir) = @_; + if (defined $dir) { + $self->{dir} = $dir; + } + + my $stow_dir = canon_path($self->{dir}); + my $target = canon_path($self->{target}); + $self->{stow_path} = File::Spec->abs2rel($stow_dir, $target); + + debug(2, "stow dir is $stow_dir"); + debug(2, "stow dir path relative to target $target is $self->{stow_path}"); +} + +sub init_state { + my $self = shift; + + # Store conflicts during pre-processing + $self->{conflicts} = {}; + $self->{conflict_count} = 0; + + # Store command line packages to stow (-S and -R) + $self->{pkgs_to_stow} = []; + + # Store command line packages to unstow (-D and -R) + $self->{pkgs_to_delete} = []; + + # The following structures are used by the abstractions that allow us to + # defer operating on the filesystem until after all potential conflicts have + # been assessed. + + # $self->{tasks}: list of operations to be performed (in order) + # each element is a hash ref of the form + # { + # action => ... ('create' or 'remove' or 'move') + # type => ... ('link' or 'dir' or 'file') + # path => ... (unique) + # source => ... (only for links) + # dest => ... (only for moving files) + # } + $self->{tasks} = []; + + # $self->{dir_task_for}: map a path to the corresponding directory task reference + # This structure allows us to quickly determine if a path has an existing + # directory task associated with it. + $self->{dir_task_for} = {}; + + # $self->{link_task_for}: map a path to the corresponding directory task reference + # This structure allows us to quickly determine if a path has an existing + # directory task associated with it. + $self->{link_task_for} = {}; + + # N.B.: directory tasks and link tasks are NOT mutually exclusive due + # to tree splitting (which involves a remove link task followed by + # a create directory task). +} + +=head1 METHODS + +=head2 plan_unstow(@packages) + +Plan which symlink/directory creation/removal tasks need to be executed +in order to unstow the given packages. Any potential conflicts are then +accessible via L. + +=cut + +sub plan_unstow { + my $self = shift; + my @packages = @_; + + $self->within_target_do(sub { + for my $package (@packages) { + my $path = join_paths($self->{stow_path}, $package); + if (not -d $path) { + error("The stow directory $self->{stow_path} does not contain package $package"); + } + debug(2, "Planning unstow of package $package..."); + if ($self->{compat}) { + $self->unstow_contents_orig( + $self->{stow_path}, + $package, + '.', + ); + } + else { + $self->unstow_contents( + $self->{stow_path}, + $package, + '.', + ); + } + debug(2, "Planning unstow of package $package... done"); + $self->{action_count}++; + } + }); +} + +=head2 plan_stow(@packages) + +Plan which symlink/directory creation/removal tasks need to be executed +in order to stow the given packages. Any potential conflicts are then +accessible via L. + +=cut + +sub plan_stow { + my $self = shift; + my @packages = @_; + + $self->within_target_do(sub { + for my $package (@packages) { + my $path = join_paths($self->{stow_path}, $package); + if (not -d $path) { + error("The stow directory $self->{stow_path} does not contain package $package"); + } + debug(2, "Planning stow of package $package..."); + $self->stow_contents( + $self->{stow_path}, + $package, + '.', + $path, # source from target + ); + debug(2, "Planning stow of package $package... done"); + $self->{action_count}++; + } + }); +} + +#===== METHOD =============================================================== +# Name : within_target_do() +# Purpose : execute code within target directory, preserving cwd +# Parameters: $code => anonymous subroutine to execute within target dir +# Returns : n/a +# Throws : n/a +# Comments : This is done to ensure that the consumer of the Stow interface +# : doesn't have to worry about (a) what their cwd is, and +# : (b) that their cwd might change. +#============================================================================ +sub within_target_do { + my $self = shift; + my ($code) = @_; + + my $cwd = getcwd(); + chdir($self->{target}) + or error("Cannot chdir to target tree: $self->{target} ($!)"); + debug(3, "cwd now $self->{target}"); + + $self->$code(); + + restore_cwd($cwd); + debug(3, "cwd restored to $cwd"); +} + +#===== METHOD =============================================================== +# Name : stow_contents() +# Purpose : stow the contents of the given directory +# Parameters: $stow_path => relative path from current (i.e. target) directory +# : to the stow dir containing the package to be stowed +# : $package => the package whose contents are being stowed +# : $target => subpath relative to package and target directories +# : $source => relative path from the (sub)dir of target +# : to symlink source +# Returns : n/a +# Throws : a fatal error if directory cannot be read +# Comments : stow_node() and stow_contents() are mutually recursive. +# : $source and $target are used for creating the symlink +# : $path is used for folding/unfolding trees as necessary +#============================================================================ +sub stow_contents { + my $self = shift; + my ($stow_path, $package, $target, $source) = @_; + + my $path = join_paths($stow_path, $package, $target); + + return if $self->should_skip_target_which_is_stow_dir($target); + + my $cwd = getcwd(); + my $msg = "Stowing contents of $path (cwd=$cwd)"; + $msg =~ s!$ENV{HOME}(/|$)!~$1!g; + debug(3, $msg); + debug(4, " => $source"); + + error("stow_contents() called with non-directory path: $path") + unless -d $path; + error("stow_contents() called with non-directory target: $target") + unless $self->is_a_node($target); + + opendir my $DIR, $path + or error("cannot read directory: $path ($!)"); + my @listing = readdir $DIR; + closedir $DIR; + + NODE: + for my $node (@listing) { + next NODE if $node eq '.'; + next NODE if $node eq '..'; + my $node_target = join_paths($target, $node); + next NODE if $self->ignore($stow_path, $package, $node_target); + $self->stow_node( + $stow_path, + $package, + $node_target, # target + join_paths($source, $node), # source + ); + } +} + +#===== METHOD =============================================================== +# Name : stow_node() +# Purpose : stow the given node +# Parameters: $stow_path => relative path from current (i.e. target) directory +# : to the stow dir containing the node to be stowed +# : $package => the package containing the node being stowed +# : $target => subpath relative to package and target directories +# : $source => relative path to symlink source from the dir of target +# Returns : n/a +# Throws : fatal exception if a conflict arises +# Comments : stow_node() and stow_contents() are mutually recursive +# : $source and $target are used for creating the symlink +# : $path is used for folding/unfolding trees as necessary +#============================================================================ +sub stow_node { + my $self = shift; + my ($stow_path, $package, $target, $source) = @_; + + my $path = join_paths($stow_path, $package, $target); + + debug(3, "Stowing $stow_path / $package / $target"); + debug(4, " => $source"); + + # Don't try to stow absolute symlinks (they can't be unstowed) + if (-l $source) { + my $second_source = $self->read_a_link($source); + if ($second_source =~ m{\A/}) { + $self->conflict( + 'stow', + $package, + "source is an absolute symlink $source => $second_source" + ); + debug(3, "Absolute symlinks cannot be unstowed"); + return; + } + } + + # Does the target already exist? + if ($self->is_a_link($target)) { + # Where is the link pointing? + my $existing_source = $self->read_a_link($target); + if (not $existing_source) { + error("Could not read link: $target"); + } + debug(4, " Evaluate existing link: $target => $existing_source"); + + # Does it point to a node under any stow directory? + my ($existing_path, $existing_stow_path, $existing_package) = + $self->find_stowed_path($target, $existing_source); + if (not $existing_path) { + $self->conflict( + 'stow', + $package, + "existing target is not owned by stow: $target" + ); + return; # XXX # + } + + # Does the existing $target actually point to anything? + if ($self->is_a_node($existing_path)) { + if ($existing_source eq $source) { + debug(2, "--- Skipping $target as it already points to $source"); + } + elsif ($self->defer($target)) { + debug(2, "--- Deferring installation of: $target"); + } + elsif ($self->override($target)) { + debug(2, "--- Overriding installation of: $target"); + $self->do_unlink($target); + $self->do_link($source, $target); + } + elsif ($self->is_a_dir(join_paths(parent($target), $existing_source)) && + $self->is_a_dir(join_paths(parent($target), $source)) ) { + + # If the existing link points to a directory, + # and the proposed new link points to a directory, + # then we can unfold (split open) the tree at that point + + debug(2, "--- Unfolding $target which was already owned by $existing_package"); + $self->do_unlink($target); + $self->do_mkdir($target); + $self->stow_contents( + $existing_stow_path, + $existing_package, + $target, + join_paths('..', $existing_source), + ); + $self->stow_contents( + $self->{stow_path}, + $package, + $target, + join_paths('..', $source), + ); + } + else { + $self->conflict( + 'stow', + $package, + "existing target is stowed to a different package: " + . "$target => $existing_source" + ); + } + } + else { + # The existing link is invalid, so replace it with a good link + debug(2, "--- replacing invalid link: $path"); + $self->do_unlink($target); + $self->do_link($source, $target); + } + } + elsif ($self->is_a_node($target)) { + debug(4, " Evaluate existing node: $target"); + if ($self->is_a_dir($target)) { + $self->stow_contents( + $self->{stow_path}, + $package, + $target, + join_paths('..', $source), + ); + } + else { + if ($self->{adopt}) { + $self->do_mv($target, $path); + $self->do_link($source, $target); + } + else { + $self->conflict( + 'stow', + $package, + "existing target is neither a link nor a directory: $target" + ); + } + } + } + elsif ($self->{'no-folding'} && -d $path && ! -l $path) { + $self->do_mkdir($target); + $self->stow_contents( + $self->{stow_path}, + $package, + $target, + join_paths('..', $source), + ); + } + else { + $self->do_link($source, $target); + } + return; +} + +#===== METHOD =============================================================== +# Name : should_skip_target_which_is_stow_dir() +# Purpose : determine whether target is a stow directory which should +# : not be stowed to or unstowed from +# Parameters: $target => relative path to symlink target from the current directory +# Returns : true iff target is a stow directory +# Throws : n/a +# Comments : none +#============================================================================ +sub should_skip_target_which_is_stow_dir { + my $self = shift; + my ($target) = @_; + + # Don't try to remove anything under a stow directory + if ($target eq $self->{stow_path}) { + warn "WARNING: skipping target which was current stow directory $target\n"; + return 1; + } + + if ($self->marked_stow_dir($target)) { + warn "WARNING: skipping protected directory $target\n"; + return 1; + } + + debug (4, "$target not protected"); + return 0; +} + +sub marked_stow_dir { + my $self = shift; + my ($target) = @_; + for my $f (".stow", ".nonstow") { + if (-e join_paths($target, $f)) { + debug(4, "$target contained $f"); + return 1; + } + } + return 0; +} + +#===== METHOD =============================================================== +# Name : unstow_contents_orig() +# Purpose : unstow the contents of the given directory +# Parameters: $stow_path => relative path from current (i.e. target) directory +# : to the stow dir containing the package to be unstowed +# : $package => the package whose contents are being unstowed +# : $target => relative path to symlink target from the current directory +# Returns : n/a +# Throws : a fatal error if directory cannot be read +# Comments : unstow_node_orig() and unstow_contents_orig() are mutually recursive +# : Here we traverse the target tree, rather than the source tree. +#============================================================================ +sub unstow_contents_orig { + my $self = shift; + my ($stow_path, $package, $target) = @_; + + my $path = join_paths($stow_path, $package, $target); + + return if $self->should_skip_target_which_is_stow_dir($target); + + my $cwd = getcwd(); + my $msg = "Unstowing from $target (compat mode, cwd=$cwd, stow dir=$self->{stow_path})"; + $msg =~ s!$ENV{HOME}(/|$)!~$1!g; + debug(3, $msg); + debug(4, " source path is $path"); + # In compat mode we traverse the target tree not the source tree, + # so we're unstowing the contents of /target/foo, there's no + # guarantee that the corresponding /stow/mypkg/foo exists. + error("unstow_contents_orig() called with non-directory target: $target") + unless -d $target; + + opendir my $DIR, $target + or error("cannot read directory: $target ($!)"); + my @listing = readdir $DIR; + closedir $DIR; + + NODE: + for my $node (@listing) { + next NODE if $node eq '.'; + next NODE if $node eq '..'; + my $node_target = join_paths($target, $node); + next NODE if $self->ignore($stow_path, $package, $node_target); + $self->unstow_node_orig($stow_path, $package, $node_target); + } +} + +#===== METHOD =============================================================== +# Name : unstow_node_orig() +# Purpose : unstow the given node +# Parameters: $stow_path => relative path from current (i.e. target) directory +# : to the stow dir containing the node to be stowed +# : $package => the package containing the node being stowed +# : $target => relative path to symlink target from the current directory +# Returns : n/a +# Throws : fatal error if a conflict arises +# Comments : unstow_node() and unstow_contents() are mutually recursive +#============================================================================ +sub unstow_node_orig { + my $self = shift; + my ($stow_path, $package, $target) = @_; + + my $path = join_paths($stow_path, $package, $target); + + debug(3, "Unstowing $target (compat mode)"); + debug(4, " source path is $path"); + + # Does the target exist? + if ($self->is_a_link($target)) { + debug(4, " Evaluate existing link: $target"); + + # Where is the link pointing? + my $existing_source = $self->read_a_link($target); + if (not $existing_source) { + error("Could not read link: $target"); + } + + # Does it point to a node under any stow directory? + my ($existing_path, $existing_stow_path, $existing_package) = + $self->find_stowed_path($target, $existing_source); + if (not $existing_path) { + # We're traversing the target tree not the package tree, + # so we definitely expect to find stuff not owned by stow. + # Therefore we can't flag a conflict. + return; # XXX # + } + + # Does the existing $target actually point to anything? + if (-e $existing_path) { + # Does link point to the right place? + if ($existing_path eq $path) { + $self->do_unlink($target); + } + elsif ($self->override($target)) { + debug(2, "--- overriding installation of: $target"); + $self->do_unlink($target); + } + # else leave it alone + } + else { + debug(2, "--- removing invalid link into a stow directory: $path"); + $self->do_unlink($target); + } + } + elsif (-d $target) { + $self->unstow_contents_orig($stow_path, $package, $target); + + # This action may have made the parent directory foldable + if (my $parent = $self->foldable($target)) { + $self->fold_tree($target, $parent); + } + } + elsif (-e $target) { + $self->conflict( + 'unstow', + $package, + "existing target is neither a link nor a directory: $target", + ); + } + else { + debug(2, "$target did not exist to be unstowed"); + } + return; +} + +#===== METHOD =============================================================== +# Name : unstow_contents() +# Purpose : unstow the contents of the given directory +# Parameters: $stow_path => relative path from current (i.e. target) directory +# : to the stow dir containing the package to be unstowed +# : $package => the package whose contents are being unstowed +# : $target => relative path to symlink target from the current directory +# Returns : n/a +# Throws : a fatal error if directory cannot be read +# Comments : unstow_node() and unstow_contents() are mutually recursive +# : Here we traverse the source tree, rather than the target tree. +#============================================================================ +sub unstow_contents { + my $self = shift; + my ($stow_path, $package, $target) = @_; + + my $path = join_paths($stow_path, $package, $target); + + return if $self->should_skip_target_which_is_stow_dir($target); + + my $cwd = getcwd(); + my $msg = "Unstowing from $target (cwd=$cwd, stow dir=$self->{stow_path})"; + $msg =~ s!$ENV{HOME}/!~/!g; + debug(3, $msg); + debug(4, " source path is $path"); + # We traverse the source tree not the target tree, so $path must exist. + error("unstow_contents() called with non-directory path: $path") + unless -d $path; + # When called at the top level, $target should exist. And + # unstow_node() should only call this via mutual recursion if + # $target exists. + error("unstow_contents() called with invalid target: $target") + unless $self->is_a_node($target); + + opendir my $DIR, $path + or error("cannot read directory: $path ($!)"); + my @listing = readdir $DIR; + closedir $DIR; + + NODE: + for my $node (@listing) { + next NODE if $node eq '.'; + next NODE if $node eq '..'; + my $node_target = join_paths($target, $node); + next NODE if $self->ignore($stow_path, $package, $node_target); + $self->unstow_node($stow_path, $package, $node_target); + } + if (-d $target) { + $self->cleanup_invalid_links($target); + } +} + +#===== METHOD =============================================================== +# Name : unstow_node() +# Purpose : unstow the given node +# Parameters: $stow_path => relative path from current (i.e. target) directory +# : to the stow dir containing the node to be stowed +# : $package => the package containing the node being unstowed +# : $target => relative path to symlink target from the current directory +# Returns : n/a +# Throws : fatal error if a conflict arises +# Comments : unstow_node() and unstow_contents() are mutually recursive +#============================================================================ +sub unstow_node { + my $self = shift; + my ($stow_path, $package, $target) = @_; + + my $path = join_paths($stow_path, $package, $target); + + debug(3, "Unstowing $path"); + debug(4, " target is $target"); + + # Does the target exist? + if ($self->is_a_link($target)) { + debug(4, " Evaluate existing link: $target"); + + # Where is the link pointing? + my $existing_source = $self->read_a_link($target); + if (not $existing_source) { + error("Could not read link: $target"); + } + + if ($existing_source =~ m{\A/}) { + warn "Ignoring an absolute symlink: $target => $existing_source\n"; + return; # XXX # + } + + # Does it point to a node under any stow directory? + my ($existing_path, $existing_stow_path, $existing_package) = + $self->find_stowed_path($target, $existing_source); + if (not $existing_path) { + $self->conflict( + 'unstow', + $package, + "existing target is not owned by stow: $target => $existing_source" + ); + return; # XXX # + } + + # Does the existing $target actually point to anything? + if (-e $existing_path) { + # Does link points to the right place? + if ($existing_path eq $path) { + $self->do_unlink($target); + } + + # XXX we quietly ignore links that are stowed to a different + # package. + + #elsif (defer($target)) { + # debug(2, "--- deferring to installation of: $target"); + #} + #elsif ($self->override($target)) { + # debug(2, "--- overriding installation of: $target"); + # $self->do_unlink($target); + #} + #else { + # $self->conflict( + # 'unstow', + # $package, + # "existing target is stowed to a different package: " + # . "$target => $existing_source" + # ); + #} + } + else { + debug(2, "--- removing invalid link into a stow directory: $path"); + $self->do_unlink($target); + } + } + elsif (-e $target) { + debug(4, " Evaluate existing node: $target"); + if (-d $target) { + $self->unstow_contents($stow_path, $package, $target); + + # This action may have made the parent directory foldable + if (my $parent = $self->foldable($target)) { + $self->fold_tree($target, $parent); + } + } + else { + $self->conflict( + 'unstow', + $package, + "existing target is neither a link nor a directory: $target", + ); + } + } + else { + debug(2, "$target did not exist to be unstowed"); + } + return; +} + +#===== METHOD =============================================================== +# Name : path_owned_by_package() +# Purpose : determine whether the given link points to a member of a +# : stowed package +# Parameters: $target => path to a symbolic link under current directory +# : $source => where that link points to +# Returns : the package iff link is owned by stow, otherwise '' +# Throws : n/a +# Comments : lossy wrapper around find_stowed_path() +#============================================================================ +sub path_owned_by_package { + my $self = shift; + my ($target, $source) = @_; + + my ($path, $stow_path, $package) = + $self->find_stowed_path($target, $source); + return $package; +} + +#===== METHOD =============================================================== +# Name : find_stowed_path() +# Purpose : determine whether the given link points to a member of a +# : stowed package +# Parameters: $target => path to a symbolic link under current directory +# : $source => where that link points to (needed because link +# : might not exist yet due to two-phase approach, +# : so we can't just call readlink()) +# Returns : ($path, $stow_path, $package) where $path and $stow_path are +# : relative from the current (i.e. target) directory. $path +# : is the full relative path, $stow_path is the relative path +# : to the stow directory, and $package is the name of the package. +# : or ('', '', '') if link is not owned by stow +# Throws : n/a +# Comments : Needs +# : Allow for stow dir not being under target dir. +# : We could put more logic under here for multiple stow dirs. +#============================================================================ +sub find_stowed_path { + my $self = shift; + my ($target, $source) = @_; + + # Evaluate softlink relative to its target + my $path = join_paths(parent($target), $source); + debug(4, " is path $path owned by stow?"); + + # Search for .stow files - this allows us to detect links + # owned by stow directories other than the current one. + my $dir = ''; + my @path = split m{/+}, $path; + for my $i (0 .. $#path) { + my $part = $path[$i]; + $dir = join_paths($dir, $part); + if ($self->marked_stow_dir($dir)) { + # FIXME - not sure if this can ever happen + internal_error("find_stowed_path() called directly on stow dir") + if $i == $#path; + + debug(4, " yes - $dir was marked as a stow dir"); + my $package = $path[$i + 1]; + return ($path, $dir, $package); + } + } + + # If no .stow file was found, we need to find out whether it's + # owned by the current stow directory, in which case $path will be + # a prefix of $self->{stow_path}. + my @stow_path = split m{/+}, $self->{stow_path}; + + # Strip off common prefixes until one is empty + while (@path && @stow_path) { + if ((shift @path) ne (shift @stow_path)) { + debug(4, " no - either $path not under $self->{stow_path} or vice-versa"); + return ('', '', ''); + } + } + + if (@stow_path) { # @path must be empty + debug(4, " no - $path is not under $self->{stow_path}"); + return ('', '', ''); + } + + my $package = shift @path; + + debug(4, " yes - by $package in " . join_paths(@path)); + return ($path, $self->{stow_path}, $package); +} + +#===== METHOD ================================================================ +# Name : cleanup_invalid_links() +# Purpose : clean up invalid links that may block folding +# Parameters: $dir => path to directory to check +# Returns : n/a +# Throws : no exceptions +# Comments : removing files from a stowed package is probably a bad practice +# : so this kind of clean up is not _really_ stow's responsibility; +# : however, failing to clean up can block tree folding, so we'll do +# : it anyway +#============================================================================= +sub cleanup_invalid_links { + my $self = shift; + my ($dir) = @_; + + if (not -d $dir) { + error("cleanup_invalid_links() called with a non-directory: $dir"); + } + + opendir my $DIR, $dir + or error("cannot read directory: $dir ($!)"); + my @listing = readdir $DIR; + closedir $DIR; + + NODE: + for my $node (@listing) { + next NODE if $node eq '.'; + next NODE if $node eq '..'; + + my $node_path = join_paths($dir, $node); + + if (-l $node_path and not exists $self->{link_task_for}{$node_path}) { + + # Where is the link pointing? + # (don't use read_a_link() here) + my $source = readlink($node_path); + if (not $source) { + error("Could not read link $node_path"); + } + + if ( + not -e join_paths($dir, $source) and # bad link + $self->path_owned_by_package($node_path, $source) # owned by stow + ){ + debug(2, "--- removing stale link: $node_path => " . + join_paths($dir, $source)); + $self->do_unlink($node_path); + } + } + } + return; +} + + +#===== METHOD =============================================================== +# Name : foldable() +# Purpose : determine whether a tree can be folded +# Parameters: $target => path to a directory +# Returns : path to the parent dir iff the tree can be safely folded +# Throws : n/a +# Comments : the path returned is relative to the parent of $target, +# : that is, it can be used as the source for a replacement symlink +#============================================================================ +sub foldable { + my $self = shift; + my ($target) = @_; + + debug(3, "--- Is $target foldable?"); + if ($self->{'no-folding'}) { + debug(3, "--- no because --no-folding enabled"); + return ''; + } + + opendir my $DIR, $target + or error(qq{Cannot read directory "$target" ($!)\n}); + my @listing = readdir $DIR; + closedir $DIR; + + my $parent = ''; + NODE: + for my $node (@listing) { + + next NODE if $node eq '.'; + next NODE if $node eq '..'; + + my $path = join_paths($target, $node); + + # Skip nodes scheduled for removal + next NODE if not $self->is_a_node($path); + + # If it's not a link then we can't fold its parent + return '' if not $self->is_a_link($path); + + # Where is the link pointing? + my $source = $self->read_a_link($path); + if (not $source) { + error("Could not read link $path"); + } + if ($parent eq '') { + $parent = parent($source) + } + elsif ($parent ne parent($source)) { + return ''; + } + } + return '' if not $parent; + + # If we get here then all nodes inside $target are links, and those links + # point to nodes inside the same directory. + + # chop of leading '..' to get the path to the common parent directory + # relative to the parent of our $target + $parent =~ s{\A\.\./}{}; + + # If the resulting path is owned by stow, we can fold it + if ($self->path_owned_by_package($target, $parent)) { + debug(3, "--- $target is foldable"); + return $parent; + } + else { + return ''; + } +} + +#===== METHOD =============================================================== +# Name : fold_tree() +# Purpose : fold the given tree +# Parameters: $source => link to the folded tree source +# : $target => directory that we will replace with a link to $source +# Returns : n/a +# Throws : none +# Comments : only called iff foldable() is true so we can remove some checks +#============================================================================ +sub fold_tree { + my $self = shift; + my ($target, $source) = @_; + + debug(3, "--- Folding tree: $target => $source"); + + opendir my $DIR, $target + or error(qq{Cannot read directory "$target" ($!)\n}); + my @listing = readdir $DIR; + closedir $DIR; + + NODE: + for my $node (@listing) { + next NODE if $node eq '.'; + next NODE if $node eq '..'; + next NODE if not $self->is_a_node(join_paths($target, $node)); + $self->do_unlink(join_paths($target, $node)); + } + $self->do_rmdir($target); + $self->do_link($source, $target); + return; +} + + +#===== METHOD =============================================================== +# Name : conflict() +# Purpose : handle conflicts in stow operations +# Parameters: $package => the package involved with the conflicting operation +# : $message => a description of the conflict +# Returns : n/a +# Throws : none +# Comments : none +#============================================================================ +sub conflict { + my $self = shift; + my ($action, $package, $message) = @_; + + debug(2, "CONFLICT when ${action}ing $package: $message"); + $self->{conflicts}{$action}{$package} ||= []; + push @{ $self->{conflicts}{$action}{$package} }, $message; + $self->{conflict_count}++; + + return; +} + +=head2 get_conflicts() + +Returns a nested hash of all potential conflicts discovered: the keys +are actions ('stow' or 'unstow'), and the values are hashrefs whose +keys are stow package names and whose values are conflict +descriptions, e.g.: + + ( + stow => { + perl => [ + "existing target is not owned by stow: bin/a2p" + "existing target is neither a link nor a directory: bin/perl" + ] + } + ) + +=cut + +sub get_conflicts { + my $self = shift; + return %{ $self->{conflicts} }; +} + +=head2 get_conflict_count() + +Returns the number of conflicts found. + +=cut + +sub get_conflict_count { + my $self = shift; + return $self->{conflict_count}; +} + +=head2 get_tasks() + +Returns a list of all symlink/directory creation/removal tasks. + +=cut + +sub get_tasks { + my $self = shift; + return @{ $self->{tasks} }; +} + +=head2 get_action_count() + +Returns the number of actions planned for this Stow instance. + +=cut + +sub get_action_count { + my $self = shift; + return $self->{action_count}; +} + +#===== METHOD ================================================================ +# Name : ignore +# Purpose : determine if the given path matches a regex in our ignore list +# Parameters: $stow_path => the stow directory containing the package +# : $package => the package containing the path +# : $target => the path to check against the ignore list +# : relative to its package directory +# Returns : true iff the path should be ignored +# Throws : no exceptions +# Comments : none +#============================================================================= +sub ignore { + my $self = shift; + my ($stow_path, $package, $target) = @_; + + internal_error(__PACKAGE__ . "::ignore() called with empty target") + unless length $target; + + for my $suffix (@{ $self->{ignore} }) { + if ($target =~ m/$suffix/) { + debug(4, " Ignoring path $target due to --ignore=$suffix"); + return 1; + } + } + + my $package_dir = join_paths($stow_path, $package); + my ($path_regexp, $segment_regexp) = + $self->get_ignore_regexps($package_dir); + debug(5, " Ignore list regexp for paths: " . + (defined $path_regexp ? "/$path_regexp/" : "none")); + debug(5, " Ignore list regexp for segments: " . + (defined $segment_regexp ? "/$segment_regexp/" : "none")); + + if (defined $path_regexp and "/$target" =~ $path_regexp) { + debug(4, " Ignoring path /$target"); + return 1; + } + + (my $basename = $target) =~ s!.+/!!; + if (defined $segment_regexp and $basename =~ $segment_regexp) { + debug(4, " Ignoring path segment $basename"); + return 1; + } + + debug(5, " Not ignoring $target"); + return 0; +} + +sub get_ignore_regexps { + my $self = shift; + my ($dir) = @_; + + # N.B. the local and global stow ignore files have to have different + # names so that: + # 1. the global one can be a symlink to within a stow + # package, managed by stow itself, and + # 2. the local ones can be ignored via hardcoded logic in + # GlobsToRegexp(), so that they always stay within their stow packages. + + my $local_stow_ignore = join_paths($dir, $LOCAL_IGNORE_FILE); + my $global_stow_ignore = join_paths($ENV{HOME}, $GLOBAL_IGNORE_FILE); + + for my $file ($local_stow_ignore, $global_stow_ignore) { + if (-e $file) { + debug(5, " Using ignore file: $file"); + return $self->get_ignore_regexps_from_file($file); + } + else { + debug(5, " $file didn't exist"); + } + } + + debug(4, " Using built-in ignore list"); + return @default_global_ignore_regexps; +} + +my %ignore_file_regexps; + +sub get_ignore_regexps_from_file { + my $self = shift; + my ($file) = @_; + + if (exists $ignore_file_regexps{$file}) { + debug(4, " Using memoized regexps from $file"); + return @{ $ignore_file_regexps{$file} }; + } + + if (! open(REGEXPS, $file)) { + debug(4, " Failed to open $file: $!"); + return undef; + } + + my @regexps = $self->get_ignore_regexps_from_fh(\*REGEXPS); + close(REGEXPS); + + $ignore_file_regexps{$file} = [ @regexps ]; + return @regexps; +} + +=head2 invalidate_memoized_regexp($file) + +For efficiency of performance, regular expressions are compiled from +each ignore list file the first time it is used by the Stow process, +and then memoized for future use. If you expect the contents of these +files to change during a single run, you will need to invalidate the +memoized value from this cache. This method allows you to do that. + +=cut + +sub invalidate_memoized_regexp { + my $self = shift; + my ($file) = @_; + if (exists $ignore_file_regexps{$file}) { + debug(4, " Invalidated memoized regexp for $file"); + delete $ignore_file_regexps{$file}; + } + else { + debug(2, " WARNING: no memoized regexp for $file to invalidate"); + } +} + +sub get_ignore_regexps_from_fh { + my $self = shift; + my ($fh) = @_; + my %regexps; + while (<$fh>) { + chomp; + s/^\s+//; + s/\s+$//; + next if /^#/ or length($_) == 0; + s/\s+#.+//; # strip comments to right of pattern + s/\\#/#/g; + $regexps{$_}++; + } + + # Local ignore lists should *always* stay within the stow directory, + # because this is the only place stow looks for them. + $regexps{"^/\Q$LOCAL_IGNORE_FILE\E\$"}++; + + return $self->compile_ignore_regexps(%regexps); +} + +sub compile_ignore_regexps { + my $self = shift; + my (%regexps) = @_; + + my @segment_regexps; + my @path_regexps; + for my $regexp (keys %regexps) { + if (index($regexp, '/') < 0) { + # No / found in regexp, so use it for matching against basename + push @segment_regexps, $regexp; + } + else { + # / found in regexp, so use it for matching against full path + push @path_regexps, $regexp; + } + } + + my $segment_regexp = join '|', @segment_regexps; + my $path_regexp = join '|', @path_regexps; + $segment_regexp = @segment_regexps ? + $self->compile_regexp("^($segment_regexp)\$") : undef; + $path_regexp = @path_regexps ? + $self->compile_regexp("(^|/)($path_regexp)(/|\$)") : undef; + + return ($path_regexp, $segment_regexp); +} + +sub compile_regexp { + my $self = shift; + my ($regexp) = @_; + my $compiled = eval { qr/$regexp/ }; + die "Failed to compile regexp: $@\n" if $@; + return $compiled; +} + +sub get_default_global_ignore_regexps { + my $class = shift; + # Bootstrap issue - first time we stow, we will be stowing + # .cvsignore so it might not exist in ~ yet, or if it does, it could + # be an old version missing the entries we need. So we make sure + # they are there by hardcoding some crucial entries. + return $class->get_ignore_regexps_from_fh(\*DATA); +} + +#===== METHOD ================================================================ +# Name : defer +# Purpose : determine if the given path matches a regex in our defer list +# Parameters: $path +# Returns : Boolean +# Throws : no exceptions +# Comments : none +#============================================================================= +sub defer { + my $self = shift; + my ($path) = @_; + + for my $prefix (@{ $self->{defer} }) { + return 1 if $path =~ m/$prefix/; + } + return 0; +} + +#===== METHOD ================================================================ +# Name : override +# Purpose : determine if the given path matches a regex in our override list +# Parameters: $path +# Returns : Boolean +# Throws : no exceptions +# Comments : none +#============================================================================= +sub override { + my $self = shift; + my ($path) = @_; + + for my $regex (@{ $self->{override} }) { + return 1 if $path =~ m/$regex/; + } + return 0; +} + +############################################################################## +# +# The following code provides the abstractions that allow us to defer operating +# on the filesystem until after all potential conflcits have been assessed. +# +############################################################################## + +#===== METHOD =============================================================== +# Name : process_tasks() +# Purpose : process each task in the tasks list +# Parameters: none +# Returns : n/a +# Throws : fatal error if tasks list is corrupted or a task fails +# Comments : none +#============================================================================ +sub process_tasks { + my $self = shift; + + debug(2, "Processing tasks..."); + + # Strip out all tasks with a skip action + $self->{tasks} = [ grep { $_->{action} ne 'skip' } @{ $self->{tasks} } ]; + + if (not @{ $self->{tasks} }) { + return; + } + + $self->within_target_do(sub { + for my $task (@{ $self->{tasks} }) { + $self->process_task($task); + } + }); + + debug(2, "Processing tasks... done"); +} + +#===== METHOD =============================================================== +# Name : process_task() +# Purpose : process a single task +# Parameters: $task => the task to process +# Returns : n/a +# Throws : fatal error if task fails +# Comments : Must run from within target directory. +# : Task involve either creating or deleting dirs and symlinks +# : an action is set to 'skip' if it is found to be redundant +#============================================================================ +sub process_task { + my $self = shift; + my ($task) = @_; + + if ($task->{action} eq 'create') { + if ($task->{type} eq 'dir') { + mkdir($task->{path}, 0777) + or error("Could not create directory: $task->{path} ($!)"); + return; + } + elsif ($task->{type} eq 'link') { + symlink $task->{source}, $task->{path} + or error( + "Could not create symlink: %s => %s ($!)", + $task->{path}, + $task->{source} + ); + return; + } + } + elsif ($task->{action} eq 'remove') { + if ($task->{type} eq 'dir') { + rmdir $task->{path} + or error("Could not remove directory: $task->{path} ($!)"); + return; + } + elsif ($task->{type} eq 'link') { + unlink $task->{path} + or error("Could not remove link: $task->{path} ($!)"); + return; + } + } + elsif ($task->{action} eq 'move') { + if ($task->{type} eq 'file') { + # rename() not good enough, since the stow directory + # might be on a different filesystem to the target. + move $task->{path}, $task->{dest} + or error("Could not move $task->{path} -> $task->{dest} ($!)"); + return; + } + } + + # Should never happen. + internal_error("bad task action: $task->{action}"); +} + +#===== METHOD =============================================================== +# Name : link_task_action() +# Purpose : finds the link task action for the given path, if there is one +# Parameters: $path +# Returns : 'remove', 'create', or '' if there is no action +# Throws : a fatal exception if an invalid action is found +# Comments : none +#============================================================================ +sub link_task_action { + my $self = shift; + my ($path) = @_; + + if (! exists $self->{link_task_for}{$path}) { + debug(4, " link_task_action($path): no task"); + return ''; + } + + my $action = $self->{link_task_for}{$path}->{action}; + internal_error("bad task action: $action") + unless $action eq 'remove' or $action eq 'create'; + + debug(4, " link_task_action($path): link task exists with action $action"); + return $action; +} + +#===== METHOD =============================================================== +# Name : dir_task_action() +# Purpose : finds the dir task action for the given path, if there is one +# Parameters: $path +# Returns : 'remove', 'create', or '' if there is no action +# Throws : a fatal exception if an invalid action is found +# Comments : none +#============================================================================ +sub dir_task_action { + my $self = shift; + my ($path) = @_; + + if (! exists $self->{dir_task_for}{$path}) { + debug(4, " dir_task_action($path): no task"); + return ''; + } + + my $action = $self->{dir_task_for}{$path}->{action}; + internal_error("bad task action: $action") + unless $action eq 'remove' or $action eq 'create'; + + debug(4, " dir_task_action($path): dir task exists with action $action"); + return $action; +} + +#===== METHOD =============================================================== +# Name : parent_link_scheduled_for_removal() +# Purpose : determine whether the given path or any parent thereof +# : is a link scheduled for removal +# Parameters: $path +# Returns : Boolean +# Throws : none +# Comments : none +#============================================================================ +sub parent_link_scheduled_for_removal { + my $self = shift; + my ($path) = @_; + + my $prefix = ''; + for my $part (split m{/+}, $path) { + $prefix = join_paths($prefix, $part); + debug(4, " parent_link_scheduled_for_removal($path): prefix $prefix"); + if (exists $self->{link_task_for}{$prefix} and + $self->{link_task_for}{$prefix}->{action} eq 'remove') { + debug(4, " parent_link_scheduled_for_removal($path): link scheduled for removal"); + return 1; + } + } + + debug(4, " parent_link_scheduled_for_removal($path): returning false"); + return 0; +} + +#===== METHOD =============================================================== +# Name : is_a_link() +# Purpose : determine if the given path is a current or planned link +# Parameters: $path +# Returns : Boolean +# Throws : none +# Comments : returns false if an existing link is scheduled for removal +# : and true if a non-existent link is scheduled for creation +#============================================================================ +sub is_a_link { + my $self = shift; + my ($path) = @_; + debug(4, " is_a_link($path)"); + + if (my $action = $self->link_task_action($path)) { + if ($action eq 'remove') { + debug(4, " is_a_link($path): returning 0 (remove action found)"); + return 0; + } + elsif ($action eq 'create') { + debug(4, " is_a_link($path): returning 1 (create action found)"); + return 1; + } + } + + if (-l $path) { + # Check if any of its parent are links scheduled for removal + # (need this for edge case during unfolding) + debug(4, " is_a_link($path): is a real link"); + return $self->parent_link_scheduled_for_removal($path) ? 0 : 1; + } + + debug(4, " is_a_link($path): returning 0"); + return 0; +} + +#===== METHOD =============================================================== +# Name : is_a_dir() +# Purpose : determine if the given path is a current or planned directory +# Parameters: $path +# Returns : Boolean +# Throws : none +# Comments : returns false if an existing directory is scheduled for removal +# : and true if a non-existent directory is scheduled for creation +# : we also need to be sure we are not just following a link +#============================================================================ +sub is_a_dir { + my $self = shift; + my ($path) = @_; + debug(4, " is_a_dir($path)"); + + if (my $action = $self->dir_task_action($path)) { + if ($action eq 'remove') { + return 0; + } + elsif ($action eq 'create') { + return 1; + } + } + + return 0 if $self->parent_link_scheduled_for_removal($path); + + if (-d $path) { + debug(4, " is_a_dir($path): real dir"); + return 1; + } + + debug(4, " is_a_dir($path): returning false"); + return 0; +} + +#===== METHOD =============================================================== +# Name : is_a_node() +# Purpose : determine whether the given path is a current or planned node +# Parameters: $path +# Returns : Boolean +# Throws : none +# Comments : returns false if an existing node is scheduled for removal +# : true if a non-existent node is scheduled for creation +# : we also need to be sure we are not just following a link +#============================================================================ +sub is_a_node { + my $self = shift; + my ($path) = @_; + debug(4, " is_a_node($path)"); + + my $laction = $self->link_task_action($path); + my $daction = $self->dir_task_action($path); + + if ($laction eq 'remove') { + if ($daction eq 'remove') { + internal_error("removing link and dir: $path"); + return 0; + } + elsif ($daction eq 'create') { + # Assume that we're unfolding $path, and that the link + # removal action is earlier than the dir creation action + # in the task queue. FIXME: is this a safe assumption? + return 1; + } + else { # no dir action + return 0; + } + } + elsif ($laction eq 'create') { + if ($daction eq 'remove') { + # Assume that we're folding $path, and that the dir + # removal action is earlier than the link creation action + # in the task queue. FIXME: is this a safe assumption? + return 1; + } + elsif ($daction eq 'create') { + internal_error("creating link and dir: $path"); + return 1; + } + else { # no dir action + return 1; + } + } + else { + # No link action + if ($daction eq 'remove') { + return 0; + } + elsif ($daction eq 'create') { + return 1; + } + else { # no dir action + # fall through to below + } + } + + return 0 if $self->parent_link_scheduled_for_removal($path); + + if (-e $path) { + debug(4, " is_a_node($path): really exists"); + return 1; + } + + debug(4, " is_a_node($path): returning false"); + return 0; +} + +#===== METHOD =============================================================== +# Name : read_a_link() +# Purpose : return the source of a current or planned link +# Parameters: $path => path to the link target +# Returns : a string +# Throws : fatal exception if the given path is not a current or planned +# : link +# Comments : none +#============================================================================ +sub read_a_link { + my $self = shift; + my ($path) = @_; + + if (my $action = $self->link_task_action($path)) { + debug(4, " read_a_link($path): task exists with action $action"); + + if ($action eq 'create') { + return $self->{link_task_for}{$path}->{source}; + } + elsif ($action eq 'remove') { + internal_error( + "read_a_link() passed a path that is scheduled for removal: $path" + ); + } + } + elsif (-l $path) { + debug(4, " read_a_link($path): real link"); + my $target = readlink $path or error("Could not read link: $path ($!)"); + return $target; + } + internal_error("read_a_link() passed a non link path: $path\n"); +} + +#===== METHOD =============================================================== +# Name : do_link() +# Purpose : wrap 'link' operation for later processing +# Parameters: $oldfile => the existing file to link to +# : $newfile => the file to link +# Returns : n/a +# Throws : error if this clashes with an existing planned operation +# Comments : cleans up operations that undo previous operations +#============================================================================ +sub do_link { + my $self = shift; + my ($oldfile, $newfile) = @_; + + if (exists $self->{dir_task_for}{$newfile}) { + my $task_ref = $self->{dir_task_for}{$newfile}; + + if ($task_ref->{action} eq 'create') { + if ($task_ref->{type} eq 'dir') { + internal_error( + "new link (%s => %s) clashes with planned new directory", + $newfile, + $oldfile, + ); + } + } + elsif ($task_ref->{action} eq 'remove') { + # We may need to remove a directory before creating a link so continue. + } + else { + internal_error("bad task action: $task_ref->{action}"); + } + } + + if (exists $self->{link_task_for}{$newfile}) { + my $task_ref = $self->{link_task_for}{$newfile}; + + if ($task_ref->{action} eq 'create') { + if ($task_ref->{source} ne $oldfile) { + internal_error( + "new link clashes with planned new link: %s => %s", + $task_ref->{path}, + $task_ref->{source}, + ) + } + else { + debug(1, "LINK: $newfile => $oldfile (duplicates previous action)"); + return; + } + } + elsif ($task_ref->{action} eq 'remove') { + if ($task_ref->{source} eq $oldfile) { + # No need to remove a link we are going to recreate + debug(1, "LINK: $newfile => $oldfile (reverts previous action)"); + $self->{link_task_for}{$newfile}->{action} = 'skip'; + delete $self->{link_task_for}{$newfile}; + return; + } + # We may need to remove a link to replace it so continue + } + else { + internal_error("bad task action: $task_ref->{action}"); + } + } + + # Creating a new link + debug(1, "LINK: $newfile => $oldfile"); + my $task = { + action => 'create', + type => 'link', + path => $newfile, + source => $oldfile, + }; + push @{ $self->{tasks} }, $task; + $self->{link_task_for}{$newfile} = $task; + + return; +} + +#===== METHOD =============================================================== +# Name : do_unlink() +# Purpose : wrap 'unlink' operation for later processing +# Parameters: $file => the file to unlink +# Returns : n/a +# Throws : error if this clashes with an existing planned operation +# Comments : will remove an existing planned link +#============================================================================ +sub do_unlink { + my $self = shift; + my ($file) = @_; + + if (exists $self->{link_task_for}{$file}) { + my $task_ref = $self->{link_task_for}{$file}; + if ($task_ref->{action} eq 'remove') { + debug(1, "UNLINK: $file (duplicates previous action)"); + return; + } + elsif ($task_ref->{action} eq 'create') { + # Do need to create a link then remove it + debug(1, "UNLINK: $file (reverts previous action)"); + $self->{link_task_for}{$file}->{action} = 'skip'; + delete $self->{link_task_for}{$file}; + return; + } + else { + internal_error("bad task action: $task_ref->{action}"); + } + } + + if (exists $self->{dir_task_for}{$file} and $self->{dir_task_for}{$file} eq 'create') { + internal_error( + "new unlink operation clashes with planned operation: %s dir %s", + $self->{dir_task_for}{$file}->{action}, + $file + ); + } + + # Remove the link + debug(1, "UNLINK: $file"); + + my $source = readlink $file or error("could not readlink $file ($!)"); + + my $task = { + action => 'remove', + type => 'link', + path => $file, + source => $source, + }; + push @{ $self->{tasks} }, $task; + $self->{link_task_for}{$file} = $task; + + return; +} + +#===== METHOD =============================================================== +# Name : do_mkdir() +# Purpose : wrap 'mkdir' operation +# Parameters: $dir => the directory to remove +# Returns : n/a +# Throws : fatal exception if operation fails +# Comments : outputs a message if 'verbose' option is set +# : does not perform operation if 'simulate' option is set +# Comments : cleans up operations that undo previous operations +#============================================================================ +sub do_mkdir { + my $self = shift; + my ($dir) = @_; + + if (exists $self->{link_task_for}{$dir}) { + my $task_ref = $self->{link_task_for}{$dir}; + + if ($task_ref->{action} eq 'create') { + internal_error( + "new dir clashes with planned new link (%s => %s)", + $task_ref->{path}, + $task_ref->{source}, + ); + } + elsif ($task_ref->{action} eq 'remove') { + # May need to remove a link before creating a directory so continue + } + else { + internal_error("bad task action: $task_ref->{action}"); + } + } + + if (exists $self->{dir_task_for}{$dir}) { + my $task_ref = $self->{dir_task_for}{$dir}; + + if ($task_ref->{action} eq 'create') { + debug(1, "MKDIR: $dir (duplicates previous action)"); + return; + } + elsif ($task_ref->{action} eq 'remove') { + debug(1, "MKDIR: $dir (reverts previous action)"); + $self->{dir_task_for}{$dir}->{action} = 'skip'; + delete $self->{dir_task_for}{$dir}; + return; + } + else { + internal_error("bad task action: $task_ref->{action}"); + } + } + + debug(1, "MKDIR: $dir"); + my $task = { + action => 'create', + type => 'dir', + path => $dir, + source => undef, + }; + push @{ $self->{tasks} }, $task; + $self->{dir_task_for}{$dir} = $task; + + return; +} + +#===== METHOD =============================================================== +# Name : do_rmdir() +# Purpose : wrap 'rmdir' operation +# Parameters: $dir => the directory to remove +# Returns : n/a +# Throws : fatal exception if operation fails +# Comments : outputs a message if 'verbose' option is set +# : does not perform operation if 'simulate' option is set +#============================================================================ +sub do_rmdir { + my $self = shift; + my ($dir) = @_; + + if (exists $self->{link_task_for}{$dir}) { + my $task_ref = $self->{link_task_for}{$dir}; + internal_error( + "rmdir clashes with planned operation: %s link %s => %s", + $task_ref->{action}, + $task_ref->{path}, + $task_ref->{source} + ); + } + + if (exists $self->{dir_task_for}{$dir}) { + my $task_ref = $self->{link_task_for}{$dir}; + + if ($task_ref->{action} eq 'remove') { + debug(1, "RMDIR $dir (duplicates previous action)"); + return; + } + elsif ($task_ref->{action} eq 'create') { + debug(1, "MKDIR $dir (reverts previous action)"); + $self->{link_task_for}{$dir}->{action} = 'skip'; + delete $self->{link_task_for}{$dir}; + return; + } + else { + internal_error("bad task action: $task_ref->{action}"); + } + } + + debug(1, "RMDIR $dir"); + my $task = { + action => 'remove', + type => 'dir', + path => $dir, + source => '', + }; + push @{ $self->{tasks} }, $task; + $self->{dir_task_for}{$dir} = $task; + + return; +} + +#===== METHOD =============================================================== +# Name : do_mv() +# Purpose : wrap 'move' operation for later processing +# Parameters: $src => the file to move +# : $dst => the path to move it to +# Returns : n/a +# Throws : error if this clashes with an existing planned operation +# Comments : alters contents of package installation image in stow dir +#============================================================================ +sub do_mv { + my $self = shift; + my ($src, $dst) = @_; + + if (exists $self->{link_task_for}{$src}) { + # I don't *think* this should ever happen, but I'm not + # 100% sure. + my $task_ref = $self->{link_task_for}{$src}; + internal_error( + "do_mv: pre-existing link task for $src; action: %s, source: %s", + $task_ref->{action}, $task_ref->{source} + ); + } + elsif (exists $self->{dir_task_for}{$src}) { + my $task_ref = $self->{dir_task_for}{$src}; + internal_error( + "do_mv: pre-existing dir task for %s?! action: %s", + $src, $task_ref->{action} + ); + } + + # Remove the link + debug(1, "MV: $src -> $dst"); + + my $task = { + action => 'move', + type => 'file', + path => $src, + dest => $dst, + }; + push @{ $self->{tasks} }, $task; + + # FIXME: do we need this for anything? + #$self->{mv_task_for}{$file} = $task; + + return; +} + + +############################################################################# +# +# End of methods; subroutines follow. +# FIXME: Ideally these should be in a separate module. + + +#===== PRIVATE SUBROUTINE =================================================== +# Name : internal_error() +# Purpose : output internal error message in a consistent form and die +# Parameters: $message => error message to output +# Returns : n/a +# Throws : n/a +# Comments : none +#============================================================================ +sub internal_error { + my ($format, @args) = @_; + my $error = sprintf($format, @args); + my $stacktrace = Carp::longmess(); + die <. + +=cut + +use strict; +use warnings; + +use POSIX qw(getcwd); + +use base qw(Exporter); +our @EXPORT_OK = qw( + error debug set_debug_level set_test_mode + join_paths parent canon_path restore_cwd +); + +our $ProgramName = 'stow'; +our $VERSION = '2.2.2'; + +############################################################################# +# +# General Utilities: nothing stow specific here. +# +############################################################################# + +=head1 IMPORTABLE SUBROUTINES + +=head2 error($format, @args) + +Outputs an error message in a consistent form and then dies. + +=cut + +sub error { + my ($format, @args) = @_; + die "$ProgramName: ERROR: " . sprintf($format, @args) . "\n"; +} + +=head2 set_debug_level($level) + +Sets verbosity level for C. + +=cut + +our $debug_level = 0; + +sub set_debug_level { + my ($level) = @_; + $debug_level = $level; +} + +=head2 set_test_mode($on_or_off) + +Sets testmode on or off. + +=cut + +our $test_mode = 0; + +sub set_test_mode { + my ($on_or_off) = @_; + if ($on_or_off) { + $test_mode = 1; + } + else { + $test_mode = 0; + } +} + +=head2 debug($level, $msg) + +Logs to STDERR based on C<$debug_level> setting. C<$level> is the +minimum verbosity level required to output C<$msg>. All output is to +STDERR to preserve backward compatibility, except for in test mode, +when STDOUT is used instead. In test mode, the verbosity can be +overridden via the C environment variable. + +Verbosity rules: + +=over 4 + +=item 0: errors only + +=item >= 1: print operations: LINK/UNLINK/MKDIR/RMDIR/MV + +=item >= 2: print operation exceptions + +e.g. "_this_ already points to _that_", skipping, deferring, +overriding, fixing invalid links + +=item >= 3: print trace detail: trace: stow/unstow/package/contents/node + +=item >= 4: debug helper routines + +=item >= 5: debug ignore lists + +=back + +=cut + +sub debug { + my ($level, $msg) = @_; + if ($debug_level >= $level) { + if ($test_mode) { + print "# $msg\n"; + } + else { + warn "$msg\n"; + } + } +} + +#===== METHOD =============================================================== +# Name : join_paths() +# Purpose : concatenates given paths +# Parameters: path1, path2, ... => paths +# Returns : concatenation of given paths +# Throws : n/a +# Comments : factors out redundant path elements: +# : '//' => '/' and 'a/b/../c' => 'a/c' +#============================================================================ +sub join_paths { + my @paths = @_; + + # weed out empty components and concatenate + my $result = join '/', grep {! /\A\z/} @paths; + + # factor out back references and remove redundant /'s) + my @result = (); + PART: + for my $part (split m{/+}, $result) { + next PART if $part eq '.'; + if (@result && $part eq '..' && $result[-1] ne '..') { + pop @result; + } + else { + push @result, $part; + } + } + + return join '/', @result; +} + +#===== METHOD =============================================================== +# Name : parent +# Purpose : find the parent of the given path +# Parameters: @path => components of the path +# Returns : returns a path string +# Throws : n/a +# Comments : allows you to send multiple chunks of the path +# : (this feature is currently not used) +#============================================================================ +sub parent { + my @path = @_; + my $path = join '/', @_; + my @elts = split m{/+}, $path; + pop @elts; + return join '/', @elts; +} + +#===== METHOD =============================================================== +# Name : canon_path +# Purpose : find absolute canonical path of given path +# Parameters: $path +# Returns : absolute canonical path +# Throws : n/a +# Comments : is this significantly different from File::Spec->rel2abs? +#============================================================================ +sub canon_path { + my ($path) = @_; + + my $cwd = getcwd(); + chdir($path) or error("canon_path: cannot chdir to $path from $cwd"); + my $canon_path = getcwd(); + restore_cwd($cwd); + + return $canon_path; +} + +sub restore_cwd { + my ($prev) = @_; + chdir($prev) or error("Your current directory $prev seems to have vanished"); +} + +=head1 BUGS + +=head1 SEE ALSO + +=cut + +1; + +# Local variables: +# mode: perl +# cperl-indent-level: 4 +# end: +# vim: ft=perl