1.\" $NetBSD: rcorder.8,v 1.3 2000/07/17 14:16:22 mrg Exp $ 2.\" 3.\" Copyright (c) 1998 4.\" Perry E. Metzger. All rights reserved. 5.\" 6.\" Redistribution and use in source and binary forms, with or without 7.\" modification, are permitted provided that the following conditions 8.\" are met: 9.\" 1. Redistributions of source code must retain the above copyright 10.\" notice, this list of conditions and the following disclaimer. 11.\" 2. Redistributions in binary form must reproduce the above copyright 12.\" notice, this list of conditions and the following disclaimer in the 13.\" documentation and/or other materials provided with the distribution. 14.\" 3. All advertising materials mentioning features or use of this software 15.\" must display the following acknowledgment: 16.\" This product includes software developed for the NetBSD Project 17.\" by Perry E. Metzger. 18.\" 4. The name of the author may not be used to endorse or promote products 19.\" derived from this software without specific prior written permission. 20.\" 21.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31.\" 32.\" $FreeBSD$ 33.\" 34.Dd June 9, 2008 35.Dt RCORDER 8 36.Os 37.Sh NAME 38.Nm rcorder 39.Nd print a dependency ordering of interdependent files 40.Sh SYNOPSIS 41.Nm 42.Op Fl k Ar keep 43.Op Fl s Ar skip 44.Ar 45.Sh DESCRIPTION 46The 47.Nm 48utility is designed to print out a dependency ordering of a set of 49interdependent files. 50Typically it is used to find an execution 51sequence for a set of shell scripts in which certain files must be 52executed before others. 53.Pp 54Each file passed to 55.Nm 56must be annotated with special lines (which look like comments to the 57shell) which indicate the dependencies the files have upon certain 58points in the sequence, known as 59.Dq conditions , 60and which indicate, for each file, which 61.Dq conditions 62may be expected to be filled by that file. 63.Pp 64Within each file, a block containing a series of 65.Dq Li REQUIRE , 66.Dq Li PROVIDE , 67.Dq Li BEFORE 68and 69.Dq Li KEYWORD 70lines must appear. 71The format of the lines is rigid. 72Each line must begin with a single 73.Ql # , 74followed by a single space, followed by 75.Dq Li PROVIDE: , 76.Dq Li REQUIRE: , 77.Dq Li BEFORE: , 78or 79.Dq Li KEYWORD: . 80No deviation is permitted. 81Each dependency line is then followed by a series of conditions, 82separated by whitespace. 83Multiple 84.Dq Li PROVIDE , 85.Dq Li REQUIRE , 86.Dq Li BEFORE 87and 88.Dq Li KEYWORD 89lines may appear, but all such lines must appear in a sequence without 90any intervening lines, as once a line that does not follow the format 91is reached, parsing stops. 92.Pp 93The options are as follows: 94.Bl -tag -width indent 95.It Fl k 96Add the specified keyword to the 97.Dq "keep list" . 98If any 99.Fl k 100option is given, only those files containing the matching keyword are listed. 101.It Fl s 102Add the specified keyword to the 103.Dq "skip list" . 104If any 105.Fl s 106option is given, files containing the matching keyword are not listed. 107.El 108.Pp 109An example block follows: 110.Bd -literal -offset indent 111# REQUIRE: networking syslog 112# REQUIRE: usr 113# PROVIDE: dns nscd 114.Ed 115.Pp 116This block states that the file in which it appears depends upon the 117.Dq Li networking , 118.Dq Li syslog , 119and 120.Dq Li usr 121conditions, and provides the 122.Dq Li dns 123and 124.Dq Li nscd 125conditions. 126.Pp 127A file may contain zero 128.Dq Li PROVIDE 129lines, in which case it provides no conditions, and may contain zero 130.Dq Li REQUIRE 131lines, in which case it has no dependencies. 132There must be at least one file with no dependencies in the set of 133arguments passed to 134.Nm 135in order for it to find a starting place in the dependency ordering. 136.Sh DIAGNOSTICS 137The 138.Nm 139utility may print one of the following error messages and exit with a non-zero 140status if it encounters an error while processing the file list. 141.Bl -diag 142.It "Requirement %s has no providers, aborting." 143No file has a 144.Dq Li PROVIDE 145line corresponding to a condition present in a 146.Dq Li REQUIRE 147line in another file. 148.It "Circular dependency on provision %s, aborting." 149A set of files has a circular dependency which was detected while 150processing the stated condition. 151.It "Circular dependency on file %s, aborting." 152A set of files has a circular dependency which was detected while 153processing the stated file. 154.El 155.Sh SEE ALSO 156.Xr rc 8 157.Sh HISTORY 158The 159.Nm 160utility first appeared in 161.Nx 1.5 . 162.Sh AUTHORS 163.An -nosplit 164Written by 165.An Perry E. Metzger Aq perry@piermont.com 166and 167.An Matthew R. Green Aq mrg@eterna.com.au . 168.Sh BUGS 169The 170.Dq Li REQUIRE 171keyword is misleading: 172It doesn't describe which daemons have to be running before a script 173will be started. 174It describes which scripts must be placed before it in 175the dependency ordering. 176For example, 177if your script has a 178.Dq Li REQUIRE 179on 180.Dq Li named , 181it means the script must be placed after the 182.Dq Li named 183script in the dependency ordering, 184not necessarily that it requires 185.Xr named 8 186to be started or enabled. 187