Import version 1.3.3

This commit is contained in:
Adam Spiers 2011-11-09 22:39:32 +00:00
parent 3fff521fa1
commit 502cee75a5
21 changed files with 5533 additions and 1996 deletions

View file

@ -5,3 +5,11 @@ Contributions from Gord Matzigkeit <gord@enci.ucalgary.ca>.
John Bazik wrote `fastcwd', the Perl subroutine for computing the
current working directory.
Charles Briscoe-Smith <cpbs@debian.org> wrote the fix to prevent
stow -D / stow -R removing initially-empty directories.
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.
Stow is currently maintained by Guillaume Morin <gmorin@gnu.org>.

View file

@ -1,3 +1,35 @@
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>
* stow.in: Stow now only warns the user if a subdirectory
is unreadable during unstowing.
Wed Jan 02 20:58:05 2002 Guillaume Morin <gmorin@gnu.org>
* stow.in: fixed JoinPaths so that subdirs called "0" are
correctly pushed. Thanks a lot to Gergely Nagy
<algernon@bonehunter.rulez.org> who patiently helped me to chase
this bug.
Sun Dec 30 21:58:25 2001 Guillaume Morin <gmorin@gnu.org>
* stow.in: fixed a bug introduced by previous changes when
Target argument was relative. (thanks to Luca Filipozzi
<lfilipoz@debian.org> for pointing this out)
Sun Dec 30 18:23:25 2001 Guillaume Morin <gmorin@gnu.org>
* stow.in: now requires Perl 5. Use POSIX getcwd instead of broken
fastcwd. Fixed bug when CommonParent is /. Stow does not remove
initially empty directories anymore.
Sun Dec 30 18:07:51 2001 Guillaume Morin <gmorin@gnu.org>
* configure.in: automake fixes (fp_ -> AC, +AC_INIT_AUTOMAKE)
Fri Oct 11 22:09:45 1996 Bob Glickstein <bobg@hiro.zanshin.com>
* stow.html, configure.in: Version 1.3.2.

View file

@ -1,8 +1,8 @@
Basic Installation
==================
Stow is a Perl script. You must have Perl 4 or Perl 5 in order for it
to run.
Stow is a Perl script. You must have Perl 5.005 or later in order for
it to run.
The steps in building stow are:

View file

@ -4,6 +4,8 @@ AUTOMAKE_OPTIONS = dist-shar
bin_SCRIPTS = stow
info_TEXINFOS = stow.texi
man_MANS = stow.8
EXTRA_DIST = $(man_MANS)
CLEANFILES = stow manual.html manual.texi

View file

@ -1,11 +1,19 @@
# Makefile.in generated automatically by automake 1.0 from Makefile.am
# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright (C) 1994, 1995, 1996 Free Software Foundation, Inc.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# 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.
SHELL = /bin/sh
@SET_MAKE@
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
@ -25,241 +33,420 @@ infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
AMTAR = @AMTAR@
AWK = @AWK@
DEPDIR = @DEPDIR@
EXEEXT = @EXEEXT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
VERSION = @VERSION@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
AUTOMAKE_OPTIONS = dist-shar
bin_SCRIPTS = stow
info_TEXINFOS = stow.texi
man_MANS = stow.8
EXTRA_DIST = $(man_MANS)
CLEANFILES = stow manual.html manual.texi
ACLOCAL = aclocal.m4
mkinstalldirs = $(top_srcdir)/mkinstalldirs
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_CLEAN_FILES = stow
SCRIPTS = $(bin_SCRIPTS)
MAKEINFO = makeinfo
TEXI2DVI = texi2dvi
INFOS = stow.info*
DIST_SOURCES =
INFO_DEPS = stow.info
DVIS = stow.dvi
TEXINFOS = stow.texi
NROFF = nroff
MANS = $(man_MANS)
DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
Makefile.in NEWS README THANKS TODO aclocal.m4 configure configure.in \
install-sh mdate-sh mkinstalldirs stamp-vti stow.in texinfo.tex \
version.texi
Makefile.in NEWS THANKS TODO aclocal.m4 configure configure.in \
install-sh mdate-sh missing mkinstalldirs stamp-vti stow.in \
texinfo.tex version.texi
all: all-am
.SUFFIXES:
.SUFFIXES: .dvi .info .ps .texi
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$@ $(SHELL) ./config.status
PACKAGE = @PACKAGE@
VERSION = @VERSION@
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
$(TEXINFOS) $(INFOS) $(MANS) $(EXTRA_DIST) $(DATA)
DEP_DISTFILES = $(DIST_COMMON) $(SOURCES) $(BUILT_SOURCES) $(HEADERS) \
$(TEXINFOS) $(INFO_DEPS) $(MANS) $(EXTRA_DIST) $(DATA)
TAR = tar
default: all
$(srcdir)/Makefile.in: Makefile.am configure.in
cd $(srcdir) && automake Makefile
# For an explanation of the following Makefile rules, see node
# `Automatic Remaking' in GNU Autoconf documentation.
Makefile: Makefile.in config.status
CONFIG_FILES=$@ CONFIG_HEADERS= ./config.status
config.status: configure
./config.status --recheck
$(srcdir)/configure: configure.in $(ACLOCAL) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && autoconf
$(ACLOCAL_M4): configure.in
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
stow: $(top_builddir)/config.status stow.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= ./config.status
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
install-binSCRIPTS: $(bin_SCRIPTS)
$(mkinstalldirs) $(bindir)
list="$(bin_SCRIPTS)"; for p in $$list; do \
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(bindir)
@list='$(bin_SCRIPTS)'; for p in $$list; do \
f="`echo $$p|sed '$(transform)'`"; \
if test -f $$p; then \
$(INSTALL_SCRIPT) $$p $(bindir)/`echo $$p|sed '$(transform)'`; \
else if test -f $(srcdir)/$$p; then \
$(INSTALL_SCRIPT) $(srcdir)/$$p \
$(bindir)/`echo $$p|sed '$(transform)'`; \
else :; fi; fi; \
echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/$$f"; \
$(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/$$f; \
elif test -f $(srcdir)/$$p; then \
echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/$$f"; \
$(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/$$f; \
else :; fi; \
done
uninstall-binSCRIPTS:
list="$(bin_SCRIPTS)"; for p in $$list; do \
rm -f $(bindir)/`echo $$p|sed '$(transform)'`; \
@$(NORMAL_UNINSTALL)
@list='$(bin_SCRIPTS)'; for p in $$list; do \
f="`echo $$p|sed '$(transform)'`"; \
echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
rm -f $(DESTDIR)$(bindir)/$$f; \
done
version.texi: stamp-vti
stamp-vti: stow.texi $(top_srcdir)/configure.in
echo "@set UPDATED `cd $(srcdir) \
&& $(SHELL) ./mdate-sh stow.texi`" > vti.tmp
echo "@set EDITION $(VERSION)" >> vti.tmp
echo "@set VERSION $(VERSION)" >> vti.tmp
if cmp -s vti.tmp $(srcdir)/version.texi; then \
rm vti.tmp; \
else \
mv vti.tmp $(srcdir)/version.texi; \
fi
echo timestamp > $(srcdir)/stamp-vti
$(srcdir)/version.texi: $(srcdir)/stamp-vti
@:
$(srcdir)/stamp-vti: stow.texi $(top_srcdir)/configure.in
@(set `$(SHELL) $(srcdir)/mdate-sh $(srcdir)/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
clean-vti:
distclean-vti:
-rm -f vti.tmp
maintainer-clean-vti:
rm -f stamp-vti version.texi
stow.info: stow.texi version.texi
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
stow.info: stow.texi $(srcdir)/version.texi
stow.dvi: stow.texi $(srcdir)/version.texi
.texi.info:
$(MAKEINFO) -I$(srcdir) $< -o $(srcdir)/$@
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
`echo $< | sed 's,.*/,,'`
.texi.dvi:
TEXINPUTS=$(srcdir):$$TEXINPUTS $(TEXI2DVI) $<
TEXINPUTS=$(srcdir):$$TEXINPUTS \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) $<
install-info: $(INFO_DEPS)
$(mkinstalldirs) $(infodir)
for file in $(INFO_DEPS); do \
for ifile in `cd $(srcdir) && echo $$file*`; do \
$(INSTALL_DATA) $(srcdir)/$$ifile $(infodir)/$$ifile; \
done; \
.texi:
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
cd $(srcdir) \
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
`echo $< | sed 's,.*/,,'`
MAKEINFO = @MAKEINFO@
TEXI2DVI = texi2dvi
DVIPS = dvips
.dvi.ps:
$(DVIPS) $< -o $@
uninstall-info-am:
$(PRE_UNINSTALL)
@if (install-info --version && \
install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file"; \
install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file; \
done; \
else :; fi
@$(NORMAL_UNINSTALL)
@list='$(INFO_DEPS)'; \
for file in $$list; do \
(if cd $(DESTDIR)$(infodir); then \
echo " rm -f $$file $$file-[0-9] $$file-[0-9][0-9])"; \
rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \
else :; fi); \
done
uninstall-info:
cd $(srcdir) && for file in *.info*; do \
rm -f $(infodir)/$$file; \
dist-info: $(INFO_DEPS)
list='$(INFO_DEPS)'; \
for base in $$list; do \
d=$(srcdir); \
for file in `CDPATH=: && cd $$d && eval echo $$base*`; do \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file; \
done; \
done
mostlyclean-info:
rm -f stow.aux stow.cp stow.cps stow.dvi stow.fn stow.fns stow.ky \
stow.log stow.pg stow.toc stow.tp stow.vr stow.op
mostlyclean-aminfo:
-rm -f stow.aux stow.cp stow.cps stow.dvi stow.fn stow.ky stow.log stow.pg \
stow.ps stow.toc stow.tp stow.vr
clean-info:
maintainer-clean-aminfo:
cd $(srcdir) && \
for i in $(INFO_DEPS); do \
rm -f $$i; \
if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \
rm -f $$i-[0-9]*; \
fi; \
done
distclean-info:
maintainer-clean-info:
rm -f $(INFOS)
man8dir = $(mandir)/man8
install-man8: $(man8_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(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/^.*\\.//'`; \
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/^.*\\.//'`; \
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
tags: TAGS
TAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .
# Avoid unsightly `./'.
distdir = $(PACKAGE)-$(VERSION)
GZIP_ENV = --best
distdir: $(DISTFILES)
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
mkdir $(distdir)
$(mkinstalldirs) $(distdir)/.
@for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
$(mkinstalldirs) "$(distdir)/$$dir"; \
fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| 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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
dist: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
dist-shar: distdir
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(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
rm -rf $(distdir)
$(TAR) zxf $(distdir).tar.gz
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/=build
mkdir $(distdir)/=inst
dc_install_base=`cd $(distdir)/=inst && pwd`; \
cd $(distdir)/=build \
chmod a-w $(distdir)
dc_install_base=`CDPATH=: && cd $(distdir)/=inst && pwd` \
&& cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
&& $(MAKE) \
&& $(MAKE) check \
&& $(MAKE) install \
&& $(MAKE) installcheck \
&& $(MAKE) dist
rm -rf $(distdir)
@echo "========================"; \
echo "$(distdir).tar.gz is ready for distribution"; \
echo "========================"
dist: distdir
chmod -R a+r $(distdir)
$(TAR) chozf $(distdir).tar.gz $(distdir)
rm -rf $(distdir)
dist-shar: distdir
chmod -R a+r $(distdir)
shar $(distdir) | gzip > $(distdir).shar.gz
rm -rf $(distdir)
distdir: $(DEP_DISTFILES)
rm -rf $(distdir)
mkdir $(distdir)
chmod 777 $(distdir)
@for file in `cd $(srcdir) && echo $(DISTFILES)`; do \
test -f $(distdir)/$$file \
|| ln $(srcdir)/$$file $(distdir)/$$file 2> /dev/null \
|| cp -p $(srcdir)/$$file $(distdir)/$$file; \
done
info: $(INFO_DEPS)
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
|| (echo "Error: files left after uninstall" 1>&2; \
exit 1) ) \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& $(MAKE) $(AM_MAKEFLAGS) distclean \
&& rm -f $(distdir).tar.gz \
&& (test `find . -type f -print | wc -l` -eq 0 \
|| (echo "Error: files left after distclean" 1>&2; \
exit 1) )
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
@echo "$(distdir).tar.gz is ready for distribution" | \
sed 'h;s/./=/g;p;x;p;x'
check-am: all-am
check: check-am
all-am: Makefile $(INFO_DEPS) $(SCRIPTS) $(MANS)
dvi: $(DVIS)
check: all
installcheck:
install-exec: install-binSCRIPTS
install-data: install-info
install: install-exec install-data all
@:
uninstall: uninstall-binSCRIPTS uninstall-info
all: $(INFO_DEPS) $(SCRIPTS) Makefile
install-strip:
$(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install
installdirs:
$(mkinstalldirs) $(bindir) $(infodir)
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(infodir) $(DESTDIR)$(man8dir)
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)" \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
clean-generic:
test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
distclean-generic:
rm -f Makefile $(DISTCLEANFILES)
rm -f config.cache config.log $(CONFIG_HEADER) stamp-h
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
maintainer-clean-generic:
test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
mostlyclean: mostlyclean-vti mostlyclean-info mostlyclean-generic
clean: clean-vti clean-info clean-generic mostlyclean
distclean: distclean-vti distclean-info distclean-generic clean
rm -f config.status
maintainer-clean: maintainer-clean-vti maintainer-clean-info \
maintainer-clean-generic distclean
@echo "This command is intended for maintainers to use;"
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
rm -f config.status
clean: clean-am
.PHONY: default uninstall-binSCRIPTS install-binSCRIPTS mostlyclean-vti \
distclean-vti clean-vti maintainer-clean-vti install-info \
uninstall-info mostlyclean-info distclean-info clean-info \
maintainer-clean-info tags distdir info dvi check installcheck \
install-exec install-data install uninstall all installdirs \
mostlyclean-generic distclean-generic clean-generic \
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
clean-am: clean-generic mostlyclean-am
dist-all: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
distclean: distclean-am
-rm -f config.status config.cache config.log
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am: $(DVIS)
info: info-am
info-am: $(INFO_DEPS)
install-data-am: install-info-am install-man
install-exec-am: install-binSCRIPTS
install-info: install-info-am
install-info-am: $(INFO_DEPS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(infodir)
@list='$(INFO_DEPS)'; \
for file in $$list; do \
d=$(srcdir); \
for ifile in `CDPATH=: && cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
if test -f $$d/$$ifile; then \
echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \
$(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \
else : ; fi; \
done; \
done
@$(POST_INSTALL)
@if (install-info --version && \
install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\
done; \
else : ; fi
install-man: install-man8
installcheck-am:
maintainer-clean: maintainer-clean-am
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
uninstall-am: uninstall-binSCRIPTS uninstall-info-am uninstall-man
uninstall-man: uninstall-man8
.PHONY: all all-am check check-am clean clean-generic dist dist-all \
dist-info dist-shar distcheck distclean distclean-generic \
distdir dvi dvi-am info info-am install install-am \
install-binSCRIPTS install-data install-data-am install-exec \
install-exec-am install-info install-info-am install-man \
install-man8 install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-aminfo \
maintainer-clean-generic maintainer-clean-vti mostlyclean \
mostlyclean-aminfo mostlyclean-generic mostlyclean-vti \
uninstall uninstall-am uninstall-binSCRIPTS uninstall-info-am \
uninstall-man uninstall-man8
# The rules for manual.html and manual.texi are only used by
@ -271,9 +458,6 @@ manual.html: manual.texi
manual.texi: stow.texi
-rm -f $@
cp $< $@
.SUFFIXES:
.SUFFIXES: .texi .info .dvi
# 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:

8
NEWS
View file

@ -1,5 +1,13 @@
News file for Stow.
* Changes in version 1.3.3:
** Now requires Perl 5.005 or later
** Initially empty directories are not removed anymore
** Removed buggy fastcwd (we use POSIX::getcwd instead)
** Fixed bug when the common Parent of Target dir and Stow dir was "/"
** Fixed bug when handling directories named "0"
** Stow now only warns the user if a directory is unreadable during unstowing.
* Changes in version 1.3:
** Added --restow option.
** Fixed handling of slashes in package names.

2
THANKS
View file

@ -1,3 +1,5 @@
Bob Glickstein:
Thanks to the following people for testing, using, commenting on, and
otherwise aiding the creation of Stow:

496
aclocal.m4 vendored
View file

@ -1,7 +1,493 @@
dnl This definition comes from automake 1.0
# aclocal.m4 generated automatically by aclocal 1.5
AC_DEFUN(fp_PROG_INSTALL,
[AC_PROG_INSTALL
test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL} -m 755'
AC_SUBST(INSTALL_SCRIPT)dnl
# Copyright 1996, 1997, 1998, 1999, 2000, 2001
# 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.
# Do all the work for Automake. 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.
# serial 5
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
# We require 2.13 because we rely on SHELL being computed by configure.
AC_PREREQ([2.13])
# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
# -----------------------------------------------------------
# If MACRO-NAME is provided do IF-PROVIDED, else IF-NOT-PROVIDED.
# The purpose of this macro is to provide the user with a means to
# check macros which are provided without letting her know how the
# information is coded.
# If this macro is not defined by Autoconf, define it here.
ifdef([AC_PROVIDE_IFELSE],
[],
[define([AC_PROVIDE_IFELSE],
[ifdef([AC_PROVIDE_$1],
[$2], [$3])])])
# AM_INIT_AUTOMAKE(PACKAGE,VERSION, [NO-DEFINE])
# ----------------------------------------------
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_REQUIRE([AC_PROG_INSTALL])dnl
# test to see if srcdir already configured
if test "`CDPATH=:; cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then
AC_MSG_ERROR([source directory already configured; run \"make distclean\" there first])
fi
# Define the identity of the package.
PACKAGE=$1
AC_SUBST(PACKAGE)dnl
VERSION=$2
AC_SUBST(VERSION)dnl
ifelse([$3],,
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])
# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow
# the ones we care about.
ifdef([m4_pattern_allow],
[m4_pattern_allow([^AM_[A-Z]+FLAGS])])dnl
# Autoconf 2.50 always computes EXEEXT. However we need to be
# compatible with 2.13, for now. So we always define EXEEXT, but we
# don't compute it.
AC_SUBST(EXEEXT)
# Similar for OBJEXT -- only we only use OBJEXT if the user actually
# requests that it be used. This is a bit dumb.
: ${OBJEXT=o}
AC_SUBST(OBJEXT)
# Some tools Automake needs.
AC_REQUIRE([AM_SANITY_CHECK])dnl
AC_REQUIRE([AC_ARG_PROGRAM])dnl
AM_MISSING_PROG(ACLOCAL, aclocal)
AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake)
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AM_MISSING_PROG(AMTAR, tar)
AM_PROG_INSTALL_SH
AM_PROG_INSTALL_STRIP
# 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_DEP_TRACK])dnl
AC_REQUIRE([AM_SET_DEPDIR])dnl
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
])
#
# Check to make sure that the build environment is sane.
#
# serial 3
# 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)])
# serial 2
# 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
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=
am_backtick='`'
AC_MSG_WARN([${am_backtick}missing' script is too old or missing])
fi
])
# AM_AUX_DIR_EXPAND
# 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], [
# expand $ac_aux_dir to an absolute path
am_aux_dir=`CDPATH=:; cd $ac_aux_dir && pwd`
])
# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
install_sh=${install_sh-"$am_aux_dir/install-sh"}
AC_SUBST(install_sh)])
# 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
INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
# serial 4 -*- Autoconf -*-
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
# will think it sees a *use*, and therefore will trigger all it's
# C support machinery. Also note that it means that autoscan, seeing
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
# _AM_DEPENDENCIES(NAME)
# ---------------------
# See how the compiler implements dependency checking.
# NAME is "CC", "CXX" or "OBJC".
# We try a few techniques and use that to set a single cache variable.
#
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
# dependency, and given that the user is not expected to run this macro,
# just rely on AC_PROG_CC.
AC_DEFUN([_AM_DEPENDENCIES],
[AC_REQUIRE([AM_SET_DEPDIR])dnl
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
AC_REQUIRE([AM_DEP_TRACK])dnl
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
[$1], CXX, [depcc="$CXX" am_compiler_list=],
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc']
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
[depcc="$$1" am_compiler_list=])
AC_CACHE_CHECK([dependency style of $depcc],
[am_cv_$1_dependencies_compiler_type],
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
# We make a subdir and do the tests there. Otherwise we can end up
# making bogus files that we don't know about and never remove. For
# instance it was reported that on HP-UX the gcc test will end up
# making a dummy file named `D' -- because `-MD' means `put the output
# in D'.
mkdir conftest.dir
# Copy depcomp to subdir because otherwise we won't find it if we're
# using a relative directory.
cp "$am_depcomp" conftest.dir
cd conftest.dir
am_cv_$1_dependencies_compiler_type=none
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi
for depmode in $am_compiler_list; do
# We need to recreate these files for each test, as the compiler may
# overwrite some of them when testing with obscure command lines.
# This happens at least with the AIX C compiler.
echo '#include "conftest.h"' > conftest.c
echo 'int i;' > conftest.h
echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf
case $depmode in
nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested
if test "x$enable_dependency_tracking" = xyes; then
continue
else
break
fi
;;
none) break ;;
esac
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this.
if depmode=$depmode \
source=conftest.c object=conftest.o \
depfile=conftest.Po tmpdepfile=conftest.TPo \
$SHELL ./depcomp $depcc -c conftest.c -o conftest.o >/dev/null 2>&1 &&
grep conftest.h conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
am_cv_$1_dependencies_compiler_type=$depmode
break
fi
done
cd ..
rm -rf conftest.dir
else
am_cv_$1_dependencies_compiler_type=none
fi
])
$1DEPMODE="depmode=$am_cv_$1_dependencies_compiler_type"
AC_SUBST([$1DEPMODE])
])
# AM_SET_DEPDIR
# -------------
# Choose a directory name for dependency files.
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
AC_DEFUN([AM_SET_DEPDIR],
[rm -f .deps 2>/dev/null
mkdir .deps 2>/dev/null
if test -d .deps; then
DEPDIR=.deps
else
# MS-DOS does not allow filenames that begin with a dot.
DEPDIR=_deps
fi
rmdir .deps 2>/dev/null
AC_SUBST(DEPDIR)
])
# AM_DEP_TRACK
# ------------
AC_DEFUN([AM_DEP_TRACK],
[AC_ARG_ENABLE(dependency-tracking,
[ --disable-dependency-tracking Speeds up one-time builds
--enable-dependency-tracking Do not reject slow dependency extractors])
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
fi
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
pushdef([subst], defn([AC_SUBST]))
subst(AMDEPBACKSLASH)
popdef([subst])
])
# Generate code to set up dependency tracking.
# This macro should only be invoked once -- use via AC_REQUIRE.
# Usage:
# AM_OUTPUT_DEPENDENCY_COMMANDS
#
# This code is only required when automatic dependency tracking
# is enabled. FIXME. This creates each `.P' file that we will
# need in order to bootstrap the dependency handling code.
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],[
AC_OUTPUT_COMMANDS([
test x"$AMDEP_TRUE" != x"" ||
for mf in $CONFIG_FILES; do
case "$mf" in
Makefile) dirpart=.;;
*/Makefile) dirpart=`echo "$mf" | sed -e 's|/[^/]*$||'`;;
*) continue;;
esac
grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
# Extract the definition of DEP_FILES from the Makefile without
# running `make'.
DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
test -z "$DEPDIR" && continue
# When using ansi2knr, U may be empty or an underscore; expand it
U=`sed -n -e '/^U = / s///p' < "$mf"`
test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
# We invoke sed twice because it is the simplest approach to
# changing $(DEPDIR) to its actual value in the expansion.
for file in `sed -n -e '
/^DEP_FILES = .*\\\\$/ {
s/^DEP_FILES = //
:loop
s/\\\\$//
p
n
/\\\\$/ b loop
p
}
/^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
# Make sure the directory exists.
test -f "$dirpart/$file" && continue
fdir=`echo "$file" | sed -e 's|/[^/]*$||'`
$ac_aux_dir/mkinstalldirs "$dirpart/$fdir" > /dev/null 2>&1
# echo "creating $dirpart/$file"
echo '# dummy' > "$dirpart/$file"
done
done
], [AMDEP_TRUE="$AMDEP_TRUE"
ac_aux_dir="$ac_aux_dir"])])
# AM_MAKE_INCLUDE()
# -----------------
# Check to see how make treats includes.
AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
doit:
@echo done
END
# If we don't find an include directive, just comment out the code.
AC_MSG_CHECKING([for style of include used by $am_make])
am__include='#'
am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# We grep out `Entering directory' and `Leaving directory'
# messages which can occur if `w' ends up in MAKEFLAGS.
# In particular we don't look at `^make:' because GNU make might
# be invoked under some other name (usually "gmake"), in which
# case it prints its new name instead of `make'.
if test "`$am_make -s -f confmf 2> /dev/null | fgrep -v 'ing directory'`" = "done"; then
am__include=include
am__quote=
_am_result=GNU
fi
# Now try BSD make style include.
if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
am__include=.include
am__quote='"'
_am_result=BSD
fi
fi
AC_SUBST(am__include)
AC_SUBST(am__quote)
AC_MSG_RESULT($_am_result)
rm -f confinc confmf
])
# serial 3
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
# Define a conditional.
#
# FIXME: Once using 2.50, use this:
# m4_match([$1], [^TRUE\|FALSE$], [AC_FATAL([$0: invalid condition: $1])])dnl
AC_DEFUN([AM_CONDITIONAL],
[ifelse([$1], [TRUE],
[errprint(__file__:__line__: [$0: invalid condition: $1
])dnl
m4exit(1)])dnl
ifelse([$1], [FALSE],
[errprint(__file__:__line__: [$0: invalid condition: $1
])dnl
m4exit(1)])dnl
AC_SUBST([$1_TRUE])
AC_SUBST([$1_FALSE])
if $2; then
$1_TRUE=
$1_FALSE='#'
else
$1_TRUE='#'
$1_FALSE=
fi])

