--- toast 2009/05/08 22:29:30 1.466 +++ toast 2009/10/07 00:15:32 1.467 @@ -1156,7 +1156,7 @@ } if $url !~ /^(file|ssh)/; error($@) if $@ && defined($newurl); return $newurl if $newurl; - + local(*SOURCE, *DEST); explain("creating $dest"); safeopen(*DEST, ">", $dest); @@ -1271,10 +1271,10 @@ sub findrelpath($$) { my($from, $to) = @_; - + # allow last component of $to to be missing or not a directory my(@append); - if(!-d($to)) + if(!-d($to)) { push(@append, basename($to)); $to = dirname($to); @@ -2509,7 +2509,7 @@ ++$i; my($name, $version, $build, @urls) = @$_; my($margin) = " "; - ($cvi, $margin) = ($i, "0) ") + ($cvi, $margin) = ($i, "0) ") if !$cvi && $curver && $version && $curver eq $version; print("$margin$i) ", join(" ", map(substr($_, $pl, $sl ? -$sl : 9999), @urls)), "\n"); @@ -2958,7 +2958,7 @@ PATH=], quote($ENV{"PATH"}), q[ ghc-pkg "$@" --user # let --auto-ghci-libs do its thing - + for arg; do case "$arg" in -*) ;; @@ -6183,7 +6183,7 @@ "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. - + "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. @@ -6616,7 +6616,7 @@ covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. - + If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties @@ -6791,7 +6791,7 @@ =head1 NAME -toast - simple source-and-symlinks package manager for root and non-root users +toast - packageless package manager for Unix systems and non-root users =head1 SYNOPSIS @@ -6800,11 +6800,13 @@ =head1 DESCRIPTION B<toast> is a simple, self-contained tool for downloading, building, -installing, uninstalling and managing software packages. Unlike -traditional package-management systems, B<toast> is primarily intended -to work directly with software distributed as source code, rather than -in some precompiled or specialized binary format, such as RPM. Binary -packages are also supported. +installing, cleanly uninstalling, and managing software packages. +Unprivileged users can use it to install software in their home +directories. System administrators can use it to temporarily or +permanently install software system-wide in a customizable location. +Unlike traditional package-management systems, B<toast> works directly +with software distributed as source code rather than requiring precompiled +binary packages from a central authority (though it can use those too). =head2 Purpose @@ -6819,36 +6821,29 @@ =item 1. -Installing and managing software in the home directory of a non-root user -on a multi-user system. For example, I like to be able to run valgrind, -xdaliclock, Opera, and a few other programs on the Linux cluster at work -without having to bother the IT department about installing or supporting -those packages. +Installing and managing software in a non-root user's home directory. +Need to grab something recent or obscure in a hurry? You don't need +to bug your distribution's maintainers or the IT department at work, +and you don't need to build it or even find and download it yourself; +B<toast arm FOO> does it all. =item 2. -Installing and managing software packages in parallel to those installed -by a conventional package manager. For example, if I were maintaining a -computer system running some kind of mainstream Unix-like OS, it might be -convenient to be able to quickly install the latest OpenSSH from source -into C</usr/local> in order to work around a security vulnerability, -and then conveniently remove it once my vendor or distribution releases -an official package for that version. +Installing and managing software packages as root, in parallel to those +installed by a conventional package manager. For instance, I can install +the latest OpenSSH client system-wide (in C</usr/local>) with B<sudo +toast arm openssh>, then cleanly remove it after my distribution or +vendor releases an official package with B<sudo toast remove openssh>. =item 3. Installing and managing all software for an entire Unix system; that is, -using B<toast> as the one true package manager for the system. This is -what I do on my (single-user) Linux box at home. +using B<toast> as the one true package manager for the system. Not a +common use case, to be sure, but isn't it nice to know that the tool +you're using is up to the task? =back -Use #1 seems to be by far the most common in practice. As far as I know, -I'm the only one crazy enough to attempt #3, and no one bothers with #2. -In general, it's probably a good idea to use a real distribution (such -as Debian), and to use its native package management system whenever -possible, rather than using B<toast> to replace it or go behind its back. - =head2 Requirements B<toast> itself has been known to work with Perl 5.005_03 through 5.8.x @@ -6898,17 +6893,21 @@ whenever you log in. For more information, run C<toast help env>, or just C<toast env> to see what variables would be set. -To have B<toast> install itself as root under C</toast> with symlinks in -C</usr/local>, you should first either create a user called C<toast> whose -UID and GID will be used when building packages, or create a configuration -file specifying an alternate username (C<fred> in this example): +Before using B<toast> to install itself as root, it is recommended (but +not required) that you create a C<toast> user for building packages, +or create a configuration file specifying an alternate username (C<fred> +in this example): echo 'username=fred' >> /etc/toast.conf -If you want to use directories other than C</toast> and C</usr/local>, -now would be a good time to specify those as well, since relocating -armed packages can be tricky and time-consuming: +If you skip this step, B<toast> will search for an unused UID and GID, +which could conceivably cause security warnings or other problems. +If you want to use directories other than C</toast> for the package +repository and C</usr/local> for symlinks to armed packages, now would +be a good time to specify those as well, since relocating armed packages +can be tricky and time-consuming: + echo 'storedir=/path/to/use/to/store/files' >> /etc/toast.conf echo 'armdir=/place/to/put/symlinks/to/armed/packages' >> /etc/toast.conf @@ -6927,7 +6926,7 @@ script can be copied to and run from any location, and you can use B<toast man> to view the man page without having to install it first. The default option settings should be sensible, and any necessary -directories will be created on demand. +directories will be created as needed. A GNU-like C<configure> program (OK, symbolic link) is also provided with the official B<toast> distribution for your convenience. You can @@ -6935,9 +6934,10 @@ --prefix=foo>, or keep the default prefix of C</usr> by running C<./configure> without arguments. Then run C<make>, become root if necessary, and run C<make install>, which will install both the B<toast> -program and a man page. Sadly, B<toast>'s C<configure> script does -not support most of the other command-line options and features of -B<configure> scripts produced by the real GNU autoconf. +program and a man page. C<DESTDIR> also works as expected. Sadly, +B<toast>'s C<configure> script does not support most of the other +command-line options and features of B<configure> scripts produced by +the real GNU autoconf. =head2 Commands