Reorganise more files into subdirectories and add CPAN support via Module::Build

This commit is contained in:
Adam Spiers 2011-11-21 13:59:36 +00:00
parent 382ad5c58d
commit 58625800ee
15 changed files with 369 additions and 95 deletions

58
Build.PL Normal file
View file

@ -0,0 +1,58 @@
use strict;
use warnings;
use Module::Build;
# These are required by the test suite.
use lib "t";
use lib "bin";
my $build = Module::Build->new(
module_name => 'Stow',
keywords => [ qw/stow symlink software package management install/ ],
license => 'gpl',
# Module::Build forces us to use v1.4 of the CPAN Meta Spec:
# https://rt.cpan.org/Ticket/Display.html?id=71502
# 'meta-spec' => {
# version => '2.0',
# url => 'http://search.cpan.org/perldoc?CPAN::Meta::Spec',
# },
meta_add => {
resources => {
license => 'http://www.gnu.org/licenses/gpl-2.0.html' ,
homepage => 'https://savannah.gnu.org/projects/stow',
# Module::Build forces us to use v1.4 of the CPAN Meta Spec:
# https://rt.cpan.org/Ticket/Display.html?id=71502
# bugtracker => {
# web => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Stow',
# mailto => 'mysqldiff@adamspiers.org',
# },
#bugtracker => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Stow',
# Module::Build forces us to use v1.4 of the CPAN Meta Spec:
# https://rt.cpan.org/Ticket/Display.html?id=71502
# repository => {
# url => 'git:github.com/aspiers/stow.git',
# web => 'http://github.com/aspiers/stow',
# type => 'git',
# },
repository => 'http://github.com/aspiers/stow',
#repository => 'https://savannah.gnu.org/git/?group=stow',
},
},
requires => {
'perl' => '5.006',
'Carp' => 0,
'File::Slurp' => 0,
'IO::File' => 0,
},
script_files => [ 'bin/stow' ],
all_from => 'lib/Stow.pm',
configure_requires => {
'Module::Build' => 0,
},
);
$build->create_build_script();

46
MANIFEST Normal file
View file

@ -0,0 +1,46 @@
aclocal.m4
AUTHORS
automake/install-sh
automake/mdate-sh
automake/missing
automake/stamp-vti
bin/chkstow
bin/chkstow.in
bin/stow
bin/stow.in
Build.PL
ChangeLog
configure
configure.ac
COPYING
doc/stow.8
doc/stow.info
doc/stow.texi
doc/texinfo.tex
doc/version.texi
INSTALL
lib/Stow.pm
lib/Stow.pm.in
lib/Stow/Util.pm
Makefile.am
Makefile.in
MANIFEST This list of files
NEWS
README
t/chkstow.t
t/cleanup_invalid_links.t
t/defer.t
t/examples.t
t/find_stowed_path.t
t/foldable.t
t/join_paths.t
t/parent.t
t/stow.t
t/stow_contents.t
t/testutil.pm
t/unstow_contents.t
t/unstow_contents_orig.t
THANKS
TODO
META.yml
META.json

78
MANIFEST.SKIP Normal file
View file

@ -0,0 +1,78 @@
#!start included /usr/share/perl5/ExtUtils/MANIFEST.SKIP
# Avoid version control files.
\bRCS\b
\bCVS\b
\bSCCS\b
,v$
\B\.svn\b
\B\.git\b
\B\.gitignore\b
\b_darcs\b
\B\.cvsignore$
# Avoid VMS specific MakeMaker generated files
\bDescrip.MMS$
\bDESCRIP.MMS$
\bdescrip.mms$
# Avoid Makemaker generated and utility files.
\bMANIFEST\.bak
\bMakefile$
\bblib/
\bMakeMaker-\d
\bpm_to_blib\.ts$
\bpm_to_blib$
\bblibdirs\.ts$ # 6.18 through 6.25 generated this
# Avoid Module::Build generated and utility files.
\bBuild$
\b_build/
\bBuild.bat$
\bBuild.COM$
\bBUILD.COM$
\bbuild.com$
# Avoid temp and backup files.
~$
\.old$
\#$
\b\.#
\.bak$
\.tmp$
\.#
\.rej$
# Avoid OS-specific files/dirs
# Mac OSX metadata
\B\.DS_Store
# Mac OSX SMB mount metadata files
\B\._
# Avoid Devel::Cover files.
\bcover_db\b
#!end included /usr/share/perl5/ExtUtils/MANIFEST.SKIP
# Avoid configuration metadata file
^MYMETA\.
# Avoid Module::Build generated and utility files.
\bBuild$
\bBuild.bat$
\b_build
\bBuild.COM$
\bBUILD.COM$
\bbuild.com$
^MANIFEST\.SKIP
# Avoid archives of this distribution
\bStow-[\d\.\_]+
# Avoid autotools stuff
^autom4te\.cache/.+$
^config\.(log|status)$
^doc/\.dirstamp$
^doc/stamp-vti$
# Avoid test files
^t/(stow|target)/.+$

52
META.json Normal file
View file