475
configure vendored
View file

@ -1,7 +1,7 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.10
# Generated automatically using autoconf version 2.13
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
@ -11,6 +11,9 @@
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
ac_help="$ac_help
--disable-dependency-tracking Speeds up one-time builds
--enable-dependency-tracking Do not reject slow dependency extractors"
# Initialize some variables set by options.
# The variables have the same names as the options, with
@ -49,6 +52,9 @@ mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
ac_prev=
for ac_option
@ -330,7 +336,7 @@ EOF
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.10"
echo "configure generated by autoconf version 2.13"
exit 0 ;;
-with-* | --with-*)
@ -432,11 +438,14 @@ do
done
# NLS nuisances.
# Only set LANG and LC_ALL to C if already set.
# These must not be set unconditionally because not all systems understand
# e.g. LANG=C (notably SCO).
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
# Only set these to C if already set. These must not be set unconditionally
# because not all systems understand e.g. LANG=C (notably SCO).
# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
# Non-C LC_CTYPE values break the ctype check.
if test "${LANG+set}" = set; then LANG=C; export LANG; fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
@ -497,8 +506,11 @@ ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
ac_exeext=
ac_objext=o
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
@ -514,7 +526,312 @@ fi
PACKAGE=stow
VERSION=1.3.2
VERSION=1.3.3
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
if test -f $ac_dir/install-sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
elif test -f $ac_dir/install.sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
fi
done
if test -z "$ac_aux_dir"; then
{ echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
fi
ac_config_guess=$ac_aux_dir/config.guess
ac_config_sub=$ac_aux_dir/config.sub
ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# expand $ac_aux_dir to an absolute path
am_aux_dir=`CDPATH=:; cd $ac_aux_dir && pwd`
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
# SysV /etc/install, /usr/sbin/install
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:566: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
for ac_dir in $PATH; do
# Account for people who put trailing slashes in PATH elements.
case "$ac_dir/" in
/|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
# Don't use installbsd from OSF since it installs stuff as root
# by default.
for ac_prog in ginstall scoinst install; do
if test -f $ac_dir/$ac_prog; then
if test $ac_prog = install &&
grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
break 2
fi
fi
done
;;
esac
done
IFS="$ac_save_IFS"
fi
if test "${ac_cv_path_install+set}" = set; then
INSTALL="$ac_cv_path_install"
else
# As a last resort, use the slow shell script. We don't cache a
# path for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
# removed, or if the path is relative.
INSTALL="$ac_install_sh"
fi
fi
echo "$ac_t""$INSTALL" 1>&6
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
echo "configure:619: checking whether build environment is sane" >&5
# 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".
{ echo "configure: error: ls -t appears to fail. Make sure there is not a broken
alias in your environment" 1>&2; exit 1; }
fi
test "$2" = conftest.file
)
then
# Ok.
:
else
{ echo "configure: error: newly created file is older than distributed files!
Check your system clock" 1>&2; exit 1; }
fi
echo "$ac_t""yes" 1>&6
if test "$program_transform_name" = s,x,x,; then
program_transform_name=
else
# Double any \ or $. echo might interpret backslashes.
cat <<\EOF_SED > conftestsed
s,\\,\\\\,g; s,\$,$$,g
EOF_SED
program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
rm -f conftestsed
fi
test "$program_prefix" != NONE &&
program_transform_name="s,^,${program_prefix},; $program_transform_name"
# Use a double $ so make ignores it.
test "$program_suffix" != NONE &&
program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
# sed with no file args requires a program.
test "$program_transform_name" = "" && program_transform_name="s,x,x,"
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=
am_backtick='`'
echo "configure: warning: ${am_backtick}missing' script is too old or missing" 1>&2
fi
for ac_prog in mawk gawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:690: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$AWK"; then
ac_cv_prog_AWK="$AWK" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_AWK="$ac_prog"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
AWK="$ac_cv_prog_AWK"
if test -n "$AWK"; then
echo "$ac_t""$AWK" 1>&6
else
echo "$ac_t""no" 1>&6
fi
test -n "$AWK" && break
done
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
echo "configure:720: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftestmake <<\EOF
all:
@echo 'ac_maketemp="${MAKE}"'
EOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
if test -n "$ac_maketemp"; then
eval ac_cv_prog_make_${ac_make}_set=yes
else
eval ac_cv_prog_make_${ac_make}_set=no
fi
rm -f conftestmake
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
echo "$ac_t""yes" 1>&6
SET_MAKE=
else
echo "$ac_t""no" 1>&6
SET_MAKE="MAKE=${MAKE-make}"
fi
# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
if test "${enable_dependency_tracking+set}" = set; then
enableval="$enable_dependency_tracking"
:
fi
if test "x$enable_dependency_tracking" != xno; then
am_depcomp="$ac_aux_dir/depcomp"
AMDEPBACKSLASH='\'
fi
if test "x$enable_dependency_tracking" != xno; then
AMDEP_TRUE=
AMDEP_FALSE='#'
else
AMDEP_TRUE='#'
AMDEP_FALSE=
fi
rm -f .deps 2>/dev/null
mkdir .deps 2>/dev/null
if test -d .deps; then
DEPDIR=.deps
else
# MS-DOS does not allow filenames that begin with a dot.
DEPDIR=_deps
fi
rmdir .deps 2>/dev/null
# test to see if srcdir already configured
if test "`CDPATH=:; cd $srcdir && pwd`" != "`pwd`" &&
test -f $srcdir/config.status; then
{ echo "configure: error: source directory already configured; run \"make distclean\" there first" 1>&2; exit 1; }
fi
# Define the identity of the package.
PACKAGE=stow
VERSION=$VERSION
cat >> confdefs.h <<EOF
#define PACKAGE "$PACKAGE"
EOF
cat >> confdefs.h <<EOF
#define VERSION "$VERSION"
EOF
# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow
# the ones we care about.
# Autoconf 2.50 always computes EXEEXT. However we need to be
# compatible with 2.13, for now. So we always define EXEEXT, but we
# don't compute it.
# Similar for OBJEXT -- only we only use OBJEXT if the user actually
# requests that it be used. This is a bit dumb.
: ${OBJEXT=o}
# Some tools Automake needs.
ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal"}
AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake"}
AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
AMTAR=${AMTAR-"${am_missing_run}tar"}
install_sh=${install_sh-"$am_aux_dir/install-sh"}
INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
@ -538,25 +855,6 @@ test "$program_suffix" != NONE &&
test "$program_transform_name" = "" && program_transform_name="s,x,x,"
ac_aux_dir=
for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
if test -f $ac_dir/install-sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
elif test -f $ac_dir/install.sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
fi
done
if test -z "$ac_aux_dir"; then
{ echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
fi
ac_config_guess=$ac_aux_dir/config.guess
ac_config_sub=$ac_aux_dir/config.sub
ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# Find a good install program. We prefer a C program (faster),
# so one script is as good as another. But avoid the broken or
# incompatible versions:
@ -564,27 +862,30 @@ ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:871: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
for ac_dir in $PATH; do
# Account for people who put trailing slashes in PATH elements.
case "$ac_dir/" in
/|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
for ac_prog in ginstall installbsd scoinst install; do
# Don't use installbsd from OSF since it installs stuff as root
# by default.
for ac_prog in ginstall scoinst install; do
if test -f $ac_dir/$ac_prog; then
if test $ac_prog = install &&
grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
# OSF/1 installbsd also uses dspmsg, but is usable.
:
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
@ -595,7 +896,7 @@ else
;;
esac
done
IFS="$ac_save_ifs"
IFS="$ac_save_IFS"
fi
if test "${ac_cv_path_install+set}" = set; then
@ -614,16 +915,17 @@ echo "$ac_t""$INSTALL" 1>&6
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL} -m 755'
for ac_prog in perl perl5 perl4
for ac_prog in perl perl5
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:929: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
@ -631,9 +933,13 @@ else
/*)
ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
;;
?:/*)
ac_cv_path_PERL="$PERL" # Let the user override the test with a dos path.
;;
*)
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_dummy="$PATH"
for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_path_PERL="$ac_dir/$ac_word"
@ -678,11 +984,25 @@ cat > confcache <<\EOF
# --recheck option to rerun configure.
#
EOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \
>> confcache
case `(ac_space=' '; set | grep ac_space) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
sed -n \
-e "s/'/'\\\\''/g" \
-e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
;;
esac >> confcache
if cmp -s $cache_file confcache; then
:
else
@ -749,7 +1069,7 @@ do
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.10"
echo "$CONFIG_STATUS generated by autoconf version 2.13"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
@ -769,9 +1089,11 @@ sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
s%@SHELL@%$SHELL%g
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@FFLAGS@%$FFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
@ -790,29 +1112,81 @@ s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
s%@PACKAGE@%$PACKAGE%g
s%@VERSION@%$VERSION%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
s%@EXEEXT@%$EXEEXT%g
s%@OBJEXT@%$OBJEXT%g
s%@ACLOCAL@%$ACLOCAL%g
s%@AUTOCONF@%$AUTOCONF%g
s%@AUTOMAKE@%$AUTOMAKE%g
s%@AUTOHEADER@%$AUTOHEADER%g
s%@MAKEINFO@%$MAKEINFO%g
s%@AMTAR@%$AMTAR%g
s%@install_sh@%$install_sh%g
s%@INSTALL_STRIP_PROGRAM@%$INSTALL_STRIP_PROGRAM%g
s%@AWK@%$AWK%g
s%@SET_MAKE@%$SET_MAKE%g
s%@AMDEP_TRUE@%$AMDEP_TRUE%g
s%@AMDEP_FALSE@%$AMDEP_FALSE%g
s%@AMDEPBACKSLASH@%$AMDEPBACKSLASH%g
s%@DEPDIR@%$DEPDIR%g
s%@PERL@%$PERL%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
if test $ac_beg -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
else
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
fi
if test ! -s conftest.s$ac_file; then
ac_more_lines=false
rm -f conftest.s$ac_file
else
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f conftest.s$ac_file"
else
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
ac_end=`expr $ac_end + $ac_max_sed_cmds`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile stow"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
# Support "outfile[:infile]", defaulting infile="outfile.in".
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case "$ac_file" in
*:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'`
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
*) ac_file_in="${ac_file}.in" ;;
esac
# Adjust relative srcdir, etc. for subdirectories.
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
@ -840,6 +1214,7 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
[/$]*) INSTALL="$ac_given_INSTALL" ;;
*) INSTALL="$ac_dots$ac_given_INSTALL" ;;
esac
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
@ -848,16 +1223,22 @@ for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
# $configure_input" ;;
*) ac_comsub= ;;
esac
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
sed -e "$ac_comsub
s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
s%@INSTALL@%$INSTALL%g
" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
fi; done
rm -f conftest.subs
rm -f conftest.s*
EOF
cat >> $CONFIG_STATUS <<EOF
EOF
cat >> $CONFIG_STATUS <<\EOF
exit 0
EOF

View file

@ -3,15 +3,16 @@ dnl Process this file with Autoconf to produce configure
AC_INIT(stow.in)
PACKAGE=stow
VERSION=1.3.2
VERSION=1.3.3
AM_INIT_AUTOMAKE(stow, $VERSION)
AC_SUBST(PACKAGE)
AC_SUBST(VERSION)
AC_ARG_PROGRAM
fp_PROG_INSTALL
AC_PROG_INSTALL
AC_PATH_PROGS(PERL, perl perl5 perl4, false)
AC_PATH_PROGS(PERL, perl perl5, false)
if test "x$PERL" = xfalse
then

View file

@ -1,15 +1,27 @@
#! /bin/sh
#!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5.
# This comes from X11R5 (mit/util/scripts/install.sh).
#
# Copyright 1991 by the Massachusetts Institute of Technology
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of M.I.T. not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission. M.I.T. makes no representations about the
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
# 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.
#
# from scratch. It can only install one file at a time, a restriction
# shared with many OS's install programs.
# set DOITPROG to echo to test this script
@ -106,6 +118,7 @@ if [ x"$dir_arg" != x ]; then
if [ -d $dst ]; then
instcmd=:
chmodcmd=""
else
instcmd=mkdir
fi

View file

@ -1,7 +1,7 @@
#!/bin/sh
# mdate-sh - get modification time of a file and pretty-print it
# Copyright (C) 1995 Software Foundation, Inc.
# Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
# Get modification time of a file or directory and pretty-print it.
# Copyright 1995, 1996, 1997 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
@ -14,8 +14,13 @@
# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
# along with this program; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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.
# Prevent date giving response in another language.
LANG=C
@ -25,14 +30,15 @@ export LC_ALL
LC_TIME=C
export LC_TIME
# Get the extended ls output of the file.
# Get the extended ls output of the file or directory.
# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
if ls -L /dev/null 1>/dev/null 2>&1; then
set - `ls -L -l $1`
set - x`ls -L -l -d $1`
else
set - `ls -l $1`
set - x`ls -l -d $1`
fi
# The month is at least the fourth argument.
# (3 shifts here, the next inside the loop)
# The month is at least the fourth argument
# (3 shifts here, the next inside the loop).
shift
shift
shift

283
missing Executable file
View file

@ -0,0 +1,283 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
# Copyright 1996, 1997, 1999, 2000 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., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, 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=:
# 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
case "$1" in
--run)
# Try to run requested program, and just exit if it succeeds.
run=
shift
"$@" && exit 0
;;
esac
# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case "$1" in
-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'
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]"
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing 0.3 - GNU automake"
;;
-*)
echo 1>&2 "$0: Unknown \`$1' option"
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
;;
aclocal)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. 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 missing on your system. 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 missing on your system. 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 missing on your system. 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
;;
bison|yacc)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. 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 [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.y)
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.c
fi
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" y.tab.h
fi
;;
esac
fi
if [ ! -f y.tab.h ]; then
echo >y.tab.h
fi
if [ ! -f y.tab.c ]; then
echo 'main() { return 0; }' >y.tab.c
fi
;;
lex|flex)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. 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 [ $# -ne 1 ]; then
eval LASTARG="\${$#}"
case "$LASTARG" in
*.l)
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
if [ -f "$SRCFILE" ]; then
cp "$SRCFILE" lex.yy.c
fi
;;
esac
fi
if [ ! -f lex.yy.c ]; then
echo 'main() { return 0; }' >lex.yy.c
fi
;;
help2man)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. 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 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
fi
if [ -f "$file" ]; then
touch $file
else
test -z "$file" || exec >$file
echo ".ab help2man is required to generate this page"
exit 1
fi
;;
makeinfo)
if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
# We have makeinfo, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is missing on your system. 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."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
fi
touch $file
;;
tar)
shift
if test -n "$run"; then
echo 1>&2 "ERROR: \`tar' requires --run"
exit 1
fi
# 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 ${1+"$@"} && exit 0
fi
if (gtar --version > /dev/null 2>&1); then
gtar ${1+"$@"} && exit 0
fi
firstarg="$1"
if shift; then
case "$firstarg" in
*o*)
firstarg=`echo "$firstarg" | sed s/o//`
tar "$firstarg" ${1+"$@"} && exit 0
;;
esac
case "$firstarg" in
*h*)
firstarg=`echo "$firstarg" | sed s/h//`
tar "$firstarg" ${1+"$@"} && 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 you do not seem to have it handy on your
system. 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 prerequirements 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

View file

@ -2,29 +2,33 @@
# mkinstalldirs --- make directory hierarchy
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
# Last modified: 1994-03-25
# Public domain
# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $
errstatus=0
for file in ${1+"$@"} ; do
for file
do
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
shift
pathcomp=
for d in ${1+"$@"} ; do
for d
do
pathcomp="$pathcomp$d"
case "$pathcomp" in
-* ) pathcomp=./$pathcomp ;;
esac
if test ! -d "$pathcomp"; then
echo "mkdir $pathcomp" 1>&2
mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$?
fi
echo "mkdir $pathcomp"
if test ! -d "$pathcomp"; then
errstatus=$lasterr
mkdir "$pathcomp" || lasterr=$?
if test ! -d "$pathcomp"; then
errstatus=$lasterr
fi
fi
pathcomp="$pathcomp/"

View file

@ -1 +1,4 @@
timestamp
@set UPDATED 5 January 2002
@set UPDATED-MONTH January 2002
@set EDITION 1.3.3
@set VERSION 1.3.3

448
stow.8 Normal file
View file

@ -0,0 +1,448 @@
.TH STOW 8 "28 March 1998"
.SH NAME
stow \- software package installation manager
.SH SYNOPSIS
.B stow
.RI [ options ]
.IR package ...
.SH DESCRIPTION
This manual page describes GNU Stow 1.3.3, a program for managing the
installation of software packages. This is not the definitive
documentation for stow; for that, see the info manual.
.PP
Stow is a tool for managing the installation of multiple software
packages in the same run-time directory tree. One historical difficulty
of this task has been the need to administer, upgrade, install, and
remove files in independent packages without confusing them with other
files sharing the same filesystem space. For instance, it is common to
install Perl and Emacs in
.IR /usr/local .
When one does so, one winds up
(as of Perl 4.036 and Emacs 19.22)
with the following files in
.IR /usr/local/man/man1 :
.IR a2p.1 ;
.IR ctags.1 ;
.IR emacs.1 ;
.IR etags.1 ;
.IR h2ph.1 ;
.IR perl.1 ;
and
.IR s2p.1 .
Now
suppose it's time to uninstall Perl. Which man pages get removed?
Obviously
.I perl.1
is one of them, but it should not be the
administrator's responsibility to memorize the ownership of individual
files by separate packages.
.PP
The approach used by Stow is to install each package into its own
tree, then use symbolic links to make it appear as though the files are
installed in the common tree. Administration can be performed in the
package's private tree in isolation from clutter from other packages.
Stow can then be used to update the symbolic links. The structure of
each private tree should reflect the desired structure in the common
tree; i.e. (in the typical case) there should be a
.I bin
directory
containing executables, a
.I man/man1
directory containing section 1 man
pages, and so on.
.PP
Stow was inspired by Carnegie Mellon's Depot program, but is
substantially simpler and safer. Whereas Depot required database files
to keep things in sync, Stow stores no extra state between runs, so
there's no danger (as there was in Depot) of mangling directories when
file hierarchies don't match the database. Also unlike Depot, Stow will
never delete any files, directories, or links that appear in a Stow
directory (e.g.,
.IR /usr/local/stow/emacs ),
so it's always possible to
rebuild the target tree (e.g.,
.IR /usr/local ).
.SH TERMINOLOGY
A ``package'' is a related collection of files and directories that
you wish to administer as a unit--e.g., Perl or Emacs--and that needs
to be installed in a particular directory structure--e.g., with
.IR bin ,
.IR lib ,
and
.I man
subdirectories.
.PP
A ``target directory'' is the root of a tree in which one or more
packages wish to
.B appear
to be installed. A common, but by no means
the only such location is
.IR /usr/local .
The examples in this manual page
will use
.I /usr/local
as the target directory.
.PP
A ``stow directory'' is the root of a tree containing separate
packages in private subtrees. When Stow runs, it uses the current
directory as the default stow directory. The examples in this manual
page will use
.I /usr/local/stow
as the stow directory, so that individual
packages will be, for example,
.I /usr/local/stow/perl
and
.IR /usr/local/stow/emacs .
.PP
An ``installation image'' is the layout of files and directories
required by a package, relative to the target directory. Thus, the
installation image for Perl includes: a
.I bin
directory containing
.I perl
and
.I a2p
(among others); an
.I info
directory containing Texinfo
documentation; a
.I lib/perl
directory containing Perl libraries; and a
.I man/man1
directory containing man pages.
.PP
A ``package directory'' is the root of a tree containing the
installation image for a particular package. Each package directory
must reside in a stow directory--e.g., the package directory
.I /usr/local/stow/perl
must reside in the stow directory
.IR /usr/local/stow .
The ``name'' of a package is the name of its
directory within the stow directory--e.g.,
.IR perl .
.PP
Thus, the Perl executable might reside in
.IR /usr/local/stow/perl/bin/perl ,
where
.I /usr/local
is the target
directory,
.I /usr/local/stow
is the stow directory,
.I /usr/local/stow/perl
is the package directory, and
.I bin/perl
within
is part of the installation image.
.PP
A ``symlink'' is a symbolic link. A symlink can be ``relative'' or
``absolute''. An absolute symlink names a full path; that is, one
starting from
.IR / .
A relative symlink names a relative path; that is,
one not starting from
.IR / .
The target of a relative symlink is
computed starting from the symlink's own directory. Stow only creates
relative symlinks.
.SH OPTIONS
The stow directory is assumed to be the current directory, and the
target directory is assumed to be the parent of the current directory
(so it is typical to execute
.I stow
from the directory
.IR /usr/local/stow ).
Each
.I package
given on the command line is the name of a package in the stow
directory (e.g.,
.IR perl ).
By default, they are installed into the
target directory (but they can be deleted instead using `-D').
.TP
.I -n
.TP
.I --no
Do not perform any operations that modify the filesystem; merely
show what would happen. Since no actual operations are performed,
.I stow -n
could report conflicts when none would actually take
place (see ``Conflicts'' in the info manual);
but it won't fail to report conflicts
that
.B would
take place.
.TP
.I -c
.TP
.I --conflicts
Do not exit immediately when a conflict is encountered. This
option implies `-n', and is used to search for all conflicts that
might arise from an actual Stow operation. As with `-n', however,
false conflicts might be reported (see ``Conflicts'' in the info manual).
.TP
.I "-d DIR"
.TP
.I --dir=DIR
Set the stow directory to DIR instead of the current directory.
This also has the effect of making the default target directory be
the parent of DIR.
.TP
.I "-t DIR"
.TP
.I --target=DIR
Set the target directory to DIR instead of the parent of the stow
directory.
.TP
.I -v
.TP
.I --verbose[=N]
Send verbose output to standard error describing what Stow is
doing. Verbosity levels are 0, 1, 2, and 3; 0 is the default.
Using `-v' or `--verbose' increases the verbosity by one; using
`--verbose=N' sets it to N.
.TP
.I -D
.TP
.I --delete
Delete packages from the target directory rather than installing
them.
.TP
.I -R
.TP
.I --restow
Restow packages (first unstow, then stow again). This is useful
for pruning obsolete symlinks from the target tree after updating
the software in a package.
.TP
.I -V
.TP
.I --version
Show Stow version number, and exit.
.TP
.I -h
.TP
.I --help
Show Stow command syntax, and exit.
.SH "INSTALLING PACKAGES"
The default action of Stow is to install a package. This means
creating symlinks in the target tree that point into the package tree.
Stow attempts to do this with as few symlinks as possible; in other
words, if Stow can create a single symlink that points to an entire
subtree within the package tree, it will choose to do that rather than
create a directory in the target tree and populate it with symlinks.
.PP
For example, suppose that no packages have yet been installed in
.IR /usr/local ;
it's completely empty (except for the
.I stow
subdirectory, of course). Now suppose the Perl package is installed.
Recall that it includes the following directories in its installation
image:
.IR bin ;
.IR info ;
.IR lib/perl ;
.IR man/man1 .
Rather than creating
the directory
.I /usr/local/bin
and populating it with symlinks to
.I ../stow/perl/bin/perl
and
.I ../stow/perl/bin/a2p
(and so on), Stow
will create a single symlink,
.IR /usr/local/bin ,
which points to
.IR stow/perl/bin .
In this way, it still works to refer to
.I /usr/local/bin/perl
and
.IR /usr/local/bin/a2p ,
and fewer symlinks have
been created. This is called ``tree folding'', since an entire subtree
is ``folded'' into a single symlink.
.PP
To complete this example, Stow will also create the symlink
.I /usr/local/info
pointing to
.IR stow/perl/info ;
the symlink
.I /usr/local/lib
pointing to
.IR stow/perl/lib ;
and the symlink
.I /usr/local/man
pointing to
.IR stow/perl/man .
.PP
Now suppose that instead of installing the Perl package into an empty
target tree, the target tree is not empty to begin with. Instead, it
contains several files and directories installed under a different
system-administration philosophy. In particular,
.I /usr/local/bin
already exists and is a directory, as are
.I /usr/local/lib
and
.IR /usr/local/man/man1 .
In this case, Stow will descend into
.I /usr/local/bin
and create symlinks to
.I ../stow/perl/bin/perl
and
.I ../stow/perl/bin/a2p
(etc.), and it will descend into
.I /usr/local/lib
and create the tree-folding symlink
.I perl
pointing to
.IR ../stow/perl/lib/perl ,
and so on. As a rule, Stow only descends as
far as necessary into the target tree when it can create a tree-folding
symlink.
.PP
The time often comes when a tree-folding symlink has to be undone
because another package uses one or more of the folded subdirectories in
its installation image. This operation is called ``splitting open'' a
folded tree. It involves removing the original symlink from the target
tree, creating a true directory in its place, and then populating the
new directory with symlinks to the newly-installed package
.B and
to the
old package that used the old symlink. For example, suppose that after
installing Perl into an empty
.IR /usr/local ,
we wish to install Emacs.
Emacs's installation image includes a
.I bin
directory containing the
.I emacs
and
.I etags
executables, among others. Stow must make these
files appear to be installed in
.IR /usr/local/bin ,
but presently
.I /usr/local/bin
is a symlink to
.IR stow/perl/bin .
Stow therefore takes
the following steps: the symlink
.I /usr/local/bin
is deleted; the
directory
.I /usr/local/bin
is created; links are made from
.I /usr/local/bin
to
.I ../stow/emacs/bin/emacs
and
.IR ../stow/emacs/bin/etags ;
and links are made from
.I /usr/local/bin
to
.I ../stow/perl/bin/perl
and
.IR ../stow/perl/bin/a2p .
.PP
When splitting open a folded tree, Stow makes sure that the symlink
it is about to remove points inside a valid package in the current stow
directory.
.BR "Stow will never delete anything that it doesn't own" .
Stow ``owns'' everything living in the target tree that points into a
package in the stow directory. Anything Stow owns, it can recompute if
lost. Note that by this definition, Stow doesn't ``own'' anything
.B in
the stow directory or in any of the packages.
.PP
If Stow needs to create a directory or a symlink in the target tree
and it cannot because that name is already in use and is not owned by
Stow, then a conflict has arisen. See ``Conflicts'' in the info manual.
.SH "DELETING PACKAGES"
When the `-D' option is given, the action of Stow is to delete a
package from the target tree. Note that Stow will not delete anything
it doesn't ``own''. Deleting a package does
.B not
mean removing it from
the stow directory or discarding the package tree.
.PP
To delete a package, Stow recursively scans the target tree,
skipping over the stow directory (since that is usually a subdirectory
of the target tree) and any other stow directories it encounters (see
``Multiple stow directories'' in the info manual). Any symlink it finds that points into
the package being deleted is removed. Any directory that contained
only symlinks to the package being deleted is removed. Any directory
that, after removing symlinks and empty subdirectories, contains only
symlinks to a single other package, is considered to be a previously
``folded'' tree that was ``split open.'' Stow will re-fold the tree by
removing the symlinks to the surviving package, removing the directory,
then linking the directory back to the surviving package.
.SH "SEE ALSO"
The info manual ``Stow 1.3.3:
Managing the installation of software packages''
by Bob Glickstein, Zanshin Software, Inc.
.SH BUGS
Please report bugs in Stow using the Debian bug tracking system.
.PP
Currently known bugs include:
.IP *
The empty-directory problem. If package FOO includes an empty
directory--say, FOO/BAR--then:
.IP
1.
if no other package has a BAR subdirectory, everything's fine.
.IP
2.
if another stowed package, QUUX, has a BAR subdirectory, then
when stowing, TARGETDIR/BAR will be ``split open'' and the
contents of QUUX/BAR will be individually stowed. So far, so
good. But when unstowing QUUX, TARGETDIR/BAR will be
removed, even though FOO/BAR needs it to remain. A
workaround for this problem is to create a file in FOO/BAR as
a placeholder. If you name that file
.IR .placeholder ,
it will
be easy to find and remove such files when this bug is fixed.
.IP *
When using multiple stow directories (see ``Multiple stow
directories'' in the info manual), Stow fails to ``split open'' tree-folding symlinks
(see ``Installing packages'' in the info manual) that point into a stow directory
which is not the one in use by the current Stow command. Before
failing, it should search the target of the link to see whether
any element of the path contains a
.I .stow
file. If it finds one,
it can ``learn'' about the cooperating stow directory to
short-circuit the
.I .stow
search the next time it encounters a
tree-folding symlink.
.SH AUTHOR
This man page was constructed by Charles Briscoe-Smith from
parts of Stow's info manual. That manual contained the following
notice, which, as it says, applied to this manual page, too. The text
of the section entitled ``GNU General Public License'' can be found in
the file
.I /usr/share/common-licenses/GPL
on any Debian GNU/Linux system. If you don't have access to a Debian
system, or the GPL is not there, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA.
.IP
Software and documentation Copyright (C) 1993, 1994, 1995, 1996 by
Bob Glickstein <bobg+stow@zanshin.com>.
.IP
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
.IP
Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the section entitled ``GNU General Public License'' is included with
the modified manual, and provided that the entire resulting derived
work is distributed under the terms of a permission notice identical to
this one.
.IP
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that this permission notice may be stated in a
translation approved by the Free Software Foundation.

93
stow.in
View file

@ -1,8 +1,9 @@
#!@PERL@
# GNU Stow - manage the installation of multiple software packages
# Copyright 1993, 1994, 1995, 1996 by Bob Glickstein
#
# Copyright (C) 1993, 1994, 1995, 1996 by Bob Glickstein
# Copyright (C) 2000,2001 Guillaume Morin
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
@ -16,6 +17,14 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# $Id: stow.in,v 1.8 2002/01/05 11:27:01 gmorin Exp $
# $Source: /cvsroot/stow/stow/stow.in,v $
# $Date: 2002/01/05 11:27:01 $
# $Author: gmorin $
require 5.005;
use POSIX;
$ProgramName = $0;
$ProgramName =~ s,.*/,,;
@ -27,10 +36,12 @@ $Delete = 0;
$NotReally = 0;
$Verbose = 0;
$ReportHelp = 0;
$Stow = &fastcwd;
$Stow = undef;
$Target = undef;
$Restow = 0;
# FIXME: use Getopt::Long
while (@ARGV && ($_ = $ARGV[0]) && /^-/) {
$opt = $';
shift;
@ -105,10 +116,21 @@ while (@ARGV && ($_ = $ARGV[0]) && /^-/) {
&usage("No packages named") unless @ARGV;
# Changing dirs helps a lot when soft links are used
$current_dir = &getcwd;
if ($Stow) {
chdir($Stow) || die "Cannot chdir to target tree $Stow ($!)\n";
}
# This prevents problems if $Target was supplied as a relative path
$Stow = &getcwd;
chdir($current_dir) || die "Your directory does not seem to exist anymore ($!)\n";
$Target = &parent($Stow) unless $Target;
chdir($Target) || die "Cannot chdir to target tree $Target ($!)\n";
$Target = &fastcwd;
$Target = &getcwd;
foreach $package (@ARGV) {
$package =~ s,/+$,,; # delete trailing slashes
@ -142,6 +164,9 @@ sub CommonParent {
$result;
}
# Find the relative patch between
# two paths given as arguments.
sub RelativePath {
local($a, $b) = @_;
local($c) = &CommonParent($a, $b);
@ -149,12 +174,20 @@ sub RelativePath {
local(@b) = split(/\/+/, $b);
local(@c) = split(/\/+/, $c);
splice(@a, 0, @c + 0);
splice(@b, 0, @c + 0);
# if $c == "/something", scalar(@c) >= 2
# but if $c == "/", scalar(@c) == 0
# but we want 1
my $length = scalar(@c) ? scalar(@c) : 1;
splice(@a, 0, $length);
splice(@b, 0, $length);
unshift(@b, (('..') x (@a + 0)));
&JoinPaths(@b);
}
# Basically concatenates the paths given
# as arguments
sub JoinPaths {
local(@paths, @parts);
local ($x, $y);
@ -164,7 +197,7 @@ sub JoinPaths {
foreach $x (@_) {
@parts = split(/\/+/, $x);
foreach $y (@parts) {
push(@paths, $y) if $y;
push(@paths, $y) if ($y ne "");
}
}
$result .= join('/', @paths);
@ -178,18 +211,21 @@ sub Unstow {
local(@stowmember);
local($pure, $othercollection) = (1, '');
local($subpure, $subother);
local($empty) = (1);
local(@puresubdirs);
return (0, '') if (&JoinPaths($Target, $targetdir) eq $Stow);
return (0, '') if (-e &JoinPaths($Target, $targetdir, '.stow'));
warn sprintf("Unstowing in %s\n", &JoinPaths($Target, $targetdir))
if ($Verbose > 1);
opendir(DIR, &JoinPaths($Target, $targetdir)) ||
die "$ProgramName: Cannot read directory \"$dir\" ($!)\n";
if (!opendir(DIR, &JoinPaths($Target, $targetdir))) {
warn "Warning: $ProgramName: Cannot read directory \"$dir\" ($!). Stow might leave some links. If you think, it does. Rerun Stow with appropriate rights.\n";
}
@contents = readdir(DIR);
closedir(DIR);
foreach $content (@contents) {
next if (($content eq '.') || ($content eq '..'));
$empty = 0;
if (-l &JoinPaths($Target, $targetdir, $content)) {
($linktarget = readlink(&JoinPaths($Target,
$targetdir,
@ -240,6 +276,9 @@ sub Unstow {
$pure = 0;
}
}
# This directory was an initially empty directory therefore
# We do not remove it.
$pure = 0 if $empty;
if ((!$pure || !$targetdir) && @puresubdirs) {
&CoalesceTrees($targetdir, $stow, @puresubdirs);
}
@ -501,42 +540,6 @@ sub version {
exit(0);
}
# This is from Perl 4's fastcwd.pl, by John Bazik.
#
# Usage: $cwd = &fastcwd;
#
# This is a faster version of getcwd. It's also more dangerous
# because you might chdir out of a directory that you can't chdir back
# into.
sub fastcwd {
local($odev, $oino, $cdev, $cino, $tdev, $tino);
local(@path, $path);
local(*DIR);
($cdev, $cino) = stat('.');
for (;;) {
($odev, $oino) = ($cdev, $cino);
chdir('..');
($cdev, $cino) = stat('.');
last if $odev == $cdev && $oino == $cino;
opendir(DIR, '.');
for (;;) {
$_ = readdir(DIR);
next if $_ eq '.';
next if $_ eq '..';
last unless $_;
($tdev, $tino) = lstat($_);
last unless $tdev != $odev || $tino != $oino;
}
closedir(DIR);
unshift(@path, $_);
}
chdir($path = '/' . join('/', @path));
$path;
}
# Local variables:
# mode: perl
# End:

118
stow.info
View file

@ -1,11 +1,17 @@
This is Info file ./stow.info, produced by Makeinfo version 1.67 from
the input file stow.texi.
Ceci est le fichier Info stow.info, produit par Makeinfo version 4.0b à
partir stow.texi.
This file describes GNU Stow version 1.3.2, a program for managing
INFO-DIR-SECTION Administration
START-INFO-DIR-ENTRY
* Stow: (stow). GNU Stow.
END-INFO-DIR-ENTRY
This file describes GNU Stow version 1.3.3, a program for managing
the installation of software packages.
Software and documentation Copyright (C) 1993, 1994, 1995, 1996 by
Bob Glickstein <bobg+stow@zanshin.com>.
Bob Glickstein <bobg+stow@zanshin.com>. Copyright (C) 2000,2001
Guillaume Morin <gmorin@gnu.org>
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@ -26,7 +32,7 @@ translation approved by the Free Software Foundation.

File: stow.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
This manual describes GNU Stow 1.3.2, a program for managing the
This manual describes GNU Stow 1.3.3, a program for managing the
installation of software packages.
* Menu:
@ -43,7 +49,7 @@ installation of software packages.
* GNU General Public License:: Copying terms.
* Index:: Index of concepts.
-- The Detailed Node Listing --
--- The Detailed Node Listing ---
Caveats
@ -97,11 +103,11 @@ directory (e.g., `/usr/local/stow/emacs'), so it's always possible to
rebuild the target tree (e.g., `/usr/local').
For information about the latest version of Stow, you can refer to
http://www.gnu.ai.mit.edu/software/stow/stow.html.
http://www.gnu.org/software/stow/.
---------- Footnotes ----------
(1) As of Perl 4.036 and Emacs 19.22.
(1) As of Perl 4.036 and Emacs 19.22.

File: stow.info, Node: Terminology, Next: Invoking Stow, Prev: Introduction, Up: Top
@ -115,7 +121,7 @@ to be installed in a particular directory structure--e.g., with `bin',
`lib', and `man' subdirectories.
A "target directory" is the root of a tree in which one or more
packages wish to *appear* to be installed. A common, but by no means
packages wish to _appear_ to be installed. A common, but by no means
the only such location is `/usr/local'. The examples in this manual
will use `/usr/local' as the target directory.
@ -177,15 +183,15 @@ target directory (but they can be deleted instead using `-D').
Do not perform any operations that modify the filesystem; merely
show what would happen. Since no actual operations are performed,
`stow -n' could report conflicts when none would actually take
place (*note Conflicts::.); but it won't fail to report conflicts
that *would* take place.
place (*note Conflicts::); but it won't fail to report conflicts
that _would_ take place.
`-c'
`--conflicts'
Do not exit immediately when a conflict is encountered. This
option implies `-n', and is used to search for all conflicts that
might arise from an actual Stow operation. As with `-n', however,
false conflicts might be reported (*note Conflicts::.).
false conflicts might be reported (*note Conflicts::).
`-d DIR'
`--dir=DIR'
@ -273,7 +279,7 @@ because another package uses one or more of the folded subdirectories in
its installation image. This operation is called "splitting open" a
folded tree. It involves removing the original symlink from the target
tree, creating a true directory in its place, and then populating the
new directory with symlinks to the newly-installed package *and* to the
new directory with symlinks to the newly-installed package _and_ to the
old package that used the old symlink. For example, suppose that after
installing Perl into an empty `/usr/local', we wish to install Emacs.
Emacs's installation image includes a `bin' directory containing the
@ -288,10 +294,10 @@ directory `/usr/local/bin' is created; links are made from
When splitting open a folded tree, Stow makes sure that the symlink
it is about to remove points inside a valid package in the current stow
directory. *Stow will never delete anything that it doesn't own*.
directory. _Stow will never delete anything that it doesn't own_.
Stow "owns" everything living in the target tree that points into a
package in the stow directory. Anything Stow owns, it can recompute if
lost. Note that by this definition, Stow doesn't "own" anything *in*
lost. Note that by this definition, Stow doesn't "own" anything _in_
the stow directory or in any of the packages.
If Stow needs to create a directory or a symlink in the target tree
@ -306,13 +312,13 @@ Deleting packages
When the `-D' option is given, the action of Stow is to delete a
package from the target tree. Note that Stow will not delete anything
it doesn't "own". Deleting a package does *not* mean removing it from
it doesn't "own". Deleting a package does _not_ mean removing it from
the stow directory or discarding the package tree.
To delete a package, Stow recursively scans the target tree,
skipping over the stow directory (since that is usually a subdirectory
of the target tree) and any other stow directories it encounters (*note
Multiple stow directories::.). Any symlink it finds that points into
Multiple stow directories::). 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
@ -421,7 +427,7 @@ GNU Emacs
Although the Free Software Foundation has many enlightened practices
regarding Makefiles and software installation (see *note Other FSF
software::.), Emacs, its flagship program, doesn't quite follow the
software::), Emacs, its flagship program, doesn't quite follow the
rules. In particular, most GNU software allows you to write:
make
@ -442,7 +448,7 @@ the way to work around this problem is:
---------- Footnotes ----------
(1) As I write this, the current version of Emacs is 19.31.
(1) As I write this, the current version of Emacs is 19.31.

File: stow.info, Node: Other FSF software, Next: Cygnus software, Prev: GNU Emacs, Up: Compile-time and install-time
@ -479,7 +485,7 @@ are `gdb', `gnats', and `dejagnu'.
Cygnus packages have the peculiarity that each one unpacks into a
directory tree with a generic top-level Makefile, which is set up to
compile *all* of Cygnus' packages, any number of which may reside under
compile _all_ of Cygnus' packages, any number of which may reside under
the top-level directory. In other words, even if you're only building
`gnats', the top-level Makefile will look for, and try to build, `gdb'
and `dejagnu' subdirectories, among many others.
@ -518,7 +524,7 @@ Depot, not from AFS.
The result of this confusion is that Perl 5's configuration script
doesn't even offer the option of separating install-time and run-time
trees *unless* you're running AFS. Fortunately, after you've entered
trees _unless_ you're running AFS. Fortunately, after you've entered
all the configuration settings, Perl's setup script gives you the
opportunity to edit those settings in a file called `config.sh'. When
prompted, you should edit this file and replace occurrences of
@ -572,7 +578,7 @@ Perl 5 extensions. This way, it's easy to tell at a glance which of
the subdirectories of `/usr/local/stow' are Perl 5 extensions.
When you stow separate Perl 5 modules separately, you are likely to
encounter conflicts (*note Conflicts::.) with files named `.exists' and
encounter conflicts (*note Conflicts::) with files named `.exists' and
`perllocal.pod'. One way to work around this is to remove those files
before stowing the module. If you use the `cpan.MODULE' naming
convention, you can simply do this:
@ -592,10 +598,10 @@ software separately, or if there is any other reason to want two or more
stow directories, it can be done by creating a file named `.stow' in
each stow directory. The presence of `/usr/local/foo/.stow' informs
Stow that, though `foo' is not the current stow directory, and though
it is a subdirectory of the target directory, nevertheless it is *a*
it is a subdirectory of the target directory, nevertheless it is _a_
stow directory and as such Stow doesn't "own" anything in it (*note
Installing packages::.). This will protect the contents of `foo' from
a `stow -D', for instance.
Installing packages::). This will protect the contents of `foo' from a
`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
@ -682,7 +688,7 @@ mail. The address to use is `<bobg+stow@zanshin.com>'. Please include:
Before reporting a bug, please read the manual carefully, especially
*Note Known bugs::, and *Note Caveats::, to see whether you're
encountering something that doesn't need reporting, such as a "false
conflict" (*note Conflicts::.).
conflict" (*note Conflicts::).

File: stow.info, Node: Known bugs, Next: GNU General Public License, Prev: Reporting bugs, Up: Top
@ -690,23 +696,9 @@ File: stow.info, Node: Known bugs, Next: GNU General Public License, Prev: Re
Known bugs
**********
* The empty-directory problem. If package FOO includes an empty
directory--say, FOO/BAR--then:
1. if no other package has a BAR subdirectory, everything's fine.
2. if another stowed package, QUUX, has a BAR subdirectory, then
when stowing, TARGETDIR/BAR will be "split open" and the
contents of QUUX/BAR will be individually stowed. So far, so
good. But when unstowing QUUX, TARGETDIR/BAR will be
removed, even though FOO/BAR needs it to remain. A
workaround for this problem is to create a file in FOO/BAR as
a placeholder. If you name that file `.placeholder', it will
be easy to find and remove such files when this bug is fixed.
* When using multiple stow directories (*note Multiple stow
directories::.), Stow fails to "split open" tree-folding symlinks
(*note Installing packages::.) that point into a stow directory
directories::), Stow fails to "split open" tree-folding symlinks
(*note Installing packages::) that point into a stow directory
which is not the one in use by the current Stow command. Before
failing, it should search the target of the link to see whether
any element of the path contains a `.stow' file. If it finds one,
@ -721,7 +713,6 @@ GNU General Public License
**************************
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
@ -780,7 +771,6 @@ patent must be licensed for everyone's free use or not licensed at all.
modification follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a
notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program",
@ -1108,24 +1098,26 @@ Index

Tag Table:
Node: Top1103
Node: Introduction2273
Node: Terminology4480
Node: Invoking Stow6830
Node: Installing packages9026
Node: Deleting packages13143
Node: Caveats14294
Node: Compile-time and install-time14661
Node: GNU Emacs17963
Node: Other FSF software19013
Node: Cygnus software19769
Node: Perl and Perl 5 modules21242
Node: Multiple stow directories24792
Node: Conflicts25941
Node: Bootstrapping27099
Node: Reporting bugs27856
Node: Known bugs28737
Node: GNU General Public License30169
Node: Index49343
Node: Top1264
Node: Introduction2436
Ref: Introduction-Footnote-14584
Node: Terminology4626
Node: Invoking Stow6976
Node: Installing packages9170
Node: Deleting packages13287
Node: Caveats14437
Node: Compile-time and install-time14804
Node: GNU Emacs18106
Ref: GNU Emacs-Footnote-119090
Node: Other FSF software19154
Node: Cygnus software19910
Node: Perl and Perl 5 modules21383
Node: Multiple stow directories24932
Node: Conflicts26080
Node: Bootstrapping27238
Node: Reporting bugs27995
Node: Known bugs28875
Node: GNU General Public License29572
Node: Index48744

End Tag Table

View file

@ -7,6 +7,10 @@
@c @setchapternewpage odd
@c @footnotestyle separate
@c %**end of header
@dircategory Administration
@direntry
* Stow: (stow). GNU Stow.
@end direntry
@include version.texi
@ -16,6 +20,7 @@ managing the installation of software packages.
Software and documentation Copyright @copyright{} 1993, 1994, 1995, 1996
by Bob Glickstein <bobg+stow@@zanshin.com>.
Copyright @copyright{} 2000,2001 Guillaume Morin <gmorin@@gnu.org>
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
@ -143,7 +148,7 @@ directory (e.g., @file{/usr/local/stow/emacs}), so it's always possible
to rebuild the target tree (e.g., @file{/usr/local}).
For information about the latest version of Stow, you can refer to
http://www.gnu.ai.mit.edu/software/stow/stow.html.
http://www.gnu.org/software/stow/.
@node Terminology, Invoking Stow, Introduction, Top
@chapter Terminology
@ -765,25 +770,6 @@ something that doesn't need reporting, such as a ``false conflict''
@chapter Known bugs
@itemize @bullet
@item
The empty-directory problem. If package @var{foo} includes an empty
directory---say, @var{foo}/@var{bar}---then:
@enumerate
@item
if no other package has a @var{bar} subdirectory, everything's fine.
@item
if another stowed package, @var{quux}, has a @var{bar} subdirectory,
then when stowing, @var{targetdir}/@var{bar} will be ``split open'' and
the contents of @var{quux}/@var{bar} will be individually stowed. So
far, so good. But when unstowing @var{quux}, @var{targetdir}/@var{bar}
will be removed, even though @var{foo}/@var{bar} needs it to remain. A
workaround for this problem is to create a file in @var{foo}/@var{bar}
as a placeholder. If you name that file @file{.placeholder}, it will be
easy to find and remove such files when this bug is fixed.
@end enumerate
@item
When using multiple stow directories (@pxref{Multiple stow
directories}), Stow fails to ``split open'' tree-folding symlinks

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,4 @@
@set UPDATED 11 October 1996
@set EDITION 1.3.2
@set VERSION 1.3.2
@set UPDATED 5 January 2002
@set UPDATED-MONTH January 2002
@set EDITION 1.3.3
@set VERSION 1.3.3