<LINK href="css\main-action(1).css" type="text/css" rel="stylesheet">\r
<META content="MSHTML 6.00.2900.3059" name="GENERATOR"></HEAD>\r
<BODY>\r
- <DIV id="PageContent">\r
- <TABLE style="MARGIN-TOP: 0px" cellSpacing="0" cellPadding="0" width="100%">\r
- <TBODY>\r
+ <DIV style="MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px" align="left">\r
+ <DIV class="wiki-content" style="MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px" align="left">The \r
+ Kerberos For Windows build is being automated. This description consists of\r
+ </DIV>\r
+ <UL>\r
+ <LI>\r
+ <A href="#lore-bkw-automation-Buildsteps">Build steps</A>\r
+ <LI>\r
+ <A href="#Script-structure">Script structure</A>\r
+ <LI>\r
+ <A href="#Configfile">Config file</A>\r
+ <LI>\r
+ <A href="#Remainingwork">Remaining work / bug list</A>\r
+ <LI>\r
+ <A href="#Troubleshooting">Troubleshooting</A></LI>\r
+ </UL>\r
+ <H2><A name="lore-bkw-automation-Buildsteps"></A>Build steps</H2>\r
+ <P>Building the complete KfW product consists of these steps:</P>\r
+ <UL>\r
+ <LI>\r
+ Setting up the environment\r
+ <LI>\r
+ Fetching sources from repositories\r
+ <LI>\r
+ Building the sources with nmake\r
+ <LI>\r
+ Setting up the packaging environment\r
+ <LI>\r
+ Building the two installers -- a msi installer and an exe installer\r
+ <LI>\r
+ Building other distribution components\r
+ <UL>\r
+ <LI>\r
+ KfW source distribution\r
+ <LI>\r
+ KfW core binaries\r
+ <LI>\r
+ KfW SDK\r
+ <LI>\r
+ Microsoft redistributable components\r
+ <LI>\r
+ Individual files: release notes, Leash user guide, MSI Deployment Guide.\r
+ </LI>\r
+ </UL>\r
+ </LI>\r
+ </UL>\r
+ <H2><A name="Script-structure"></A>Script structure</H2>\r
+ <P>The build is a perl script controlled by command line switches and an XML \r
+ configuration file. The config file is required. Settings in the config file \r
+ can be overridden by optional command line switches.</P>\r
+ <P>The main steps in the script are</P>\r
+ <UL>\r
+ <LI>\r
+ Setting up the environment\r
+ <LI>\r
+ Fetching the sources from repositories\r
+ <LI>\r
+ Building the sources\r
+ <LI>\r
+ Setting up the packaging environment\r
+ <LI>\r
+ Building the msi with the package nmake\r
+ <LI>\r
+ Building the rest of the components\r
+ </LI>\r
+ </UL>\r
+ <P>The usage message shows the available switches:</P>\r
+ <P><TT>C:\Projects\KfW>perl bkw.pl /?</TT><BR>\r
+ <TT>Usage: bkw.pl (-f --config) config-file [options] NMAKE-options</TT></P>\r
+ <P><TT>Options are case insensitive.</TT></P>\r
+ <P><TT>Options:</TT><BR>\r
+ <TT>/help /? usage information (what you now see)</TT><BR>\r
+ <TT>/srcdir dir Source directory to use. Should contain</TT><BR>\r
+ <TT> \r
+ pismere/athena. If cvstag or svntag is null,</TT><BR>\r
+ <TT> \r
+ the directory should be prepopulated.</TT><BR>\r
+ <TT>/cvstag tag \ For whichever of these tags is specified,</TT><BR>\r
+ <TT>/svntag url / a checkout will be done into srcdir</TT><BR>\r
+ <TT>/debug Do debug make instead of \r
+ release make</TT><BR>\r
+ <TT>/outdir dir Directory to be created where build results will go</TT><BR>\r
+ <TT>/nomake Skip make step</TT><BR>\r
+ <TT>/nopackage Skip packaging step</TT><BR>\r
+ <TT>/clean Build clean target</TT><BR>\r
+ <TT>/verbose Debug mode - verbose output</TT><BR>\r
+ <TT>/vverbose very verbose output</TT><BR>\r
+ <TT>/config path Path to config file</TT><BR>\r
+ <TT>/logfile path Where to write output. If omitted, ...</TT><BR>\r
+ <TT>/srcdir dir Source directory to use. Should contain\r
+ <BR>\r
+ </TT><TT>pismere/athena. \r
+ If cvstag or svntag is null,\r
+ <BR>\r
+ \r
+ the directory should be prepopulated.\r
+ <BR>\r
+ </TT><TT>/outdir dir Directory to be created where build results will \r
+ go\r
+ <BR>\r
+ /repository checkout | co \ What repository action to take.\r
+ <BR>\r
+ </TT><TT>update \r
+ | up | Options are to checkout, update or<BR>\r
+ skip \r
+ / take no action [skip].\r
+ <BR>\r
+ /cvstag tag \ For whichever of these tags is specified,\r
+ <BR>\r
+ </TT><TT>/svntag url / the repository action will be done into srcdir\r
+ <BR>\r
+ /debug Do debug make instead of \r
+ release make\r
+ <BR>\r
+ /nomake Skip make step\r
+ <BR>\r
+ /nopackage Skip packaging step\r
+ <BR>\r
+ /clean Build clean target\r
+ <BR>\r
+ /verbose Debug mode - verbose output\r
+ <BR>\r
+ /config path Path to config file\r
+ <BR>\r
+ /logfile path Where to write output. If omitted, ...<BR>\r
+ </TT><TT>Other:</TT><BR>\r
+ <TT>NMAKE-options any options you want to pass to NMAKE, which can be:</TT><BR>\r
+ <TT>(note: /nologo is always used)</TT><BR>\r
+ <TT>[ nmake options follow ]</TT></P>\r
+ <P>Additional controls, not available from the command line:</P>\r
+ <P><TT><CVSROOT name=":kserver:cvs.mit.edu:/cvs/pismere" /></TT><BR>\r
+ <TT><SVNURL name="" /></TT><BR>\r
+ <TT><CopyList><Config><DebugArea value="dbg" /></TT><BR>\r
+ <TT> \r
+ <ReleaseArea value="rel" /></TT><BR>\r
+ <TT> <AlwaysTag \r
+ value="%bldtype%" /></TT><BR>\r
+ <TT> \r
+ <DebugTag value="%debug%" /></TT><BR>\r
+ <TT> \r
+ <ReleaseTag value="%release%" /></TT><BR>\r
+ <TT> \r
+ <Files><Include path="copyfiles.xml" /></TT></P>\r
+ <P><TT><FONT face="Verdana">The pre-package steps gathers up build results and puts them in \r
+ a <FONT face="Courier">target</FONT> area. "target" is hardwired in the \r
+ build script.</FONT></TT></P>\r
+ <P><TT><FONT face="Verdana">The post-package step zips up various files and then copies the \r
+ zips and other files to<FONT face="Courier"><EM>srcdir</EM></FONT>/<FONT face="Courier">public</FONT>. \r
+ "public" is hardwired in the build script.</FONT></TT></P>\r
+ <H2><A name="#Configfile"></A>Config file</H2>\r
+ <H3>\r
+ CopyLists</H3>\r
+ <P>\r
+ CopyLists are used in many places. There is an optional \r
+ Configuration section and a required Files section. </P>\r
+ <P>The configuration section defines the roots of the from and to paths and can \r
+ optionally define path substitutions. \r
+ </P>\r
+ <P>Internally, the to and from paths are required. They are forced by the \r
+ script rather than being set in the config file. Comments in the copyfile \r
+ xml indicate this.</P>\r
+ <P>The overall build configuration specifies a debug or release build. The \r
+ debug and release results are put in different places. File entries can \r
+ indicate a variable part of a path with a tag such as %bldtype%. The \r
+ script will substitute %bldtype% with either dbg or rel, depending on the build \r
+ type. The substitution tags are specified with these declarations:</P>\r
+ <P>\r
+ <TABLE id="Table1" height="0" cellSpacing="1" cellPadding="1" border="1">\r
<TR>\r
- <TD vAlign="top" width="100%"><!-- Inner content table -->\r
- <TABLE cellSpacing="0" cellPadding="2" width="100%">\r
- <TBODY>\r
- <TR>\r
- <TD vAlign="top" width="100%">\r
- <DIV style="MARGIN-BOTTOM: 10px; MARGIN-LEFT: 10px">\r
- <DIV class="wiki-content" style="MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px">The Kerberos \r
- For Windows build is being automated. This description consists of\r
- </DIV>\r
- </DIV>\r
- <DIV id="content" style="MARGIN-LEFT: 10px">\r
- <DIV class="wiki-content" style="MARGIN-RIGHT: 10px">\r
- <UL>\r
- <LI>\r
- Build steps\r
- <LI>\r
- Script structure\r
- <LI>\r
- Script step details\r
- <LI>\r
- Remaining work / bug list\r
- </LI>\r
- </UL>\r
- <H2><A name="lore-bkw-automation-Buildsteps"></A>Build steps</H2>\r
- <P>Building the complete KfW product consists of these steps:</P>\r
- <UL>\r
- <LI>\r
- Setting up the environment [Done except for subversion, logging]\r
- <LI>\r
- Fetching sources from repositories [cvs done; subversion being worked on]\r
- <LI>\r
- Building the sources with nmake [Done]\r
- <LI>\r
- Setting up the packaging environment [Done]\r
- <LI>\r
- Building KfW.msi with the packaging nmake [Done]\r
- <LI>\r
- Building other distribution components [Not done]\r
- <UL>\r
- <LI>\r
- .exe installer\r
- <LI>\r
- KfW source distribution\r
- <LI>\r
- KfW core binaries\r
- <LI>\r
- KfW SDK\r
- <LI>\r
- Microsoft redistributable components\r
- <LI>\r
- Individual files: release notes, Leash user guide, MSI Deployment Guide.\r
- </LI>\r
- </UL>\r
- </LI>\r
- </UL>\r
- <H2>Script structure</H2>\r
- <P>The build is a perl script controlled by command line switches and an XML \r
- configuration file. The config file is required. Settings in the config file \r
- can be overridden by optional command line switches.</P>\r
- <P>The main steps in the script are</P>\r
- <UL>\r
- <LI>\r
- Setting up the environment\r
- <LI>\r
- Fetching the sources from repositories\r
- <LI>\r
- Building the sources\r
- <LI>\r
- Setting up the packaging environment\r
- <LI>\r
- Building the msi with the package nmake\r
- <LI>\r
- Building the rest of the components [tbd]\r
- </LI>\r
- </UL>\r
- <P>The usage message shows the available switches:</P>\r
- <P><TT>C:\Projects\KfW>perl bkw.pl /?</TT><BR>\r
- <TT>Usage: bkw.pl (-f --config) config-file [options] NMAKE-options</TT></P>\r
- <P><TT>Options are case insensitive.</TT></P>\r
- <P><TT>Options:</TT><BR>\r
- <TT>/help /? usage information (what you now see)</TT><BR>\r
- <TT>/srcdir dir Source directory to use. Should contain</TT><BR>\r
- <TT> \r
- pismere/athena. If cvstag or svntag is null,</TT><BR>\r
- <TT> \r
- the directory should be prepopulated.</TT><BR>\r
- <TT>/cvs?ag tag \ For whichever of these tags is specified,</TT><BR>\r
- <TT>/svntag url / a checkout will be done into srcdir</TT><BR>\r
- <TT>/debug Do debug make instead of \r
- release make</TT><BR>\r
- <TT>/outdir dir Directory to be created where build results will go</TT><BR>\r
- <TT>/nomake Skip make step</TT><BR>\r
- <TT>/nopackage Skip packaging step</TT><BR>\r
- <TT>/clean Build clean target</TT><BR>\r
- <TT>/verbose Debug mode - verbose output</TT><BR>\r
- <TT>/vverbose very verbose output</TT><BR>\r
- <TT>/config path Path to config file</TT><BR>\r
- <TT>/logfile path Where to write output. If omitted, ...</TT><BR>\r
- <TT>/srcdir dir Source directory to use. Should contain\r
- <BR>\r
- </TT><TT>pismere/athena. \r
- If cvstag or svntag is null,\r
- <BR>\r
- \r
- the directory should be prepopulated.\r
- <BR>\r
- </TT><TT>/outdir dir Directory to be created where build results will \r
- go\r
- <BR>\r
- /repository checkout | co \ What repository action to take.\r
- <BR>\r
- </TT><TT>update \r
- | up | Options are to checkout, update or<BR>\r
- skip \r
- / take no action [skip].\r
- <BR>\r
- /cvstag tag \ For whichever of these tags is specified,\r
- <BR>\r
- </TT><TT>/svntag url / the repository action will be done into srcdir\r
- <BR>\r
- /debug Do debug make instead of release make\r
- <BR>\r
- /nomake Skip make step\r
- <BR>\r
- /nopackage Skip packaging step\r
- <BR>\r
- /clean Build clean target\r
- <BR>\r
- /verbose Debug mode - verbose output\r
- <BR>\r
- /config path Path to config file\r
- <BR>\r
- /logfile path Where to write output. If omitted, ...<BR>\r
- </TT><TT>Other:</TT><BR>\r
- <TT>NMAKE-options any options you want to pass to NMAKE, which can be:</TT><BR>\r
- <TT>(note: /nologo is always used)</TT><BR>\r
- <TT>[ nmake options follow ]</TT></P>\r
- <P>Additional controls, not available from the command line:</P>\r
- <P><TT><CVSROOT name=":kserver:cvs.mit.edu:/cvs/pismere" /></TT><BR>\r
- <TT><SVNURL name="" /></TT><BR>\r
- <TT><CopyList><Config><DebugArea value="dbg" /></TT><BR>\r
- <TT> \r
- <ReleaseArea value="rel" /></TT><BR>\r
- <TT> <AlwaysTag \r
- value="%bldtype%" /></TT><BR>\r
- <TT> \r
- <DebugTag value="%debug%" /></TT><BR>\r
- <TT> \r
- <ReleaseTag value="%release%" /></TT><BR>\r
- <TT> \r
- <Files><Include path="copyfiles.xml" /></TT></P>\r
- <H3>The CopyList</H3>\r
- <P>The <TT>CopyList</TT> is used during the Setting Up The Packaging Environment \r
- step. Build results and files from all over the source tree are copied into a \r
- 'staging' area in a structure the packaging script expects. The staging area is <TT>\r
- <src>/pismere/staging</TT>.</P>\r
- <P>The original copy list on which this is based had duplicate entries for debug \r
- and release build results. This version only names each file once, which could \r
- reduce maintenance.</P>\r
- <P>A copylist entry looks like this:</P>\r
- <DIV class="preformattedContent"><PRE><File name="comerr32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />\r
-</PRE>\r
- </DIV>\r
- <P>From paths are relative to <TT><src>\pismere\athena</TT> and To paths are \r
- relative to <TT><src>\pismere\staging</TT>.</P>\r
- <P>Debug and release build results go into directories containing either 'dbg' or \r
- 'rel.' <TT>DebugArea</TT> and <TT>ReleaseArea</TT> describe these strings. If \r
- an entry in the copy list contains the <TT>AlwaysTag</TT> string ('%bldtype%'), \r
- the debug or release file will be copied, depending on the build type. If the \r
- copy list entry contains <TT>DebugTag</TT> ('%debug%'), the file will only be \r
- copied if packaging a debug build. Ditto for <TT>ReleaseTag<?TT>.</P>\r
- <P>If we are doing a debug build, the above copylist entry will copy <TT><src>\pismere\athena\..\target\bin\i386\dbg\comerr32.dll</TT>\r
- to <TT><src>\pismere\staging\bin\i386\comerr32.dll</TT>.</P>\r
- <P>There are two other possible attributes in a copylist entry:</P>\r
- <UL>\r
- <LI>\r
- <TT>notrequired</TT>\r
- <LI>\r
- <TT>newname="filename"</TT>\r
- </LI>\r
- </UL>\r
- <P>Most copylist entries are required and the script will die if they aren't \r
- present. To ignore missing files, add <TT>notrequired</TT>.</P>\r
- <P>To rename the file, set the <TT>newname</TT> attribute.</P>\r
- <H2><FONT face="Verdana">Remaining work / bug list</FONT></H2>\r
- <P>This is a work in progress. What's left:</P>\r
- <UL>\r
- <LI>\r
- <FONT face="Verdana">Produce the remainder of the distribution components. [Listed \r
- above.] </FONT>\r
- </LI>\r
- </UL>\r
- <P>Bugs:</P>\r
- <UL>\r
- <LI>\r
- <FONT face="Verdana">Propogate leash removal through wix scripts. </FONT>\r
- <LI>\r
- <FONT face="Verdana">Eliminate need for redundant <TT>/debug debug</TT>. </FONT>\r
- </LI>\r
- </UL>\r
- </DIV>\r
- </DIV>\r
- </TT></TD>\r
- </TR>\r
- </TBODY></TABLE>\r
+ <TD>DebugArea</TD>\r
+ <TD height="21">Path value used in debug build. Must match what the build \r
+ script uses. Typically "dbg."</TD>\r
+ </TR>\r
+ <TR>\r
+ <TD>ReleaseArea</TD>\r
+ <TD height="9">Path value used in release build. Must match the build \r
+ script. Typically "rel."</TD>\r
+ </TR>\r
+ <TR>\r
+ <TD>AlwaysTag</TD>\r
+ <TD height="17">String in file entries which will always be changed to either \r
+ DebugArea or ReleaseArea. File is always copied. Typically "%bldtype%."</TD>\r
+ </TR>\r
+ <TR>\r
+ <TD>DebugTag</TD>\r
+ <TD>String in file entries which will only be changed to DebugArea during a debug \r
+ build. File is only copied in a debug build. Typically "%debug%."</TD>\r
+ </TR>\r
+ <TR>\r
+ <TD>ReleaseTag</TD>\r
+ <TD>String in file entries which will only be changed to ReleaseArea during a \r
+ release build. File is only copied in a release build. Typically \r
+ "%release%."</TD>\r
+ </TR>\r
+ <TR>\r
+ <TD>FileStem</TD>\r
+ <TD>%filestem% will always be changed to FileStem. Example: \r
+ "kfw-3-2-0." This is used in when building or copying the final build \r
+ results.</TD>\r
+ </TR>\r
+ </TABLE>\r
+ </P>\r
+ <P><STRONG>Example</STRONG></P>\r
+ <P>Each segment of the file's path that comes from a different place is in a \r
+ different color.</P>\r
+ <P>\r
+ Release build. Config file:\r
+ </P>\r
+ <P>\r
+ <TABLE id="Table2" cellSpacing="1" cellPadding="1" border="0">\r
+ <TR>\r
+ <TD colspan="4"><FONT face="courier"><BKW_Config></FONT></TD>\r
+ </TR>\r
+ <TR>\r
+ <TD width="23"></TD>\r
+ <TD colspan="3"><FONT face="courier"><CommandLine></FONT></TD>\r
+ </TR>\r
+ <TR>\r
+ <TD width="23"></TD>\r
+ <TD width="20"></TD>\r
+ <TD colspan="2"><FONT face="courier"><Directories></FONT></TD>\r
+ </TR>\r
+ <TR>\r
+ <TD width="23"></TD>\r
+ <TD width="20"></TD>\r
+ <TD width="22"></TD>\r
+ <TD><FONT face="courier"><src path ="<FONT color="#000099">C:\projects\Autobuild"</FONT>\r
+ /></FONT>\r
</TD>\r
</TR>\r
- </TBODY></TABLE>\r
+ </TABLE>\r
+ </P>\r
+ <P>Copylist comments:</P>\r
+ <P class="code">\r
+ <!-- File from paths are relative to\r
+ <src>\<FONT color="#ff00cc">pismere\athena</FONT> --> \r
+<BR> \r
+ <!-- File to paths are relative to <src>\<FONT color="#00ff00">pismere\staging</FONT>\r
+ -->\r
+ </P>\r
+ <P>When the script processes this copylist, it will force the from and to paths as \r
+ indicated.</P>\r
+ <P>This line\r
+ </P>\r
+ <P class="code"><File name="<FONT color="#00ffff">comerr32.dll</FONT>" from="<FONT color="#ff9933">..\target\bin\i386</FONT>\<FONT color="#ff0000">%bldtype%</FONT>\" \r
+ to="\<FONT color="#9966ff">bin\i386</FONT>" /></P>\r
+ <P>will result in <FONT face="Courier"><FONT color="#000099">C:\projects\Autobuild</FONT>\<FONT color="#ff00cc">pismere\athena</FONT>\<FONT color="#ff9933">..\target\bin\i386</FONT>\<FONT color="#ff0000">rel</FONT>\<FONT color="#00ffff">comerr32.dll</FONT></FONT></P>\r
+ <P>being copied to <FONT face="Courier"><FONT color="#000099">C:\projects\Autobuild</FONT>\<FONT color="#00ff00">pismere\staging</FONT>\<FONT color="#9966ff">bin\i386</FONT>\<FONT color="#00ffff">comerr32.dll</FONT></FONT>.</P>\r
+ <TT>\r
+ <P>\r
+ Other possible attributes in a copylist entry:</P>\r
+ <UL>\r
+ <LI>\r
+ <TT>notrequired</TT>\r
+ <LI>\r
+ <TT>newname="filename"</TT>\r
+ </LI>\r
+ </UL>\r
+ <P>By default, copylist entries are required and the script will die if they aren't \r
+ present. To ignore missing files, add <TT>notrequired</TT>.</P>\r
+ <P>To rename the file, set the <TT>newname</TT> attribute.</P>\r
+ <P>Lengthy copy lists can be kept in separate files and included with the Include \r
+ directive. Example:</P>\r
+ <P class="code"><Include path="sdkfiles.xml" /></P>\r
+ <H2><FONT face="Verdana"><A name="Remainingwork"></A>Remaining work / bug list</FONT></H2>\r
+ <P>This is a work in progress. What's left:</P>\r
+ <P>Bugs:</P>\r
+ <UL>\r
+ <LI>\r
+ <FONT face="Verdana">Eliminate need for redundant <TT>/debug debug</TT>. </FONT>\r
+ <LI>\r
+ <FONT face="Verdana">Handle checkout into non-existant directory.</FONT>\r
+ </LI>\r
+ </UL>\r
+ <H2><FONT face="Verdana"><A name="Troubleshooting"></A>Troubleshooting</FONT>\r
+ </TT></H2>\r
+ <P><TT><FONT face="Verdana"><STRONG>svn can't create tunnel:<BR>\r
+ </STRONG>Make sure environment variable SVN_SSH points to a valid \r
+ plink.exe. Path separators must be backslashes and must be doubled.</FONT></TT><TT></P>\r
+ </TT>\r
</DIV>\r
</BODY>\r
</HTML>\r