@ -0,0 +1,52 @@
{
"abstract" : "manage the installation of multiple software packages",
"author" : [
"unknown"
],
"dynamic_config" : 1,
"generated_by" : "Module::Build version 0.38, CPAN::Meta::Converter version 2.112621",
"license" : [
"open_source"
],
"meta-spec" : {
"url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
"version" : "2"
},
"name" : "Stow",
"prereqs" : {
"configure" : {
"requires" : {
"Module::Build" : 0
}
},
"runtime" : {
"requires" : {
"Carp" : 0,
"File::Slurp" : 0,
"IO::File" : 0,
"perl" : "5.006"
}
}
},
"provides" : {
"Stow" : {
"file" : "lib/Stow.pm",
"version" : "v2.0.2"
},
"Stow::Util" : {
"file" : "lib/Stow/Util.pm",
"version" : 0
}
},
"release_status" : "stable",
"resources" : {
"homepage" : "https://savannah.gnu.org/projects/stow",
"license" : [
"http://www.gnu.org/licenses/gpl-2.0.html"
],
"repository" : {
"url" : "http://github.com/aspiers/stow"
}
},
"version" : "v2.0.2"
}

31
META.yml Normal file
View file

@ -0,0 +1,31 @@
---
abstract: 'manage the installation of multiple software packages'
author:
- unknown
build_requires: {}
configure_requires:
Module::Build: 0
dynamic_config: 1
generated_by: 'Module::Build version 0.38, CPAN::Meta::Converter version 2.112621'
license: open_source
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: 1.4
name: Stow
provides:
Stow:
file: lib/Stow.pm
version: v2.0.2
Stow::Util:
file: lib/Stow/Util.pm
version: 0
requires:
Carp: 0
File::Slurp: 0
IO::File: 0
perl: 5.006
resources:
homepage: https://savannah.gnu.org/projects/stow
license: http://www.gnu.org/licenses/gpl-2.0.html
repository: http://github.com/aspiers/stow
version: v2.0.2

View file

