# regression tests for the fmt utilitiy function DATA { for f do if [[ ! -f $f ]] then case $f in big.in) for ((i = 0; i < 1024; i++)) do print -n "abcdefghijklmnop " done print ;; big.out)for ((i = 0; i < 256; i++)) do print "abcdefghijklmnop abcdefghijklmnop abcdefghijklmnop abcdefghijklmnop" done ;; esac > $f fi done } TEST 01 'basics' EXEC INPUT - $'aaa\n\nzzz' OUTPUT - $'aaa\n\nzzz' EXEC INPUT - $'aaa \n\nzzz' EXEC INPUT - $'aaa\n\nzzz ' EXEC INPUT - $'aaa\n\n zzz' OUTPUT - $'aaa\n\n zzz' EXEC INPUT -n - $'aaa' OUTPUT - $'aaa' EXEC INPUT -n - $'aaa\n\nzzz' OUTPUT - $'aaa\n\nzzz' TEST 02 'line buffer stress' DO DATA big.in big.out EXEC big.in SAME OUTPUT big.out TEST 03 '--optget' EXEC --optget INPUT - $'"[+NAME?builtin - add, delete, or display shell built-ins]" "[+DESCRIPTION?\\bbuiltin\\b can be used to add, delete, or display " "built-in commands in the current shell environment. A " "built-in command executes in the current shell process " "and can have side effects in the current shell. On most " "systems, the invocation time for built-in commands is one " "or two orders of magnitude less than commands that create " "a separate process.]" "[+?For each \\apathname\\a specified, the basename of the pathname " "determines the name of the built-in. For each basename, " "the shell looks for a C level function in the current shell " "whose name is determined by prepending \\bb_\\b to the built-in " "name. If \\apathname\\a contains a \\b/\\b, then the built-in is " "bound to this pathname. A built-in bound to a pathname will " "only be executed if \\apathname\\a is the first executable " "found during a path search. Otherwise, built-ins are found " "prior to performing the path search.]" "[+?If no \\apathname\\a operands are specified, then \\bbuiltin\\b displays " "the current list of built-ins, or just the special built-ins if " "\\b-s\\b is specified, on standard output. The full pathname for " "built-ins that are bound to pathnames are displayed.]" "[+?Libraries containing built-ins can be specified with the \\b-f\\b " "option. If the library contains a function named \\blib_init\\b(), " "this function will be invoked with argument \\b0\\b when the " "library is loaded. The \\blib_init\\b() function can load " "built-ins by invoking an appropriate C level function. In " "this case there is no restriction on the C level function name.]" "[+?The C level function will be invoked with three arguments. The first " "two are the same as \\bmain\\b() and the third one is a pointer.]" "[+?\\bbuiltin\\b cannot be invoked from a restricted shell.]" "[d?Deletes each of the specified built-ins. Special built-ins cannot " "be deleted.]" "[f]:[lib?On systems with dynamic linking, \\alib\\a names a shared library " "to load and search for built-ins. The shared library prefix and/or " "suffix, which depend on the system, can be omitted. Once a library " "is loaded, its symbols become available for the current and " "subsequent invocations of \\bbuiltin\\b. Multiple libraries can be " "specified with separate invocations of \\bbuiltin\\b. Libraries are " "searched in the reverse order in which they are specified.]" "[s?Display only the special built-ins.]"' OUTPUT - $'"[+NAME?builtin - add, delete, or display shell built-ins]" "[+DESCRIPTION?\\bbuiltin\\b can be used to add, delete, or display " "built-in commands in the current shell environment. A built-in command " "executes in the current shell process and can have side effects in the " "current shell. On most systems, the invocation time for built-in " "commands is one or two orders of magnitude less than commands that " "create a separate process.]" "[+?For each \\apathname\\a specified, the basename of the pathname " "determines the name of the built-in. For each basename, the shell looks " "for a C level function in the current shell whose name is determined by " "prepending \\bb_\\b to the built-in name. If \\apathname\\a contains a " "\\b/\\b, then the built-in is bound to this pathname. A built-in bound to " "a pathname will only be executed if \\apathname\\a is the first " "executable found during a path search. Otherwise, built-ins are found " "prior to performing the path search.]" "[+?If no \\apathname\\a operands are specified, then \\bbuiltin\\b displays " "the current list of built-ins, or just the special built-ins if \\b-s\\b " "is specified, on standard output. The full pathname for built-ins that " "are bound to pathnames are displayed.]" "[+?Libraries containing built-ins can be specified with the \\b-f\\b " "option. If the library contains a function named \\blib_init\\b(), this " "function will be invoked with argument \\b0\\b when the library is " "loaded. The \\blib_init\\b() function can load built-ins by invoking an " "appropriate C level function. In this case there is no restriction on " "the C level function name.]" "[+?The C level function will be invoked with three arguments. The first " "two are the same as \\bmain\\b() and the third one is a pointer.]" "[+?\\bbuiltin\\b cannot be invoked from a restricted shell.]" "[d?Deletes each of the specified built-ins. Special built-ins cannot be " "deleted.]" "[f]:[lib?On systems with dynamic linking, \\alib\\a names a shared " "library to load and search for built-ins. The shared library prefix " "and/or suffix, which depend on the system, can be omitted. Once a " "library is loaded, its symbols become available for the current and " "subsequent invocations of \\bbuiltin\\b. Multiple libraries can be " "specified with separate invocations of \\bbuiltin\\b. Libraries are " "searched in the reverse order in which they are specified.]" "[s?Display only the special built-ins.]"' EXEC --optget INPUT - $'"[+NAME?date - set/list/convert dates]" "[+DESCRIPTION?\\bdate\\b sets the current date and time (with appropriate" " privilege), lists the current date or file dates, or converts" " dates.]" "[+?Most common \\adate\\a forms are recognized, including those for" " \\bcrontab\\b(1), \\bls\\b(1), \\btouch\\b(1), and the default" " output from \\bdate\\b itself.]" "[+?If the \\adate\\a operand consists of 4, 6, 8, 10 or 12 digits followed" " by an optional \\b.\\b and two digits then it is interpreted as:" " \\aHHMM.SS\\a, \\addHHMM.SS\\a, \\ammddHHMM.SS\\a, \\ammddHHMMyy.SS\\a or" " \\ayymmddHHMM.SS\\a, or \\ammddHHMMccyy.SS\\a or \\accyymmddHHMM.SS\\a." " Conflicting standards and practice allow a leading or trailing" " 2 or 4 digit year for the 10 and 12 digit forms; the X/Open trailing" " form is used to disambiguate (\\btouch\\b(1) uses the leading form.)" " Avoid the 10 digit form to avoid confusion. The digit fields are:]{" " [+cc?Century - 1, 19-20.]" " [+yy?Year in century, 00-99.]" " [+mm?Month, 01-12.]" " [+dd?Day of month, 01-31.]" " [+HH?Hour, 00-23.]" " [+MM?Minute, 00-59.]" " [+SS?Seconds, 00-60.]" "}" "[+?If more than one \\adate\\a operand is specified then:]{" " [+1.?Each operand sets the reference date for the next" " operand.]" " [+2.?The date is listed for each operand.]" " [+3.?The system date is not set.]" "}" "[a:access-time|atime?List file argument access times.]" "[c:change-time|ctime?List file argument change times.]" "[d:date?Use \\adate\\a as the current date and do not set the system" " clock.]:[date]" "[e:epoch?Output the date in seconds since the epoch." " Equivalent to \\b--format=%#\\b.]" "[E:elapsed?Interpret pairs of arguments as start and stop dates, sum the" " differences between all pairs, and list the result as a" " \\bfmtelapsed\\b(3) elapsed time on the standard output. If there are" " an odd number of arguments then the last time argument is differenced" " with the current time.]" "[f:format?Output the date according to the \\bstrftime\\b(3) \\aformat\\a." " For backwards compatibility, a first argument of the form" " \\b+\\b\\aformat\\a is equivalent to \\b-f\\b format." " \\aformat\\a is in \\bprintf\\b(3) style, where %\\afield\\a names" " fixed size field, zero padded if necessary," " and \\\\\\ac\\a and \\\\\\annn\\a sequences are as in C. Invalid" " %\\afield\\a specifications and all other characters are copied" " without change. \\afield\\a may be preceded by \\b%-\\b to turn off" " padding or \\b%_\\b to pad with space, otherwise numeric fields" " are padded with \\b0\\b and string fields are padded with space." " \\afield\\a may also be preceded by \\bE\\b for alternate era" " representation or \\bO\\b for alternate digit representation (if" " supported by the current locale.) The fields are:]:[format]{" " [+%?% character]" " [+a?abbreviated weekday name]" " [+A?full weekday name]" " [+b?abbreviated month name]" " [+c?\\bctime\\b(3) style date without the trailing newline]" " [+C?2-digit century]" " [+d?day of month number]" " [+D?date as \\amm/dd/yy\\a]" " [+e?blank padded day of month number]" " [+E?unpadded day of month number]" " [+f?locale default override date format]" " [+F?locale default date format]" " [+g?\\bls\\b(1) \\b-l\\b recent date with \\ahh:mm\\a]" " [+G?\\bls\\b(1) \\b-l\\b distant date with \\ayyyy\\a]" " [+h?abbreviated month name]" " [+H?24-hour clock hour]" " [+i?international \\bdate\\b(1) date with time zone type name]" " [+I?12-hour clock hour]" " [+j?1-offset Julian date]" " [+J?0-offset Julian date]" " [+k?\\bdate\\b(1) style date]" " [+K?all numeric date; equivalent to \\b%Y-%m-%d+%H:%M:%S\\b]" " [+l?\\bls\\b(1) \\b-l\\b date; equivalent to \\b%Q/%g/%G/\\b]" " [+m?month number]" " [+M?minutes]" " [+n?newline character]" " [+N?time zone type name]" " [+p?meridian (e.g., \\bAM\\b or \\bPM\\b)]" " [+Q?\\a<del>recent<del>distant<del>\\a: \\a<del>\\a is a unique" " delimter character; \\arecent\\a format for recent" " dates, \\adistant\\a format otherwise]" " [+r?12-hour time as \\ahh:mm:ss meridian\\a]" " [+R?24-hour time as \\ahh:mm\\a]" " [+s?number of seconds since the epoch]" " [+S?seconds]" " [+t?tab character]" " [+T?24-hour time as \\ahh:mm:ss\\a]" " [+u?weekday number 1(Monday)-7]" " [+U?week number with Sunday as the first day]" " [+V?ISO week number (i18n is \\afun\\a)]" " [+w?weekday number 0(Sunday)-6]" " [+W?week number with Monday as the first day]" " [+x?locale date style that includes month, day and year]" " [+X?locale time style that includes hours and minutes]" " [+y?2-digit year (you\'ll be sorry)]" " [+Y?4-digit year]" " [+z?time zone \\aSHHMM\\a west of GMT offset where S is" " \\b+\\b or \\b-\\b]" " [+Z?time zone name]" " [++|!flag?set (+) or clear (!) \\aflag\\a for the remainder" " of \\aformat\\a. \\aflag\\a may be:]{" " [+l?enable leap second adjustments]" " [+u?UTC time zone]" " }" " [+#?number of seconds since the epoch]" " [+??alternate?use \\aalternate\\a format if a default format" " override has not been specified, e.g., \\bls\\b(1) uses" " \\"%?%l\\"; export TM_OPTIONS=\\"format=\'\\aoverride\\a\'\\"" " to override the default]" "}" "[i:incremental|adjust?Set the system time in incrementatl adjustments to" " avoid complete time shift shock. Negative adjustments still maintain" " monotonic increasing time. Not available on all systems.]" "[l:leap-seconds?Include leap seconds in time calculations. Leap seconds" " after the ast library release date are not accounted for.]" "[m:modify-time|mtime?List file argument modify times.]" "[n!:network?Set network time.]" "[p:parse?Add \\aformat\\a to the list of \\bstrptime\\b(3) parse conversion" " formats. \\aformat\\a follows the same conventions as the" " \\b--format\\b option, with the addition of these format" " fields:]:[format]{" " [+|?If the format failed before this point then restart" " the parse with the remaining format.]" " [+&?Call the \\btmdate\\b(3) heuristic parser. This is" " is the default when \\b--parse\\b is omitted.]" "}" "[s:show?Show the date without setting the system time.]" "[u:utc|gmt|zulu?Output dates in \\acoordinated universal time\\a (UTC).]"' OUTPUT - $'"[+NAME?date - set/list/convert dates]" "[+DESCRIPTION?\\bdate\\b sets the current date and time (with appropriate " "privilege), lists the current date or file dates, or converts dates.]" "[+?Most common \\adate\\a forms are recognized, including those for " "\\bcrontab\\b(1), \\bls\\b(1), \\btouch\\b(1), and the default output from " "\\bdate\\b itself.]" "[+?If the \\adate\\a operand consists of 4, 6, 8, 10 or 12 digits " "followed by an optional \\b.\\b and two digits then it is interpreted as: " "\\aHHMM.SS\\a, \\addHHMM.SS\\a, \\ammddHHMM.SS\\a, \\ammddHHMMyy.SS\\a or " "\\ayymmddHHMM.SS\\a, or \\ammddHHMMccyy.SS\\a or \\accyymmddHHMM.SS\\a. " "Conflicting standards and practice allow a leading or trailing 2 or 4 " "digit year for the 10 and 12 digit forms; the X/Open trailing form is " "used to disambiguate (\\btouch\\b(1) uses the leading form.) Avoid the 10 " "digit form to avoid confusion. The digit fields are:]" "{" "[+cc?Century - 1, 19-20.]" "[+yy?Year in century, 00-99.]" "[+mm?Month, 01-12.]" "[+dd?Day of month, 01-31.]" "[+HH?Hour, 00-23.]" "[+MM?Minute, 00-59.]" "[+SS?Seconds, 00-60.]" "}" "[+?If more than one \\adate\\a operand is specified then:]" "{" "[+1.?Each operand sets the reference date for the next " "operand.]" "[+2.?The date is listed for each operand.]" "[+3.?The system date is not set.]" "}" "[a:access-time|atime?List file argument access times.]" "[c:change-time|ctime?List file argument change times.]" "[d:date?Use \\adate\\a as the current date and do not set the system " "clock.]:[date]" "[e:epoch?Output the date in seconds since the epoch. Equivalent to " "\\b--format=%#\\b.]" "[E:elapsed?Interpret pairs of arguments as start and stop dates, sum " "the differences between all pairs, and list the result as a " "\\bfmtelapsed\\b(3) elapsed time on the standard output. If there are an " "odd number of arguments then the last time argument is differenced with " "the current time.]" "[f:format?Output the date according to the \\bstrftime\\b(3) \\aformat\\a. " "For backwards compatibility, a first argument of the form " "\\b+\\b\\aformat\\a is equivalent to \\b-f\\b format. \\aformat\\a is in " "\\bprintf\\b(3) style, where %\\afield\\a names fixed size field, zero " "padded if necessary, and \\\\\\ac\\a and \\\\\\annn\\a sequences are as in C. " "Invalid %\\afield\\a specifications and all other characters are copied " "without change. \\afield\\a may be preceded by \\b%-\\b to turn off padding " "or \\b%_\\b to pad with space, otherwise numeric fields are padded with " "\\b0\\b and string fields are padded with space. \\afield\\a may also be " "preceded by \\bE\\b for alternate era representation or \\bO\\b for " "alternate digit representation (if supported by the current locale.) " "The fields are:]:[format]" "{" "[+%?% character]" "[+a?abbreviated weekday name]" "[+A?full weekday name]" "[+b?abbreviated month name]" "[+c?\\bctime\\b(3) style date without the trailing newline]" "[+C?2-digit century]" "[+d?day of month number]" "[+D?date as \\amm/dd/yy\\a]" "[+e?blank padded day of month number]" "[+E?unpadded day of month number]" "[+f?locale default override date format]" "[+F?locale default date format]" "[+g?\\bls\\b(1) \\b-l\\b recent date with \\ahh:mm\\a]" "[+G?\\bls\\b(1) \\b-l\\b distant date with \\ayyyy\\a]" "[+h?abbreviated month name]" "[+H?24-hour clock hour]" "[+i?international \\bdate\\b(1) date with time zone type name]" "[+I?12-hour clock hour]" "[+j?1-offset Julian date]" "[+J?0-offset Julian date]" "[+k?\\bdate\\b(1) style date]" "[+K?all numeric date; equivalent to \\b%Y-%m-%d+%H:%M:%S\\b]" "[+l?\\bls\\b(1) \\b-l\\b date; equivalent to \\b%Q/%g/%G/\\b]" "[+m?month number]" "[+M?minutes]" "[+n?newline character]" "[+N?time zone type name]" "[+p?meridian (e.g., \\bAM\\b or \\bPM\\b)]" "[+Q?\\a<del>recent<del>distant<del>\\a: \\a<del>\\a is a unique " "delimter character; \\arecent\\a format for recent dates, " "\\adistant\\a format otherwise]" "[+r?12-hour time as \\ahh:mm:ss meridian\\a]" "[+R?24-hour time as \\ahh:mm\\a]" "[+s?number of seconds since the epoch]" "[+S?seconds]" "[+t?tab character]" "[+T?24-hour time as \\ahh:mm:ss\\a]" "[+u?weekday number 1(Monday)-7]" "[+U?week number with Sunday as the first day]" "[+V?ISO week number (i18n is \\afun\\a)]" "[+w?weekday number 0(Sunday)-6]" "[+W?week number with Monday as the first day]" "[+x?locale date style that includes month, day and year]" "[+X?locale time style that includes hours and minutes]" "[+y?2-digit year (you\'ll be sorry)]" "[+Y?4-digit year]" "[+z?time zone \\aSHHMM\\a west of GMT offset where S is \\b+\\b or " "\\b-\\b]" "[+Z?time zone name]" "[++|!flag?set (+) or clear (!) \\aflag\\a for the remainder of " "\\aformat\\a. \\aflag\\a may be:]" "{" "[+l?enable leap second adjustments]" "[+u?UTC time zone]" "}" "[+#?number of seconds since the epoch]" "[+??alternate?use \\aalternate\\a format if a default format " "override has not been specified, e.g., \\bls\\b(1) uses \\"%?%l\\"; " "export TM_OPTIONS=\\"format=\'\\aoverride\\a\'\\" to override the " "default]" "}" "[i:incremental|adjust?Set the system time in incrementatl adjustments " "to avoid complete time shift shock. Negative adjustments still maintain " "monotonic increasing time. Not available on all systems.]" "[l:leap-seconds?Include leap seconds in time calculations. Leap seconds " "after the ast library release date are not accounted for.]" "[m:modify-time|mtime?List file argument modify times.]" "[n!:network?Set network time.]" "[p:parse?Add \\aformat\\a to the list of \\bstrptime\\b(3) parse conversion " "formats. \\aformat\\a follows the same conventions as the \\b--format\\b " "option, with the addition of these format fields:]:[format]" "{" "[+|?If the format failed before this point then restart the " "parse with the remaining format.]" "[+&?Call the \\btmdate\\b(3) heuristic parser. This is is the " "default when \\b--parse\\b is omitted.]" "}" "[s:show?Show the date without setting the system time.]" "[u:utc|gmt|zulu?Output dates in \\acoordinated universal time\\a (UTC).]"' EXEC --optget INPUT - $'[+NAME?date - set/list/convert dates] [+DESCRIPTION?\\bdate\\b sets the current date and time (with appropriate privilege), lists the current date or file dates, or converts dates.] [+?Most common \\adate\\a forms are recognized, including those for \\bcrontab\\b(1), \\bls\\b(1), \\btouch\\b(1), and the default output from \\bdate\\b itself.] [+?If the \\adate\\a operand consists of 4, 6, 8, 10 or 12 digits followed by an optional \\b.\\b and two digits then it is interpreted as: \\aHHMM.SS\\a, \\addHHMM.SS\\a, \\ammddHHMM.SS\\a, \\ammddHHMMyy.SS\\a or \\ayymmddHHMM.SS\\a, or \\ammddHHMMccyy.SS\\a or \\accyymmddHHMM.SS\\a. Conflicting standards and practice allow a leading or trailing 2 or 4 digit year for the 10 and 12 digit forms; the X/Open trailing form is used to disambiguate (\\btouch\\b(1) uses the leading form.) Avoid the 10 digit form to avoid confusion. The digit fields are:]{ [+cc?Century - 1, 19-20.] [+yy?Year in century, 00-99.] [+mm?Month, 01-12.] [+dd?Day of month, 01-31.] [+HH?Hour, 00-23.] [+MM?Minute, 00-59.] [+SS?Seconds, 00-60.] } [+?If more than one \\adate\\a operand is specified then:]{ [+1.?Each operand sets the reference date for the next operand.] [+2.?The date is listed for each operand.] [+3.?The system date is not set.] } [a:access-time|atime?List file argument access times.] [c:change-time|ctime?List file argument change times.] [d:date?Use \\adate\\a as the current date and do not set the system clock.]:[date] [e:epoch?Output the date in seconds since the epoch. Equivalent to \\b--format=%#\\b.] [E:elapsed?Interpret pairs of arguments as start and stop dates, sum the differences between all pairs, and list the result as a \\bfmtelapsed\\b(3) elapsed time on the standard output. If there are an odd number of arguments then the last time argument is differenced with the current time.] [f:format?Output the date according to the \\bstrftime\\b(3) \\aformat\\a. For backwards compatibility, a first argument of the form \\b+\\b\\aformat\\a is equivalent to \\b-f\\b format. \\aformat\\a is in \\bprintf\\b(3) style, where %\\afield\\a names fixed size field, zero padded if necessary, and \\\\\\ac\\a and \\\\\\annn\\a sequences are as in C. Invalid %\\afield\\a specifications and all other characters are copied without change. \\afield\\a may be preceded by \\b%-\\b to turn off padding or \\b%_\\b to pad with space, otherwise numeric fields are padded with \\b0\\b and string fields are padded with space. \\afield\\a may also be preceded by \\bE\\b for alternate era representation or \\bO\\b for alternate digit representation (if supported by the current locale.) The fields are:]:[format]{ [+%?% character] [+a?abbreviated weekday name] [+A?full weekday name] [+b?abbreviated month name] [+c?\\bctime\\b(3) style date without the trailing newline] [+C?2-digit century] [+d?day of month number] [+D?date as \\amm/dd/yy\\a] [+e?blank padded day of month number] [+E?unpadded day of month number] [+f?locale default override date format] [+F?locale default date format] [+g?\\bls\\b(1) \\b-l\\b recent date with \\ahh:mm\\a] [+G?\\bls\\b(1) \\b-l\\b distant date with \\ayyyy\\a] [+h?abbreviated month name] [+H?24-hour clock hour] [+i?international \\bdate\\b(1) date with time zone type name] [+I?12-hour clock hour] [+j?1-offset Julian date] [+J?0-offset Julian date] [+k?\\bdate\\b(1) style date] [+K?all numeric date; equivalent to \\b%Y-%m-%d+%H:%M:%S\\b] [+l?\\bls\\b(1) \\b-l\\b date; equivalent to \\b%Q/%g/%G/\\b] [+m?month number] [+M?minutes] [+n?newline character] [+N?time zone type name] [+p?meridian (e.g., \\bAM\\b or \\bPM\\b)] [+Q?\\a<del>recent<del>distant<del>\\a: \\a<del>\\a is a unique delimter character; \\arecent\\a format for recent dates, \\adistant\\a format otherwise] [+r?12-hour time as \\ahh:mm:ss meridian\\a] [+R?24-hour time as \\ahh:mm\\a] [+s?number of seconds since the epoch] [+S?seconds] [+t?tab character] [+T?24-hour time as \\ahh:mm:ss\\a] [+u?weekday number 1(Monday)-7] [+U?week number with Sunday as the first day] [+V?ISO week number (i18n is \\afun\\a)] [+w?weekday number 0(Sunday)-6] [+W?week number with Monday as the first day] [+x?locale date style that includes month, day and year] [+X?locale time style that includes hours and minutes] [+y?2-digit year (you\'ll be sorry)] [+Y?4-digit year] [+z?time zone \\aSHHMM\\a west of GMT offset where S is \\b+\\b or \\b-\\b] [+Z?time zone name] [++|!flag?set (+) or clear (!) \\aflag\\a for the remainder of \\aformat\\a. \\aflag\\a may be:]{ [+l?enable leap second adjustments] [+u?UTC time zone] } [+#?number of seconds since the epoch] [+??alternate?use \\aalternate\\a format if a default format override has not been specified, e.g., \\bls\\b(1) uses "%?%l"; export TM_OPTIONS="format=\'\\aoverride\\a\'" to override the default] } [i:incremental|adjust?Set the system time in incrementatl adjustments to avoid complete time shift shock. Negative adjustments still maintain monotonic increasing time. Not available on all systems.] [l:leap-seconds?Include leap seconds in time calculations. Leap seconds after the ast library release date are not accounted for.] [m:modify-time|mtime?List file argument modify times.] [n!:network?Set network time.] [p:parse?Add \\aformat\\a to the list of \\bstrptime\\b(3) parse conversion formats. \\aformat\\a follows the same conventions as the \\b--format\\b option, with the addition of these format fields:]:[format]{ [+|?If the format failed before this point then restart the parse with the remaining format.] [+&?Call the \\btmdate\\b(3) heuristic parser. This is is the default when \\b--parse\\b is omitted.] } [s:show?Show the date without setting the system time.] [u:utc|gmt|zulu?Output dates in \\acoordinated universal time\\a (UTC).]' OUTPUT - $'[+NAME?date - set/list/convert dates] [+DESCRIPTION?\\bdate\\b sets the current date and time (with appropriate privilege), lists the current date or file dates, or converts dates.] [+?Most common \\adate\\a forms are recognized, including those for \\bcrontab\\b(1), \\bls\\b(1), \\btouch\\b(1), and the default output from \\bdate\\b itself.] [+?If the \\adate\\a operand consists of 4, 6, 8, 10 or 12 digits followed by an optional \\b.\\b and two digits then it is interpreted as: \\aHHMM.SS\\a, \\addHHMM.SS\\a, \\ammddHHMM.SS\\a, \\ammddHHMMyy.SS\\a or \\ayymmddHHMM.SS\\a, or \\ammddHHMMccyy.SS\\a or \\accyymmddHHMM.SS\\a. Conflicting standards and practice allow a leading or trailing 2 or 4 digit year for the 10 and 12 digit forms; the X/Open trailing form is used to disambiguate (\\btouch\\b(1) uses the leading form.) Avoid the 10 digit form to avoid confusion. The digit fields are:] { [+cc?Century - 1, 19-20.] [+yy?Year in century, 00-99.] [+mm?Month, 01-12.] [+dd?Day of month, 01-31.] [+HH?Hour, 00-23.] [+MM?Minute, 00-59.] [+SS?Seconds, 00-60.] } [+?If more than one \\adate\\a operand is specified then:] { [+1.?Each operand sets the reference date for the next operand.] [+2.?The date is listed for each operand.] [+3.?The system date is not set.] } [a:access-time|atime?List file argument access times.] [c:change-time|ctime?List file argument change times.] [d:date?Use \\adate\\a as the current date and do not set the system clock.]:[date] [e:epoch?Output the date in seconds since the epoch. Equivalent to \\b--format=%#\\b.] [E:elapsed?Interpret pairs of arguments as start and stop dates, sum the differences between all pairs, and list the result as a \\bfmtelapsed\\b(3) elapsed time on the standard output. If there are an odd number of arguments then the last time argument is differenced with the current time.] [f:format?Output the date according to the \\bstrftime\\b(3) \\aformat\\a. For backwards compatibility, a first argument of the form \\b+\\b\\aformat\\a is equivalent to \\b-f\\b format. \\aformat\\a is in \\bprintf\\b(3) style, where %\\afield\\a names fixed size field, zero padded if necessary, and \\\\\\ac\\a and \\\\\\annn\\a sequences are as in C. Invalid %\\afield\\a specifications and all other characters are copied without change. \\afield\\a may be preceded by \\b%-\\b to turn off padding or \\b%_\\b to pad with space, otherwise numeric fields are padded with \\b0\\b and string fields are padded with space. \\afield\\a may also be preceded by \\bE\\b for alternate era representation or \\bO\\b for alternate digit representation (if supported by the current locale.) The fields are:]:[format] { [+%?% character] [+a?abbreviated weekday name] [+A?full weekday name] [+b?abbreviated month name] [+c?\\bctime\\b(3) style date without the trailing newline] [+C?2-digit century] [+d?day of month number] [+D?date as \\amm/dd/yy\\a] [+e?blank padded day of month number] [+E?unpadded day of month number] [+f?locale default override date format] [+F?locale default date format] [+g?\\bls\\b(1) \\b-l\\b recent date with \\ahh:mm\\a] [+G?\\bls\\b(1) \\b-l\\b distant date with \\ayyyy\\a] [+h?abbreviated month name] [+H?24-hour clock hour] [+i?international \\bdate\\b(1) date with time zone type name] [+I?12-hour clock hour] [+j?1-offset Julian date] [+J?0-offset Julian date] [+k?\\bdate\\b(1) style date] [+K?all numeric date; equivalent to \\b%Y-%m-%d+%H:%M:%S\\b] [+l?\\bls\\b(1) \\b-l\\b date; equivalent to \\b%Q/%g/%G/\\b] [+m?month number] [+M?minutes] [+n?newline character] [+N?time zone type name] [+p?meridian (e.g., \\bAM\\b or \\bPM\\b)] [+Q?\\a<del>recent<del>distant<del>\\a: \\a<del>\\a is a unique delimter character; \\arecent\\a format for recent dates, \\adistant\\a format otherwise] [+r?12-hour time as \\ahh:mm:ss meridian\\a] [+R?24-hour time as \\ahh:mm\\a] [+s?number of seconds since the epoch] [+S?seconds] [+t?tab character] [+T?24-hour time as \\ahh:mm:ss\\a] [+u?weekday number 1(Monday)-7] [+U?week number with Sunday as the first day] [+V?ISO week number (i18n is \\afun\\a)] [+w?weekday number 0(Sunday)-6] [+W?week number with Monday as the first day] [+x?locale date style that includes month, day and year] [+X?locale time style that includes hours and minutes] [+y?2-digit year (you\'ll be sorry)] [+Y?4-digit year] [+z?time zone \\aSHHMM\\a west of GMT offset where S is \\b+\\b or \\b-\\b] [+Z?time zone name] [++|!flag?set (+) or clear (!) \\aflag\\a for the remainder of \\aformat\\a. \\aflag\\a may be:] { [+l?enable leap second adjustments] [+u?UTC time zone] } [+#?number of seconds since the epoch] [+??alternate?use \\aalternate\\a format if a default format override has not been specified, e.g., \\bls\\b(1) uses "%?%l"; export TM_OPTIONS="format=\'\\aoverride\\a\'" to override the default] } [i:incremental|adjust?Set the system time in incrementatl adjustments to avoid complete time shift shock. Negative adjustments still maintain monotonic increasing time. Not available on all systems.] [l:leap-seconds?Include leap seconds in time calculations. Leap seconds after the ast library release date are not accounted for.] [m:modify-time|mtime?List file argument modify times.] [n!:network?Set network time.] [p:parse?Add \\aformat\\a to the list of \\bstrptime\\b(3) parse conversion formats. \\aformat\\a follows the same conventions as the \\b--format\\b option, with the addition of these format fields:]:[format] { [+|?If the format failed before this point then restart the parse with the remaining format.] [+&?Call the \\btmdate\\b(3) heuristic parser. This is is the default when \\b--parse\\b is omitted.] } [s:show?Show the date without setting the system time.] [u:utc|gmt|zulu?Output dates in \\acoordinated universal time\\a (UTC).]' EXEC --optget INPUT - $'[+DESCRIPTION?The \\bpackage\\b command controls source and binary packages. It is a \\bsh\\b(1) script coded for maximal portability. All package files are in the \\b$PACKAGEROOT\\b directory tree. \\b$PACKAGEROOT\\b must at minumum contain a \\bbin/package\\b command or a \\blib/package\\b directory. Binary package files are in the \\b$INSTALLROOT\\b (\\b$PACKAGEROOT/arch/\\b\\ahosttype\\a) tree, where \\ahosttpe\\a=`\\bpackage\\b`. All \\aactions\\a but \\bhost\\b and \\buse\\b require the current directory to be under \\b$PACKAGEROOT\\b. See \\bDETAILS\\b for more information.] [+?Note that no environment variables need be set by the user; \\bpackage\\b determines the environment based on the current working directory. The \\buse\\b action starts a \\bsh\\b(1) with the environment initialized. \\bCC\\b, \\bCCFLAGS\\b, \\bHOSTTYPE\\b and \\bSHELL\\b may be set by explicit command argument assignments to override the defaults.] [+?Packages are composed of components. Each component is built and installed by an \\bast\\b \\bnmake\\b(1) makefile. Each package is also described by an \\bnmake\\b makefile that lists its components and provides a content description. The package makefile and component makefiles provide all the information required to read, write, build and install packages.] [+?Package recipients only need \\bsh\\b(1) and \\bcc\\b(1) to build and install source packages, and \\bsh\\b to install binary packages. \\bnmake\\b and \\bksh93\\b are required to write new packages. An \\b$INSTALLROOT/bin/cc\\b script may be supplied for some architectures. This script supplies a reasonable set of default options for compilers that accept multiple dialects or generate multiple object/executable formats.] [+?The command arguments are composed of a sequence of words: zero or more \\aqualifiers\\a, one \\aaction\\a, and zero or more action-specific \\aarguments\\a, and zero or more \\aname=value\\a definitions. \\apackage\\a names a particular package. The naming scheme is a \\b-\\b separated hierarchy; the leftmost parts describe ownership, e.g., \\bgnu-fileutils\\b, \\bast-base\\b. If no packages are specified then all packages are operated on. \\boptget\\b(3) documentation options are also supported. The default with no arguments is \\bhost type\\b.] [+?The qualifiers are:] { [+debug|environment?Show environment and actions but do not execute.] [+flat?Collapse \\b$INSTALLROOT\\b { bin fun include lib } onto \\b$PACKAGEROOT\\b.] [+force?Force the action to override saved state.] [+never?Run make -N and show other actions.] [+only?Only operate on the specified packages.] [+quiet?Do not list captured action output.] [+show?Run make -n and show other actions.] [+verbose?Provide detailed action output.] [+DEBUG?Trace the package script actions in detail.] } [+?The actions are:] { [+admin\\b [\\ball\\b]] [\\bdb\\b \\afile\\a]] [\\bon\\b \\apattern\\a]] [\\aaction\\a ...]]?Apply \\aaction\\a ... to the hosts listed in \\afile\\a. If \\afile\\a is omitted then \\badmin.db\\b is assumed. The caller must have \\brcp\\b(1) and \\brsh\\b(1) or \\bscp\\b(1) and \\bssh\\b(1) access to the hosts. Output for \\aaction\\a is saved per-host in the file \\aaction\\a\\b.log/\\b\\ahost\\a. Logs can be viewed by \\bpackage admin\\b [\\bon\\b \\ahost\\a]] \\bresults\\b [\\aaction\\a]]. By default only local PACKAGEROOT hosts are selected from \\afile\\a; \\ball\\b selects all hosts. \\bon\\b \\apattern\\a selects only hosts matching the \\b|\\b separated \\apattern\\a. \\afile\\a contains four types of lines. Blank lines and lines beginning with \\b#\\b are ignored. Lines starting with \\aid\\a=\\avalue\\a are variable assignments. Set admin_ping to local conventions if \\"\'$admin_ping$\'\\" fails. If a package list is not specified on the command line the \\aaction\\a applies to all packages; a variable assigment \\bpackage\\b=\\"\\alist\\a\\" applies \\aaction\\a to the packages in \\alist\\a for subsequent hosts in \\afile\\a. The remaining line type is a host description consisting of 6 tab separated fields. The first 3 are mandatory; the remaining 3 are updated by the \\badmin\\b action. \\afile\\a is saved in \\afile\\a\\b.old\\b before update. The fields are:] { [+hosttype?The host type as reported by \\"\\bpackage\\b\\".] [+[user@]]host?The host name and optionally user name for \\brcp\\b(1) and \\brsh\\b(1) access.] [+[remote::]]PACKAGEROOT?The absolute remote package root directory and optionally the remote protocol (rsh or ssh) if the directory is on a different server than the master package root directory. If \\blib/package/admin/\'$admin_env$\'\\b exists under this directory then it is sourced by \\bsh\\b(1) before \\aaction\\a is done. If this field begins with \\b-\\b then the host is ignored. If this field contains \\b:\\b then \\bditto\\b(1) is used to sync the remote \\bsrc\\b directory hierarchy to the local one. These directories must exist on the remote side: \\blib/package\\b, \\bsrc/cmd\\b, \\bsrc/lib\\b.] [+date?\\aYYMMDD\\a of the last action.] [+time?Elapsed wall time for the last action.] [+M T W?The \\badmin\\b action \\bmake\\b, \\btest\\b and \\bwrite\\b action error counts. A non-numeric value in any of these fields disables the corresponding action.] } [+contents\\b [ \\apackage\\a ... ]]?List description and components for \\apackage\\a on the standard output.] [+copyright\\b [ \\apackage\\a ... ]]?List the general copyright notice(s) for \\apackage\\a on the standard output. Note that individual components in \\apackage\\a may contain additional or replacement notices.] [+export\\b \\avariable\\a ...?List \\aname\\a=\\avalue\\a for \\avariable\\a, one per line. If the \\bonly\\b attribute is specified then only the variable values are listed.] [+help\\b [ \\aaction\\a ]]?Display help text on the standard error (standard output for \\aaction\\a).] [+host\\b [ \\aattribute\\a ... ]]?List architecture/implementation dependent host information on the standard output. \\btype\\b is listed if no attributes are specified. Information is listed on a single line in \\aattribute\\a order. The attributes are:] { [+canon \\aname\\a?An external host type name to be converted to \\bpackage\\b syntax.] [+cpu?The number of cpus; 1 if the host is not a multiprocessor.] [+name?The host name.] [+rating?The cpu rating in pseudo mips; the value is useful useful only in comparisons with rating values of other hosts. Other than a vax rating (mercifully) fixed at 1, ratings can vary wildly but consistently from vendor mips ratings. \\bcc\\b(1) may be required to determine the rating.] [+type?The host type, usually in the form \\avendor\\a.\\aarchitecture\\a, with an optional trailing -\\aversion\\a. The main theme is that type names within a family of architectures are named in a similar, predictable style. OS point release information is avoided as much as possible, but vendor resistance to release incompatibilities has for the most part been futile.] } [+html\\b [ \\aaction\\a ]]?Display html help text on the standard error (standard output for \\aaction\\a).] [+install\\b [ flat ]] [ \\aarchitecture\\a ... ]] \\adirectory\\a [ \\apackage\\a ... ]]?Copy the package binary hierarchy to \\adirectory\\a. If \\aarchitecture\\a is omitted then all architectures are installed. If \\bflat\\b is specified then exactly one \\aarchitecture\\a must be specified; this architecture will be installed in \\adirectory\\a without the \\barch/\\b\\aHOSTTYPE\\a directory prefixes. Otherwise each architecture will be installed in a separate \\barch/\\b\\aHOSTTYPE\\a subdirectory of \\adirectory\\a. The \\aarchitecture\\a \\b-\\b names the current architecture. \\adirectory\\a must be an existing directory. If \\apackage\\a is omitted then all binary packages are installed. This action requires \\bnmake\\b.] [+license\\b [ \\apackage\\a ... ]]?List the source license(s) for \\apackage\\a on the standard output. Note that individual components in \\apackage\\a may contain additional or replacement licenses.] [+list\\b [ \\apackage\\a ... ]]?List the name, version and prerequisites for \\apackage\\a on the standard output.] [+make\\b [ \\apackage\\a ]] [ \\atarget\\a ... ]]?Build and install. The default \\atarget\\a is \\binstall\\b, which makes and installs \\apackage\\a. If the standard output is a terminal then the output is also captured in \\b$INSTALLROOT/lib/package/gen/make.out\\b. The build is done in the \\b$INSTALLROOT\\b directory tree viewpathed on top of the \\b$PACKAGEROOT\\b directory tree. If \\bflat\\b is specified then the \\b$INSTALLROOT\\b { bin fun include lib } directories are linked to the same directories in the package root. Only one architecture may be \\bflat\\b. Leaf directory names matching the \\b|\\b-separated shell pattern \\b$MAKESKIP\\b are ignored. The \\bview\\b action is done before making.] [+read\\b [ \\apackage\\a ... | \\aarchive\\a ... ]]?Read the named package or archive(s). Must be run from the package root directory. Archives are searched for in \\b.\\b and \\blib/package/tgz\\b. Each package archive is read only once. The file \\blib/package/tgz/\\b\\apackage\\a[.\\atype\\a]]\\b.tim\\b tracks the read time. See the \\bwrite\\b action for archive naming conventions. Text file archive member are assumed to be ASCII or UTF-8 encoded.] [+regress?\\bdiff\\b(1) the current and previous \\bpackage test\\b results.] [+release\\b [ [\\aCC\\a]]\\aYY-MM-DD\\a [ [\\acc\\a]]\\ayy-mm-dd\\a ]] ]] [ \\apackage\\a ]]?Display recent changes for the date range [\\aCC\\a]]\\aYY-MM-DD\\a (up to [\\acc\\a]]\\ayy-mm-dd\\a.), where \\b-\\b means lowest (or highest.) If no dates are specified then changes for the last 4 months are listed. \\apackage\\a may be a package or component name.] [+remove\\b [ \\apackage\\a ]]?Remove files installed for \\apackage\\a.] [+results\\b [ \\bfailed\\b ]] [ \\bpath\\b ]] [ \\bold\\b ]] [ \\bmake\\b | \\btest\\b | \\bwrite\\b ]]?List results and interesting messages captured by the most recent \\bmake\\b (default), \\btest\\b or \\bwrite\\b action. \\bold\\b specifies the previous results, if any (current and previous results are retained.) \\b$HOME/.pkgresults\\b, if it exists, must contain an \\begrep\\b(1) expression of result lines to be ignored. \\bfailed\\b lists failures only and \\bpath\\b lists the results file path name only.] [+setup\\b [ beta ]] [ binary ]] [ source ]] [ url \\aalias\\a ]] [ \\aarchitecture\\a ... ]] [ \\aurl\\a ]] [ \\apackage\\a ... ]]?This action initializes the current directory as a package root, runs the \\bupdate\\b action to download new or out of date packages, and runs the \\bread\\b action on those packages. If \\bflat\\b is specified then the \\b$INSTALLROOT\\b { bin fun include lib } directories are linked to the same directories in the package root. Only one architecture may be \\bflat\\b. \\bbeta\\b acesses beta packages; download these at your own risk. The \\bmake\\b action must be run separately to build updated source packages. \\aalias\\a specifies a url alias file that contains definitions for the shell variables \\burl\\b, \\bauthorize\\b and \\bpassword\\b. If \\aalias\\a and \\aurl\\a are omitted then the \\aurl\\a from \\b$PACKAGEROOT/lib/package/tgz/\'$default_url$\'\\b is used. If \\aurl\\a is specified and \\b$PACKAGEROOT/lib/package/tgz/\'$default_url$\'\\b does not exist then it is initialized with the current \\aurl\\a, \\bauthorize\\b and \\bpassword\\b values and read permission for the current user only. If no packages are specified then all previously downloaded packages are updated.] [+test\\b [ \\apackage\\a ]]?Run the regression tests for \\apackage\\a. If the standard output is a terminal then the output is also captured in \\b$INSTALLROOT/lib/package/gen/test.out\\b. In general a package must be made before it can be tested. Components tested with the \\bregress\\b(1) command require \\bksh93\\b.] [+update\\b [ authorize \\aname\\a ]] [ beta ]] [ binary ]] [ password \\apassword\\a ]] [ source ]] [ url \\aalias\\a ]] [ \\aarchitecture\\a ... ]] [ \\aurl\\a ]] [ \\apackage\\a ... ]]?Download the latest release of the selected and required packages from \\aurl\\a (e.g., \\bhttp://www.research.att.com/sw/download\\b) into the directory \\b$PACKAGEROOT/lib/package/tgz\\b. \\bbeta\\b acesses beta packages; download these at your own risk. If \\aarchitecture\\a is omitted then only architectures already present in the tgz directory will be downloaded. If \\aarchitecture\\a is \\b-\\b then all posted architectures will be downloaded. If \\aurl\\a matches \\b*.url\\b then it is interpreted as a file whose contents is the url, else if \\aurl\\a is specified then it is copied to the file \\b$PACKAGEROOT/lib/package/tgz/default.url\\b, otherwise the url in \\bdefault.url\\b is used. If \\apackage\\a is omitted then only packages already present in the tgz directory will be downloaded. If \\apackage\\a is \\b-\\b then all posted packages will be downloaded. If \\bsource\\b and \\bbinary\\b are omitted then both source and binary packages will be downloaded. If \\bonly\\b is specified then only the named packages are updated; otherwise the closure of required packages is updated. This action requires \\bcurl\\b(1), \\bwget\\b(1) or a shell that supports io to \\b/dev/tcp/\\b\\ahost\\a/\\aport\\a.] [+use\\b [ \\auid\\a | \\apackage\\a | - ]] [ command ...]]?Run \\acommand\\a, or an interactive shell if \\acommand\\a is omitted, with the environment initialized for using the package (can you say \\ashared\\a \\alibrary\\a or \\adll\\a without cussing?) If either \\auid\\a or \\apackage\\a is specified then it is used to determine a \\b$PACKAGEROOT\\b, possibly different from the current directory. For example, to try out bozo`s package: \\bpackage use bozo\\b. The \\buse\\b action may be run from any directory. If the file \\b$INSTALLROOT/lib/package/profile\\b is readable then it is sourced to initialize the environment.] [+verify\\b [ \\apackage\\a ]]?Verify installed binary files against the checksum files in \\b$INSTALLROOT/lib/\\b\\apackage\\a\\b/gen/*.sum\\b. The checksum files contain mode, user and group information. If the checksum matches for a given file then the mode, user and group are changed as necessary to match the checksum entry. A warning is printed on the standard error for each mismatch. Requires the \\bast\\b package \\bcksum\\b(1) command.] [+view\\b?Initialize the architecture specific viewpath hierarchy. If \\bflat\\b is specified then the \\b$INSTALLROOT\\b { bin fun include lib } directories are linked to the same directories in the package root. Only one architecture may be \\bflat\\b. The \\bmake\\b action implicitly calls this action.] [+write\\b [\\aformat\\a]] \\atype\\a ... [ \\apackage\\a ...]]?Write a package archive for \\apackage\\a. All work is done in the \\b$PACKAGEROOT/lib/package\\b directory. \\aformat\\a-specific files are placed in the \\aformat\\a subdirectory. A \\apackage\\a[.\\atype\\a]]\\b.tim\\b file in this directory tracks the write time and prevents a package from being read in the same root it was written. If more than one file is generated for a particular \\aformat\\a then those files are placed in the \\aformat\\a/\\apackage\\a subdirectory. File names in the \\aformat\\a subdirectory will contain the package name, a \\ayyyy-mm-dd\\a date, and for binary packages, \\aHOSTTYPE\\a. If \\apackage\\a is omitted then an ordered list of previously written packages is generated. If \\bonly\\b is specified then only the named packages will be written; otherwise prerequisite packages are written first. Package components must be listed in \\apackage\\a\\b.pkg\\b. \\aformat\\a may be one of:] { [+cyg?Generate a \\bcygwin\\b package.] [+exp?Generate an \\bexptools\\b maintainer source archive and \\aNPD\\a file, suitable for \\bexpmake\\b(1)] [+lcl?Generate a package archive suitable for restoration into the local source tree (i.e., the source is not annotated for licencing.)] [+pkg?Generate a \\bpkgmk\\b(1) package suitable for \\bpkgadd\\b(1).] [+rpm?Generate an \\brpm\\b(1) package.] [+tgz?Generate a \\bgzip\\b(1) \\btar\\b(1) package archive. This is the default.] } [+?\\btype\\b specifies the package type which must be one of \\bsource\\b, \\bbinary\\b or \\bruntime\\b. A source package contains the source needed to build the corresponding binary package. A binary package includes the libraries and headers needed for compiling and linking against the public interfaces. A runtime package contains the commands and required dynamic libraries.] [+?A package may be either a \\bbase\\b or \\bdelta\\b. A base package contains a complete copy of all components. A delta package contains only changes from a previous base package. Delta recipients must have the \\bast\\b \\bpax\\b(1) command (in the \\bast-base\\b package.) If neither \\bbase\\b nor \\bdelta\\b is specified, then the current base is overwritten if there are no deltas referring to the current base. Only the \\btgz\\b and \\blcl\\b formats support \\bdelta\\b. If \\bbase\\b is specified then a new base and two delta archives are generated: one delta to generate the new base from the old, and one delta to generate the old base from the new; the old base is then removed. If \\bdelta\\b is specified then a new delta referring to the current base is written.] [+?\\apackage\\a\\b.pkg\\b may reference other packages. By default a pointer to those packages is written. The recipient \\bpackage read\\b will then check that all required packages have been downloaded. If \\bclosure\\b is specified then the components for all package references are included in the generated package. This may be useful for \\blcl\\b and versioning.] [+?All formats but \\blcl\\b annotate each \\bsource\\b file (not already annotated) with a license comment as it is written to the package archive using \\bproto\\b(1).] } [+DETAILS?The package directory hierarchy is rooted at \\b$PACKAGEROOT\\b. All source and binaries reside under this tree. A two level viewpath is used to separate source and binaries. The top view is architecture specific, the bottom view is shared source. All building is done in the architecture specific view; no source view files are intentionally changed. This means that many different binary architectures can be made from a single copy of the source.] [+?Independent \\b$PACKAGEROOT\\b hierarchies can be combined by appending \\b$INSTALLROOT:$PACKAGEROOT\\b pairs to \\bVPATH\\b. The \\bVPATH\\b viewing order is from left to right. Each \\b$PACKAGEROOT\\b must have a \\b$PACKAGEROOT/lib/package\\b directory.] [+?Each package contains one or more components. Component source for the \\afoo\\a command is in \\b$PACKAGEROOT/src/cmd/\\b\\afoo\\a, and source for the \\abar\\a library is in \\b$PACKAGEROOT/src/lib/lib\\b\\abar\\a. This naming is for convenience only; the underlying makefiles handle inter-component build order. The \\bINIT\\b component, which contains generic package support files, is always made first, then the components named \\bINIT\\b*, then the component order determined by the closure of component makefile dependencies.] [+?\\b$PACKAGEROOT/lib/package\\b contains package specific files. The package naming convention is \\agroup\\a[-\\apart\\a]]; e.g., \\bast-base\\b, \\bgnu-fileutils\\b. The *\\b.pkg\\b files are ast \\bnmake\\b(1) makefiles that contain the package name, package components, references to other packages, and a short package description. *\\b.pkg\\b files are used by \\bpackage write\\b to generate new source and binary packages.] [+?\\b$PACKAGEROOT/lib/package/\\b\\agroup\\a\\b.lic\\b files contain license information that is used by the \\bast\\b \\bproto\\b(1) and \\bnmake\\b(1) commands to generate source and binary license strings. \\agroup\\a is determined by the first \\b:PACKAGE:\\b operator name listed in the component \\bnmake\\b makefile. \\agroup\\a\\b.lic\\b files are part of the licensing documentation and must not be altered; doing so violates the license. Each component may have its own \\bLICENSE\\b file that overrides the \\agroup\\a\\b.lic\\b file. The full text of the licenses are in the \\b$PACKAGEROOT/lib/package/LICENSES\\b and \\b$INSTALLROOT/lib/package/LICENSES\\b directories.] [+?A few files are generated in \\b$PACKAGEROOT/lib/package/gen\\b and \\b$INSTALLROOT/lib/package/gen\\b. \\apackage\\a\\b.ver\\b contains one line consisting of \\apackage version release\\a \\b1\\b for the most recent instance of \\apackage\\a read into \\b$PACKAGEROOT\\b, where \\apackage\\a is the package name, \\aversion\\a is the \\aYYYY-MM-DD\\a base version, and \\arelease\\a is \\aversion\\a for the base release or \\aYYYY-MM-DD\\a for delta releases. \\apackage\\a\\b.req\\b contains *\\b.ver\\b entries for the packages required by \\apackage\\a, except that the fourth field is \\b0\\b instead of \\b1\\b. All packages except \\bINIT\\b require the \\bINIT\\b package. A simple sort of \\apackage\\a\\b.pkg\\b and *\\b.ver\\b determines if the required package have been read in. Finally, \\apackage\\a\\b.README\\b and \\apackage\\a\\a.html\\b contain the README text for \\apackage\\a and all its components. Included are all changes added to the component \\bRELEASE\\b, \\bCHANGES\\b or \\bChangeLog\\b files dated since the two most recent base releases. Component \\bRELEASE\\b files contain tag lines of the form [\\aYY\\a]]\\aYY-MM-DD\\a [ \\atext\\a ]] (or \\bdate\\b(1) format dates) followed by README text, in reverse chronological order (newer entries at the top of the file.) \\bpackage release\\b lists this information, and \\bpackage contents ...\\b lists the descriptions and components.] [+?\\b$HOSTYPE\\b names the current binary architecture and is determined by the output of \\bpackage\\b (no arguments.) The \\b$HOSTTYPE\\b naming scheme is used to separate incompatible executable and object formats. All architecture specific binaries are placed under \\b$INSTALLROOT\\b (\\b$PACKAGEROOT/arch/$HOSTTYPE\\b.) There are a few places that match against \\b$HOSTTYPE\\b when making binaries; these are limited to makefile compiler workarounds, e.g., if \\b$HOSTTYPE\\b matches \\bhp.*\\b then turn off the optimizer for these objects. All other architecture dependent logic is handled either by the \\bast\\b \\biffe\\b(1) command or by component specific configure scripts.] [+?Each component contains an \\bast\\b \\bnmake\\b(1) makefile (either \\bNmakefile\\b or \\bMakefile\\b) and a \\bMAM\\b (make abstract machine) file (\\bMamfile\\b.) A Mamfile contains a portable makefile description that is used by \\bmamake\\b(1) to simulate \\bnmake\\b. Currently there is no support for old-make/gnu-make makefiles; if the binaries are just being built then \\bmamake\\b will suffice; if source or makefile modifications are anticipated then \\bnmake\\b (in the \\bast-base\\b package) should be used. Mamfiles are automatically generated by \\bpackage write\\b.] [+?Most component C source is prototyped. If \\b$CC\\b (default value \\bcc\\b) is not a prototyping C compiler then \\bpackage make\\b runs \\bproto\\b(1) on portions of the \\b$PACKAGEROOT/src\\b tree and places the converted output files in the \\b$PACKAGEROOT/proto/src\\b tree. Converted files are then viewpathed over the original source. \\bproto\\b(1) converts an ANSI C subset to code that is compatible with K&R, ANSI, and C++ dialects.] [+?All scripts and commands under \\b$PACKAGEROOT\\b use \\b$PATH\\b relative pathnames (via the \\bast\\b \\bpathpath\\b(3) function); there are no imbedded absolute pathnames. This means that binaries generated under \\b$PACKAGEROOT\\b may be copied to a different root; users need only change their \\b$PATH\\b variable to reference the new installation root \\bbin\\b directory. \\bpackage install\\b installs binary packages in a new \\b$INSTALLROOT\\b.]' OUTPUT - $'[+DESCRIPTION?The \\bpackage\\b command controls source and binary packages. It is a \\bsh\\b(1) script coded for maximal portability. All package files are in the \\b$PACKAGEROOT\\b directory tree. \\b$PACKAGEROOT\\b must at minumum contain a \\bbin/package\\b command or a \\blib/package\\b directory. Binary package files are in the \\b$INSTALLROOT\\b (\\b$PACKAGEROOT/arch/\\b\\ahosttype\\a) tree, where \\ahosttpe\\a=`\\bpackage\\b`. All \\aactions\\a but \\bhost\\b and \\buse\\b require the current directory to be under \\b$PACKAGEROOT\\b. See \\bDETAILS\\b for more information.] [+?Note that no environment variables need be set by the user; \\bpackage\\b determines the environment based on the current working directory. The \\buse\\b action starts a \\bsh\\b(1) with the environment initialized. \\bCC\\b, \\bCCFLAGS\\b, \\bHOSTTYPE\\b and \\bSHELL\\b may be set by explicit command argument assignments to override the defaults.] [+?Packages are composed of components. Each component is built and installed by an \\bast\\b \\bnmake\\b(1) makefile. Each package is also described by an \\bnmake\\b makefile that lists its components and provides a content description. The package makefile and component makefiles provide all the information required to read, write, build and install packages.] [+?Package recipients only need \\bsh\\b(1) and \\bcc\\b(1) to build and install source packages, and \\bsh\\b to install binary packages. \\bnmake\\b and \\bksh93\\b are required to write new packages. An \\b$INSTALLROOT/bin/cc\\b script may be supplied for some architectures. This script supplies a reasonable set of default options for compilers that accept multiple dialects or generate multiple object/executable formats.] [+?The command arguments are composed of a sequence of words: zero or more \\aqualifiers\\a, one \\aaction\\a, and zero or more action-specific \\aarguments\\a, and zero or more \\aname=value\\a definitions. \\apackage\\a names a particular package. The naming scheme is a \\b-\\b separated hierarchy; the leftmost parts describe ownership, e.g., \\bgnu-fileutils\\b, \\bast-base\\b. If no packages are specified then all packages are operated on. \\boptget\\b(3) documentation options are also supported. The default with no arguments is \\bhost type\\b.] [+?The qualifiers are:] { [+debug|environment?Show environment and actions but do not execute.] [+flat?Collapse \\b$INSTALLROOT\\b { bin fun include lib } onto \\b$PACKAGEROOT\\b.] [+force?Force the action to override saved state.] [+never?Run make -N and show other actions.] [+only?Only operate on the specified packages.] [+quiet?Do not list captured action output.] [+show?Run make -n and show other actions.] [+verbose?Provide detailed action output.] [+DEBUG?Trace the package script actions in detail.] } [+?The actions are:] { [+admin\\b [\\ball\\b]] [\\bdb\\b \\afile\\a]] [\\bon\\b \\apattern\\a]][\\aaction\\a ...]]?Apply \\aaction\\a ... to the hosts listed in \\afile\\a. If \\afile\\a is omitted then \\badmin.db\\b is assumed. The caller must have \\brcp\\b(1) and \\brsh\\b(1) or \\bscp\\b(1) and \\bssh\\b(1) access to the hosts. Output for \\aaction\\a is saved per-host in the file \\aaction\\a\\b.log/\\b\\ahost\\a. Logs can be viewed by \\bpackage admin\\b [\\bon\\b \\ahost\\a]] \\bresults\\b [\\aaction\\a]]. By default only local PACKAGEROOT hosts are selected from \\afile\\a; \\ball\\b selects all hosts. \\bon\\b \\apattern\\a selects only hosts matching the \\b|\\b separated \\apattern\\a. \\afile\\a contains four types of lines. Blank lines and lines beginning with \\b#\\b are ignored. Lines starting with \\aid\\a=\\avalue\\a are variable assignments. Set admin_ping to local conventions if \\"\'$admin_ping$\'\\" fails. If a package list is not specified on the command line the \\aaction\\a applies to all packages; a variable assigment \\bpackage\\b=\\"\\alist\\a\\" applies \\aaction\\a to the packages in \\alist\\a for subsequent hosts in \\afile\\a. The remaining line type is a host description consisting of 6 tab separated fields. The first 3 are mandatory; the remaining 3 are updated by the \\badmin\\b action. \\afile\\a is saved in \\afile\\a\\b.old\\b before update. The fields are:] { [+hosttype?The host type as reported by \\"\\bpackage\\b\\".] [+[user@]]host?The host name and optionally user name for \\brcp\\b(1) and \\brsh\\b(1) access.] [+[remote::]]PACKAGEROOT?The absolute remote package root directory and optionally the remote protocol (rsh or ssh) if the directory is on a different server than the master package root directory. If \\blib/package/admin/\'$admin_env$\'\\b exists under this directory then it is sourced by \\bsh\\b(1) before \\aaction\\a is done. If this field begins with \\b-\\b then the host is ignored. If this field contains \\b:\\b then \\bditto\\b(1) is used to sync the remote \\bsrc\\b directory hierarchy to the local one. These directories must exist on the remote side: \\blib/package\\b, \\bsrc/cmd\\b, \\bsrc/lib\\b.] [+date?\\aYYMMDD\\a of the last action.] [+time?Elapsed wall time for the last action.] [+M T W?The \\badmin\\b action \\bmake\\b, \\btest\\b and \\bwrite\\b action error counts. A non-numeric value in any of these fields disables the corresponding action.] } [+contents\\b [ \\apackage\\a ... ]]?List description and components for \\apackage\\a on the standard output.] [+copyright\\b [ \\apackage\\a ... ]]?List the general copyright notice(s) for \\apackage\\a on the standard output. Note that individual components in \\apackage\\a may contain additional or replacement notices.] [+export\\b \\avariable\\a ...?List \\aname\\a=\\avalue\\a for \\avariable\\a, one per line. If the \\bonly\\b attribute is specified then only the variable values are listed.] [+help\\b [ \\aaction\\a ]]?Display help text on the standard error (standard output for \\aaction\\a).] [+host\\b [ \\aattribute\\a ... ]]?List architecture/implementation dependent host information on the standard output. \\btype\\b is listed if no attributes are specified. Information is listed on a single line in \\aattribute\\a order. The attributes are:] { [+canon \\aname\\a?An external host type name to be converted to \\bpackage\\b syntax.] [+cpu?The number of cpus; 1 if the host is not a multiprocessor.] [+name?The host name.] [+rating?The cpu rating in pseudo mips; the value is useful useful only in comparisons with rating values of other hosts. Other than a vax rating (mercifully) fixed at 1, ratings can vary wildly but consistently from vendor mips ratings. \\bcc\\b(1) may be required to determine the rating.] [+type?The host type, usually in the form \\avendor\\a.\\aarchitecture\\a, with an optional trailing -\\aversion\\a. The main theme is that type names within a family of architectures are named in a similar, predictable style. OS point release information is avoided as much as possible, but vendor resistance to release incompatibilities has for the most part been futile.] } [+html\\b [ \\aaction\\a ]]?Display html help text on the standard error (standard output for \\aaction\\a).] [+install\\b [ flat ]] [ \\aarchitecture\\a ... ]] \\adirectory\\a [\\apackage\\a ... ]]?Copy the package binary hierarchy to \\adirectory\\a. If \\aarchitecture\\a is omitted then all architectures are installed. If \\bflat\\b is specified then exactly one \\aarchitecture\\a must be specified; this architecture will be installed in \\adirectory\\a without the \\barch/\\b\\aHOSTTYPE\\a directory prefixes. Otherwise each architecture will be installed in a separate \\barch/\\b\\aHOSTTYPE\\a subdirectory of \\adirectory\\a. The \\aarchitecture\\a \\b-\\b names the current architecture. \\adirectory\\a must be an existing directory. If \\apackage\\a is omitted then all binary packages are installed. This action requires \\bnmake\\b.] [+license\\b [ \\apackage\\a ... ]]?List the source license(s) for \\apackage\\a on the standard output. Note that individual components in \\apackage\\a may contain additional or replacement licenses.] [+list\\b [ \\apackage\\a ... ]]?List the name, version and prerequisites for \\apackage\\a on the standard output.] [+make\\b [ \\apackage\\a ]] [ \\atarget\\a ... ]]?Build and install. The default \\atarget\\a is \\binstall\\b, which makes and installs \\apackage\\a. If the standard output is a terminal then the output is also captured in \\b$INSTALLROOT/lib/package/gen/make.out\\b. The build is done in the \\b$INSTALLROOT\\b directory tree viewpathed on top of the \\b$PACKAGEROOT\\b directory tree. If \\bflat\\b is specified then the \\b$INSTALLROOT\\b { bin fun include lib } directories are linked to the same directories in the package root. Only one architecture may be \\bflat\\b. Leaf directory names matching the \\b|\\b-separated shell pattern \\b$MAKESKIP\\b are ignored. The \\bview\\b action is done before making.] [+read\\b [ \\apackage\\a ... | \\aarchive\\a ... ]]?Read the named package or archive(s). Must be run from the package root directory. Archives are searched for in \\b.\\b and \\blib/package/tgz\\b. Each package archive is read only once. The file \\blib/package/tgz/\\b\\apackage\\a[.\\atype\\a]]\\b.tim\\b tracks the read time. See the \\bwrite\\b action for archive naming conventions. Text file archive member are assumed to be ASCII or UTF-8 encoded.] [+regress?\\bdiff\\b(1) the current and previous \\bpackage test\\b results.] [+release\\b [ [\\aCC\\a]]\\aYY-MM-DD\\a [ [\\acc\\a]]\\ayy-mm-dd\\a ]]]] [ \\apackage\\a ]]?Display recent changes for the date range [\\aCC\\a]]\\aYY-MM-DD\\a (up to [\\acc\\a]]\\ayy-mm-dd\\a.), where \\b-\\b means lowest (or highest.) If no dates are specified then changes for the last 4 months are listed. \\apackage\\a may be a package or component name.] [+remove\\b [ \\apackage\\a ]]?Remove files installed for \\apackage\\a.] [+results\\b [ \\bfailed\\b ]] [ \\bpath\\b ]] [ \\bold\\b ]] [\\bmake\\b | \\btest\\b | \\bwrite\\b ]]?List results and interesting messages captured by the most recent \\bmake\\b (default), \\btest\\b or \\bwrite\\b action. \\bold\\b specifies the previous results, if any (current and previous results are retained.) \\b$HOME/.pkgresults\\b, if it exists, must contain an \\begrep\\b(1) expression of result lines to be ignored. \\bfailed\\b lists failures only and \\bpath\\b lists the results file path name only.] [+setup\\b [ beta ]] [ binary ]] [ source ]] [ url \\aalias\\a ]][ \\aarchitecture\\a ... ]] [ \\aurl\\a ]] [ \\apackage\\a ...]]?This action initializes the current directory as a package root, runs the \\bupdate\\b action to download new or out of date packages, and runs the \\bread\\b action on those packages. If \\bflat\\b is specified then the \\b$INSTALLROOT\\b { bin fun include lib } directories are linked to the same directories in the package root. Only one architecture may be \\bflat\\b. \\bbeta\\b acesses beta packages; download these at your own risk. The \\bmake\\b action must be run separately to build updated source packages. \\aalias\\a specifies a url alias file that contains definitions for the shell variables \\burl\\b, \\bauthorize\\b and \\bpassword\\b. If \\aalias\\a and \\aurl\\a are omitted then the \\aurl\\a from \\b$PACKAGEROOT/lib/package/tgz/\'$default_url$\'\\b is used. If \\aurl\\a is specified and \\b$PACKAGEROOT/lib/package/tgz/\'$default_url$\'\\b does not exist then it is initialized with the current \\aurl\\a, \\bauthorize\\b and \\bpassword\\b values and read permission for the current user only. If no packages are specified then all previously downloaded packages are updated.] [+test\\b [ \\apackage\\a ]]?Run the regression tests for \\apackage\\a. If the standard output is a terminal then the output is also captured in \\b$INSTALLROOT/lib/package/gen/test.out\\b. In general a package must be made before it can be tested. Components tested with the \\bregress\\b(1) command require \\bksh93\\b.] [+update\\b [ authorize \\aname\\a ]] [ beta ]] [ binary ]] [password \\apassword\\a ]] [ source ]] [ url \\aalias\\a ]] [\\aarchitecture\\a ... ]] [ \\aurl\\a ]] [ \\apackage\\a ...]]?Download the latest release of the selected and required packages from \\aurl\\a (e.g., \\bhttp://www.research.att.com/sw/download\\b) into the directory \\b$PACKAGEROOT/lib/package/tgz\\b. \\bbeta\\b acesses beta packages; download these at your own risk. If \\aarchitecture\\a is omitted then only architectures already present in the tgz directory will be downloaded. If \\aarchitecture\\a is \\b-\\b then all posted architectures will be downloaded. If \\aurl\\a matches \\b*.url\\b then it is interpreted as a file whose contents is the url, else if \\aurl\\a is specified then it is copied to the file \\b$PACKAGEROOT/lib/package/tgz/default.url\\b, otherwise the url in \\bdefault.url\\b is used. If \\apackage\\a is omitted then only packages already present in the tgz directory will be downloaded. If \\apackage\\a is \\b-\\b then all posted packages will be downloaded. If \\bsource\\b and \\bbinary\\b are omitted then both source and binary packages will be downloaded. If \\bonly\\b is specified then only the named packages are updated; otherwise the closure of required packages is updated. This action requires \\bcurl\\b(1), \\bwget\\b(1) or a shell that supports io to \\b/dev/tcp/\\b\\ahost\\a/\\aport\\a.] [+use\\b [ \\auid\\a | \\apackage\\a | - ]] [ command ...]]?Run \\acommand\\a, or an interactive shell if \\acommand\\a is omitted, with the environment initialized for using the package (can you say \\ashared\\a \\alibrary\\a or \\adll\\a without cussing?) If either \\auid\\a or \\apackage\\a is specified then it is used to determine a \\b$PACKAGEROOT\\b, possibly different from the current directory. For example, to try out bozo`s package: \\bpackage use bozo\\b. The \\buse\\b action may be run from any directory. If the file \\b$INSTALLROOT/lib/package/profile\\b is readable then it is sourced to initialize the environment.] [+verify\\b [ \\apackage\\a ]]?Verify installed binary files against the checksum files in \\b$INSTALLROOT/lib/\\b\\apackage\\a\\b/gen/*.sum\\b. The checksum files contain mode, user and group information. If the checksum matches for a given file then the mode, user and group are changed as necessary to match the checksum entry. A warning is printed on the standard error for each mismatch. Requires the \\bast\\b package \\bcksum\\b(1) command.] [+view\\b?Initialize the architecture specific viewpath hierarchy. If \\bflat\\b is specified then the \\b$INSTALLROOT\\b { bin fun include lib } directories are linked to the same directories in the package root. Only one architecture may be \\bflat\\b. The \\bmake\\b action implicitly calls this action.] [+write\\b [\\aformat\\a]] \\atype\\a ... [ \\apackage\\a ...]]?Write a package archive for \\apackage\\a. All work is done in the \\b$PACKAGEROOT/lib/package\\b directory. \\aformat\\a-specific files are placed in the \\aformat\\a subdirectory. A \\apackage\\a[.\\atype\\a]]\\b.tim\\b file in this directory tracks the write time and prevents a package from being read in the same root it was written. If more than one file is generated for a particular \\aformat\\a then those files are placed in the \\aformat\\a/\\apackage\\a subdirectory. File names in the \\aformat\\a subdirectory will contain the package name, a \\ayyyy-mm-dd\\a date, and for binary packages, \\aHOSTTYPE\\a. If \\apackage\\a is omitted then an ordered list of previously written packages is generated. If \\bonly\\b is specified then only the named packages will be written; otherwise prerequisite packages are written first. Package components must be listed in \\apackage\\a\\b.pkg\\b. \\aformat\\a may be one of:] { [+cyg?Generate a \\bcygwin\\b package.] [+exp?Generate an \\bexptools\\b maintainer source archive and \\aNPD\\a file, suitable for \\bexpmake\\b(1)] [+lcl?Generate a package archive suitable for restoration into the local source tree (i.e., the source is not annotated for licencing.)] [+pkg?Generate a \\bpkgmk\\b(1) package suitable for \\bpkgadd\\b(1).] [+rpm?Generate an \\brpm\\b(1) package.] [+tgz?Generate a \\bgzip\\b(1) \\btar\\b(1) package archive. This is the default.] } [+?\\btype\\b specifies the package type which must be one of \\bsource\\b, \\bbinary\\b or \\bruntime\\b. A source package contains the source needed to build the corresponding binary package. A binary package includes the libraries and headers needed for compiling and linking against the public interfaces. A runtime package contains the commands and required dynamic libraries.] [+?A package may be either a \\bbase\\b or \\bdelta\\b. A base package contains a complete copy of all components. A delta package contains only changes from a previous base package. Delta recipients must have the \\bast\\b \\bpax\\b(1) command (in the \\bast-base\\b package.) If neither \\bbase\\b nor \\bdelta\\b is specified, then the current base is overwritten if there are no deltas referring to the current base. Only the \\btgz\\b and \\blcl\\b formats support \\bdelta\\b. If \\bbase\\b is specified then a new base and two delta archives are generated: one delta to generate the new base from the old, and one delta to generate the old base from the new; the old base is then removed. If \\bdelta\\b is specified then a new delta referring to the current base is written.] [+?\\apackage\\a\\b.pkg\\b may reference other packages. By default a pointer to those packages is written. The recipient \\bpackage read\\b will then check that all required packages have been downloaded. If \\bclosure\\b is specified then the components for all package references are included in the generated package. This may be useful for \\blcl\\b and versioning.] [+?All formats but \\blcl\\b annotate each \\bsource\\b file (not already annotated) with a license comment as it is written to the package archive using \\bproto\\b(1).] } [+DETAILS?The package directory hierarchy is rooted at \\b$PACKAGEROOT\\b. All source and binaries reside under this tree. A two level viewpath is used to separate source and binaries. The top view is architecture specific, the bottom view is shared source. All building is done in the architecture specific view; no source view files are intentionally changed. This means that many different binary architectures can be made from a single copy of the source.] [+?Independent \\b$PACKAGEROOT\\b hierarchies can be combined by appending \\b$INSTALLROOT:$PACKAGEROOT\\b pairs to \\bVPATH\\b. The \\bVPATH\\b viewing order is from left to right. Each \\b$PACKAGEROOT\\b must have a \\b$PACKAGEROOT/lib/package\\b directory.] [+?Each package contains one or more components. Component source for the \\afoo\\a command is in \\b$PACKAGEROOT/src/cmd/\\b\\afoo\\a, and source for the \\abar\\a library is in \\b$PACKAGEROOT/src/lib/lib\\b\\abar\\a. This naming is for convenience only; the underlying makefiles handle inter-component build order. The \\bINIT\\b component, which contains generic package support files, is always made first, then the components named \\bINIT\\b*, then the component order determined by the closure of component makefile dependencies.] [+?\\b$PACKAGEROOT/lib/package\\b contains package specific files. The package naming convention is \\agroup\\a[-\\apart\\a]]; e.g., \\bast-base\\b, \\bgnu-fileutils\\b. The *\\b.pkg\\b files are ast \\bnmake\\b(1) makefiles that contain the package name, package components, references to other packages, and a short package description. *\\b.pkg\\b files are used by \\bpackage write\\b to generate new source and binary packages.] [+?\\b$PACKAGEROOT/lib/package/\\b\\agroup\\a\\b.lic\\b files contain license information that is used by the \\bast\\b \\bproto\\b(1) and \\bnmake\\b(1) commands to generate source and binary license strings. \\agroup\\a is determined by the first \\b:PACKAGE:\\b operator name listed in the component \\bnmake\\b makefile. \\agroup\\a\\b.lic\\b files are part of the licensing documentation and must not be altered; doing so violates the license. Each component may have its own \\bLICENSE\\b file that overrides the \\agroup\\a\\b.lic\\b file. The full text of the licenses are in the \\b$PACKAGEROOT/lib/package/LICENSES\\b and \\b$INSTALLROOT/lib/package/LICENSES\\b directories.] [+?A few files are generated in \\b$PACKAGEROOT/lib/package/gen\\b and \\b$INSTALLROOT/lib/package/gen\\b. \\apackage\\a\\b.ver\\b contains one line consisting of \\apackage version release\\a \\b1\\b for the most recent instance of \\apackage\\a read into \\b$PACKAGEROOT\\b, where \\apackage\\a is the package name, \\aversion\\a is the \\aYYYY-MM-DD\\a base version, and \\arelease\\a is \\aversion\\a for the base release or \\aYYYY-MM-DD\\a for delta releases. \\apackage\\a\\b.req\\b contains *\\b.ver\\b entries for the packages required by \\apackage\\a, except that the fourth field is \\b0\\b instead of \\b1\\b. All packages except \\bINIT\\b require the \\bINIT\\b package. A simple sort of \\apackage\\a\\b.pkg\\b and *\\b.ver\\b determines if the required package have been read in. Finally, \\apackage\\a\\b.README\\b and \\apackage\\a\\a.html\\b contain the README text for \\apackage\\a and all its components. Included are all changes added to the component \\bRELEASE\\b, \\bCHANGES\\b or \\bChangeLog\\b files dated since the two most recent base releases. Component \\bRELEASE\\b files contain tag lines of the form [\\aYY\\a]]\\aYY-MM-DD\\a [ \\atext\\a ]] (or \\bdate\\b(1) format dates) followed by README text, in reverse chronological order (newer entries at the top of the file.) \\bpackage release\\b lists this information, and \\bpackage contents ...\\b lists the descriptions and components.] [+?\\b$HOSTYPE\\b names the current binary architecture and is determined by the output of \\bpackage\\b (no arguments.) The \\b$HOSTTYPE\\b naming scheme is used to separate incompatible executable and object formats. All architecture specific binaries are placed under \\b$INSTALLROOT\\b (\\b$PACKAGEROOT/arch/$HOSTTYPE\\b.) There are a few places that match against \\b$HOSTTYPE\\b when making binaries; these are limited to makefile compiler workarounds, e.g., if \\b$HOSTTYPE\\b matches \\bhp.*\\b then turn off the optimizer for these objects. All other architecture dependent logic is handled either by the \\bast\\b \\biffe\\b(1) command or by component specific configure scripts.] [+?Each component contains an \\bast\\b \\bnmake\\b(1) makefile (either \\bNmakefile\\b or \\bMakefile\\b) and a \\bMAM\\b (make abstract machine) file (\\bMamfile\\b.) A Mamfile contains a portable makefile description that is used by \\bmamake\\b(1) to simulate \\bnmake\\b. Currently there is no support for old-make/gnu-make makefiles; if the binaries are just being built then \\bmamake\\b will suffice; if source or makefile modifications are anticipated then \\bnmake\\b (in the \\bast-base\\b package) should be used. Mamfiles are automatically generated by \\bpackage write\\b.] [+?Most component C source is prototyped. If \\b$CC\\b (default value \\bcc\\b) is not a prototyping C compiler then \\bpackage make\\b runs \\bproto\\b(1) on portions of the \\b$PACKAGEROOT/src\\b tree and places the converted output files in the \\b$PACKAGEROOT/proto/src\\b tree. Converted files are then viewpathed over the original source. \\bproto\\b(1) converts an ANSI C subset to code that is compatible with K&R, ANSI, and C++ dialects.] [+?All scripts and commands under \\b$PACKAGEROOT\\b use \\b$PATH\\b relative pathnames (via the \\bast\\b \\bpathpath\\b(3) function); there are no imbedded absolute pathnames. This means that binaries generated under \\b$PACKAGEROOT\\b may be copied to a different root; users need only change their \\b$PATH\\b variable to reference the new installation root \\bbin\\b directory. \\bpackage install\\b installs binary packages in a new \\b$INSTALLROOT\\b.]' TEST 04 '--optget vs. "..."' EXEC --optget -w76 INPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in one of" " the directories on \\b$PATH\\b, searched in order. Each alias is" " is a " FOO " and another " BAR " at the end.]"' OUTPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in one of the " "directories on \\b$PATH\\b, searched in order. Each alias is is a " FOO " and " "another " BAR " at the end.]"' EXEC --optget --width=69 OUTPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in one of the " "directories on \\b$PATH\\b, searched in order. Each alias is is a " FOO " " "and another " BAR " at the end.]"' EXEC --optget --width=68 OUTPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in one of " "the directories on \\b$PATH\\b, searched in order. Each alias is is a " FOO " " "and another " BAR " at the end.]"' EXEC --optget --width=66 OUTPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in one of " "the directories on \\b$PATH\\b, searched in order. Each alias is is " "a " FOO " and another " BAR " at the end.]"' EXEC --optget --width=65 OUTPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in one of " "the directories on \\b$PATH\\b, searched in order. Each alias is " "is a " FOO " and another " BAR " at the end.]"' EXEC --optget --width=64 OUTPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in one " "of the directories on \\b$PATH\\b, searched in order. Each alias " "is is a " FOO " and another " BAR " at the end.]"' EXEC --optget --width=62 OUTPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in one " "of the directories on \\b$PATH\\b, searched in order. Each " "alias is is a " FOO " and another " BAR " at the end.]"' EXEC --optget --width=61 OUTPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in " "one of the directories on \\b$PATH\\b, searched in order. Each " "alias is is a " FOO " and another " BAR " at the end.]"' EXEC --optget --width=60 OUTPUT - $'"[+?Method aliases may be defined in \\b../" ALIASES "\\b in " "one of the directories on \\b$PATH\\b, searched in order. " "Each alias is is a " FOO " and another " BAR " at the end.]"' TEST 05 '--optget vs. "...\n..."' EXEC --optget -w76 INPUT - $'"\\n\\n[ file ... ]\\n\\n"' OUTPUT - $' "\n "\n"[ file ... ]"\n "\n "' EXEC --optget -w76 INPUT - $'"\\n"\n"\\n[ file ... ]\\n"\n"\\n"' OUTPUT - $'"[ file ... ]"' TEST 06 '--optget vs. --usage' EXEC --optget -w76 INPUT - $'[-?\\n@(#)$Id: id (AT&T Research) 2004-06-11 $\\n] [-author?Glenn Fowler <[email protected]>] [-author?David Korn <[email protected]>] [-copyright?Copyright (c) 1992-2005 AT&T Corp.] [-license?http://www.opensource.org/licenses/cpl1.0.txt] [--catalog?libcmd] [+NAME?id - return user identity] [+DESCRIPTION?If no \auser\a operand is specified \bid\b writes user and group IDs and the corresponding user and group names of the invoking process to standard output. If the effective and real IDs do not match, both are written. Any supplementary groups the current process belongs to will also be written.] [+?If a \auser\a operand is specified and the process has permission, the user and group IDs and any supplementary group IDs of the selected user will be written to standard output.] [+?If any options are specified, then only a portion of the information is written.] [n:name?Write the name instead of the numeric ID.] [r:real?Writes real ID instead of the effective ID.] [[a?This option is ignored.] [g:group?Writes only the group ID.] [u:user?Writes only the user ID.] [G:groups?Writes only the supplementary group IDs.] [s:fair-share?Writes fair share scheduler IDs and groups on systems that support fair share scheduling.] [user] [+EXIT STATUS?]{[+0?Successful completion.][+>0?An error occurred.]}[+SEE ALSO?\blogname\b(1), \bwho\b(1), \bgetgroups\b(2)]' OUTPUT - $'[-?\\n@(#)$Id: id (AT&T Research) 2004-06-11 $ ] [-author?Glenn Fowler <[email protected]>] [-author?David Korn <[email protected]>] [-copyright?Copyright (c) 1992-2005 AT&T Corp.] [-license?http://www.opensource.org/licenses/cpl1.0.txt] [--catalog?libcmd] [+NAME?id - return user identity] [+DESCRIPTION?If no \\auser\\a operand is specified \\bid\\b writes user and group IDs and the corresponding user and group names of the invoking process to standard output. If the effective and real IDs do not match, both are written. Any supplementary groups the current process belongs to will also be written.] [+?If a \\auser\\a operand is specified and the process has permission, the user and group IDs and any supplementary group IDs of the selected user will be written to standard output.] [+?If any options are specified, then only a portion of the information is written.] [n:name?Write the name instead of the numeric ID.] [r:real?Writes real ID instead of the effective ID.] [[a?This option is ignored.] [g:group?Writes only the group ID.] [u:user?Writes only the user ID.] [G:groups?Writes only the supplementary group IDs.] [s:fair-share?Writes fair share scheduler IDs and groups on systems that support fair share scheduling.] [user] [+EXIT STATUS?] { [+0?Successful completion.] [+>0?An error occurred.] } [+SEE ALSO?\blogname\b(1), \\bwho\\b(1), \\bgetgroups\\b(2)]'