- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
- <HTML>
- <HEAD>
- <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=iso-8859-1">
- <META NAME="VPSiteProject" CONTENT="file:///D|/rld/Docs/Project.vpp">
- <META NAME="GENERATOR" Content="Visual Page 2.0 for Windows">
- <TITLE>Jambase Reference</TITLE>
- </HEAD>
- <BODY>
- <P ALIGN="CENTER"><A HREF="http://ddunbar/Analytics/Jam/Jam.html"> Jam</A>
- <H1 ALIGN="CENTER"><A NAME="TOP"></A> Jambase Reference</H1>
- <P>Jambase is a base set of Jam rules which provide roughly make(1)-like functionality for <A HREF="Jam.html"><B>jam</B></A>,
- the Jam executable program. This document, which started out as the Jambase(5) man page, is a reference guide to
- the <A HREF="#RULES">rules</A>, <A HREF="#PSEUDOTARGETS">pseudotargets</A>, and <A HREF="#VARS">variables</A> defined
- in Jambase for use in Jamfiles.</P>
- <P>For further information see:</P>
- <UL>
- <LI><A HREF="Jamfile.html">Using Jamfiles, Jamrules and Jambase</A>
- <LI><A HREF="Jam.html">The Jam Executable Program</A>
- </UL>
- <P>Jam documentation and source are available from the <A HREF="http://public.perforce.com/public/index.html">Perforce
- Public Depot</A>. <BR>
- For detailed information about any of the rules summarized below, see the <A HREF="Jambase">Jambase</A> file itself.</P>
- <P>
- <HR ALIGN="CENTER">
- <H2><A NAME="RULES"></A> Jambase Rules</H2>
- <P><B>ToDo: </B>makeString, makeDirName, Archive, ShrLibrary, Libs, etc.</P>
- <P><B>Always </B><I>target target ... </I>; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Always build these targets. Jambase example:<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">Always clean uninstall ;</FONT></P>
- </BLOCKQUOTE>
- <P><B>Archive</B> <I>library</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Compiles <I>sources</I> and archives the targets into the archive <I>library.</I> The intermediate <I>objects</I>
- are deleted. Calls Objects and ArchiveFromObjects.</P>
- <P>If Library is invoked with no suffix on <I>library</I>, the $(SUFLIB) suffix is used.<BR>
- If Library is invoked with a suffix on <I>library<B>, </B></I>it is corrected to the platform $(SUFLIB).<BR>
- <B>ToDo: </B>Is the "lib" prefix added? Ignored? What name is used in the link flag (-l) ?</P>
- </BLOCKQUOTE>
- <P><B>As</B> <I>obj.o</I> : <I>source.s</I> ;</P>
- <BLOCKQUOTE>
- <P>Assemble the file <I>source.s.</I> Called by the Object rule.
- </BLOCKQUOTE>
- <P><B>Bulk</B> <I>directory</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Copies <I>sources</I> into <I>directory.</I>
- </BLOCKQUOTE>
- <P><B>Cc</B> <I>object</I> : <I>source</I> ;
- <BLOCKQUOTE>
- <P>Compile the file <I>source</I> into <I>object,</I> using the C compiler $(CC), its flags $(CCFLAGS) and $(OPTIM),
- and the header file directories $(HDRS). Called by the Object rule.
- </BLOCKQUOTE>
- <P><B>CcFlags </B><I>flags </I>; <B>Not implemented.</B></P>
- <P><B>C++</B> <I>obj.o</I> : <I>source.cpp</I> ;
- <BLOCKQUOTE>
- <P>Compile the C++ source file <I>source.cpp.</I> Called by the Object rule.
- </BLOCKQUOTE>
- <P><B>C++Flags </B><I>flags</I> ; <B>Not implemented.</B></P>
- <P><B>Chmod</B> <I>target</I> ;
- <BLOCKQUOTE>
- <P><I>(Unix only.)</I> Change file permissions on <I>target</I> to target-specific $(MODE) value set by Link, File,
- Install*, and Shell rules.
- </BLOCKQUOTE>
- <P><B>Clean</B> <I>clean</I> : <I>targets</I> ;
- <BLOCKQUOTE>
- <P>Removes existing <I>targets</I> when <I>clean</I> is built. clean is not a dependency of all, and must be built
- explicitly for targets to be removed.
- </BLOCKQUOTE>
- <P><B>Defines </B><I>names </I>;
- <BLOCKQUOTE>
- <P>Add <I>names</I> to the list of preprocessor defines to variable DEFINES.</P>
- </BLOCKQUOTE>
- <P><B>Depends</B> <I>targets1</I> : <I>targets2 </I>; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Builds a direct dependency. Each of <I>targets1</I> depend on each of <I>targets2</I>.<BR>
- <I>targets1</I> will be rebuilt if <I>targets2</I> are rebuilt or are newer than <I>targets1</I>.<BR>
- Jambase examples:<BR>
- <FONT SIZE="2" FACE="Arial, Helvetica">Depends all : shell files lib exe obj ;<BR>
- Depends all shell files lib exe obj : first ;</FONT></P>
- </BLOCKQUOTE>
- <P><B>Echo </B><I>args </I>; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Blurts out message <I>args</I> to stdout.</P>
- </BLOCKQUOTE>
- <P><B>Exit </B><I>args </I>; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Blurts out message args, and exits with a failure status.</P>
- </BLOCKQUOTE>
- <P><B>FDefines</B> <I>defines</I> ;
- <BLOCKQUOTE>
- <P>Expands a list of definitions into a list of compiler (or preprocessor) switches (such as -D<I>symbol</I>=<I>val</I>
- on Unix) to pass the definitions.
- </BLOCKQUOTE>
- <P><B>File</B> <I>target</I> : <I>source</I> ;
- <BLOCKQUOTE>
- <P>Copies <I>source</I> into <I>target.</I>
- </BLOCKQUOTE>
- <P><B>FAppendSuffix</B> <I>f1 f2 ... </I>: $(SUF) ;
- <BLOCKQUOTE>
- <P>Return $(<) with suffixes.<B> </B>Example:<B><BR>
- </B><FONT SIZE="2" FACE="Courier New, Courier">FAppendSuffix yacc lex foo.bat : $(SUFEXE) ;<BR>
- returns (yacc.exe,lex.exe,foo.bat) on Windows. <BR>
- returns (yacc, lex, foo.bat) on Unix</FONT></P>
- </BLOCKQUOTE>
- <P><B>FDefines</B> <I>...</I> ;
- <BLOCKQUOTE>
- <P>Unknown</P>
- </BLOCKQUOTE>
- <P><B>FDirName</B> <I>d1 d2 ...</I> ;
- <BLOCKQUOTE>
- <P>Return path from root to dir.<B> </B><FONT SIZE="2" FACE="Courier New, Courier">d1/d2</FONT> on unix; <FONT
- SIZE="2" FACE="Courier New, Courier">d1\d2</FONT> on windows.</P>
- </BLOCKQUOTE>
- <P><B>FGrist</B> <I>d1 d2 ...</I> ;
- <BLOCKQUOTE>
- <P>Return <FONT SIZE="2" FACE="Courier New, Courier">d1!d2!</FONT></P>
- </BLOCKQUOTE>
- <P><B>FGristFiles</B> <I>value</I> ;
- <BLOCKQUOTE>
- <P>Return <FONT SIZE="2" FACE="Courier New, Courier">$(value:G=$(SOURCE_GRIST))</FONT></P>
- </BLOCKQUOTE>
- <P><B>FGristSourceFiles</B> <I>value</I> ;
- <BLOCKQUOTE>
- <P>Return source file name with grist in it. Leave headers alone.<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">$(value:G=$(SOURCE_GRIST))</FONT></P>
- </BLOCKQUOTE>
- <P><B>FDirName</B> <I>dirs</I> ;
- <BLOCKQUOTE>
- <P>Describe ???</P>
- </BLOCKQUOTE>
- <P><B>FIncludes</B> <I>dirs</I> ;
- <BLOCKQUOTE>
- <P>Expands a list of directories into a list of compiler (or preprocessor) switches (such as -I<I>dir</I> on Unix)
- to add the directories to the header inclusion search path.
- </BLOCKQUOTE>
- <P><B>FQuote</B> <I>files</I> ;
- <BLOCKQUOTE>
- <P>Returns each of <I>files</I> suitably quoted so as to hide shell metacharacters (such as whitespace and filename
- matching wildcards) from the shell.
- </BLOCKQUOTE>
- <P><B>FRelPath </B><I>d1 </I>:<I> d2</I> ;
- <BLOCKQUOTE>
- <P>Return relative path from <FONT SIZE="2" FACE="Courier New, Courier">d1</FONT> to <FONT SIZE="2" FACE="Courier New, Courier">d2</FONT>.</P>
- </BLOCKQUOTE>
- <P><B>FReverse </B><I>a1 a2 a3</I> ;
- <BLOCKQUOTE>
- <P>Return <FONT SIZE="2" FACE="Courier New, Courier">a3 a2 a1</FONT>.</P>
- </BLOCKQUOTE>
- <P><B>FStripCommon</B> <I>v1</I> :<I> v2</I> ;
- <BLOCKQUOTE>
- <P>Strip common inital parts of v1 v2.</P>
- </BLOCKQUOTE>
- <P><B>FSubDir </B><I>d1 d2</I> ... ; <B>deprecated ?</B>
- <BLOCKQUOTE>
- <P>Return path to named directory.</P>
- </BLOCKQUOTE>
- <P><B>FSubDirPath </B><I>d1 d2</I> ... ;
- <BLOCKQUOTE>
- <P>If jam is invoked in a subdirectory of TOP, then ../ is prepended to every level.</P>
- <P>
- </BLOCKQUOTE>
- <P><B>GenFile</B> <I>target</I> : <I>image</I> <I>sources</I> ;</P>
- <BLOCKQUOTE>
- <P>Runs the command "<I>image</I> <I>target</I> <I>sources</I>" to create <I>target</I> from <I>sources</I>
- and <I>image</I>. (where <I>image</I> is an executable built by the Main rule.)</P>
- </BLOCKQUOTE>
- <P><B>GenFile1</B> <I>target</I> : <I>image</I> <I>sources</I> ;</P>
- <BLOCKQUOTE>
- <P>Runs<B> </B>without setting up Clean or Depends rules.</P>
- </BLOCKQUOTE>
- <P><B>Glob </B><I>directories </I><B>:</B><I> patterns </I><B>;</B> <B>builtin</B>
- <BLOCKQUOTE>
- <P>Scans <I>directories</I> for files matching regex <I>patterns</I>, returning the list of matching files with
- directory prepended. Useful with the<FONT FACE="Courier New, Courier"> [...] </FONT>construct to change the Glob
- result into a list.
- </BLOCKQUOTE>
- <P><B>HardLink</B> <I>target</I> : <I>source</I> ;
- <BLOCKQUOTE>
- <P>Makes <I>target</I> a hard link to <I>source,</I> if it isn't one already. (Unix only.)
- </BLOCKQUOTE>
- <P><B>HdrRule</B> <I>source</I> : <I>headers</I> ;
- <BLOCKQUOTE>
- <P>Arranges the proper dependencies when the file <I>source</I> includes the files <I>headers</I> through the "#include"
- C preprocessor directive.</P>
- <P>This rule is not intended to be called explicitly. It is called automatically during header scanning on sources
- handled by the Object rule (e.g., sources in Main or Library rules).</P>
- </BLOCKQUOTE>
- <P><B>Includes </B><I>targets1 </I>: <I>targets2 </I>; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Builds a siebling dependency. Any target that depends on <I>targets1</I> will also depend on <I>targets2</I>.<B><BR>
- </B>Such dependencies arise when one source file includes another.</P>
- </BLOCKQUOTE>
- <P><B>InstallBin</B> <I>dir</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Copy <I>sources</I> into <I>dir</I> with mode $(EXEMODE).
- </BLOCKQUOTE>
- <P><B>InstallFile </B><I>dir</I> : <I>sources</I> ;</P>
- <BLOCKQUOTE>
- <P>Copy <I>sources</I> into <I>dir</I> with mode $(FILEMODE).</P>
- </BLOCKQUOTE>
- <P><B>InstallInto </B><I>dir</I> : <I>sources</I> ;</P>
- <BLOCKQUOTE>
- <P>Copy <I>sources</I> into <I>dir</I> with Chmod, Chown, Chgrp. Utility rule.</P>
- </BLOCKQUOTE>
- <P><B>InstallLib</B> <I>dir</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Copy <I>sources</I> into <I>dir</I> with mode $(FILEMODE).</P>
- </BLOCKQUOTE>
- <P><B>InstallMan</B> <I>dir</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Copy <I>sources</I> into the appropriate subdirectory of <I>dir</I> with mode $(FILEMODE). The subdirectory
- is man<I>s,</I> where <I>s</I> is the suffix of each of sources.
- </BLOCKQUOTE>
- <P><B>InstallShell</B> <I>dir</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Copy <I>sources</I> into <I>dir</I> with mode $(SHELLMODE).</P>
- </BLOCKQUOTE>
- <P><B>InstallShr</B> <I>dir</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Copy <I>sources</I> into <I>dir</I> with mode $(SHRMODE).
- </BLOCKQUOTE>
- <P><B>Leaves</B> <I>...</I> ; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Leaves the innermost loop.</P>
- </BLOCKQUOTE>
- <P><B>Lex</B> <I>source.c</I> : <I>source.l</I> ;
- <BLOCKQUOTE>
- <P>Process the lex(1) source file <I>source.l</I> and rename the lex.yy.c to <I>source.c.</I> Called by the Object
- rule.
- </BLOCKQUOTE>
- <P><B>Library</B> <I>library</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Compiles <I>sources</I> and builds a shared <I>library.</I> The intermediate <I>objects</I> are deleted. Calls
- Objects and LibraryFromObjects.</P>
- <P>If Library is invoked with no suffix on <I>library</I>, the $(SUFLIB) suffix is used.<BR>
- If Library is invoked with a suffix on <I>library<B>, </B></I>it is corrected to the platform $(SUFLIB).<BR>
- <B>ToDo: </B>Is the "lib" prefix added? Ignored? What name is used in the link flag (-l) ?</P>
- </BLOCKQUOTE>
- <P><B>LibraryFromObjects</B> <I>library</I> : <I>objects</I> ;
- <BLOCKQUOTE>
- <P>Archives <I>objects</I> into <I>library.</I> The <I>objects</I> are then deleted.</P>
- <P>If <I>library</I> has no suffix, the $(SUFLIB) suffix is used.</P>
- </BLOCKQUOTE>
- <P><B>Libs</B> <I>image</I> : <I>libraries</I> ;
- <BLOCKQUOTE>
- <P>Make <I>image</I> depend on <I>libraries</I> and include them during the linking.<BR>
- <I>image</I> may be referenced without a suffix in this rule invocation; Libs supplies the suffix or adjusts the
- suffix supplied for the current platform. (Rule was LinkLibraries).</P>
- </BLOCKQUOTE>
- <P><B>LibFlags </B><I>flag1 flag2 </I>;
- <BLOCKQUOTE>
- <P>Modifies LINKFLAGS in a compiler independent way.</P>
- </BLOCKQUOTE>
- <P><B>Link</B> <I>image</I> : <I>objects</I> ;
- <BLOCKQUOTE>
- <P>Links <I>image</I> from <I>objects</I> and sets permissions on <I>image</I> to $(EXEMODE). <I>Image</I> must
- be actual filename; suffix is not supplied. Called by Main.
- </BLOCKQUOTE>
- <P><B>LinkFlags </B><I>flags</I> ;</P>
- <P><B>Main</B> <I>image</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Compiles <I>sources</I> and links them into <I>image.</I> Calls Objects and MainFromObjects.</P>
- <P><I>image</I> may be referenced without a suffix in this rule invocation; Main supplies the suffix or adjust
- the suffix supplied for the current platform.</P>
- </BLOCKQUOTE>
- <P><B>MainFromObjects</B> <I>image</I> : <I>objects</I> ;
- <BLOCKQUOTE>
- <P>Links <I>objects</I> into <I>image.</I> Dependency of exe. MainFromObjects supplies the suffix on <I>image</I>
- filename.
- </BLOCKQUOTE>
- <P><B>MakeLocate</B> <I>target</I> : <I>dir</I> ;
- <BLOCKQUOTE>
- <P>Creates <I>dir</I> and causes <I>target</I> to be built into <I>dir</I>.
- </BLOCKQUOTE>
- <P><B>Match </B><I>regexps </I><B>:</B><I> list </I><B>;</B> <B>builtin</B>
- <BLOCKQUOTE>
- <P>Matches the <B>egrep</B> style regular expression<I> regexps</I> against the strings in<I> list</I>.<I> </I>Result
- is the concatenation of matching subexpressions for each string in <I>list</I>. Useful with <FONT FACE="Courier New, Courier">[
- ]</FONT> to change result into a list.</P>
- </BLOCKQUOTE>
- <P><B>MkDir</B> <I>dir</I> ;
- <BLOCKQUOTE>
- <P>Creates <I>dir</I> and its parent directories.</P>
- </BLOCKQUOTE>
- <P><B>NoCare </B><I>target ...</I> ; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Don't panic if the target cannot be built.</P>
- </BLOCKQUOTE>
- <P><B>NotFile </B><I>target ...</I> ; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Ignore the timestamp of the target; it is not a file.</P>
- </BLOCKQUOTE>
- <P><B>NoUpdate</B> <I>target ...</I> ; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Create the target if needed, but never update it.
- </BLOCKQUOTE>
- <P><B>Object</B> <I>object</I> : <I>source</I> ;
- <BLOCKQUOTE>
- <P>Compiles a <I>single</I> source file source into <I>object.</I> The Main and Library rules use this rule to
- compile source files.</P>
- <P>Causes <I>source</I> to be scanned for "#include" directives and calls HdrRule to make all included
- files dependencies of <I>object</I>.</P>
- <P>Calls one of the following rules to do the actual compiling, depending on the suffix of source:</P>
- <PRE> *.c: Cc
- *.cc: C++
- *.cpp: C++
- *.cxx: C++
- <STRIKE> *.C: C++ </STRIKE>
- *.l: Lex
- *.y: Yacc
- *.*: UserObject
- </PRE>
- </BLOCKQUOTE>
- <P><B>ObjectC++Flags</B> <I>source</I> : <I>flags</I> ; <BR>
- <B>ObjectCcFlags</B> <I>source</I> : <I>flags</I> ;
- <BLOCKQUOTE>
- <P>Add <I>flags</I> to the source-specific value of $(CCFLAGS) or $(C++FLAGS) when compiling <I>source.</I> Any
- file suffix on <I>source</I> is ignored.
- </BLOCKQUOTE>
- <P><B>ObjectDefines</B> <I>object</I> : <I>defines</I> ;
- <BLOCKQUOTE>
- <P>Adds preprocessor symbol definitions to the (gristed) target-specific $(CCDEFS) for the <I>object</I>.
- </BLOCKQUOTE>
- <P><B>ObjectHdrs</B> <I>source</I> : <I>dirs</I> ;
- <BLOCKQUOTE>
- <P>Add <I>dirs</I> to the source-specific value of $(HDRS) when scanning and compiling <I>source.</I> Any file
- suffix on <I>source</I> is ignored.
- </BLOCKQUOTE>
- <P><B>Objects</B> <I>sources</I> ;
- <BLOCKQUOTE>
- <P>For each source file in <I>sources,</I> calls Object to compile the source file into a similarly named object
- file.
- </BLOCKQUOTE>
- <P><B>Resource </B><I>targets : sources ;</I></P>
- <BLOCKQUOTE>
- <P>Invokes the resource compiler to build target.</P>
- </BLOCKQUOTE>
- <P><B>RmTemps</B> <I>targets</I> : <I>sources</I> ;
- <BLOCKQUOTE>
- <P>Marks <I>sources</I> as temporary with the Temporary rule, and deletes <I>sources</I> once <I>targets</I> are
- built. Must be the last rule invoked on <I>targets.</I> Used internally by LibraryFromObjects rule.
- </BLOCKQUOTE>
- <P><B>Setuid</B> <I>images</I> ;
- <BLOCKQUOTE>
- <P>Sets the setuid bit on each of <I>images</I> after linking. (Unix only.)
- </BLOCKQUOTE>
- <P><B>Shell</B> <I>image</I> : <I>source</I> ;
- <BLOCKQUOTE>
- <P>Copies <I>source</I> into the executable sh(1) script <I>image.</I> Ensures that the first line of the script
- is $(SHELLHEADER) (default #!/bin/sh).</P>
- </BLOCKQUOTE>
- <P><B>SoftLink</B> <I>target</I> : <I>source</I> ;
- <BLOCKQUOTE>
- <P>Makes <I>target</I> a symbolic link to <I>source,</I> if it isn't one already. (Unix only.)
- </BLOCKQUOTE>
- <P><B>SubDir</B> <I>TOP d1 ... dn</I> ;
- <BLOCKQUOTE>
- <P>Sets up housekeeping for the source files located in <I><CODE>$(TOP)/d1/.../dn</CODE></I>:
- <UL>
- <LI><I>TOP</I> is the name of a variable; <I>d1</I> thru <I>dn</I> are elements of a directory path.
- <LI>Reads in rules file associated with <I>TOP</I>, if it hasn't already been read.
- <LI>Initializes variables for search paths, output directories, compiler flags, and grist, using <I>d1 ... dn</I>
- tokens.
- <LI>If TOP is not defined, relative path directories are used
- </UL>
- <P>
- </BLOCKQUOTE>
- <P><B>SubDirC++Flags</B> <I>flags</I> ; <BR>
- <B>SubDirCcFlags</B> <I>flags</I> ;
- <BLOCKQUOTE>
- <P>Adds <I>flags</I> to the compiler flags for source files in SubDir's directory.
- </BLOCKQUOTE>
- <P><B>SubDirDefines</B> <I>f1 f2 ...</I> ;
- <BLOCKQUOTE>
- <P>Directory dependent compiler macro definitions.</P>
- </BLOCKQUOTE>
- <P><B>SubDirHdrs</B> <I>d1 ... dn</I> ;
- <BLOCKQUOTE>
- <P>Adds the path <I>d1/.../dn/</I> to the header search paths for source files in SubDir's directory. <I>d1</I>
- through <I>dn</I> are elements of a directory path.
- </BLOCKQUOTE>
- <P><B>SubInclude</B> <I>VAR d1 ... dn</I> ;
- <BLOCKQUOTE>
- <P>Reads the Jamfile in <I><CODE>$(VAR)/d1/.../dn/</CODE></I>.
- </BLOCKQUOTE>
- <P><B>SubRules</B> <I>TOP d1 ... dn</I> :<I> Other-TOP</I> ;
- <BLOCKQUOTE>
- <P>Reads another tree's Jamrules.</P>
- </BLOCKQUOTE>
- <P><B>Temporary </B><I>target ... </I>; <B>builtin</B>
- <BLOCKQUOTE>
- <P>Target need not be present if sources haven't changed.</P>
- </BLOCKQUOTE>
- <P><B>Unique</B> <I>images</I> : <I>flags</I> ; <B>(to be implemented)</B>
- <BLOCKQUOTE>
- <P>Adds<I> flags </I>to <I>images</I>, if it does not already exist.<BR>
- Useful for setting compiler flags, without getting duplicates.</P>
- </BLOCKQUOTE>
- <P><B>Undefines</B> <I>images</I> : <I>symbols</I> ;
- <BLOCKQUOTE>
- <P>Adds flags to mark <I>symbols</I> as undefined on link command for <I>images</I>. <I>Images</I> may be referenced
- unsuffixed; the Undefines rule supplies the suffix.
- </BLOCKQUOTE>
- <P><B>UserObject</B> <I>object</I> : <I>source</I> ;
- <BLOCKQUOTE>
- <P>This rule is called by Object for source files with unknown suffixes, and should be defined in Jamrules with
- a user-provided rule to handle the source file types not handled by the Object rule. The Jambase UserObject rule
- merely issues a complaint when it encounters <I>source</I> with file suffixes it does not recognize.
- </BLOCKQUOTE>
- <P><B>Yacc</B> <I>source.c</I> : <I>source.y</I> ;
- <BLOCKQUOTE>
- <P>Process the yacc(1) file <I>source.y</I> and renamed the resulting y.tab.c and y.tab.h to <I>source.c.</I> Produces
- a y.tab.h and renames it to <I>source.h.</I> Called by the <B>Object</B> rule.
- </BLOCKQUOTE>
- <P>
- <HR ALIGN="CENTER">
- <A NAME="PSEUDOTARGETS"></A>
- <H3>Jambase Pseudotargets</H3>
- <P>There are two kinds of Jam targets: file targets and pseudotargets. File targets are objects that can be found
- in the filesystem. Pseudotargets are symbolic, defined by <I>NotFile</I> rule and usually represent other targets.
- Most Jambase rules that define file targets also define pseudotargets which are dependent on types of file targets.
- A pseudotarget is created by the <B>NotFile</B> rule.<BR>
- The Jambase pseudotargets are:</P>
- <P>
- <TABLE BORDER="1" WIDTH="68%">
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>all</B>
- </TD>
- <TD WIDTH="89%">Default target</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>clean</B>
- </TD>
- <TD WIDTH="89%">Remove built targets (except files copied by Install rules)</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>dirs</B>
- </TD>
- <TD WIDTH="89%">Directories where target files are written</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>files</B>
- </TD>
- <TD WIDTH="89%">Files copied by File and Bulk rules</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>first</B>
- </TD>
- <TD WIDTH="89%">first dependent of<B> 'all',</B> for initialization</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>exe</B>
- </TD>
- <TD WIDTH="89%">Executables linked by Main or MainFromObjects rules</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>install</B>
- </TD>
- <TD WIDTH="89%">Files copied by Install rules</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>lib</B>
- </TD>
- <TD WIDTH="89%">Libraries copied by the Library or LibraryFromObjects rules</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>obj</B>
- </TD>
- <TD WIDTH="89%">Compiled objects used to create Main or Library targets</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>shell</B>
- </TD>
- <TD WIDTH="89%">Files copied by Shell rule</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER"><B>uninstall</B>
- </TD>
- <TD WIDTH="89%">Remove targets copied by Install rules</TD>
- </TR>
- </TABLE>
- </P>
- <P>In addition, Jambase makes the <B>jam</B> default target "all" depend on "exe", "lib",
- "obj", "files", and "shell".</P>
- <P><B>Modifiers on actions:<BR>
- </B>
- <TABLE BORDER="1" WIDTH="100%">
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">together
- </TD>
- <TD WIDTH="90%">multiple instances of same rule on target get executed once with their sources ($(>)) catenated</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">updated
- </TD>
- <TD WIDTH="90%">refers to updated sources only $(>)</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">ignore
- </TD>
- <TD WIDTH="90%">ignore return status of command</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">quietly
- </TD>
- <TD WIDTH="90%">don't trace execution unless verbose</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">piecemeal
- </TD>
- <TD WIDTH="90%">iterate command each time with small subset of $(>)</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">existing
- </TD>
- <TD WIDTH="90%">refers to currently existing sources only $(>)</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">bind vars
- </TD>
- <TD WIDTH="90%">subject to binding before expanding in actions</TD>
- </TR>
- </TABLE>
- <BR>
- <HR ALIGN="CENTER">
- </P>
- <H3>Jam Variable Modifiers</H3>
- <DL>
- <P>
- <TABLE BORDER="1" WIDTH="75%">
- <CAPTION>
- <P><B><FONT SIZE="4">Variable Modifiers</FONT></B>
- </CAPTION>
- <tbody> <TR>
- <TD><CODE> [<I>n</I>]</CODE></TD>
- <TD>Select element number <I>n</I> (starting at 1). If the variable contains fewer than <I>n</I> elements, the result
- is a zero-element list.</TD>
- </TR>
- <TR>
- <TD><CODE> [<I>n</I>-<I>m</I>]</CODE></TD>
- <TD>Select elements number <I>n</I> through <I>m</I>.</TD>
- </TR>
- <TR>
- <TD><CODE> [<I>n</I>-]</CODE></TD>
- <TD>Select elements number <I>n</I> through the last.</TD>
- </TR>
- <TR>
- <TD><CODE> :<I>chars</I></CODE></TD>
- <TD>Select the components listed in <I>chars</I>.</TD>
- </TR>
- <TR>
- <TD><CODE> :B</CODE></TD>
- <TD>Select filename base.</TD>
- </TR>
- <TR>
- <TD><CODE> :B=<I>base</I></CODE></TD>
- <TD>Replace the base part of file name with <I>base</I></TD>
- </TR>
- <TR>
- <TD><CODE>:BS=<I>base.suffix</I></CODE></TD>
- <TD>Base and suffix of the variable (without directory).</TD>
- </TR>
- <TR>
- <TD><CODE> :D</CODE></TD>
- <TD>Select directory path.</TD>
- </TR>
- <TR>
- <TD><CODE> :D=<I>path</I></CODE></TD>
- <TD>Replace directory with <I>path.</I></TD>
- </TR>
- <TR>
- <TD><CODE> :E</CODE></TD>
- <TD>If VAR is unset, $(VAR:E) is a list containing a single null string.</TD>
- </TR>
- <TR>
- <TD><CODE> :E=<I>value</I></CODE></TD>
- <TD>Use <I>value</I> instead if the variable is unset.</TD>
- </TR>
- <TR>
- <TD><CODE> :G</CODE></TD>
- <TD>Select grist.</TD>
- </TR>
- <TR>
- <TD><CODE> :G=<I>grist</I></CODE></TD>
- <TD>Replace grist with <I>grist</I>.</TD>
- </TR>
- <TR>
- <TD><CODE> :J=<I>joinval</I></CODE></TD>
- <TD>Concatenate list elements into single element, separated by <I>joinval</I>.</TD>
- </TR>
- <TR>
- <TD><CODE> :L</CODE></TD>
- <TD>Replace uppercase characters with lowercase.</TD>
- </TR>
- <TR>
- <TD><CODE> :M</CODE></TD>
- <TD>Select archive member name.</TD>
- </TR>
- <TR>
- <TD><CODE> :M=<I>mem</I></CODE></TD>
- <TD>Replace the archive member name with <I>mem</I>.</TD>
- </TR>
- <TR>
- <TD><CODE> :P</CODE></TD>
- <TD>Select parent directory.</TD>
- </TR>
- <TR>
- <TD><CODE> :R=<I>root</I></CODE></TD>
- <TD>Prepend <I>root</I> to the whole file name, if not already rooted.</TD>
- </TR>
- <TR>
- <TD><CODE> :S</CODE></TD>
- <TD>Select (last) filename suffix.</TD>
- </TR>
- <TR>
- <TD><CODE> :S=<I>suf</I></CODE></TD>
- <TD>Replace the suffix of file name with <I>suf</I>.</TD>
- </TR>
- <TR>
- <TD><CODE> :U</CODE></TD>
- <TD>Replace lowercase characters with uppercase.</TD>
- </TR>
- </tbody> </TABLE>
- </P>
- <P>$(var:P) is the parent directory of $(var:D).</P>
- </DL>
- <P>
- <HR ALIGN="CENTER">
- <A NAME="VARS"></A>
- <H3>Jambase Variables</H3>
- <P>Most of the following variables have default values for each platform; refer to the Jambase file to see what
- those defaults are.</P>
- <P><B>ToDo: </B>What about JAMDATE, JAMUNAME, JAMVERSION, JAMSHELL, JAMUSER</P>
- <P>ALL_LOCATE_TARGET</P>
- <BLOCKQUOTE>
- <P>Alternative location of built targets. By default, Jambase rules locate built targets in the source tree. By
- setting $(ALL_LOCATE_TARGET) in Jamrules, you can cause <B>jam</B> to write built targets to a location outside
- the source tree.
- </BLOCKQUOTE>
- <P>AR
- <BLOCKQUOTE>
- <P>The archive command used to update Library and LibraryFromObjects targets.
- </BLOCKQUOTE>
- <P>AS
- <BLOCKQUOTE>
- <P>The assembler for As rule targets.
- </BLOCKQUOTE>
- <P>ASFLAGS
- <BLOCKQUOTE>
- <P>Flags handed to the assembler for As.
- </BLOCKQUOTE>
- <P>AWK
- <BLOCKQUOTE>
- <P>The name of awk interpreter, used when copying a shell script for the Shell rule.
- </BLOCKQUOTE>
- <P>BINDIR
- <BLOCKQUOTE>
- <P>Local bin directory. <FONT SIZE="2" FACE="Courier New, Courier">/usr/local/bin</FONT></P>
- </BLOCKQUOTE>
- <P>CC
- <BLOCKQUOTE>
- <P>C compiler used for Cc rule targets.
- </BLOCKQUOTE>
- <P>CCFLAGS
- <BLOCKQUOTE>
- <P>Compile flags for Cc rule targets. The Cc rule sets target-specific $(CCFLAGS) values on its targets.
- </BLOCKQUOTE>
- <P>C++
- <BLOCKQUOTE>
- <P>C++ compiler used for C++ rule targets.
- </BLOCKQUOTE>
- <P>C++FLAGS
- <BLOCKQUOTE>
- <P>Compile flags for C++ rule targets. The C++ rule sets target-specific $(C++FLAGS) values on its targets.
- </BLOCKQUOTE>
- <P>CHMOD
- <BLOCKQUOTE>
- <P>Program (usually chmod(1)) used to set file permissions for Chmod rule.
- </BLOCKQUOTE>
- <P>CP
- <BLOCKQUOTE>
- <P>The file copy program, used by File and Install* rules.
- </BLOCKQUOTE>
- <P>CRELIB <B>(deprecated)</B>
- <BLOCKQUOTE>
- <P>If set, causes the Library rule to invoke the CreLib rule on the target library before attempting to archive
- any members, so that the library can be created if needed.
- </BLOCKQUOTE>
- <P>DEFINES
- <BLOCKQUOTE>
- <P>Preprocessor symbol definitions for Cc and C++ rule targets. The Cc and C++ rules set target-specific $(CCDEFS)
- values on their targets, based on $(DEFINES). (The "indirection" here is required to support compilers
- with baroque command line syntax for setting symbols).
- </BLOCKQUOTE>
- <P>DOT
- <BLOCKQUOTE>
- <P>The operating system-specific name for the current directory.
- </BLOCKQUOTE>
- <P>DOTDOT
- <BLOCKQUOTE>
- <P>The operating system-specific name for the parent directory.
- </BLOCKQUOTE>
- <P>EXEMODE
- <BLOCKQUOTE>
- <P>Permissions for executables linked with Link, Main, and MainFromObjects, on platforms with a Chmod action.
- </BLOCKQUOTE>
- <P>FILEMODE
- <BLOCKQUOTE>
- <P>Permissions for files copied by File or Bulk, on platforms with a Chmod action.
- </BLOCKQUOTE>
- <P>GROUP
- <BLOCKQUOTE>
- <P><I>(Unix only.)</I> The group owner for Install* rule targets.
- </BLOCKQUOTE>
- <P>HDRGRIST
- <BLOCKQUOTE>
- <P>If set, used by the HdrRule to distinguish header files with the same name in different directories.
- </BLOCKQUOTE>
- <P>HDRPATTERN
- <BLOCKQUOTE>
- <P>A regular expression pattern that matches C preprocessor "#include" directives in source files and
- returns the name of the included file.<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">HDRSCAN = "^[ \t]*#[ \t]*include[ \t]*[<\\"]([^\\">]*)[\\">].*$"
- ;</FONT>
- </BLOCKQUOTE>
- <P>HDRRULE
- <BLOCKQUOTE>
- <P>Name of the rule to invoke with the results of header file scanning. Default is "HdrRule".</P>
- <P>This is a jam-special variable. If both HDRRULE and HDRSCAN are set on a target, that target will be scanned
- for lines matching $(HDRSCAN), and $(HDDRULE) will be invoked on included files found in the matching $(HDRSCAN)
- lines.</P>
- </BLOCKQUOTE>
- <P>HDRS
- <BLOCKQUOTE>
- <P>Directories to be searched for header files. This is used by the Object rule to:
- <UL>
- <LI>set up search paths for finding files returned by header scans
- <LI>add -I flags on compile commands
- </UL>
- <P>(See STDHDRS.)
- </BLOCKQUOTE>
- <P>HDRSCAN
- <BLOCKQUOTE>
- <P>Regular expression pattern to use for header file scanning. The Object rule sets this to $(HDRPATTERN). This
- is a jam-special variable; see HDRRULE.
- </BLOCKQUOTE>
- <P>HDRSEARCH
- <BLOCKQUOTE>
- <P>Used by the HdrRule to fix the list of directories where header files can be found for a given source file.
- </BLOCKQUOTE>
- <P>INSTALLGRIST
- <BLOCKQUOTE>
- <P>Used by the Install* rules to grist paths to installed files; defaults to "installed".
- </BLOCKQUOTE>
- <P>JAMDATE
- <BLOCKQUOTE>
- <P>Time and Date at jam startup.</P>
- </BLOCKQUOTE>
- <P>JAMUNAME
- <BLOCKQUOTE>
- <P>Output of uname(1) command (Unix only, but why? It's in Win).</P>
- </BLOCKQUOTE>
- <P>JAMVERSION
- <BLOCKQUOTE>
- <P>Jam version, reported by <FONT SIZE="2" FACE="Courier New, Courier">jam -v</FONT>.</P>
- </BLOCKQUOTE>
- <P>JAMSHELL
- <BLOCKQUOTE>
- <P>Shell invocation control when Jam invokes an action block.<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">JAMSHELL = "/bin/sh -c %" </FONT>on unix.</P>
- </BLOCKQUOTE>
- <P>JAMUSER
- <BLOCKQUOTE>
- <P>Username that invoked jam.</P>
- </BLOCKQUOTE>
- <P>JAMFILE
- <BLOCKQUOTE>
- <P>Default is "Jamfile"; the name of the user-written rules file found in each source directory.
- </BLOCKQUOTE>
- <P>JAMRULES
- <BLOCKQUOTE>
- <P>Default is "Jamrules"; the name of a rule definition file to be read in at the first SubDir rule invocation.
- </BLOCKQUOTE>
- <P>KEEPOBJS
- <BLOCKQUOTE>
- <P>If set, tells the LibraryFromObjects rule not to delete object files once they are archived.
- </BLOCKQUOTE>
- <P>LEX
- <BLOCKQUOTE>
- <P>The lex(1) command and flags.
- </BLOCKQUOTE>
- <P>LIBDIR
- <BLOCKQUOTE>
- <P>Local library directory for installs. Default: <FONT SIZE="2" FACE="Courier New, Courier">/usr/local/lib</FONT>
- or <FONT SIZE="2" FACE="Courier New, Courier">$(MSVCDIR)\\lib</FONT>
- </BLOCKQUOTE>
- <P>LINK
- <BLOCKQUOTE>
- <P>The linker. Defaults to $(CC).
- </BLOCKQUOTE>
- <P>LINKFLAGS
- <BLOCKQUOTE>
- <P>Flags handed to the linker. Defaults to $(CCFLAGS).
- </BLOCKQUOTE>
- <P>LINKLIBS
- <BLOCKQUOTE>
- <P>List of external libraries to link with. The target image does not depend on these libraries.<BR>
- Windows: <FONT SIZE="2" FACE="Courier New, Courier"><BR>
- $(LIBDIR)\\libc.lib <BR>
- $(LIBDIR)\\oldnames.lib <BR>
- $(LIBDIR)\\kernel32.lib ;</FONT></P>
- <P>Unix: ... none yet. libc, libpthreads, libdl ...
- </BLOCKQUOTE>
- <P>LN
- <BLOCKQUOTE>
- <P>The hard link command for HardLink rule.
- </BLOCKQUOTE>
- <P>LOCATE
- <BLOCKQUOTE>
- <P>Where to plop something not found with SEARCH.
- </BLOCKQUOTE>
- <P>LOCATE_SOURCE
- <BLOCKQUOTE>
- <P>Used to set the location of <I>generated source files.</I> The Yacc, Lex, and GenFile rules set LOCATE on their
- targets to $(LOCATE_SOURCE). $(LOCATE_SOURCE) is initialized by the SubDir rule to the source directory itself.
- (see ALL_LOCATE_TARGET.)
- </BLOCKQUOTE>
- <P>LOCATE_TARGET
- <BLOCKQUOTE>
- <P>Used to set the location of built binary targets. The Object rule, and hence the Main and Library rules, set
- LOCATE on their targets to $(LOCATE_TARGET). $(LOCATE_TARGET) is initialized by the SubDir rule to the source directory
- itself. (See ALL_LOCATE_TARGET.)
- </BLOCKQUOTE>
- <P>MANDIR
- <BLOCKQUOTE>
- <P>Default directory for man pages. Default: <FONT SIZE="2" FACE="Courier New, Courier">/usr/local/man</FONT> .</P>
- </BLOCKQUOTE>
- <P>MKDIR
- <BLOCKQUOTE>
- <P>The 'create directory' command used for the MkDir rule.
- </BLOCKQUOTE>
- <P>MODE
- <BLOCKQUOTE>
- <P>The target-specific file mode (permissions) for targets of the Shell, Setuid, Link, and Install* rules. Used
- by the Chmod action; hence relevant to NT only.
- </BLOCKQUOTE>
- <P>MSVCDIR
- <BLOCKQUOTE>
- <P>Selects Microsoft Visual C NT 6.0 and later compile & link actions on NT.
- </BLOCKQUOTE>
- <P>MV
- <BLOCKQUOTE>
- <P>The file rename command and options.
- </BLOCKQUOTE>
- <P>NEEDLIBS
- <BLOCKQUOTE>
- <P>The list of libraries used when linking an executable. Used by the Link rule.
- </BLOCKQUOTE>
- <P>NOARSCAN
- <BLOCKQUOTE>
- <P>If set, indicates that library members' timestamps can't be found, and prevents the individual objects from
- being deleted, so that their timestamps can be used instead.
- </BLOCKQUOTE>
- <P>NOARUPDATE
- <BLOCKQUOTE>
- <P>If set, indicates that libraries can't be updated, but only created whole.
- </BLOCKQUOTE>
- <P>NT</P>
- <P>OPTIM
- <BLOCKQUOTE>
- <P>The C compiler flag for optimization, used by Cc and C++ rules.
- </BLOCKQUOTE>
- <P>OS
- <BLOCKQUOTE>
- <P>$(OS) contains the platform ($(NT), $(AIX), $(HPUX), $(SOLARIS), etc). Useful in switch statements.<BR>
- switch $(OS) {<BR>
- case NT : stmt1 ; stmt2 ;<BR>
- case AIX : stmt1 ; stmt2 ;<BR>
- }</P>
- </BLOCKQUOTE>
- <P>OSPLAT
- <BLOCKQUOTE>
- <P>Type of hardware platform ( VAX, PPC, AXP, X86, SPARC, MIPS, ARM, IA64, 390)</P>
- </BLOCKQUOTE>
- <P>OSFULL
- <BLOCKQUOTE>
- <P>The concatenation of $(OS)$(OSVER)$(OSPLAT), used when jam builds itself to determine the target binary directory.
- $(OS) and $(OSPLAT) are determined by jam at its compile time (in jam.h). $(OSVER) can optionally be set by the
- user.
- </BLOCKQUOTE>
- <P>OWNER
- <BLOCKQUOTE>
- <P>The owner of installed files. Used by Install* rules.
- </BLOCKQUOTE>
- <P>RANLIB
- <BLOCKQUOTE>
- <P>The name of the ranlib command. If set, causes the Ranlib action to be applied after the Archive action to targets
- of the Library rule.
- </BLOCKQUOTE>
- <P>RC
- <BLOCKQUOTE>
- <P>Resource Compiler command.</P>
- </BLOCKQUOTE>
- <P>RCP
- <BLOCKQUOTE>
- <P>Remote copy command.</P>
- </BLOCKQUOTE>
- <P>RM
- <BLOCKQUOTE>
- <P>The command and options to remove a file.
- </BLOCKQUOTE>
- <P>RMDIR
- <BLOCKQUOTE>
- <P>The command and options to remove a directory.</P>
- </BLOCKQUOTE>
- <P>RSH
- <BLOCKQUOTE>
- <P>Remote Shell Command.</P>
- </BLOCKQUOTE>
- <P>SEARCH
- <BLOCKQUOTE>
- <P>Where to find something; used during binding and actions.</P>
- </BLOCKQUOTE>
- <P>SEARCH_SOURCE
- <BLOCKQUOTE>
- <P>The directory to find sources listed with Main, Library, Object, Bulk, File, Shell, InstallBin, InstallLib,
- and InstallMan rules. This works by setting the jam-special variable SEARCH to the value of $(SEARCH_SOURCE) for
- each of the rules' sources. The SubDir rule initializes SEARCH_SOURCE for each directory.
- </BLOCKQUOTE>
- <P>SED
- <BLOCKQUOTE>
- <P>Shell editor command..</P>
- </BLOCKQUOTE>
- <P>SHELLHEADER
- <BLOCKQUOTE>
- <P>A string inserted to the first line of every file created by the Shell rule.
- </BLOCKQUOTE>
- <P>SHELLMODE
- <BLOCKQUOTE>
- <P>Permissions for files installed by Shell rule.
- </BLOCKQUOTE>
- <P>SLASH
- <BLOCKQUOTE>
- <P>Directory separator character. <FONT SIZE="2" FACE="Courier New, Courier">(/)</FONT> on unix; <FONT SIZE="2"
- FACE="Courier New, Courier">(\)</FONT> on windows..</P>
- </BLOCKQUOTE>
- <P>SOURCE_GRIST
- <BLOCKQUOTE>
- <P>Set by the SubDir to a value derived from the directory name, and used by Objects and related rules as 'grist'
- to perturb file names.
- </BLOCKQUOTE>
- <P>STDHDRS
- <BLOCKQUOTE>
- <P>Directories where headers can be found without resorting to using the flag to the C compiler. The $(STDHDRS)
- directories are used to find headers during scanning, but are not passed to the compiler commands as -I paths.<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">$(MSVCDIR)\\include</FONT> on windows.
- </BLOCKQUOTE>
- <P>SUBDIR
- <BLOCKQUOTE>
- <P>The path from the current directory to the directory last named by the SubDir rule.
- </BLOCKQUOTE>
- <P>SUBDIRRESET
- <BLOCKQUOTE>
- <P>Flags to manage on changing directories. Jambase example:<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">SUBDIRRESET ?= ASFLAGS HDRS C++FLAGS CCFLAGS ;</FONT></P>
- </BLOCKQUOTE>
- <P>SUBDIRRULES
- <BLOCKQUOTE>
- <P>Unknown.
- </BLOCKQUOTE>
- <P>SUFDLL
- <BLOCKQUOTE>
- <P>The suffix for <B>shared</B> libraries. Used by Library and Archive rules.<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">.so</FONT> on unix; <FONT SIZE="2" FACE="Courier New, Courier">.dll</FONT>
- on windows.</P>
- </BLOCKQUOTE>
- <P>SUFEXE
- <BLOCKQUOTE>
- <P>The suffix for executable files, if none provided. Used by the Main rule.<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">.exe</FONT> on windows; null on unix.</P>
- </BLOCKQUOTE>
- <P>SUFILK <B>(unneeded. No unix counterpart)</B>
- <BLOCKQUOTE>
- <P>The suffix for xxx files. <FONT SIZE="2" FACE="Courier New, Courier">.ilk </FONT>on windows.</P>
- </BLOCKQUOTE>
- <P>SUFLIB
- <BLOCKQUOTE>
- <P>The suffix for <B>archive</B> libraries. Used by Library and Archive rules.<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">.a</FONT> on unix. <FONT SIZE="2" FACE="Courier New, Courier">.lib</FONT>
- on windows.
- </BLOCKQUOTE>
- <P>SUFOBJ
- <BLOCKQUOTE>
- <P>The suffix for object files. Used by the Objects and related rules.<BR>
- <FONT SIZE="2" FACE="Courier New, Courier">.obj </FONT>on windows; <FONT SIZE="2" FACE="Courier New, Courier">.o</FONT>
- on unix.
- </BLOCKQUOTE>
- <P>SUFPDB <B>(unneeded. No unix counterpart)</B>
- <BLOCKQUOTE>
- <P>The suffix for xxx files. <FONT SIZE="2" FACE="Courier New, Courier">.pdb </FONT>on windows.</P>
- </BLOCKQUOTE>
- <P>TOP
- <BLOCKQUOTE>
- <P>The path from the current directory to the directory that has the Jamrules file. Used by the SubDir rule.</P>
- </BLOCKQUOTE>
- <P>UNDEFFLAG
- <BLOCKQUOTE>
- <P>The flag prefixed to each symbol for the Undefines rule (i.e., the compiler flag for undefined symbols). "<FONT
- SIZE="2" FACE="Courier New, Courier">-u _"</FONT> on windows; "<FONT SIZE="2" FACE="Courier New, Courier">-u</FONT>"
- on unix.
- </BLOCKQUOTE>
- <P>UNIX
- <BLOCKQUOTE>
- <P>$(UNIX) is true, if on a Unix platform.</P>
- </BLOCKQUOTE>
- <P>YACC
- <BLOCKQUOTE>
- <P>The yacc(1) command.
- </BLOCKQUOTE>
- <P>YACCFILES
- <BLOCKQUOTE>
- <P>The base filename generated by yacc(1).
- </BLOCKQUOTE>
- <P>YACCFLAGS
- <BLOCKQUOTE>
- <P>The yacc(1) command flags.
- </BLOCKQUOTE>
- <P>YACCGEN
- <BLOCKQUOTE>
- <P>The suffix used on generated yacc(1) output.
- </BLOCKQUOTE>
- <P>
- <HR ALIGN="CENTER">
- <B>Jam Language</B></P>
- <P><B>Statements<BR>
- </B>
- <TABLE BORDER="1" WIDTH="98%">
- <TR>
- <TD WIDTH="23%">
- <P ALIGN="CENTER">rule Rule
- </TD>
- <TD WIDTH="77%">statements to process a rule</TD>
- </TR>
- <TR>
- <TD WIDTH="23%">
- <P ALIGN="CENTER">actions Rule
- </TD>
- <TD WIDTH="77%">system commands for target update</TD>
- </TR>
- </TABLE>
- <B>Modifiers on actions:<BR>
- </B>
- <TABLE BORDER="1" WIDTH="100%">
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">together
- </TD>
- <TD WIDTH="90%">multiple instances of same rule on target get executed once with their sources ($(>)) catenated</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">updated
- </TD>
- <TD WIDTH="90%">refers to updated sources only $(>)</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">ignore
- </TD>
- <TD WIDTH="90%">ignore return status of command</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">quietly
- </TD>
- <TD WIDTH="90%">don't trace execution unless verbose</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">piecemeal
- </TD>
- <TD WIDTH="90%">iterate command each time with small subset of $(>)</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">existing
- </TD>
- <TD WIDTH="90%">refers to currently existing sources only $(>)</TD>
- </TR>
- <TR>
- <TD WIDTH="10%">
- <P ALIGN="CENTER">bind vars
- </TD>
- <TD WIDTH="90%">subject to binding before expanding in actions</TD>
- </TR>
- </TABLE>
- <B>Special Rules:<BR>
- </B>
- <TABLE BORDER="1" WIDTH="100%">
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">Always
- </TD>
- <TD WIDTH="89%">always build a target</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">Depends
- </TD>
- <TD WIDTH="89%">builds dependency graph. Appends each source on the dependency list of each target. Binds both targets and sources
- as TARGETs.</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">Echo
- </TD>
- <TD WIDTH="89%">blurt out targets on stdout</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">Exit
- </TD>
- <TD WIDTH="89%">blurt out tarets and exit</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">Includes
- </TD>
- <TD WIDTH="89%">marks source as headers for target (codependency)</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">Leaves
- </TD>
- <TD WIDTH="89%"> </TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">NoCare
- </TD>
- <TD WIDTH="89%">don't panic if target can't be built</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">NoUpdate
- </TD>
- <TD WIDTH="89%">create target if needed; never update it</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">NotFile
- </TD>
- <TD WIDTH="89%">ignore timestamp of target (it's not a file)</TD>
- </TR>
- <TR>
- <TD WIDTH="11%">
- <P ALIGN="CENTER">Temporary
- </TD>
- <TD WIDTH="89%">target need not be present if sources haven't changed</TD>
- </TR>
- </TABLE>
- <B>Special Variables set by Jam:<BR>
- </B>
- <TABLE BORDER="1" WIDTH="100%">
- <TR>
- <TD WIDTH="19%">
- <P ALIGN="CENTER">$(<)
- </TD>
- <TD WIDTH="81%">targets of rule (to left of : )</TD>
- </TR>
- <TR>
- <TD WIDTH="19%">
- <P ALIGN="CENTER">$(>)
- </TD>
- <TD WIDTH="81%">sources of rule (to the right of : )</TD>
- </TR>
- <TR>
- <TD WIDTH="19%">
- <P ALIGN="CENTER">$(xxx)
- </TD>
- <TD WIDTH="81%">true on xxx (UNIX, NT, AIX, HPUX, SOLARIS)</TD>
- </TR>
- <TR>
- <TD WIDTH="19%">
- <P ALIGN="CENTER">$(OS)
- </TD>
- <TD WIDTH="81%">name of Operating System</TD>
- </TR>
- <TR>
- <TD WIDTH="19%">
- <P ALIGN="CENTER">$(JAMVERSION)
- </TD>
- <TD WIDTH="81%">version number 2.5a</TD>
- </TR>
- </TABLE>
- <B>Special Variables used by Jam:<BR>
- </B>
- <TABLE BORDER="1" WIDTH="100%">
- <TR>
- <TD WIDTH="15%">
- <P ALIGN="CENTER">SEARCH
- </TD>
- <TD WIDTH="85%">where to find something (used during binding and actions)</TD>
- </TR>
- <TR>
- <TD WIDTH="15%">
- <P ALIGN="CENTER">LOCATE
- </TD>
- <TD WIDTH="85%">where to plop something not found with SEARCH</TD>
- </TR>
- <TR>
- <TD WIDTH="15%">
- <P ALIGN="CENTER">HDRRULE
- </TD>
- <TD WIDTH="85%">rule to handle include files</TD>
- </TR>
- <TR>
- <TD WIDTH="15%">
- <P ALIGN="CENTER">HDRSCAN
- </TD>
- <TD WIDTH="85%">egrep regex to extract include files</TD>
- </TR>
- </TABLE>
- </P>
- <H2><B>Jam rules</B></H2>
- <P><B>Special targets:</B></P>
- <P>
- <TABLE BORDER="1" WIDTH="100%">
- <TR>
- <TD WIDTH="8%">
- <P ALIGN="CENTER"><B>all</B>
- </TD>
- <TD WIDTH="92%">parent of <B>first, shell, files, lib, exe<BR>
- </B>(default if jam command line targets are not supplied)</TD>
- </TR>
- <TR>
- <TD WIDTH="8%">
- <P ALIGN="CENTER"><B>first</B>
- </TD>
- <TD WIDTH="92%">first dependent of<B> 'all',</B> for potential initialization</TD>
- </TR>
- <TR>
- <TD WIDTH="8%">
- <P ALIGN="CENTER"><B>shell</B>
- </TD>
- <TD WIDTH="92%">all <B>Shell </B>targets</TD>
- </TR>
- <TR>
- <TD WIDTH="8%">
- <P ALIGN="CENTER"><B>files</B>
- </TD>
- <TD WIDTH="92%">all <B>File</B> targets</TD>
- </TR>
- <TR>
- <TD WIDTH="8%">
- <P ALIGN="CENTER"><B>lib</B>
- </TD>
- <TD WIDTH="92%">all <B>Library</B> targets</TD>
- </TR>
- <TR>
- <TD WIDTH="8%">
- <P ALIGN="CENTER"><B>exe</B>
- </TD>
- <TD WIDTH="92%">all <B>Main</B> targets</TD>
- </TR>
- <TR>
- <TD WIDTH="8%">
- <P ALIGN="CENTER"><B>dirs</B>
- </TD>
- <TD WIDTH="92%">all <B>MkDir</B> targets</TD>
- </TR>
- <TR>
- <TD WIDTH="8%">
- <P ALIGN="CENTER"><B>clean</B>
- </TD>
- <TD WIDTH="92%">remove all <B>Shell, File, Library, Main</B> targets</TD>
- </TR>
- <TR>
- <TD WIDTH="8%">
- <P ALIGN="CENTER"><B>uninstall</B>
- </TD>
- <TD WIDTH="92%">remove all <B>Install </B>targets</TD>
- </TR>
- </TABLE>
- </P>
- <P><B>Jam Built-In Rules:</B></P>
- <PRE><B></B></PRE>
- <P>
- <TABLE BORDER="1" WIDTH="96%">
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">As</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">As obj.o : source.s ;</FONT></TD>
- <TD WIDTH="39%"><FONT FACE="Courier New, Courier">.s -> .o</FONT></TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Bulk</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Bulk dir : files ;</FONT></TD>
- <TD WIDTH="39%">populate directory with many files</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Cc</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Cc obj.o : source.c ;</FONT></TD>
- <TD WIDTH="39%"><FONT FACE="Courier New, Courier">.c -> .o</FONT></TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">C++</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">C++ obj.o : source.cc ;</FONT></TD>
- <TD WIDTH="39%"><FONT FACE="Courier New, Courier">.cpp -> .o</FONT></TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Clean</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Clean clean : sources ;</FONT></TD>
- <TD WIDTH="39%">remove source targets with 'jam clean'</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">File</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">File dest : source ;</FONT></TD>
- <TD WIDTH="39%">copy file</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">GenFile</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">GenFile source.c : program args ;</FONT></TD>
- <TD WIDTH="39%">make custom file</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER">Glob
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Glob directories : patterns ;</FONT></TD>
- <TD WIDTH="39%">Scans <I>directories</I> for files matching regex <I>patterns</I>, returning the list of matching files.</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">HardLink</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">HardLink target : source ;</FONT></TD>
- <TD WIDTH="39%">make link from source to target</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">HdrRule</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">HdrRule source : headers ;</FONT></TD>
- <TD WIDTH="39%">handle #includes</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">InstallInto</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">InstallInto dir : sources ;</FONT></TD>
- <TD WIDTH="39%">install any files</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">InstallBin</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">InstallBin dir : sources ;</FONT></TD>
- <TD WIDTH="39%">install binaries</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">InstallLib</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">InstallLib dir : sources ;</FONT></TD>
- <TD WIDTH="39%">install library files</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">InstallFile</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">InstallFile dir : sources ;</FONT></TD>
- <TD WIDTH="39%">install files</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">InstallMan</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">InstallMan dir : sources ;</FONT></TD>
- <TD WIDTH="39%">install man pages</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">InstallShell</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">InstallShell dir : sources ;</FONT></TD>
- <TD WIDTH="39%">install shell scripts</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Lex</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Lex source.c : source.l ;</FONT></TD>
- <TD WIDTH="39%"><FONT FACE="Courier New, Courier">.l -> .o</FONT></TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Library</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Library lib : source ;</FONT></TD>
- <TD WIDTH="39%">archive library from source</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">LibraryFromObjects</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">LibraryFromObjects lib : objects ;</FONT></TD>
- <TD WIDTH="39%">archive library from objects</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Libs</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Libs images : libraries ;</FONT></TD>
- <TD WIDTH="39%">dependency on libraries</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Main</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Main image : source ;</FONT></TD>
- <TD WIDTH="39%">link executable from source</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">MainFromObjects</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">MainFromObjects image : objects ;</FONT></TD>
- <TD WIDTH="39%">link executable from objects</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Match</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Match</FONT><I><FONT SIZE="2" FACE="Courier New, Courier"> regexps </FONT></I><B><FONT
- SIZE="2" FACE="Courier New, Courier">:</FONT></B><I><FONT SIZE="2" FACE="Courier New, Courier"> list </FONT></I><B><FONT
- SIZE="2" FACE="Courier New, Courier">;</FONT></B></TD>
- <TD WIDTH="39%">Match regular expression<I> regexps</I> against strings in<I> list</I>.</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">MkDir</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">MkDir dir ;</FONT></TD>
- <TD WIDTH="39%">make directory</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Object</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Object object : source ;</FONT></TD>
- <TD WIDTH="39%">compile object from source</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">ObjectCcFlags</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">ObjectCcFlags source : flags ;</FONT></TD>
- <TD WIDTH="39%">c compiler flags for source</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">ObjectC++Flags</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">ObjectC++Flags source : flags ;</FONT></TD>
- <TD WIDTH="39%">c++ compiler flags for source</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">ObjectHdrs</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">ObjectHdrs source : dirs ;</FONT></TD>
- <TD WIDTH="39%">include directories for source</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Objects</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Objects sources ;</FONT></TD>
- <TD WIDTH="39%">compile sources</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">RmTemps</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">RmTemps target : sources ;</FONT></TD>
- <TD WIDTH="39%">remove temp sources after target made</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Setuid</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Setuid images ;</FONT></TD>
- <TD WIDTH="39%">mark executables suid</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">SoftLink</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">SoftLink target : source ;</FONT></TD>
- <TD WIDTH="39%">make symlink</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">SubDir</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">SubDir TOP d1 d2 ... ;</FONT></TD>
- <TD WIDTH="39%">start subdirectory Jamfile</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">SubDirCcFlags</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">SubDirCcFlags flags ;</FONT></TD>
- <TD WIDTH="39%">c compiler flags until next SubDir</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">SubDirC++Flags</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">SubDirC++Flags flags ;</FONT></TD>
- <TD WIDTH="39%">c++ compiler flags until next SubDir</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">SubDirHdrs</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">SubDirHdrs d1 d2 ... ;</FONT></TD>
- <TD WIDTH="39%">include directory until next SubDir</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">SubInclude</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">SubInclude TOP d1 d2 ... ;</FONT></TD>
- <TD WIDTH="39%">Include subdirectory Jamfile</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Shell</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Shell exe : source ;</FONT></TD>
- <TD WIDTH="39%">make a shell executable</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Undefines</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Undefines images : symbols ;</FONT></TD>
- <TD WIDTH="39%">save undef's for linking</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">UserObject</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">UserObject object : source ;</FONT></TD>
- <TD WIDTH="39%">handle unknown suffixes for object</TD>
- </TR>
- <TR>
- <TD WIDTH="18%">
- <P ALIGN="CENTER"><B><FONT FACE="Courier New, Courier">Yacc</FONT></B>
- </TD>
- <TD WIDTH="43%"><FONT SIZE="2" FACE="Courier New, Courier">Yacc source.c : source.y ;</FONT></TD>
- <TD WIDTH="39%"><FONT FACE="Courier New, Courier">.y -> .c</FONT></TD>
- </TR>
- </TABLE>
- </P>
- <P>Copyright 1993-2002 Christopher Seiwald and Perforce Software, Inc.
- </BODY>
- </HTML>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 4362 | Dick Dunbar | Documentation updates. | 21 years ago | |
#1 | 4356 | Dick Dunbar | Jam 2.5 base established | 21 years ago | |
//guest/perforce_software/jam/src/Jambase.html | |||||
#10 | 2564 | rmg | Use MSVCDIR instead of MSVCNT if MSVCNT isn't set. Microsoft changed the name to... MSVCDIR in VC 6.0. Porting change documented in RELNOTES. === computer:1666: Change 39600 by seiwald@play-seiwald on 2002/12/27 18:06:42 « |
22 years ago | |
#9 | 2511 | rmg | Make the description of SubDir match the Jambase code. | 22 years ago | |
#8 | 2488 | rmg | Remove the /MR suffix from Jam. === computer:1666: Change 37146 by seiwald@play-seiwald... on 2002/10/21 15:23:18 « |
22 years ago | |
#7 | 1579 | rmg | Document the new SoftLink rule. | 23 years ago | |
#6 | 1578 | rmg |
Document the addition of INSTALLGRIST. Related changes: 1577, 1572 |
23 years ago | |
#5 | 1319 | rmg | Jam 2.3 + Perforce's internal changes. This change is a drop of the Perforce internal J...am changes since the 2.3 public release. The individual changes represented herein are preserved in the //guest/richard_geiger/intjam/ branch. The intent of this drop is to provide a base, from which other contributors' Jam branches may be integrated into. It is not intended to become a packaged release in this state. We will be integrating changes from other users prior to creating the next packaged release. Please refer to the src/RELNOTES file for an overview of the changes present in this integration. - Richard Geiger Open Source Engineer at Perforce « |
23 years ago | |
#4 | 486 | Perforce staff | Jam 2.3. See RELNOTES for a list of changes from 2.2.x. Just about every source... file was touched when jam got ANSI-fied. « |
24 years ago | |
#3 | 76 | Laura Wingerd | Integrate command-block-too-long fix, plus minor doc updates. Jam/MR release level is now... 2.2.5. (change 72, change 73, change 74, change 75) « |
26 years ago | |
#2 | 51 | Laura Wingerd | Update copyright year. | 26 years ago | |
#1 | 2 | laura | Add Jam/MR 2.2 source | 27 years ago |