@ -1,11 +1,14 @@
## Process this file with Automake to produce Makefile.in ## Process this file with Automake to produce Makefile.in
bin_SCRIPTS = stow chkstow dist_bin_SCRIPTS = bin/stow bin/chkstow
info_TEXINFOS = stow.texi info_TEXINFOS = doc/stow.texi
dist_man_MANS = stow.8 TEXINFO_TEX = doc/texinfo.tex
dist_man_MANS = doc/stow.8
dist_doc_DATA = README dist_doc_DATA = README
pmdir = $(libdir)/perl5 pmdir = $(libdir)/perl5
pm_DATA = lib/Stow.pm lib/Stow/Util.pm dist_pm_DATA = lib/Stow.pm
pmstowdir = $(pmdir)/Stow
dist_pmstow_DATA = lib/Stow/Util.pm
TESTS_ENVIRONMENT=$(PERL) -I $(top_srcdir) TESTS_ENVIRONMENT=$(PERL) -I $(top_srcdir)
TESTS = \ TESTS = \
@ -23,8 +26,13 @@ TESTS = \
t/chkstow.t t/chkstow.t
AUTOMAKE_OPTIONS = dist-shar AUTOMAKE_OPTIONS = dist-shar
EXTRA_DIST = $(TESTS) t/testutil.pm CPAN_FILES = MANIFEST MANIFEST.SKIP Build.PL META.yml META.json
CLEANFILES = $(bin_SCRIPTS) EXTRA_DIST = \
bin/stow.in bin/chkstow.in lib/Stow.pm.in \
$(TESTS) t/testutil.pm \
$(TEXINFO_TEX) \
$(CPAN_FILES)
CLEANFILES = $(bin_SCRIPTS) $(dist_pm_DATA)
# clean up files left behind by test suite # clean up files left behind by test suite
clean-local: clean-local:
@ -34,11 +42,11 @@ clean-local:
edit = sed -e 's|[@]PERL[@]|$(PERL)|g' \ edit = sed -e 's|[@]PERL[@]|$(PERL)|g' \
-e 's|[@]VERSION[@]|$(VERSION)|g' -e 's|[@]VERSION[@]|$(VERSION)|g'
stow: stow.in Makefile bin/stow: bin/stow.in Makefile
$(edit) < $< > $@ $(edit) < $< > $@
chmod +x $@ chmod +x $@
chkstow: chkstow.in Makefile bin/chkstow: bin/chkstow.in Makefile
$(edit) < $< > $@ $(edit) < $< > $@
chmod +x $@ chmod +x $@
@ -47,15 +55,15 @@ lib/Stow.pm: lib/Stow.pm.in
# The rules for manual.html and manual.texi are only used by # The rules for manual.html and manual.texi are only used by
# the developer # the developer
manual.html: manual.texi doc/manual.html: doc/manual.texi
-rm -f $@ -rm -f $@
texi2html -expandinfo -menu -monolithic -verbose $< texi2html -expandinfo -menu -monolithic -verbose $<
manual.texi: stow.texi doc/manual.texi: doc/stow.texi
-rm -f $@ -rm -f $@
cp $< $@ cp $< $@
MODULES = lib/Stow.pm lib/Stow/Util.pm MODULES = lib/Stow.pm lib/Stow/Util.pm
test: stow chkstow $(MODULES) test: bin/stow bin/chkstow $(MODULES)
perl -MTest::Harness -Ilib -It -Ibin -e 'runtests(@ARGV)' t/*.t perl -MTest::Harness -Ilib -It -Ibin -e 'runtests(@ARGV)' t/*.t

View file

@ -37,11 +37,11 @@ sub usage {
print <<"EOT"; print <<"EOT";
USAGE: chkstow [options] USAGE: chkstow [options]
Options: Options:
-b, --badlinks Report symlinks that point to non-existant files. -b, --badlinks Report symlinks that point to non-existant files.
-a, --aliens Report non-symlinks in the target directory. -a, --aliens Report non-symlinks in the target directory.
-l, --list List packages in the target directory. -l, --list List packages in the target directory.
-t DIR, --target=DIR Set the target directory to DIR (default -t DIR, --target=DIR Set the target directory to DIR (default
is /usr/local) is /usr/local)
EOT EOT
exit(0); exit(0);
@ -51,7 +51,7 @@ sub check_stow {
#my ($Target, $Wanted) = @_; #my ($Target, $Wanted) = @_;
my (%options) = ( my (%options) = (
wanted => $Wanted, wanted => $Wanted,
preprocess => \&skip_dirs, preprocess => \&skip_dirs,
); );
@ -81,12 +81,12 @@ sub skip_dirs {
# checking for files that do not link to anything # checking for files that do not link to anything
sub bad_links { sub bad_links {
-l && !-e && print "Bogus link: $File::Find::name\n"; -l && !-e && print "Bogus link: $File::Find::name\n";
} }
# checking for files that are not owned by stow # checking for files that are not owned by stow
sub aliens { sub aliens {
!-l && !-d && print "Unstowed file: $File::Find::name\n"; !-l && !-d && print "Unstowed file: $File::Find::name\n";
} }
# just list the packages in the the target directory # just list the packages in the the target directory

View file

@ -87,34 +87,34 @@ sub process_options {
'version|V', 'compat|p', 'dir|d=s', 'target|t=s', 'version|V', 'compat|p', 'dir|d=s', 'target|t=s',
# clean and pre-compile any regex's at parse time # clean and pre-compile any regex's at parse time
'ignore=s' => 'ignore=s' =>
sub { sub {
# FIXME: do we really need strip_quotes here? # FIXME: do we really need strip_quotes here?
my $regex = strip_quotes($_[1]); my $regex = strip_quotes($_[1]);
push @{$options{'ignore'}}, qr($regex\z); push @{$options{'ignore'}}, qr($regex\z);
}, },
'override=s' => 'override=s' =>
sub { sub {
my $regex = strip_quotes($_[1]); my $regex = strip_quotes($_[1]);
push @{$options{'override'}}, qr(\A$regex); push @{$options{'override'}}, qr(\A$regex);
}, },
'defer=s' => 'defer=s' =>
sub { sub {
my $regex = strip_quotes($_[1]); my $regex = strip_quotes($_[1]);
push @{$options{'defer'}}, qr(\A$regex); push @{$options{'defer'}}, qr(\A$regex);
}, },
# a little craziness so we can do different actions on the same line: # 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 # a -D, -S, or -R changes the action that will be performed on the
# package arguments that follow it. # package arguments that follow it.
'D|delete' => sub { $action = 'unstow' }, 'D|delete' => sub { $action = 'unstow' },
'S|stow' => sub { $action = 'stow' }, 'S|stow' => sub { $action = 'stow' },
'R|restow' => sub { $action = 'restow' }, 'R|restow' => sub { $action = 'restow' },
# Handler for non-option arguments # Handler for non-option arguments
'<>' => '<>' =>
sub { sub {
if ($action eq 'restow') { if ($action eq 'restow') {
push @pkgs_to_unstow, $_[0]; push @pkgs_to_unstow, $_[0];
@ -146,7 +146,7 @@ sub sanitize_path_options {
$options->{'dir'} =~ s/ +\z//; $options->{'dir'} =~ s/ +\z//;
} }
else { else {
$options->{'dir'} = exists $ENV{STOW_DIR} ? $ENV{STOW_DIR} : getcwd(); $options->{'dir'} = exists $ENV{STOW_DIR} ? $ENV{STOW_DIR} : getcwd();
} }
if (exists $options->{'target'}) { if (exists $options->{'target'}) {
@ -176,7 +176,7 @@ sub check_packages {
#===== SUBROUTINE ============================================================ #===== SUBROUTINE ============================================================
# Name : get_config_file_options() # Name : get_config_file_options()
# Purpose : search for default settings in any .stowrc files # Purpose : search for default settings in any .stowrc files
# Parameters: none # Parameters: none
# Returns : a list of default options # Returns : a list of default options
@ -190,7 +190,7 @@ sub get_config_file_options {
for my $file ("$ENV{'HOME'}/.stowrc", '.stowrc') { for my $file ("$ENV{'HOME'}/.stowrc", '.stowrc') {
if (-r $file) { if (-r $file) {
warn "Loading defaults from $file\n"; warn "Loading defaults from $file\n";
open my $FILE, '<', $file open my $FILE, '<', $file
or die "Could not open $file for reading\n"; or die "Could not open $file for reading\n";
while (my $line = <$FILE>){ while (my $line = <$FILE>){
chomp $line; chomp $line;
@ -200,13 +200,13 @@ sub get_config_file_options {
} }
} }
return @defaults; return @defaults;
} }
#===== SUBROUTINE =========================================================== #===== SUBROUTINE ===========================================================
# Name : usage() # Name : usage()
# Purpose : print program usage message and exit # Purpose : print program usage message and exit
# Parameters: $msg => string to prepend to the usage message # Parameters: $msg => string to prepend to the usage message
# Returns : n/a # Returns : n/a
# Throws : n/a # Throws : n/a
# Comments : if 'msg' is given, then exit with non-zero status # Comments : if 'msg' is given, then exit with non-zero status
#============================================================================ #============================================================================
@ -255,7 +255,7 @@ sub version {
} }
#===== METHOD ================================================================ #===== METHOD ================================================================
# Name : strip_quotes # Name : strip_quotes
# Purpose : remove matching outer quotes from the given string # Purpose : remove matching outer quotes from the given string
# Parameters: none # Parameters: none
# Returns : n/a # Returns : n/a

View file

@ -2,6 +2,7 @@ dnl Process this file with Autoconf to produce configure dnl
AC_INIT([stow], [2.0.2], [bug-stow@gnu.org]) AC_INIT([stow], [2.0.2], [bug-stow@gnu.org])
AC_PREREQ([2.61]) AC_PREREQ([2.61])
AC_CONFIG_AUX_DIR([automake])
AM_INIT_AUTOMAKE([-Wall -Werror]) AM_INIT_AUTOMAKE([-Wall -Werror])
AC_PROG_INSTALL AC_PROG_INSTALL

View file

@ -146,7 +146,7 @@ The target of a relative symlink is
computed starting from the symlink's own directory. Stow only creates computed starting from the symlink's own directory. Stow only creates
relative symlinks. relative symlinks.
.SH OPTIONS .SH OPTIONS
The stow directory is assumed to be the value of the 'STOW_DIR' environment The stow directory is assumed to be the value of the 'STOW_DIR' environment
variable or if unset the current directory, and the variable or if unset the current directory, and the
target directory is assumed to be the parent of the current directory target directory is assumed to be the parent of the current directory
(so it is typical to execute (so it is typical to execute

View file

@ -129,7 +129,7 @@ remove files in independent packages without confusing them with other
files sharing the same file system space. For instance, it is common to files sharing the same file system space. For instance, it is common to
install Perl and Emacs in @file{/usr/local}. When one does so, one install Perl and Emacs in @file{/usr/local}. When one does so, one
winds up with the following files@footnote{As of Perl 4.036 and Emacs winds up with the following files@footnote{As of Perl 4.036 and Emacs
19.22.} in @file{/usr/local/man/man1}: 19.22.} in @file{/usr/local/man/man1}:
@example @example
a2p.1 a2p.1
@ -138,7 +138,7 @@ emacs.1
etags.1 etags.1
h2ph.1 h2ph.1
perl.1 perl.1
s2p.1 s2p.1
@end example @end example
@noindent @noindent
@ -269,7 +269,7 @@ given perl regular expression. For example, using the options
@end example @end example
@noindent @noindent
will cause stow to ignore emacs and CVS backup files. will cause stow to ignore emacs and CVS backup files.
Note that the regular expression is anchored to the end of the filename, 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. because this is what you will want to do most of the time.
@ -299,7 +299,7 @@ a Perl regex.
Note that the regular expression is anchored to the beginning of the path 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 relative to the target directory, because this is what you will want to do most
of the time. of the time.
@item --override='<regex>' @item --override='<regex>'
This (repeatable) option forces any file matching the regular expression to be This (repeatable) option forces any file matching the regular expression to be
@ -312,7 +312,7 @@ the following options
@noindent @noindent
will permit stow to overwrite links that point to pre-existing man and 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. 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 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. the target directory, because this is what you will want to do most of the time.
@ -321,7 +321,7 @@ the target directory, because this is what you will want to do most of the time.
@itemx --no @itemx --no
@itemx --simulate @itemx --simulate
Do not perform any operations that modify the file system; in combination with Do not perform any operations that modify the file system; in combination with
@samp{-v} can be used to merely show what would happen. @samp{-v} can be used to merely show what would happen.
@item -v @item -v
@itemx --verbose[=@var{n}] @itemx --verbose[=@var{n}]
@ -335,8 +335,8 @@ doing. Verbosity levels are 0, 1, 2, and 3; 0 is the default. Using
Scan the whole target tree when unstowing. By default, only directories Scan the whole target tree when unstowing. By default, only directories
specified in the @dfn{installation image} are scanned during an unstow specified in the @dfn{installation image} are scanned during an unstow
operation. Scanning the whole tree can be prohibitive if your target tree is operation. Scanning the whole tree can be prohibitive if your target tree is
very large. This option restores the legacy behaviour; however, the very large. This option restores the legacy behaviour; however, the
@samp{--badlinks} option may be a better way of ensuring that your @samp{--badlinks} option may be a better way of ensuring that your
installation does not have any dangling symlinks. installation does not have any dangling symlinks.
@item -V @item -V
@ -377,7 +377,7 @@ The following options are useful for cleaning up your target tree:
@item -b @item -b
@itemx --badlinks @itemx --badlinks
Checks target directory for bogus symbolic links. That is, links that point to Checks target directory for bogus symbolic links. That is, links that point to
non-existent files. non-existent files.
@item -a @item -a
@itemx --aliens @itemx --aliens
@ -387,7 +387,7 @@ contain a @file{.stow} file.
@item -l @item -l
@itemx --list @itemx --list
Will display the target package for every symbolic link in the stow target Will display the target package for every symbolic link in the stow target
directory. directory.
The following options are deprecated: The following options are deprecated:
@end table @end table
@ -398,9 +398,9 @@ The following options are deprecated as of Stow version 2:
@itemx --conflicts @itemx --conflicts
Print any conflicts that are encountered. This option Print any conflicts that are encountered. This option
implies @samp{-n}, and is used to search for all conflicts that might implies @samp{-n}, and is used to search for all conflicts that might
arise from an actual Stow operation. arise from an actual Stow operation.
This option is deprecated as conflicts are now printed by default and no This option is deprecated as conflicts are now printed by default and no
operations will be performed if any conflicts are detected. operations will be performed if any conflicts are detected.
@end table @end table
@ -460,8 +460,8 @@ tree-folding symlink.
@cindex unfolding trees @cindex unfolding trees
The time often comes when a tree-folding symlink has to be undone 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 because another package uses one or more of the folded subdirectories in
its installation image. This operation is called @dfn{splitting open} or its installation image. This operation is called @dfn{splitting open} or
@dfn{unfolding} a folded tree. It involves removing the original symlink from @dfn{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 the target tree, creating a true directory in its place, and then populating the
new directory with symlinks to the newly-installed package @emph{and} to new directory with symlinks to the newly-installed package @emph{and} to
the old package that used the old symlink. For example, suppose that the old package that used the old symlink. For example, suppose that
@ -561,7 +561,7 @@ un-populatable symlink.
For complex packages, scanning the stow and target trees in tandem, and For complex packages, scanning the stow and target trees in tandem, and
deciding whether to make directories or links, split-open or fold directories, 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 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 analysis of potential conflicts requires us to take into account all of
these operations. these operations.
@ -585,7 +585,7 @@ stow -D emacs-21.3 -S emacs-21.4a
@end example @end example
@noindent @noindent
which will replace emacs-21.3 with emacs-21.4a using a single invocation. 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 This is much faster and cleaner than performing two separate invocations of
stow, because redundant folding/unfolding operations can be factored out. In stow, because redundant folding/unfolding operations can be factored out. In
@ -593,7 +593,7 @@ addition, all the operations are calculated and merged before being executed
@pxref{Deferred Operation}, so the amount of of time in which GNU Emacs is @pxref{Deferred Operation}, so the amount of of time in which GNU Emacs is
unavailable is minimised. unavailable is minimised.
You can mix and match any number of actions, for example, You can mix and match any number of actions, for example,
@example @example
stow -S pkg1 pkg2 -D pkg3 pkg4 -S pkg5 -R pkg6 stow -S pkg1 pkg2 -D pkg3 pkg4 -S pkg5 -R pkg6
@ -631,7 +631,7 @@ symlink, and thus cannot remove it).
@chapter Target Maintenance @chapter Target Maintenance
From time to time you will need to clean up your target tree. From time to time you will need to clean up your target tree.
Stow includes three operational modes that performs checks that Stow includes three operational modes that performs checks that
would generally be too expensive to performed during normal stow would generally be too expensive to performed during normal stow
execution. execution.
@ -1020,8 +1020,8 @@ the output from the command (preferably verbose output, obtained by
adding @samp{--verbose=3} to the Stow command line). adding @samp{--verbose=3} to the Stow command line).
@end itemize @end itemize
If you are really keen, consider developing a minimal test case and creating a If you are really keen, consider developing a minimal test case and
new test. See the @file{t/} for lots of examples. creating a new test. See the @file{t/} for lots of examples.
Before reporting a bug, please read the manual carefully, especially Before reporting a bug, please read the manual carefully, especially
@ref{Known Bugs}, to see whether you're encountering @ref{Known Bugs}, to see whether you're encountering

View file

@ -3,7 +3,7 @@
% Load plain if necessary, i.e., if running under initex. % Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
% %
\def\texinfoversion{2006-10-04.17} \def\texinfoversion{2011-11-21.13}
% %
% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free
@ -310,7 +310,7 @@
% We don't want .vr (or whatever) entries like this: % We don't want .vr (or whatever) entries like this:
% \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
% "\acronym" won't work when it's read back in; % "\acronym" won't work when it's read back in;
% it needs to be % it needs to be
% {\code {{\tt \backslashcurfont }acronym} % {\code {{\tt \backslashcurfont }acronym}
\shipout\vbox{% \shipout\vbox{%
% Do this early so pdf references go to the beginning of the page. % Do this early so pdf references go to the beginning of the page.
@ -661,7 +661,7 @@
\def\?{?\spacefactor=\endofsentencespacefactor\space} \def\?{?\spacefactor=\endofsentencespacefactor\space}
% @frenchspacing on|off says whether to put extra space after punctuation. % @frenchspacing on|off says whether to put extra space after punctuation.
% %
\def\onword{on} \def\onword{on}
\def\offword{off} \def\offword{off}
% %
@ -1216,7 +1216,7 @@ where each line of input produces a line of output.}
% that's what we do). % that's what we do).
% double active backslashes. % double active backslashes.
% %
{\catcode`\@=0 \catcode`\\=\active {\catcode`\@=0 \catcode`\\=\active
@gdef@activebackslashdouble{% @gdef@activebackslashdouble{%
@catcode`@\=@active @catcode`@\=@active
@ -1227,11 +1227,11 @@ where each line of input produces a line of output.}
% not active characters. hyperref.dtx (which has the same problem as % not active characters. hyperref.dtx (which has the same problem as
% us) handles it with this amazing macro to replace tokens. I've % us) handles it with this amazing macro to replace tokens. I've
% tinkered with it a little for texinfo, but it's definitely from there. % tinkered with it a little for texinfo, but it's definitely from there.
% %
% #1 is the tokens to replace. % #1 is the tokens to replace.
% #2 is the replacement. % #2 is the replacement.
% #3 is the control sequence with the string. % #3 is the control sequence with the string.
% %
\def\HyPsdSubst#1#2#3{% \def\HyPsdSubst#1#2#3{%
\def\HyPsdReplace##1#1##2\END{% \def\HyPsdReplace##1#1##2\END{%
##1% ##1%
@ -1420,7 +1420,7 @@ where each line of input produces a line of output.}
% tried to figure out what each command should do in the context % tried to figure out what each command should do in the context
% of @url. for now, just make @/ a no-op, that's the only one % of @url. for now, just make @/ a no-op, that's the only one
% people have actually reported a problem with. % people have actually reported a problem with.
% %
\normalturnoffactive \normalturnoffactive
\def\@{@}% \def\@{@}%
\let\/=\empty \let\/=\empty
@ -1547,7 +1547,7 @@ where each line of input produces a line of output.}
% Definitions for a main text size of 11pt. This is the default in % Definitions for a main text size of 11pt. This is the default in
% Texinfo. % Texinfo.
% %
\def\definetextfontsizexi{ \def\definetextfontsizexi{
% Text fonts (11.2pt, magstep1). % Text fonts (11.2pt, magstep1).
\def\textnominalsize{11pt} \def\textnominalsize{11pt}
@ -1672,7 +1672,7 @@ where each line of input produces a line of output.}
% section, chapter, etc., sizes following suit. This is for the GNU % section, chapter, etc., sizes following suit. This is for the GNU
% Press printing of the Emacs 22 manual. Maybe other manuals in the % Press printing of the Emacs 22 manual. Maybe other manuals in the
% future. Used with @smallbook, which sets the leading to 12pt. % future. Used with @smallbook, which sets the leading to 12pt.
% %
\def\definetextfontsizex{% \def\definetextfontsizex{%
% Text fonts (10pt). % Text fonts (10pt).
\def\textnominalsize{10pt} \def\textnominalsize{10pt}
@ -1758,7 +1758,7 @@ where each line of input produces a line of output.}
\setfont\secsf\sfbshape{12}{1000} \setfont\secsf\sfbshape{12}{1000}
\let\secbf\secrm \let\secbf\secrm
\setfont\secsc\scbshape{10}{\magstep1} \setfont\secsc\scbshape{10}{\magstep1}
\font\seci=cmmi12 \font\seci=cmmi12
\font\secsy=cmsy10 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep1
% Subsection fonts (10pt). % Subsection fonts (10pt).
@ -1799,7 +1799,7 @@ where each line of input produces a line of output.}
% We provide the user-level command % We provide the user-level command
% @fonttextsize 10 % @fonttextsize 10
% (or 11) to redefine the text font size. pt is assumed. % (or 11) to redefine the text font size. pt is assumed.
% %
\def\xword{10} \def\xword{10}
\def\xiword{11} \def\xiword{11}
% %
@ -1809,7 +1809,7 @@ where each line of input produces a line of output.}
% %
% Set \globaldefs so that documents can use this inside @tex, since % Set \globaldefs so that documents can use this inside @tex, since
% makeinfo 4.8 does not support it, but we need it nonetheless. % makeinfo 4.8 does not support it, but we need it nonetheless.
% %
\begingroup \globaldefs=1 \begingroup \globaldefs=1
\ifx\textsizearg\xword \definetextfontsizex \ifx\textsizearg\xword \definetextfontsizex
\else \ifx\textsizearg\xiword \definetextfontsizexi \else \ifx\textsizearg\xiword \definetextfontsizexi
@ -2094,7 +2094,7 @@ where each line of input produces a line of output.}
% each of the four underscores in __typeof__. This is undesirable in % each of the four underscores in __typeof__. This is undesirable in
% some manuals, especially if they don't have long identifiers in % some manuals, especially if they don't have long identifiers in
% general. @allowcodebreaks provides a way to control this. % general. @allowcodebreaks provides a way to control this.
% %
\newif\ifallowcodebreaks \allowcodebreakstrue \newif\ifallowcodebreaks \allowcodebreakstrue
\def\keywordtrue{true} \def\keywordtrue{true}
@ -2225,7 +2225,7 @@ where each line of input produces a line of output.}
% @acronym for "FBI", "NATO", and the like. % @acronym for "FBI", "NATO", and the like.
% We print this one point size smaller, since it's intended for % We print this one point size smaller, since it's intended for
% all-uppercase. % all-uppercase.
% %
\def\acronym#1{\doacronym #1,,\finish} \def\acronym#1{\doacronym #1,,\finish}
\def\doacronym#1,#2,#3\finish{% \def\doacronym#1,#2,#3\finish{%
{\selectfonts\lsize #1}% {\selectfonts\lsize #1}%
@ -2237,7 +2237,7 @@ where each line of input produces a line of output.}
% @abbr for "Comput. J." and the like. % @abbr for "Comput. J." and the like.
% No font change, but don't do end-of-sentence spacing. % No font change, but don't do end-of-sentence spacing.
% %
\def\abbr#1{\doabbr #1,,\finish} \def\abbr#1{\doabbr #1,,\finish}
\def\doabbr#1,#2,#3\finish{% \def\doabbr#1,#2,#3\finish{%
{\plainfrenchspacing #1}% {\plainfrenchspacing #1}%
@ -2256,43 +2256,43 @@ where each line of input produces a line of output.}
% Theiling, which support regular, slanted, bold and bold slanted (and % Theiling, which support regular, slanted, bold and bold slanted (and
% "outlined" (blackboard board, sort of) versions, which we don't need). % "outlined" (blackboard board, sort of) versions, which we don't need).
% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
% %
% Although only regular is the truly official Euro symbol, we ignore % Although only regular is the truly official Euro symbol, we ignore
% that. The Euro is designed to be slightly taller than the regular % that. The Euro is designed to be slightly taller than the regular
% font height. % font height.
% %
% feymr - regular % feymr - regular
% feymo - slanted % feymo - slanted
% feybr - bold % feybr - bold
% feybo - bold slanted % feybo - bold slanted
% %
% There is no good (free) typewriter version, to my knowledge. % There is no good (free) typewriter version, to my knowledge.
% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
% Hmm. % Hmm.
% %
% Also doesn't work in math. Do we need to do math with euro symbols? % Also doesn't work in math. Do we need to do math with euro symbols?
% Hope not. % Hope not.
% %
% %
\def\euro{{\eurofont e}} \def\euro{{\eurofont e}}
\def\eurofont{% \def\eurofont{%
% We set the font at each command, rather than predefining it in % We set the font at each command, rather than predefining it in
% \textfonts and the other font-switching commands, so that % \textfonts and the other font-switching commands, so that
% installations which never need the symbol don't have to have the % installations which never need the symbol don't have to have the
% font installed. % font installed.
% %
% There is only one designed size (nominal 10pt), so we always scale % There is only one designed size (nominal 10pt), so we always scale
% that to the current nominal size. % that to the current nominal size.
% %
% By the way, simply using "at 1em" works for cmr10 and the like, but % By the way, simply using "at 1em" works for cmr10 and the like, but
% does not work for cmbx10 and other extended/shrunken fonts. % does not work for cmbx10 and other extended/shrunken fonts.
% %
\def\eurosize{\csname\curfontsize nominalsize\endcsname}% \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
% %
\ifx\curfontstyle\bfstylename \ifx\curfontstyle\bfstylename
% bold: % bold:
\font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
\else \else
% regular: % regular:
\font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
\fi \fi
@ -2316,7 +2316,7 @@ where each line of input produces a line of output.}
% Laurent Siebenmann reports \Orb undefined with: % Laurent Siebenmann reports \Orb undefined with:
% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
% so we'll define it if necessary. % so we'll define it if necessary.
% %
\ifx\Orb\undefined \ifx\Orb\undefined
\def\Orb{\mathhexbox20D} \def\Orb{\mathhexbox20D}
\fi \fi
@ -2632,7 +2632,7 @@ where each line of input produces a line of output.}
% cause the example and the item to crash together. So we use this % cause the example and the item to crash together. So we use this
% bizarre value of 10001 as a signal to \aboveenvbreak to insert % bizarre value of 10001 as a signal to \aboveenvbreak to insert
% \parskip glue after all. Section titles are handled this way also. % \parskip glue after all. Section titles are handled this way also.
% %
\penalty 10001 \penalty 10001
\endgroup \endgroup
\itemxneedsnegativevskipfalse \itemxneedsnegativevskipfalse
@ -3428,7 +3428,7 @@ where each line of input produces a line of output.}
% processing continues to some further point. On the other hand, it % processing continues to some further point. On the other hand, it
% seems \endinput does not hurt in the printed index arg, since that % seems \endinput does not hurt in the printed index arg, since that
% is still getting written without apparent harm. % is still getting written without apparent harm.
% %
% Sample source (mac-idx3.tex, reported by Graham Percival to % Sample source (mac-idx3.tex, reported by Graham Percival to
% help-texinfo, 22may06): % help-texinfo, 22may06):
% @macro funindex {WORD} % @macro funindex {WORD}
@ -3436,12 +3436,12 @@ where each line of input produces a line of output.}
% @end macro % @end macro
% ... % ...
% @funindex commtest % @funindex commtest
% %
% The above is not enough to reproduce the bug, but it gives the flavor. % The above is not enough to reproduce the bug, but it gives the flavor.
% %
% Sample whatsit resulting: % Sample whatsit resulting:
% .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
% %
% So: % So:
\let\endinput = \empty \let\endinput = \empty
% %
@ -3677,11 +3677,11 @@ where each line of input produces a line of output.}
% makeinfo does not expand macros in the argument to @deffn, which ends up % makeinfo does not expand macros in the argument to @deffn, which ends up
% writing an index entry, and texindex isn't prepared for an index sort entry % writing an index entry, and texindex isn't prepared for an index sort entry
% that starts with \. % that starts with \.
% %
% Since macro invocations are followed by braces, we can just redefine them % Since macro invocations are followed by braces, we can just redefine them
% to take a single TeX argument. The case of a macro invocation that % to take a single TeX argument. The case of a macro invocation that
% goes to end-of-line is not handled. % goes to end-of-line is not handled.
% %
\macrolist \macrolist
} }
@ -3807,7 +3807,7 @@ where each line of input produces a line of output.}
% to re-insert the same penalty (values >10000 are used for various % to re-insert the same penalty (values >10000 are used for various
% signals); since we just inserted a non-discardable item, any % signals); since we just inserted a non-discardable item, any
% following glue (such as a \parskip) would be a breakpoint. For example: % following glue (such as a \parskip) would be a breakpoint. For example:
% %
% @deffn deffn-whatever % @deffn deffn-whatever
% @vindex index-whatever % @vindex index-whatever
% Description. % Description.
@ -4759,11 +4759,11 @@ where each line of input produces a line of output.}
% glue accumulate. (Not a breakpoint because it's preceded by a % glue accumulate. (Not a breakpoint because it's preceded by a
% discardable item.) % discardable item.)
\vskip-\parskip \vskip-\parskip
% %
% This is purely so the last item on the list is a known \penalty > % This is purely so the last item on the list is a known \penalty >
% 10000. This is so \startdefun can avoid allowing breakpoints after % 10000. This is so \startdefun can avoid allowing breakpoints after
% section headings. Otherwise, it would insert a valid breakpoint between: % section headings. Otherwise, it would insert a valid breakpoint between:
% %
% @section sec-whatever % @section sec-whatever
% @deffn def-whatever % @deffn def-whatever
\penalty 10001 \penalty 10001
@ -4821,7 +4821,7 @@ where each line of input produces a line of output.}
% These characters do not print properly in the Computer Modern roman % These characters do not print properly in the Computer Modern roman
% fonts, so we must take special care. This is more or less redundant % fonts, so we must take special care. This is more or less redundant
% with the Texinfo input format setup at the end of this file. % with the Texinfo input format setup at the end of this file.
% %
\def\activecatcodes{% \def\activecatcodes{%
\catcode`\"=\active \catcode`\"=\active
\catcode`\$=\active \catcode`\$=\active
@ -5416,8 +5416,8 @@ where each line of input produces a line of output.}
% from cmtt (char 0x0d). The undirected quote is ugly, so don't make it % from cmtt (char 0x0d). The undirected quote is ugly, so don't make it
% the default, but it works for pasting with more pdf viewers (at least % the default, but it works for pasting with more pdf viewers (at least
% evince), the lilypond developers report. xpdf does work with the % evince), the lilypond developers report. xpdf does work with the
% regular 0x27. % regular 0x27.
% %
\def\codequoteright{% \def\codequoteright{%
\expandafter\ifx\csname SETcodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
'% '%
@ -5429,7 +5429,7 @@ where each line of input produces a line of output.}
% and a similar option for the left quote char vs. a grave accent. % and a similar option for the left quote char vs. a grave accent.
% Modern fonts display ASCII 0x60 as a grave accent, so some people like % Modern fonts display ASCII 0x60 as a grave accent, so some people like
% the code environments to do likewise. % the code environments to do likewise.
% %
\def\codequoteleft{% \def\codequoteleft{%
\expandafter\ifx\csname SETcodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
`% `%
@ -5572,7 +5572,7 @@ where each line of input produces a line of output.}
% by \defargscommonending, instead of 10000, since the sectioning % by \defargscommonending, instead of 10000, since the sectioning
% commands also insert a nobreak penalty, and we don't want to allow % commands also insert a nobreak penalty, and we don't want to allow
% a break between a section heading and a defun. % a break between a section heading and a defun.
% %
\ifnum\lastpenalty=10002 \penalty2000 \fi \ifnum\lastpenalty=10002 \penalty2000 \fi
% %
% Similarly, after a section heading, do not allow a break. % Similarly, after a section heading, do not allow a break.
@ -5950,7 +5950,7 @@ where each line of input produces a line of output.}
% This does \let #1 = #2, with \csnames; that is, % This does \let #1 = #2, with \csnames; that is,
% \let \csname#1\endcsname = \csname#2\endcsname % \let \csname#1\endcsname = \csname#2\endcsname
% (except of course we have to play expansion games). % (except of course we have to play expansion games).
% %
\def\cslet#1#2{% \def\cslet#1#2{%
\expandafter\let \expandafter\let
\csname#1\expandafter\endcsname \csname#1\expandafter\endcsname
@ -7420,7 +7420,7 @@ should work if nowhere else does.}
% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
% the literal character `\'. % the literal character `\'.
% %
@def@normalturnoffactive{% @def@normalturnoffactive{%
@let\=@normalbackslash @let\=@normalbackslash
@let"=@normaldoublequote @let"=@normaldoublequote