text:
|Return to make.1 CVS log
|Up to [cvs.NetBSD.org] / src / usr.bin / make
|File: [cvs.NetBSD.org] / src / usr.bin / make / make.1 (download)
Revision 1.229, Sun Jan 19 10:23:29 2014 UTC (3 years, 7 months ago) by apb
Emphasise the fact that the regexp and replacement in :C/// are subjected to variable expansion before regexp parsing. This was already documented if you read carefully enough, but more emphasis would have helped me to figure out why I needed three or four backslashes where I expected to need only two.
.\" $NetBSD: make.1,v 1.229 2014/01/19 10:23:29 apb Exp $ .\" .\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" from: @(#)make.1 8.4 (Berkeley) 3/19/94 .\" .Dd January 19, 2014 .Dt MAKE 1 .Os .Sh NAME .Nm make .Nd maintain program dependencies .Sh SYNOPSIS .Nm .Op Fl BeikNnqrstWwX .Op Fl C Ar directory .Op Fl D Ar variable .Op Fl d Ar flags .Op Fl f Ar makefile .Op Fl I Ar directory .Op Fl J Ar private .Op Fl j Ar max_jobs .Op Fl m Ar directory .Op Fl T Ar file .Op Fl V Ar variable .Op Ar variable=value .Op Ar target ... .Sh DESCRIPTION .Nm is a program designed to simplify the maintenance of other programs. Its input is a list of specifications as to the files upon which programs and other files depend. If no .Fl f Ar makefile makefile option is given, .Nm will try to open .Ql Pa makefile then .Ql Pa Makefile in order to find the specifications. If the file .Ql Pa .depend exists, it is read (see .Xr mkdep 1 ) . .Pp This manual page is intended as a reference document only. For a more thorough description of .Nm and makefiles, please refer to .%T "PMake \- A Tutorial" . .Pp .Nm will prepend the contents of the .Va MAKEFLAGS environment variable to the command line arguments before parsing them. .Pp The options are as follows: .Bl -tag -width Ds .It Fl B Try to be backwards compatible by executing a single shell per command and by executing the commands to make the sources of a dependency line in sequence. .It Fl C Ar directory Change to .Ar directory before reading the makefiles or doing anything else. If multiple .Fl C options are specified, each is interpreted relative to the previous one: .Fl C Pa / Fl C Pa etc is equivalent to .Fl C Pa /etc . .It Fl D Ar variable Define .Ar variable to be 1, in the global context. .It Fl d Ar [-]flags Turn on debugging, and specify which portions of .Nm are to print debugging information. Unless the flags are preceded by .Ql \- they are added to the .Va MAKEFLAGS environment variable and will be processed by any child make processes. By default, debugging information is printed to standard error, but this can be changed using the .Ar F debugging flag. The debugging output is always unbuffered; in addition, if debugging is enabled but debugging output is not directed to standard output, then the standard output is line buffered. .Ar Flags is one or more of the following: .Bl -tag -width Ds .It Ar A Print all possible debugging information; equivalent to specifying all of the debugging flags. .It Ar a Print debugging information about archive searching and caching. .It Ar C Print debugging information about current working directory. .It Ar c Print debugging information about conditional evaluation. .It Ar d Print debugging information about directory searching and caching. .It Ar e Print debugging information about failed commands and targets. .It Ar F Ns Oo Sy \&+ Oc Ns Ar filename Specify where debugging output is written. This must be the last flag, because it consumes the remainder of the argument. If the character immediately after the .Ql F flag is .Ql \&+ , then the file will be opened in append mode; otherwise the file will be overwritten. If the file name is .Ql stdout or .Ql stderr then debugging output will be written to the standard output or standard error output file descriptors respectively (and the .Ql \&+ option has no effect). Otherwise, the output will be written to the named file. If the file name ends .Ql .%d then the .Ql %d is replaced by the pid. .It Ar f Print debugging information about loop evaluation. .It Ar "g1" Print the input graph before making anything. .It Ar "g2" Print the input graph after making everything, or before exiting on error. .It Ar "g3" Print the input graph before exiting on error. .It Ar j Print debugging information about running multiple shells. .It Ar l Print commands in Makefiles regardless of whether or not they are prefixed by .Ql @ or other "quiet" flags. Also known as "loud" behavior. .It Ar M Print debugging information about "meta" mode decisions about targets. .It Ar m Print debugging information about making targets, including modification dates. .It Ar n Don't delete the temporary command scripts created when running commands. These temporary scripts are created in the directory referred to by the .Ev TMPDIR environment variable, or in .Pa /tmp if .Ev TMPDIR is unset or set to the empty string. The temporary scripts are created by .Xr mkstemp 3 , and have names of the form .Pa makeXXXXXX . .Em NOTE : This can create many files in .Ev TMPDIR or .Pa /tmp , so use with care. .It Ar p Print debugging information about makefile parsing. .It Ar s Print debugging information about suffix-transformation rules. .It Ar t Print debugging information about target list maintenance. .It Ar V Force the .Fl V option to print raw values of variables. .It Ar v Print debugging information about variable assignment. .It Ar w Print entering and leaving directory messages, pre and post processing. .It Ar x Run shell commands with .Fl x so the actual commands are printed as they are executed. .El .It Fl e Specify that environment variables override macro assignments within makefiles. .It Fl f Ar makefile Specify a makefile to read instead of the default .Ql Pa makefile . If .Ar makefile is .Ql Fl , standard input is read. Multiple makefiles may be specified, and are read in the order specified. .It Fl I Ar directory Specify a directory in which to search for makefiles and included makefiles. The system makefile directory (or directories, see the .Fl m option) is automatically included as part of this list. .It Fl i Ignore non-zero exit of shell commands in the makefile. Equivalent to specifying .Ql Fl before each command line in the makefile. .It Fl J Ar private This option should .Em not be specified by the user. .Pp When the .Ar j option is in use in a recursive build, this option is passed by a make to child makes to allow all the make processes in the build to cooperate to avoid overloading the system. .It Fl j Ar max_jobs Specify the maximum number of jobs that .Nm may have running at any one time. The value is saved in .Va .MAKE.JOBS . Turns compatibility mode off, unless the .Ar B flag is also specified. When compatibility mode is off, all commands associated with a target are executed in a single shell invocation as opposed to the traditional one shell invocation per line. This can break traditional scripts which change directories on each command invocation and then expect to start with a fresh environment on the next line. It is more efficient to correct the scripts rather than turn backwards compatibility on. .It Fl k Continue processing after errors are encountered, but only on those targets that do not depend on the target whose creation caused the error. .It Fl m Ar directory Specify a directory in which to search for sys.mk and makefiles included via the .Ao Ar file Ac Ns -style include statement. The .Fl m option can be used multiple times to form a search path. This path will override the default system include path: /usr/share/mk. Furthermore the system include path will be appended to the search path used for .Qo Ar file Qc Ns -style include statements (see the .Fl I option). .Pp If a file or directory name in the .Fl m argument (or the .Ev MAKESYSPATH environment variable) starts with the string .Qq \&.../ then .Nm will search for the specified file or directory named in the remaining part of the argument string. The search starts with the current directory of the Makefile and then works upward towards the root of the filesystem. If the search is successful, then the resulting directory replaces the .Qq \&.../ specification in the .Fl m argument. If used, this feature allows .Nm to easily search in the current source tree for customized sys.mk files (e.g., by using .Qq \&.../mk/sys.mk as an argument). .It Fl n Display the commands that would have been executed, but do not actually execute them unless the target depends on the .MAKE special source (see below). .It Fl N Display the commands which would have been executed, but do not actually execute any of them; useful for debugging top-level makefiles without descending into subdirectories. .It Fl q Do not execute any commands, but exit 0 if the specified targets are up-to-date and 1, otherwise. .It Fl r Do not use the built-in rules specified in the system makefile. .It Fl s Do not echo any commands as they are executed. Equivalent to specifying .Ql Ic @ before each command line in the makefile. .It Fl T Ar tracefile When used with the .Fl j flag, append a trace record to .Ar tracefile for each job started and completed. .It Fl t Rather than re-building a target as specified in the makefile, create it or update its modification time to make it appear up-to-date. .It Fl V Ar variable Print .Nm Ns 's idea of the value of .Ar variable , in the global context. Do not build any targets. Multiple instances of this option may be specified; the variables will be printed one per line, with a blank line for each null or undefined variable. If .Ar variable contains a .Ql \&$ then the value will be expanded before printing. .It Fl W Treat any warnings during makefile parsing as errors. .It Fl X Don't export variables passed on the command line to the environment individually. Variables passed on the command line are still exported via the .Va MAKEFLAGS environment variable. This option may be useful on systems which have a small limit on the size of command arguments. .It Ar variable=value Set the value of the variable .Ar variable to .Ar value . Normally, all values passed on the command line are also exported to sub-makes in the environment. The .Fl X flag disables this behavior. Variable assignments should follow options for POSIX compatibility but no ordering is enforced. .El .Pp There are seven different types of lines in a makefile: file dependency specifications, shell commands, variable assignments, include statements, conditional directives, for loops, and comments. .Pp In general, lines may be continued from one line to the next by ending them with a backslash .Pq Ql \e . The trailing newline character and initial whitespace on the following line are compressed into a single space. .Sh FILE DEPENDENCY SPECIFICATIONS Dependency lines consist of one or more targets, an operator, and zero or more sources. This creates a relationship where the targets .Dq depend on the sources and are usually created from them. The exact relationship between the target and the source is determined by the operator that separates them. The three operators are as follows: .Bl -tag -width flag .It Ic \&: A target is considered out-of-date if its modification time is less than those of any of its sources. Sources for a target accumulate over dependency lines when this operator is used. The target is removed if .Nm is interrupted. .It Ic \&! Targets are always re-created, but not until all sources have been examined and re-created as necessary. Sources for a target accumulate over dependency lines when this operator is used. The target is removed if .Nm is interrupted. .It Ic \&:: If no sources are specified, the target is always re-created. Otherwise, a target is considered out-of-date if any of its sources has been modified more recently than the target. Sources for a target do not accumulate over dependency lines when this operator is used. The target will not be removed if .Nm is interrupted. .El .Pp Targets and sources may contain the shell wildcard values .Ql \&? , .Ql * , .Ql [] , and .Ql {} . The values .Ql \&? , .Ql * , and .Ql [] may only be used as part of the final component of the target or source, and must be used to describe existing files. The value .Ql {} need not necessarily be used to describe existing files. Expansion is in directory order, not alphabetically as done in the shell. .Sh SHELL COMMANDS Each target may have associated with it a series of shell commands, normally used to create the target. Each of the commands in this script .Em must be preceded by a tab. While any target may appear on a dependency line, only one of these dependencies may be followed by a creation script, unless the .Ql Ic \&:: operator is used. .Pp If the first characters of the command line are any combination of .Ql Ic @ , .Ql Ic + , or .Ql Ic \- , the command is treated specially. A .Ql Ic @ causes the command not to be echoed before it is executed. A .Ql Ic + causes the command to be executed even when .Fl n is given. This is similar to the effect of the .MAKE special source, except that the effect can be limited to a single line of a script. A .Ql Ic \- causes any non-zero exit status of the command line to be ignored. .Pp When .Nm is run in jobs mode with .Fl j Ar max_jobs , the entire script for the target is fed to a single instance of the shell. .Pp In compatibility (non-jobs) mode, each command is run in a separate process. If the command contains any shell meta characters .Pq Ql #=|^(){};&<>*?[]:$`\e\en it will be passed to the shell, otherwise .Nm will attempt direct execution. .Pp Since .Nm will .Xr chdir 2 to .Ql Va .OBJDIR before executing any targets, each child process starts with that as its current working directory. .Pp Makefiles should be written so that the mode of .Nm operation does not change their behavior. For example, any command which needs to use .Dq cd or .Dq chdir , without side-effect should be put in parenthesis: .Bd -literal -offset indent avoid-chdir-side-effects: @echo Building $@ in `pwd` @(cd ${.CURDIR} && ${.MAKE} $@) @echo Back in `pwd` ensure-one-shell-regardless-of-mode: @echo Building $@ in `pwd`; \\ (cd ${.CURDIR} && ${.MAKE} $@); \\ echo Back in `pwd` .Ed .Sh VARIABLE ASSIGNMENTS Variables in make are much like variables in the shell, and, by tradition, consist of all upper-case letters. .Ss Variable assignment modifiers The five operators that can be used to assign values to variables are as follows: .Bl -tag -width Ds .It Ic \&= Assign the value to the variable. Any previous value is overridden. .It Ic \&+= Append the value to the current value of the variable. .It Ic \&?= Assign the value to the variable if it is not already defined. .It Ic \&:= Assign with expansion, i.e. expand the value before assigning it to the variable. Normally, expansion is not done until the variable is referenced. .Em NOTE : References to undefined variables are .Em not expanded. This can cause problems when variable modifiers are used. .It Ic \&!= Expand the value and pass it to the shell for execution and assign the result to the variable. Any newlines in the result are replaced with spaces. .El .Pp Any white-space before the assigned .Ar value is removed; if the value is being appended, a single space is inserted between the previous contents of the variable and the appended value. .Pp Variables are expanded by surrounding the variable name with either curly braces .Pq Ql {} or parentheses .Pq Ql () and preceding it with a dollar sign .Pq Ql \&$ . If the variable name contains only a single letter, the surrounding braces or parentheses are not required. This shorter form is not recommended. .Pp If the variable name contains a dollar, then the name itself is expanded first. This allows almost arbitrary variable names, however names containing dollar, braces, parenthesis, or whitespace are really best avoided! .Pp If the result of expanding a variable contains a dollar sign .Pq Ql \&$ the string is expanded again. .Pp Variable substitution occurs at three distinct times, depending on where the variable is being used. .Bl -enum .It Variables in dependency lines are expanded as the line is read. .It Variables in shell commands are expanded when the shell command is executed. .It .Dq .for loop index variables are expanded on each loop iteration. Note that other variables are not expanded inside loops so the following example code: .Bd -literal -offset indent .Dv .for i in 1 2 3 a+= ${i} j= ${i} b+= ${j} .Dv .endfor all: @echo ${a} @echo ${b} .Ed will print: .Bd -literal -offset indent 1 2 3 3 3 3 .Ed Because while ${a} contains .Dq 1 2 3 after the loop is executed, ${b} contains .Dq ${j} ${j} ${j} which expands to .Dq 3 3 3 since after the loop completes ${j} contains .Dq 3 . .El .Ss Variable classes The four different classes of variables (in order of increasing precedence) are: .Bl -tag -width Ds .It Environment variables Variables defined as part of .Nm Ns 's environment. .It Global variables Variables defined in the makefile or in included makefiles. .It Command line variables Variables defined as part of the command line. .It Local variables Variables that are defined specific to a certain target. The seven local variables are as follows: .Bl -tag -width ".ARCHIVE" .It Va .ALLSRC The list of all sources for this target; also known as .Ql Va \&\*[Gt] . .It Va .ARCHIVE The name of the archive file. .It Va .IMPSRC In suffix-transformation rules, the name/path of the source from which the target is to be transformed (the .Dq implied source); also known as .Ql Va \&\*[Lt] . It is not defined in explicit rules. .It Va .INCLUDEDFROMDIR The directory of the file this Makefile was included from. .It Va .INCLUDEDFROMFILE The filename of the file this Makefile was included from. .It Va .MEMBER The name of the archive member. .It Va .OODATE The list of sources for this target that were deemed out-of-date; also known as .Ql Va \&? . .It Va .PREFIX The file prefix of the target, containing only the file portion, no suffix or preceding directory components; also known as .Ql Va * . .It Va .TARGET The name of the target; also known as .Ql Va @ . .El .Pp The shorter forms .Ql Va @ , .Ql Va \&? , .Ql Va \&\*[Lt] , .Ql Va \&\*[Gt] , and .Ql Va * are permitted for backward compatibility with historical makefiles and are not recommended. The six variables .Ql Va "@F" , .Ql Va "@D" , .Ql Va "\*[Lt]F" , .Ql Va "\*[Lt]D" , .Ql Va "*F" , and .Ql Va "*D" are permitted for compatibility with .At V makefiles and are not recommended. .Pp Four of the local variables may be used in sources on dependency lines because they expand to the proper value for each target on the line. These variables are .Ql Va .TARGET , .Ql Va .PREFIX , .Ql Va .ARCHIVE , and .Ql Va .MEMBER . .El .Ss Additional built-in variables In addition, .Nm sets or knows about the following variables: .Bl -tag -width .MAKEOVERRIDES .It Va \&$ A single dollar sign .Ql \&$ , i.e. .Ql \&$$ expands to a single dollar sign. .It Va .ALLTARGETS The list of all targets encountered in the Makefile. If evaluated during Makefile parsing, lists only those targets encountered thus far. .It Va .CURDIR A path to the directory where .Nm was executed. Refer to the description of .Ql Ev PWD for more details. .It Ev MAKE The name that .Nm was executed with .Pq Va argv[0] . For compatibility .Nm also sets .Va .MAKE with the same value. The preferred variable to use is the environment variable .Ev MAKE because it is more compatible with other versions of .Nm and cannot be confused with the special target with the same name. .It Va .MAKE.DEPENDFILE Names the makefile (default .Ql Pa .depend ) from which generated dependencies are read. .It Va .MAKE.EXPAND_VARIABLES A boolean that controls the default behavior of the .Fl V option. .It Va .MAKE.EXPORTED The list of variables exported by .Nm . .It Va .MAKE.JOBS The argument to the .Fl j option. .It Va .MAKE.JOB.PREFIX If .Nm is run with .Ar j then output for each target is prefixed with a token .Ql --- target --- the first part of which can be controlled via .Va .MAKE.JOB.PREFIX . If .Va .MAKE.JOB.PREFIX is empty, no token is printed. .br For example: .Li .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] would produce tokens like .Ql ---make[1234] target --- making it easier to track the degree of parallelism being achieved. .It Ev MAKEFLAGS The environment variable .Ql Ev MAKEFLAGS may contain anything that may be specified on .Nm Ns 's command line. Anything specified on .Nm Ns 's command line is appended to the .Ql Ev MAKEFLAGS variable which is then entered into the environment for all programs which .Nm executes. .It Va .MAKE.LEVEL The recursion depth of .Nm . The initial instance of .Nm will be 0, and an incremented value is put into the environment to be seen by the next generation. This allows tests like: .Li .if ${.MAKE.LEVEL} == 0 to protect things which should only be evaluated in the initial instance of .Nm . .It Va .MAKE.MAKEFILE_PREFERENCE The ordered list of makefile names (default .Ql Pa makefile , .Ql Pa Makefile ) that .Nm will look for. .It Va .MAKE.MAKEFILES The list of makefiles read by .Nm , which is useful for tracking dependencies. Each makefile is recorded only once, regardless of the number of times read. .It Va .MAKE.MODE Processed after reading all makefiles. Can affect the mode that .Nm runs in. It can contain a number of keywords: .Bl -hang -width ignore-cmd .It Pa compat Like .Fl B , puts .Nm into "compat" mode. .It Pa meta Puts .Nm into "meta" mode, where meta files are created for each target to capture the command run, the output generated and if .Xr filemon 4 is available, the system calls which are of interest to .Nm . The captured output can be very useful when diagnosing errors. .It Pa curdirOk= Ar bf Normally .Nm will not create .meta files in .Ql Va .CURDIR . This can be overridden by setting .Va bf to a value which represents True. .It Pa env For debugging, it can be useful to inlcude the environment in the .meta file. .It Pa verbose If in "meta" mode, print a clue about the target being built. This is useful if the build is otherwise running silently. The message printed the value of: .Va .MAKE.META.PREFIX . .It Pa ignore-cmd Some makefiles have commands which are simply not stable. This keyword causes them to be ignored for determining whether a target is out of date in "meta" mode. See also .Ic .NOMETA_CMP . .It Pa silent= Ar bf If .Va bf is True, when a .meta file is created, mark the target .Ic .SILENT . .El .It Va .MAKE.META.BAILIWICK In "meta" mode, provides a list of prefixes which match the directories controlled by .Nm . If a file that was generated outside of .Va .OBJDIR but within said bailiwick is missing, the current target is considered out-of-date. .It Va .MAKE.META.CREATED In "meta" mode, this variable contains a list of all the meta files updated. If not empty, it can be used to trigger processing of .Va .MAKE.META.FILES . .It Va .MAKE.META.FILES In "meta" mode, this variable contains a list of all the meta files used (updated or not). This list can be used to process the meta files to extract dependency information. .It Va .MAKE.META.IGNORE_PATHS Provides a list of path prefixes that should be ignored; because the contents are expected to change over time. The default list includes: .Ql Pa /dev /etc /proc /tmp /var/run /var/tmp .It Va .MAKE.META.PREFIX Defines the message printed for each meta file updated in "meta verbose" mode. The default value is: .Dl Building ${.TARGET:H:tA}/${.TARGET:T} .It Va .MAKEOVERRIDES This variable is used to record the names of variables assigned to on the command line, so that they may be exported as part of .Ql Ev MAKEFLAGS . This behaviour can be disabled by assigning an empty value to .Ql Va .MAKEOVERRIDES within a makefile. Extra variables can be exported from a makefile by appending their names to .Ql Va .MAKEOVERRIDES . .Ql Ev MAKEFLAGS is re-exported whenever .Ql Va .MAKEOVERRIDES is modified. .It Va .MAKE.PATH_FILEMON If .Nm was built with .Xr filemon 4 support, this is set to the path of the device node. This allows makefiles to test for this support. .It Va .MAKE.PID The process-id of .Nm . .It Va .MAKE.PPID The parent process-id of .Nm . .It Va MAKE_PRINT_VAR_ON_ERROR When .Nm stops due to an error, it prints its name and the value of .Ql Va .CURDIR as well as the value of any variables named in .Ql Va MAKE_PRINT_VAR_ON_ERROR . .It Va .newline This variable is simply assigned a newline character as its value. This allows expansions using the .Cm \&:@ modifier to put a newline between iterations of the loop rather than a space. For example, the printing of .Ql Va MAKE_PRINT_VAR_ON_ERROR could be done as ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}. .It Va .OBJDIR A path to the directory where the targets are built. Its value is determined by trying to .Xr chdir 2 to the following directories in order and using the first match: .Bl -enum .It .Ev ${MAKEOBJDIRPREFIX}${.CURDIR} .Pp (Only if .Ql Ev MAKEOBJDIRPREFIX is set in the environment or on the command line.) .It .Ev ${MAKEOBJDIR} .Pp (Only if .Ql Ev MAKEOBJDIR is set in the environment or on the command line.) .It .Ev ${.CURDIR} Ns Pa /obj. Ns Ev ${MACHINE} .It .Ev ${.CURDIR} Ns Pa /obj .It .Pa /usr/obj/ Ns Ev ${.CURDIR} .It .Ev ${.CURDIR} .El .Pp Variable expansion is performed on the value before it's used, so expressions such as .Dl ${.CURDIR:S,^/usr/src,/var/obj,} may be used. This is especially useful with .Ql Ev MAKEOBJDIR . .Pp .Ql Va .OBJDIR may be modified in the makefile as a global variable. In all cases, .Nm will .Xr chdir 2 to .Ql Va .OBJDIR and set .Ql Ev PWD to that directory before executing any targets. . .It Va .PARSEDIR A path to the directory of the current .Ql Pa Makefile being parsed. .It Va .PARSEFILE The basename of the current .Ql Pa Makefile being parsed. This variable and .Ql Va .PARSEDIR are both set only while the .Ql Pa Makefiles are being parsed. If you want to retain their current values, assign them to a variable using assignment with expansion: .Pq Ql Cm \&:= . .It Va .PATH A variable that represents the list of directories that .Nm will search for files. The search list should be updated using the target .Ql Va .PATH rather than the variable. .It Ev PWD Alternate path to the current directory. .Nm normally sets .Ql Va .CURDIR to the canonical path given by .Xr getcwd 3 . However, if the environment variable .Ql Ev PWD is set and gives a path to the current directory, then .Nm sets .Ql Va .CURDIR to the value of .Ql Ev PWD instead. This behaviour is disabled if .Ql Ev MAKEOBJDIRPREFIX is set or .Ql Ev MAKEOBJDIR contains a variable transform. .Ql Ev PWD is set to the value of .Ql Va .OBJDIR for all programs which .Nm executes. .It Ev .TARGETS The list of targets explicitly specified on the command line, if any. .It Ev VPATH Colon-separated .Pq Dq \&: lists of directories that .Nm will search for files. The variable is supported for compatibility with old make programs only, use .Ql Va .PATH instead. .El .Ss Variable modifiers Variable expansion may be modified to select or modify each word of the variable (where a .Dq word is white-space delimited sequence of characters). The general format of a variable expansion is as follows: .Pp .Dl ${variable[:modifier[:...]]} .Pp Each modifier begins with a colon, which may be escaped with a backslash .Pq Ql \e . .Pp A set of modifiers can be specified via a variable, as follows: .Pp .Dl modifier_variable=modifier[:...] .Dl ${variable:${modifier_variable}[:...]} .Pp In this case the first modifier in the modifier_variable does not start with a colon, since that must appear in the referencing variable. If any of the modifiers in the modifier_variable contain a dollar sign .Pq Ql $ , these must be doubled to avoid early expansion. .Pp The supported modifiers are: .Bl -tag -width EEE .It Cm \&:E Replaces each word in the variable with its suffix. .It Cm \&:H Replaces each word in the variable with everything but the last component. .It Cm \&:M Ns Ar pattern Select only those words that match .Ar pattern . The standard shell wildcard characters .Pf ( Ql * , .Ql \&? , and .Ql Oo Oc ) may be used. The wildcard characters may be escaped with a backslash .Pq Ql \e . As a consequence of the way values are split into words, matched, and then joined, a construct like .Dl ${VAR:M*} will normalise the inter-word spacing, removing all leading and trailing space, and converting multiple consecutive spaces to single spaces. . .It Cm \&:N Ns Ar pattern This is identical to .Ql Cm \&:M , but selects all words which do not match .Ar pattern . .It Cm \&:O Order every word in variable alphabetically. To sort words in reverse order use the .Ql Cm \&:O:[-1..1] combination of modifiers. .It Cm \&:Ox Randomize words in variable. The results will be different each time you are referring to the modified variable; use the assignment with expansion .Pq Ql Cm \&:= to prevent such behaviour. For example, .Bd -literal -offset indent LIST= uno due tre quattro RANDOM_LIST= ${LIST:Ox} STATIC_RANDOM_LIST:= ${LIST:Ox} all: @echo "${RANDOM_LIST}" @echo "${RANDOM_LIST}" @echo "${STATIC_RANDOM_LIST}" @echo "${STATIC_RANDOM_LIST}" .Ed may produce output similar to: .Bd -literal -offset indent quattro due tre uno tre due quattro uno due uno quattro tre due uno quattro tre .Ed .It Cm \&:Q Quotes every shell meta-character in the variable, so that it can be passed safely through recursive invocations of .Nm . .It Cm \&:R Replaces each word in the variable with everything but its suffix. .It Cm \&:gmtime The value is a format string for .Xr strftime 3 , using the current .Xr gmtime 3 . .It Cm \&:hash Compute a 32bit hash of the value and encode it as hex digits. .It Cm \&:localtime The value is a format string for .Xr strftime 3 , using the current .Xr localtime 3 . .It Cm \&:tA Attempt to convert variable to an absolute path using .Xr realpath 3 , if that fails, the value is unchanged. .It Cm \&:tl Converts variable to lower-case letters. .It Cm \&:ts Ns Ar c Words in the variable are normally separated by a space on expansion. This modifier sets the separator to the character .Ar c . If .Ar c is omitted, then no separator is used. The common escapes (including octal numeric codes), work as expected. .It Cm \&:tu Converts variable to upper-case letters. .It Cm \&:tW Causes the value to be treated as a single word (possibly containing embedded white space). See also .Ql Cm \&:[*] . .It Cm \&:tw Causes the value to be treated as a sequence of words delimited by white space. See also .Ql Cm \&:[@] . .Sm off .It Cm \&:S No \&/ Ar old_string No \&/ Ar new_string No \&/ Op Cm 1gW .Sm on Modify the first occurrence of .Ar old_string in the variable's value, replacing it with .Ar new_string . If a .Ql g is appended to the last slash of the pattern, all occurrences in each word are replaced. If a .Ql 1 is appended to the last slash of the pattern, only the first word is affected. If a .Ql W is appended to the last slash of the pattern, then the value is treated as a single word (possibly containing embedded white space). If .Ar old_string begins with a caret .Pq Ql ^ , .Ar old_string is anchored at the beginning of each word. If .Ar old_string ends with a dollar sign .Pq Ql \&$ , it is anchored at the end of each word. Inside .Ar new_string , an ampersand .Pq Ql \*[Am] is replaced by .Ar old_string (without any .Ql ^ or .Ql \&$ ) . Any character may be used as a delimiter for the parts of the modifier string. The anchoring, ampersand and delimiter characters may be escaped with a backslash .Pq Ql \e . .Pp Variable expansion occurs in the normal fashion inside both .Ar old_string and .Ar new_string with the single exception that a backslash is used to prevent the expansion of a dollar sign .Pq Ql \&$ , not a preceding dollar sign as is usual. .Sm off .It Cm \&:C No \&/ Ar pattern No \&/ Ar replacement No \&/ Op Cm 1gW .Sm on The .Cm \&:C modifier is just like the .Cm \&:S modifier except that the old and new strings, instead of being simple strings, are an extended regular expression (see .Xr regex 3 ) string .Ar pattern and an .Xr ed 1 Ns \-style string .Ar replacement . Normally, the first occurrence of the pattern .Ar pattern in each word of the value is substituted with .Ar replacement . The .Ql 1 modifier causes the substitution to apply to at most one word; the .Ql g modifier causes the substitution to apply to as many instances of the search pattern .Ar pattern as occur in the word or words it is found in; the .Ql W modifier causes the value to be treated as a single word (possibly containing embedded white space). Note that .Ql 1 and .Ql g are orthogonal; the former specifies whether multiple words are potentially affected, the latter whether multiple substitutions can potentially occur within each affected word. .Pp As for the .Cm \&:S modifier, the .Ar pattern and .Ar replacement are subjected to variable expansion before being parsed as regular expressions. .It Cm \&:T Replaces each word in the variable with its last component. .It Cm \&:u Remove adjacent duplicate words (like .Xr uniq 1 ) . .Sm off .It Cm \&:\&? Ar true_string Cm \&: Ar false_string .Sm on If the variable name (not its value), when parsed as a .if conditional expression, evaluates to true, return as its value the .Ar true_string , otherwise return the .Ar false_string . Since the variable name is used as the expression, \&:\&? must be the first modifier after the variable name itself - which will, of course, usually contain variable expansions. A common error is trying to use expressions like .Dl ${NUMBERS:M42:?match:no} which actually tests defined(NUMBERS), to determine is any words match "42" you need to use something like: .Dl ${"${NUMBERS:M42}" != \&"\&":?match:no} . .It Ar :old_string=new_string This is the .At V style variable substitution. It must be the last modifier specified. If .Ar old_string or .Ar new_string do not contain the pattern matching character .Ar % then it is assumed that they are anchored at the end of each word, so only suffixes or entire words may be replaced. Otherwise .Ar % is the substring of .Ar old_string to be replaced in .Ar new_string . .Pp Variable expansion occurs in the normal fashion inside both .Ar old_string and .Ar new_string with the single exception that a backslash is used to prevent the expansion of a dollar sign .Pq Ql \&$ , not a preceding dollar sign as is usual. .Sm off .It Cm \&:@ Ar temp Cm @ Ar string Cm @ .Sm on This is the loop expansion mechanism from the OSF Development Environment (ODE) make. Unlike .Cm \&.for loops expansion occurs at the time of reference. Assign .Ar temp to each word in the variable and evaluate .Ar string . The ODE convention is that .Ar temp should start and end with a period. For example. .Dl ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} .Pp However a single character variable is often more readable: .Dl ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} .It Cm \&:U Ns Ar newval If the variable is undefined .Ar newval is the value. If the variable is defined, the existing value is returned. This is another ODE make feature. It is handy for setting per-target CFLAGS for instance: .Dl ${_${.TARGET:T}_CFLAGS:U${DEF_CFLAGS}} If a value is only required if the variable is undefined, use: .Dl ${VAR:D:Unewval} .It Cm \&:D Ns Ar newval If the variable is defined .Ar newval is the value. .It Cm \&:L The name of the variable is the value. .It Cm \&:P The path of the node which has the same name as the variable is the value. If no such node exists or its path is null, then the name of the variable is used. In order for this modifier to work, the name (node) must at least have appeared on the rhs of a dependency. .Sm off .It Cm \&:\&! Ar cmd Cm \&! .Sm on The output of running .Ar cmd is the value. .It Cm \&:sh If the variable is non-empty it is run as a command and the output becomes the new value. .It Cm \&::= Ns Ar str The variable is assigned the value .Ar str after substitution. This modifier and its variations are useful in obscure situations such as wanting to set a variable when shell commands are being parsed. These assignment modifiers always expand to nothing, so if appearing in a rule line by themselves should be preceded with something to keep .Nm happy. .Pp The .Ql Cm \&:: helps avoid false matches with the .At V style .Cm \&:= modifier and since substitution always occurs the .Cm \&::= form is vaguely appropriate. .It Cm \&::?= Ns Ar str As for .Cm \&::= but only if the variable does not already have a value. .It Cm \&::+= Ns Ar str Append .Ar str to the variable. .It Cm \&::!= Ns Ar cmd Assign the output of .Ar cmd to the variable. .It Cm \&:\&[ Ns Ar range Ns Cm \&] Selects one or more words from the value, or performs other operations related to the way in which the value is divided into words. .Pp Ordinarily, a value is treated as a sequence of words delimited by white space. Some modifiers suppress this behaviour, causing a value to be treated as a single word (possibly containing embedded white space). An empty value, or a value that consists entirely of white-space, is treated as a single word. For the purposes of the .Ql Cm \&:[] modifier, the words are indexed both forwards using positive integers (where index 1 represents the first word), and backwards using negative integers (where index \-1 represents the last word). .Pp The .Ar range is subjected to variable expansion, and the expanded result is then interpreted as follows: .Bl -tag -width index .\" :[n] .It Ar index Selects a single word from the value. .\" :[start..end] .It Ar start Ns Cm \&.. Ns Ar end Selects all words from .Ar start to .Ar end , inclusive. For example, .Ql Cm \&:[2..-1] selects all words from the second word to the last word. If .Ar start is greater than .Ar end , then the words are output in reverse order. For example, .Ql Cm \&:[-1..1] selects all the words from last to first. .\" :[*] .It Cm \&* Causes subsequent modifiers to treat the value as a single word (possibly containing embedded white space). Analogous to the effect of \&"$*\&" in Bourne shell. .\" :[0] .It 0 Means the same as .Ql Cm \&:[*] . .\" :[*] .It Cm \&@ Causes subsequent modifiers to treat the value as a sequence of words delimited by white space. Analogous to the effect of \&"$@\&" in Bourne shell. .\" :[#] .It Cm \&# Returns the number of words in the value. .El \" :[range] .El .Sh INCLUDE STATEMENTS, CONDITIONALS AND FOR LOOPS Makefile inclusion, conditional structures and for loops reminiscent of the C programming language are provided in .Nm . All such structures are identified by a line beginning with a single dot .Pq Ql \&. character. Files are included with either .Cm \&.include Aq Ar file or .Cm \&.include Pf \*q Ar file Ns \*q . Variables between the angle brackets or double quotes are expanded to form the file name. If angle brackets are used, the included makefile is expected to be in the system makefile directory. If double quotes are used, the including makefile's directory and any directories specified using the .Fl I option are searched before the system makefile directory. For compatibility with other versions of .Nm .Ql include file ... is also accepted. If the include statement is written as .Cm .-include or as .Cm .sinclude then errors locating and/or opening include files are ignored. .Pp Conditional expressions are also preceded by a single dot as the first character of a line. The possible conditionals are as follows: .Bl -tag -width Ds .It Ic .error Ar message The message is printed along with the name of the makefile and line number, then .Nm will exit. .It Ic .export Ar variable ... Export the specified global variable. If no variable list is provided, all globals are exported except for internal variables (those that start with .Ql \&. ) . This is not affected by the .Fl X flag, so should be used with caution. For compatibility with other .Nm programs .Ql export variable=value is also accepted. .Pp Appending a variable name to .Va .MAKE.EXPORTED is equivalent to exporting a variable. .It Ic .export-env Ar variable ... The same as .Ql .export , except that the variable is not appended to .Va .MAKE.EXPORTED . This allows exporting a value to the environment which is different from that used by .Nm internally. .It Ic .info Ar message The message is printed along with the name of the makefile and line number. .It Ic .undef Ar variable Un-define the specified global variable. Only global variables may be un-defined. .It Ic .unexport Ar variable ... The opposite of .Ql .export . The specified global .Va variable will be removed from .Va .MAKE.EXPORTED . If no variable list is provided, all globals are unexported, and .Va .MAKE.EXPORTED deleted. .It Ic .unexport-env Unexport all globals previously exported and clear the environment inherited from the parent. This operation will cause a memory leak of the original environment, so should be used sparingly. Testing for .Va .MAKE.LEVEL being 0, would make sense. Also note that any variables which originated in the parent environment should be explicitly preserved if desired. For example: .Bd -literal -offset indent .Li .if ${.MAKE.LEVEL} == 0 PATH := ${PATH} .Li .unexport-env .Li .export PATH .Li .endif .Pp .Ed Would result in an environment containing only .Ql Ev PATH , which is the minimal useful environment. Actually .Ql Ev .MAKE.LEVEL will also be pushed into the new environment. .It Ic .warning Ar message The message prefixed by .Ql Pa warning: is printed along with the name of the makefile and line number. .It Ic \&.if Oo \&! Oc Ns Ar expression Op Ar operator expression ... Test the value of an expression. .It Ic .ifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ... Test the value of a variable. .It Ic .ifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ... Test the value of a variable. .It Ic .ifmake Oo \&! Oc Ns Ar target Op Ar operator target ... Test the target being built. .It Ic .ifnmake Oo \&! Ns Oc Ar target Op Ar operator target ... Test the target being built. .It Ic .else Reverse the sense of the last conditional. .It Ic .elif Oo \&! Ns Oc Ar expression Op Ar operator expression ... A combination of .Ql Ic .else followed by .Ql Ic .if . .It Ic .elifdef Oo \&! Oc Ns Ar variable Op Ar operator variable ... A combination of .Ql Ic .else followed by .Ql Ic .ifdef . .It Ic .elifndef Oo \&! Oc Ns Ar variable Op Ar operator variable ... A combination of .Ql Ic .else followed by .Ql Ic .ifndef . .It Ic .elifmake Oo \&! Oc Ns Ar target Op Ar operator target ... A combination of .Ql Ic .else followed by .Ql Ic .ifmake . .It Ic .elifnmake Oo \&! Oc Ns Ar target Op Ar operator target ... A combination of .Ql Ic .else followed by .Ql Ic .ifnmake . .It Ic .endif End the body of the conditional. .El .Pp The .Ar operator may be any one of the following: .Bl -tag -width "Cm XX" .It Cm \&|\&| Logical OR. .It Cm \&\*[Am]\*[Am] Logical .Tn AND ; of higher precedence than .Dq \&|\&| . .El .Pp As in C, .Nm will only evaluate a conditional as far as is necessary to determine its value. Parentheses may be used to change the order of evaluation. The boolean operator .Ql Ic \&! may be used to logically negate an entire conditional. It is of higher precedence than .Ql Ic \&\*[Am]\*[Am] . .Pp The value of .Ar expression may be any of the following: .Bl -tag -width defined .It Ic defined Takes a variable name as an argument and evaluates to true if the variable has been defined. .It Ic make Takes a target name as an argument and evaluates to true if the target was specified as part of .Nm Ns 's command line or was declared the default target (either implicitly or explicitly, see .Va .MAIN ) before the line containing the conditional. .It Ic empty Takes a variable, with possible modifiers, and evaluates to true if the expansion of the variable would result in an empty string. .It Ic exists Takes a file name as an argument and evaluates to true if the file exists. The file is searched for on the system search path (see .Va .PATH ) . .It Ic target Takes a target name as an argument and evaluates to true if the target has been defined. .It Ic commands Takes a target name as an argument and evaluates to true if the target has been defined and has commands associated with it. .El .Pp .Ar Expression may also be an arithmetic or string comparison. Variable expansion is performed on both sides of the comparison, after which the integral values are compared. A value is interpreted as hexadecimal if it is preceded by 0x, otherwise it is decimal; octal numbers are not supported. The standard C relational operators are all supported. If after variable expansion, either the left or right hand side of a .Ql Ic == or .Ql Ic "!=" operator is not an integral value, then string comparison is performed between the expanded variables. If no relational operator is given, it is assumed that the expanded variable is being compared against 0 or an empty string in the case of a string comparison. .Pp When .Nm is evaluating one of these conditional expressions, and it encounters a (white-space separated) word it doesn't recognize, either the .Dq make or .Dq defined expression is applied to it, depending on the form of the conditional. If the form is .Ql Ic .ifdef , .Ql Ic .ifndef , or .Ql Ic .if the .Dq defined expression is applied. Similarly, if the form is .Ql Ic .ifmake or .Ql Ic .ifnmake , the .Dq make expression is applied. .Pp If the conditional evaluates to true the parsing of the makefile continues as before. If it evaluates to false, the following lines are skipped. In both cases this continues until a .Ql Ic .else or .Ql Ic .endif is found. .Pp For loops are typically used to apply a set of rules to a list of files. The syntax of a for loop is: .Pp .Bl -tag -compact -width Ds .It Ic \&.for Ar variable Oo Ar variable ... Oc Ic in Ar expression .It Aq make-rules .It Ic \&.endfor .El .Pp After the for .Ic expression is evaluated, it is split into words. On each iteration of the loop, one word is taken and assigned to each .Ic variable , in order, and these .Ic variables are substituted into the .Ic make-rules inside the body of the for loop. The number of words must come out even; that is, if there are three iteration variables, the number of words provided must be a multiple of three. .Sh COMMENTS Comments begin with a hash .Pq Ql \&# character, anywhere but in a shell command line, and continue to the end of an unescaped new line. .Sh SPECIAL SOURCES (ATTRIBUTES) .Bl -tag -width .IGNOREx .It Ic .EXEC Target is never out of date, but always execute commands anyway. .It Ic .IGNORE Ignore any errors from the commands associated with this target, exactly as if they all were preceded by a dash .Pq Ql \- . .\" .It Ic .INVISIBLE .\" XXX .\" .It Ic .JOIN .\" XXX .It Ic .MADE Mark all sources of this target as being up-to-date. .It Ic .MAKE Execute the commands associated with this target even if the .Fl n or .Fl t options were specified. Normally used to mark recursive .Nm Ns s . .It Ic .META Create a meta file for the target, even if it is flagged as .Ic .PHONY , .Ic .MAKE , or .Ic .SPECIAL . Usage in conjunction with .Ic .MAKE is the most likely case. In "meta" mode, the target is out-of-date if the meta file is missing. .It Ic .NOMETA Do not create a meta file for the target. Meta files are also not created for .Ic .PHONY , .Ic .MAKE , or .Ic .SPECIAL targets. .It Ic .NOMETA_CMP Ignore differences in commands when deciding if target is out of date. This is useful if the command contains a value which always changes. If the number of commands change, though, the target will still be out of date. The same effect applies to any command line that uses the variable .Va .OODATE , which can be used for that purpose even when not otherwise needed or desired: .Bd -literal -offset indent skip-compare-for-some: @echo this will be compared @echo this will not ${.OODATE:M.NOMETA_CMP} @echo this will also be compared .Ed The .Cm \&:M pattern suppresses any expansion of the unwanted variable. .It Ic .NOPATH Do not search for the target in the directories specified by .Ic .PATH . .It Ic .NOTMAIN Normally .Nm selects the first target it encounters as the default target to be built if no target was specified. This source prevents this target from being selected. .It Ic .OPTIONAL If a target is marked with this attribute and .Nm can't figure out how to create it, it will ignore this fact and assume the file isn't needed or already exists. .It Ic .PHONY The target does not correspond to an actual file; it is always considered to be out of date, and will not be created with the .Fl t option. Suffix-transformation rules are not applied to .Ic .PHONY targets. .It Ic .PRECIOUS When .Nm is interrupted, it normally removes any partially made targets. This source prevents the target from being removed. .It Ic .RECURSIVE Synonym for .Ic .MAKE . .It Ic .SILENT Do not echo any of the commands associated with this target, exactly as if they all were preceded by an at sign .Pq Ql @ . .It Ic .USE Turn the target into .Nm Ns 's version of a macro. When the target is used as a source for another target, the other target acquires the commands, sources, and attributes (except for .Ic .USE ) of the source. If the target already has commands, the .Ic .USE target's commands are appended to them. .It Ic .USEBEFORE Exactly like .Ic .USE , but prepend the .Ic .USEBEFORE target commands to the target. .It Ic .WAIT If .Ic .WAIT appears in a dependency line, the sources that precede it are made before the sources that succeed it in the line. Since the dependents of files are not made until the file itself could be made, this also stops the dependents being built unless they are needed for another branch of the dependency tree. So given: .Bd -literal x: a .WAIT b echo x a: echo a b: b1 echo b b1: echo b1 .Ed the output is always .Ql a , .Ql b1 , .Ql b , .Ql x . .br The ordering imposed by .Ic .WAIT is only relevant for parallel makes. .El .Sh SPECIAL TARGETS Special targets may not be included with other targets, i.e. they must be the only target specified. .Bl -tag -width .BEGINx .It Ic .BEGIN Any command lines attached to this target are executed before anything else is done. .It Ic .DEFAULT This is sort of a .Ic .USE rule for any target (that was used only as a source) that .Nm can't figure out any other way to create. Only the shell script is used. The .Ic .IMPSRC variable of a target that inherits .Ic .DEFAULT Ns 's commands is set to the target's own name. .It Ic .END Any command lines attached to this target are executed after everything else is done. .It Ic .ERROR Any command lines attached to this target are executed when another target fails. The .Ic .ERROR_TARGET variable is set to the target that failed. See also .Ic MAKE_PRINT_VAR_ON_ERROR . .It Ic .IGNORE Mark each of the sources with the .Ic .IGNORE attribute. If no sources are specified, this is the equivalent of specifying the .Fl i option. .It Ic .INTERRUPT If .Nm is interrupted, the commands for this target will be executed. .It Ic .MAIN If no target is specified when .Nm is invoked, this target will be built. .It Ic .MAKEFLAGS This target provides a way to specify flags for .Nm when the makefile is used. The flags are as if typed to the shell, though the .Fl f option will have no effect. .\" XXX: NOT YET!!!! .\" .It Ic .NOTPARALLEL .\" The named targets are executed in non parallel mode. .\" If no targets are .\" specified, then all targets are executed in non parallel mode. .It Ic .NOPATH Apply the .Ic .NOPATH attribute to any specified sources. .It Ic .NOTPARALLEL Disable parallel mode. .It Ic .NO_PARALLEL Synonym for .Ic .NOTPARALLEL , for compatibility with other pmake variants. .It Ic .ORDER The named targets are made in sequence. This ordering does not add targets to the list of targets to be made. Since the dependents of a target do not get built until the target itself could be built, unless .Ql a is built by another part of the dependency graph, the following is a dependency loop: .Bd -literal \&.ORDER: b a b: a .Ed .Pp The ordering imposed by .Ic .ORDER is only relevant for parallel makes. .\" XXX: NOT YET!!!! .\" .It Ic .PARALLEL .\" The named targets are executed in parallel mode. .\" If no targets are .\" specified, then all targets are executed in parallel mode. .It Ic .PATH The sources are directories which are to be searched for files not found in the current directory. If no sources are specified, any previously specified directories are deleted. If the source is the special .Ic .DOTLAST target, then the current working directory is searched last. .It Ic .PATH. Ns Va suffix Like .Ic .PATH but applies only to files with a particular suffix. The suffix must have been previously declared with .Ic .SUFFIXES . .It Ic .PHONY Apply the .Ic .PHONY attribute to any specified sources. .It Ic .PRECIOUS Apply the .Ic .PRECIOUS attribute to any specified sources. If no sources are specified, the .Ic .PRECIOUS attribute is applied to every target in the file. .It Ic .SHELL Sets the shell that .Nm will use to execute commands. The sources are a set of .Ar field=value pairs. .Bl -tag -width hasErrCtls .It Ar name This is the minimal specification, used to select one of the builtin shell specs; .Ar sh , .Ar ksh , and .Ar csh . .It Ar path Specifies the path to the shell. .It Ar hasErrCtl Indicates whether the shell supports exit on error. .It Ar check The command to turn on error checking. .It Ar ignore The command to disable error checking. .It Ar echo The command to turn on echoing of commands executed. .It Ar quiet The command to turn off echoing of commands executed. .It Ar filter The output to filter after issuing the .Ar quiet command. It is typically identical to .Ar quiet . .It Ar errFlag The flag to pass the shell to enable error checking. .It Ar echoFlag The flag to pass the shell to enable command echoing. .It Ar newline The string literal to pass the shell that results in a single newline character when used outside of any quoting characters. .El Example: .Bd -literal \&.SHELL: name=ksh path=/bin/ksh hasErrCtl=true \e check="set \-e" ignore="set +e" \e echo="set \-v" quiet="set +v" filter="set +v" \e echoFlag=v errFlag=e newline="'\en'" .Ed .It Ic .SILENT Apply the .Ic .SILENT attribute to any specified sources. If no sources are specified, the .Ic .SILENT attribute is applied to every command in the file. .It Ic .STALE This target gets run when a dependency file contains stale entries, having .Va .ALLSRC set to the name of that dependency file. .It Ic .SUFFIXES Each source specifies a suffix to .Nm . If no sources are specified, any previously specified suffixes are deleted. It allows the creation of suffix-transformation rules. .Pp Example: .Bd -literal \&.SUFFIXES: .o \&.c.o: cc \-o ${.TARGET} \-c ${.IMPSRC} .Ed .El .Sh ENVIRONMENT .Nm uses the following environment variables, if they exist: .Ev MACHINE , .Ev MACHINE_ARCH , .Ev MAKE , .Ev MAKEFLAGS , .Ev MAKEOBJDIR , .Ev MAKEOBJDIRPREFIX , .Ev MAKESYSPATH , .Ev PWD , and .Ev TMPDIR . .Pp .Ev MAKEOBJDIRPREFIX and .Ev MAKEOBJDIR may only be set in the environment or on the command line to .Nm and not as makefile variables; see the description of .Ql Va .OBJDIR for more details. .Sh FILES .Bl -tag -width /usr/share/mk -compact .It .depend list of dependencies .It Makefile list of dependencies .It makefile list of dependencies .It sys.mk system makefile .It /usr/share/mk system makefile directory .El .Sh COMPATIBILITY The basic make syntax is compatible between different versions of make, however the special variables, variable modifiers and conditionals are not. .Pp The way that parallel makes are scheduled changed in .Nx 4.0 so that .ORDER and .WAIT apply recursively to the dependent nodes. The algorithms used may change again in the future. .Pp The way that .for loop variables are substituted changed after .Nx 5.0 so that they still appear to be variable expansions. In particular this stops them being treated as syntax, and removes some obscure problems using them in .if statements. .Sh SEE ALSO .Xr mkdep 1 .Sh HISTORY A .Nm command appeared in .At v7 . This .Nm implementation is based on Adam De Boor's pmake program which was written for Sprite at Berkeley. It was designed to be a parallel distributed make running jobs on different machines using a daemon called .Dq customs . .Pp Historically the target/dependency .Dq FRC has been used to FoRCe rebuilding (since the target/dependency does not exist... unless someone creates an .Dq FRC file). .Sh BUGS The .Nm syntax is difficult to parse without actually acting of the data. For instance finding the end of a variable use should involve scanning each the modifiers using the correct terminator for each field. In many places .Nm just counts {} and () in order to find the end of a variable expansion. .Pp There is no way of escaping a space character in a filename.


text:
Flames NewsFlames Home > Women's Basketball Home > News
UNC Asheville Upsets Liberty in Overtime, 83-80
For the first time in more than 30 years, the Liberty women's basketball team went to overtime for the second consecutive game, Saturday afternoon at UNC Asheville. And for the first time in 17 seasons, the Bulldogs pulled out a home win over the Lady Flames, recording an 83-80 overtime triumph at Kimmel Arena.
Asheville overcame a five-point deficit in the final 54 seconds of regulation, tying the score at 72-72 on Ja'Da Brayboy's pair of free throws with 7.1 ticks left. Brayboy then came up with a steal and hit two more foul shots to seal the victory in overtime.
Liberty, now 11-7 overall and 7-2 in the Big South, drops into a share of the conference lead with Winthrop. The Lady Flames saw numerous winning streaks halted, as Liberty entered Saturday's matinee having won three straight road games, five consecutive games overall, 13 straight meetings with UNC Asheville and 16 consecutive road games against the Bulldogs.
This marks the Lady Flames' first back-to-back overtime contests since Dec. 9 and 10, 1983 against Navy and College of Notre Dame.
UNC Asheville posted its first home victory over Liberty since Feb. 8, 1997 by putting six players in double figures in the scoring column and making 88.5 percent (23-of-26) of its free throw attempts. The Bulldogs improve to 8-10 overall and 5-4 in the Big South, one year after going 0-18 in conference play.
Post players Ashley Rininger and Katelyn Adams combined for eight of Liberty's first 10 points, helping the Lady Flames jump out to a 10-4 lead.
Asheville responded with a 7-0 burst, taking an 11-10 advantage on Tianna Knuckles' triple at the 13:42 mark of the opening half.
Rininger outscored the Bulldogs by herself during the next five minutes, 7-6, giving Liberty a 22-17 lead on a bank shot at 8:43.
Liberty's lead reached eight (29-21) 5:10 before halftime, when Reagan Miller nailed a three-pointer.
The Bulldogs responded with an 11-3 run, highlighted by three Shonese Jones three-pointers. The third triple found the bottom of the net with 55 seconds remaining, tying the score at 32-32.
Simone Brown then closed the first-half scoring with two free throws, sending Liberty to halftime with a 34-32 edge.
Helped by 16 points in the paint, Liberty shot 44.4 percent (12-of-27) from the floor during the first 20 minutes, while Asheville connected at a 34.5 percent (10-of-29) rate.
The Lady Flames outrebounded the Bulldogs, 21-15, in the first half, but Asheville turned its four offensive boards into eight second-chance points.
Liberty's first-half statistical leaders included Rininger (12 points), Brown (6 rebounds) and Emily Frazier (5 assists).
Jones' 11 points topped Asheville's scoring chart before the break.
Liberty scored seven unanswered points during the first 1:35 of the second half, pushing its lead to 41-32 on Miller's second triple of the day.
The Lady Flames still led by nine (45-36) before Asheville pulled to within two (48-46) with a 10-3 surge. Consecutive pull-up jumpers by Brayboy closed out the run, with the second connecting at 11:51.
The margin was still two at 51-49 before Liberty extended its lead with free throw shooting. The Lady Flames tallied 12 of their next 16 points at the charity stripe, including two foul shots by Catherine Kearney at the 4:32 mark which gave the Lady Flames a 65-57 cushion.
Liberty was still on top by five (72-67) after Rininger's fast break layup with 54.2 seconds to play.
However, a Knuckles three-pointer from the corner and Brayboy's clutch foul shots necessitated overtime. Sadalia Ellis had a chance to win the game at the buzzer for the Lady Flames, but her floater fell short.
Overtime saw three ties and a lead change during a tightly contested five-minute session. Knuckles and Gwyn broke the final deadlock, as each split a pair of free throws.
Adams trimmed Liberty's deficit to 81-80 with a foul shot at the 24.4-second mark but misfired on her second try. Kearney was there for the offensive rebound, but shortly thereafter, Brayboy came up with what proved to be the game-clinching theft for the Bulldogs.
After Brayboy's two free throws made it a three-point game, Gwyn picked off a Liberty pass as time expired.
Liberty finished with a higher field goal percentage than the host Bulldogs, making 43.3 percent (26-of-60) of their field goal tries to 41.9 percent (26-of-62) for Asheville. The Lady Flames also recorded a 49-31 rebounding advantage, converting 20 offensive boards into 19 second-chance points.
However, Asheville made eight three-pointers, missed just three free throws all afternoon and turned the ball over only seven times in 45 minutes.
Liberty ended the game at 67.6 percent (25-of-37) from the foul line.
Rininger's streak of five straight double-doubles came to an end, but she did lead all players with 21 points before fouling out in overtime.
Adams, Frazier and Kearney chipped in 11 points apiece. Adams grabbed a game-high 10 rebounds for her third double-double of the season. Frazier dished out a season-high nine assists, while Kearney tallied seven of her eight boards at the offensive end.
Brown played a career-high 32 minutes for the Lady Flames, tying her career high with eight points and collecting a matching number of rebounds.
Jones, who hit four triples, paced Asheville with 17 points. Brayboy added 14 of her 16 points after halftime.
Also scoring in double figures for the Bulldogs were Paige Love (14 points), Knuckles (12), Gwyn (10) and KJ Weaver (10).
Liberty will play its next two games at the Vines Center, beginning on Thursday with a rematch of the 2013 Big South Women's Basketball Championship title game against Longwood (6-12, 3-6 Big South). Tipoff is slated for 7 p.m. for the 32nd all-time meeting between the Route 460 foes.

subset: commoncrawl


text:
"It's time for Dodger baseball!"
Yes…I am a Los Angeles Dodger fan and if you're not one…I'm so so sorry. Lol.
This is me, yesterday, at the Dodger opener. It was a beautiful day. And of course we won!
As a curvy sports fan, its hard to find sports gear that fits. I am forced buy a mens medium or large t-shirt and we all know the quality of the mens shirts are not very female-friendly.
Today, I am a happy sports fan! I have found a few Dodger items in Plus Size (XL-4X)!! I love the touch by Alyssa Milano line. Too cute. There aren't many options and some are a little pricey, but I guess it's a start.
Don't worry, you don't have to be a Dodger fan. They have other teams available…but they don't really matter. 🙂


text:
Mechanical Test Engineer
About Tesla
Tesla's goal is to accelerate the world's transition to electric mobility with a full range of increasingly affordable electric cars. California-based Tesla designs and manufactures EVs, as well as EV powertrain components for partners such as Toyota and Daimler. Tesla has delivered over 15,000 electric vehicles to customers in 31 countries. Model S is the world's first premium sedan to be engineered from the ground up as an electric vehicle. Model S was named Motor Trend's prestigious 2013 Car of the Year, achieved the best safety score of any car ever tested by the NHTSA, and Consumer Reports is calling it the best car it has ever tested.
Tesla Motors is committed to hiring and developing top talent from across the world for any given discipline. Our world-class teams operate with a non-conventional automotive product development philosophy of high inter-disciplinary collaboration, flat organizational structure, and technical contribution at all levels. You will be expected to challenge and to be challenged, to create, and to innovate. These jobs are not for everyone, you must have a genuine passion for producing the best vehicles in the world. Without passion, you will find what we're trying to do too difficult.
The Role
The Test Engineer is a member of the Mechanical Test & Validation Team which is part of the Quality Organization.
He/she will lead the development, implementation and application of Tesla internal test and validation plans and methods for various automotive systems and components. The ideal candidate has a proven record of success in the development and conduction of validation plans in an automotive engineering/manufacturing environment. He/she must have a broad technical background with the ability to work with engineering, manufacturing and quality personnel across a wide variety of issues. Strong interpersonal and communication skills are an absolute requirement to establish effective working relationships within and outside of Tesla.
The successful candidate for this position takes pride in his/her hands-on and analytical abilities, organization skills and attention to detail. He/She appreciates an environment where superior work is encouraged, noticed and rewarded.
United States
|Web Site:
|1050 Bing Street
San Carlos, CA 94070
United States
|Cleantech / Energy
Support Tesla Motors with Social Media services
Find more Engineer- Mechanical Test jobs


text:
Did you know?
Attention big breakfasters: More than 24 chicken eggs can fit into one ostrich egg.
By the time you've driven into the bustling town of Oudtshoorn, you will already know you're in the heart of ostrich country.
It seems you can hardly move around this part of the world without bumping into a couple of ostriches, or 'Karoo sock puppets', as these famous flightless birds are fondly called.
But, as you negotiate the streets of Oudtshoorn, you see many rather venerable old mansions and meetings halls from another era.
The rather incongruous houses with the pointy domes are called 'feather palaces', because they were all built more than a century ago when a really perfect ostrich feather could be exchanged for first-class passage to the United Kingdom on 1 of those stately ocean liners that used to ply the waters between Cape Town and Southampton.
When you get to No 3 Baron van Rheede Street, find the closest parking and enter the building. You are now in the CP Nel Museum, in the midst of a stately collection of goods, chattels and memories that capture life in Victorian-era Oudtshoorn so well.
In the museum's Ostrich Hall there's an image of running ostriches carved into rock, discovered somewhere in the Sahara Desert.
Here you can also discover what makes the contemporary ostrich industry tick.
You'll also learn about the first wave of the ostrich industry, when those feathers were all the rage in Europe and Britain.
So what kind of a frontier life did all this newfound wealth spawn? That's what you discover as you wander through various rooms like the chemist shop, the crockery collection and the garage, which is full of classy old vehicles of yesteryear.
Much of this collection comes courtesy of the late Colonel Charles Paul Nel, a businessman and antique buyer who donated his collection to the local community.
Perhaps the biggest surprise comes last, as you enter another room and find yourself in a complete synagogue. This is a reconstruction of the old St John Street Synagogue, primarily used by the local Lithuanian Jewish community, who were prime movers in the feather business before World War I.
Travel tips & Planning info
Who to contact
CP Nel Museum
Tel: +27 (0)44 272 7306
Email: email@example.com
Oudtshoorn Tourist Information
Tel: +27 (0)44 279 2532
Email: email@example.com
How to get here
Oudtshoorn is approximately:
- 55km from George on the N12.
- 420km from Port Elizabeth on the N2 to George and the on the N12 from George.
- 450km from Cape Town via the N1 to Worcester and via the Route 62 Scenic Route from Worcester.
- 430km from Cape Town via the N2 to Mossel Bay and then via the R328 from Mossel Bay.
- Buses travel through Oudtshoorn on regular intervals, to and from all the major cities in South Africa.
Best time to visit
Visiting hours: Mondays to Fridays 8am to 5pm; Saturdays 9am to 1pm.
Around the area
Route 62; the Cango Caves; Mossel Bay; De Rust; and a number of wine estates and private game reserves in the area.
Tours to do
English and Afrikaans-speaking tour guides are available.
Get around
It's best to drive yourself around. Organised tours are also available.
Length of stay
A thorough tour of the museum will take about two hours.
Where to stay
There's a wide variety of accommodation. Check the Oudtshoorn website for options.
What to eat
The official Oudtshoorn website says: 'Quality restaurants, run by food families and famous chefs, are aplenty and often focus on local produce.'
What's happening
Check the Oudtshoorn site for information on festivals and events during your planned visit.
Best buys
Ostrich feather dusters on sale outside the museum.


text:
NVIDIA's 790i Arrives: SLI Rides Againby Kris Boughton on 3/18/2008 9:00 AM EST
- Posted in
- CPUs
19 Comments
Back to Article
jiulemoigt - Thursday, March 20, 2008 - linkI would have thought that with that much gpu power you would have tested AA, or better than medium settings? Seems like the article was slanted to favor the new quad sli which should be giving you all max settings yet looks like 6 fps is what you get... Reply
FITCamaro - Wednesday, March 19, 2008 - linkIt's pretty sad how motherboard prices have ballooned in the past 2 years. You used to pay $200 tops for a motherboard. Now we're getting models routinely at $250, $350, and now even $350.
Now days your motherboard can cost more than both your CPU and memory combined. Reply
halcyon - Wednesday, March 19, 2008 - linknVidia is of course trying to milk the heat seekers and first adopters, who will pay anything for a few micro fps more.
But prices like this will mean that the whole series will sell a few thousand boards worldwide. And manufacturers will be burned (those that got on board to start with, not too many btw).
I think nVidia is in the rope when it comes to the mobo business and it's starting to show.
Products are problematic, late, overpriced and offer very little benefit to the majority of users aren't going to sell very well.
If nVidia wants to stay in the mobo business, they need to make a product that:
- can compete with Intel's cheap/fast chipset (currently P35)
- uses much less energy (P35 is much more energy efficient than anything from nVidia)
- just works (more debugging/testing, not everybody wants to be a hardcore tweaker)
- is priced lower than Intel (let's face it, when did nVidia make a chipset that was more compatible/more reliable than an Intel counterpart? If they are worse, they need to cost less, not more)
I don't see this day happening anytime soon, hence I see the future of nvidia mobo chipset business as quite bleak.
Restroom - Tuesday, March 18, 2008 - linkOkay, perhaps I'm just far enough out of the loop now to have missed out on the part where anyone bothers benching anything at medium quality when the products being compared don't differ on supported capabilities (a new pixel shader implementation, for example) which would be evident only when the game's cranked up all the way.
Maybe for the sake of this particularly evil app it makes sense to even out test methodology by paring things out to Medium so bigger charts can be compiled in future without totally excluding less-capable hardware. Maybe.
What I really don't understand is why we have independent resolution setups; testing for scaling (which in Crysis' case seems to be, obtusely, limited by the software much more than the hardware) rather than testing a more meaningful component-integration/observed-capability hypothesis. This is a motherboard we're testing (at least that's what EVGA would say if you asked) and it really hoses things up when you have to look at not only so many combinations of vastly different components and setups, but try also to divine meaning from this wild-hair test of resolution scaling thrown in the mix.
I realize I'm not being real coherent, so I'll wrap it with a simpler question: We don't buy these sorts of components so we can willingly make a compromise between pretty and fast, so why bother telling us how much of a compromise we'd be making and totally neglect to tell us what it'll be like when we inevitably crank the quality all the way up and see if we can still play it? Reply
quanta - Tuesday, March 18, 2008 - linkToo bad it doesn't include performance results of the I/O component, particularly Networking. It seems people are avoiding it like plague even since the nForce4 ActiveArmor bug. Reply
poohbear - Tuesday, March 18, 2008 - link$350-$400 just for a mobo!?!?!? are they on crack?!!?!? this is the most ridiculous thing i've ever heard since 1000wt psus. c'mon for the love of god, i bought my top of the line DFI expert for $180 a few months after release, what could possible justify $350-$400 for a mobo?
Tell me they're gonna make a non sli version for the rest of us? Reply
lopri - Tuesday, March 18, 2008 - linkI do understand that folks who will purchase a board based on 790i has SLI as a priority, but AT as of late tends to get marveled at advancing technology at the cost of basic functionality of such. How come all the relevant features are not tested for normal usage?
Disk controller test? RAID test? Do SATA device and PATA device get along? How about the new eSATA? Is it functional and performing as expected? (It's a new revision MCP55 according to the review)
How about Blu-Ray playback, whether the ROM is SATA or PATA? Is there any issue?
The review mentions that when 3-way SLI is employed the other PCIe slots render useless. That's fine but how about when one or two video cards are used? In that case all PCIe slots function normally?
Memory overclocking is nice and all that, but is the board handling DIMMs of various flavors without a trouble? Do the board handle 4 sticks of DIMM as well as it does 2? How about 2GB sticks? Well, one could argue that this is a moot point since DDR3 is expensive but then the whole thing is. I think it is appropriate since the review went on in length to detail the technical aspects of DIMM slots as well as the new memory controller.
And there is the issue of power regulation. Better power delivery for overclocking is nice, but only if the board has mastered the basics. Are the fan headers working as they should, be it from a normal boot or wake-up from sleep? All the power-related features (S1/S3/EIST, etc.) that have been problematic on NV chipsets, especially under SLI - are they fixed?
Talking about the fan, there is no mention of thermal characteristics of the chipset and also lacking is how loud/efficient the default fan is. (as well as RPM control) NV chipsets are infamous and I don't think the reviewer isn't aware of this. So it only leaves readers an impression that the review chose not to mention it.
Also missing is the chipset's power consumption figure, network performance, compatibility with various add-in cards.. The list goes on and on and on. The chipset having the same south bridge from 680i/780i can't be an excuse. That south bridge lived through even more chipsets as we understand.
Then there are the charts. Different GPUs, different NUMBER of GPUs, different chipsets, and CPU frequencies all over (overclocked, of course, and I don't see the point of it) - mix them up and we are presented with un-readable mess. It's no wonder that there looks to be erroneous data. (On page 12, X48/8800GTX is consistently slower than 790i/8800GTX by 30~40% with the same CPUs. Does that make sense? If so, should't there be some kind of explanation?)
From this review, users can hardly draw a conclusion on the performance of the chipset, let alone everything else. It'd make a interesting introduction on a new tech, but at the same time a misleading introduction on an upcoming product to actual users. (I thought this was a 'Review', not a 'Study'. If I'm mistaken please let me know.) This has been a trend in AT motherboard review as of late and I for one am somewhat disappointed because I cannot seem to obtain the information that's meaningful for actual usage. Working together with hardware manufacturer is important, but end-user perspective should be the priority No. 1, IMHO.
saivarnos - Tuesday, March 25, 2008 - linkI to agree with the points made above. I am a technically savy person but finding articles of worth on AT has become increasingly difficult - for the layperson and the technically adept. What happened to the good old days of articles titled and delivered like "Price And Performance, 10 motherboards that are fighting for your money!" and then proceeded to deliver on that title. It used to be in the not so distant past that when I came to this site and just a couple others I would have a chipset and motherboard purchase decision made within about an hour of scanning articles, if I wanted the extra technical specifications and the like I could read them, if not I could leave them, now they appear integral to the articles posted here an actually detract from instead of adding value to the article. AT I love you guys, but GO BACK TO YOUR ROOTS! Reply
skinflickBOB - Sunday, March 23, 2008 - linkI guess you deserve your money back Lopri, anyone would think it costs you money to click the mouse button and come over to read somebodies review. NOT!
It's essentially a free site for us readers.. Oh yeah, I know it pays the site for us to click, but you just sound like someone who is eternally ungrateful for anything other than what you do yourself.
seamusmc - Thursday, March 20, 2008 - linkI'm another that agrees with Lopri.
Please review more of the features the board provides. I'm particularly interested in disk and RAID performance, areas the NVidia chipsets have always been lackluster in. Reply
ATWindsor - Wednesday, March 19, 2008 - linkI couldn't agree more, features is all well and good, but only if things works and are stable. No wonder people find it daunting to build a computer, even when you have done it several times you risk going into som "trap" with things not working the way it should, more focus on this in reviews please.
AtW Reply
theYipster - Tuesday, March 18, 2008 - linkI agree with Lopri in every regard. AT needs to stop masquerading these technical showcase articles as reviews. In addition to what Lopri already mentioned, I would add that AT failed to a) address the long standing concerns held throughout the enthusiast community over nForce product quality (regarding the paragraph on PWM design... very undwerwhelming considering that it doesn't offer support to its claim) and b) failed to provide a fair assessment of the value proposition these boards provide. The article states that the 790i provides a noticeable step up in performance over previous generations, and that owners of previous boards would find upgrading worthwhile. This is a bold claim, as such an upgrade would cost nearly $1000 (when factoring in new DDR3 RAM) and would not even include a new CPU or graphics card. Yes, the NB runs a bit cooler and can OC a bit farther, but how and why is that worth $1000, even to the enthusiast who can afford it easily? Lets also consider the grander scheme of things. What worth is it for someone who enjoys the latest and greatest to spend $350 on a board when Nehalem will change all the rules in less than a year. At least previous generations (as well as Intel's X38) provide some shelf life.
In any case, Overclock3d.net has a very informative review of the Striker II Extreme which covers almost everything Lopri mentioned.
ssiu - Tuesday, March 18, 2008 - link"The EVGA 790i Ultra also handled our QX9770 sample with relative ease. We were able to benchmark and play games without incident at 400MHz FSB, our mark of excellence when it comes to quad-core overclocking."
That is a low standard of excellence for a high-end chip. The Q9300/Q9450 overclockers are going to cry.
greylica - Tuesday, March 18, 2008 - linkMwahaha, some will say :
" Now we can finnaly play crysis ! "
Well done, 66 fps... Reply
n0nsense - Tuesday, March 18, 2008 - linkWe can for a very long time.
I do it with 1920x1200 at all Med + 4AA
I have the 680i (P5N32-E SLI) + email@example.com (not the maximum, but lower fan speed = less noise) + 4GB OCZ ReaperX @ 800MHz 4-4-3-12 1T and single reference design 8800GT from ASUS at stock clock (the only modified sing, is stock cooler replaced with Arctic Cooling Accelero S1 which reduced card temp by 25C)
As you can see MB - year old, CPU 1.5 years old.
I can't tell you the exact fps, but it's completely smooth playing.
I expect next generation to bring same smooth play at all very high + all filterings for existing games.
BTW, where 9800x2 in SLI tests on this 790i ?
SpaceRanger - Tuesday, March 18, 2008 - linkWhen do you think nVidia will be putting out these boards for AMD CPU's. The only thing I see for AMD CPU's are boards that support CROSSFIRE, but not SLI. Reply
ap90033 - Tuesday, March 18, 2008 - linkIt just costs to MUCH. I got 8 GIGS DDR2 800 an E8400 and a Single 8800GTS 512 meg, and I have the CPU Running at 3.6 (I am looking to try 3.8 maybe) and I can play any game maxed except Crysis. I can play it at high at 1024x768. I looked at SLI but its to danged expensive, I had 1220$ to spend and decided to get the most performance for the money. I wish they would quit going up in price on these motherboards, hey Nvidia, you do know I can get a GREAT Overclockers motherboard with good features (NO SLI OF COURSE) for $80 right? Why would I pay $250+ more for the board, another $200+ more for DDR3 Ram, and another $250 for another 8800GTS just so "some" games would run 15% faster? Are you nuts??? 10-15% but it costs like $800 MORE???? I think Ill save my $800 or so and use it on my next video card upgrade, my next CPU upgrade, and the next video card upgrade after that! LOL Reply
krnmastersgt - Tuesday, March 18, 2008 - linkBecause this isn't meant at the people that want the best price/performance, this is for the uber-high end user, the extreme benchmarker/extreme gamer, of course by your logic SLI and CrossFire are stupid wastes of money since the performance doesnt scale linearly, but this is meant for enthusiasts and therefore you shouldn't compare it with something like a P35 board. Reply
crimson117 - Tuesday, March 18, 2008 - linkAs an example, I was helping configure a Dell for a home office user, non-gamer, no video editing, etc, but he was fairly well-off money-wise. While picking options, at one point I said something about some component being "plenty for most users" and he replied (in a nice way) "I'm not most users"; so we went with the upgraded version even though the price performance, especially for his usage pattern, didn't make fiscal sense.
The moral is there are people out there who get satisfaction over having the absolute best no matter the price.
Relatedly, an experiment found that people perceive $90 wine as tasting better than $10 wine, even when it was secretly http://www.news.com/8301-13580_3-9849949-39.html">the same exact wine. Reply


text:
County budget includes no cuts, unanticipated revenue
EUREKA- No cuts will be made to Humboldt County departments next year according to the Board of Supervisors.
The supervisors will approve their 2014-2015 fiscal year budget at a meeting on Tuesday.
Instead of financial cuts, the budget includes more than $375,000 of revenue. That revenue was unanticipated, said 1st District Supervisor Rex Bohn. According to Bohn, the revenue is coming from late property tax penalties and a state reimbursement for pre-2004 state mandates. The extra funds will go towards making payroll software upgrades and other updates. The rest will go into the county's reserves.
"It's just a big deal that we're at this point and we didn't have to make cuts," Bohn said. "We had a little extra money. Our reserves are no where- they're like at 1.7 million and we want to be at 6 and a half so we're a long ways off from that, but we were able to put a little money in the reserves."
In addition to the revenue, the supervisors say this budget is unique because the community helped create it. The board held two public hearings on the budget to get comments and suggestions from county residents. Many of those ideas are now in the proposed budget.


text:
Welcome to Dragon Cave! Dragon Cave is an online adoptables game. Collect eggs, raise them to adulthood, and then breed them to create interesting lineages. New types of dragons are added regularly!
Seasonal Dragons take on the characteristics of the season during which they are born. Thus, eggs that are laid in spring match the pink flowers and green buds of spring, and those that are laid in the summer grow to depict the bright green of the forest trees and the yellow of the sun. Eggs laid in autumn display the bright colors of leaves falling from trees, and those that are laid during winter take on the appearance of the icy snow.
Dragons are creatures with nearly unlimited life spans. They can survive for long periods of time, and no one has found a dragon that has died of old age. Adolescence is usually marked by the growth of a hatchling's wings, although not all breeds of dragons grow wings and some breeds have other traits that indicate the beginning of maturation. Once they hit adolescence, hatchlings change quickly, maturing to their full forms in only 2 years.
Dragons don't communicate with each other verbally, but they will growl to scare off predators and frighten prey. Young dragons will emit an extremely high-pitched squeal when they are frightened. To communicate, they use telepathy with each other and to speak to other creatures.


text:
Facebook has taken the unusual step of making public the names and personal details of five men it believes to be behind the Koobface computer worm that attacked hundreds of thousands of computers through the social network's profiles.
The alleged gang appear to be living in St Petersburg and were tracked by Facebook and a team of researchers over three years. Read more


text:
Profit margins for cattle feeders and beef packers moved in opposite directions last week, thanks to lower cash fed cattle prices and a rising wholesale beef market.
Cattle feeding margins declined $12 per head for the week, leaving per head losses at $103 per head, according to the Sterling Beef Profit Tracker. Beef packers saw their margins move onto the positive side of ledger sheet with a per head improvement of $37. Average packer profits are now $19 per head. The Sterling Beef Profit Quotient declined 28 points for the week and the industry profitability index is now negative 308, according to estimates developed by Sterling Marketing Inc., Vale, Ore.
Pork producer margins improved more than $8 per head, with margins now a positive $3.55 per hog marketed, according to the Sterling Pork Profit Tracker. Negotiated cash hog prices improved $2.97 per hundredweight last week to $91.41. Pork packer margins declined $4.49 per head for the week, resulting in losses of $14.55 per head.
A year ago cattle feeders sold cash cattle at $119.90 per hundredweight, resulting in losses of $61.89 per head. Last year cash hogs fetched $78.96 per hundredweight, resulting in losses of $4.02 per head.
The Sterling Beef and Pork Profit Trackers are calculated using actual weekly prices for both cattle and hogs, feed costs, beef and pork cutout prices, drop credits and other factors that influence profit margins.
The Sterling Beef Profit Tracker for the week ending May 11:
- Average feedyard margins: -$103.80 per head.
- Average packer margins: $19.55 per head.
- Sterling Profit Quotient: -308.0.
The Sterling Pork Profit Tracker for the week ending May 10:
- Average farrow-to-finish margins: $3.55 per head.
- Average pork packer margins: -$14.55 per head.
The Sterling Beef and Pork Profit Trackers are produced by Sterling Marketing Inc. and John Nalivka, president, Vale, Ore., and are published weekly by Drovers/CattleNetwork, and PorkNetwork.


text:
ICT is one of the areas with the biggest future job potential. All together, the green economy, the health and new technology sectors will create more than 20 millions of jobs in the years to come. Yet ICT related employment is much, much higher that just the ICT sector, as digital skills are needed throughout the workforce. Whereas previously eSkills was viewed as a specialist area, eSkills are now viewed as an essential competence. Industry studies estimate that by 2015, 90% of jobs will require some level of computer skills.
Get started on your eSkills journey.


text:
Down by the River by artist Pat Meyer
painting by artist Pat Meyer
12 in X 9 in (30.5 cm X 22.9 cm)
oil on linen panel
This painting is available directly from the artist.
More Paintings by Pat Meyer
More art in Today's New Paintings
Keyword Tags
artist day down linen meyer oil oil on linen panel painting panel pat pat meyer river small
link to us - subscribe - about - contact us - press room - login
The Daily Painters Art Gallery - www.dailypainters.com
© 2017 Daily Painters Gallery. All artwork is copyrighted by the individual artists.
Images may not be reproduced without the permission of the artist.


text:
Update, 1:30 p.m.: It sounds like the Rangers will be seeing Joey MacDonald in net and not Rick DiPietro. The Islanders will make a formal announcement later today based on the DiPietro's visit with doctors.
Earlier: Let's see, the Rangers are atop the NHL standings right now and the Islanders are at the very bottom.
The Rangers' franchise goaltender is coming off two sharp weekend wins, while Rick DiPietro is a question mark tonight because of an injury.
As far as I'm concerned, we might as well reward the two points right now.
To the Islanders, of course.
You think I'm kidding, and yet anyone who has paid attention to this storied Rangers-Islanders rivalry knows that the team that has the least going for it is the team that embraces these games most. As compared to even last year, the talent gap between the two teams has only widened, and yet for that reason alone, I am convinced the Islanders will be a challenge tonight.
It sounds silly, I know. Welcome to hockey.
Some other thoughts:

No word on the starting goalie tonight, but I'd be surprised if Henrik Lundqvist doesn't play. As good as Stephen ("Don't call me a minor leaguer") Valiquette has been for the Rangers, the schedule has eased up enough where Lundqvist is afforded some rest between games. That said, I could see Valiquette playing Saturday night in Toronto.

Chris Drury not only is without a goal this season, but I'm fairly certain he's responsible for the global financial crisis, Saturday's rain, and the lack of quality sitcoms on TV as well.
Look, the guy has been a disappointment so far this season. No one is going to dispute that, least of all Drury. But some of the criticism I've been reading about the Rangers' captain is still unjust. While the Rangers certainly aren't paying Drury $7 million for three assists in 11 games, he has still found multiple ways to contribute through his own-zone play, his penalty killing, and the way in which the rest of his team has embraced him as their new captain.
Again, no one's trying to give the guy a pass. But seeing how he's still healthy and in the prime of his career, I have a hard time believing that Drury is going to struggle like this all season. More likely is that this goal-scoring slump has taken on a life of its own, to the extent that the player's confidence is in tatters.
How does that change? Very often with one goal, however it comes: an end-to-end rush, a one-timer from the slot, or even a puck that bounces off his elbow before trickling into the net.
Until then, I agree that you have reason to be concerned. But given the Rangers' record so far, I'm not sure you're in a position to complain.
More later…