Grafted root commit from savannah git master:
38dcdcb08c
Initial Import
This commit is contained in:
parent
0ffef1809a
commit
0473d3f8ba
44 changed files with 22698 additions and 783 deletions
26
.cvsignore
26
.cvsignore
|
@ -1,26 +0,0 @@
|
||||||
tags
|
|
||||||
Makefile
|
|
||||||
Makefile.in
|
|
||||||
.deps
|
|
||||||
.libs
|
|
||||||
*.lo
|
|
||||||
*.la
|
|
||||||
*.so*
|
|
||||||
aclocal.m4
|
|
||||||
config.guess
|
|
||||||
config.h.in
|
|
||||||
config.sub
|
|
||||||
configure
|
|
||||||
install-sh
|
|
||||||
ltmain.sh
|
|
||||||
missing
|
|
||||||
mkinstalldirs
|
|
||||||
stamp-h.in
|
|
||||||
stamp-h
|
|
||||||
config.cache
|
|
||||||
config.h
|
|
||||||
config.log
|
|
||||||
config.status
|
|
||||||
libtool
|
|
||||||
*.tar.gz
|
|
||||||
*.info
|
|
22
AUTHORS
22
AUTHORS
|
@ -12,4 +12,24 @@ stow -D / stow -R removing initially-empty directories.
|
||||||
Adam Lackorzynski <al10@inf.tu-dresden.de> wrote the fix to prevente
|
Adam Lackorzynski <al10@inf.tu-dresden.de> wrote the fix to prevente
|
||||||
the generation of wrong links if there are links in the stow directory.
|
the generation of wrong links if there are links in the stow directory.
|
||||||
|
|
||||||
Stow is currently maintained by Guillaume Morin <gmorin@gnu.org>.
|
Stow was maintained by Guillaume Morin <gmorin@gnu.org> up to November 2007.
|
||||||
|
|
||||||
|
Kahlil (Kal) Hodgson <kahlil@internode.on.net> performed a major rewrite
|
||||||
|
inorder to implement:
|
||||||
|
|
||||||
|
1. defered operations,
|
||||||
|
2. option parsing via Getopt::Long,
|
||||||
|
3. options to support shared files,
|
||||||
|
4. support for multiple operations per invocation,
|
||||||
|
5. default command line arguments via '.stowrc' and '~/.stowrc' files,
|
||||||
|
6. better cooperation between multiple stow directories,
|
||||||
|
7. a test suite (and support code) to ensure that everything still works.
|
||||||
|
|
||||||
|
As these changes required a dramatic reorganisation of the code, very little
|
||||||
|
was left untouched, and so stows major version was bumped up to version 2.
|
||||||
|
|
||||||
|
Austin Wood <austin.wood@rmit.edu.au> and Chris Hoobin
|
||||||
|
<christopher.hoobin@rmit.edu.au> helped clean up the documentation for
|
||||||
|
version 2 and created the texi2man script.
|
||||||
|
|
||||||
|
Stow is currently maintained by Kahlil (Kal) Hodgson <kahlil@internode.on.net>.
|
||||||
|
|
11
COPYING
11
COPYING
|
@ -2,7 +2,7 @@
|
||||||
Version 2, June 1991
|
Version 2, June 1991
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
@ -279,7 +279,7 @@ POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
Appendix: How to Apply These Terms to Your New Programs
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
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
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
@ -291,7 +291,7 @@ 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.
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
Copyright (C) 19yy <name of author>
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
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
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -305,14 +305,15 @@ the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
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
|
If the program is interactive, make it output a short notice like this
|
||||||
when it starts in an interactive mode:
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
Gnomovision version 69, Copyright (C) 19yy name of author
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
This is free software, and you are welcome to redistribute it
|
This is free software, and you are welcome to redistribute it
|
||||||
under certain conditions; type `show c' for details.
|
under certain conditions; type `show c' for details.
|
||||||
|
|
56
ChangeLog
56
ChangeLog
|
@ -1,3 +1,59 @@
|
||||||
|
2008-01-31 Kahlil Hodgson <kal@grebo.cs.rmit.edu.au>
|
||||||
|
|
||||||
|
* 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 <kahlil@internode.con.net>
|
||||||
|
* 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.
|
||||||
|
|
||||||
|
|
||||||
|
Sun Jan 06 12:18:50 2002 Guillaume Morin <gmorin@gnu.org>
|
||||||
|
|
||||||
|
* Makefile.am: use EXTRA_DIST to include manpage in distribution
|
||||||
|
|
||||||
Wed Jan 02 21:33:41 2002 Guillaume Morin <gmorin@gnu.org>
|
Wed Jan 02 21:33:41 2002 Guillaume Morin <gmorin@gnu.org>
|
||||||
|
|
||||||
* stow.in: Stow now only warns the user if a subdirectory
|
* stow.in: Stow now only warns the user if a subdirectory
|
||||||
|
|
16
INSTALL
16
INSTALL
|
@ -8,13 +8,13 @@ The steps in building stow are:
|
||||||
|
|
||||||
1. `cd' to the directory containing the source code (and this file)
|
1. `cd' to the directory containing the source code (and this file)
|
||||||
and type `./configure' to configure stow for your system. This
|
and type `./configure' to configure stow for your system. This
|
||||||
step will attempt to locate your copy of perl and use its location
|
step will attempt to locate your copy of perl and set its location
|
||||||
to create `stow' from `stow.in'. If perl can't be found, you'll
|
`Makefile.in'.
|
||||||
have to edit line 1 of `stow' from `#!false' to `#!/path/to/perl'
|
|
||||||
(where /path/to/perl is wherever perl will be found when stow
|
|
||||||
runs).
|
|
||||||
|
|
||||||
2. Type `make' to create stow.info from stow.texi.
|
2. Type `make' to create `stow' and `'stow.info'. If perl could not
|
||||||
|
be found by `./configure', you'll have to edit line 1 of `stow'
|
||||||
|
from `#!false' to `#!/path/to/perl' (where /path/to/perl is wherever
|
||||||
|
perl will be found when stow runs).
|
||||||
|
|
||||||
3. Type `make install' to install `stow' and `stow.info'.
|
3. Type `make install' to install `stow' and `stow.info'.
|
||||||
|
|
||||||
|
@ -58,8 +58,8 @@ to recreate the current configuration, a file `config.cache' that
|
||||||
saves the results of its tests to speed up reconfiguring, and a file
|
saves the results of its tests to speed up reconfiguring, and a file
|
||||||
`config.log' containing other output.
|
`config.log' containing other output.
|
||||||
|
|
||||||
The file `configure.in' is used to create `configure' by a program
|
The file `configure.ac' is used to create `configure' by a program
|
||||||
called `autoconf'. You only need `configure.in' if you want to change
|
called `autoconf'. You only need `configure.ac' if you want to change
|
||||||
it or regenerate `configure' using a newer version of `autoconf'.
|
it or regenerate `configure' using a newer version of `autoconf'.
|
||||||
|
|
||||||
The file `Makefile.am' is used to create `Makefile.in' by a program
|
The file `Makefile.am' is used to create `Makefile.in' by a program
|
||||||
|
|
887
Makefile
Normal file
887
Makefile
Normal file
|
@ -0,0 +1,887 @@
|
||||||
|
# Makefile.in generated by automake 1.10 from Makefile.am.
|
||||||
|
# Makefile. Generated from Makefile.in by configure.
|
||||||
|
|
||||||
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||||
|
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
pkgdatadir = $(datadir)/stow
|
||||||
|
pkglibdir = $(libdir)/stow
|
||||||
|
pkgincludedir = $(includedir)/stow
|
||||||
|
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||||
|
install_sh_DATA = $(install_sh) -c -m 644
|
||||||
|
install_sh_PROGRAM = $(install_sh) -c
|
||||||
|
install_sh_SCRIPT = $(install_sh) -c
|
||||||
|
INSTALL_HEADER = $(INSTALL_DATA)
|
||||||
|
transform = $(program_transform_name)
|
||||||
|
NORMAL_INSTALL = :
|
||||||
|
PRE_INSTALL = :
|
||||||
|
POST_INSTALL = :
|
||||||
|
NORMAL_UNINSTALL = :
|
||||||
|
PRE_UNINSTALL = :
|
||||||
|
POST_UNINSTALL = :
|
||||||
|
subdir = .
|
||||||
|
DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \
|
||||||
|
$(dist_man_MANS) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||||
|
$(srcdir)/stamp-vti $(srcdir)/version.texi \
|
||||||
|
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
|
||||||
|
THANKS TODO install-sh mdate-sh missing texinfo.tex
|
||||||
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
|
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||||
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
|
$(ACLOCAL_M4)
|
||||||
|
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||||
|
configure.lineno config.status.lineno
|
||||||
|
mkinstalldirs = $(install_sh) -d
|
||||||
|
CONFIG_CLEAN_FILES =
|
||||||
|
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \
|
||||||
|
"$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)"
|
||||||
|
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
|
||||||
|
SCRIPTS = $(bin_SCRIPTS)
|
||||||
|
SOURCES =
|
||||||
|
DIST_SOURCES =
|
||||||
|
INFO_DEPS = $(srcdir)/stow.info
|
||||||
|
am__TEXINFO_TEX_DIR = $(srcdir)
|
||||||
|
DVIS = stow.dvi
|
||||||
|
PDFS = stow.pdf
|
||||||
|
PSS = stow.ps
|
||||||
|
HTMLS = stow.html
|
||||||
|
TEXINFOS = stow.texi
|
||||||
|
TEXI2DVI = texi2dvi
|
||||||
|
TEXI2PDF = $(TEXI2DVI) --pdf --batch
|
||||||
|
MAKEINFOHTML = $(MAKEINFO) --html
|
||||||
|
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
|
||||||
|
DVIPS = dvips
|
||||||
|
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||||
|
am__vpath_adj = case $$p in \
|
||||||
|
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||||
|
*) f=$$p;; \
|
||||||
|
esac;
|
||||||
|
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||||
|
man8dir = $(mandir)/man8
|
||||||
|
NROFF = nroff
|
||||||
|
MANS = $(dist_man_MANS) $(man8_MANS)
|
||||||
|
dist_docDATA_INSTALL = $(INSTALL_DATA)
|
||||||
|
DATA = $(dist_doc_DATA)
|
||||||
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
|
distdir = $(PACKAGE)-$(VERSION)
|
||||||
|
top_distdir = $(distdir)
|
||||||
|
am__remove_distdir = \
|
||||||
|
{ test ! -d $(distdir) \
|
||||||
|
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||||
|
&& rm -fr $(distdir); }; }
|
||||||
|
DIST_ARCHIVES = $(distdir).tar.gz $(distdir).shar.gz
|
||||||
|
GZIP_ENV = --best
|
||||||
|
distuninstallcheck_listfiles = find . -type f -print
|
||||||
|
distcleancheck_listfiles = find . -type f -print
|
||||||
|
ACLOCAL = ${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run aclocal-1.10
|
||||||
|
AMTAR = ${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run tar
|
||||||
|
AUTOCONF = ${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run autoconf
|
||||||
|
AUTOHEADER = ${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run autoheader
|
||||||
|
AUTOMAKE = ${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run automake-1.10
|
||||||
|
AWK = gawk
|
||||||
|
CYGPATH_W = echo
|
||||||
|
DEFS = -DPACKAGE_NAME=\"stow\" -DPACKAGE_TARNAME=\"stow\" -DPACKAGE_VERSION=\"2.0.2\" -DPACKAGE_STRING=\"stow\ 2.0.2\" -DPACKAGE_BUGREPORT=\"bug-stow@gnu.org\" -DPACKAGE=\"stow\" -DVERSION=\"2.0.2\"
|
||||||
|
ECHO_C =
|
||||||
|
ECHO_N = -n
|
||||||
|
ECHO_T =
|
||||||
|
INSTALL = /usr/bin/install -c
|
||||||
|
INSTALL_DATA = ${INSTALL} -m 644
|
||||||
|
INSTALL_PROGRAM = ${INSTALL}
|
||||||
|
INSTALL_SCRIPT = ${INSTALL}
|
||||||
|
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
|
||||||
|
LIBOBJS =
|
||||||
|
LIBS =
|
||||||
|
LTLIBOBJS =
|
||||||
|
MAKEINFO = ${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run makeinfo
|
||||||
|
MKDIR_P = /bin/mkdir -p
|
||||||
|
PACKAGE = stow
|
||||||
|
PACKAGE_BUGREPORT = bug-stow@gnu.org
|
||||||
|
PACKAGE_NAME = stow
|
||||||
|
PACKAGE_STRING = stow 2.0.2
|
||||||
|
PACKAGE_TARNAME = stow
|
||||||
|
PACKAGE_VERSION = 2.0.2
|
||||||
|
PATH_SEPARATOR = :
|
||||||
|
PERL = /usr/bin/perl
|
||||||
|
SET_MAKE =
|
||||||
|
SHELL = /bin/sh
|
||||||
|
STRIP =
|
||||||
|
VERSION = 2.0.2
|
||||||
|
abs_builddir = /home/kal/Projects/old/RMIT/stow/stow-2.0.2
|
||||||
|
abs_srcdir = /home/kal/Projects/old/RMIT/stow/stow-2.0.2
|
||||||
|
abs_top_builddir = /home/kal/Projects/old/RMIT/stow/stow-2.0.2
|
||||||
|
abs_top_srcdir = /home/kal/Projects/old/RMIT/stow/stow-2.0.2
|
||||||
|
am__leading_dot = .
|
||||||
|
am__tar = ${AMTAR} chof - "$$tardir"
|
||||||
|
am__untar = ${AMTAR} xf -
|
||||||
|
bindir = ${exec_prefix}/bin
|
||||||
|
build_alias =
|
||||||
|
builddir = .
|
||||||
|
datadir = ${datarootdir}
|
||||||
|
datarootdir = ${prefix}/share
|
||||||
|
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
|
||||||
|
dvidir = ${docdir}
|
||||||
|
exec_prefix = ${prefix}
|
||||||
|
host_alias =
|
||||||
|
htmldir = ${docdir}
|
||||||
|
includedir = ${prefix}/include
|
||||||
|
infodir = ${datarootdir}/info
|
||||||
|
install_sh = $(SHELL) /home/kal/Projects/old/RMIT/stow/stow-2.0.2/install-sh
|
||||||
|
libdir = ${exec_prefix}/lib
|
||||||
|
libexecdir = ${exec_prefix}/libexec
|
||||||
|
localedir = ${datarootdir}/locale
|
||||||
|
localstatedir = ${prefix}/var
|
||||||
|
mandir = ${datarootdir}/man
|
||||||
|
mkdir_p = /bin/mkdir -p
|
||||||
|
oldincludedir = /usr/include
|
||||||
|
pdfdir = ${docdir}
|
||||||
|
prefix = /usr/local
|
||||||
|
program_transform_name = s,x,x,
|
||||||
|
psdir = ${docdir}
|
||||||
|
sbindir = ${exec_prefix}/sbin
|
||||||
|
sharedstatedir = ${prefix}/com
|
||||||
|
srcdir = .
|
||||||
|
sysconfdir = ${prefix}/etc
|
||||||
|
target_alias =
|
||||||
|
top_builddir = .
|
||||||
|
top_srcdir = .
|
||||||
|
bin_SCRIPTS = stow chkstow
|
||||||
|
info_TEXINFOS = stow.texi
|
||||||
|
man8_MANS = stow.8
|
||||||
|
dist_man_MANS = stow.8
|
||||||
|
dist_doc_DATA = README
|
||||||
|
TESTS_ENVIRONMENT = $(PERL) -I $(top_srcdir)
|
||||||
|
TESTS = \
|
||||||
|
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/relative_path.t \
|
||||||
|
t/stow_contents.t \
|
||||||
|
t/stow.t \
|
||||||
|
t/unstow_contents_orig.t \
|
||||||
|
t/unstow_contents.t \
|
||||||
|
t/chkstow.t
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = dist-shar
|
||||||
|
EXTRA_DIST = $(TESTS) t/util.pm stow.in
|
||||||
|
CLEANFILES = $(bin_SCRIPTS)
|
||||||
|
|
||||||
|
# this is more explicit and reliable than the config file trick
|
||||||
|
edit = sed -e 's|[@]PERL[@]|$(PERL)|g' \
|
||||||
|
-e 's|[@]PACKAGE[@]|$(PACKAGE)|g' \
|
||||||
|
-e 's|[@]VERSION[@]|$(VERSION)|g'
|
||||||
|
|
||||||
|
all: all-am
|
||||||
|
|
||||||
|
.SUFFIXES:
|
||||||
|
.SUFFIXES: .dvi .html .info .pdf .ps .texi
|
||||||
|
am--refresh:
|
||||||
|
@:
|
||||||
|
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||||
|
@for dep in $?; do \
|
||||||
|
case '$(am__configure_deps)' in \
|
||||||
|
*$$dep*) \
|
||||||
|
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
|
||||||
|
cd $(srcdir) && $(AUTOMAKE) --gnu \
|
||||||
|
&& exit 0; \
|
||||||
|
exit 1;; \
|
||||||
|
esac; \
|
||||||
|
done; \
|
||||||
|
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||||
|
cd $(top_srcdir) && \
|
||||||
|
$(AUTOMAKE) --gnu Makefile
|
||||||
|
.PRECIOUS: Makefile
|
||||||
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
|
@case '$?' in \
|
||||||
|
*config.status*) \
|
||||||
|
echo ' $(SHELL) ./config.status'; \
|
||||||
|
$(SHELL) ./config.status;; \
|
||||||
|
*) \
|
||||||
|
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||||
|
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||||
|
esac;
|
||||||
|
|
||||||
|
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||||
|
$(SHELL) ./config.status --recheck
|
||||||
|
|
||||||
|
$(top_srcdir)/configure: $(am__configure_deps)
|
||||||
|
cd $(srcdir) && $(AUTOCONF)
|
||||||
|
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||||
|
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||||
|
install-binSCRIPTS: $(bin_SCRIPTS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
|
||||||
|
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
if test -f $$d$$p; then \
|
||||||
|
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||||
|
echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
|
||||||
|
$(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
|
||||||
|
else :; fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-binSCRIPTS:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||||
|
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||||
|
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(bindir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
.texi.info:
|
||||||
|
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
|
||||||
|
am__cwd=`pwd` && cd $(srcdir) && \
|
||||||
|
rm -rf $$backupdir && mkdir $$backupdir && \
|
||||||
|
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
|
||||||
|
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
|
||||||
|
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
|
||||||
|
done; \
|
||||||
|
else :; fi && \
|
||||||
|
cd "$$am__cwd"; \
|
||||||
|
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
|
||||||
|
-o $@ $<; \
|
||||||
|
then \
|
||||||
|
rc=0; \
|
||||||
|
cd $(srcdir); \
|
||||||
|
else \
|
||||||
|
rc=$$?; \
|
||||||
|
cd $(srcdir) && \
|
||||||
|
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
|
||||||
|
fi; \
|
||||||
|
rm -rf $$backupdir; exit $$rc
|
||||||
|
|
||||||
|
.texi.dvi:
|
||||||
|
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
||||||
|
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
|
||||||
|
$(TEXI2DVI) $<
|
||||||
|
|
||||||
|
.texi.pdf:
|
||||||
|
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
||||||
|
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
|
||||||
|
$(TEXI2PDF) $<
|
||||||
|
|
||||||
|
.texi.html:
|
||||||
|
rm -rf $(@:.html=.htp)
|
||||||
|
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
|
||||||
|
-o $(@:.html=.htp) $<; \
|
||||||
|
then \
|
||||||
|
rm -rf $@; \
|
||||||
|
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
|
||||||
|
mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
|
||||||
|
else \
|
||||||
|
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
|
||||||
|
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
$(srcdir)/stow.info: stow.texi $(srcdir)/version.texi
|
||||||
|
stow.dvi: stow.texi $(srcdir)/version.texi
|
||||||
|
stow.pdf: stow.texi $(srcdir)/version.texi
|
||||||
|
stow.html: stow.texi $(srcdir)/version.texi
|
||||||
|
$(srcdir)/version.texi: $(srcdir)/stamp-vti
|
||||||
|
$(srcdir)/stamp-vti: stow.texi $(top_srcdir)/configure
|
||||||
|
@(dir=.; test -f ./stow.texi || dir=$(srcdir); \
|
||||||
|
set `$(SHELL) $(srcdir)/mdate-sh $$dir/stow.texi`; \
|
||||||
|
echo "@set UPDATED $$1 $$2 $$3"; \
|
||||||
|
echo "@set UPDATED-MONTH $$2 $$3"; \
|
||||||
|
echo "@set EDITION $(VERSION)"; \
|
||||||
|
echo "@set VERSION $(VERSION)") > vti.tmp
|
||||||
|
@cmp -s vti.tmp $(srcdir)/version.texi \
|
||||||
|
|| (echo "Updating $(srcdir)/version.texi"; \
|
||||||
|
cp vti.tmp $(srcdir)/version.texi)
|
||||||
|
-@rm -f vti.tmp
|
||||||
|
@cp $(srcdir)/version.texi $@
|
||||||
|
|
||||||
|
mostlyclean-vti:
|
||||||
|
-rm -f vti.tmp
|
||||||
|
|
||||||
|
maintainer-clean-vti:
|
||||||
|
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
|
||||||
|
.dvi.ps:
|
||||||
|
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
||||||
|
$(DVIPS) -o $@ $<
|
||||||
|
|
||||||
|
uninstall-dvi-am:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(DVIS)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(dvidir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-html-am:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(HTMLS)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||||
|
rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-info-am:
|
||||||
|
@$(PRE_UNINSTALL)
|
||||||
|
@if test -d '$(DESTDIR)$(infodir)' && \
|
||||||
|
(install-info --version && \
|
||||||
|
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
|
||||||
|
list='$(INFO_DEPS)'; \
|
||||||
|
for file in $$list; do \
|
||||||
|
relfile=`echo "$$file" | sed 's|^.*/||'`; \
|
||||||
|
echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
|
||||||
|
install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
|
||||||
|
done; \
|
||||||
|
else :; fi
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(INFO_DEPS)'; \
|
||||||
|
for file in $$list; do \
|
||||||
|
relfile=`echo "$$file" | sed 's|^.*/||'`; \
|
||||||
|
relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
|
||||||
|
(if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
|
||||||
|
echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
|
||||||
|
rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
|
||||||
|
else :; fi); \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-pdf-am:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(PDFS)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-ps-am:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(PSS)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(psdir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
dist-info: $(INFO_DEPS)
|
||||||
|
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||||
|
list='$(INFO_DEPS)'; \
|
||||||
|
for base in $$list; do \
|
||||||
|
case $$base in \
|
||||||
|
$(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
|
||||||
|
esac; \
|
||||||
|
if test -f $$base; then d=.; else d=$(srcdir); fi; \
|
||||||
|
base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
|
||||||
|
for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
|
||||||
|
if test -f $$file; then \
|
||||||
|
relfile=`expr "$$file" : "$$d/\(.*\)"`; \
|
||||||
|
test -f $(distdir)/$$relfile || \
|
||||||
|
cp -p $$file $(distdir)/$$relfile; \
|
||||||
|
else :; fi; \
|
||||||
|
done; \
|
||||||
|
done
|
||||||
|
|
||||||
|
mostlyclean-aminfo:
|
||||||
|
-rm -rf stow.aux stow.cp stow.cps stow.fn stow.fns stow.ky stow.kys stow.log \
|
||||||
|
stow.pg stow.pgs stow.tmp stow.toc stow.tp stow.tps stow.vr \
|
||||||
|
stow.vrs stow.dvi stow.pdf stow.ps stow.html
|
||||||
|
|
||||||
|
maintainer-clean-aminfo:
|
||||||
|
@list='$(INFO_DEPS)'; for i in $$list; do \
|
||||||
|
i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
|
||||||
|
echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
|
||||||
|
rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
|
||||||
|
done
|
||||||
|
install-man8: $(man8_MANS) $(man_MANS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
|
||||||
|
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
|
||||||
|
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||||
|
for i in $$l2; do \
|
||||||
|
case "$$i" in \
|
||||||
|
*.8*) list="$$list $$i" ;; \
|
||||||
|
esac; \
|
||||||
|
done; \
|
||||||
|
for i in $$list; do \
|
||||||
|
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||||
|
else file=$$i; fi; \
|
||||||
|
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||||
|
case "$$ext" in \
|
||||||
|
8*) ;; \
|
||||||
|
*) ext='8' ;; \
|
||||||
|
esac; \
|
||||||
|
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||||
|
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||||
|
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||||
|
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
|
||||||
|
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
|
||||||
|
done
|
||||||
|
uninstall-man8:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
|
||||||
|
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||||
|
for i in $$l2; do \
|
||||||
|
case "$$i" in \
|
||||||
|
*.8*) list="$$list $$i" ;; \
|
||||||
|
esac; \
|
||||||
|
done; \
|
||||||
|
for i in $$list; do \
|
||||||
|
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||||
|
case "$$ext" in \
|
||||||
|
8*) ;; \
|
||||||
|
*) ext='8' ;; \
|
||||||
|
esac; \
|
||||||
|
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||||
|
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||||
|
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||||
|
echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
|
||||||
|
rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
|
||||||
|
done
|
||||||
|
install-dist_docDATA: $(dist_doc_DATA)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
|
||||||
|
@list='$(dist_doc_DATA)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " $(dist_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(docdir)/$$f'"; \
|
||||||
|
$(dist_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(docdir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-dist_docDATA:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(dist_doc_DATA)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -f '$(DESTDIR)$(docdir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(docdir)/$$f"; \
|
||||||
|
done
|
||||||
|
tags: TAGS
|
||||||
|
TAGS:
|
||||||
|
|
||||||
|
ctags: CTAGS
|
||||||
|
CTAGS:
|
||||||
|
|
||||||
|
|
||||||
|
check-TESTS: $(TESTS)
|
||||||
|
@failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \
|
||||||
|
srcdir=$(srcdir); export srcdir; \
|
||||||
|
list=' $(TESTS) '; \
|
||||||
|
if test -n "$$list"; then \
|
||||||
|
for tst in $$list; do \
|
||||||
|
if test -f ./$$tst; then dir=./; \
|
||||||
|
elif test -f $$tst; then dir=; \
|
||||||
|
else dir="$(srcdir)/"; fi; \
|
||||||
|
if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
|
||||||
|
all=`expr $$all + 1`; \
|
||||||
|
case " $(XFAIL_TESTS) " in \
|
||||||
|
*$$ws$$tst$$ws*) \
|
||||||
|
xpass=`expr $$xpass + 1`; \
|
||||||
|
failed=`expr $$failed + 1`; \
|
||||||
|
echo "XPASS: $$tst"; \
|
||||||
|
;; \
|
||||||
|
*) \
|
||||||
|
echo "PASS: $$tst"; \
|
||||||
|
;; \
|
||||||
|
esac; \
|
||||||
|
elif test $$? -ne 77; then \
|
||||||
|
all=`expr $$all + 1`; \
|
||||||
|
case " $(XFAIL_TESTS) " in \
|
||||||
|
*$$ws$$tst$$ws*) \
|
||||||
|
xfail=`expr $$xfail + 1`; \
|
||||||
|
echo "XFAIL: $$tst"; \
|
||||||
|
;; \
|
||||||
|
*) \
|
||||||
|
failed=`expr $$failed + 1`; \
|
||||||
|
echo "FAIL: $$tst"; \
|
||||||
|
;; \
|
||||||
|
esac; \
|
||||||
|
else \
|
||||||
|
skip=`expr $$skip + 1`; \
|
||||||
|
echo "SKIP: $$tst"; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
if test "$$failed" -eq 0; then \
|
||||||
|
if test "$$xfail" -eq 0; then \
|
||||||
|
banner="All $$all tests passed"; \
|
||||||
|
else \
|
||||||
|
banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
|
||||||
|
fi; \
|
||||||
|
else \
|
||||||
|
if test "$$xpass" -eq 0; then \
|
||||||
|
banner="$$failed of $$all tests failed"; \
|
||||||
|
else \
|
||||||
|
banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
dashes="$$banner"; \
|
||||||
|
skipped=""; \
|
||||||
|
if test "$$skip" -ne 0; then \
|
||||||
|
skipped="($$skip tests were not run)"; \
|
||||||
|
test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||||
|
dashes="$$skipped"; \
|
||||||
|
fi; \
|
||||||
|
report=""; \
|
||||||
|
if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
|
||||||
|
report="Please report to $(PACKAGE_BUGREPORT)"; \
|
||||||
|
test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||||
|
dashes="$$report"; \
|
||||||
|
fi; \
|
||||||
|
dashes=`echo "$$dashes" | sed s/./=/g`; \
|
||||||
|
echo "$$dashes"; \
|
||||||
|
echo "$$banner"; \
|
||||||
|
test -z "$$skipped" || echo "$$skipped"; \
|
||||||
|
test -z "$$report" || echo "$$report"; \
|
||||||
|
echo "$$dashes"; \
|
||||||
|
test "$$failed" -eq 0; \
|
||||||
|
else :; fi
|
||||||
|
|
||||||
|
distdir: $(DISTFILES)
|
||||||
|
$(am__remove_distdir)
|
||||||
|
test -d $(distdir) || mkdir $(distdir)
|
||||||
|
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||||
|
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||||
|
list='$(DISTFILES)'; \
|
||||||
|
dist_files=`for file in $$list; do echo $$file; done | \
|
||||||
|
sed -e "s|^$$srcdirstrip/||;t" \
|
||||||
|
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||||
|
case $$dist_files in \
|
||||||
|
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||||
|
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||||
|
sort -u` ;; \
|
||||||
|
esac; \
|
||||||
|
for file in $$dist_files; do \
|
||||||
|
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||||
|
if test -d $$d/$$file; then \
|
||||||
|
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||||
|
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||||
|
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||||
|
fi; \
|
||||||
|
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||||
|
else \
|
||||||
|
test -f $(distdir)/$$file \
|
||||||
|
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||||
|
|| exit 1; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) \
|
||||||
|
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||||
|
dist-info
|
||||||
|
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||||
|
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||||
|
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||||
|
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||||
|
|| chmod -R a+r $(distdir)
|
||||||
|
dist-gzip: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
dist-bzip2: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
dist-tarZ: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||||
|
$(am__remove_distdir)
|
||||||
|
dist-shar: distdir
|
||||||
|
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
dist-zip: distdir
|
||||||
|
-rm -f $(distdir).zip
|
||||||
|
zip -rq $(distdir).zip $(distdir)
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
dist dist-all: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||||
|
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
# This target untars the dist file and tries a VPATH configuration. Then
|
||||||
|
# it guarantees that the distribution is self-contained by making another
|
||||||
|
# tarfile.
|
||||||
|
distcheck: dist
|
||||||
|
case '$(DIST_ARCHIVES)' in \
|
||||||
|
*.tar.gz*) \
|
||||||
|
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||||
|
*.tar.bz2*) \
|
||||||
|
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||||
|
*.tar.Z*) \
|
||||||
|
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||||
|
*.shar.gz*) \
|
||||||
|
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||||
|
*.zip*) \
|
||||||
|
unzip $(distdir).zip ;;\
|
||||||
|
esac
|
||||||
|
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||||
|
mkdir $(distdir)/_build
|
||||||
|
mkdir $(distdir)/_inst
|
||||||
|
chmod a-w $(distdir)
|
||||||
|
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||||
|
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||||
|
&& cd $(distdir)/_build \
|
||||||
|
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||||
|
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||||
|
distuninstallcheck \
|
||||||
|
&& chmod -R a-w "$$dc_install_base" \
|
||||||
|
&& ({ \
|
||||||
|
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||||
|
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||||
|
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||||
|
&& rm -rf "$$dc_destdir" \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||||
|
&& rm -rf $(DIST_ARCHIVES) \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||||
|
$(am__remove_distdir)
|
||||||
|
@(echo "$(distdir) archives ready for distribution: "; \
|
||||||
|
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||||
|
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||||
|
distuninstallcheck:
|
||||||
|
@cd $(distuninstallcheck_dir) \
|
||||||
|
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||||
|
|| { echo "ERROR: files left after uninstall:" ; \
|
||||||
|
if test -n "$(DESTDIR)"; then \
|
||||||
|
echo " (check DESTDIR support)"; \
|
||||||
|
fi ; \
|
||||||
|
$(distuninstallcheck_listfiles) ; \
|
||||||
|
exit 1; } >&2
|
||||||
|
distcleancheck: distclean
|
||||||
|
@if test '$(srcdir)' = . ; then \
|
||||||
|
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||||
|
exit 1 ; \
|
||||||
|
fi
|
||||||
|
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||||
|
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||||
|
$(distcleancheck_listfiles) ; \
|
||||||
|
exit 1; } >&2
|
||||||
|
check-am: all-am
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
|
||||||
|
check: check-am
|
||||||
|
all-am: Makefile $(INFO_DEPS) $(SCRIPTS) $(MANS) $(DATA)
|
||||||
|
installdirs:
|
||||||
|
for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)"; do \
|
||||||
|
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||||
|
done
|
||||||
|
install: install-am
|
||||||
|
install-exec: install-exec-am
|
||||||
|
install-data: install-data-am
|
||||||
|
uninstall: uninstall-am
|
||||||
|
|
||||||
|
install-am: all-am
|
||||||
|
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||||
|
|
||||||
|
installcheck: installcheck-am
|
||||||
|
install-strip:
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||||
|
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||||
|
`test -z '$(STRIP)' || \
|
||||||
|
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||||
|
mostlyclean-generic:
|
||||||
|
|
||||||
|
clean-generic:
|
||||||
|
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||||
|
|
||||||
|
distclean-generic:
|
||||||
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
|
|
||||||
|
maintainer-clean-generic:
|
||||||
|
@echo "This command is intended for maintainers to use"
|
||||||
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
|
clean: clean-am
|
||||||
|
|
||||||
|
clean-am: clean-generic clean-local mostlyclean-am
|
||||||
|
|
||||||
|
distclean: distclean-am
|
||||||
|
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||||
|
-rm -f Makefile
|
||||||
|
distclean-am: clean-am distclean-generic
|
||||||
|
|
||||||
|
dvi: dvi-am
|
||||||
|
|
||||||
|
dvi-am: $(DVIS)
|
||||||
|
|
||||||
|
html: html-am
|
||||||
|
|
||||||
|
html-am: $(HTMLS)
|
||||||
|
|
||||||
|
info: info-am
|
||||||
|
|
||||||
|
info-am: $(INFO_DEPS)
|
||||||
|
|
||||||
|
install-data-am: install-dist_docDATA install-info-am install-man
|
||||||
|
|
||||||
|
install-dvi: install-dvi-am
|
||||||
|
|
||||||
|
install-dvi-am: $(DVIS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
|
||||||
|
@list='$(DVIS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \
|
||||||
|
done
|
||||||
|
install-exec-am: install-binSCRIPTS
|
||||||
|
|
||||||
|
install-html: install-html-am
|
||||||
|
|
||||||
|
install-html-am: $(HTMLS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
|
||||||
|
@list='$(HTMLS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
if test -d "$$d$$p"; then \
|
||||||
|
echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||||
|
$(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
|
||||||
|
else \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
install-info: install-info-am
|
||||||
|
|
||||||
|
install-info-am: $(INFO_DEPS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
|
||||||
|
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||||
|
list='$(INFO_DEPS)'; \
|
||||||
|
for file in $$list; do \
|
||||||
|
case $$file in \
|
||||||
|
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||||
|
esac; \
|
||||||
|
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||||
|
file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
|
||||||
|
for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
|
||||||
|
$$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
|
||||||
|
if test -f $$ifile; then \
|
||||||
|
relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
|
||||||
|
echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
|
||||||
|
$(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
|
||||||
|
else : ; fi; \
|
||||||
|
done; \
|
||||||
|
done
|
||||||
|
@$(POST_INSTALL)
|
||||||
|
@if (install-info --version && \
|
||||||
|
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
|
||||||
|
list='$(INFO_DEPS)'; \
|
||||||
|
for file in $$list; do \
|
||||||
|
relfile=`echo "$$file" | sed 's|^.*/||'`; \
|
||||||
|
echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
|
||||||
|
install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
|
||||||
|
done; \
|
||||||
|
else : ; fi
|
||||||
|
install-man: install-man8
|
||||||
|
|
||||||
|
install-pdf: install-pdf-am
|
||||||
|
|
||||||
|
install-pdf-am: $(PDFS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
|
||||||
|
@list='$(PDFS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
|
||||||
|
done
|
||||||
|
install-ps: install-ps-am
|
||||||
|
|
||||||
|
install-ps-am: $(PSS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
|
||||||
|
@list='$(PSS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \
|
||||||
|
done
|
||||||
|
installcheck-am:
|
||||||
|
|
||||||
|
maintainer-clean: maintainer-clean-am
|
||||||
|
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||||
|
-rm -rf $(top_srcdir)/autom4te.cache
|
||||||
|
-rm -f Makefile
|
||||||
|
maintainer-clean-am: distclean-am maintainer-clean-aminfo \
|
||||||
|
maintainer-clean-generic maintainer-clean-vti
|
||||||
|
|
||||||
|
mostlyclean: mostlyclean-am
|
||||||
|
|
||||||
|
mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti
|
||||||
|
|
||||||
|
pdf: pdf-am
|
||||||
|
|
||||||
|
pdf-am: $(PDFS)
|
||||||
|
|
||||||
|
ps: ps-am
|
||||||
|
|
||||||
|
ps-am: $(PSS)
|
||||||
|
|
||||||
|
uninstall-am: uninstall-binSCRIPTS uninstall-dist_docDATA \
|
||||||
|
uninstall-dvi-am uninstall-html-am uninstall-info-am \
|
||||||
|
uninstall-man uninstall-pdf-am uninstall-ps-am
|
||||||
|
|
||||||
|
uninstall-man: uninstall-man8
|
||||||
|
|
||||||
|
.MAKE: install-am install-strip
|
||||||
|
|
||||||
|
.PHONY: all all-am am--refresh check check-TESTS check-am clean \
|
||||||
|
clean-generic clean-local dist dist-all dist-bzip2 dist-gzip \
|
||||||
|
dist-info dist-shar dist-tarZ dist-zip distcheck distclean \
|
||||||
|
distclean-generic distcleancheck distdir distuninstallcheck \
|
||||||
|
dvi dvi-am html html-am info info-am install install-am \
|
||||||
|
install-binSCRIPTS install-data install-data-am \
|
||||||
|
install-dist_docDATA install-dvi install-dvi-am install-exec \
|
||||||
|
install-exec-am install-html install-html-am install-info \
|
||||||
|
install-info-am install-man install-man8 install-pdf \
|
||||||
|
install-pdf-am install-ps install-ps-am install-strip \
|
||||||
|
installcheck installcheck-am installdirs maintainer-clean \
|
||||||
|
maintainer-clean-aminfo maintainer-clean-generic \
|
||||||
|
maintainer-clean-vti mostlyclean mostlyclean-aminfo \
|
||||||
|
mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \
|
||||||
|
uninstall uninstall-am uninstall-binSCRIPTS \
|
||||||
|
uninstall-dist_docDATA uninstall-dvi-am uninstall-html-am \
|
||||||
|
uninstall-info-am uninstall-man uninstall-man8 \
|
||||||
|
uninstall-pdf-am uninstall-ps-am
|
||||||
|
|
||||||
|
|
||||||
|
# clean up files left behind by test suite
|
||||||
|
clean-local:
|
||||||
|
-rm -rf t/target t/stow
|
||||||
|
|
||||||
|
stow: stow.in Makefile
|
||||||
|
$(edit) < $< > $@
|
||||||
|
chmod +x $@
|
||||||
|
|
||||||
|
chkstow: chkstow.in Makefile
|
||||||
|
$(edit) < $< > $@
|
||||||
|
chmod +x $@
|
||||||
|
|
||||||
|
# The rules for manual.html and manual.texi are only used by
|
||||||
|
# the developer
|
||||||
|
manual.html: manual.texi
|
||||||
|
-rm -f $@
|
||||||
|
texi2html -expandinfo -menu -monolithic -verbose $<
|
||||||
|
|
||||||
|
manual.texi: stow.texi
|
||||||
|
-rm -f $@
|
||||||
|
cp $< $@
|
||||||
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
.NOEXPORT:
|
43
Makefile.am
43
Makefile.am
|
@ -1,12 +1,47 @@
|
||||||
## Process this file with Automake to produce Makefile.in
|
## Process this file with Automake to produce Makefile.in
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = dist-shar
|
bin_SCRIPTS = stow chkstow
|
||||||
|
|
||||||
bin_SCRIPTS = stow
|
|
||||||
info_TEXINFOS = stow.texi
|
info_TEXINFOS = stow.texi
|
||||||
man8_MANS = stow.8
|
man8_MANS = stow.8
|
||||||
|
dist_man_MANS = stow.8
|
||||||
|
dist_doc_DATA = README
|
||||||
|
|
||||||
CLEANFILES = stow manual.html manual.texi
|
TESTS_ENVIRONMENT=$(PERL) -I $(top_srcdir)
|
||||||
|
TESTS = \
|
||||||
|
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/relative_path.t \
|
||||||
|
t/stow_contents.t \
|
||||||
|
t/stow.t \
|
||||||
|
t/unstow_contents_orig.t \
|
||||||
|
t/unstow_contents.t \
|
||||||
|
t/chkstow.t
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = dist-shar
|
||||||
|
EXTRA_DIST = $(TESTS) t/util.pm stow.in
|
||||||
|
CLEANFILES = $(bin_SCRIPTS)
|
||||||
|
|
||||||
|
# clean up files left behind by test suite
|
||||||
|
clean-local:
|
||||||
|
-rm -rf t/target t/stow
|
||||||
|
|
||||||
|
# this is more explicit and reliable than the config file trick
|
||||||
|
edit = sed -e 's|[@]PERL[@]|$(PERL)|g' \
|
||||||
|
-e 's|[@]PACKAGE[@]|$(PACKAGE)|g' \
|
||||||
|
-e 's|[@]VERSION[@]|$(VERSION)|g'
|
||||||
|
|
||||||
|
stow: stow.in Makefile
|
||||||
|
$(edit) < $< > $@
|
||||||
|
chmod +x $@
|
||||||
|
|
||||||
|
chkstow: chkstow.in Makefile
|
||||||
|
$(edit) < $< > $@
|
||||||
|
chmod +x $@
|
||||||
|
|
||||||
# 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
|
||||||
|
|
887
Makefile.in
Normal file
887
Makefile.in
Normal file
|
@ -0,0 +1,887 @@
|
||||||
|
# Makefile.in generated by automake 1.10 from Makefile.am.
|
||||||
|
# @configure_input@
|
||||||
|
|
||||||
|
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||||
|
# 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
# This Makefile.in is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
@SET_MAKE@
|
||||||
|
|
||||||
|
|
||||||
|
VPATH = @srcdir@
|
||||||
|
pkgdatadir = $(datadir)/@PACKAGE@
|
||||||
|
pkglibdir = $(libdir)/@PACKAGE@
|
||||||
|
pkgincludedir = $(includedir)/@PACKAGE@
|
||||||
|
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||||
|
install_sh_DATA = $(install_sh) -c -m 644
|
||||||
|
install_sh_PROGRAM = $(install_sh) -c
|
||||||
|
install_sh_SCRIPT = $(install_sh) -c
|
||||||
|
INSTALL_HEADER = $(INSTALL_DATA)
|
||||||
|
transform = $(program_transform_name)
|
||||||
|
NORMAL_INSTALL = :
|
||||||
|
PRE_INSTALL = :
|
||||||
|
POST_INSTALL = :
|
||||||
|
NORMAL_UNINSTALL = :
|
||||||
|
PRE_UNINSTALL = :
|
||||||
|
POST_UNINSTALL = :
|
||||||
|
subdir = .
|
||||||
|
DIST_COMMON = README $(am__configure_deps) $(dist_doc_DATA) \
|
||||||
|
$(dist_man_MANS) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
||||||
|
$(srcdir)/stamp-vti $(srcdir)/version.texi \
|
||||||
|
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
|
||||||
|
THANKS TODO install-sh mdate-sh missing texinfo.tex
|
||||||
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||||
|
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||||
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||||
|
$(ACLOCAL_M4)
|
||||||
|
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||||
|
configure.lineno config.status.lineno
|
||||||
|
mkinstalldirs = $(install_sh) -d
|
||||||
|
CONFIG_CLEAN_FILES =
|
||||||
|
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \
|
||||||
|
"$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)"
|
||||||
|
binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
|
||||||
|
SCRIPTS = $(bin_SCRIPTS)
|
||||||
|
SOURCES =
|
||||||
|
DIST_SOURCES =
|
||||||
|
INFO_DEPS = $(srcdir)/stow.info
|
||||||
|
am__TEXINFO_TEX_DIR = $(srcdir)
|
||||||
|
DVIS = stow.dvi
|
||||||
|
PDFS = stow.pdf
|
||||||
|
PSS = stow.ps
|
||||||
|
HTMLS = stow.html
|
||||||
|
TEXINFOS = stow.texi
|
||||||
|
TEXI2DVI = texi2dvi
|
||||||
|
TEXI2PDF = $(TEXI2DVI) --pdf --batch
|
||||||
|
MAKEINFOHTML = $(MAKEINFO) --html
|
||||||
|
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
|
||||||
|
DVIPS = dvips
|
||||||
|
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||||
|
am__vpath_adj = case $$p in \
|
||||||
|
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||||
|
*) f=$$p;; \
|
||||||
|
esac;
|
||||||
|
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||||
|
man8dir = $(mandir)/man8
|
||||||
|
NROFF = nroff
|
||||||
|
MANS = $(dist_man_MANS) $(man8_MANS)
|
||||||
|
dist_docDATA_INSTALL = $(INSTALL_DATA)
|
||||||
|
DATA = $(dist_doc_DATA)
|
||||||
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||||
|
distdir = $(PACKAGE)-$(VERSION)
|
||||||
|
top_distdir = $(distdir)
|
||||||
|
am__remove_distdir = \
|
||||||
|
{ test ! -d $(distdir) \
|
||||||
|
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||||
|
&& rm -fr $(distdir); }; }
|
||||||
|
DIST_ARCHIVES = $(distdir).tar.gz $(distdir).shar.gz
|
||||||
|
GZIP_ENV = --best
|
||||||
|
distuninstallcheck_listfiles = find . -type f -print
|
||||||
|
distcleancheck_listfiles = find . -type f -print
|
||||||
|
ACLOCAL = @ACLOCAL@
|
||||||
|
AMTAR = @AMTAR@
|
||||||
|
AUTOCONF = @AUTOCONF@
|
||||||
|
AUTOHEADER = @AUTOHEADER@
|
||||||
|
AUTOMAKE = @AUTOMAKE@
|
||||||
|
AWK = @AWK@
|
||||||
|
CYGPATH_W = @CYGPATH_W@
|
||||||
|
DEFS = @DEFS@
|
||||||
|
ECHO_C = @ECHO_C@
|
||||||
|
ECHO_N = @ECHO_N@
|
||||||
|
ECHO_T = @ECHO_T@
|
||||||
|
INSTALL = @INSTALL@
|
||||||
|
INSTALL_DATA = @INSTALL_DATA@
|
||||||
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||||
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||||
|
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||||
|
LIBOBJS = @LIBOBJS@
|
||||||
|
LIBS = @LIBS@
|
||||||
|
LTLIBOBJS = @LTLIBOBJS@
|
||||||
|
MAKEINFO = @MAKEINFO@
|
||||||
|
MKDIR_P = @MKDIR_P@
|
||||||
|
PACKAGE = @PACKAGE@
|
||||||
|
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||||
|
PACKAGE_NAME = @PACKAGE_NAME@
|
||||||
|
PACKAGE_STRING = @PACKAGE_STRING@
|
||||||
|
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||||
|
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||||
|
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||||
|
PERL = @PERL@
|
||||||
|
SET_MAKE = @SET_MAKE@
|
||||||
|
SHELL = @SHELL@
|
||||||
|
STRIP = @STRIP@
|
||||||
|
VERSION = @VERSION@
|
||||||
|
abs_builddir = @abs_builddir@
|
||||||
|
abs_srcdir = @abs_srcdir@
|
||||||
|
abs_top_builddir = @abs_top_builddir@
|
||||||
|
abs_top_srcdir = @abs_top_srcdir@
|
||||||
|
am__leading_dot = @am__leading_dot@
|
||||||
|
am__tar = @am__tar@
|
||||||
|
am__untar = @am__untar@
|
||||||
|
bindir = @bindir@
|
||||||
|
build_alias = @build_alias@
|
||||||
|
builddir = @builddir@
|
||||||
|
datadir = @datadir@
|
||||||
|
datarootdir = @datarootdir@
|
||||||
|
docdir = @docdir@
|
||||||
|
dvidir = @dvidir@
|
||||||
|
exec_prefix = @exec_prefix@
|
||||||
|
host_alias = @host_alias@
|
||||||
|
htmldir = @htmldir@
|
||||||
|
includedir = @includedir@
|
||||||
|
infodir = @infodir@
|
||||||
|
install_sh = @install_sh@
|
||||||
|
libdir = @libdir@
|
||||||
|
libexecdir = @libexecdir@
|
||||||
|
localedir = @localedir@
|
||||||
|
localstatedir = @localstatedir@
|
||||||
|
mandir = @mandir@
|
||||||
|
mkdir_p = @mkdir_p@
|
||||||
|
oldincludedir = @oldincludedir@
|
||||||
|
pdfdir = @pdfdir@
|
||||||
|
prefix = @prefix@
|
||||||
|
program_transform_name = @program_transform_name@
|
||||||
|
psdir = @psdir@
|
||||||
|
sbindir = @sbindir@
|
||||||
|
sharedstatedir = @sharedstatedir@
|
||||||
|
srcdir = @srcdir@
|
||||||
|
sysconfdir = @sysconfdir@
|
||||||
|
target_alias = @target_alias@
|
||||||
|
top_builddir = @top_builddir@
|
||||||
|
top_srcdir = @top_srcdir@
|
||||||
|
bin_SCRIPTS = stow chkstow
|
||||||
|
info_TEXINFOS = stow.texi
|
||||||
|
man8_MANS = stow.8
|
||||||
|
dist_man_MANS = stow.8
|
||||||
|
dist_doc_DATA = README
|
||||||
|
TESTS_ENVIRONMENT = $(PERL) -I $(top_srcdir)
|
||||||
|
TESTS = \
|
||||||
|
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/relative_path.t \
|
||||||
|
t/stow_contents.t \
|
||||||
|
t/stow.t \
|
||||||
|
t/unstow_contents_orig.t \
|
||||||
|
t/unstow_contents.t \
|
||||||
|
t/chkstow.t
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = dist-shar
|
||||||
|
EXTRA_DIST = $(TESTS) t/util.pm stow.in
|
||||||
|
CLEANFILES = $(bin_SCRIPTS)
|
||||||
|
|
||||||
|
# this is more explicit and reliable than the config file trick
|
||||||
|
edit = sed -e 's|[@]PERL[@]|$(PERL)|g' \
|
||||||
|
-e 's|[@]PACKAGE[@]|$(PACKAGE)|g' \
|
||||||
|
-e 's|[@]VERSION[@]|$(VERSION)|g'
|
||||||
|
|
||||||
|
all: all-am
|
||||||
|
|
||||||
|
.SUFFIXES:
|
||||||
|
.SUFFIXES: .dvi .html .info .pdf .ps .texi
|
||||||
|
am--refresh:
|
||||||
|
@:
|
||||||
|
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||||
|
@for dep in $?; do \
|
||||||
|
case '$(am__configure_deps)' in \
|
||||||
|
*$$dep*) \
|
||||||
|
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
|
||||||
|
cd $(srcdir) && $(AUTOMAKE) --gnu \
|
||||||
|
&& exit 0; \
|
||||||
|
exit 1;; \
|
||||||
|
esac; \
|
||||||
|
done; \
|
||||||
|
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||||
|
cd $(top_srcdir) && \
|
||||||
|
$(AUTOMAKE) --gnu Makefile
|
||||||
|
.PRECIOUS: Makefile
|
||||||
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
|
@case '$?' in \
|
||||||
|
*config.status*) \
|
||||||
|
echo ' $(SHELL) ./config.status'; \
|
||||||
|
$(SHELL) ./config.status;; \
|
||||||
|
*) \
|
||||||
|
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||||
|
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||||
|
esac;
|
||||||
|
|
||||||
|
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||||
|
$(SHELL) ./config.status --recheck
|
||||||
|
|
||||||
|
$(top_srcdir)/configure: $(am__configure_deps)
|
||||||
|
cd $(srcdir) && $(AUTOCONF)
|
||||||
|
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||||
|
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||||
|
install-binSCRIPTS: $(bin_SCRIPTS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
|
||||||
|
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
if test -f $$d$$p; then \
|
||||||
|
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||||
|
echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
|
||||||
|
$(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
|
||||||
|
else :; fi; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-binSCRIPTS:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(bin_SCRIPTS)'; for p in $$list; do \
|
||||||
|
f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
|
||||||
|
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(bindir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
.texi.info:
|
||||||
|
restore=: && backupdir="$(am__leading_dot)am$$$$" && \
|
||||||
|
am__cwd=`pwd` && cd $(srcdir) && \
|
||||||
|
rm -rf $$backupdir && mkdir $$backupdir && \
|
||||||
|
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
|
||||||
|
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
|
||||||
|
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
|
||||||
|
done; \
|
||||||
|
else :; fi && \
|
||||||
|
cd "$$am__cwd"; \
|
||||||
|
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
|
||||||
|
-o $@ $<; \
|
||||||
|
then \
|
||||||
|
rc=0; \
|
||||||
|
cd $(srcdir); \
|
||||||
|
else \
|
||||||
|
rc=$$?; \
|
||||||
|
cd $(srcdir) && \
|
||||||
|
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
|
||||||
|
fi; \
|
||||||
|
rm -rf $$backupdir; exit $$rc
|
||||||
|
|
||||||
|
.texi.dvi:
|
||||||
|
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
||||||
|
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
|
||||||
|
$(TEXI2DVI) $<
|
||||||
|
|
||||||
|
.texi.pdf:
|
||||||
|
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
||||||
|
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
|
||||||
|
$(TEXI2PDF) $<
|
||||||
|
|
||||||
|
.texi.html:
|
||||||
|
rm -rf $(@:.html=.htp)
|
||||||
|
if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
|
||||||
|
-o $(@:.html=.htp) $<; \
|
||||||
|
then \
|
||||||
|
rm -rf $@; \
|
||||||
|
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
|
||||||
|
mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
|
||||||
|
else \
|
||||||
|
if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
|
||||||
|
rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
$(srcdir)/stow.info: stow.texi $(srcdir)/version.texi
|
||||||
|
stow.dvi: stow.texi $(srcdir)/version.texi
|
||||||
|
stow.pdf: stow.texi $(srcdir)/version.texi
|
||||||
|
stow.html: stow.texi $(srcdir)/version.texi
|
||||||
|
$(srcdir)/version.texi: $(srcdir)/stamp-vti
|
||||||
|
$(srcdir)/stamp-vti: stow.texi $(top_srcdir)/configure
|
||||||
|
@(dir=.; test -f ./stow.texi || dir=$(srcdir); \
|
||||||
|
set `$(SHELL) $(srcdir)/mdate-sh $$dir/stow.texi`; \
|
||||||
|
echo "@set UPDATED $$1 $$2 $$3"; \
|
||||||
|
echo "@set UPDATED-MONTH $$2 $$3"; \
|
||||||
|
echo "@set EDITION $(VERSION)"; \
|
||||||
|
echo "@set VERSION $(VERSION)") > vti.tmp
|
||||||
|
@cmp -s vti.tmp $(srcdir)/version.texi \
|
||||||
|
|| (echo "Updating $(srcdir)/version.texi"; \
|
||||||
|
cp vti.tmp $(srcdir)/version.texi)
|
||||||
|
-@rm -f vti.tmp
|
||||||
|
@cp $(srcdir)/version.texi $@
|
||||||
|
|
||||||
|
mostlyclean-vti:
|
||||||
|
-rm -f vti.tmp
|
||||||
|
|
||||||
|
maintainer-clean-vti:
|
||||||
|
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
|
||||||
|
.dvi.ps:
|
||||||
|
TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
|
||||||
|
$(DVIPS) -o $@ $<
|
||||||
|
|
||||||
|
uninstall-dvi-am:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(DVIS)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(dvidir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-html-am:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(HTMLS)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||||
|
rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-info-am:
|
||||||
|
@$(PRE_UNINSTALL)
|
||||||
|
@if test -d '$(DESTDIR)$(infodir)' && \
|
||||||
|
(install-info --version && \
|
||||||
|
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
|
||||||
|
list='$(INFO_DEPS)'; \
|
||||||
|
for file in $$list; do \
|
||||||
|
relfile=`echo "$$file" | sed 's|^.*/||'`; \
|
||||||
|
echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
|
||||||
|
install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
|
||||||
|
done; \
|
||||||
|
else :; fi
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(INFO_DEPS)'; \
|
||||||
|
for file in $$list; do \
|
||||||
|
relfile=`echo "$$file" | sed 's|^.*/||'`; \
|
||||||
|
relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
|
||||||
|
(if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
|
||||||
|
echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
|
||||||
|
rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
|
||||||
|
else :; fi); \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-pdf-am:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(PDFS)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-ps-am:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(PSS)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(psdir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
dist-info: $(INFO_DEPS)
|
||||||
|
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||||
|
list='$(INFO_DEPS)'; \
|
||||||
|
for base in $$list; do \
|
||||||
|
case $$base in \
|
||||||
|
$(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
|
||||||
|
esac; \
|
||||||
|
if test -f $$base; then d=.; else d=$(srcdir); fi; \
|
||||||
|
base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
|
||||||
|
for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
|
||||||
|
if test -f $$file; then \
|
||||||
|
relfile=`expr "$$file" : "$$d/\(.*\)"`; \
|
||||||
|
test -f $(distdir)/$$relfile || \
|
||||||
|
cp -p $$file $(distdir)/$$relfile; \
|
||||||
|
else :; fi; \
|
||||||
|
done; \
|
||||||
|
done
|
||||||
|
|
||||||
|
mostlyclean-aminfo:
|
||||||
|
-rm -rf stow.aux stow.cp stow.cps stow.fn stow.fns stow.ky stow.kys stow.log \
|
||||||
|
stow.pg stow.pgs stow.tmp stow.toc stow.tp stow.tps stow.vr \
|
||||||
|
stow.vrs stow.dvi stow.pdf stow.ps stow.html
|
||||||
|
|
||||||
|
maintainer-clean-aminfo:
|
||||||
|
@list='$(INFO_DEPS)'; for i in $$list; do \
|
||||||
|
i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
|
||||||
|
echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
|
||||||
|
rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
|
||||||
|
done
|
||||||
|
install-man8: $(man8_MANS) $(man_MANS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
|
||||||
|
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
|
||||||
|
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||||
|
for i in $$l2; do \
|
||||||
|
case "$$i" in \
|
||||||
|
*.8*) list="$$list $$i" ;; \
|
||||||
|
esac; \
|
||||||
|
done; \
|
||||||
|
for i in $$list; do \
|
||||||
|
if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
|
||||||
|
else file=$$i; fi; \
|
||||||
|
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||||
|
case "$$ext" in \
|
||||||
|
8*) ;; \
|
||||||
|
*) ext='8' ;; \
|
||||||
|
esac; \
|
||||||
|
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||||
|
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||||
|
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||||
|
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
|
||||||
|
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
|
||||||
|
done
|
||||||
|
uninstall-man8:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
|
||||||
|
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
|
||||||
|
for i in $$l2; do \
|
||||||
|
case "$$i" in \
|
||||||
|
*.8*) list="$$list $$i" ;; \
|
||||||
|
esac; \
|
||||||
|
done; \
|
||||||
|
for i in $$list; do \
|
||||||
|
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
|
||||||
|
case "$$ext" in \
|
||||||
|
8*) ;; \
|
||||||
|
*) ext='8' ;; \
|
||||||
|
esac; \
|
||||||
|
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
|
||||||
|
inst=`echo $$inst | sed -e 's/^.*\///'`; \
|
||||||
|
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
|
||||||
|
echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
|
||||||
|
rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
|
||||||
|
done
|
||||||
|
install-dist_docDATA: $(dist_doc_DATA)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
|
||||||
|
@list='$(dist_doc_DATA)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " $(dist_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(docdir)/$$f'"; \
|
||||||
|
$(dist_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(docdir)/$$f"; \
|
||||||
|
done
|
||||||
|
|
||||||
|
uninstall-dist_docDATA:
|
||||||
|
@$(NORMAL_UNINSTALL)
|
||||||
|
@list='$(dist_doc_DATA)'; for p in $$list; do \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " rm -f '$(DESTDIR)$(docdir)/$$f'"; \
|
||||||
|
rm -f "$(DESTDIR)$(docdir)/$$f"; \
|
||||||
|
done
|
||||||
|
tags: TAGS
|
||||||
|
TAGS:
|
||||||
|
|
||||||
|
ctags: CTAGS
|
||||||
|
CTAGS:
|
||||||
|
|
||||||
|
|
||||||
|
check-TESTS: $(TESTS)
|
||||||
|
@failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[ ]'; \
|
||||||
|
srcdir=$(srcdir); export srcdir; \
|
||||||
|
list=' $(TESTS) '; \
|
||||||
|
if test -n "$$list"; then \
|
||||||
|
for tst in $$list; do \
|
||||||
|
if test -f ./$$tst; then dir=./; \
|
||||||
|
elif test -f $$tst; then dir=; \
|
||||||
|
else dir="$(srcdir)/"; fi; \
|
||||||
|
if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
|
||||||
|
all=`expr $$all + 1`; \
|
||||||
|
case " $(XFAIL_TESTS) " in \
|
||||||
|
*$$ws$$tst$$ws*) \
|
||||||
|
xpass=`expr $$xpass + 1`; \
|
||||||
|
failed=`expr $$failed + 1`; \
|
||||||
|
echo "XPASS: $$tst"; \
|
||||||
|
;; \
|
||||||
|
*) \
|
||||||
|
echo "PASS: $$tst"; \
|
||||||
|
;; \
|
||||||
|
esac; \
|
||||||
|
elif test $$? -ne 77; then \
|
||||||
|
all=`expr $$all + 1`; \
|
||||||
|
case " $(XFAIL_TESTS) " in \
|
||||||
|
*$$ws$$tst$$ws*) \
|
||||||
|
xfail=`expr $$xfail + 1`; \
|
||||||
|
echo "XFAIL: $$tst"; \
|
||||||
|
;; \
|
||||||
|
*) \
|
||||||
|
failed=`expr $$failed + 1`; \
|
||||||
|
echo "FAIL: $$tst"; \
|
||||||
|
;; \
|
||||||
|
esac; \
|
||||||
|
else \
|
||||||
|
skip=`expr $$skip + 1`; \
|
||||||
|
echo "SKIP: $$tst"; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
if test "$$failed" -eq 0; then \
|
||||||
|
if test "$$xfail" -eq 0; then \
|
||||||
|
banner="All $$all tests passed"; \
|
||||||
|
else \
|
||||||
|
banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
|
||||||
|
fi; \
|
||||||
|
else \
|
||||||
|
if test "$$xpass" -eq 0; then \
|
||||||
|
banner="$$failed of $$all tests failed"; \
|
||||||
|
else \
|
||||||
|
banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
|
||||||
|
fi; \
|
||||||
|
fi; \
|
||||||
|
dashes="$$banner"; \
|
||||||
|
skipped=""; \
|
||||||
|
if test "$$skip" -ne 0; then \
|
||||||
|
skipped="($$skip tests were not run)"; \
|
||||||
|
test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||||
|
dashes="$$skipped"; \
|
||||||
|
fi; \
|
||||||
|
report=""; \
|
||||||
|
if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
|
||||||
|
report="Please report to $(PACKAGE_BUGREPORT)"; \
|
||||||
|
test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||||
|
dashes="$$report"; \
|
||||||
|
fi; \
|
||||||
|
dashes=`echo "$$dashes" | sed s/./=/g`; \
|
||||||
|
echo "$$dashes"; \
|
||||||
|
echo "$$banner"; \
|
||||||
|
test -z "$$skipped" || echo "$$skipped"; \
|
||||||
|
test -z "$$report" || echo "$$report"; \
|
||||||
|
echo "$$dashes"; \
|
||||||
|
test "$$failed" -eq 0; \
|
||||||
|
else :; fi
|
||||||
|
|
||||||
|
distdir: $(DISTFILES)
|
||||||
|
$(am__remove_distdir)
|
||||||
|
test -d $(distdir) || mkdir $(distdir)
|
||||||
|
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||||
|
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||||
|
list='$(DISTFILES)'; \
|
||||||
|
dist_files=`for file in $$list; do echo $$file; done | \
|
||||||
|
sed -e "s|^$$srcdirstrip/||;t" \
|
||||||
|
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||||
|
case $$dist_files in \
|
||||||
|
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||||
|
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||||
|
sort -u` ;; \
|
||||||
|
esac; \
|
||||||
|
for file in $$dist_files; do \
|
||||||
|
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||||
|
if test -d $$d/$$file; then \
|
||||||
|
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||||
|
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||||
|
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||||
|
fi; \
|
||||||
|
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||||
|
else \
|
||||||
|
test -f $(distdir)/$$file \
|
||||||
|
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||||
|
|| exit 1; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) \
|
||||||
|
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||||
|
dist-info
|
||||||
|
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||||
|
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||||
|
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||||
|
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||||
|
|| chmod -R a+r $(distdir)
|
||||||
|
dist-gzip: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
dist-bzip2: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
dist-tarZ: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||||
|
$(am__remove_distdir)
|
||||||
|
dist-shar: distdir
|
||||||
|
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
dist-zip: distdir
|
||||||
|
-rm -f $(distdir).zip
|
||||||
|
zip -rq $(distdir).zip $(distdir)
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
dist dist-all: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||||
|
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||||
|
$(am__remove_distdir)
|
||||||
|
|
||||||
|
# This target untars the dist file and tries a VPATH configuration. Then
|
||||||
|
# it guarantees that the distribution is self-contained by making another
|
||||||
|
# tarfile.
|
||||||
|
distcheck: dist
|
||||||
|
case '$(DIST_ARCHIVES)' in \
|
||||||
|
*.tar.gz*) \
|
||||||
|
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||||
|
*.tar.bz2*) \
|
||||||
|
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||||
|
*.tar.Z*) \
|
||||||
|
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||||
|
*.shar.gz*) \
|
||||||
|
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||||
|
*.zip*) \
|
||||||
|
unzip $(distdir).zip ;;\
|
||||||
|
esac
|
||||||
|
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||||
|
mkdir $(distdir)/_build
|
||||||
|
mkdir $(distdir)/_inst
|
||||||
|
chmod a-w $(distdir)
|
||||||
|
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||||
|
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||||
|
&& cd $(distdir)/_build \
|
||||||
|
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||||
|
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||||
|
distuninstallcheck \
|
||||||
|
&& chmod -R a-w "$$dc_install_base" \
|
||||||
|
&& ({ \
|
||||||
|
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||||
|
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||||
|
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||||
|
&& rm -rf "$$dc_destdir" \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||||
|
&& rm -rf $(DIST_ARCHIVES) \
|
||||||
|
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||||
|
$(am__remove_distdir)
|
||||||
|
@(echo "$(distdir) archives ready for distribution: "; \
|
||||||
|
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||||
|
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||||
|
distuninstallcheck:
|
||||||
|
@cd $(distuninstallcheck_dir) \
|
||||||
|
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||||
|
|| { echo "ERROR: files left after uninstall:" ; \
|
||||||
|
if test -n "$(DESTDIR)"; then \
|
||||||
|
echo " (check DESTDIR support)"; \
|
||||||
|
fi ; \
|
||||||
|
$(distuninstallcheck_listfiles) ; \
|
||||||
|
exit 1; } >&2
|
||||||
|
distcleancheck: distclean
|
||||||
|
@if test '$(srcdir)' = . ; then \
|
||||||
|
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||||
|
exit 1 ; \
|
||||||
|
fi
|
||||||
|
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||||
|
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||||
|
$(distcleancheck_listfiles) ; \
|
||||||
|
exit 1; } >&2
|
||||||
|
check-am: all-am
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
|
||||||
|
check: check-am
|
||||||
|
all-am: Makefile $(INFO_DEPS) $(SCRIPTS) $(MANS) $(DATA)
|
||||||
|
installdirs:
|
||||||
|
for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(docdir)"; do \
|
||||||
|
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||||
|
done
|
||||||
|
install: install-am
|
||||||
|
install-exec: install-exec-am
|
||||||
|
install-data: install-data-am
|
||||||
|
uninstall: uninstall-am
|
||||||
|
|
||||||
|
install-am: all-am
|
||||||
|
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||||
|
|
||||||
|
installcheck: installcheck-am
|
||||||
|
install-strip:
|
||||||
|
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||||
|
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||||
|
`test -z '$(STRIP)' || \
|
||||||
|
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||||
|
mostlyclean-generic:
|
||||||
|
|
||||||
|
clean-generic:
|
||||||
|
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||||
|
|
||||||
|
distclean-generic:
|
||||||
|
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||||
|
|
||||||
|
maintainer-clean-generic:
|
||||||
|
@echo "This command is intended for maintainers to use"
|
||||||
|
@echo "it deletes files that may require special tools to rebuild."
|
||||||
|
clean: clean-am
|
||||||
|
|
||||||
|
clean-am: clean-generic clean-local mostlyclean-am
|
||||||
|
|
||||||
|
distclean: distclean-am
|
||||||
|
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||||
|
-rm -f Makefile
|
||||||
|
distclean-am: clean-am distclean-generic
|
||||||
|
|
||||||
|
dvi: dvi-am
|
||||||
|
|
||||||
|
dvi-am: $(DVIS)
|
||||||
|
|
||||||
|
html: html-am
|
||||||
|
|
||||||
|
html-am: $(HTMLS)
|
||||||
|
|
||||||
|
info: info-am
|
||||||
|
|
||||||
|
info-am: $(INFO_DEPS)
|
||||||
|
|
||||||
|
install-data-am: install-dist_docDATA install-info-am install-man
|
||||||
|
|
||||||
|
install-dvi: install-dvi-am
|
||||||
|
|
||||||
|
install-dvi-am: $(DVIS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)"
|
||||||
|
@list='$(DVIS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(dvidir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(dvidir)/$$f"; \
|
||||||
|
done
|
||||||
|
install-exec-am: install-binSCRIPTS
|
||||||
|
|
||||||
|
install-html: install-html-am
|
||||||
|
|
||||||
|
install-html-am: $(HTMLS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
|
||||||
|
@list='$(HTMLS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
if test -d "$$d$$p"; then \
|
||||||
|
echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||||
|
$(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
|
||||||
|
else \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
|
||||||
|
fi; \
|
||||||
|
done
|
||||||
|
install-info: install-info-am
|
||||||
|
|
||||||
|
install-info-am: $(INFO_DEPS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)"
|
||||||
|
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
|
||||||
|
list='$(INFO_DEPS)'; \
|
||||||
|
for file in $$list; do \
|
||||||
|
case $$file in \
|
||||||
|
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
|
||||||
|
esac; \
|
||||||
|
if test -f $$file; then d=.; else d=$(srcdir); fi; \
|
||||||
|
file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
|
||||||
|
for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
|
||||||
|
$$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
|
||||||
|
if test -f $$ifile; then \
|
||||||
|
relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
|
||||||
|
echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
|
||||||
|
$(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
|
||||||
|
else : ; fi; \
|
||||||
|
done; \
|
||||||
|
done
|
||||||
|
@$(POST_INSTALL)
|
||||||
|
@if (install-info --version && \
|
||||||
|
install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
|
||||||
|
list='$(INFO_DEPS)'; \
|
||||||
|
for file in $$list; do \
|
||||||
|
relfile=`echo "$$file" | sed 's|^.*/||'`; \
|
||||||
|
echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
|
||||||
|
install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
|
||||||
|
done; \
|
||||||
|
else : ; fi
|
||||||
|
install-man: install-man8
|
||||||
|
|
||||||
|
install-pdf: install-pdf-am
|
||||||
|
|
||||||
|
install-pdf-am: $(PDFS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)"
|
||||||
|
@list='$(PDFS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
|
||||||
|
done
|
||||||
|
install-ps: install-ps-am
|
||||||
|
|
||||||
|
install-ps-am: $(PSS)
|
||||||
|
@$(NORMAL_INSTALL)
|
||||||
|
test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)"
|
||||||
|
@list='$(PSS)'; for p in $$list; do \
|
||||||
|
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||||
|
f=$(am__strip_dir) \
|
||||||
|
echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(psdir)/$$f'"; \
|
||||||
|
$(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(psdir)/$$f"; \
|
||||||
|
done
|
||||||
|
installcheck-am:
|
||||||
|
|
||||||
|
maintainer-clean: maintainer-clean-am
|
||||||
|
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||||
|
-rm -rf $(top_srcdir)/autom4te.cache
|
||||||
|
-rm -f Makefile
|
||||||
|
maintainer-clean-am: distclean-am maintainer-clean-aminfo \
|
||||||
|
maintainer-clean-generic maintainer-clean-vti
|
||||||
|
|
||||||
|
mostlyclean: mostlyclean-am
|
||||||
|
|
||||||
|
mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti
|
||||||
|
|
||||||
|
pdf: pdf-am
|
||||||
|
|
||||||
|
pdf-am: $(PDFS)
|
||||||
|
|
||||||
|
ps: ps-am
|
||||||
|
|
||||||
|
ps-am: $(PSS)
|
||||||
|
|
||||||
|
uninstall-am: uninstall-binSCRIPTS uninstall-dist_docDATA \
|
||||||
|
uninstall-dvi-am uninstall-html-am uninstall-info-am \
|
||||||
|
uninstall-man uninstall-pdf-am uninstall-ps-am
|
||||||
|
|
||||||
|
uninstall-man: uninstall-man8
|
||||||
|
|
||||||
|
.MAKE: install-am install-strip
|
||||||
|
|
||||||
|
.PHONY: all all-am am--refresh check check-TESTS check-am clean \
|
||||||
|
clean-generic clean-local dist dist-all dist-bzip2 dist-gzip \
|
||||||
|
dist-info dist-shar dist-tarZ dist-zip distcheck distclean \
|
||||||
|
distclean-generic distcleancheck distdir distuninstallcheck \
|
||||||
|
dvi dvi-am html html-am info info-am install install-am \
|
||||||
|
install-binSCRIPTS install-data install-data-am \
|
||||||
|
install-dist_docDATA install-dvi install-dvi-am install-exec \
|
||||||
|
install-exec-am install-html install-html-am install-info \
|
||||||
|
install-info-am install-man install-man8 install-pdf \
|
||||||
|
install-pdf-am install-ps install-ps-am install-strip \
|
||||||
|
installcheck installcheck-am installdirs maintainer-clean \
|
||||||
|
maintainer-clean-aminfo maintainer-clean-generic \
|
||||||
|
maintainer-clean-vti mostlyclean mostlyclean-aminfo \
|
||||||
|
mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \
|
||||||
|
uninstall uninstall-am uninstall-binSCRIPTS \
|
||||||
|
uninstall-dist_docDATA uninstall-dvi-am uninstall-html-am \
|
||||||
|
uninstall-info-am uninstall-man uninstall-man8 \
|
||||||
|
uninstall-pdf-am uninstall-ps-am
|
||||||
|
|
||||||
|
|
||||||
|
# clean up files left behind by test suite
|
||||||
|
clean-local:
|
||||||
|
-rm -rf t/target t/stow
|
||||||
|
|
||||||
|
stow: stow.in Makefile
|
||||||
|
$(edit) < $< > $@
|
||||||
|
chmod +x $@
|
||||||
|
|
||||||
|
chkstow: chkstow.in Makefile
|
||||||
|
$(edit) < $< > $@
|
||||||
|
chmod +x $@
|
||||||
|
|
||||||
|
# The rules for manual.html and manual.texi are only used by
|
||||||
|
# the developer
|
||||||
|
manual.html: manual.texi
|
||||||
|
-rm -f $@
|
||||||
|
texi2html -expandinfo -menu -monolithic -verbose $<
|
||||||
|
|
||||||
|
manual.texi: stow.texi
|
||||||
|
-rm -f $@
|
||||||
|
cp $< $@
|
||||||
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
.NOEXPORT:
|
137
NEWS
137
NEWS
|
@ -1,5 +1,138 @@
|
||||||
News file for Stow.
|
News file for Stow.
|
||||||
|
|
||||||
|
* Changes in version 2.0.1:
|
||||||
|
** Defer operations until all potential conflicts have been assessed.
|
||||||
|
|
||||||
|
We do this by traversing the installation image(s) and recording the
|
||||||
|
actions that need to be performed. Redundant actions are factored out,
|
||||||
|
e.g., we don't want to create a link that we will later remove in order to
|
||||||
|
create a directory. Benefits of this approach
|
||||||
|
|
||||||
|
1. Get to see _all_ the conflicts that are blocking an installation:
|
||||||
|
you don't have to deal with them one at a time.
|
||||||
|
2. No operations are be performed if _any_ conflicts are detected:
|
||||||
|
a failed stow will not leave you with a partially installed
|
||||||
|
package.
|
||||||
|
3. Minimises the set of operations that need to be performed.
|
||||||
|
4. Operations are executed as a batch which is much faster
|
||||||
|
This can be an advantage when upgrading packages on a live system
|
||||||
|
where you want to minimise the amount of time when the package is
|
||||||
|
unavailable.
|
||||||
|
|
||||||
|
** The above fixes the false conflict problem mentioned in the info file.
|
||||||
|
|
||||||
|
** It also fixes the two bugs mentioned in the man page.
|
||||||
|
|
||||||
|
** Multiple stow directories will now cooperate in folding/unfolding.
|
||||||
|
|
||||||
|
** Conflict messages are more uniform and informative.
|
||||||
|
|
||||||
|
** Verbosity and tracing is more extensive and uniform.
|
||||||
|
|
||||||
|
** Implemented option parsing via Getopt::Long.
|
||||||
|
|
||||||
|
** Default command line arguments set via '.stowrc' and '~/.stowrc' files.
|
||||||
|
|
||||||
|
Contents of these files are parsed as though they occurred first on the
|
||||||
|
command line.
|
||||||
|
|
||||||
|
** Support multiple actions per invocation.
|
||||||
|
|
||||||
|
In order for this to work, we had to add a new (optional) command line arg
|
||||||
|
(-S) to specify packages to stow. For example, to update an installation
|
||||||
|
of emacs you can now do
|
||||||
|
|
||||||
|
stow -D emacs-21.3 -S emacs-21.4a
|
||||||
|
|
||||||
|
which will replace emacs-21.3 with emacs-21.4a.
|
||||||
|
You can mix and match any number of actions, e.g.,
|
||||||
|
|
||||||
|
stow -S p1 p2 -D p3 p4 -S p5 -R p6
|
||||||
|
|
||||||
|
will unstow p3, p4 and p6, then stow p1, p2, p5 and p6.
|
||||||
|
|
||||||
|
* New (repeatable) command line arg: --ignore='<regex>'
|
||||||
|
|
||||||
|
This suppresses operating on a file matching the regex (suffix), e.g.,
|
||||||
|
|
||||||
|
--ignore='~' --ignore='\.#.*'
|
||||||
|
|
||||||
|
will ignore emacs and CVS backup files (suitable for ~/.stowrc file).
|
||||||
|
|
||||||
|
(I opted for Perl regular expressions because they are more powerful and
|
||||||
|
easier to implement).
|
||||||
|
|
||||||
|
** New (repeatable) command line arg: --defer='<regex>'
|
||||||
|
|
||||||
|
This defers stowing a file matching the regex (prefix) if that file is
|
||||||
|
already stowed to a different package, e.g.,
|
||||||
|
|
||||||
|
--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.
|
||||||
|
|
||||||
|
** New (repeatable) command line arg: --override='<regex>'
|
||||||
|
|
||||||
|
This forces a file matching the regex (prefix) to be stowed even if the
|
||||||
|
file is already stowed to a different package, e.g.,
|
||||||
|
|
||||||
|
--override='man' --override='info'
|
||||||
|
|
||||||
|
will unstow any pre-existing man and info pages that would conflict with
|
||||||
|
the file we are trying to stow.
|
||||||
|
|
||||||
|
Equivalently, you could use --override='man|info' since the argument is
|
||||||
|
just a Perl regex.
|
||||||
|
|
||||||
|
** The above gives the ability to manage packages with common content.
|
||||||
|
|
||||||
|
For example, man pages that are shared by a number of CPAN packages.
|
||||||
|
Using multiple stow directories and .stowrc files can also simplify
|
||||||
|
things. In our setup we use the standard /usr/local/stow directory for
|
||||||
|
packages to be installed in /usr/local. Since we install a large number
|
||||||
|
of extra Perl packages (currently about 300) we use an additional stow
|
||||||
|
directory: /usr/local/stow/perl-5.8.8-extras. Both stow directories
|
||||||
|
contain a '.stow' file so that they collaborate appropriately. I then use
|
||||||
|
the following .stowrc file in /usr/local/stow/perl-5.8.8-extras
|
||||||
|
|
||||||
|
--dir=/usr/local/stow/perl-5.8.8-extras
|
||||||
|
--target=/usr/local
|
||||||
|
--override=bin
|
||||||
|
--override=man
|
||||||
|
--ignore='perllocal\.pod'
|
||||||
|
--ignore='\.packlist'
|
||||||
|
--ignore='\.bs'
|
||||||
|
|
||||||
|
When I stow packages from there, they automatically override any man pages
|
||||||
|
and binaries that may already have been stowed by another package or by
|
||||||
|
the core perl-5.8.8 installation. For example, if you want to upgrade the
|
||||||
|
Test-Simple package, you need to override all the man pages that would
|
||||||
|
have been installed by the core package. If you are upgrading CPAN, you
|
||||||
|
will also have to override the pre-existing cpan executable.
|
||||||
|
|
||||||
|
** By default, search less aggressively for invalid symlinks when unstowing.
|
||||||
|
|
||||||
|
That is, we only search for bad symlinks in the directories explicitly
|
||||||
|
mentioned in the installation image, and do not dig down into other
|
||||||
|
subdirs. Digging down into other directories can be very time consuming
|
||||||
|
if you have a really big tree (like with a couple of Oracle installations
|
||||||
|
lying around). In general the old behaviour is only necessary when you
|
||||||
|
have really stuffed up your installation by deleting a directory that has
|
||||||
|
already been stowed. Doing that on a live system is somewhat crazy and
|
||||||
|
hopefully rare. We provide an option '-p|--compat' to enable the old
|
||||||
|
behaviour for those needing to patch up mistakes.
|
||||||
|
|
||||||
|
** Implement a test suite and support code.
|
||||||
|
|
||||||
|
This was built before implementing any of the extra features so I could
|
||||||
|
more easily check for equivalent functionality. The initial code base had
|
||||||
|
to be refactored substantially to allow for testing. The test suite is
|
||||||
|
not exhaustive, but it should provide enough to check for regressions.
|
||||||
|
|
||||||
|
|
||||||
* Changes in version 1.3.3:
|
* Changes in version 1.3.3:
|
||||||
** Now requires Perl 5.005 or later
|
** Now requires Perl 5.005 or later
|
||||||
** Initially empty directories are not removed anymore
|
** Initially empty directories are not removed anymore
|
||||||
|
@ -24,7 +157,3 @@ News file for Stow.
|
||||||
** `make clean' removes stow (which is generated from stow.in).
|
** `make clean' removes stow (which is generated from stow.in).
|
||||||
|
|
||||||
* Initial public release (v1.0) of Stow.
|
* Initial public release (v1.0) of Stow.
|
||||||
|
|
||||||
Local variables:
|
|
||||||
mode: outline
|
|
||||||
End:
|
|
||||||
|
|
41
README
41
README
|
@ -1,28 +1,31 @@
|
||||||
This is GNU Stow, a program for managing the installation of software
|
This is GNU Stow, a program for managing the installation of software
|
||||||
packages, keeping them separate (/usr/local/stow/emacs
|
packages, keeping them separate (/usr/local/stow/emacs vs.
|
||||||
vs. /usr/local/stow/perl, for example) while making them appear to be
|
/usr/local/stow/perl, for example) while making them appear to be installed in
|
||||||
installed in the same place (/usr/local).
|
the same place (/usr/local). 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.
|
||||||
|
|
||||||
Stow is a Perl script which should run correctly under Perl 4 and Perl
|
Stow is a Perl script which should run correctly under Perl 4 and Perl 5. You
|
||||||
5. You must install Perl before running Stow. For more information
|
must install Perl before running Stow. For more information about Perl, see
|
||||||
about Perl, see http://www.perl.com/perl/.
|
http://www.perl.com/perl/.
|
||||||
|
|
||||||
You can get the latest information about Stow from
|
You can get the latest information about Stow from
|
||||||
http://www.gnu.ai.mit.edu/software/stow/stow.html.
|
http://www.gnu.org/software/stow/stow.html
|
||||||
|
|
||||||
Stow was inspired by Carnegie Mellon's "Depot" program, but is
|
Stow was inspired by Carnegie Mellon's "Depot" program, but is substantially
|
||||||
substantially simpler. Whereas Depot requires database files to keep
|
simpler. Whereas Depot requires database files to keep things in sync, Stow
|
||||||
things in sync, Stow stores no extra state between runs, so there's no
|
stores no extra state between runs, so there's no danger (as there is in
|
||||||
danger (as there is in Depot) of mangling directories when file
|
Depot) of mangling directories when file hierarchies don't match the database.
|
||||||
hierarchies don't match the database. Also unlike Depot, Stow will
|
Also unlike Depot, Stow will never delete any files, directories, or links
|
||||||
never delete any files, directories, or links that appear in a Stow
|
that appear in a Stow directory (e.g., /usr/local/stow/emacs), so it's always
|
||||||
directory (e.g., /usr/local/stow/emacs), so it's always possible to
|
possible to rebuild the target tree (e.g., /usr/local).
|
||||||
rebuild the target tree (e.g., /usr/local).
|
|
||||||
|
|
||||||
Stow is free software, licensed under the GNU General Public License,
|
Stow is free software, licensed under the GNU General Public License, which
|
||||||
which can be found in the file COPYING.
|
can be found in the file COPYING.
|
||||||
|
|
||||||
See INSTALL for installation instructions.
|
See INSTALL for installation instructions.
|
||||||
|
|
||||||
Please mail comments, questions, and criticisms to the author, Bob
|
Please mail comments, questions, and criticisms to the current maintainer,
|
||||||
Glickstein, <bobg+stow@zanshin.com>.
|
Kahlil (Kal) Hodgson via help-stow@gnu.org or bug-stow@gnu.org.
|
||||||
|
|
4
THANKS
4
THANKS
|
@ -16,3 +16,7 @@ Richard Stallman <rms@gnu.ai.mit.edu>
|
||||||
Spencer Sun <zorak@netcom.com>
|
Spencer Sun <zorak@netcom.com>
|
||||||
Tom Tromey <tromey@cygnus.com>
|
Tom Tromey <tromey@cygnus.com>
|
||||||
Steve Webster <srw@zanshin.com>
|
Steve Webster <srw@zanshin.com>
|
||||||
|
Geoffrey Giesemann <geoffrey.giesemann@rmit.edu.au>
|
||||||
|
Emil Mikulic <emil.mikulic@rmit.edu.au>
|
||||||
|
Austin Wood <austin.wood@rmit.edu.au>
|
||||||
|
Christopher Hoobin <christopher.hoobin.edu.au>
|
||||||
|
|
48
TODO
48
TODO
|
@ -1,16 +1,27 @@
|
||||||
-*- outline -*-
|
* get account on fencepost.gnu.org (email accounts@gnu.org)
|
||||||
|
set up copyright papers?
|
||||||
|
'assign.future' and 'request-assign.future.manual'
|
||||||
|
|
||||||
|
* Update stow.texi
|
||||||
|
- The email address in 'Reporting Bugs' needs to be updated
|
||||||
|
|
||||||
|
* Figure out what needs the optin 'nostow' 'notstowed'. Can they be removed?
|
||||||
|
|
||||||
|
* _texi2man_ needs author/copyright/license to be completed
|
||||||
|
|
||||||
|
* Update http://directory.fsf.org/project/stow/
|
||||||
|
|
||||||
|
* Update savanaugh CVS
|
||||||
|
|
||||||
|
* Check that all email addresses are working: need an account on fenchpost for
|
||||||
|
this bug-stow@gnu.org, help-stow@gnu.org
|
||||||
|
|
||||||
|
* Get some pre-testers: need to find appropriate mailing list?
|
||||||
|
|
||||||
|
* Announce release on info-gnu@gnu.org.
|
||||||
|
|
||||||
* Autodetect "foreign" stow directories
|
* Autodetect "foreign" stow directories
|
||||||
|
|
||||||
* Fix empty-dir problem (see "Known bugs" in the manual)
|
|
||||||
|
|
||||||
* Continue after conflicts.
|
|
||||||
|
|
||||||
When detecting a conflict, affected subparts of the Stow traversal can
|
|
||||||
be skipped while continuing with other subparts.
|
|
||||||
|
|
||||||
* Traverse links in the target tree?
|
|
||||||
|
|
||||||
From e-mail with meyering@na-net.ornl.gov:
|
From e-mail with meyering@na-net.ornl.gov:
|
||||||
|
|
||||||
> My /usr/local/info equivalent is a symlink to /share/info
|
> My /usr/local/info equivalent is a symlink to /share/info
|
||||||
|
@ -32,16 +43,7 @@ From e-mail with meyering@na-net.ornl.gov:
|
||||||
should it be an enumeration of which links are OK to traverse
|
should it be an enumeration of which links are OK to traverse
|
||||||
(such as, "--traversable='info man doc'")?
|
(such as, "--traversable='info man doc'")?
|
||||||
|
|
||||||
* Develop a mechanism for sharing files between packages.
|
Does Version 2 fix this? (Kal)
|
||||||
|
I think that because it never needs to create /usr/local/info,
|
||||||
This would solve the problem of maintaining N platform-specific copies
|
it only needs to check th ownership of links that it _operatates_ on,
|
||||||
of a package, all of which have many platform-*independent* files
|
not on all the elements of the path.
|
||||||
which could be shared, such as man pages, info files, etc.
|
|
||||||
|
|
||||||
* Option to ignore certain files in the stow tree.
|
|
||||||
|
|
||||||
For example, --ignore='*~ .#*' (skip Emacs and CVS backup files).
|
|
||||||
|
|
||||||
* Option to ignore links in the stow tree to certain places.
|
|
||||||
|
|
||||||
For example, --ignore-link='/*' (skip absolute links).
|
|
||||||
|
|
548
aclocal.m4
vendored
Normal file
548
aclocal.m4
vendored
Normal file
|
@ -0,0 +1,548 @@
|
||||||
|
# generated automatically by aclocal 1.10 -*- Autoconf -*-
|
||||||
|
|
||||||
|
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||||
|
# 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||||
|
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
# PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
m4_if(m4_PACKAGE_VERSION, [2.61],,
|
||||||
|
[m4_fatal([this file was generated for autoconf 2.61.
|
||||||
|
You have another version of autoconf. If you want to use that,
|
||||||
|
you should regenerate the build system entirely.], [63])])
|
||||||
|
|
||||||
|
# Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# AM_AUTOMAKE_VERSION(VERSION)
|
||||||
|
# ----------------------------
|
||||||
|
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||||
|
# generated from the m4 files accompanying Automake X.Y.
|
||||||
|
# (This private macro should not be called outside this file.)
|
||||||
|
AC_DEFUN([AM_AUTOMAKE_VERSION],
|
||||||
|
[am__api_version='1.10'
|
||||||
|
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||||
|
dnl require some minimum version. Point them to the right macro.
|
||||||
|
m4_if([$1], [1.10], [],
|
||||||
|
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||||
|
])
|
||||||
|
|
||||||
|
# _AM_AUTOCONF_VERSION(VERSION)
|
||||||
|
# -----------------------------
|
||||||
|
# aclocal traces this macro to find the Autoconf version.
|
||||||
|
# This is a private macro too. Using m4_define simplifies
|
||||||
|
# the logic in aclocal, which can simply ignore this definition.
|
||||||
|
m4_define([_AM_AUTOCONF_VERSION], [])
|
||||||
|
|
||||||
|
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
||||||
|
# -------------------------------
|
||||||
|
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||||
|
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
||||||
|
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||||
|
[AM_AUTOMAKE_VERSION([1.10])dnl
|
||||||
|
_AM_AUTOCONF_VERSION(m4_PACKAGE_VERSION)])
|
||||||
|
|
||||||
|
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||||
|
|
||||||
|
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
||||||
|
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
||||||
|
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
|
||||||
|
#
|
||||||
|
# Of course, Automake must honor this variable whenever it calls a
|
||||||
|
# tool from the auxiliary directory. The problem is that $srcdir (and
|
||||||
|
# therefore $ac_aux_dir as well) can be either absolute or relative,
|
||||||
|
# depending on how configure is run. This is pretty annoying, since
|
||||||
|
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
|
||||||
|
# source directory, any form will work fine, but in subdirectories a
|
||||||
|
# relative path needs to be adjusted first.
|
||||||
|
#
|
||||||
|
# $ac_aux_dir/missing
|
||||||
|
# fails when called from a subdirectory if $ac_aux_dir is relative
|
||||||
|
# $top_srcdir/$ac_aux_dir/missing
|
||||||
|
# fails if $ac_aux_dir is absolute,
|
||||||
|
# fails when called from a subdirectory in a VPATH build with
|
||||||
|
# a relative $ac_aux_dir
|
||||||
|
#
|
||||||
|
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
|
||||||
|
# are both prefixed by $srcdir. In an in-source build this is usually
|
||||||
|
# harmless because $srcdir is `.', but things will broke when you
|
||||||
|
# start a VPATH build or use an absolute $srcdir.
|
||||||
|
#
|
||||||
|
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
|
||||||
|
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
|
||||||
|
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
|
||||||
|
# and then we would define $MISSING as
|
||||||
|
# MISSING="\${SHELL} $am_aux_dir/missing"
|
||||||
|
# This will work as long as MISSING is not called from configure, because
|
||||||
|
# unfortunately $(top_srcdir) has no meaning in configure.
|
||||||
|
# However there are other variables, like CC, which are often used in
|
||||||
|
# configure, and could therefore not use this "fixed" $ac_aux_dir.
|
||||||
|
#
|
||||||
|
# Another solution, used here, is to always expand $ac_aux_dir to an
|
||||||
|
# absolute PATH. The drawback is that using absolute paths prevent a
|
||||||
|
# configured tree to be moved without reconfiguration.
|
||||||
|
|
||||||
|
AC_DEFUN([AM_AUX_DIR_EXPAND],
|
||||||
|
[dnl Rely on autoconf to set up CDPATH properly.
|
||||||
|
AC_PREREQ([2.50])dnl
|
||||||
|
# expand $ac_aux_dir to an absolute path
|
||||||
|
am_aux_dir=`cd $ac_aux_dir && pwd`
|
||||||
|
])
|
||||||
|
|
||||||
|
# Do all the work for Automake. -*- Autoconf -*-
|
||||||
|
|
||||||
|
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||||
|
# 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# serial 12
|
||||||
|
|
||||||
|
# This macro actually does too much. Some checks are only needed if
|
||||||
|
# your package does certain things. But this isn't really a big deal.
|
||||||
|
|
||||||
|
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
|
||||||
|
# AM_INIT_AUTOMAKE([OPTIONS])
|
||||||
|
# -----------------------------------------------
|
||||||
|
# The call with PACKAGE and VERSION arguments is the old style
|
||||||
|
# call (pre autoconf-2.50), which is being phased out. PACKAGE
|
||||||
|
# and VERSION should now be passed to AC_INIT and removed from
|
||||||
|
# the call to AM_INIT_AUTOMAKE.
|
||||||
|
# We support both call styles for the transition. After
|
||||||
|
# the next Automake release, Autoconf can make the AC_INIT
|
||||||
|
# arguments mandatory, and then we can depend on a new Autoconf
|
||||||
|
# release and drop the old call support.
|
||||||
|
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||||
|
[AC_PREREQ([2.60])dnl
|
||||||
|
dnl Autoconf wants to disallow AM_ names. We explicitly allow
|
||||||
|
dnl the ones we care about.
|
||||||
|
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
|
||||||
|
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_INSTALL])dnl
|
||||||
|
if test "`cd $srcdir && pwd`" != "`pwd`"; then
|
||||||
|
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
|
||||||
|
# is not polluted with repeated "-I."
|
||||||
|
AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
|
||||||
|
# test to see if srcdir already configured
|
||||||
|
if test -f $srcdir/config.status; then
|
||||||
|
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# test whether we have cygpath
|
||||||
|
if test -z "$CYGPATH_W"; then
|
||||||
|
if (cygpath --version) >/dev/null 2>/dev/null; then
|
||||||
|
CYGPATH_W='cygpath -w'
|
||||||
|
else
|
||||||
|
CYGPATH_W=echo
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
AC_SUBST([CYGPATH_W])
|
||||||
|
|
||||||
|
# Define the identity of the package.
|
||||||
|
dnl Distinguish between old-style and new-style calls.
|
||||||
|
m4_ifval([$2],
|
||||||
|
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
|
||||||
|
AC_SUBST([PACKAGE], [$1])dnl
|
||||||
|
AC_SUBST([VERSION], [$2])],
|
||||||
|
[_AM_SET_OPTIONS([$1])dnl
|
||||||
|
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
|
||||||
|
m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
|
||||||
|
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
|
||||||
|
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
|
||||||
|
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
|
||||||
|
|
||||||
|
_AM_IF_OPTION([no-define],,
|
||||||
|
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||||
|
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
|
||||||
|
|
||||||
|
# Some tools Automake needs.
|
||||||
|
AC_REQUIRE([AM_SANITY_CHECK])dnl
|
||||||
|
AC_REQUIRE([AC_ARG_PROGRAM])dnl
|
||||||
|
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
|
||||||
|
AM_MISSING_PROG(AUTOCONF, autoconf)
|
||||||
|
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
|
||||||
|
AM_MISSING_PROG(AUTOHEADER, autoheader)
|
||||||
|
AM_MISSING_PROG(MAKEINFO, makeinfo)
|
||||||
|
AM_PROG_INSTALL_SH
|
||||||
|
AM_PROG_INSTALL_STRIP
|
||||||
|
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
|
||||||
|
# We need awk for the "check" target. The system "awk" is bad on
|
||||||
|
# some platforms.
|
||||||
|
AC_REQUIRE([AC_PROG_AWK])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
||||||
|
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||||
|
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
|
||||||
|
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
|
||||||
|
[_AM_PROG_TAR([v7])])])
|
||||||
|
_AM_IF_OPTION([no-dependencies],,
|
||||||
|
[AC_PROVIDE_IFELSE([AC_PROG_CC],
|
||||||
|
[_AM_DEPENDENCIES(CC)],
|
||||||
|
[define([AC_PROG_CC],
|
||||||
|
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
|
||||||
|
AC_PROVIDE_IFELSE([AC_PROG_CXX],
|
||||||
|
[_AM_DEPENDENCIES(CXX)],
|
||||||
|
[define([AC_PROG_CXX],
|
||||||
|
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
|
||||||
|
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
|
||||||
|
[_AM_DEPENDENCIES(OBJC)],
|
||||||
|
[define([AC_PROG_OBJC],
|
||||||
|
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
|
||||||
|
])
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
# When config.status generates a header, we must update the stamp-h file.
|
||||||
|
# This file resides in the same directory as the config header
|
||||||
|
# that is generated. The stamp files are numbered to have different names.
|
||||||
|
|
||||||
|
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
|
||||||
|
# loop where config.status creates the headers, so we can generate
|
||||||
|
# our stamp files there.
|
||||||
|
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
|
||||||
|
[# Compute $1's index in $config_headers.
|
||||||
|
_am_stamp_count=1
|
||||||
|
for _am_header in $config_headers :; do
|
||||||
|
case $_am_header in
|
||||||
|
$1 | $1:* )
|
||||||
|
break ;;
|
||||||
|
* )
|
||||||
|
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
|
||||||
|
|
||||||
|
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# AM_PROG_INSTALL_SH
|
||||||
|
# ------------------
|
||||||
|
# Define $install_sh.
|
||||||
|
AC_DEFUN([AM_PROG_INSTALL_SH],
|
||||||
|
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||||
|
install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
|
||||||
|
AC_SUBST(install_sh)])
|
||||||
|
|
||||||
|
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# serial 2
|
||||||
|
|
||||||
|
# Check whether the underlying file-system supports filenames
|
||||||
|
# with a leading dot. For instance MS-DOS doesn't.
|
||||||
|
AC_DEFUN([AM_SET_LEADING_DOT],
|
||||||
|
[rm -rf .tst 2>/dev/null
|
||||||
|
mkdir .tst 2>/dev/null
|
||||||
|
if test -d .tst; then
|
||||||
|
am__leading_dot=.
|
||||||
|
else
|
||||||
|
am__leading_dot=_
|
||||||
|
fi
|
||||||
|
rmdir .tst 2>/dev/null
|
||||||
|
AC_SUBST([am__leading_dot])])
|
||||||
|
|
||||||
|
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||||
|
|
||||||
|
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
|
||||||
|
# Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# serial 5
|
||||||
|
|
||||||
|
# AM_MISSING_PROG(NAME, PROGRAM)
|
||||||
|
# ------------------------------
|
||||||
|
AC_DEFUN([AM_MISSING_PROG],
|
||||||
|
[AC_REQUIRE([AM_MISSING_HAS_RUN])
|
||||||
|
$1=${$1-"${am_missing_run}$2"}
|
||||||
|
AC_SUBST($1)])
|
||||||
|
|
||||||
|
|
||||||
|
# AM_MISSING_HAS_RUN
|
||||||
|
# ------------------
|
||||||
|
# Define MISSING if not defined so far and test if it supports --run.
|
||||||
|
# If it does, set am_missing_run to use it, otherwise, to nothing.
|
||||||
|
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||||
|
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||||
|
AC_REQUIRE_AUX_FILE([missing])dnl
|
||||||
|
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
|
||||||
|
# Use eval to expand $SHELL
|
||||||
|
if eval "$MISSING --run true"; then
|
||||||
|
am_missing_run="$MISSING --run "
|
||||||
|
else
|
||||||
|
am_missing_run=
|
||||||
|
AC_MSG_WARN([`missing' script is too old or missing])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# AM_PROG_MKDIR_P
|
||||||
|
# ---------------
|
||||||
|
# Check for `mkdir -p'.
|
||||||
|
AC_DEFUN([AM_PROG_MKDIR_P],
|
||||||
|
[AC_PREREQ([2.60])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
|
||||||
|
dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
|
||||||
|
dnl while keeping a definition of mkdir_p for backward compatibility.
|
||||||
|
dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
|
||||||
|
dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
|
||||||
|
dnl Makefile.ins that do not define MKDIR_P, so we do our own
|
||||||
|
dnl adjustment using top_builddir (which is defined more often than
|
||||||
|
dnl MKDIR_P).
|
||||||
|
AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
|
||||||
|
case $mkdir_p in
|
||||||
|
[[\\/$]]* | ?:[[\\/]]*) ;;
|
||||||
|
*/*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# Helper functions for option handling. -*- Autoconf -*-
|
||||||
|
|
||||||
|
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# serial 3
|
||||||
|
|
||||||
|
# _AM_MANGLE_OPTION(NAME)
|
||||||
|
# -----------------------
|
||||||
|
AC_DEFUN([_AM_MANGLE_OPTION],
|
||||||
|
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
|
||||||
|
|
||||||
|
# _AM_SET_OPTION(NAME)
|
||||||
|
# ------------------------------
|
||||||
|
# Set option NAME. Presently that only means defining a flag for this option.
|
||||||
|
AC_DEFUN([_AM_SET_OPTION],
|
||||||
|
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
|
||||||
|
|
||||||
|
# _AM_SET_OPTIONS(OPTIONS)
|
||||||
|
# ----------------------------------
|
||||||
|
# OPTIONS is a space-separated list of Automake options.
|
||||||
|
AC_DEFUN([_AM_SET_OPTIONS],
|
||||||
|
[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
||||||
|
|
||||||
|
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
|
||||||
|
# -------------------------------------------
|
||||||
|
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||||
|
AC_DEFUN([_AM_IF_OPTION],
|
||||||
|
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||||
|
|
||||||
|
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||||
|
|
||||||
|
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
|
||||||
|
# Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# serial 4
|
||||||
|
|
||||||
|
# AM_SANITY_CHECK
|
||||||
|
# ---------------
|
||||||
|
AC_DEFUN([AM_SANITY_CHECK],
|
||||||
|
[AC_MSG_CHECKING([whether build environment is sane])
|
||||||
|
# Just in case
|
||||||
|
sleep 1
|
||||||
|
echo timestamp > conftest.file
|
||||||
|
# Do `set' in a subshell so we don't clobber the current shell's
|
||||||
|
# arguments. Must try -L first in case configure is actually a
|
||||||
|
# symlink; some systems play weird games with the mod time of symlinks
|
||||||
|
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||||
|
# directory).
|
||||||
|
if (
|
||||||
|
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
|
||||||
|
if test "$[*]" = "X"; then
|
||||||
|
# -L didn't work.
|
||||||
|
set X `ls -t $srcdir/configure conftest.file`
|
||||||
|
fi
|
||||||
|
rm -f conftest.file
|
||||||
|
if test "$[*]" != "X $srcdir/configure conftest.file" \
|
||||||
|
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
|
||||||
|
|
||||||
|
# If neither matched, then we have a broken ls. This can happen
|
||||||
|
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||||
|
# broken ls alias from the environment. This has actually
|
||||||
|
# happened. Such a system could not be considered "sane".
|
||||||
|
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||||
|
alias in your environment])
|
||||||
|
fi
|
||||||
|
|
||||||
|
test "$[2]" = conftest.file
|
||||||
|
)
|
||||||
|
then
|
||||||
|
# Ok.
|
||||||
|
:
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR([newly created file is older than distributed files!
|
||||||
|
Check your system clock])
|
||||||
|
fi
|
||||||
|
AC_MSG_RESULT(yes)])
|
||||||
|
|
||||||
|
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# AM_PROG_INSTALL_STRIP
|
||||||
|
# ---------------------
|
||||||
|
# One issue with vendor `install' (even GNU) is that you can't
|
||||||
|
# specify the program used to strip binaries. This is especially
|
||||||
|
# annoying in cross-compiling environments, where the build's strip
|
||||||
|
# is unlikely to handle the host's binaries.
|
||||||
|
# Fortunately install-sh will honor a STRIPPROG variable, so we
|
||||||
|
# always use install-sh in `make install-strip', and initialize
|
||||||
|
# STRIPPROG with the value of the STRIP variable (set by the user).
|
||||||
|
AC_DEFUN([AM_PROG_INSTALL_STRIP],
|
||||||
|
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||||
|
# Installed binaries are usually stripped using `strip' when the user
|
||||||
|
# run `make install-strip'. However `strip' might not be the right
|
||||||
|
# tool to use in cross-compilation environments, therefore Automake
|
||||||
|
# will honor the `STRIP' environment variable to overrule this program.
|
||||||
|
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
|
||||||
|
if test "$cross_compiling" != no; then
|
||||||
|
AC_CHECK_TOOL([STRIP], [strip], :)
|
||||||
|
fi
|
||||||
|
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||||
|
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||||
|
|
||||||
|
# Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# _AM_SUBST_NOTMAKE(VARIABLE)
|
||||||
|
# ---------------------------
|
||||||
|
# Prevent Automake from outputing VARIABLE = @VARIABLE@ in Makefile.in.
|
||||||
|
# This macro is traced by Automake.
|
||||||
|
AC_DEFUN([_AM_SUBST_NOTMAKE])
|
||||||
|
|
||||||
|
# Check how to create a tarball. -*- Autoconf -*-
|
||||||
|
|
||||||
|
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation
|
||||||
|
# gives unlimited permission to copy and/or distribute it,
|
||||||
|
# with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
|
# serial 2
|
||||||
|
|
||||||
|
# _AM_PROG_TAR(FORMAT)
|
||||||
|
# --------------------
|
||||||
|
# Check how to create a tarball in format FORMAT.
|
||||||
|
# FORMAT should be one of `v7', `ustar', or `pax'.
|
||||||
|
#
|
||||||
|
# Substitute a variable $(am__tar) that is a command
|
||||||
|
# writing to stdout a FORMAT-tarball containing the directory
|
||||||
|
# $tardir.
|
||||||
|
# tardir=directory && $(am__tar) > result.tar
|
||||||
|
#
|
||||||
|
# Substitute a variable $(am__untar) that extract such
|
||||||
|
# a tarball read from stdin.
|
||||||
|
# $(am__untar) < result.tar
|
||||||
|
AC_DEFUN([_AM_PROG_TAR],
|
||||||
|
[# Always define AMTAR for backward compatibility.
|
||||||
|
AM_MISSING_PROG([AMTAR], [tar])
|
||||||
|
m4_if([$1], [v7],
|
||||||
|
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
|
||||||
|
[m4_case([$1], [ustar],, [pax],,
|
||||||
|
[m4_fatal([Unknown tar format])])
|
||||||
|
AC_MSG_CHECKING([how to create a $1 tar archive])
|
||||||
|
# Loop over all known methods to create a tar archive until one works.
|
||||||
|
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
||||||
|
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
|
||||||
|
# Do not fold the above two line into one, because Tru64 sh and
|
||||||
|
# Solaris sh will not grok spaces in the rhs of `-'.
|
||||||
|
for _am_tool in $_am_tools
|
||||||
|
do
|
||||||
|
case $_am_tool in
|
||||||
|
gnutar)
|
||||||
|
for _am_tar in tar gnutar gtar;
|
||||||
|
do
|
||||||
|
AM_RUN_LOG([$_am_tar --version]) && break
|
||||||
|
done
|
||||||
|
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
|
||||||
|
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
|
||||||
|
am__untar="$_am_tar -xf -"
|
||||||
|
;;
|
||||||
|
plaintar)
|
||||||
|
# Must skip GNU tar: if it does not support --format= it doesn't create
|
||||||
|
# ustar tarball either.
|
||||||
|
(tar --version) >/dev/null 2>&1 && continue
|
||||||
|
am__tar='tar chf - "$$tardir"'
|
||||||
|
am__tar_='tar chf - "$tardir"'
|
||||||
|
am__untar='tar xf -'
|
||||||
|
;;
|
||||||
|
pax)
|
||||||
|
am__tar='pax -L -x $1 -w "$$tardir"'
|
||||||
|
am__tar_='pax -L -x $1 -w "$tardir"'
|
||||||
|
am__untar='pax -r'
|
||||||
|
;;
|
||||||
|
cpio)
|
||||||
|
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
|
||||||
|
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
|
||||||
|
am__untar='cpio -i -H $1 -d'
|
||||||
|
;;
|
||||||
|
none)
|
||||||
|
am__tar=false
|
||||||
|
am__tar_=false
|
||||||
|
am__untar=false
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# If the value was cached, stop now. We just wanted to have am__tar
|
||||||
|
# and am__untar set.
|
||||||
|
test -n "${am_cv_prog_tar_$1}" && break
|
||||||
|
|
||||||
|
# tar/untar a dummy directory, and stop if the command works
|
||||||
|
rm -rf conftest.dir
|
||||||
|
mkdir conftest.dir
|
||||||
|
echo GrepMe > conftest.dir/file
|
||||||
|
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
|
||||||
|
rm -rf conftest.dir
|
||||||
|
if test -s conftest.tar; then
|
||||||
|
AM_RUN_LOG([$am__untar <conftest.tar])
|
||||||
|
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
rm -rf conftest.dir
|
||||||
|
|
||||||
|
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
|
||||||
|
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
|
||||||
|
AC_SUBST([am__tar])
|
||||||
|
AC_SUBST([am__untar])
|
||||||
|
]) # _AM_PROG_TAR
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
automake --add-missing --copy --gnu
|
|
||||||
aclocal
|
|
||||||
autoheader
|
|
||||||
autoconf
|
|
104
chkstow.in
Normal file
104
chkstow.in
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
#!@PERL@
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use File::Find;
|
||||||
|
use Getopt::Long;
|
||||||
|
|
||||||
|
our $Wanted = \&bad_links;
|
||||||
|
our %Package=();
|
||||||
|
our $Stow_dir = '';
|
||||||
|
our $Target = q{/usr/local/};
|
||||||
|
|
||||||
|
# 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:
|
||||||
|
-b, --badlinks Report symlinks that point to non-existant files.
|
||||||
|
-a, --aliens Report non-symlinks in the target directory.
|
||||||
|
-l, --list List packages in the target directory.
|
||||||
|
-t DIR, --target=DIR Set the target directory to DIR (default
|
||||||
|
is /usr/local)
|
||||||
|
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) {
|
||||||
|
local $,="\n";
|
||||||
|
print sort(keys %Package), "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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!
|
||||||
|
|
||||||
|
# vim:ft=perl
|
176
config.log
Normal file
176
config.log
Normal file
|
@ -0,0 +1,176 @@
|
||||||
|
This file contains any messages produced by compilers while
|
||||||
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
|
It was created by stow configure 2.0.2, which was
|
||||||
|
generated by GNU Autoconf 2.61. Invocation command line was
|
||||||
|
|
||||||
|
$ ./configure
|
||||||
|
|
||||||
|
## --------- ##
|
||||||
|
## Platform. ##
|
||||||
|
## --------- ##
|
||||||
|
|
||||||
|
hostname = buffy.finexium.com
|
||||||
|
uname -m = x86_64
|
||||||
|
uname -r = 2.6.27.19-170.2.35.fc10.x86_64
|
||||||
|
uname -s = Linux
|
||||||
|
uname -v = #1 SMP Mon Feb 23 13:00:23 EST 2009
|
||||||
|
|
||||||
|
/usr/bin/uname -p = unknown
|
||||||
|
/bin/uname -X = unknown
|
||||||
|
|
||||||
|
/bin/arch = x86_64
|
||||||
|
/usr/bin/arch -k = unknown
|
||||||
|
/usr/convex/getsysinfo = unknown
|
||||||
|
/usr/bin/hostinfo = unknown
|
||||||
|
/bin/machine = unknown
|
||||||
|
/usr/bin/oslevel = unknown
|
||||||
|
/bin/universe = unknown
|
||||||
|
|
||||||
|
PATH: /home/kal/bin
|
||||||
|
PATH: /usr/lib64/qt-3.3/bin
|
||||||
|
PATH: /usr/kerberos/bin
|
||||||
|
PATH: /usr/lib64/ccache
|
||||||
|
PATH: /usr/local/bin
|
||||||
|
PATH: /usr/bin
|
||||||
|
PATH: /bin
|
||||||
|
PATH: /usr/local/sbin
|
||||||
|
PATH: /usr/sbin
|
||||||
|
PATH: /sbin
|
||||||
|
|
||||||
|
|
||||||
|
## ----------- ##
|
||||||
|
## Core tests. ##
|
||||||
|
## ----------- ##
|
||||||
|
|
||||||
|
configure:1694: checking for a BSD-compatible install
|
||||||
|
configure:1750: result: /usr/bin/install -c
|
||||||
|
configure:1761: checking whether build environment is sane
|
||||||
|
configure:1804: result: yes
|
||||||
|
configure:1832: checking for a thread-safe mkdir -p
|
||||||
|
configure:1871: result: /bin/mkdir -p
|
||||||
|
configure:1884: checking for gawk
|
||||||
|
configure:1900: found /usr/bin/gawk
|
||||||
|
configure:1911: result: gawk
|
||||||
|
configure:1922: checking whether make sets $(MAKE)
|
||||||
|
configure:1943: result: yes
|
||||||
|
configure:2144: checking for a BSD-compatible install
|
||||||
|
configure:2200: result: /usr/bin/install -c
|
||||||
|
configure:2216: checking for perl
|
||||||
|
configure:2234: found /usr/bin/perl
|
||||||
|
configure:2246: result: /usr/bin/perl
|
||||||
|
configure:2396: creating ./config.status
|
||||||
|
|
||||||
|
## ---------------------- ##
|
||||||
|
## Running config.status. ##
|
||||||
|
## ---------------------- ##
|
||||||
|
|
||||||
|
This file was extended by stow config.status 2.0.2, which was
|
||||||
|
generated by GNU Autoconf 2.61. Invocation command line was
|
||||||
|
|
||||||
|
CONFIG_FILES =
|
||||||
|
CONFIG_HEADERS =
|
||||||
|
CONFIG_LINKS =
|
||||||
|
CONFIG_COMMANDS =
|
||||||
|
$ ./config.status
|
||||||
|
|
||||||
|
on buffy.finexium.com
|
||||||
|
|
||||||
|
config.status:589: creating Makefile
|
||||||
|
|
||||||
|
## ---------------- ##
|
||||||
|
## Cache variables. ##
|
||||||
|
## ---------------- ##
|
||||||
|
|
||||||
|
ac_cv_env_build_alias_set=
|
||||||
|
ac_cv_env_build_alias_value=
|
||||||
|
ac_cv_env_host_alias_set=
|
||||||
|
ac_cv_env_host_alias_value=
|
||||||
|
ac_cv_env_target_alias_set=
|
||||||
|
ac_cv_env_target_alias_value=
|
||||||
|
ac_cv_path_PERL=/usr/bin/perl
|
||||||
|
ac_cv_path_install='/usr/bin/install -c'
|
||||||
|
ac_cv_path_mkdir=/bin/mkdir
|
||||||
|
ac_cv_prog_AWK=gawk
|
||||||
|
ac_cv_prog_make_make_set=yes
|
||||||
|
|
||||||
|
## ----------------- ##
|
||||||
|
## Output variables. ##
|
||||||
|
## ----------------- ##
|
||||||
|
|
||||||
|
ACLOCAL='${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run aclocal-1.10'
|
||||||
|
AMTAR='${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run tar'
|
||||||
|
AUTOCONF='${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run autoconf'
|
||||||
|
AUTOHEADER='${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run autoheader'
|
||||||
|
AUTOMAKE='${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run automake-1.10'
|
||||||
|
AWK='gawk'
|
||||||
|
CYGPATH_W='echo'
|
||||||
|
DEFS='-DPACKAGE_NAME=\"stow\" -DPACKAGE_TARNAME=\"stow\" -DPACKAGE_VERSION=\"2.0.2\" -DPACKAGE_STRING=\"stow\ 2.0.2\" -DPACKAGE_BUGREPORT=\"bug-stow@gnu.org\" -DPACKAGE=\"stow\" -DVERSION=\"2.0.2\"'
|
||||||
|
ECHO_C=''
|
||||||
|
ECHO_N='-n'
|
||||||
|
ECHO_T=''
|
||||||
|
INSTALL_DATA='${INSTALL} -m 644'
|
||||||
|
INSTALL_PROGRAM='${INSTALL}'
|
||||||
|
INSTALL_SCRIPT='${INSTALL}'
|
||||||
|
INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
|
||||||
|
LIBOBJS=''
|
||||||
|
LIBS=''
|
||||||
|
LTLIBOBJS=''
|
||||||
|
MAKEINFO='${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run makeinfo'
|
||||||
|
PACKAGE='stow'
|
||||||
|
PACKAGE_BUGREPORT='bug-stow@gnu.org'
|
||||||
|
PACKAGE_NAME='stow'
|
||||||
|
PACKAGE_STRING='stow 2.0.2'
|
||||||
|
PACKAGE_TARNAME='stow'
|
||||||
|
PACKAGE_VERSION='2.0.2'
|
||||||
|
PATH_SEPARATOR=':'
|
||||||
|
PERL='/usr/bin/perl'
|
||||||
|
SET_MAKE=''
|
||||||
|
SHELL='/bin/sh'
|
||||||
|
STRIP=''
|
||||||
|
VERSION='2.0.2'
|
||||||
|
am__isrc=''
|
||||||
|
am__leading_dot='.'
|
||||||
|
am__tar='${AMTAR} chof - "$$tardir"'
|
||||||
|
am__untar='${AMTAR} xf -'
|
||||||
|
bindir='${exec_prefix}/bin'
|
||||||
|
build_alias=''
|
||||||
|
datadir='${datarootdir}'
|
||||||
|
datarootdir='${prefix}/share'
|
||||||
|
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
|
||||||
|
dvidir='${docdir}'
|
||||||
|
exec_prefix='${prefix}'
|
||||||
|
host_alias=''
|
||||||
|
htmldir='${docdir}'
|
||||||
|
includedir='${prefix}/include'
|
||||||
|
infodir='${datarootdir}/info'
|
||||||
|
install_sh='$(SHELL) /home/kal/Projects/old/RMIT/stow/stow-2.0.2/install-sh'
|
||||||
|
libdir='${exec_prefix}/lib'
|
||||||
|
libexecdir='${exec_prefix}/libexec'
|
||||||
|
localedir='${datarootdir}/locale'
|
||||||
|
localstatedir='${prefix}/var'
|
||||||
|
mandir='${datarootdir}/man'
|
||||||
|
mkdir_p='/bin/mkdir -p'
|
||||||
|
oldincludedir='/usr/include'
|
||||||
|
pdfdir='${docdir}'
|
||||||
|
prefix='/usr/local'
|
||||||
|
program_transform_name='s,x,x,'
|
||||||
|
psdir='${docdir}'
|
||||||
|
sbindir='${exec_prefix}/sbin'
|
||||||
|
sharedstatedir='${prefix}/com'
|
||||||
|
sysconfdir='${prefix}/etc'
|
||||||
|
target_alias=''
|
||||||
|
|
||||||
|
## ----------- ##
|
||||||
|
## confdefs.h. ##
|
||||||
|
## ----------- ##
|
||||||
|
|
||||||
|
#define PACKAGE_NAME "stow"
|
||||||
|
#define PACKAGE_TARNAME "stow"
|
||||||
|
#define PACKAGE_VERSION "2.0.2"
|
||||||
|
#define PACKAGE_STRING "stow 2.0.2"
|
||||||
|
#define PACKAGE_BUGREPORT "bug-stow@gnu.org"
|
||||||
|
#define PACKAGE "stow"
|
||||||
|
#define VERSION "2.0.2"
|
||||||
|
|
||||||
|
configure: exit 0
|
786
config.status
Executable file
786
config.status
Executable file
|
@ -0,0 +1,786 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Generated by configure.
|
||||||
|
# Run this file to recreate the current configuration.
|
||||||
|
# Compiler output produced by configure, useful for debugging
|
||||||
|
# configure, is in config.log if it exists.
|
||||||
|
|
||||||
|
debug=false
|
||||||
|
ac_cs_recheck=false
|
||||||
|
ac_cs_silent=false
|
||||||
|
SHELL=${CONFIG_SHELL-/bin/sh}
|
||||||
|
## --------------------- ##
|
||||||
|
## M4sh Initialization. ##
|
||||||
|
## --------------------- ##
|
||||||
|
|
||||||
|
# Be more Bourne compatible
|
||||||
|
DUALCASE=1; export DUALCASE # for MKS sh
|
||||||
|
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
|
||||||
|
emulate sh
|
||||||
|
NULLCMD=:
|
||||||
|
# Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
|
||||||
|
# is contrary to our usage. Disable this feature.
|
||||||
|
alias -g '${1+"$@"}'='"$@"'
|
||||||
|
setopt NO_GLOB_SUBST
|
||||||
|
else
|
||||||
|
case `(set -o) 2>/dev/null` in
|
||||||
|
*posix*) set -o posix ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# PATH needs CR
|
||||||
|
# Avoid depending upon Character Ranges.
|
||||||
|
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
|
||||||
|
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||||
|
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
|
||||||
|
as_cr_digits='0123456789'
|
||||||
|
as_cr_alnum=$as_cr_Letters$as_cr_digits
|
||||||
|
|
||||||
|
# The user is always right.
|
||||||
|
if test "${PATH_SEPARATOR+set}" != set; then
|
||||||
|
echo "#! /bin/sh" >conf$$.sh
|
||||||
|
echo "exit 0" >>conf$$.sh
|
||||||
|
chmod +x conf$$.sh
|
||||||
|
if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
|
||||||
|
PATH_SEPARATOR=';'
|
||||||
|
else
|
||||||
|
PATH_SEPARATOR=:
|
||||||
|
fi
|
||||||
|
rm -f conf$$.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Support unset when possible.
|
||||||
|
if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
|
||||||
|
as_unset=unset
|
||||||
|
else
|
||||||
|
as_unset=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# IFS
|
||||||
|
# We need space, tab and new line, in precisely that order. Quoting is
|
||||||
|
# there to prevent editors from complaining about space-tab.
|
||||||
|
# (If _AS_PATH_WALK were called with IFS unset, it would disable word
|
||||||
|
# splitting by setting IFS to empty value.)
|
||||||
|
as_nl='
|
||||||
|
'
|
||||||
|
IFS=" "" $as_nl"
|
||||||
|
|
||||||
|
# Find who we are. Look in the path if we contain no directory separator.
|
||||||
|
case $0 in
|
||||||
|
*[\\/]* ) as_myself=$0 ;;
|
||||||
|
*) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
|
||||||
|
for as_dir in $PATH
|
||||||
|
do
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
test -z "$as_dir" && as_dir=.
|
||||||
|
test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
|
||||||
|
done
|
||||||
|
IFS=$as_save_IFS
|
||||||
|
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
# We did not find ourselves, most probably we were run as `sh COMMAND'
|
||||||
|
# in which case we are not to be found in the path.
|
||||||
|
if test "x$as_myself" = x; then
|
||||||
|
as_myself=$0
|
||||||
|
fi
|
||||||
|
if test ! -f "$as_myself"; then
|
||||||
|
echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
|
||||||
|
{ (exit 1); exit 1; }
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Work around bugs in pre-3.0 UWIN ksh.
|
||||||
|
for as_var in ENV MAIL MAILPATH
|
||||||
|
do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
|
||||||
|
done
|
||||||
|
PS1='$ '
|
||||||
|
PS2='> '
|
||||||
|
PS4='+ '
|
||||||
|
|
||||||
|
# NLS nuisances.
|
||||||
|
for as_var in \
|
||||||
|
LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
|
||||||
|
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
|
||||||
|
LC_TELEPHONE LC_TIME
|
||||||
|
do
|
||||||
|
if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
|
||||||
|
eval $as_var=C; export $as_var
|
||||||
|
else
|
||||||
|
($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Required to use basename.
|
||||||
|
if expr a : '\(a\)' >/dev/null 2>&1 &&
|
||||||
|
test "X`expr 00001 : '.*\(...\)'`" = X001; then
|
||||||
|
as_expr=expr
|
||||||
|
else
|
||||||
|
as_expr=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
|
||||||
|
as_basename=basename
|
||||||
|
else
|
||||||
|
as_basename=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Name of the executable.
|
||||||
|
as_me=`$as_basename -- "$0" ||
|
||||||
|
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
|
||||||
|
X"$0" : 'X\(//\)$' \| \
|
||||||
|
X"$0" : 'X\(/\)' \| . 2>/dev/null ||
|
||||||
|
echo X/"$0" |
|
||||||
|
sed '/^.*\/\([^/][^/]*\)\/*$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\/\(\/\/\)$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\/\(\/\).*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
s/.*/./; q'`
|
||||||
|
|
||||||
|
# CDPATH.
|
||||||
|
$as_unset CDPATH
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
as_lineno_1=$LINENO
|
||||||
|
as_lineno_2=$LINENO
|
||||||
|
test "x$as_lineno_1" != "x$as_lineno_2" &&
|
||||||
|
test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
|
||||||
|
|
||||||
|
# Create $as_me.lineno as a copy of $as_myself, but with $LINENO
|
||||||
|
# uniformly replaced by the line number. The first 'sed' inserts a
|
||||||
|
# line-number line after each line using $LINENO; the second 'sed'
|
||||||
|
# does the real work. The second script uses 'N' to pair each
|
||||||
|
# line-number line with the line containing $LINENO, and appends
|
||||||
|
# trailing '-' during substitution so that $LINENO is not a special
|
||||||
|
# case at line end.
|
||||||
|
# (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
|
||||||
|
# scripts with optimization help from Paolo Bonzini. Blame Lee
|
||||||
|
# E. McMahon (1931-1989) for sed's syntax. :-)
|
||||||
|
sed -n '
|
||||||
|
p
|
||||||
|
/[$]LINENO/=
|
||||||
|
' <$as_myself |
|
||||||
|
sed '
|
||||||
|
s/[$]LINENO.*/&-/
|
||||||
|
t lineno
|
||||||
|
b
|
||||||
|
:lineno
|
||||||
|
N
|
||||||
|
:loop
|
||||||
|
s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
|
||||||
|
t loop
|
||||||
|
s/-\n.*//
|
||||||
|
' >$as_me.lineno &&
|
||||||
|
chmod +x "$as_me.lineno" ||
|
||||||
|
{ echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
|
||||||
|
{ (exit 1); exit 1; }; }
|
||||||
|
|
||||||
|
# Don't try to exec as it changes $[0], causing all sort of problems
|
||||||
|
# (the dirname of $[0] is not the place where we might find the
|
||||||
|
# original and so on. Autoconf is especially sensitive to this).
|
||||||
|
. "./$as_me.lineno"
|
||||||
|
# Exit status is that of the last command.
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
|
||||||
|
as_dirname=dirname
|
||||||
|
else
|
||||||
|
as_dirname=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
ECHO_C= ECHO_N= ECHO_T=
|
||||||
|
case `echo -n x` in
|
||||||
|
-n*)
|
||||||
|
case `echo 'x\c'` in
|
||||||
|
*c*) ECHO_T=' ';; # ECHO_T is single tab character.
|
||||||
|
*) ECHO_C='\c';;
|
||||||
|
esac;;
|
||||||
|
*)
|
||||||
|
ECHO_N='-n';;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if expr a : '\(a\)' >/dev/null 2>&1 &&
|
||||||
|
test "X`expr 00001 : '.*\(...\)'`" = X001; then
|
||||||
|
as_expr=expr
|
||||||
|
else
|
||||||
|
as_expr=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f conf$$ conf$$.exe conf$$.file
|
||||||
|
if test -d conf$$.dir; then
|
||||||
|
rm -f conf$$.dir/conf$$.file
|
||||||
|
else
|
||||||
|
rm -f conf$$.dir
|
||||||
|
mkdir conf$$.dir
|
||||||
|
fi
|
||||||
|
echo >conf$$.file
|
||||||
|
if ln -s conf$$.file conf$$ 2>/dev/null; then
|
||||||
|
as_ln_s='ln -s'
|
||||||
|
# ... but there are two gotchas:
|
||||||
|
# 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
|
||||||
|
# 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
|
||||||
|
# In both cases, we have to default to `cp -p'.
|
||||||
|
ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
|
||||||
|
as_ln_s='cp -p'
|
||||||
|
elif ln conf$$.file conf$$ 2>/dev/null; then
|
||||||
|
as_ln_s=ln
|
||||||
|
else
|
||||||
|
as_ln_s='cp -p'
|
||||||
|
fi
|
||||||
|
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
|
||||||
|
rmdir conf$$.dir 2>/dev/null
|
||||||
|
|
||||||
|
if mkdir -p . 2>/dev/null; then
|
||||||
|
as_mkdir_p=:
|
||||||
|
else
|
||||||
|
test -d ./-p && rmdir ./-p
|
||||||
|
as_mkdir_p=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -x / >/dev/null 2>&1; then
|
||||||
|
as_test_x='test -x'
|
||||||
|
else
|
||||||
|
if ls -dL / >/dev/null 2>&1; then
|
||||||
|
as_ls_L_option=L
|
||||||
|
else
|
||||||
|
as_ls_L_option=
|
||||||
|
fi
|
||||||
|
as_test_x='
|
||||||
|
eval sh -c '\''
|
||||||
|
if test -d "$1"; then
|
||||||
|
test -d "$1/.";
|
||||||
|
else
|
||||||
|
case $1 in
|
||||||
|
-*)set "./$1";;
|
||||||
|
esac;
|
||||||
|
case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
|
||||||
|
???[sx]*):;;*)false;;esac;fi
|
||||||
|
'\'' sh
|
||||||
|
'
|
||||||
|
fi
|
||||||
|
as_executable_p=$as_test_x
|
||||||
|
|
||||||
|
# Sed expression to map a string onto a valid CPP name.
|
||||||
|
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
|
||||||
|
|
||||||
|
# Sed expression to map a string onto a valid variable name.
|
||||||
|
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
|
||||||
|
|
||||||
|
|
||||||
|
exec 6>&1
|
||||||
|
|
||||||
|
# Save the log message, to keep $[0] and so on meaningful, and to
|
||||||
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
|
# values after options handling.
|
||||||
|
ac_log="
|
||||||
|
This file was extended by stow $as_me 2.0.2, which was
|
||||||
|
generated by GNU Autoconf 2.61. Invocation command line was
|
||||||
|
|
||||||
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
|
CONFIG_HEADERS = $CONFIG_HEADERS
|
||||||
|
CONFIG_LINKS = $CONFIG_LINKS
|
||||||
|
CONFIG_COMMANDS = $CONFIG_COMMANDS
|
||||||
|
$ $0 $@
|
||||||
|
|
||||||
|
on `(hostname || uname -n) 2>/dev/null | sed 1q`
|
||||||
|
"
|
||||||
|
|
||||||
|
# Files that config.status was made for.
|
||||||
|
config_files=" Makefile"
|
||||||
|
|
||||||
|
ac_cs_usage="\
|
||||||
|
\`$as_me' instantiates files from templates according to the
|
||||||
|
current configuration.
|
||||||
|
|
||||||
|
Usage: $0 [OPTIONS] [FILE]...
|
||||||
|
|
||||||
|
-h, --help print this help, then exit
|
||||||
|
-V, --version print version number and configuration settings, then exit
|
||||||
|
-q, --quiet do not print progress messages
|
||||||
|
-d, --debug don't remove temporary files
|
||||||
|
--recheck update $as_me by reconfiguring in the same conditions
|
||||||
|
--file=FILE[:TEMPLATE]
|
||||||
|
instantiate the configuration file FILE
|
||||||
|
|
||||||
|
Configuration files:
|
||||||
|
$config_files
|
||||||
|
|
||||||
|
Report bugs to <bug-autoconf@gnu.org>."
|
||||||
|
|
||||||
|
ac_cs_version="\
|
||||||
|
stow config.status 2.0.2
|
||||||
|
configured by ./configure, generated by GNU Autoconf 2.61,
|
||||||
|
with options \"\"
|
||||||
|
|
||||||
|
Copyright (C) 2006 Free Software Foundation, Inc.
|
||||||
|
This config.status script is free software; the Free Software Foundation
|
||||||
|
gives unlimited permission to copy, distribute and modify it."
|
||||||
|
|
||||||
|
ac_pwd='/home/kal/Projects/old/RMIT/stow/stow-2.0.2'
|
||||||
|
srcdir='.'
|
||||||
|
INSTALL='/usr/bin/install -c'
|
||||||
|
MKDIR_P='/bin/mkdir -p'
|
||||||
|
# If no file are specified by the user, then we need to provide default
|
||||||
|
# value. By we need to know if files were specified by the user.
|
||||||
|
ac_need_defaults=:
|
||||||
|
while test $# != 0
|
||||||
|
do
|
||||||
|
case $1 in
|
||||||
|
--*=*)
|
||||||
|
ac_option=`expr "X$1" : 'X\([^=]*\)='`
|
||||||
|
ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
|
||||||
|
ac_shift=:
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ac_option=$1
|
||||||
|
ac_optarg=$2
|
||||||
|
ac_shift=shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $ac_option in
|
||||||
|
# Handling of the options.
|
||||||
|
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
|
||||||
|
ac_cs_recheck=: ;;
|
||||||
|
--version | --versio | --versi | --vers | --ver | --ve | --v | -V )
|
||||||
|
echo "$ac_cs_version"; exit ;;
|
||||||
|
--debug | --debu | --deb | --de | --d | -d )
|
||||||
|
debug=: ;;
|
||||||
|
--file | --fil | --fi | --f )
|
||||||
|
$ac_shift
|
||||||
|
CONFIG_FILES="$CONFIG_FILES $ac_optarg"
|
||||||
|
ac_need_defaults=false;;
|
||||||
|
--he | --h | --help | --hel | -h )
|
||||||
|
echo "$ac_cs_usage"; exit ;;
|
||||||
|
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
|
||||||
|
| -silent | --silent | --silen | --sile | --sil | --si | --s)
|
||||||
|
ac_cs_silent=: ;;
|
||||||
|
|
||||||
|
# This is an error.
|
||||||
|
-*) { echo "$as_me: error: unrecognized option: $1
|
||||||
|
Try \`$0 --help' for more information." >&2
|
||||||
|
{ (exit 1); exit 1; }; } ;;
|
||||||
|
|
||||||
|
*) ac_config_targets="$ac_config_targets $1"
|
||||||
|
ac_need_defaults=false ;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
ac_configure_extra_args=
|
||||||
|
|
||||||
|
if $ac_cs_silent; then
|
||||||
|
exec 6>/dev/null
|
||||||
|
ac_configure_extra_args="$ac_configure_extra_args --silent"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $ac_cs_recheck; then
|
||||||
|
echo "running CONFIG_SHELL=/bin/sh /bin/sh ./configure " $ac_configure_extra_args " --no-create --no-recursion" >&6
|
||||||
|
CONFIG_SHELL=/bin/sh
|
||||||
|
export CONFIG_SHELL
|
||||||
|
exec /bin/sh "./configure" $ac_configure_extra_args --no-create --no-recursion
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec 5>>config.log
|
||||||
|
{
|
||||||
|
echo
|
||||||
|
sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
|
||||||
|
## Running $as_me. ##
|
||||||
|
_ASBOX
|
||||||
|
echo "$ac_log"
|
||||||
|
} >&5
|
||||||
|
|
||||||
|
|
||||||
|
# Handling of arguments.
|
||||||
|
for ac_config_target in $ac_config_targets
|
||||||
|
do
|
||||||
|
case $ac_config_target in
|
||||||
|
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
|
||||||
|
|
||||||
|
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
|
||||||
|
echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
|
||||||
|
{ (exit 1); exit 1; }; };;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# If the user did not use the arguments to specify the items to instantiate,
|
||||||
|
# then the envvar interface is used. Set only those that are not.
|
||||||
|
# We use the long form for the default assignment because of an extremely
|
||||||
|
# bizarre bug on SunOS 4.1.3.
|
||||||
|
if $ac_need_defaults; then
|
||||||
|
test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Have a temporary directory for convenience. Make it in the build tree
|
||||||
|
# simply because there is no reason against having it here, and in addition,
|
||||||
|
# creating and moving files from /tmp can sometimes cause problems.
|
||||||
|
# Hook for its removal unless debugging.
|
||||||
|
# Note that there is a small window in which the directory will not be cleaned:
|
||||||
|
# after its creation but before its name has been assigned to `$tmp'.
|
||||||
|
$debug ||
|
||||||
|
{
|
||||||
|
tmp=
|
||||||
|
trap 'exit_status=$?
|
||||||
|
{ test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
|
||||||
|
' 0
|
||||||
|
trap '{ (exit 1); exit 1; }' 1 2 13 15
|
||||||
|
}
|
||||||
|
# Create a (secure) tmp directory for tmp files.
|
||||||
|
|
||||||
|
{
|
||||||
|
tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
|
||||||
|
test -n "$tmp" && test -d "$tmp"
|
||||||
|
} ||
|
||||||
|
{
|
||||||
|
tmp=./conf$$-$RANDOM
|
||||||
|
(umask 077 && mkdir "$tmp")
|
||||||
|
} ||
|
||||||
|
{
|
||||||
|
echo "$me: cannot create a temporary directory in ." >&2
|
||||||
|
{ (exit 1); exit 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Set up the sed scripts for CONFIG_FILES section.
|
||||||
|
#
|
||||||
|
|
||||||
|
# No need to generate the scripts if there are no CONFIG_FILES.
|
||||||
|
# This happens for instance when ./config.status config.h
|
||||||
|
if test -n "$CONFIG_FILES"; then
|
||||||
|
|
||||||
|
cat >"$tmp/subs-1.sed" <<\CEOF
|
||||||
|
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
|
||||||
|
s,@SHELL@,|#_!!_#|/bin/sh,g
|
||||||
|
s,@PATH_SEPARATOR@,|#_!!_#|:,g
|
||||||
|
s,@PACKAGE_NAME@,|#_!!_#|stow,g
|
||||||
|
s,@PACKAGE_TARNAME@,|#_!!_#|stow,g
|
||||||
|
s,@PACKAGE_VERSION@,|#_!!_#|2.0.2,g
|
||||||
|
s,@PACKAGE_STRING@,|#_!!_#|stow 2.0.2,g
|
||||||
|
s,@PACKAGE_BUGREPORT@,|#_!!_#|bug-stow@|#_!!_#|gnu.org,g
|
||||||
|
s,@exec_prefix@,|#_!!_#|${prefix},g
|
||||||
|
s,@prefix@,|#_!!_#|/usr/local,g
|
||||||
|
s,@program_transform_name@,|#_!!_#|s\,x\,x\,,g
|
||||||
|
s,@bindir@,|#_!!_#|${exec_prefix}/bin,g
|
||||||
|
s,@sbindir@,|#_!!_#|${exec_prefix}/sbin,g
|
||||||
|
s,@libexecdir@,|#_!!_#|${exec_prefix}/libexec,g
|
||||||
|
s,@datarootdir@,|#_!!_#|${prefix}/share,g
|
||||||
|
s,@datadir@,|#_!!_#|${datarootdir},g
|
||||||
|
s,@sysconfdir@,|#_!!_#|${prefix}/etc,g
|
||||||
|
s,@sharedstatedir@,|#_!!_#|${prefix}/com,g
|
||||||
|
s,@localstatedir@,|#_!!_#|${prefix}/var,g
|
||||||
|
s,@includedir@,|#_!!_#|${prefix}/include,g
|
||||||
|
s,@oldincludedir@,|#_!!_#|/usr/include,g
|
||||||
|
s,@docdir@,|#_!!_#|${datarootdir}/doc/${PACKAGE_TARNAME},g
|
||||||
|
s,@infodir@,|#_!!_#|${datarootdir}/info,g
|
||||||
|
s,@htmldir@,|#_!!_#|${docdir},g
|
||||||
|
s,@dvidir@,|#_!!_#|${docdir},g
|
||||||
|
s,@pdfdir@,|#_!!_#|${docdir},g
|
||||||
|
s,@psdir@,|#_!!_#|${docdir},g
|
||||||
|
s,@libdir@,|#_!!_#|${exec_prefix}/lib,g
|
||||||
|
s,@localedir@,|#_!!_#|${datarootdir}/locale,g
|
||||||
|
s,@mandir@,|#_!!_#|${datarootdir}/man,g
|
||||||
|
s,@DEFS@,|#_!!_#|-DPACKAGE_NAME=\\"stow\\" -DPACKAGE_TARNAME=\\"stow\\" -DPACKAGE_VERSION=\\"2.0.2\\" -DPACKAGE_STRING=\\"stow\\ 2.0.2\\" -DPACKAGE_BUGREPORT=\\"bug-stow@|#_!!_#|gnu.org\\" -DPACKAGE=\\"stow\\" -DVERSION=\\"2.0.2\\",g
|
||||||
|
s,@ECHO_C@,|#_!!_#|,g
|
||||||
|
s,@ECHO_N@,|#_!!_#|-n,g
|
||||||
|
s,@ECHO_T@,|#_!!_#|,g
|
||||||
|
s,@LIBS@,|#_!!_#|,g
|
||||||
|
s,@build_alias@,|#_!!_#|,g
|
||||||
|
s,@host_alias@,|#_!!_#|,g
|
||||||
|
s,@target_alias@,|#_!!_#|,g
|
||||||
|
s,@INSTALL_PROGRAM@,|#_!!_#|${INSTALL},g
|
||||||
|
s,@INSTALL_SCRIPT@,|#_!!_#|${INSTALL},g
|
||||||
|
s,@INSTALL_DATA@,|#_!!_#|${INSTALL} -m 644,g
|
||||||
|
s,@am__isrc@,|#_!!_#|,g
|
||||||
|
s,@CYGPATH_W@,|#_!!_#|echo,g
|
||||||
|
s,@PACKAGE@,|#_!!_#|stow,g
|
||||||
|
s,@VERSION@,|#_!!_#|2.0.2,g
|
||||||
|
s,@ACLOCAL@,|#_!!_#|${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run aclocal-1.10,g
|
||||||
|
s,@AUTOCONF@,|#_!!_#|${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run autoconf,g
|
||||||
|
s,@AUTOMAKE@,|#_!!_#|${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run automake-1.10,g
|
||||||
|
s,@AUTOHEADER@,|#_!!_#|${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run autoheader,g
|
||||||
|
s,@MAKEINFO@,|#_!!_#|${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run makeinfo,g
|
||||||
|
s,@install_sh@,|#_!!_#|$(SHELL) /home/kal/Projects/old/RMIT/stow/stow-2.0.2/install-sh,g
|
||||||
|
s,@STRIP@,|#_!!_#|,g
|
||||||
|
s,@INSTALL_STRIP_PROGRAM@,|#_!!_#|$(install_sh) -c -s,g
|
||||||
|
s,@mkdir_p@,|#_!!_#|/bin/mkdir -p,g
|
||||||
|
s,@AWK@,|#_!!_#|gawk,g
|
||||||
|
s,@SET_MAKE@,|#_!!_#|,g
|
||||||
|
s,@am__leading_dot@,|#_!!_#|.,g
|
||||||
|
s,@AMTAR@,|#_!!_#|${SHELL} /home/kal/Projects/old/RMIT/stow/stow-2.0.2/missing --run tar,g
|
||||||
|
s,@am__tar@,|#_!!_#|${AMTAR} chof - "$$tardir",g
|
||||||
|
s,@am__untar@,|#_!!_#|${AMTAR} xf -,g
|
||||||
|
s,@PERL@,|#_!!_#|/usr/bin/perl,g
|
||||||
|
s,@LIBOBJS@,|#_!!_#|,g
|
||||||
|
s,@LTLIBOBJS@,|#_!!_#|,g
|
||||||
|
:end
|
||||||
|
s/|#_!!_#|//g
|
||||||
|
CEOF
|
||||||
|
fi # test -n "$CONFIG_FILES"
|
||||||
|
|
||||||
|
|
||||||
|
for ac_tag in :F $CONFIG_FILES
|
||||||
|
do
|
||||||
|
case $ac_tag in
|
||||||
|
:[FHLC]) ac_mode=$ac_tag; continue;;
|
||||||
|
esac
|
||||||
|
case $ac_mode$ac_tag in
|
||||||
|
:[FHL]*:*);;
|
||||||
|
:L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
|
||||||
|
echo "$as_me: error: Invalid tag $ac_tag." >&2;}
|
||||||
|
{ (exit 1); exit 1; }; };;
|
||||||
|
:[FH]-) ac_tag=-:-;;
|
||||||
|
:[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
|
||||||
|
esac
|
||||||
|
ac_save_IFS=$IFS
|
||||||
|
IFS=:
|
||||||
|
set x $ac_tag
|
||||||
|
IFS=$ac_save_IFS
|
||||||
|
shift
|
||||||
|
ac_file=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
case $ac_mode in
|
||||||
|
:L) ac_source=$1;;
|
||||||
|
:[FH])
|
||||||
|
ac_file_inputs=
|
||||||
|
for ac_f
|
||||||
|
do
|
||||||
|
case $ac_f in
|
||||||
|
-) ac_f="$tmp/stdin";;
|
||||||
|
*) # Look for the file first in the build tree, then in the source tree
|
||||||
|
# (if the path is not absolute). The absolute path cannot be DOS-style,
|
||||||
|
# because $ac_f cannot contain `:'.
|
||||||
|
test -f "$ac_f" ||
|
||||||
|
case $ac_f in
|
||||||
|
[\\/$]*) false;;
|
||||||
|
*) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
|
||||||
|
esac ||
|
||||||
|
{ { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
|
||||||
|
echo "$as_me: error: cannot find input file: $ac_f" >&2;}
|
||||||
|
{ (exit 1); exit 1; }; };;
|
||||||
|
esac
|
||||||
|
ac_file_inputs="$ac_file_inputs $ac_f"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Let's still pretend it is `configure' which instantiates (i.e., don't
|
||||||
|
# use $as_me), people would be surprised to read:
|
||||||
|
# /* config.h. Generated by config.status. */
|
||||||
|
configure_input="Generated from "`IFS=:
|
||||||
|
echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
|
||||||
|
if test x"$ac_file" != x-; then
|
||||||
|
configure_input="$ac_file. $configure_input"
|
||||||
|
{ echo "$as_me:$LINENO: creating $ac_file" >&5
|
||||||
|
echo "$as_me: creating $ac_file" >&6;}
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $ac_tag in
|
||||||
|
*:-:* | *:-) cat >"$tmp/stdin";;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ac_dir=`$as_dirname -- "$ac_file" ||
|
||||||
|
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||||
|
X"$ac_file" : 'X\(//\)[^/]' \| \
|
||||||
|
X"$ac_file" : 'X\(//\)$' \| \
|
||||||
|
X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
|
||||||
|
echo X"$ac_file" |
|
||||||
|
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)[^/].*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\).*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
s/.*/./; q'`
|
||||||
|
{ as_dir="$ac_dir"
|
||||||
|
case $as_dir in #(
|
||||||
|
-*) as_dir=./$as_dir;;
|
||||||
|
esac
|
||||||
|
test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
|
||||||
|
as_dirs=
|
||||||
|
while :; do
|
||||||
|
case $as_dir in #(
|
||||||
|
*\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
|
||||||
|
*) as_qdir=$as_dir;;
|
||||||
|
esac
|
||||||
|
as_dirs="'$as_qdir' $as_dirs"
|
||||||
|
as_dir=`$as_dirname -- "$as_dir" ||
|
||||||
|
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||||
|
X"$as_dir" : 'X\(//\)[^/]' \| \
|
||||||
|
X"$as_dir" : 'X\(//\)$' \| \
|
||||||
|
X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
|
||||||
|
echo X"$as_dir" |
|
||||||
|
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)[^/].*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\).*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
s/.*/./; q'`
|
||||||
|
test -d "$as_dir" && break
|
||||||
|
done
|
||||||
|
test -z "$as_dirs" || eval "mkdir $as_dirs"
|
||||||
|
} || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
|
||||||
|
echo "$as_me: error: cannot create directory $as_dir" >&2;}
|
||||||
|
{ (exit 1); exit 1; }; }; }
|
||||||
|
ac_builddir=.
|
||||||
|
|
||||||
|
case "$ac_dir" in
|
||||||
|
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
|
||||||
|
*)
|
||||||
|
ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
|
||||||
|
# A ".." for each directory in $ac_dir_suffix.
|
||||||
|
ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
|
||||||
|
case $ac_top_builddir_sub in
|
||||||
|
"") ac_top_builddir_sub=. ac_top_build_prefix= ;;
|
||||||
|
*) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
|
||||||
|
esac ;;
|
||||||
|
esac
|
||||||
|
ac_abs_top_builddir=$ac_pwd
|
||||||
|
ac_abs_builddir=$ac_pwd$ac_dir_suffix
|
||||||
|
# for backward compatibility:
|
||||||
|
ac_top_builddir=$ac_top_build_prefix
|
||||||
|
|
||||||
|
case $srcdir in
|
||||||
|
.) # We are building in place.
|
||||||
|
ac_srcdir=.
|
||||||
|
ac_top_srcdir=$ac_top_builddir_sub
|
||||||
|
ac_abs_top_srcdir=$ac_pwd ;;
|
||||||
|
[\\/]* | ?:[\\/]* ) # Absolute name.
|
||||||
|
ac_srcdir=$srcdir$ac_dir_suffix;
|
||||||
|
ac_top_srcdir=$srcdir
|
||||||
|
ac_abs_top_srcdir=$srcdir ;;
|
||||||
|
*) # Relative name.
|
||||||
|
ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
|
||||||
|
ac_top_srcdir=$ac_top_build_prefix$srcdir
|
||||||
|
ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
|
||||||
|
esac
|
||||||
|
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
|
||||||
|
|
||||||
|
|
||||||
|
case $ac_mode in
|
||||||
|
:F)
|
||||||
|
#
|
||||||
|
# CONFIG_FILE
|
||||||
|
#
|
||||||
|
|
||||||
|
case $INSTALL in
|
||||||
|
[\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
|
||||||
|
*) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
|
||||||
|
esac
|
||||||
|
ac_MKDIR_P=$MKDIR_P
|
||||||
|
case $MKDIR_P in
|
||||||
|
[\\/$]* | ?:[\\/]* ) ;;
|
||||||
|
*/*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
|
||||||
|
esac
|
||||||
|
# If the template does not know about datarootdir, expand it.
|
||||||
|
# FIXME: This hack should be removed a few years after 2.60.
|
||||||
|
ac_datarootdir_hack=; ac_datarootdir_seen=
|
||||||
|
|
||||||
|
case `sed -n '/datarootdir/ {
|
||||||
|
p
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/@datadir@/p
|
||||||
|
/@docdir@/p
|
||||||
|
/@infodir@/p
|
||||||
|
/@localedir@/p
|
||||||
|
/@mandir@/p
|
||||||
|
' $ac_file_inputs` in
|
||||||
|
*datarootdir*) ac_datarootdir_seen=yes;;
|
||||||
|
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
|
||||||
|
{ echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
|
||||||
|
echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
|
||||||
|
ac_datarootdir_hack='
|
||||||
|
s&@datadir@&${datarootdir}&g
|
||||||
|
s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g
|
||||||
|
s&@infodir@&${datarootdir}/info&g
|
||||||
|
s&@localedir@&${datarootdir}/locale&g
|
||||||
|
s&@mandir@&${datarootdir}/man&g
|
||||||
|
s&\${datarootdir}&${prefix}/share&g' ;;
|
||||||
|
esac
|
||||||
|
sed "/^[ ]*VPATH[ ]*=/{
|
||||||
|
s/:*\$(srcdir):*/:/
|
||||||
|
s/:*\${srcdir}:*/:/
|
||||||
|
s/:*@srcdir@:*/:/
|
||||||
|
s/^\([^=]*=[ ]*\):*/\1/
|
||||||
|
s/:*$//
|
||||||
|
s/^[^=]*=[ ]*$//
|
||||||
|
}
|
||||||
|
|
||||||
|
:t
|
||||||
|
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
|
||||||
|
s&@configure_input@&$configure_input&;t t
|
||||||
|
s&@top_builddir@&$ac_top_builddir_sub&;t t
|
||||||
|
s&@srcdir@&$ac_srcdir&;t t
|
||||||
|
s&@abs_srcdir@&$ac_abs_srcdir&;t t
|
||||||
|
s&@top_srcdir@&$ac_top_srcdir&;t t
|
||||||
|
s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
|
||||||
|
s&@builddir@&$ac_builddir&;t t
|
||||||
|
s&@abs_builddir@&$ac_abs_builddir&;t t
|
||||||
|
s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
|
||||||
|
s&@INSTALL@&$ac_INSTALL&;t t
|
||||||
|
s&@MKDIR_P@&$ac_MKDIR_P&;t t
|
||||||
|
$ac_datarootdir_hack
|
||||||
|
" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
|
||||||
|
|
||||||
|
test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
|
||||||
|
{ ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
|
||||||
|
{ ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
|
||||||
|
{ echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
|
||||||
|
which seems to be undefined. Please make sure it is defined." >&5
|
||||||
|
echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
|
||||||
|
which seems to be undefined. Please make sure it is defined." >&2;}
|
||||||
|
|
||||||
|
rm -f "$tmp/stdin"
|
||||||
|
case $ac_file in
|
||||||
|
-) cat "$tmp/out"; rm -f "$tmp/out";;
|
||||||
|
*) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
done # for ac_tag
|
||||||
|
|
||||||
|
|
||||||
|
{ (exit 0); exit 0; }
|
17
configure.ac
Normal file
17
configure.ac
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
dnl Process this file with Autoconf to produce configure dnl
|
||||||
|
|
||||||
|
AC_INIT([stow], [2.0.2], [bug-stow@gnu.org])
|
||||||
|
AC_PREREQ([2.61])
|
||||||
|
AM_INIT_AUTOMAKE([-Wall -Werror])
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
|
||||||
|
dnl Check for perl on our system
|
||||||
|
dnl call to AC_SUBST(PERL) is implicit
|
||||||
|
AC_PATH_PROGS([PERL], [perl] [perl5], [false])
|
||||||
|
if test "x$PERL" = xfalse
|
||||||
|
then
|
||||||
|
AC_MSG_WARN([WARNING: Perl not found; you must edit line 1 of 'stow'])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([Makefile])
|
||||||
|
AC_OUTPUT
|
22
configure.in
22
configure.in
|
@ -1,22 +0,0 @@
|
||||||
dnl Process this file with Autoconf to produce configure
|
|
||||||
|
|
||||||
AC_INIT(stow.in)
|
|
||||||
|
|
||||||
PACKAGE=stow
|
|
||||||
VERSION=1.3.3
|
|
||||||
AM_INIT_AUTOMAKE(stow, $VERSION)
|
|
||||||
AC_SUBST(PACKAGE)
|
|
||||||
AC_SUBST(VERSION)
|
|
||||||
|
|
||||||
AC_ARG_PROGRAM
|
|
||||||
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
|
|
||||||
AC_PATH_PROGS(PERL, perl perl5, false)
|
|
||||||
|
|
||||||
if test "x$PERL" = xfalse
|
|
||||||
then
|
|
||||||
echo 'WARNING: Perl not found; you must edit line 1 of `stow'"'"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_OUTPUT(Makefile stow)
|
|
507
install-sh
Executable file
507
install-sh
Executable file
|
@ -0,0 +1,507 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# install - install a program, script, or datafile
|
||||||
|
|
||||||
|
scriptversion=2006-10-14.15
|
||||||
|
|
||||||
|
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||||
|
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||||
|
# following copyright and license.
|
||||||
|
#
|
||||||
|
# Copyright (C) 1994 X Consortium
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to
|
||||||
|
# deal in the Software without restriction, including without limitation the
|
||||||
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
# sell copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||||
|
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
# Except as contained in this notice, the name of the X Consortium shall not
|
||||||
|
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||||
|
# ings in this Software without prior written authorization from the X Consor-
|
||||||
|
# tium.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# FSF changes to this file are in the public domain.
|
||||||
|
#
|
||||||
|
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||||
|
# `make' implicit rules from creating a file called install from it
|
||||||
|
# when there is no Makefile.
|
||||||
|
#
|
||||||
|
# This script is compatible with the BSD install script, but was written
|
||||||
|
# from scratch.
|
||||||
|
|
||||||
|
nl='
|
||||||
|
'
|
||||||
|
IFS=" "" $nl"
|
||||||
|
|
||||||
|
# set DOITPROG to echo to test this script
|
||||||
|
|
||||||
|
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||||
|
doit="${DOITPROG-}"
|
||||||
|
if test -z "$doit"; then
|
||||||
|
doit_exec=exec
|
||||||
|
else
|
||||||
|
doit_exec=$doit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Put in absolute file names if you don't have them in your path;
|
||||||
|
# or use environment vars.
|
||||||
|
|
||||||
|
mvprog="${MVPROG-mv}"
|
||||||
|
cpprog="${CPPROG-cp}"
|
||||||
|
chmodprog="${CHMODPROG-chmod}"
|
||||||
|
chownprog="${CHOWNPROG-chown}"
|
||||||
|
chgrpprog="${CHGRPPROG-chgrp}"
|
||||||
|
stripprog="${STRIPPROG-strip}"
|
||||||
|
rmprog="${RMPROG-rm}"
|
||||||
|
mkdirprog="${MKDIRPROG-mkdir}"
|
||||||
|
|
||||||
|
posix_glob=
|
||||||
|
posix_mkdir=
|
||||||
|
|
||||||
|
# Desired mode of installed file.
|
||||||
|
mode=0755
|
||||||
|
|
||||||
|
chmodcmd=$chmodprog
|
||||||
|
chowncmd=
|
||||||
|
chgrpcmd=
|
||||||
|
stripcmd=
|
||||||
|
rmcmd="$rmprog -f"
|
||||||
|
mvcmd="$mvprog"
|
||||||
|
src=
|
||||||
|
dst=
|
||||||
|
dir_arg=
|
||||||
|
dstarg=
|
||||||
|
no_target_directory=
|
||||||
|
|
||||||
|
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||||
|
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||||
|
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||||
|
or: $0 [OPTION]... -d DIRECTORIES...
|
||||||
|
|
||||||
|
In the 1st form, copy SRCFILE to DSTFILE.
|
||||||
|
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||||
|
In the 4th, create DIRECTORIES.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-c (ignored)
|
||||||
|
-d create directories instead of installing files.
|
||||||
|
-g GROUP $chgrpprog installed files to GROUP.
|
||||||
|
-m MODE $chmodprog installed files to MODE.
|
||||||
|
-o USER $chownprog installed files to USER.
|
||||||
|
-s $stripprog installed files.
|
||||||
|
-t DIRECTORY install into DIRECTORY.
|
||||||
|
-T report an error if DSTFILE is a directory.
|
||||||
|
--help display this help and exit.
|
||||||
|
--version display version info and exit.
|
||||||
|
|
||||||
|
Environment variables override the default commands:
|
||||||
|
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
|
||||||
|
"
|
||||||
|
|
||||||
|
while test $# -ne 0; do
|
||||||
|
case $1 in
|
||||||
|
-c) shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-d) dir_arg=true
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-g) chgrpcmd="$chgrpprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
--help) echo "$usage"; exit $?;;
|
||||||
|
|
||||||
|
-m) mode=$2
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
case $mode in
|
||||||
|
*' '* | *' '* | *'
|
||||||
|
'* | *'*'* | *'?'* | *'['*)
|
||||||
|
echo "$0: invalid mode: $mode" >&2
|
||||||
|
exit 1;;
|
||||||
|
esac
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-o) chowncmd="$chownprog $2"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-s) stripcmd=$stripprog
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-t) dstarg=$2
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
-T) no_target_directory=true
|
||||||
|
shift
|
||||||
|
continue;;
|
||||||
|
|
||||||
|
--version) echo "$0 $scriptversion"; exit $?;;
|
||||||
|
|
||||||
|
--) shift
|
||||||
|
break;;
|
||||||
|
|
||||||
|
-*) echo "$0: invalid option: $1" >&2
|
||||||
|
exit 1;;
|
||||||
|
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if test $# -ne 0 && test -z "$dir_arg$dstarg"; then
|
||||||
|
# When -d is used, all remaining arguments are directories to create.
|
||||||
|
# When -t is used, the destination is already specified.
|
||||||
|
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
if test -n "$dstarg"; then
|
||||||
|
# $@ is not empty: it contains at least $arg.
|
||||||
|
set fnord "$@" "$dstarg"
|
||||||
|
shift # fnord
|
||||||
|
fi
|
||||||
|
shift # arg
|
||||||
|
dstarg=$arg
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test $# -eq 0; then
|
||||||
|
if test -z "$dir_arg"; then
|
||||||
|
echo "$0: no input file specified." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# It's OK to call `install-sh -d' without argument.
|
||||||
|
# This can happen when creating conditional directories.
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$dir_arg"; then
|
||||||
|
trap '(exit $?); exit' 1 2 13 15
|
||||||
|
|
||||||
|
# Set umask so as not to create temps with too-generous modes.
|
||||||
|
# However, 'strip' requires both read and write access to temps.
|
||||||
|
case $mode in
|
||||||
|
# Optimize common cases.
|
||||||
|
*644) cp_umask=133;;
|
||||||
|
*755) cp_umask=22;;
|
||||||
|
|
||||||
|
*[0-7])
|
||||||
|
if test -z "$stripcmd"; then
|
||||||
|
u_plus_rw=
|
||||||
|
else
|
||||||
|
u_plus_rw='% 200'
|
||||||
|
fi
|
||||||
|
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||||
|
*)
|
||||||
|
if test -z "$stripcmd"; then
|
||||||
|
u_plus_rw=
|
||||||
|
else
|
||||||
|
u_plus_rw=,u+rw
|
||||||
|
fi
|
||||||
|
cp_umask=$mode$u_plus_rw;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
for src
|
||||||
|
do
|
||||||
|
# Protect names starting with `-'.
|
||||||
|
case $src in
|
||||||
|
-*) src=./$src ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
dst=$src
|
||||||
|
dstdir=$dst
|
||||||
|
test -d "$dstdir"
|
||||||
|
dstdir_status=$?
|
||||||
|
else
|
||||||
|
|
||||||
|
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||||
|
# might cause directories to be created, which would be especially bad
|
||||||
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
if test ! -f "$src" && test ! -d "$src"; then
|
||||||
|
echo "$0: $src does not exist." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$dstarg"; then
|
||||||
|
echo "$0: no destination specified." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
dst=$dstarg
|
||||||
|
# Protect names starting with `-'.
|
||||||
|
case $dst in
|
||||||
|
-*) dst=./$dst ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# If destination is a directory, append the input filename; won't work
|
||||||
|
# if double slashes aren't ignored.
|
||||||
|
if test -d "$dst"; then
|
||||||
|
if test -n "$no_target_directory"; then
|
||||||
|
echo "$0: $dstarg: Is a directory" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
dstdir=$dst
|
||||||
|
dst=$dstdir/`basename "$src"`
|
||||||
|
dstdir_status=0
|
||||||
|
else
|
||||||
|
# Prefer dirname, but fall back on a substitute if dirname fails.
|
||||||
|
dstdir=`
|
||||||
|
(dirname "$dst") 2>/dev/null ||
|
||||||
|
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||||
|
X"$dst" : 'X\(//\)[^/]' \| \
|
||||||
|
X"$dst" : 'X\(//\)$' \| \
|
||||||
|
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
||||||
|
echo X"$dst" |
|
||||||
|
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)[^/].*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\/\)$/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
/^X\(\/\).*/{
|
||||||
|
s//\1/
|
||||||
|
q
|
||||||
|
}
|
||||||
|
s/.*/./; q'
|
||||||
|
`
|
||||||
|
|
||||||
|
test -d "$dstdir"
|
||||||
|
dstdir_status=$?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
obsolete_mkdir_used=false
|
||||||
|
|
||||||
|
if test $dstdir_status != 0; then
|
||||||
|
case $posix_mkdir in
|
||||||
|
'')
|
||||||
|
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||||
|
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||||
|
umask=`umask`
|
||||||
|
case $stripcmd.$umask in
|
||||||
|
# Optimize common cases.
|
||||||
|
*[2367][2367]) mkdir_umask=$umask;;
|
||||||
|
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||||
|
|
||||||
|
*[0-7])
|
||||||
|
mkdir_umask=`expr $umask + 22 \
|
||||||
|
- $umask % 100 % 40 + $umask % 20 \
|
||||||
|
- $umask % 10 % 4 + $umask % 2
|
||||||
|
`;;
|
||||||
|
*) mkdir_umask=$umask,go-w;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# With -d, create the new directory with the user-specified mode.
|
||||||
|
# Otherwise, rely on $mkdir_umask.
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
mkdir_mode=-m$mode
|
||||||
|
else
|
||||||
|
mkdir_mode=
|
||||||
|
fi
|
||||||
|
|
||||||
|
posix_mkdir=false
|
||||||
|
case $umask in
|
||||||
|
*[123567][0-7][0-7])
|
||||||
|
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||||
|
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||||
|
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||||
|
|
||||||
|
if (umask $mkdir_umask &&
|
||||||
|
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
if test -z "$dir_arg" || {
|
||||||
|
# Check for POSIX incompatibilities with -m.
|
||||||
|
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||||
|
# other-writeable bit of parent directory when it shouldn't.
|
||||||
|
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||||
|
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
||||||
|
case $ls_ld_tmpdir in
|
||||||
|
d????-?r-*) different_mode=700;;
|
||||||
|
d????-?--*) different_mode=755;;
|
||||||
|
*) false;;
|
||||||
|
esac &&
|
||||||
|
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
||||||
|
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
||||||
|
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
then posix_mkdir=:
|
||||||
|
fi
|
||||||
|
rmdir "$tmpdir/d" "$tmpdir"
|
||||||
|
else
|
||||||
|
# Remove any dirs left behind by ancient mkdir implementations.
|
||||||
|
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
||||||
|
fi
|
||||||
|
trap '' 0;;
|
||||||
|
esac;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if
|
||||||
|
$posix_mkdir && (
|
||||||
|
umask $mkdir_umask &&
|
||||||
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||||
|
)
|
||||||
|
then :
|
||||||
|
else
|
||||||
|
|
||||||
|
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||||
|
# or it failed possibly due to a race condition. Create the
|
||||||
|
# directory the slow way, step by step, checking for races as we go.
|
||||||
|
|
||||||
|
case $dstdir in
|
||||||
|
/*) prefix=/ ;;
|
||||||
|
-*) prefix=./ ;;
|
||||||
|
*) prefix= ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $posix_glob in
|
||||||
|
'')
|
||||||
|
if (set -f) 2>/dev/null; then
|
||||||
|
posix_glob=true
|
||||||
|
else
|
||||||
|
posix_glob=false
|
||||||
|
fi ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
oIFS=$IFS
|
||||||
|
IFS=/
|
||||||
|
$posix_glob && set -f
|
||||||
|
set fnord $dstdir
|
||||||
|
shift
|
||||||
|
$posix_glob && set +f
|
||||||
|
IFS=$oIFS
|
||||||
|
|
||||||
|
prefixes=
|
||||||
|
|
||||||
|
for d
|
||||||
|
do
|
||||||
|
test -z "$d" && continue
|
||||||
|
|
||||||
|
prefix=$prefix$d
|
||||||
|
if test -d "$prefix"; then
|
||||||
|
prefixes=
|
||||||
|
else
|
||||||
|
if $posix_mkdir; then
|
||||||
|
(umask=$mkdir_umask &&
|
||||||
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||||
|
# Don't fail if two instances are running concurrently.
|
||||||
|
test -d "$prefix" || exit 1
|
||||||
|
else
|
||||||
|
case $prefix in
|
||||||
|
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||||
|
*) qprefix=$prefix;;
|
||||||
|
esac
|
||||||
|
prefixes="$prefixes '$qprefix'"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
prefix=$prefix/
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "$prefixes"; then
|
||||||
|
# Don't fail if two instances are running concurrently.
|
||||||
|
(umask $mkdir_umask &&
|
||||||
|
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||||
|
test -d "$dstdir" || exit 1
|
||||||
|
obsolete_mkdir_used=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||||
|
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||||
|
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||||
|
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||||
|
else
|
||||||
|
|
||||||
|
# Make a couple of temp file names in the proper directory.
|
||||||
|
dsttmp=$dstdir/_inst.$$_
|
||||||
|
rmtmp=$dstdir/_rm.$$_
|
||||||
|
|
||||||
|
# Trap to clean up those temp files at exit.
|
||||||
|
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||||
|
|
||||||
|
# Copy the file name to the temp name.
|
||||||
|
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||||
|
|
||||||
|
# and set any options; do chmod last to preserve setuid bits.
|
||||||
|
#
|
||||||
|
# If any of these fail, we abort the whole thing. If we want to
|
||||||
|
# ignore errors from any of these, just make sure not to ignore
|
||||||
|
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||||
|
#
|
||||||
|
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
|
||||||
|
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
|
||||||
|
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
|
||||||
|
&& { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||||
|
|
||||||
|
# Now rename the file to the real destination.
|
||||||
|
{ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null \
|
||||||
|
|| {
|
||||||
|
# The rename failed, perhaps because mv can't rename something else
|
||||||
|
# to itself, or perhaps because mv is so ancient that it does not
|
||||||
|
# support -f.
|
||||||
|
|
||||||
|
# Now remove or move aside any old file at destination location.
|
||||||
|
# We try this two ways since rm can't unlink itself on some
|
||||||
|
# systems and the destination file might be busy for other
|
||||||
|
# reasons. In this case, the final cleanup might fail but the new
|
||||||
|
# file should still install successfully.
|
||||||
|
{
|
||||||
|
if test -f "$dst"; then
|
||||||
|
$doit $rmcmd -f "$dst" 2>/dev/null \
|
||||||
|
|| { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null \
|
||||||
|
&& { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }; }\
|
||||||
|
|| {
|
||||||
|
echo "$0: cannot unlink or rename $dst" >&2
|
||||||
|
(exit 1); exit 1
|
||||||
|
}
|
||||||
|
else
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
} &&
|
||||||
|
|
||||||
|
# Now rename the file to the real destination.
|
||||||
|
$doit $mvcmd "$dsttmp" "$dst"
|
||||||
|
}
|
||||||
|
} || exit 1
|
||||||
|
|
||||||
|
trap '' 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-end: "$"
|
||||||
|
# End:
|
201
mdate-sh
Executable file
201
mdate-sh
Executable file
|
@ -0,0 +1,201 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Get modification time of a file or directory and pretty-print it.
|
||||||
|
|
||||||
|
scriptversion=2005-06-29.22
|
||||||
|
|
||||||
|
# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software
|
||||||
|
# Foundation, Inc.
|
||||||
|
# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
|
||||||
|
#
|
||||||
|
# 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, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# This file is maintained in Automake, please report
|
||||||
|
# bugs to <bug-automake@gnu.org> or send patches to
|
||||||
|
# <automake-patches@gnu.org>.
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
'')
|
||||||
|
echo "$0: No file. Try \`$0 --help' for more information." 1>&2
|
||||||
|
exit 1;
|
||||||
|
;;
|
||||||
|
-h | --h*)
|
||||||
|
cat <<\EOF
|
||||||
|
Usage: mdate-sh [--help] [--version] FILE
|
||||||
|
|
||||||
|
Pretty-print the modification time of FILE.
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "mdate-sh $scriptversion"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Prevent date giving response in another language.
|
||||||
|
LANG=C
|
||||||
|
export LANG
|
||||||
|
LC_ALL=C
|
||||||
|
export LC_ALL
|
||||||
|
LC_TIME=C
|
||||||
|
export LC_TIME
|
||||||
|
|
||||||
|
# GNU ls changes its time format in response to the TIME_STYLE
|
||||||
|
# variable. Since we cannot assume `unset' works, revert this
|
||||||
|
# variable to its documented default.
|
||||||
|
if test "${TIME_STYLE+set}" = set; then
|
||||||
|
TIME_STYLE=posix-long-iso
|
||||||
|
export TIME_STYLE
|
||||||
|
fi
|
||||||
|
|
||||||
|
save_arg1=$1
|
||||||
|
|
||||||
|
# Find out how to get the extended ls output of a file or directory.
|
||||||
|
if ls -L /dev/null 1>/dev/null 2>&1; then
|
||||||
|
ls_command='ls -L -l -d'
|
||||||
|
else
|
||||||
|
ls_command='ls -l -d'
|
||||||
|
fi
|
||||||
|
|
||||||
|
# A `ls -l' line looks as follows on OS/2.
|
||||||
|
# drwxrwx--- 0 Aug 11 2001 foo
|
||||||
|
# This differs from Unix, which adds ownership information.
|
||||||
|
# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
|
||||||
|
#
|
||||||
|
# To find the date, we split the line on spaces and iterate on words
|
||||||
|
# until we find a month. This cannot work with files whose owner is a
|
||||||
|
# user named `Jan', or `Feb', etc. However, it's unlikely that `/'
|
||||||
|
# will be owned by a user whose name is a month. So we first look at
|
||||||
|
# the extended ls output of the root directory to decide how many
|
||||||
|
# words should be skipped to get the date.
|
||||||
|
|
||||||
|
# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
|
||||||
|
set x`ls -l -d /`
|
||||||
|
|
||||||
|
# Find which argument is the month.
|
||||||
|
month=
|
||||||
|
command=
|
||||||
|
until test $month
|
||||||
|
do
|
||||||
|
shift
|
||||||
|
# Add another shift to the command.
|
||||||
|
command="$command shift;"
|
||||||
|
case $1 in
|
||||||
|
Jan) month=January; nummonth=1;;
|
||||||
|
Feb) month=February; nummonth=2;;
|
||||||
|
Mar) month=March; nummonth=3;;
|
||||||
|
Apr) month=April; nummonth=4;;
|
||||||
|
May) month=May; nummonth=5;;
|
||||||
|
Jun) month=June; nummonth=6;;
|
||||||
|
Jul) month=July; nummonth=7;;
|
||||||
|
Aug) month=August; nummonth=8;;
|
||||||
|
Sep) month=September; nummonth=9;;
|
||||||
|
Oct) month=October; nummonth=10;;
|
||||||
|
Nov) month=November; nummonth=11;;
|
||||||
|
Dec) month=December; nummonth=12;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Get the extended ls output of the file or directory.
|
||||||
|
set dummy x`eval "$ls_command \"\$save_arg1\""`
|
||||||
|
|
||||||
|
# Remove all preceding arguments
|
||||||
|
eval $command
|
||||||
|
|
||||||
|
# Because of the dummy argument above, month is in $2.
|
||||||
|
#
|
||||||
|
# On a POSIX system, we should have
|
||||||
|
#
|
||||||
|
# $# = 5
|
||||||
|
# $1 = file size
|
||||||
|
# $2 = month
|
||||||
|
# $3 = day
|
||||||
|
# $4 = year or time
|
||||||
|
# $5 = filename
|
||||||
|
#
|
||||||
|
# On Darwin 7.7.0 and 7.6.0, we have
|
||||||
|
#
|
||||||
|
# $# = 4
|
||||||
|
# $1 = day
|
||||||
|
# $2 = month
|
||||||
|
# $3 = year or time
|
||||||
|
# $4 = filename
|
||||||
|
|
||||||
|
# Get the month.
|
||||||
|
case $2 in
|
||||||
|
Jan) month=January; nummonth=1;;
|
||||||
|
Feb) month=February; nummonth=2;;
|
||||||
|
Mar) month=March; nummonth=3;;
|
||||||
|
Apr) month=April; nummonth=4;;
|
||||||
|
May) month=May; nummonth=5;;
|
||||||
|
Jun) month=June; nummonth=6;;
|
||||||
|
Jul) month=July; nummonth=7;;
|
||||||
|
Aug) month=August; nummonth=8;;
|
||||||
|
Sep) month=September; nummonth=9;;
|
||||||
|
Oct) month=October; nummonth=10;;
|
||||||
|
Nov) month=November; nummonth=11;;
|
||||||
|
Dec) month=December; nummonth=12;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $3 in
|
||||||
|
???*) day=$1;;
|
||||||
|
*) day=$3; shift;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Here we have to deal with the problem that the ls output gives either
|
||||||
|
# the time of day or the year.
|
||||||
|
case $3 in
|
||||||
|
*:*) set `date`; eval year=\$$#
|
||||||
|
case $2 in
|
||||||
|
Jan) nummonthtod=1;;
|
||||||
|
Feb) nummonthtod=2;;
|
||||||
|
Mar) nummonthtod=3;;
|
||||||
|
Apr) nummonthtod=4;;
|
||||||
|
May) nummonthtod=5;;
|
||||||
|
Jun) nummonthtod=6;;
|
||||||
|
Jul) nummonthtod=7;;
|
||||||
|
Aug) nummonthtod=8;;
|
||||||
|
Sep) nummonthtod=9;;
|
||||||
|
Oct) nummonthtod=10;;
|
||||||
|
Nov) nummonthtod=11;;
|
||||||
|
Dec) nummonthtod=12;;
|
||||||
|
esac
|
||||||
|
# For the first six month of the year the time notation can also
|
||||||
|
# be used for files modified in the last year.
|
||||||
|
if (expr $nummonth \> $nummonthtod) > /dev/null;
|
||||||
|
then
|
||||||
|
year=`expr $year - 1`
|
||||||
|
fi;;
|
||||||
|
*) year=$3;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# The result.
|
||||||
|
echo $day $month $year
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-indentation: 2
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-end: "$"
|
||||||
|
# End:
|
367
missing
Executable file
367
missing
Executable file
|
@ -0,0 +1,367 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Common stub for a few missing GNU programs while installing.
|
||||||
|
|
||||||
|
scriptversion=2006-05-10.23
|
||||||
|
|
||||||
|
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006
|
||||||
|
# Free Software Foundation, Inc.
|
||||||
|
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||||
|
|
||||||
|
# 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, 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., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||||
|
# 02110-1301, USA.
|
||||||
|
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
if test $# -eq 0; then
|
||||||
|
echo 1>&2 "Try \`$0 --help' for more information"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
run=:
|
||||||
|
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
|
||||||
|
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
|
||||||
|
|
||||||
|
# In the cases where this matters, `missing' is being run in the
|
||||||
|
# srcdir already.
|
||||||
|
if test -f configure.ac; then
|
||||||
|
configure_ac=configure.ac
|
||||||
|
else
|
||||||
|
configure_ac=configure.in
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg="missing on your system"
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
--run)
|
||||||
|
# Try to run requested program, and just exit if it succeeds.
|
||||||
|
run=
|
||||||
|
shift
|
||||||
|
"$@" && exit 0
|
||||||
|
# Exit code 63 means version mismatch. This often happens
|
||||||
|
# when the user try to use an ancient version of a tool on
|
||||||
|
# a file that requires a minimum version. In this case we
|
||||||
|
# we should proceed has if the program had been absent, or
|
||||||
|
# if --run hadn't been passed.
|
||||||
|
if test $? = 63; then
|
||||||
|
run=:
|
||||||
|
msg="probably too old"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
-h|--h|--he|--hel|--help)
|
||||||
|
echo "\
|
||||||
|
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||||
|
|
||||||
|
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||||
|
error status if there is no known handling for PROGRAM.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-h, --help display this help and exit
|
||||||
|
-v, --version output version information and exit
|
||||||
|
--run try to run the given command, and emulate it if it fails
|
||||||
|
|
||||||
|
Supported PROGRAM values:
|
||||||
|
aclocal touch file \`aclocal.m4'
|
||||||
|
autoconf touch file \`configure'
|
||||||
|
autoheader touch file \`config.h.in'
|
||||||
|
autom4te touch the output file, or create a stub one
|
||||||
|
automake touch all \`Makefile.in' files
|
||||||
|
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||||
|
flex create \`lex.yy.c', if possible, from existing .c
|
||||||
|
help2man touch the output file
|
||||||
|
lex create \`lex.yy.c', if possible, from existing .c
|
||||||
|
makeinfo touch the output file
|
||||||
|
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||||
|
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||||
|
|
||||||
|
Send bug reports to <bug-automake@gnu.org>."
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
|
||||||
|
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||||
|
echo "missing $scriptversion (GNU Automake)"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
|
||||||
|
-*)
|
||||||
|
echo 1>&2 "$0: Unknown \`$1' option"
|
||||||
|
echo 1>&2 "Try \`$0 --help' for more information"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Now exit if we have it, but it failed. Also exit now if we
|
||||||
|
# don't have it and --version was passed (most likely to detect
|
||||||
|
# the program).
|
||||||
|
case $1 in
|
||||||
|
lex|yacc)
|
||||||
|
# Not GNU programs, they don't have --version.
|
||||||
|
;;
|
||||||
|
|
||||||
|
tar)
|
||||||
|
if test -n "$run"; then
|
||||||
|
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||||
|
exit 1
|
||||||
|
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||||
|
# We have it, but it failed.
|
||||||
|
exit 1
|
||||||
|
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||||
|
# Could not run --version or --help. This is probably someone
|
||||||
|
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||||
|
# $TOOL exists and not knowing $TOOL uses missing.
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# If it does not exist, or fails to run (possibly an outdated version),
|
||||||
|
# try to emulate it.
|
||||||
|
case $1 in
|
||||||
|
aclocal*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||||
|
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||||
|
any GNU archive site."
|
||||||
|
touch aclocal.m4
|
||||||
|
;;
|
||||||
|
|
||||||
|
autoconf)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`${configure_ac}'. You might want to install the
|
||||||
|
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||||
|
archive site."
|
||||||
|
touch configure
|
||||||
|
;;
|
||||||
|
|
||||||
|
autoheader)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||||
|
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||||
|
from any GNU archive site."
|
||||||
|
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||||
|
test -z "$files" && files="config.h"
|
||||||
|
touch_files=
|
||||||
|
for f in $files; do
|
||||||
|
case $f in
|
||||||
|
*:*) touch_files="$touch_files "`echo "$f" |
|
||||||
|
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||||
|
*) touch_files="$touch_files $f.in";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
touch $touch_files
|
||||||
|
;;
|
||||||
|
|
||||||
|
automake*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||||
|
You might want to install the \`Automake' and \`Perl' packages.
|
||||||
|
Grab them from any GNU archive site."
|
||||||
|
find . -type f -name Makefile.am -print |
|
||||||
|
sed 's/\.am$/.in/' |
|
||||||
|
while read f; do touch "$f"; done
|
||||||
|
;;
|
||||||
|
|
||||||
|
autom4te)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is needed, but is $msg.
|
||||||
|
You might have modified some files without having the
|
||||||
|
proper tools for further handling them.
|
||||||
|
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||||
|
archive site."
|
||||||
|
|
||||||
|
file=`echo "$*" | sed -n "$sed_output"`
|
||||||
|
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||||
|
if test -f "$file"; then
|
||||||
|
touch $file
|
||||||
|
else
|
||||||
|
test -z "$file" || exec >$file
|
||||||
|
echo "#! /bin/sh"
|
||||||
|
echo "# Created by GNU Automake missing as a replacement of"
|
||||||
|
echo "# $ $@"
|
||||||
|
echo "exit 0"
|
||||||
|
chmod +x $file
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
bison|yacc)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' $msg. You should only need it if
|
||||||
|
you modified a \`.y' file. You may need the \`Bison' package
|
||||||
|
in order for those modifications to take effect. You can get
|
||||||
|
\`Bison' from any GNU archive site."
|
||||||
|
rm -f y.tab.c y.tab.h
|
||||||
|
if test $# -ne 1; then
|
||||||
|
eval LASTARG="\${$#}"
|
||||||
|
case $LASTARG in
|
||||||
|
*.y)
|
||||||
|
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||||
|
if test -f "$SRCFILE"; then
|
||||||
|
cp "$SRCFILE" y.tab.c
|
||||||
|
fi
|
||||||
|
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||||
|
if test -f "$SRCFILE"; then
|
||||||
|
cp "$SRCFILE" y.tab.h
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if test ! -f y.tab.h; then
|
||||||
|
echo >y.tab.h
|
||||||
|
fi
|
||||||
|
if test ! -f y.tab.c; then
|
||||||
|
echo 'main() { return 0; }' >y.tab.c
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
lex|flex)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified a \`.l' file. You may need the \`Flex' package
|
||||||
|
in order for those modifications to take effect. You can get
|
||||||
|
\`Flex' from any GNU archive site."
|
||||||
|
rm -f lex.yy.c
|
||||||
|
if test $# -ne 1; then
|
||||||
|
eval LASTARG="\${$#}"
|
||||||
|
case $LASTARG in
|
||||||
|
*.l)
|
||||||
|
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||||
|
if test -f "$SRCFILE"; then
|
||||||
|
cp "$SRCFILE" lex.yy.c
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if test ! -f lex.yy.c; then
|
||||||
|
echo 'main() { return 0; }' >lex.yy.c
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
help2man)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified a dependency of a manual page. You may need the
|
||||||
|
\`Help2man' package in order for those modifications to take
|
||||||
|
effect. You can get \`Help2man' from any GNU archive site."
|
||||||
|
|
||||||
|
file=`echo "$*" | sed -n "$sed_output"`
|
||||||
|
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||||
|
if test -f "$file"; then
|
||||||
|
touch $file
|
||||||
|
else
|
||||||
|
test -z "$file" || exec >$file
|
||||||
|
echo ".ab help2man is required to generate this page"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
makeinfo)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is $msg. You should only need it if
|
||||||
|
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||||
|
indirectly affecting the aspect of the manual. The spurious
|
||||||
|
call might also be the consequence of using a buggy \`make' (AIX,
|
||||||
|
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||||
|
the \`GNU make' package. Grab either from any GNU archive site."
|
||||||
|
# The file to touch is that specified with -o ...
|
||||||
|
file=`echo "$*" | sed -n "$sed_output"`
|
||||||
|
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||||
|
if test -z "$file"; then
|
||||||
|
# ... or it is the one specified with @setfilename ...
|
||||||
|
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||||
|
file=`sed -n '
|
||||||
|
/^@setfilename/{
|
||||||
|
s/.* \([^ ]*\) *$/\1/
|
||||||
|
p
|
||||||
|
q
|
||||||
|
}' $infile`
|
||||||
|
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||||
|
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||||
|
fi
|
||||||
|
# If the file does not exist, the user really needs makeinfo;
|
||||||
|
# let's fail without touching anything.
|
||||||
|
test -f $file || exit 1
|
||||||
|
touch $file
|
||||||
|
;;
|
||||||
|
|
||||||
|
tar)
|
||||||
|
shift
|
||||||
|
|
||||||
|
# We have already tried tar in the generic part.
|
||||||
|
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||||
|
# messages.
|
||||||
|
if (gnutar --version > /dev/null 2>&1); then
|
||||||
|
gnutar "$@" && exit 0
|
||||||
|
fi
|
||||||
|
if (gtar --version > /dev/null 2>&1); then
|
||||||
|
gtar "$@" && exit 0
|
||||||
|
fi
|
||||||
|
firstarg="$1"
|
||||||
|
if shift; then
|
||||||
|
case $firstarg in
|
||||||
|
*o*)
|
||||||
|
firstarg=`echo "$firstarg" | sed s/o//`
|
||||||
|
tar "$firstarg" "$@" && exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
case $firstarg in
|
||||||
|
*h*)
|
||||||
|
firstarg=`echo "$firstarg" | sed s/h//`
|
||||||
|
tar "$firstarg" "$@" && exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||||
|
You may want to install GNU tar or Free paxutils, or check the
|
||||||
|
command line arguments."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo 1>&2 "\
|
||||||
|
WARNING: \`$1' is needed, and is $msg.
|
||||||
|
You might have modified some files without having the
|
||||||
|
proper tools for further handling them. Check the \`README' file,
|
||||||
|
it often tells you about the needed prerequisites for installing
|
||||||
|
this package. You may also peek at any GNU archive site, in case
|
||||||
|
some other package would contain this missing \`$1' program."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-end: "$"
|
||||||
|
# End:
|
4
stamp-vti
Normal file
4
stamp-vti
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
@set UPDATED 20 February 2008
|
||||||
|
@set UPDATED-MONTH February 2008
|
||||||
|
@set EDITION 2.0.2
|
||||||
|
@set VERSION 2.0.2
|
571
stow.texi
571
stow.texi
|
@ -20,7 +20,8 @@ managing the installation of software packages.
|
||||||
|
|
||||||
Software and documentation Copyright @copyright{} 1993, 1994, 1995, 1996
|
Software and documentation Copyright @copyright{} 1993, 1994, 1995, 1996
|
||||||
by Bob Glickstein <bobg+stow@@zanshin.com>.
|
by Bob Glickstein <bobg+stow@@zanshin.com>.
|
||||||
Copyright @copyright{} 2000,2001 Guillaume Morin <gmorin@@gnu.org>
|
Copyright @copyright{} 2000, 2001 Guillaume Morin <gmorin@@gnu.org>.
|
||||||
|
Copyright @copyright{} 2007 Kahlil (Kal) Hodgson <kahlil@@internode.on.net>.
|
||||||
|
|
||||||
Permission is granted to make and distribute verbatim copies of this
|
Permission is granted to make and distribute verbatim copies of this
|
||||||
manual provided the copyright notice and this permission notice are
|
manual provided the copyright notice and this permission notice are
|
||||||
|
@ -50,6 +51,7 @@ approved by the Free Software Foundation.
|
||||||
@title Stow @value{VERSION}
|
@title Stow @value{VERSION}
|
||||||
@subtitle Managing the installation of software packages
|
@subtitle Managing the installation of software packages
|
||||||
@author Bob Glickstein, Zanshin Software, Inc.
|
@author Bob Glickstein, Zanshin Software, Inc.
|
||||||
|
@author Kahlil Hodgson, RMIT Univerity, Australia.
|
||||||
@page
|
@page
|
||||||
@vskip 0pt plus 1filll
|
@vskip 0pt plus 1filll
|
||||||
This manual describes GNU Stow version @value{VERSION}, a program for
|
This manual describes GNU Stow version @value{VERSION}, a program for
|
||||||
|
@ -57,6 +59,8 @@ managing the installation of software packages.
|
||||||
|
|
||||||
Software and documentation Copyright @copyright{} 1993, 1994, 1995, 1996
|
Software and documentation Copyright @copyright{} 1993, 1994, 1995, 1996
|
||||||
by Bob Glickstein <bobg+stow@@zanshin.com>.
|
by Bob Glickstein <bobg+stow@@zanshin.com>.
|
||||||
|
Copyright @copyright{} 2000,2001 Guillaume Morin <gmorin@@gnu.org>
|
||||||
|
Copyright @copyright{} 2007 Kahlil (Kal) Hodgson <kahlil@@internode.on.net>
|
||||||
|
|
||||||
Permission is granted to make and distribute verbatim copies of this
|
Permission is granted to make and distribute verbatim copies of this
|
||||||
manual provided the copyright notice and this permission notice are
|
manual provided the copyright notice and this permission notice are
|
||||||
|
@ -75,6 +79,8 @@ except that this permission notice may be stated in a translation
|
||||||
approved by the Free Software Foundation.
|
approved by the Free Software Foundation.
|
||||||
@end titlepage
|
@end titlepage
|
||||||
|
|
||||||
|
|
||||||
|
@c ==========================================================================
|
||||||
@node Top, Introduction, (dir), (dir)
|
@node Top, Introduction, (dir), (dir)
|
||||||
|
|
||||||
@ifinfo
|
@ifinfo
|
||||||
|
@ -86,31 +92,33 @@ the installation of software packages.
|
||||||
* Introduction:: Description of Stow.
|
* Introduction:: Description of Stow.
|
||||||
* Terminology:: Terms used by this manual.
|
* Terminology:: Terms used by this manual.
|
||||||
* Invoking Stow:: Option summary.
|
* Invoking Stow:: Option summary.
|
||||||
* Installing packages:: Using Stow to install.
|
* Installing Packages:: Using Stow to install.
|
||||||
* Deleting packages:: Using Stow to uninstall.
|
* Deleting Packages:: Using Stow to uninstall.
|
||||||
* Caveats:: Pitfalls and difficulties to beware.
|
* Conflicts:: When Stow can't stow.
|
||||||
|
* Deferred Operation:: Using two passes to 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.
|
* Bootstrapping:: When stow and perl are not yet stowed.
|
||||||
* Reporting bugs:: How, what, where, and when to report.
|
* Reporting Bugs:: How, what, where, and when to report.
|
||||||
* Known bugs:: Don't report any of these.
|
* Known Bugs:: Don't report any of these.
|
||||||
* GNU General Public License:: Copying terms.
|
* GNU General Public License:: Copying terms.
|
||||||
* Index:: Index of concepts.
|
* Index:: Index of concepts.
|
||||||
|
|
||||||
--- The Detailed Node Listing ---
|
--- The Detailed Node Listing ---
|
||||||
|
|
||||||
Caveats
|
|
||||||
|
|
||||||
* Compile-time and install-time:: Faking out `make install'.
|
|
||||||
* Multiple stow directories:: Further segregating software.
|
|
||||||
* Conflicts:: When Stow can't stow.
|
|
||||||
|
|
||||||
Compile-time and install-time
|
Compile-time and install-time
|
||||||
|
|
||||||
* GNU Emacs::
|
* GNU Emacs::
|
||||||
* Other FSF software::
|
* Other FSF Software::
|
||||||
* Cygnus software::
|
* Cygnus Software::
|
||||||
* Perl and Perl 5 modules::
|
* Perl and Perl 5 Modules::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
|
@c ===========================================================================
|
||||||
@node Introduction, Terminology, Top, Top
|
@node Introduction, Terminology, Top, Top
|
||||||
@chapter Introduction
|
@chapter Introduction
|
||||||
|
|
||||||
|
@ -118,12 +126,23 @@ Stow is a tool for managing the installation of multiple software
|
||||||
packages in the same run-time directory tree. One historical difficulty
|
packages in the same run-time directory tree. One historical difficulty
|
||||||
of this task has been the need to administer, upgrade, install, and
|
of this task has been the need to administer, upgrade, install, and
|
||||||
remove files in independent packages without confusing them with other
|
remove files in independent packages without confusing them with other
|
||||||
files sharing the same filesystem 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}: @file{a2p.1}; @file{ctags.1};
|
19.22.} in @file{/usr/local/man/man1}:
|
||||||
@file{emacs.1}; @file{etags.1}; @file{h2ph.1}; @file{perl.1}; and
|
|
||||||
@file{s2p.1}. Now suppose it's time to uninstall Perl. Which man pages
|
@example
|
||||||
|
a2p.1
|
||||||
|
ctags.1
|
||||||
|
emacs.1
|
||||||
|
etags.1
|
||||||
|
h2ph.1
|
||||||
|
perl.1
|
||||||
|
s2p.1
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
Now suppose it's time to uninstall Perl. Which man pages
|
||||||
get removed? Obviously @file{perl.1} is one of them, but it should not
|
get removed? Obviously @file{perl.1} is one of them, but it should not
|
||||||
be the administrator's responsibility to memorize the ownership of
|
be the administrator's responsibility to memorize the ownership of
|
||||||
individual files by separate packages.
|
individual files by separate packages.
|
||||||
|
@ -150,13 +169,16 @@ to rebuild the target tree (e.g., @file{/usr/local}).
|
||||||
For information about the latest version of Stow, you can refer to
|
For information about the latest version of Stow, you can refer to
|
||||||
http://www.gnu.org/software/stow/.
|
http://www.gnu.org/software/stow/.
|
||||||
|
|
||||||
|
|
||||||
|
@c ===========================================================================
|
||||||
@node Terminology, Invoking Stow, Introduction, Top
|
@node Terminology, Invoking Stow, Introduction, Top
|
||||||
@chapter Terminology
|
@chapter Terminology
|
||||||
|
|
||||||
|
@indent
|
||||||
@cindex package
|
@cindex package
|
||||||
A @dfn{package} is a related collection of files and directories that
|
A @dfn{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
|
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
|
to be installed in a particular directory structure --- e.g., with
|
||||||
@file{bin}, @file{lib}, and @file{man} subdirectories.
|
@file{bin}, @file{lib}, and @file{man} subdirectories.
|
||||||
|
|
||||||
@cindex target directory
|
@cindex target directory
|
||||||
|
@ -185,10 +207,10 @@ Perl libraries; and a @file{man/man1} directory containing man pages.
|
||||||
@cindex package name
|
@cindex package name
|
||||||
A @dfn{package directory} is the root of a tree containing the
|
A @dfn{package directory} is the root of a tree containing the
|
||||||
installation image for a particular package. Each package directory
|
installation image for a particular package. Each package directory
|
||||||
must reside in a stow directory---e.g., the package directory
|
must reside in a stow directory --- e.g., the package directory
|
||||||
@file{/usr/local/stow/perl} must reside in the stow directory
|
@file{/usr/local/stow/perl} must reside in the stow directory
|
||||||
@file{/usr/local/stow}. The @dfn{name} of a package is the name of its
|
@file{/usr/local/stow}. The @dfn{name} of a package is the name of its
|
||||||
directory within the stow directory---e.g., @file{perl}.
|
directory within the stow directory --- e.g., @file{perl}.
|
||||||
|
|
||||||
Thus, the Perl executable might reside in
|
Thus, the Perl executable might reside in
|
||||||
@file{/usr/local/stow/perl/bin/perl}, where @file{/usr/local} is the
|
@file{/usr/local/stow/perl/bin/perl}, where @file{/usr/local} is the
|
||||||
|
@ -206,40 +228,30 @@ is, one not starting from @file{/}. The target of a relative symlink is
|
||||||
computed starting from the symlink's own directory. Stow only
|
computed starting from the symlink's own directory. Stow only
|
||||||
creates relative symlinks.
|
creates relative symlinks.
|
||||||
|
|
||||||
@node Invoking Stow, Installing packages, Terminology, Top
|
@c ===========================================================================
|
||||||
|
@node Invoking Stow, Installing Packages, Terminology, Top
|
||||||
@chapter Invoking Stow
|
@chapter Invoking Stow
|
||||||
|
|
||||||
The syntax of the @code{stow} command is:
|
The syntax of the @code{stow} command is:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
stow @var{[options]} @var{package @dots{}}
|
stow [@var{options}] [@var{action flag}] @var{package @dots{}}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
The stow directory is assumed to be the current directory, and the
|
@noindent
|
||||||
target directory is assumed to be the parent of the current directory
|
Each @var{package} is the name of a package (e.g., @samp{perl}) in the stow
|
||||||
(so it is typical to execute @code{stow} from the directory
|
directory that we wish to install into (or delete from) the target directory.
|
||||||
@file{/usr/local/stow}). Each @var{package} is the name of a package in
|
The default action is to install the given packages, although alternate actions
|
||||||
the stow directory (e.g., @samp{perl}). By default, they are installed
|
may be specified by preceding the package name(s) with an @var{action flag}.
|
||||||
into the target directory (but they can be deleted instead using
|
Unless otherwise specified, the stow directory is assumed to be
|
||||||
@samp{-D}).
|
the current directory and the target directory is assumed to be the parent of
|
||||||
|
the current directory, so it is typical to execute @code{stow} from the
|
||||||
|
directory @file{/usr/local/stow}.
|
||||||
|
|
||||||
The options are:
|
@noindent
|
||||||
|
The following options are supported:
|
||||||
|
|
||||||
@table @samp
|
@table @samp
|
||||||
@item -n
|
|
||||||
@itemx --no
|
|
||||||
Do not perform any operations that modify the filesystem; merely show
|
|
||||||
what would happen. Since no actual operations are performed,
|
|
||||||
@samp{stow -n} could report conflicts when none would actually take
|
|
||||||
place (@pxref{Conflicts}); but it won't fail to report conflicts that
|
|
||||||
@emph{would} take place.
|
|
||||||
|
|
||||||
@item -c
|
|
||||||
@itemx --conflicts
|
|
||||||
Do not exit immediately when a conflict is encountered. This option
|
|
||||||
implies @samp{-n}, and is used to search for all conflicts that might
|
|
||||||
arise from an actual Stow operation. As with @samp{-n}, however,
|
|
||||||
false conflicts might be reported (@pxref{Conflicts}).
|
|
||||||
|
|
||||||
@item -d @var{dir}
|
@item -d @var{dir}
|
||||||
@itemx --dir=@var{dir}
|
@itemx --dir=@var{dir}
|
||||||
|
@ -252,6 +264,61 @@ parent of @var{dir}.
|
||||||
Set the target directory to @var{dir} instead of the parent of the stow
|
Set the target directory to @var{dir} instead of the parent of the stow
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
|
@item --ignore='<regex>'
|
||||||
|
This (repeatable) option lets you suppress acting on files that match the
|
||||||
|
given perl regular expression. For example, using the options
|
||||||
|
|
||||||
|
@example
|
||||||
|
--ignore='~' --ignore='\.#.*'
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
will cause stow to ignore emacs and CVS backup files.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
@item --defer='<regex>'
|
||||||
|
This (repeatable) option lets you defer stowing a file matching the given
|
||||||
|
regular expression, if that file is already stowed by another package. For
|
||||||
|
example, the following options
|
||||||
|
|
||||||
|
@example
|
||||||
|
--defer='man' --defer='info'
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
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.
|
||||||
|
|
||||||
|
@item --override='<regex>'
|
||||||
|
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
|
||||||
|
|
||||||
|
@example
|
||||||
|
--override='man' --override='info'
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
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.
|
||||||
|
|
||||||
|
@item -n
|
||||||
|
@itemx --no
|
||||||
|
@itemx --simulate
|
||||||
|
Do not perform any operations that modify the file system; in combination with
|
||||||
|
@samp{-v} can be used to merely show what would happen.
|
||||||
|
|
||||||
@item -v
|
@item -v
|
||||||
@itemx --verbose[=@var{n}]
|
@itemx --verbose[=@var{n}]
|
||||||
Send verbose output to standard error describing what Stow is
|
Send verbose output to standard error describing what Stow is
|
||||||
|
@ -259,15 +326,14 @@ doing. Verbosity levels are 0, 1, 2, and 3; 0 is the default. Using
|
||||||
@samp{-v} or @samp{--verbose} increases the verbosity by one; using
|
@samp{-v} or @samp{--verbose} increases the verbosity by one; using
|
||||||
@samp{--verbose=@var{n}} sets it to @var{n}.
|
@samp{--verbose=@var{n}} sets it to @var{n}.
|
||||||
|
|
||||||
@item -D
|
@item -p
|
||||||
@itemx --delete
|
@itemx --compat
|
||||||
Delete packages from the target directory rather than installing them.
|
Scan the whole target tree when unstowing. By default, only directories
|
||||||
|
specified in the @dfn{installation image} are scanned during an unstow
|
||||||
@item -R
|
operation. Scanning the whole tree can be prohibitive if your target tree is
|
||||||
@itemx --restow
|
very large. This option restores the legacy behaviour; however, the
|
||||||
Restow packages (first unstow, then stow again). This is useful for
|
@samp{--badlinks} option may be a better way of ensuring that your
|
||||||
pruning obsolete symlinks from the target tree after updating the
|
installation does not have any dangling symlinks.
|
||||||
software in a package.
|
|
||||||
|
|
||||||
@item -V
|
@item -V
|
||||||
@itemx --version
|
@itemx --version
|
||||||
|
@ -278,8 +344,68 @@ Show Stow version number, and exit.
|
||||||
Show Stow command syntax, and exit.
|
Show Stow command syntax, and exit.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Installing packages, Deleting packages, Invoking Stow, Top
|
The following @var{action flags} are supported:
|
||||||
@chapter Installing packages
|
|
||||||
|
@table @samp
|
||||||
|
@item -D
|
||||||
|
@itemx --delete
|
||||||
|
Delete (unstow) the package name(s) that follow this option from the @dfn{target
|
||||||
|
directory}. This option may be repeated any number of times.
|
||||||
|
|
||||||
|
@item -R
|
||||||
|
@itemx --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.
|
||||||
|
|
||||||
|
@item -S
|
||||||
|
@item --stow
|
||||||
|
explictly stow the package name(s) that follow this option. May be omitted if
|
||||||
|
you are not using the @samp{-D} or @samp{-R} options in the same invocation.
|
||||||
|
See @xref{Mixing Operations}, for details of when you might like to use this
|
||||||
|
feature. This option may be repeated any number of times.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
The following options are useful for cleaning up your target tree:
|
||||||
|
|
||||||
|
@table @samp
|
||||||
|
@item -b
|
||||||
|
@itemx --badlinks
|
||||||
|
Checks target directory for bogus symbolic links. That is, links that point to
|
||||||
|
non-existent files.
|
||||||
|
|
||||||
|
@item -a
|
||||||
|
@itemx --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 @file{.stow} file.
|
||||||
|
|
||||||
|
@item -l
|
||||||
|
@itemx --list
|
||||||
|
Will display the target package for every symbolic link in the stow target
|
||||||
|
directory.
|
||||||
|
The following options are deprecated:
|
||||||
|
@end table
|
||||||
|
|
||||||
|
The following options are deprecated as of Stow Version 2:
|
||||||
|
@table @samp
|
||||||
|
@item -c
|
||||||
|
@itemx --conflicts
|
||||||
|
Print any conflicts that are encountered. This option
|
||||||
|
implies @samp{-n}, and is used to search for all conflicts that might
|
||||||
|
arise from an actual Stow operation.
|
||||||
|
|
||||||
|
This option is deprecated as conflicts are now printed by default and no
|
||||||
|
operations will be performed if any conflicts are detected.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
@ref{Resource Files} for a way to set default values for any of these options
|
||||||
|
|
||||||
|
|
||||||
|
@c ===========================================================================
|
||||||
|
@node Installing Packages, Deleting Packages, Invoking Stow, Top
|
||||||
|
@chapter Installing Packages
|
||||||
|
|
||||||
@cindex installation
|
@cindex installation
|
||||||
The default action of Stow is to install a package. This means creating
|
The default action of Stow is to install a package. This means creating
|
||||||
|
@ -326,11 +452,12 @@ descends as far as necessary into the target tree when it can create a
|
||||||
tree-folding symlink.
|
tree-folding symlink.
|
||||||
|
|
||||||
@cindex splitting open folded trees
|
@cindex splitting open folded 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} a
|
its installation image. This operation is called @dfn{splitting open} or
|
||||||
folded tree. It involves removing the original symlink from the target
|
@dfn{unfolding} a folded tree. It involves removing the original symlink from
|
||||||
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
|
||||||
after installing Perl into an empty @file{/usr/local}, we wish to
|
after installing Perl into an empty @file{/usr/local}, we wish to
|
||||||
|
@ -350,19 +477,22 @@ directory @file{/usr/local/bin} is created; links are made from
|
||||||
When splitting open a folded tree, Stow makes sure that the
|
When splitting open a folded tree, Stow makes sure that the
|
||||||
symlink it is about to remove points inside a valid package in the
|
symlink it is about to remove points inside a valid package in the
|
||||||
current stow directory. @emph{Stow will never delete anything
|
current stow directory. @emph{Stow will never delete anything
|
||||||
that it doesn't own}. Stow @dfn{owns} everything living in the
|
that it doesn't own}. Stow ``owns'' everything living in the
|
||||||
target tree that points into a package in the stow directory. Anything
|
target tree that points into a package in the stow directory. Anything
|
||||||
Stow owns, it can recompute if lost. Note that by this
|
Stow owns, it can recompute if lost: symlinks that point into a package in
|
||||||
definition, Stow doesn't ``own'' anything @emph{in} the stow
|
the stow directory, or directories that only contain sysmlinks that stow
|
||||||
directory or in any of the packages.
|
``owns''. Note that by this definition, Stow doesn't ``own'' anything
|
||||||
|
@emph{in} the stow directory or in any of the packages.
|
||||||
|
|
||||||
@cindex conflict
|
@cindex conflict
|
||||||
If Stow needs to create a directory or a symlink in the target
|
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
|
tree and it cannot because that name is already in use and is not owned
|
||||||
by Stow, then a conflict has arisen. @xref{Conflicts}.
|
by Stow, then a @dfn{conflict} has arisen. @xref{Conflicts}.
|
||||||
|
|
||||||
@node Deleting packages, Caveats, Installing packages, Top
|
|
||||||
@chapter Deleting packages
|
@c ===========================================================================
|
||||||
|
@node Deleting Packages, Conflicts, Installing Packages, Top
|
||||||
|
@chapter Deleting Packages
|
||||||
|
|
||||||
@cindex deletion
|
@cindex deletion
|
||||||
When the @samp{-D} option is given, the action of Stow is to
|
When the @samp{-D} option is given, the action of Stow is to
|
||||||
|
@ -371,32 +501,187 @@ delete anything it doesn't ``own''. Deleting a package does @emph{not}
|
||||||
mean removing it from the stow directory or discarding the package
|
mean removing it from the stow directory or discarding the package
|
||||||
tree.
|
tree.
|
||||||
|
|
||||||
To delete a package, Stow recursively scans the target tree,
|
To delete a package, Stow recursively scans the target tree, skipping over any
|
||||||
skipping over the stow directory (since that is usually a subdirectory
|
directory that is not included in the installation image.@footnote{This
|
||||||
of the target tree) and any other stow directories it encounters
|
approach was introduced in version 2 of GNU Stow. Previously, the whole
|
||||||
(@pxref{Multiple stow directories}). Any symlink it finds that points
|
target tree was scanned and stow directories were explicitly omitted. This
|
||||||
into the package being deleted is removed. Any directory that
|
became problematic when dealing with very large installations. The only
|
||||||
contained only symlinks to the package being deleted is removed. Any
|
situation where this is useful is if you accidentally delete a directory in
|
||||||
directory that, after removing symlinks and empty subdirectories,
|
the package tree, leaving you with a whole bunch of dangling links. Note that
|
||||||
contains only symlinks to a single other package, is considered to be a
|
you can enable the old approach with the @samp{-p} option. Alternatively, you can
|
||||||
previously ``folded'' tree that was ``split open.'' Stow will
|
use the @samp{--badlinks} option get stow to search for dangling links in your target tree and remove the offenders manually.}
|
||||||
re-fold the tree by removing the symlinks to the surviving package,
|
For example, if the target directory is @file{/usr/local} and the
|
||||||
|
installation image for the package being deleted has only a @file{bin}
|
||||||
|
directory and a @file{man} directory at the top level, then we only scan
|
||||||
|
@file{/usr/local/bin} and @file{/usr/local/bin/man}, and not
|
||||||
|
@file{/usr/local/lib} or @file{/usr/local/share}, or for that matter
|
||||||
|
@file{/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. 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
|
removing the directory, then linking the directory back to the surviving
|
||||||
package.
|
package.
|
||||||
|
|
||||||
@node Caveats, Bootstrapping, Deleting packages, Top
|
|
||||||
@chapter Caveats
|
|
||||||
|
|
||||||
This chapter describes the common problems that arise with Stow.
|
@c ===========================================================================
|
||||||
|
@node Conflicts, Deferred Operation, Deleting Packages, Top
|
||||||
|
@section Conflicts
|
||||||
|
|
||||||
@menu
|
If, during installation, a file or symlink exists in the target tree and
|
||||||
* Compile-time and install-time:: Faking out `make install'.
|
has the same name as something Stow needs to create, and if the
|
||||||
* Multiple stow directories:: Further segregating software.
|
existing name is not a folded tree that can be split open, then a
|
||||||
* Conflicts:: When Stow can't stow.
|
@dfn{conflict} has arisen. A conflict also occurs if a directory exists
|
||||||
@end menu
|
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.)
|
||||||
|
|
||||||
@node Compile-time and install-time, Multiple stow directories, Caveats, Caveats
|
A conflict causes Stow to exit immediately and print a warning
|
||||||
@section Compile-time and install-time
|
(unless @samp{-c} is given), even if that means aborting an installation
|
||||||
|
in mid-package.
|
||||||
|
|
||||||
|
@cindex false conflict
|
||||||
|
When running Stow with the @samp{-n} or @samp{-c} options, no actual
|
||||||
|
filesystem-modifying operations take place. Thus if a folded tree would
|
||||||
|
have been split open, but instead was left in place because @samp{-n} or
|
||||||
|
@samp{-c} was used, then Stow will report a @dfn{false conflict}, since
|
||||||
|
the directory that Stow was expecting to populate has remained an
|
||||||
|
un-populatable symlink.
|
||||||
|
|
||||||
|
@c ===========================================================================
|
||||||
|
@node Deferred Operation, Mixing Operations, Conflicts, Top
|
||||||
|
@chapter Deferred Operation
|
||||||
|
|
||||||
|
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 in to account all of
|
||||||
|
these operations.
|
||||||
|
|
||||||
|
Accidentally stowing a package that will result in a conflict
|
||||||
|
|
||||||
|
@c ===========================================================================
|
||||||
|
@node Mixing Operations, Multiple Stow Directories, Deferred Operation, Top
|
||||||
|
@chapter 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:
|
||||||
|
|
||||||
|
@example
|
||||||
|
stow -D emacs-21.3 -S emacs-21.4a
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
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
|
||||||
|
@pxref{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,
|
||||||
|
|
||||||
|
@example
|
||||||
|
stow -S pkg1 pkg2 -D pkg3 pkg4 -S pkg5 -R pkg6
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
will unstow pkg3, pkg4 and pkg6, then stow pkg1, pkg2, pkg5 and pkg6.
|
||||||
|
|
||||||
|
@c ===========================================================================
|
||||||
|
@node Multiple Stow Directories, Target Maintenance, Mixing Operations, Top
|
||||||
|
@chapter 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 @file{.stow}
|
||||||
|
in each stow directory. The presence of @file{/usr/local/foo/.stow}
|
||||||
|
informs Stow that, though @file{foo} is not the current stow
|
||||||
|
directory, and though it is a subdirectory of the target directory,
|
||||||
|
nevertheless it is @emph{a} stow directory and as such Stow
|
||||||
|
doesn't ``own'' anything in it (@pxref{Installing Packages}). This will
|
||||||
|
protect the contents of @file{foo} from a @samp{stow -D}, for instance.
|
||||||
|
|
||||||
|
XXX is this still true? XXX
|
||||||
|
|
||||||
|
When multiple stow directories share a target tree, the effectiveness
|
||||||
|
of Stow is reduced. If a tree-folding symlink is encountered and
|
||||||
|
needs to be split open during an installation, but the symlink points
|
||||||
|
into the wrong stow directory, Stow will report a conflict rather
|
||||||
|
than split open the tree (because it doesn't consider itself to own the
|
||||||
|
symlink, and thus cannot remove it).
|
||||||
|
|
||||||
|
|
||||||
|
@c ===========================================================================
|
||||||
|
@node Target Maintenance, Resource Files, Multiple Stow Directories, Top
|
||||||
|
@chapter Target Maintenance
|
||||||
|
|
||||||
|
From time to time you will need to clean up your target tree.
|
||||||
|
Stow includes three operational modes that performs checks that
|
||||||
|
would generally be too expensive to performed during normal stow
|
||||||
|
execution.
|
||||||
|
|
||||||
|
I've added a -l option to chkstow
|
||||||
|
which will give you a listing of every package name that has already been stowed
|
||||||
|
should be able to diff this with your directory listing
|
||||||
|
|
||||||
|
bash
|
||||||
|
cd build/scripts
|
||||||
|
diff <(../bin/chkstow -l) <(ls -1)
|
||||||
|
|
||||||
|
|
||||||
|
@c ===========================================================================
|
||||||
|
@node Resource Files, Compile-time vs Install-time, Target Maintenance, Top
|
||||||
|
@chapter 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 there
|
||||||
|
`~/.stowrc' file:
|
||||||
|
|
||||||
|
@example
|
||||||
|
--dir=/usr/local/stow2
|
||||||
|
--target=/usr/local
|
||||||
|
--ignore='~'
|
||||||
|
--ignore='^CVS'
|
||||||
|
@end example
|
||||||
|
|
||||||
|
so that the `stow' command will default to operating on the @file{/usr/local/stow2}
|
||||||
|
directory, with @file{/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':
|
||||||
|
|
||||||
|
@example
|
||||||
|
--dir=/usr/local/stow/perl-extras
|
||||||
|
--target=/usr/local
|
||||||
|
--override=bin
|
||||||
|
--override=man
|
||||||
|
--ignore='perllocal\.pod'
|
||||||
|
--ignore='\.packlist'
|
||||||
|
--ignore='\.bs'
|
||||||
|
@end example
|
||||||
|
|
||||||
|
so that the when your are in the @file{/usr/local/stow/perl-extras} directory,
|
||||||
|
`stow' will regard any subdirectories as stow packages, with @file{/usr/local}
|
||||||
|
as the target (rather than the immediate parent directoy
|
||||||
|
@file{/usr/local/stow}), overriding any pre-existing links to bin files or man
|
||||||
|
pages, and ignoring some cruft that gets installed by default.
|
||||||
|
|
||||||
|
|
||||||
|
@c ===========================================================================
|
||||||
|
@node Compile-time vs Install-time, Bootstrapping, Resource Files, Top
|
||||||
|
@chapter Compile-time vs Install-time
|
||||||
|
|
||||||
Software whose installation is managed with Stow needs to be installed
|
Software whose installation is managed with Stow needs to be installed
|
||||||
in one place (the package directory, e.g. @file{/usr/local/stow/perl})
|
in one place (the package directory, e.g. @file{/usr/local/stow/perl})
|
||||||
|
@ -419,11 +704,11 @@ must place it in the stow tree.
|
||||||
|
|
||||||
Some software packages allow you to specify, at compile-time, separate
|
Some software packages allow you to specify, at compile-time, separate
|
||||||
locations for installation and for run-time. Perl is one such package;
|
locations for installation and for run-time. Perl is one such package;
|
||||||
see @ref{Perl and Perl 5 modules}. Others allow you to compile the
|
@xref{Perl and Perl 5 Modules}. Others allow you to compile the
|
||||||
package, then give a different destination in the @samp{make install}
|
package, then give a different destination in the @samp{make install}
|
||||||
step without causing the binaries or other files to get rebuilt. Most
|
step without causing the binaries or other files to get rebuilt. Most
|
||||||
GNU software falls into this category; Emacs is a notable exception.
|
GNU software falls into this category; Emacs is a notable exception.
|
||||||
See @ref{GNU Emacs}, and @ref{Other FSF software}.
|
See @ref{GNU Emacs}, and @ref{Other FSF Software}.
|
||||||
|
|
||||||
Still other software packages cannot abide the idea of separate
|
Still other software packages cannot abide the idea of separate
|
||||||
installation and run-time locations at all. If you try to @samp{make
|
installation and run-time locations at all. If you try to @samp{make
|
||||||
|
@ -464,24 +749,25 @@ done
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
Note, that's ``should be able to,'' not ``can.'' Be sure to modulate
|
Note, that's ``should be able to,'' not ``can.'' Be sure to modulate
|
||||||
these guidelines with plenty of your own intelligence.)
|
these guidelines with plenty of your own intelligence.
|
||||||
|
|
||||||
The details of stowing some specific packages are described in the
|
The details of stowing some specific packages are described in the
|
||||||
following sections.
|
following sections.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* GNU Emacs::
|
* GNU Emacs::
|
||||||
* Other FSF software::
|
* Other FSF Software::
|
||||||
* Cygnus software::
|
* Cygnus Software::
|
||||||
* Perl and Perl 5 modules::
|
* Perl and Perl 5 Modules::
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node GNU Emacs, Other FSF software, Compile-time and install-time, Compile-time and install-time
|
@c ---------------------------------------------------------------------------
|
||||||
@subsection GNU Emacs
|
@node GNU Emacs, Other FSF Software, Compile-time vs Install-time, Compile-time vs Install-time
|
||||||
|
@section GNU Emacs
|
||||||
|
|
||||||
Although the Free Software Foundation has many enlightened practices
|
Although the Free Software Foundation has many enlightened practices
|
||||||
regarding Makefiles and software installation (see @pxref{Other FSF
|
regarding Makefiles and software installation (see @pxref{Other FSF
|
||||||
software}), Emacs, its flagship program, doesn't quite follow the
|
Software}), Emacs, its flagship program, doesn't quite follow the
|
||||||
rules. In particular, most GNU software allows you to write:
|
rules. In particular, most GNU software allows you to write:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
|
@ -508,8 +794,9 @@ make
|
||||||
make do-install prefix=/usr/local/stow/emacs
|
make do-install prefix=/usr/local/stow/emacs
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@node Other FSF software, Cygnus software, GNU Emacs, Compile-time and install-time
|
@c ---------------------------------------------------------------------------
|
||||||
@subsection Other FSF software
|
@node Other FSF Software, Cygnus Software, GNU Emacs, Compile-time vs Install-time
|
||||||
|
@section Other FSF Software
|
||||||
|
|
||||||
The Free Software Foundation, the organization behind the GNU project,
|
The Free Software Foundation, the organization behind the GNU project,
|
||||||
has been unifying the build procedure for its tools for some time.
|
has been unifying the build procedure for its tools for some time.
|
||||||
|
@ -528,8 +815,9 @@ such that providing an option to @samp{configure} can allow @samp{make}
|
||||||
and @samp{make install} steps to work correctly without needing to
|
and @samp{make install} steps to work correctly without needing to
|
||||||
``fool'' the build process.
|
``fool'' the build process.
|
||||||
|
|
||||||
@node Cygnus software, Perl and Perl 5 modules, Other FSF software, Compile-time and install-time
|
@c ---------------------------------------------------------------------------
|
||||||
@subsection Cygnus software
|
@node Cygnus Software, Perl and Perl 5 Modules, Other FSF Software, Compile-time vs Install-time
|
||||||
|
@section Cygnus Software
|
||||||
|
|
||||||
Cygnus is a commercial supplier and supporter of GNU software. It has
|
Cygnus is a commercial supplier and supporter of GNU software. It has
|
||||||
also written several of its own packages, released under the terms of
|
also written several of its own packages, released under the terms of
|
||||||
|
@ -556,8 +844,9 @@ prefix=@r{@dots{}}}, but be ready to interrupt it if you detect that it
|
||||||
is recompiling files. Usually it will work just fine; otherwise,
|
is recompiling files. Usually it will work just fine; otherwise,
|
||||||
install manually.
|
install manually.
|
||||||
|
|
||||||
@node Perl and Perl 5 modules, , Cygnus software, Compile-time and install-time
|
@c ---------------------------------------------------------------------------
|
||||||
@subsection Perl and Perl 5 modules
|
@node Perl and Perl 5 Modules, , Cygnus Software, Compile-time vs Install-time
|
||||||
|
@section Perl and Perl 5 Modules
|
||||||
|
|
||||||
Perl 4.036 allows you to specify different locations for installation
|
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
|
and for run-time. It is the only widely-used package in this author's
|
||||||
|
@ -657,51 +946,9 @@ find cpan.* \( -name .exists -o -name perllocal.pod \) -print | \
|
||||||
xargs rm
|
xargs rm
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@node Multiple stow directories, Conflicts, Compile-time and install-time, Caveats
|
|
||||||
@section Multiple stow directories
|
|
||||||
|
|
||||||
If there are two or more system administrators who wish to maintain
|
@c ---------------------------------------------------------------------------
|
||||||
software separately, or if there is any other reason to want two or more
|
@node Bootstrapping, Reporting Bugs, Compile-time vs Install-time, Top
|
||||||
stow directories, it can be done by creating a file named @file{.stow}
|
|
||||||
in each stow directory. The presence of @file{/usr/local/foo/.stow}
|
|
||||||
informs Stow that, though @file{foo} is not the current stow
|
|
||||||
directory, and though it is a subdirectory of the target directory,
|
|
||||||
nevertheless it is @emph{a} stow directory and as such Stow
|
|
||||||
doesn't ``own'' anything in it (@pxref{Installing packages}). This will
|
|
||||||
protect the contents of @file{foo} from a @samp{stow -D}, for instance.
|
|
||||||
|
|
||||||
When multiple stow directories share a target tree, the effectiveness
|
|
||||||
of Stow is reduced. If a tree-folding symlink is encountered and
|
|
||||||
needs to be split open during an installation, but the symlink points
|
|
||||||
into the wrong stow directory, Stow will report a conflict rather
|
|
||||||
than split open the tree (because it doesn't consider itself to own the
|
|
||||||
symlink, and thus cannot remove it).
|
|
||||||
|
|
||||||
@node Conflicts, , Multiple stow directories, Caveats
|
|
||||||
@section 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
|
|
||||||
@dfn{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.)
|
|
||||||
|
|
||||||
A conflict causes Stow to exit immediately and print a warning
|
|
||||||
(unless @samp{-c} is given), even if that means aborting an installation
|
|
||||||
in mid-package.
|
|
||||||
|
|
||||||
@cindex false conflict
|
|
||||||
When running Stow with the @samp{-n} or @samp{-c} options, no actual
|
|
||||||
filesystem-modifying operations take place. Thus if a folded tree would
|
|
||||||
have been split open, but instead was left in place because @samp{-n} or
|
|
||||||
@samp{-c} was used, then Stow will report a @dfn{false conflict}, since
|
|
||||||
the directory that Stow was expecting to populate has remained an
|
|
||||||
unpopulatable symlink.
|
|
||||||
|
|
||||||
@node Bootstrapping, Reporting bugs, Caveats, Top
|
|
||||||
@chapter Bootstrapping
|
@chapter Bootstrapping
|
||||||
|
|
||||||
Suppose you have a stow directory all set up and ready to go:
|
Suppose you have a stow directory all set up and ready to go:
|
||||||
|
@ -732,11 +979,12 @@ cd /usr/local/stow
|
||||||
perl/bin/perl stow/bin/stow -vv *
|
perl/bin/perl stow/bin/stow -vv *
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@node Reporting bugs, Known bugs, Bootstrapping, Top
|
@c ===========================================================================
|
||||||
@chapter Reporting bugs
|
@node Reporting Bugs, Known Bugs, Bootstrapping, Top
|
||||||
|
@chapter Reporting Bugs
|
||||||
|
|
||||||
Please send bug reports to the author, Bob Glickstein, by electronic
|
Please send bug reports to the current maintaner, Kal Hodgson, by electronic
|
||||||
mail. The address to use is @samp{<bobg+stow@@zanshin.com>}. Please
|
mail. The address to use is @samp{<bug-stow@@gnu.org>}. Please
|
||||||
include:
|
include:
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
|
@ -761,19 +1009,23 @@ 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
|
||||||
|
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}, and @ref{Caveats}, to see whether you're encountering
|
@ref{Known Bugs}, to see whether you're encountering
|
||||||
something that doesn't need reporting, such as a ``false conflict''
|
something that doesn't need reporting.
|
||||||
(@pxref{Conflicts}).
|
(@pxref{Conflicts}).
|
||||||
|
|
||||||
@node Known bugs, GNU General Public License, Reporting bugs, Top
|
@c ===========================================================================
|
||||||
@chapter Known bugs
|
@node Known Bugs, GNU General Public License, Reporting Bugs, Top
|
||||||
|
@chapter Known Bugs
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
When using multiple stow directories (@pxref{Multiple stow
|
When using multiple stow directories (@pxref{Multiple Stow
|
||||||
directories}), Stow fails to ``split open'' tree-folding symlinks
|
Directories}), Stow fails to ``split open'' tree-folding symlinks
|
||||||
(@pxref{Installing packages}) that point into a stow directory which is
|
(@pxref{Installing Packages}) that point into a stow directory which is
|
||||||
not the one in use by the current Stow command. Before failing, it
|
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
|
should search the target of the link to see whether any element of the
|
||||||
path contains a @file{.stow} file. If it finds one, it can ``learn''
|
path contains a @file{.stow} file. If it finds one, it can ``learn''
|
||||||
|
@ -781,7 +1033,8 @@ about the cooperating stow directory to short-circuit the @file{.stow}
|
||||||
search the next time it encounters a tree-folding symlink.
|
search the next time it encounters a tree-folding symlink.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
@node GNU General Public License, Index, Known bugs, Top
|
@c ===========================================================================
|
||||||
|
@node GNU General Public License, Index, Known Bugs, Top
|
||||||
@unnumbered GNU General Public License
|
@unnumbered GNU General Public License
|
||||||
|
|
||||||
@center Version 2, June 1991
|
@center Version 2, June 1991
|
||||||
|
|
115
t/chkstow.t
Executable file
115
t/chkstow.t
Executable file
|
@ -0,0 +1,115 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing cleanup_invalid_links()
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN {
|
||||||
|
use lib qw(.);
|
||||||
|
require "t/util.pm";
|
||||||
|
require "chkstow";
|
||||||
|
}
|
||||||
|
|
||||||
|
use Test::More tests => 7;
|
||||||
|
use Test::Output;
|
||||||
|
use English qw(-no_match_vars);
|
||||||
|
|
||||||
|
### setup
|
||||||
|
eval { remove_dir('t/target'); };
|
||||||
|
make_dir('t/target');
|
||||||
|
|
||||||
|
chdir 't/target';
|
||||||
|
|
||||||
|
# setup stow directory
|
||||||
|
make_dir('stow');
|
||||||
|
make_file('stow/.stow');
|
||||||
|
# perl
|
||||||
|
make_dir('stow/perl/bin');
|
||||||
|
make_file('stow/perl/bin/perl');
|
||||||
|
make_file('stow/perl/bin/a2p');
|
||||||
|
make_dir('stow/perl/info');
|
||||||
|
make_file('stow/perl/info/perl');
|
||||||
|
make_dir('stow/perl/lib/perl');
|
||||||
|
make_dir('stow/perl/man/man1');
|
||||||
|
make_file('stow/perl/man/man1/perl.1');
|
||||||
|
# emacs
|
||||||
|
make_dir('stow/emacs/bin');
|
||||||
|
make_file('stow/emacs/bin/emacs');
|
||||||
|
make_file('stow/emacs/bin/etags');
|
||||||
|
make_dir('stow/emacs/info');
|
||||||
|
make_file('stow/emacs/info/emacs');
|
||||||
|
make_dir('stow/emacs/libexec/emacs');
|
||||||
|
make_dir('stow/emacs/man/man1');
|
||||||
|
make_file('stow/emacs/man/man1/emacs.1');
|
||||||
|
|
||||||
|
#setup target directory
|
||||||
|
make_dir('bin');
|
||||||
|
make_link('bin/a2p', '../stow/perl/bin/a2p');
|
||||||
|
make_link('bin/emacs', '../stow/emacs/bin/emacs');
|
||||||
|
make_link('bin/etags', '../stow/emacs/bin/etags');
|
||||||
|
make_link('bin/perl', '../stow/perl/bin/perl');
|
||||||
|
|
||||||
|
make_dir('info');
|
||||||
|
make_link('info/emacs', '../stow/emacs/info/emacs');
|
||||||
|
make_link('info/perl', '../stow/perl/info/perl');
|
||||||
|
|
||||||
|
make_link('lib', 'stow/perl/lib');
|
||||||
|
make_link('libexec', 'stow/emacs/libexec');
|
||||||
|
|
||||||
|
make_dir('man');
|
||||||
|
make_dir('man/man1');
|
||||||
|
make_link('man/man1/emacs', '../../stow/emacs/man/man1/emacs.1');
|
||||||
|
make_link('man/man1/perl', '../../stow/perl/man/man1/perl.1');
|
||||||
|
|
||||||
|
sub run_chkstow() {
|
||||||
|
process_options();
|
||||||
|
check_stow();
|
||||||
|
}
|
||||||
|
|
||||||
|
local @ARGV = ('-t', '.', '-b',);
|
||||||
|
stderr_like(
|
||||||
|
\&run_chkstow,
|
||||||
|
qr{\Askipping .*stow.*\z}xms,
|
||||||
|
"Skip directories containing .stow");
|
||||||
|
|
||||||
|
# squelch warn so that check_stow doesn't carp about skipping .stow all the time
|
||||||
|
$SIG{'__WARN__'} = sub { };
|
||||||
|
|
||||||
|
@ARGV = ('-t', '.', '-l',);
|
||||||
|
stdout_like(
|
||||||
|
\&run_chkstow,
|
||||||
|
qr{emacs$perl$stow}xms,
|
||||||
|
"List packages");
|
||||||
|
|
||||||
|
@ARGV = ('-t', '.', '-b',);
|
||||||
|
stdout_like(
|
||||||
|
\&run_chkstow,
|
||||||
|
qr{\A\z}xms,
|
||||||
|
"No bogus links exist");
|
||||||
|
|
||||||
|
@ARGV = ('-t', '.', '-a',);
|
||||||
|
stdout_like(
|
||||||
|
\&run_chkstow,
|
||||||
|
qr{\A\z}xms,
|
||||||
|
"No aliens exist");
|
||||||
|
|
||||||
|
# Create an alien
|
||||||
|
make_file('bin/alien');
|
||||||
|
@ARGV = ('-t', '.', '-a',);
|
||||||
|
stdout_like(
|
||||||
|
\&run_chkstow,
|
||||||
|
qr{Unstowed\ file:\ ./bin/alien}xms,
|
||||||
|
"Aliens exist");
|
||||||
|
|
||||||
|
make_link('bin/link', 'ireallyhopethisfiledoesn/t.exist');
|
||||||
|
@ARGV = ('-t', '.', '-b',);
|
||||||
|
stdout_like(
|
||||||
|
\&run_chkstow,
|
||||||
|
qr{Bogus\ link:\ ./bin/link}xms,
|
||||||
|
"Bogus links exist");
|
||||||
|
|
||||||
|
@ARGV = ('-b',);
|
||||||
|
process_options();
|
||||||
|
ok($Target == q{/usr/local},
|
||||||
|
"Default target is /usr/local/");
|
92
t/cleanup_invalid_links.t
Normal file
92
t/cleanup_invalid_links.t
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing cleanup_invalid_links()
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(.); require "t/util.pm"; require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 3;
|
||||||
|
use English qw(-no_match_vars);
|
||||||
|
|
||||||
|
# local utility
|
||||||
|
sub reset_state {
|
||||||
|
@Tasks = ();
|
||||||
|
@Conflicts = ();
|
||||||
|
%Link_Task_For = ();
|
||||||
|
%Dir_Task_For = ();
|
||||||
|
%Options = ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
### setup
|
||||||
|
eval { remove_dir('t/target'); };
|
||||||
|
eval { remove_dir('t/stow'); };
|
||||||
|
make_dir('t/target');
|
||||||
|
make_dir('t/stow');
|
||||||
|
|
||||||
|
chdir 't/target';
|
||||||
|
$Stow_Path= '../stow';
|
||||||
|
|
||||||
|
# Note that each of the following tests use a distinct set of files
|
||||||
|
|
||||||
|
#
|
||||||
|
# nothing to clean in a simple tree
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 1;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg1/bin1');
|
||||||
|
make_file('../stow/pkg1/bin1/file1');
|
||||||
|
make_link('bin1','../stow/pkg1/bin1');
|
||||||
|
|
||||||
|
cleanup_invalid_links('./');
|
||||||
|
is(
|
||||||
|
scalar @Tasks, 0
|
||||||
|
=> 'nothing to clean'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# cleanup a bad link in a simple tree
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin2');
|
||||||
|
make_dir('../stow/pkg2/bin2');
|
||||||
|
make_file('../stow/pkg2/bin2/file2a');
|
||||||
|
make_link('bin2/file2a','../../stow/pkg2/bin2/file2a');
|
||||||
|
make_link('bin2/file2b','../../stow/pkg2/bin2/file2b');
|
||||||
|
|
||||||
|
cleanup_invalid_links('bin2');
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
scalar @Tasks == 1 &&
|
||||||
|
$Link_Task_For{'bin2/file2b'}->{'action'} eq 'remove'
|
||||||
|
=> 'cleanup a bad link'
|
||||||
|
);
|
||||||
|
|
||||||
|
#use Data::Dumper;
|
||||||
|
#print Dumper(\@Tasks,\%Link_Task_For,\%Dir_Task_For);
|
||||||
|
|
||||||
|
#
|
||||||
|
# dont cleanup a bad link not owned by stow
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin3');
|
||||||
|
make_dir('../stow/pkg3/bin3');
|
||||||
|
make_file('../stow/pkg3/bin3/file3a');
|
||||||
|
make_link('bin3/file3a','../../stow/pkg3/bin3/file3a');
|
||||||
|
make_link('bin3/file3b','../../empty');
|
||||||
|
|
||||||
|
cleanup_invalid_links('bin3');
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
scalar @Tasks == 0
|
||||||
|
=> 'dont cleanup a bad link not owned by stow'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
22
t/defer.t
Normal file
22
t/defer.t
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing defer().
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(. ..); require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 4;
|
||||||
|
|
||||||
|
$Option{'defer'} = [ 'man' ];
|
||||||
|
ok(defer('man/man1/file.1') => 'simple success');
|
||||||
|
|
||||||
|
$Option{'defer'} = [ 'lib' ];
|
||||||
|
ok(!defer('man/man1/file.1') => 'simple failure');
|
||||||
|
|
||||||
|
$Option{'defer'} = [ 'lib', 'man', 'share' ];
|
||||||
|
ok(defer('man/man1/file.1') => 'complex success');
|
||||||
|
|
||||||
|
$Option{'defer'} = [ 'lib', 'man', 'share' ];
|
||||||
|
ok(!defer('bin/file') => 'complex failure');
|
204
t/examples.t
Normal file
204
t/examples.t
Normal file
|
@ -0,0 +1,204 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing examples from the documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(.); require "t/util.pm"; require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 4;
|
||||||
|
use English qw(-no_match_vars);
|
||||||
|
|
||||||
|
# local utility
|
||||||
|
sub reset_state {
|
||||||
|
@Tasks = ();
|
||||||
|
@Conflicts = ();
|
||||||
|
%Link_Task_For = ();
|
||||||
|
%Dir_Task_For = ();
|
||||||
|
%Options = ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
### setup
|
||||||
|
eval { remove_dir('t/target'); };
|
||||||
|
make_dir('t/target/stow');
|
||||||
|
|
||||||
|
chdir 't/target';
|
||||||
|
$Stow_Path= 'stow';
|
||||||
|
|
||||||
|
## set up some fake packages to stow
|
||||||
|
|
||||||
|
# perl
|
||||||
|
make_dir('stow/perl/bin');
|
||||||
|
make_file('stow/perl/bin/perl');
|
||||||
|
make_file('stow/perl/bin/a2p');
|
||||||
|
make_dir('stow/perl/info');
|
||||||
|
make_file('stow/perl/info/perl');
|
||||||
|
make_dir('stow/perl/lib/perl');
|
||||||
|
make_dir('stow/perl/man/man1');
|
||||||
|
make_file('stow/perl/man/man1/perl.1');
|
||||||
|
|
||||||
|
# emacs
|
||||||
|
make_dir('stow/emacs/bin');
|
||||||
|
make_file('stow/emacs/bin/emacs');
|
||||||
|
make_file('stow/emacs/bin/etags');
|
||||||
|
make_dir('stow/emacs/info');
|
||||||
|
make_file('stow/emacs/info/emacs');
|
||||||
|
make_dir('stow/emacs/libexec/emacs');
|
||||||
|
make_dir('stow/emacs/man/man1');
|
||||||
|
make_file('stow/emacs/man/man1/emacs.1');
|
||||||
|
|
||||||
|
#
|
||||||
|
# stow perl into an empty target
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('stow/perl/bin');
|
||||||
|
make_file('stow/perl/bin/perl');
|
||||||
|
make_file('stow/perl/bin/a2p');
|
||||||
|
make_dir('stow/perl/info');
|
||||||
|
make_dir('stow/perl/lib/perl');
|
||||||
|
make_dir('stow/perl/man/man1');
|
||||||
|
make_file('stow/perl/man/man1/perl.1');
|
||||||
|
|
||||||
|
stow_contents('stow/perl','./','stow/perl');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-l 'bin' && -l 'info' && -l 'lib' && -l 'man' &&
|
||||||
|
readlink('bin') eq 'stow/perl/bin' &&
|
||||||
|
readlink('info') eq 'stow/perl/info' &&
|
||||||
|
readlink('lib') eq 'stow/perl/lib' &&
|
||||||
|
readlink('man') eq 'stow/perl/man'
|
||||||
|
=> 'stow perl into an empty target'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# stow perl into a non-empty target
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
# clean up previous stow
|
||||||
|
remove_link('bin');
|
||||||
|
remove_link('info');
|
||||||
|
remove_link('lib');
|
||||||
|
remove_link('man');
|
||||||
|
|
||||||
|
make_dir('bin');
|
||||||
|
make_dir('lib');
|
||||||
|
make_dir('man/man1');
|
||||||
|
|
||||||
|
stow_contents('stow/perl','./','stow/perl');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-d 'bin' && -d 'lib' && -d 'man' && -d 'man/man1' &&
|
||||||
|
-l 'info' && -l 'bin/perl' && -l 'bin/a2p' &&
|
||||||
|
-l 'lib/perl' && -l 'man/man1/perl.1' &&
|
||||||
|
readlink('info') eq 'stow/perl/info' &&
|
||||||
|
readlink('bin/perl') eq '../stow/perl/bin/perl' &&
|
||||||
|
readlink('bin/a2p') eq '../stow/perl/bin/a2p' &&
|
||||||
|
readlink('lib/perl') eq '../stow/perl/lib/perl' &&
|
||||||
|
readlink('man/man1/perl.1') eq '../../stow/perl/man/man1/perl.1'
|
||||||
|
=> 'stow perl into a non-empty target'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Install perl into an empty target and then install emacs
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
# clean up previous stow
|
||||||
|
remove_link('info');
|
||||||
|
remove_dir('bin');
|
||||||
|
remove_dir('lib');
|
||||||
|
remove_dir('man');
|
||||||
|
|
||||||
|
stow_contents('stow/perl', './','stow/perl');
|
||||||
|
stow_contents('stow/emacs','./','stow/emacs');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-d 'bin' &&
|
||||||
|
-l 'bin/perl' &&
|
||||||
|
-l 'bin/emacs' &&
|
||||||
|
-l 'bin/a2p' &&
|
||||||
|
-l 'bin/etags' &&
|
||||||
|
readlink('bin/perl') eq '../stow/perl/bin/perl' &&
|
||||||
|
readlink('bin/a2p') eq '../stow/perl/bin/a2p' &&
|
||||||
|
readlink('bin/emacs') eq '../stow/emacs/bin/emacs' &&
|
||||||
|
readlink('bin/etags') eq '../stow/emacs/bin/etags' &&
|
||||||
|
|
||||||
|
-d 'info' &&
|
||||||
|
-l 'info/perl' &&
|
||||||
|
-l 'info/emacs' &&
|
||||||
|
readlink('info/perl') eq '../stow/perl/info/perl' &&
|
||||||
|
readlink('info/emacs') eq '../stow/emacs/info/emacs' &&
|
||||||
|
|
||||||
|
-d 'man' &&
|
||||||
|
-d 'man/man1' &&
|
||||||
|
-l 'man/man1/perl.1' &&
|
||||||
|
-l 'man/man1/emacs.1' &&
|
||||||
|
readlink('man/man1/perl.1') eq '../../stow/perl/man/man1/perl.1' &&
|
||||||
|
readlink('man/man1/emacs.1') eq '../../stow/emacs/man/man1/emacs.1' &&
|
||||||
|
|
||||||
|
-l 'lib' &&
|
||||||
|
-l 'libexec' &&
|
||||||
|
readlink('lib') eq 'stow/perl/lib' &&
|
||||||
|
readlink('libexec') eq 'stow/emacs/libexec' &&
|
||||||
|
1
|
||||||
|
=> 'stow perl into an empty target, then stow emacs'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG 1:
|
||||||
|
# 1. stowing a package with an empty directory
|
||||||
|
# 2. stow another package with the same directory but non empty
|
||||||
|
# 3. unstow the second package
|
||||||
|
# Q. the original empty directory should remain
|
||||||
|
# behaviour is the same as if the empty directory had nothing to do with stow
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('stow/pkg1a/bin1');
|
||||||
|
make_dir('stow/pkg1b/bin1');
|
||||||
|
make_file('stow/pkg1b/bin1/file1b');
|
||||||
|
|
||||||
|
stow_contents('stow/pkg1a', './', 'stow/pkg1a');
|
||||||
|
stow_contents('stow/pkg1b', './', 'stow/pkg1b');
|
||||||
|
unstow_contents('stow/pkg1b', './', 'stow/pkg1b');
|
||||||
|
process_tasks();
|
||||||
|
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-d 'bin1'
|
||||||
|
=> 'bug 1: stowing empty dirs'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG 2: split open tree-folding symlinks pointing inside different stow
|
||||||
|
# directories
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('stow2a/pkg2a/bin2');
|
||||||
|
make_file('stow2a/pkg2a/bin2/file2a');
|
||||||
|
make_file('stow2a/.stow');
|
||||||
|
make_dir('stow2b/pkg2b/bin2');
|
||||||
|
make_file('stow2b/pkg2b/bin2/file2b');
|
||||||
|
make_file('stow2b/.stow');
|
||||||
|
|
||||||
|
stow_contents('stow2a/pkg2a','./', 'stow2a/pkg2a');
|
||||||
|
stow_contents('stow2b/pkg2b','./', 'stow2b/pkg2b');
|
||||||
|
process_tasks();
|
||||||
|
|
||||||
|
## Finish this test
|
51
t/find_stowed_path.t
Normal file
51
t/find_stowed_path.t
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing find_stowed_path()
|
||||||
|
#
|
||||||
|
|
||||||
|
BEGIN { require "t/util.pm"; require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 5;
|
||||||
|
|
||||||
|
eval { remove_dir('t/target'); };
|
||||||
|
eval { remove_dir('t/stow'); };
|
||||||
|
make_dir('t/target');
|
||||||
|
make_dir('t/stow');
|
||||||
|
|
||||||
|
$Stow_Path = 't/stow';
|
||||||
|
is(
|
||||||
|
find_stowed_path('t/target/a/b/c', '../../../stow/a/b/c'),
|
||||||
|
't/stow/a/b/c',
|
||||||
|
=> 'from root'
|
||||||
|
);
|
||||||
|
|
||||||
|
$Stow_Path = '../stow';
|
||||||
|
is(
|
||||||
|
find_stowed_path('a/b/c','../../../stow/a/b/c'),
|
||||||
|
'../stow/a/b/c',
|
||||||
|
=> 'from target directory'
|
||||||
|
);
|
||||||
|
|
||||||
|
$Stow_Path = 't/target/stow';
|
||||||
|
|
||||||
|
is(
|
||||||
|
find_stowed_path('t/target/a/b/c', '../../stow/a/b/c'),
|
||||||
|
't/target/stow/a/b/c',
|
||||||
|
=> 'stow is subdir of target directory'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
find_stowed_path('t/target/a/b/c','../../empty'),
|
||||||
|
'',
|
||||||
|
=> 'target is not stowed'
|
||||||
|
);
|
||||||
|
|
||||||
|
make_dir('t/target/stow2');
|
||||||
|
make_file('t/target/stow2/.stow');
|
||||||
|
|
||||||
|
is(
|
||||||
|
find_stowed_path('t/target/a/b/c','../../stow2/a/b/c'),
|
||||||
|
't/target/stow2/a/b/c'
|
||||||
|
=> q(detect alternate stow directory)
|
||||||
|
);
|
74
t/foldable.t
Normal file
74
t/foldable.t
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing foldable()
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(.); require "t/util.pm"; require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 4;
|
||||||
|
use English qw(-no_match_vars);
|
||||||
|
|
||||||
|
### setup
|
||||||
|
# be very careful with these
|
||||||
|
eval { remove_dir('t/target'); };
|
||||||
|
eval { remove_dir('t/stow'); };
|
||||||
|
make_dir('t/target');
|
||||||
|
make_dir('t/stow');
|
||||||
|
|
||||||
|
chdir 't/target';
|
||||||
|
$Stow_Path= '../stow';
|
||||||
|
|
||||||
|
# Note that each of the following tests use a distinct set of files
|
||||||
|
|
||||||
|
#
|
||||||
|
# can fold a simple tree
|
||||||
|
#
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg1/bin1');
|
||||||
|
make_file('../stow/pkg1/bin1/file1');
|
||||||
|
make_dir('bin1');
|
||||||
|
make_link('bin1/file1','../../stow/pkg1/bin1/file1');
|
||||||
|
|
||||||
|
is( foldable('bin1'), '../stow/pkg1/bin1' => q(can fold a simple tree) );
|
||||||
|
|
||||||
|
#
|
||||||
|
# can't fold an empty directory
|
||||||
|
#
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg2/bin2');
|
||||||
|
make_file('../stow/pkg2/bin2/file2');
|
||||||
|
make_dir('bin2');
|
||||||
|
|
||||||
|
is( foldable('bin2'), '' => q(can't fold an empty directory) );
|
||||||
|
|
||||||
|
#
|
||||||
|
# can't fold if dir contains a non-link
|
||||||
|
#
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg3/bin3');
|
||||||
|
make_file('../stow/pkg3/bin3/file3');
|
||||||
|
make_dir('bin3');
|
||||||
|
make_link('bin3/file3','../../stow/pkg3/bin3/file3');
|
||||||
|
make_file('bin3/non-link');
|
||||||
|
|
||||||
|
is( foldable('bin3'), '' => q(can't fold a dir containing non-links) );
|
||||||
|
|
||||||
|
#
|
||||||
|
# can't fold if links point to different directories
|
||||||
|
#
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin4');
|
||||||
|
make_dir('../stow/pkg4a/bin4');
|
||||||
|
make_file('../stow/pkg4a/bin4/file4a');
|
||||||
|
make_link('bin4/file4a','../../stow/pkg4a/bin4/file4a');
|
||||||
|
make_dir('../stow/pkg4b/bin4');
|
||||||
|
make_file('../stow/pkg4b/bin4/file4b');
|
||||||
|
make_link('bin4/file4b','../../stow/pkg4b/bin4/file4b');
|
||||||
|
|
||||||
|
is( foldable('bin4'), '' => q(can't fold if links point to different dirs) );
|
89
t/join_paths.t
Normal file
89
t/join_paths.t
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing join_paths();
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(. ..); require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 13;
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('a/b/c', 'd/e/f'),
|
||||||
|
'a/b/c/d/e/f',
|
||||||
|
=> 'simple'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('/a/b/c', '/d/e/f'),
|
||||||
|
'/a/b/c/d/e/f',
|
||||||
|
=> 'leading /'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('/a/b/c/', '/d/e/f/'),
|
||||||
|
'/a/b/c/d/e/f',
|
||||||
|
=> 'trailing /'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('///a/b///c//', '/d///////e/f'),
|
||||||
|
'/a/b/c/d/e/f',
|
||||||
|
=> 'mltiple /\'s'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('', 'a/b/c'),
|
||||||
|
'a/b/c',
|
||||||
|
=> 'first empty'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('a/b/c', ''),
|
||||||
|
'a/b/c',
|
||||||
|
=> 'second empty'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('/', 'a/b/c'),
|
||||||
|
'/a/b/c',
|
||||||
|
=> 'first is /'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('a/b/c', '/'),
|
||||||
|
'a/b/c',
|
||||||
|
=> 'second is /'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('///a/b///c//', '/d///////e/f'),
|
||||||
|
'/a/b/c/d/e/f',
|
||||||
|
=> 'multiple /\'s'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('../a1/b1/../c1/', '/a2/../b2/e2'),
|
||||||
|
'../a1/c1/b2/e2',
|
||||||
|
=> 'simple deref ".."'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('../a1/b1/../c1/d1/e1', '../a2/../b2/c2/d2/../e2'),
|
||||||
|
'../a1/c1/d1/b2/c2/e2',
|
||||||
|
=> 'complex deref ".."'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('../a1/../../c1', 'a2/../../'),
|
||||||
|
'../..',
|
||||||
|
=> 'too many ".."'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
join_paths('./a1', '../../a2'),
|
||||||
|
'../a2',
|
||||||
|
=> 'drop any "./"'
|
||||||
|
);
|
41
t/parent.t
Normal file
41
t/parent.t
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing parent()
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(. ..); require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 5;
|
||||||
|
|
||||||
|
is(
|
||||||
|
parent('a/b/c'),
|
||||||
|
'a/b',
|
||||||
|
=> 'no leading or trailing /'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
parent('/a/b/c'),
|
||||||
|
'/a/b',
|
||||||
|
=> 'leading /'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
parent('a/b/c/'),
|
||||||
|
'a/b',
|
||||||
|
=> 'trailing /'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
parent('/////a///b///c///'),
|
||||||
|
'/a/b',
|
||||||
|
=> 'multiple /'
|
||||||
|
);
|
||||||
|
|
||||||
|
is (
|
||||||
|
parent('a'),
|
||||||
|
''
|
||||||
|
=> 'empty parent'
|
||||||
|
);
|
||||||
|
|
41
t/relative_path.t
Normal file
41
t/relative_path.t
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing relative_path();
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(. ..); require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 5;
|
||||||
|
|
||||||
|
is(
|
||||||
|
relative_path('a/b/c', 'a/b/d'),
|
||||||
|
'../d',
|
||||||
|
=> 'diferent branches'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
relative_path('/a/b/c', '/a/b/c/d'),
|
||||||
|
'd',
|
||||||
|
=> 'lower same branch'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
relative_path('a/b/c', 'a/b'),
|
||||||
|
'..',
|
||||||
|
=> 'higher, same branch'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
relative_path('/a/b/c', '/d/e/f'),
|
||||||
|
'../../../d/e/f',
|
||||||
|
=> 'common parent is /'
|
||||||
|
);
|
||||||
|
|
||||||
|
is(
|
||||||
|
relative_path('///a//b//c////', '/a////b/c/d////'),
|
||||||
|
'd',
|
||||||
|
=> 'extra /\'s '
|
||||||
|
);
|
||||||
|
|
97
t/stow.t
Normal file
97
t/stow.t
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing core application
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(.); require "t/util.pm"; require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 10;
|
||||||
|
|
||||||
|
local @ARGV = (
|
||||||
|
'-v',
|
||||||
|
'-d t/stow',
|
||||||
|
'-t t/target',
|
||||||
|
'dummy'
|
||||||
|
);
|
||||||
|
|
||||||
|
### setup
|
||||||
|
eval { remove_dir('t/target'); };
|
||||||
|
eval { remove_dir('t/stow'); };
|
||||||
|
make_dir('t/target');
|
||||||
|
make_dir('t/stow');
|
||||||
|
|
||||||
|
ok eval {process_options(); 1} => 'process options';
|
||||||
|
ok eval {set_stow_path(); 1} => 'set stow path';
|
||||||
|
|
||||||
|
is($Stow_Path,"../stow" => 'stow dir');
|
||||||
|
is_deeply(\@Pkgs_To_Stow, [ 'dummy' ] => 'default to stow');
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check mixed up package options
|
||||||
|
#
|
||||||
|
%Option=();
|
||||||
|
local @ARGV = (
|
||||||
|
'-v',
|
||||||
|
'-D', 'd1', 'd2',
|
||||||
|
'-S', 's1',
|
||||||
|
'-R', 'r1',
|
||||||
|
'-D', 'd3',
|
||||||
|
'-S', 's2', 's3',
|
||||||
|
'-R', 'r2',
|
||||||
|
);
|
||||||
|
|
||||||
|
@Pkgs_To_Stow = ();
|
||||||
|
@Pkgs_To_Delete = ();
|
||||||
|
process_options();
|
||||||
|
is_deeply(\@Pkgs_To_Delete, [ 'd1', 'd2', 'r1', 'd3', 'r2' ] => 'mixed deletes');
|
||||||
|
is_deeply(\@Pkgs_To_Stow, [ 's1', 'r1', 's2', 's3', 'r2' ] => 'mixed stows');
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check setting defered paths
|
||||||
|
#
|
||||||
|
%Option=();
|
||||||
|
local @ARGV = (
|
||||||
|
'--defer=man',
|
||||||
|
'--defer=info'
|
||||||
|
);
|
||||||
|
process_options();
|
||||||
|
is_deeply($Option{'defer'}, [ qr(\Aman), qr(\Ainfo) ] => 'defer man and info');
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check setting override paths
|
||||||
|
#
|
||||||
|
%Option=();
|
||||||
|
local @ARGV = (
|
||||||
|
'--override=man',
|
||||||
|
'--override=info'
|
||||||
|
);
|
||||||
|
process_options();
|
||||||
|
is_deeply($Option{'override'}, [qr(\Aman), qr(\Ainfo)] => 'override man and info');
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check stripping any matched quotes
|
||||||
|
#
|
||||||
|
%Option=();
|
||||||
|
local @ARGV = (
|
||||||
|
"--override='man'",
|
||||||
|
'--override="info"',
|
||||||
|
);
|
||||||
|
process_options();
|
||||||
|
is_deeply($Option{'override'}, [qr(\Aman), qr(\Ainfo)] => 'strip shell quoting');
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check setting ignored paths
|
||||||
|
#
|
||||||
|
%Option=();
|
||||||
|
local @ARGV = (
|
||||||
|
'--ignore="~"',
|
||||||
|
'--ignore="\.#.*'
|
||||||
|
);
|
||||||
|
process_options();
|
||||||
|
is_deeply($Option{'ignore'}, [ qr(~\z), qr(\.#.*\z) ] => 'ignore temp files');
|
||||||
|
|
||||||
|
|
||||||
|
# vim:ft=perl
|
283
t/stow_contents.t
Normal file
283
t/stow_contents.t
Normal file
|
@ -0,0 +1,283 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(.); require "t/util.pm"; require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 13;
|
||||||
|
use English qw(-no_match_vars);
|
||||||
|
|
||||||
|
# local utility
|
||||||
|
sub reset_state {
|
||||||
|
@Tasks = ();
|
||||||
|
@Conflicts = ();
|
||||||
|
%Link_Task_For = ();
|
||||||
|
%Dir_Task_For = ();
|
||||||
|
%Options = ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
### setup
|
||||||
|
eval { remove_dir('t/target'); };
|
||||||
|
eval { remove_dir('t/stow'); };
|
||||||
|
make_dir('t/target');
|
||||||
|
make_dir('t/stow');
|
||||||
|
|
||||||
|
chdir 't/target';
|
||||||
|
$Stow_Path= '../stow';
|
||||||
|
|
||||||
|
# Note that each of the following tests use a distinct set of files
|
||||||
|
|
||||||
|
#
|
||||||
|
# stow a simple tree minimally
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg1/bin1');
|
||||||
|
make_file('../stow/pkg1/bin1/file1');
|
||||||
|
stow_contents('../stow/pkg1', './', '../stow/pkg1');
|
||||||
|
process_tasks();
|
||||||
|
is(
|
||||||
|
readlink('bin1'),
|
||||||
|
'../stow/pkg1/bin1',
|
||||||
|
=> 'minimal stow of a simple tree'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# stow a simple tree into an existing directory
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg2/lib2');
|
||||||
|
make_file('../stow/pkg2/lib2/file2');
|
||||||
|
make_dir('lib2');
|
||||||
|
stow_contents('../stow/pkg2', './', '../stow/pkg2');
|
||||||
|
process_tasks();
|
||||||
|
is(
|
||||||
|
readlink('lib2/file2'),
|
||||||
|
'../../stow/pkg2/lib2/file2',
|
||||||
|
=> 'stow simple tree to existing directory'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# unfold existing tree
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg3a/bin3');
|
||||||
|
make_file('../stow/pkg3a/bin3/file3a');
|
||||||
|
make_link('bin3' => '../stow/pkg3a/bin3'); # emulate stow
|
||||||
|
|
||||||
|
make_dir('../stow/pkg3b/bin3');
|
||||||
|
make_file('../stow/pkg3b/bin3/file3b');
|
||||||
|
stow_contents('../stow/pkg3b', './', '../stow/pkg3b');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
-d 'bin3' &&
|
||||||
|
readlink('bin3/file3a') eq '../../stow/pkg3a/bin3/file3a' &&
|
||||||
|
readlink('bin3/file3b') eq '../../stow/pkg3b/bin3/file3b'
|
||||||
|
=> 'target already has 1 stowed package'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Link to a new dir conflicts with existing non-dir (can't unfold)
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_file('bin4'); # this is a file but named like a directory
|
||||||
|
make_dir('../stow/pkg4/bin4');
|
||||||
|
make_file('../stow/pkg4/bin4/file4');
|
||||||
|
stow_contents('../stow/pkg4', './', '../stow/pkg4');
|
||||||
|
like(
|
||||||
|
$Conflicts[-1], qr(CONFLICT:.*existing target is neither a link nor a directory)
|
||||||
|
=> 'link to new dir conflicts with existing non-directory'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Target already exists but is not owned by stow
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin5');
|
||||||
|
make_link('bin5/file5','../../empty');
|
||||||
|
make_dir('../stow/pkg5/bin5/file5');
|
||||||
|
stow_contents('../stow/pkg5', './', '../stow/pkg5');
|
||||||
|
like(
|
||||||
|
$Conflicts[-1], qr(CONFLICT:.*not owned by stow)
|
||||||
|
=> 'target already exists but is not owned by stow'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Replace existing but invalid target
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_link('file6','../stow/path-does-not-exist');
|
||||||
|
make_dir('../stow/pkg6');
|
||||||
|
make_file('../stow/pkg6/file6');
|
||||||
|
eval{ stow_contents('../stow/pkg6', './', '../stow/pkg6'); process_tasks() };
|
||||||
|
is(
|
||||||
|
readlink('file6'),
|
||||||
|
'../stow/pkg6/file6'
|
||||||
|
=> 'replace existing but invalid target'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Target already exists, is owned by stow, but points to a non-directory
|
||||||
|
# (can't unfold)
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin7');
|
||||||
|
make_dir('../stow/pkg7a/bin7');
|
||||||
|
make_file('../stow/pkg7a/bin7/node7');
|
||||||
|
make_link('bin7/node7','../../stow/pkg7a/bin7/node7');
|
||||||
|
make_dir('../stow/pkg7b/bin7/node7');
|
||||||
|
make_file('../stow/pkg7b/bin7/node7/file7');
|
||||||
|
stow_contents('../stow/pkg7b', './', '../stow/pkg7b');
|
||||||
|
like(
|
||||||
|
$Conflicts[-1], qr(CONFLICT:.*existing target is stowed to a different package)
|
||||||
|
=> 'link to new dir conflicts with existing stowed non-directory'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# stowing directories named 0
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg8a/0');
|
||||||
|
make_file('../stow/pkg8a/0/file8a');
|
||||||
|
make_link('0' => '../stow/pkg8a/0'); # emulate stow
|
||||||
|
|
||||||
|
make_dir('../stow/pkg8b/0');
|
||||||
|
make_file('../stow/pkg8b/0/file8b');
|
||||||
|
stow_contents('../stow/pkg8b', './', '../stow/pkg8b');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-d '0' &&
|
||||||
|
readlink('0/file8a') eq '../../stow/pkg8a/0/file8a' &&
|
||||||
|
readlink('0/file8b') eq '../../stow/pkg8b/0/file8b'
|
||||||
|
=> 'stowing directories named 0'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# overriding already stowed documentation
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
$Option{'override'} = ['man9', 'info9'];
|
||||||
|
|
||||||
|
make_dir('../stow/pkg9a/man9/man1');
|
||||||
|
make_file('../stow/pkg9a/man9/man1/file9.1');
|
||||||
|
make_dir('man9/man1');
|
||||||
|
make_link('man9/man1/file9.1' => '../../../stow/pkg9a/man9/man1/file9.1'); # emulate stow
|
||||||
|
|
||||||
|
make_dir('../stow/pkg9b/man9/man1');
|
||||||
|
make_file('../stow/pkg9b/man9/man1/file9.1');
|
||||||
|
stow_contents('../stow/pkg9b', './', '../stow/pkg9b');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
readlink('man9/man1/file9.1') eq '../../../stow/pkg9b/man9/man1/file9.1'
|
||||||
|
=> 'overriding existing documentation files'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# deferring to already stowed documentation
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
$Option{'defer'} = ['man10', 'info10'];
|
||||||
|
|
||||||
|
make_dir('../stow/pkg10a/man10/man1');
|
||||||
|
make_file('../stow/pkg10a/man10/man1/file10.1');
|
||||||
|
make_dir('man10/man1');
|
||||||
|
make_link('man10/man1/file10.1' => '../../../stow/pkg10a/man10/man1/file10.1'); # emulate stow
|
||||||
|
|
||||||
|
make_dir('../stow/pkg10b/man10/man1');
|
||||||
|
make_file('../stow/pkg10b/man10/man1/file10.1');
|
||||||
|
stow_contents('../stow/pkg10b', './', '../stow/pkg10b');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
readlink('man10/man1/file10.1') eq '../../../stow/pkg10a/man10/man1/file10.1'
|
||||||
|
=> 'defer to existing documentation files'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ignore temp files
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
$Option{'ignore'} = ['~', '\.#.*'];
|
||||||
|
|
||||||
|
make_dir('../stow/pkg11/man11/man1');
|
||||||
|
make_file('../stow/pkg11/man11/man1/file11.1');
|
||||||
|
make_file('../stow/pkg11/man11/man1/file11.1~');
|
||||||
|
make_file('../stow/pkg11/man11/man1/.#file11.1');
|
||||||
|
make_dir('man11/man1');
|
||||||
|
|
||||||
|
stow_contents('../stow/pkg11', './', '../stow/pkg11');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
readlink('man11/man1/file11.1') eq '../../../stow/pkg11/man11/man1/file11.1' &&
|
||||||
|
!-e 'man11/man1/file11.1~' &&
|
||||||
|
!-e 'man11/man1/.#file11.1'
|
||||||
|
=> 'ignore temp files'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# stowing links library files
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg12/lib12/');
|
||||||
|
make_file('../stow/pkg12/lib12/lib.so');
|
||||||
|
make_link('../stow/pkg12/lib12/lib.so.1','lib.so');
|
||||||
|
|
||||||
|
make_dir('lib12/');
|
||||||
|
stow_contents('../stow/pkg12', './', '../stow/pkg12');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
readlink('lib12/lib.so.1') eq '../../stow/pkg12/lib12/lib.so.1'
|
||||||
|
=> 'stow links to libraries'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# unfolding to stow links to library files
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg13a/lib13/');
|
||||||
|
make_file('../stow/pkg13a/lib13/liba.so');
|
||||||
|
make_link('../stow/pkg13a/lib13/liba.so.1', 'liba.so');
|
||||||
|
make_link('lib13','../stow/pkg13a/lib13');
|
||||||
|
|
||||||
|
make_dir('../stow/pkg13b/lib13/');
|
||||||
|
make_file('../stow/pkg13b/lib13/libb.so');
|
||||||
|
make_link('../stow/pkg13b/lib13/libb.so.1', 'libb.so');
|
||||||
|
|
||||||
|
stow_contents('../stow/pkg13b', './', '../stow/pkg13b');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
readlink('lib13/liba.so.1') eq '../../stow/pkg13a/lib13/liba.so.1' &&
|
||||||
|
readlink('lib13/libb.so.1') eq '../../stow/pkg13b/lib13/libb.so.1'
|
||||||
|
=> 'unfolding to stow links to libraries'
|
||||||
|
);
|
276
t/unstow_contents.t
Normal file
276
t/unstow_contents.t
Normal file
|
@ -0,0 +1,276 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing unstow_contents()
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(.); require "t/util.pm"; require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 11;
|
||||||
|
use English qw(-no_match_vars);
|
||||||
|
|
||||||
|
# local utility
|
||||||
|
sub reset_state {
|
||||||
|
@Tasks = ();
|
||||||
|
@Conflicts = ();
|
||||||
|
%Link_Task_For = ();
|
||||||
|
%Dir_Task_For = ();
|
||||||
|
%Options = ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
### setup
|
||||||
|
eval { remove_dir('t/target'); };
|
||||||
|
eval { remove_dir('t/stow'); };
|
||||||
|
make_dir('t/target');
|
||||||
|
make_dir('t/stow');
|
||||||
|
|
||||||
|
chdir 't/target';
|
||||||
|
$Stow_Path= '../stow';
|
||||||
|
|
||||||
|
# Note that each of the following tests use a distinct set of files
|
||||||
|
|
||||||
|
#
|
||||||
|
# unstow a simple tree minimally
|
||||||
|
#
|
||||||
|
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg1/bin1');
|
||||||
|
make_file('../stow/pkg1/bin1/file1');
|
||||||
|
make_link('bin1','../stow/pkg1/bin1');
|
||||||
|
|
||||||
|
unstow_contents('../stow/pkg1','./');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-f '../stow/pkg1/bin1/file1' && ! -e 'bin1'
|
||||||
|
=> 'unstow a simple tree'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# unstow a simple tree from an existing directory
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('lib2');
|
||||||
|
make_dir('../stow/pkg2/lib2');
|
||||||
|
make_file('../stow/pkg2/lib2/file2');
|
||||||
|
make_link('lib2/file2', '../../stow/pkg2/lib2/file2');
|
||||||
|
unstow_contents('../stow/pkg2','./');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-f '../stow/pkg2/lib2/file2' && -d 'lib2'
|
||||||
|
=> 'unstow simple tree from a pre-existing directory'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# fold tree after unstowing
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin3');
|
||||||
|
|
||||||
|
make_dir('../stow/pkg3a/bin3');
|
||||||
|
make_file('../stow/pkg3a/bin3/file3a');
|
||||||
|
make_link('bin3/file3a' => '../../stow/pkg3a/bin3/file3a'); # emulate stow
|
||||||
|
|
||||||
|
make_dir('../stow/pkg3b/bin3');
|
||||||
|
make_file('../stow/pkg3b/bin3/file3b');
|
||||||
|
make_link('bin3/file3b' => '../../stow/pkg3b/bin3/file3b'); # emulate stow
|
||||||
|
unstow_contents('../stow/pkg3b', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-l 'bin3' &&
|
||||||
|
readlink('bin3') eq '../stow/pkg3a/bin3'
|
||||||
|
=> 'fold tree after unstowing'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# existing link is owned by stow but is invalid so it gets removed anyway
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin4');
|
||||||
|
make_dir('../stow/pkg4/bin4');
|
||||||
|
make_file('../stow/pkg4/bin4/file4');
|
||||||
|
make_link('bin4/file4', '../../stow/pkg4/bin4/does-not-exist');
|
||||||
|
|
||||||
|
unstow_contents('../stow/pkg4', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
! -e 'bin4/file4'
|
||||||
|
=> q(remove invalid link owned by stow)
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Existing link is not owned by stow
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg5/bin5');
|
||||||
|
make_link('bin5', '../not-stow');
|
||||||
|
|
||||||
|
unstow_contents('../stow/pkg5', './');
|
||||||
|
like(
|
||||||
|
$Conflicts[-1], qr(CONFLICT:.*existing target is not owned by stow)
|
||||||
|
=> q(existing link not owned by stow)
|
||||||
|
);
|
||||||
|
#
|
||||||
|
# Target already exists, is owned by stow, but points to a different package
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin6');
|
||||||
|
make_dir('../stow/pkg6a/bin6');
|
||||||
|
make_file('../stow/pkg6a/bin6/file6');
|
||||||
|
make_link('bin6/file6', '../../stow/pkg6a/bin6/file6');
|
||||||
|
|
||||||
|
make_dir('../stow/pkg6b/bin6');
|
||||||
|
make_file('../stow/pkg6b/bin6/file6');
|
||||||
|
|
||||||
|
unstow_contents('../stow/pkg6b', './');
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-l 'bin6/file6' &&
|
||||||
|
readlink('bin6/file6') eq '../../stow/pkg6a/bin6/file6'
|
||||||
|
=> q(ignore existing link that points to a different package)
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Don't unlink anything under the stow directory
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('stow'); # make out stow dir a subdir of target
|
||||||
|
$Stow_Path = 'stow';
|
||||||
|
|
||||||
|
# emulate stowing into ourself (bizzare corner case or accident)
|
||||||
|
make_dir('stow/pkg7a/stow/pkg7b');
|
||||||
|
make_file('stow/pkg7a/stow/pkg7b/file7b');
|
||||||
|
make_link('stow/pkg7b', '../stow/pkg7a/stow/pkg7b');
|
||||||
|
|
||||||
|
unstow_contents('stow/pkg7b', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-l 'stow/pkg7b' &&
|
||||||
|
readlink('stow/pkg7b') eq '../stow/pkg7a/stow/pkg7b'
|
||||||
|
=> q(don't unlink any nodes under the stow directory)
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Don't unlink any nodes under another stow directory
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('stow'); # make out stow dir a subdir of target
|
||||||
|
$Stow_Path = 'stow';
|
||||||
|
|
||||||
|
make_dir('stow2'); # make our alternate stow dir a subdir of target
|
||||||
|
make_file('stow2/.stow');
|
||||||
|
|
||||||
|
# emulate stowing into ourself (bizzare corner case or accident)
|
||||||
|
make_dir('stow/pkg8a/stow2/pkg8b');
|
||||||
|
make_file('stow/pkg8a/stow2/pkg8b/file8b');
|
||||||
|
make_link('stow2/pkg8b', '../stow/pkg8a/stow2/pkg8b');
|
||||||
|
|
||||||
|
unstow_contents('stow/pkg8a', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-l 'stow2/pkg8b' &&
|
||||||
|
readlink('stow2/pkg8b') eq '../stow/pkg8a/stow2/pkg8b'
|
||||||
|
=> q(don't unlink any nodes under another stow directory)
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# overriding already stowed documentation
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Stow_Path = '../stow';
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
$Option{'override'} = ['man9', 'info9'];
|
||||||
|
|
||||||
|
make_dir('../stow/pkg9a/man9/man1');
|
||||||
|
make_file('../stow/pkg9a/man9/man1/file9.1');
|
||||||
|
make_dir('man9/man1');
|
||||||
|
make_link('man9/man1/file9.1' => '../../../stow/pkg9a/man9/man1/file9.1'); # emulate stow
|
||||||
|
|
||||||
|
make_dir('../stow/pkg9b/man9/man1');
|
||||||
|
make_file('../stow/pkg9b/man9/man1/file9.1');
|
||||||
|
unstow_contents('../stow/pkg9b', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
!-l 'man9/man1/file9.1'
|
||||||
|
=> 'overriding existing documentation files'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# deferring to already stowed documentation
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
$Option{'defer'} = ['man10', 'info10'];
|
||||||
|
|
||||||
|
make_dir('../stow/pkg10a/man10/man1');
|
||||||
|
make_file('../stow/pkg10a/man10/man1/file10a.1');
|
||||||
|
make_dir('man10/man1');
|
||||||
|
make_link('man10/man1/file10a.1' => '../../../stow/pkg10a/man10/man1/file10a.1');
|
||||||
|
|
||||||
|
# need this to block folding
|
||||||
|
make_dir('../stow/pkg10b/man10/man1');
|
||||||
|
make_file('../stow/pkg10b/man10/man1/file10b.1');
|
||||||
|
make_link('man10/man1/file10b.1' => '../../../stow/pkg10b/man10/man1/file10b.1');
|
||||||
|
|
||||||
|
|
||||||
|
make_dir('../stow/pkg10c/man10/man1');
|
||||||
|
make_file('../stow/pkg10c/man10/man1/file10a.1');
|
||||||
|
unstow_contents('../stow/pkg10c', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
readlink('man10/man1/file10a.1') eq '../../../stow/pkg10a/man10/man1/file10a.1'
|
||||||
|
=> 'defer to existing documentation files'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ignore temp files
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
$Option{'ignore'} = ['~', '\.#.*'];
|
||||||
|
|
||||||
|
make_dir('../stow/pkg12/man12/man1');
|
||||||
|
make_file('../stow/pkg12/man12/man1/file12.1');
|
||||||
|
make_file('../stow/pkg12/man12/man1/file12.1~');
|
||||||
|
make_file('../stow/pkg12/man12/man1/.#file12.1');
|
||||||
|
make_dir('man12/man1');
|
||||||
|
make_link('man12/man1/file12.1' => '../../../stow/pkg12/man12/man1/file12.1');
|
||||||
|
|
||||||
|
unstow_contents('../stow/pkg12', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
!-e 'man12/man1/file12.1'
|
||||||
|
=> 'ignore temp files'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
# Todo
|
||||||
|
#
|
||||||
|
# Test cleaning up subdirs with --paranoid option
|
||||||
|
|
277
t/unstow_contents_orig.t
Normal file
277
t/unstow_contents_orig.t
Normal file
|
@ -0,0 +1,277 @@
|
||||||
|
#!/usr/local/bin/perl
|
||||||
|
|
||||||
|
#
|
||||||
|
# Testing unstow_contents_orig()
|
||||||
|
#
|
||||||
|
|
||||||
|
# load as a library
|
||||||
|
BEGIN { use lib qw(.); require "t/util.pm"; require "stow"; }
|
||||||
|
|
||||||
|
use Test::More tests => 11;
|
||||||
|
use English qw(-no_match_vars);
|
||||||
|
|
||||||
|
# local utility
|
||||||
|
sub reset_state {
|
||||||
|
@Tasks = ();
|
||||||
|
@Conflicts = ();
|
||||||
|
%Link_Task_For = ();
|
||||||
|
%Dir_Task_For = ();
|
||||||
|
%Options = ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
### setup
|
||||||
|
eval { remove_dir('t/target'); };
|
||||||
|
eval { remove_dir('t/stow'); };
|
||||||
|
make_dir('t/target');
|
||||||
|
make_dir('t/stow');
|
||||||
|
|
||||||
|
chdir 't/target';
|
||||||
|
$Stow_Path= '../stow';
|
||||||
|
|
||||||
|
# Note that each of the following tests use a distinct set of files
|
||||||
|
|
||||||
|
#
|
||||||
|
# unstow a simple tree minimally
|
||||||
|
#
|
||||||
|
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg1/bin1');
|
||||||
|
make_file('../stow/pkg1/bin1/file1');
|
||||||
|
make_link('bin1','../stow/pkg1/bin1');
|
||||||
|
|
||||||
|
unstow_contents_orig('../stow/pkg1','./');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-f '../stow/pkg1/bin1/file1' && ! -e 'bin1'
|
||||||
|
=> 'unstow a simple tree'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# unstow a simple tree from an existing directory
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('lib2');
|
||||||
|
make_dir('../stow/pkg2/lib2');
|
||||||
|
make_file('../stow/pkg2/lib2/file2');
|
||||||
|
make_link('lib2/file2', '../../stow/pkg2/lib2/file2');
|
||||||
|
unstow_contents_orig('../stow/pkg2','./');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-f '../stow/pkg2/lib2/file2' && -d 'lib2'
|
||||||
|
=> 'unstow simple tree from a pre-existing directory'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# fold tree after unstowing
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin3');
|
||||||
|
|
||||||
|
make_dir('../stow/pkg3a/bin3');
|
||||||
|
make_file('../stow/pkg3a/bin3/file3a');
|
||||||
|
make_link('bin3/file3a' => '../../stow/pkg3a/bin3/file3a'); # emulate stow
|
||||||
|
|
||||||
|
make_dir('../stow/pkg3b/bin3');
|
||||||
|
make_file('../stow/pkg3b/bin3/file3b');
|
||||||
|
make_link('bin3/file3b' => '../../stow/pkg3b/bin3/file3b'); # emulate stow
|
||||||
|
unstow_contents_orig('../stow/pkg3b', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-l 'bin3' &&
|
||||||
|
readlink('bin3') eq '../stow/pkg3a/bin3'
|
||||||
|
=> 'fold tree after unstowing'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# existing link is owned by stow but is invalid so it gets removed anyway
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin4');
|
||||||
|
make_dir('../stow/pkg4/bin4');
|
||||||
|
make_file('../stow/pkg4/bin4/file4');
|
||||||
|
make_link('bin4/file4', '../../stow/pkg4/bin4/does-not-exist');
|
||||||
|
|
||||||
|
unstow_contents_orig('../stow/pkg4', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
! -e 'bin4/file4'
|
||||||
|
=> q(remove invalid link owned by stow)
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Existing link is not owned by stow
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('../stow/pkg5/bin5');
|
||||||
|
make_link('bin5', '../not-stow');
|
||||||
|
|
||||||
|
unstow_contents_orig('../stow/pkg5', './');
|
||||||
|
#like(
|
||||||
|
# $Conflicts[-1], qr(CONFLICT:.*can't unlink.*not owned by stow)
|
||||||
|
# => q(existing link not owned by stow)
|
||||||
|
#);
|
||||||
|
ok(
|
||||||
|
-l 'bin5' && readlink('bin5') eq '../not-stow'
|
||||||
|
=> q(existing link not owned by stow)
|
||||||
|
);
|
||||||
|
#
|
||||||
|
# Target already exists, is owned by stow, but points to a different package
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('bin6');
|
||||||
|
make_dir('../stow/pkg6a/bin6');
|
||||||
|
make_file('../stow/pkg6a/bin6/file6');
|
||||||
|
make_link('bin6/file6', '../../stow/pkg6a/bin6/file6');
|
||||||
|
|
||||||
|
make_dir('../stow/pkg6b/bin6');
|
||||||
|
make_file('../stow/pkg6b/bin6/file6');
|
||||||
|
|
||||||
|
unstow_contents_orig('../stow/pkg6b', './');
|
||||||
|
ok(
|
||||||
|
-l 'bin6/file6' && readlink('bin6/file6') eq '../../stow/pkg6a/bin6/file6'
|
||||||
|
=> q(existing link owned by stow but points to a different package)
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Don't unlink anything under the stow directory
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('stow'); # make out stow dir a subdir of target
|
||||||
|
$Stow_Path = 'stow';
|
||||||
|
|
||||||
|
# emulate stowing into ourself (bizzare corner case or accident)
|
||||||
|
make_dir('stow/pkg7a/stow/pkg7b');
|
||||||
|
make_file('stow/pkg7a/stow/pkg7b/file7b');
|
||||||
|
make_link('stow/pkg7b', '../stow/pkg7a/stow/pkg7b');
|
||||||
|
|
||||||
|
unstow_contents_orig('stow/pkg7b', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-l 'stow/pkg7b' &&
|
||||||
|
readlink('stow/pkg7b') eq '../stow/pkg7a/stow/pkg7b'
|
||||||
|
=> q(don't unlink any nodes under the stow directory)
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Don't unlink any nodes under another stow directory
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
|
||||||
|
make_dir('stow'); # make out stow dir a subdir of target
|
||||||
|
$Stow_Path = 'stow';
|
||||||
|
|
||||||
|
make_dir('stow2'); # make our alternate stow dir a subdir of target
|
||||||
|
make_file('stow2/.stow');
|
||||||
|
|
||||||
|
# emulate stowing into ourself (bizzare corner case or accident)
|
||||||
|
make_dir('stow/pkg8a/stow2/pkg8b');
|
||||||
|
make_file('stow/pkg8a/stow2/pkg8b/file8b');
|
||||||
|
make_link('stow2/pkg8b', '../stow/pkg8a/stow2/pkg8b');
|
||||||
|
|
||||||
|
unstow_contents_orig('stow/pkg8a', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
-l 'stow2/pkg8b' &&
|
||||||
|
readlink('stow2/pkg8b') eq '../stow/pkg8a/stow2/pkg8b'
|
||||||
|
=> q(don't unlink any nodes under another stow directory)
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# overriding already stowed documentation
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Stow_Path = '../stow';
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
$Option{'override'} = ['man9', 'info9'];
|
||||||
|
|
||||||
|
make_dir('../stow/pkg9a/man9/man1');
|
||||||
|
make_file('../stow/pkg9a/man9/man1/file9.1');
|
||||||
|
make_dir('man9/man1');
|
||||||
|
make_link('man9/man1/file9.1' => '../../../stow/pkg9a/man9/man1/file9.1'); # emulate stow
|
||||||
|
|
||||||
|
make_dir('../stow/pkg9b/man9/man1');
|
||||||
|
make_file('../stow/pkg9b/man9/man1/file9.1');
|
||||||
|
unstow_contents_orig('../stow/pkg9b', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
!-l 'man9/man1/file9.1'
|
||||||
|
=> 'overriding existing documentation files'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# deferring to already stowed documentation
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
$Option{'defer'} = ['man10', 'info10'];
|
||||||
|
|
||||||
|
make_dir('../stow/pkg10a/man10/man1');
|
||||||
|
make_file('../stow/pkg10a/man10/man1/file10a.1');
|
||||||
|
make_dir('man10/man1');
|
||||||
|
make_link('man10/man1/file10a.1' => '../../../stow/pkg10a/man10/man1/file10a.1');
|
||||||
|
|
||||||
|
# need this to block folding
|
||||||
|
make_dir('../stow/pkg10b/man10/man1');
|
||||||
|
make_file('../stow/pkg10b/man10/man1/file10b.1');
|
||||||
|
make_link('man10/man1/file10b.1' => '../../../stow/pkg10b/man10/man1/file10b.1');
|
||||||
|
|
||||||
|
|
||||||
|
make_dir('../stow/pkg10c/man10/man1');
|
||||||
|
make_file('../stow/pkg10c/man10/man1/file10a.1');
|
||||||
|
unstow_contents_orig('../stow/pkg10c', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
readlink('man10/man1/file10a.1') eq '../../../stow/pkg10a/man10/man1/file10a.1'
|
||||||
|
=> 'defer to existing documentation files'
|
||||||
|
);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Ignore temp files
|
||||||
|
#
|
||||||
|
reset_state();
|
||||||
|
$Option{'verbose'} = 0;
|
||||||
|
$Option{'ignore'} = ['~', '\.#.*'];
|
||||||
|
|
||||||
|
make_dir('../stow/pkg12/man12/man1');
|
||||||
|
make_file('../stow/pkg12/man12/man1/file12.1');
|
||||||
|
make_file('../stow/pkg12/man12/man1/file12.1~');
|
||||||
|
make_file('../stow/pkg12/man12/man1/.#file12.1');
|
||||||
|
make_dir('man12/man1');
|
||||||
|
make_link('man12/man1/file12.1' => '../../../stow/pkg12/man12/man1/file12.1');
|
||||||
|
|
||||||
|
unstow_contents_orig('../stow/pkg12', './');
|
||||||
|
process_tasks();
|
||||||
|
ok(
|
||||||
|
scalar(@Conflicts) == 0 &&
|
||||||
|
!-e 'man12/man1/file12.1'
|
||||||
|
=> 'ignore temp files'
|
||||||
|
);
|
||||||
|
|
||||||
|
# Todo
|
||||||
|
#
|
||||||
|
# Test cleaning up subdirs with --paranoid option
|
||||||
|
|
157
t/util.pm
Normal file
157
t/util.pm
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
#
|
||||||
|
# Utilities shared by test scripts
|
||||||
|
#
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
#===== SUBROUTINE ===========================================================
|
||||||
|
# Name : make_link()
|
||||||
|
# Purpose : safely create a link
|
||||||
|
# Parameters: $target => path to the link
|
||||||
|
# : $source => where the new link should point
|
||||||
|
# Returns : n/a
|
||||||
|
# Throws : fatal error if the link can not be safely created
|
||||||
|
# Comments : checks for existing nodes
|
||||||
|
#============================================================================
|
||||||
|
sub make_link {
|
||||||
|
my ($target, $source) = @_;
|
||||||
|
|
||||||
|
if (-l $target) {
|
||||||
|
my $old_source = readlink join('/',parent($target),$source)
|
||||||
|
or die "could not read link $target/$source";
|
||||||
|
if ($old_source ne $source) {
|
||||||
|
die "$target already exists but points elsewhere\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elsif (-e $target ) {
|
||||||
|
die "$target already exists and is not a link\n";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
symlink $source, $target
|
||||||
|
or die "could not create link $target => $source ($!)\n";
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#===== SUBROUTINE ===========================================================
|
||||||
|
# Name : make_dir()
|
||||||
|
# Purpose : create a directory and any requiste parents
|
||||||
|
# Parameters: $dir => path to the new directory
|
||||||
|
# Returns : n/a
|
||||||
|
# Throws : fatal error if the directory or any of its parents cannot be
|
||||||
|
# : created
|
||||||
|
# Comments : none
|
||||||
|
#============================================================================
|
||||||
|
sub make_dir {
|
||||||
|
my ($dir) = @_;
|
||||||
|
|
||||||
|
my @parents = ();
|
||||||
|
for my $part (split '/', $dir) {
|
||||||
|
my $path = join '/', @parents, $part;
|
||||||
|
if (not -d $path and not mkdir $path) {
|
||||||
|
die "could not create directory: $path ($!)\n";
|
||||||
|
}
|
||||||
|
push @parents, $part;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#===== SUBROUTINE ===========================================================
|
||||||
|
# Name : create_file()
|
||||||
|
# Purpose : create an empty file
|
||||||
|
# Parameters: $path => proposed path to the file
|
||||||
|
# Returns : n/a
|
||||||
|
# Throws : fatal error if the file could not be created
|
||||||
|
# Comments : detects clash with an existing non-file
|
||||||
|
#============================================================================
|
||||||
|
sub make_file {
|
||||||
|
my ($path) =@_;
|
||||||
|
|
||||||
|
if (not -e $path) {
|
||||||
|
open my $FILE ,'>', $path
|
||||||
|
or die "could not create file: $path ($!)\n";
|
||||||
|
close $FILE;
|
||||||
|
}
|
||||||
|
elsif ( not -f $path) {
|
||||||
|
die "a non-file already exists at $path\n";
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#===== SUBROUTINE ===========================================================
|
||||||
|
# Name : remove_link()
|
||||||
|
# Purpose : remove an esiting symbolic link
|
||||||
|
# Parameters: $path => path to the symbolic link
|
||||||
|
# Returns : n/a
|
||||||
|
# Throws : fatal error if the operation fails or if passed the path to a
|
||||||
|
# : non-link
|
||||||
|
# Comments : none
|
||||||
|
#============================================================================
|
||||||
|
sub remove_link {
|
||||||
|
my ($path) = @_;
|
||||||
|
if (not -l $path) {
|
||||||
|
die qq(remove_link() called with a non-link: $path);
|
||||||
|
}
|
||||||
|
unlink $path or die "could not remove link: $path ($!)\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#===== SUBROUTINE ===========================================================
|
||||||
|
# Name : remove_file()
|
||||||
|
# Purpose : remove an existing empty file
|
||||||
|
# Parameters: $path => the path to the empty file
|
||||||
|
# Returns : n/a
|
||||||
|
# Throws : fatal error if given file is non-empty or the operation fails
|
||||||
|
# Comments : none
|
||||||
|
#============================================================================
|
||||||
|
sub remove_file {
|
||||||
|
my ($path) = @_;
|
||||||
|
if (-z $path) {
|
||||||
|
die "file at $path is non-empty\n";
|
||||||
|
}
|
||||||
|
unlink $path or die "could not remove empty file: $path ($!)\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#===== SUBROUTINE ===========================================================
|
||||||
|
# Name : remove_dir()
|
||||||
|
# Purpose : safely remove a tree of test files
|
||||||
|
# Parameters: $dir => path to the top of the tree
|
||||||
|
# Returns : n/a
|
||||||
|
# Throws : fatal error if the tree contains a non-link or non-empty file
|
||||||
|
# Comments : recursively removes directories containing softlinks empty files
|
||||||
|
#============================================================================
|
||||||
|
sub remove_dir {
|
||||||
|
my ($dir) = @_;
|
||||||
|
|
||||||
|
if (not -d $dir) {
|
||||||
|
die "$dir is not a directory";
|
||||||
|
}
|
||||||
|
|
||||||
|
opendir my $DIR, $dir or die "cannot read directory: $dir ($!)\n";
|
||||||
|
my @listing = readdir $DIR;
|
||||||
|
closedir $DIR;
|
||||||
|
|
||||||
|
NODE:
|
||||||
|
for my $node (@listing) {
|
||||||
|
next NODE if $node eq '.';
|
||||||
|
next NODE if $node eq '..';
|
||||||
|
|
||||||
|
my $path = "$dir/$node";
|
||||||
|
if (-l $path or -z $path) {
|
||||||
|
unlink $path or die "cannot unlink $path ($!)\n";
|
||||||
|
}
|
||||||
|
elsif (-d "$path") {
|
||||||
|
remove_dir($path);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
die "$path is not a link, directory, or empty file\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rmdir $dir or die "cannot rmdir $dir ($!)\n";
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
7482
texinfo.tex
Normal file
7482
texinfo.tex
Normal file
File diff suppressed because it is too large
Load diff
4
version.texi
Normal file
4
version.texi
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
@set UPDATED 20 February 2008
|
||||||
|
@set UPDATED-MONTH February 2008
|
||||||
|
@set EDITION 2.0.2
|
||||||
|
@set VERSION 2.0.2
|
Loading…
Reference in a new issue