summaryrefslogtreecommitdiffstats
path: root/src/windows/build
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2007-09-24 22:05:56 +0000
committerKen Raeburn <raeburn@mit.edu>2007-09-24 22:05:56 +0000
commit5386b775b2fbce68cbc846f7dac3ef495e72457a (patch)
tree34e1350d51f8265d21fc69f47e293ea1dec1b8c1 /src/windows/build
parentecdd7622b03b8e3ffa1dce68e081fca9e9b0aa70 (diff)
downloadkrb5-5386b775b2fbce68cbc846f7dac3ef495e72457a.tar.gz
krb5-5386b775b2fbce68cbc846f7dac3ef495e72457a.tar.xz
krb5-5386b775b2fbce68cbc846f7dac3ef495e72457a.zip
Set svn:eol-style on a bunch of text-looking files that didn't have it
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19972 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/windows/build')
-rw-r--r--src/windows/build/BKWconfig.xml342
-rw-r--r--src/windows/build/Logger.pm174
-rw-r--r--src/windows/build/bkw-automation.html712
-rw-r--r--src/windows/build/bkw.pl1378
-rw-r--r--src/windows/build/bootstrap.xml36
-rw-r--r--src/windows/build/commandandcontrol.pl338
-rw-r--r--src/windows/build/copyfiles.pl274
-rw-r--r--src/windows/build/copyfiles.xml434
-rw-r--r--src/windows/build/corebinaryfiles.xml168
-rw-r--r--src/windows/build/css/main-action(1).css108
-rw-r--r--src/windows/build/css/main-action.css2064
-rw-r--r--src/windows/build/makeZip.pl166
-rw-r--r--src/windows/build/pruneFiles.pl72
-rw-r--r--src/windows/build/repository1.pl178
-rw-r--r--src/windows/build/sdkfiles.xml44
-rw-r--r--src/windows/build/signFiles.pl52
-rw-r--r--src/windows/build/site-local.sed2
-rw-r--r--src/windows/build/tee.pl158
-rw-r--r--src/windows/build/which.pl138
-rw-r--r--src/windows/build/zipXML.pl42
20 files changed, 3440 insertions, 3440 deletions
diff --git a/src/windows/build/BKWconfig.xml b/src/windows/build/BKWconfig.xml
index 42cf1543b8..92fdc6ecd9 100644
--- a/src/windows/build/BKWconfig.xml
+++ b/src/windows/build/BKWconfig.xml
@@ -1,172 +1,172 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!-- BKW: Build Kerberos for Windows -->
-<BKW_Config>
- <Config>
- <!-- All the parameters are specified here. Most can be over-ridden
- on the command line.
-
- Parameters are grouped into Options, Directories, Repository and Environment.
-
- Attributes a parameter can have:
- abbr: A one character abbreviation.
- def: defined or not. A value of 'A' for 'always' means the
- option can't be negated on the command line.
- value: string value, if the option can have a value. If the option
- can't take a value, omit the value attribute.
- options: space-delimited list, the 1st element is the default.
- Synonyms for a valid option are concatenated with '|'.
- env: an environment variable will be set to value or deleted,
- depending on def. If set and no value is given, '1' is used.
- -->
- <!-- Options: -->
- <clean def="0" />
- <config def="1" abbr="f" value="bkwconfig.xml" />
- <debug def="0" abbr="d" />
- <help def="0" abbr="h|?" />
- <logfile def="1" abbr="l" value="bkw.pl.log" />
- <make def="1" />
- <nolog def="0" />
- <package def="1" />
- <repository def="A" abbr="r" value="skip" options="skip checkout|co export|ex update|up" />
- <sign def="0" />
- <verbose def="0" abbr="v" />
- <vverbose def="0" />
-
- <!-- Directory settings: -->
- <!-- Sources will be checked out of repositories into <src>. The structure
- of the repositories will cause pismere/athena to be created under <src>. -->
- <src def="A" abbr="s" value="C:\KfW" /> <!-- Must be absolute path. -->
- <out def="A" abbr="o" value="C:\KfW\public" /> <!-- Must be absolute path. -->
-
- <!-- Repository settings: -->
- <cvstag def="0" abbr="c" value="" />
- <svntag def="0" abbr="t" value="" />
- <svnbranch def="0" abbr="b" value="" />
- <username def="0" abbr="u" value="" /> <!-- Needed for svn/plink. Override from command line -->
- <CVSROOT def="A" value=":kserver:cvs.mit.edu:/cvs/pismere" />
- <SVNURL def="A" value="svn.mit.edu" /> <!-- NB: No protocol or slashes!! -->
-
- <!-- Environment variables: -->
- <KH_RELEASE def="1" env="1" value="OFFICIAL" options="OFFICIAL PRERELEASE PRIVATE" />
- <NODEBUG def="1" env="1" /> <!-- Interacts with /DEBUG -->
- </Config>
- <Stages>
- <FetchSources>
- <Zips>
- <Zip dummy="foo" /> <!-- To force desired XML::Simple behavior -->
- <Zip name="SRC" filename="%filestem%-src.zip" topdir="%filestem%-final">
- <CopyList>
- <Files>
- <!-- File from paths are relative to <src>/pismere. -->
- <!-- File to paths are relative to <out>. -->
- <File dummy="foo" /> <!-- Forces XML::Simple behavior -->
- <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->
- <File name="*.*" from="athena" to="src\athena" />
- <File name="*.*" from="doc" to="src\doc" />
- <File name="*.*" from="scripts" to="src\scripts" />
- </Files>
- </CopyList>
- <Prunes> <!-- Files to be removed from current build to match what is in the 3.1 distribution: -->
- <Prune name="CVS" />
- <Prune name=".cvsignore" flags="i" />
- <Prune name="Changelog" flags="i" />
- </Prunes>
- <Requires>
- <Switch dummy="foo" />
- <Switch name="REPOSITORY" value="CHECKOUT|EXPORT"/>
- <ErrorMsg text="Can't build source zip unless /REPOSITORY CHECKOUT or /REPOSITORY EXPORT is specified." />
- </Requires>
- </Zip>
- </Zips>
- </FetchSources>
- <Make>
- <!-- Script checks for prunes. -->
- </Make>
- <PrePackage>
- <CopyList>
- <Config>
- <!-- Debug and Release build results go in different places.
- The otherwise identical paths differ in one section. For example:
- .../target/bin/i386/bin/rel/filename and .../target/bin/i386/dbg/filename.
- Here we define the two differing sections: -->
- <DebugArea value="dbg" />
- <ReleaseArea value="rel" />
- <!-- Paths in the file list that include <AlwaysTag> will always have the tag replaced
- with <DebugArea> or <ReleaseArea>, depending on the type of build.
- Paths that include <DebugTag> (or <ReleaseTag>) will only have the tag substituted
- and be copied when doing a debug (or release) build. Examples:
- Will always be copied, from a build-dependent directory:
- <File name="kfwlogon.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- Will only be copied in debug build:
- <File name="netidmgr.exe.static.manifest" from="..\target\bin\i386\%debug%\" to="\bin\i386" notrequired="true" />
- Will always be copied, from a build-independent directory:
- <File name="des.h" from="auth\krb4\include\" to="\inc\krb4" newname="foo.h"/>
- -->
- <AlwaysTag value="%bldtype%" /> <!-- Pick a string that won't appear in a path. -->
- <DebugTag value="%debug%" /> <!-- Pick a string that won't appear in a path. -->
- <ReleaseTag value="%release%" /> <!-- Pick a string that won't appear in a path. -->
- </Config>
- <Files>
- <Include path="copyfiles.xml" />
- </Files> <!-- Relative to location of bkw.pl. -->
- </CopyList>
- </PrePackage>
- <Package>
- <Config>
- <Paths>
- <Versions path="pismere/athena/include/kerberos.ver" /> <!-- Relative to <src>. -->
- </Paths>
- </Config>
- <MSI></MSI>
- <NSIS></NSIS> <!-- NB: Most config is done in site-local.nsi. -->
- </Package>
- <PostPackage>
- <Config> <!-- This config info will be copied into each CopyList in PostPackage. -->
- <FileStem name="kfw-%VERSION_MAJOR%-%VERSION_MINOR%-%VERSION_PATCH%" /> <!-- <FileStem> will be substituted for %filestem%. -->
- <Signing>
- <CommandTemplate value="signtool sign /a /d &quot;MIT Kerberos for Windows&quot; /du &quot;http://web.mit.edu/kerberos&quot; /t TIMESTAMPSERVERGOESHERE %filename%" />
- <FilePatterns value="*.exe *.dll *.cpl *.msi" />
- </Signing>
- </Config>
- <Zips>
- <Zip dummy="foo" /> <!-- To force desired XML::Simple behavior -->
- <!-- Files will be copied into directory <topdir>; <topdir> will appear in the paths of the files. -->
- <!-- File from paths are relative to <src>/pismere. -->
- <!-- File to paths are relative to <out>. -->
- <Zip name="Core Binaries" filename="%filestem%.zip" topdir="%filestem%-final">
- <CopyList>
- <Config>
- <DebugArea value="dbg" />
- <ReleaseArea value="rel" />
- <AlwaysTag value="%bldtype%" /> <!-- Pick a string that won't appear in a path. -->
- <DebugTag value="%debug%" /> <!-- Pick a string that won't appear in a path. -->
- <ReleaseTag value="%release%" /> <!-- Pick a string that won't appear in a path. -->
- </Config>
- <Files>
- <Include path="corebinaryfiles.xml" /> <!-- Included file is relative to location of bkw.pl. -->
- </Files>
- </CopyList>
- </Zip>
- <Zip name="SDK" filename="%filestem%-sdk.zip" topdir="%filestem%-final">
- <CopyList>
- <Files>
- <Include path="sdkfiles.xml" /> <!-- Included file is relative to location of bkw.pl. -->
- </Files>
- </CopyList>
- </Zip>
- </Zips>
- <CopyList> <!-- Copied at end of post-package step. -->
- <Files>
- <File dummy="foo" />
- <!-- File from paths are relative to <src/pismere>. -->
- <!-- File to paths are relative to <out>. -->
- <File name="msi-deployment-guide.txt" from="staging\install\wix\" to="" />
- <File name="netidmgr_userdoc.pdf" from="staging\doc" to="" />
- <File name="kfw.msi" from="buildwix" to="" newname="%filestem%.msi" />
- <File name="MITKerberosForWindows%-DEBUG%.exe" from="buildnsi" to="" newname="%filestem%%-DEBUG%.exe" />
- <File name="relnotes.html" from="staging\doc" to="" />
- </Files>
- </CopyList>
- </PostPackage>
- </Stages>
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- BKW: Build Kerberos for Windows -->
+<BKW_Config>
+ <Config>
+ <!-- All the parameters are specified here. Most can be over-ridden
+ on the command line.
+
+ Parameters are grouped into Options, Directories, Repository and Environment.
+
+ Attributes a parameter can have:
+ abbr: A one character abbreviation.
+ def: defined or not. A value of 'A' for 'always' means the
+ option can't be negated on the command line.
+ value: string value, if the option can have a value. If the option
+ can't take a value, omit the value attribute.
+ options: space-delimited list, the 1st element is the default.
+ Synonyms for a valid option are concatenated with '|'.
+ env: an environment variable will be set to value or deleted,
+ depending on def. If set and no value is given, '1' is used.
+ -->
+ <!-- Options: -->
+ <clean def="0" />
+ <config def="1" abbr="f" value="bkwconfig.xml" />
+ <debug def="0" abbr="d" />
+ <help def="0" abbr="h|?" />
+ <logfile def="1" abbr="l" value="bkw.pl.log" />
+ <make def="1" />
+ <nolog def="0" />
+ <package def="1" />
+ <repository def="A" abbr="r" value="skip" options="skip checkout|co export|ex update|up" />
+ <sign def="0" />
+ <verbose def="0" abbr="v" />
+ <vverbose def="0" />
+
+ <!-- Directory settings: -->
+ <!-- Sources will be checked out of repositories into <src>. The structure
+ of the repositories will cause pismere/athena to be created under <src>. -->
+ <src def="A" abbr="s" value="C:\KfW" /> <!-- Must be absolute path. -->
+ <out def="A" abbr="o" value="C:\KfW\public" /> <!-- Must be absolute path. -->
+
+ <!-- Repository settings: -->
+ <cvstag def="0" abbr="c" value="" />
+ <svntag def="0" abbr="t" value="" />
+ <svnbranch def="0" abbr="b" value="" />
+ <username def="0" abbr="u" value="" /> <!-- Needed for svn/plink. Override from command line -->
+ <CVSROOT def="A" value=":kserver:cvs.mit.edu:/cvs/pismere" />
+ <SVNURL def="A" value="svn.mit.edu" /> <!-- NB: No protocol or slashes!! -->
+
+ <!-- Environment variables: -->
+ <KH_RELEASE def="1" env="1" value="OFFICIAL" options="OFFICIAL PRERELEASE PRIVATE" />
+ <NODEBUG def="1" env="1" /> <!-- Interacts with /DEBUG -->
+ </Config>
+ <Stages>
+ <FetchSources>
+ <Zips>
+ <Zip dummy="foo" /> <!-- To force desired XML::Simple behavior -->
+ <Zip name="SRC" filename="%filestem%-src.zip" topdir="%filestem%-final">
+ <CopyList>
+ <Files>
+ <!-- File from paths are relative to <src>/pismere. -->
+ <!-- File to paths are relative to <out>. -->
+ <File dummy="foo" /> <!-- Forces XML::Simple behavior -->
+ <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->
+ <File name="*.*" from="athena" to="src\athena" />
+ <File name="*.*" from="doc" to="src\doc" />
+ <File name="*.*" from="scripts" to="src\scripts" />
+ </Files>
+ </CopyList>
+ <Prunes> <!-- Files to be removed from current build to match what is in the 3.1 distribution: -->
+ <Prune name="CVS" />
+ <Prune name=".cvsignore" flags="i" />
+ <Prune name="Changelog" flags="i" />
+ </Prunes>
+ <Requires>
+ <Switch dummy="foo" />
+ <Switch name="REPOSITORY" value="CHECKOUT|EXPORT"/>
+ <ErrorMsg text="Can't build source zip unless /REPOSITORY CHECKOUT or /REPOSITORY EXPORT is specified." />
+ </Requires>
+ </Zip>
+ </Zips>
+ </FetchSources>
+ <Make>
+ <!-- Script checks for prunes. -->
+ </Make>
+ <PrePackage>
+ <CopyList>
+ <Config>
+ <!-- Debug and Release build results go in different places.
+ The otherwise identical paths differ in one section. For example:
+ .../target/bin/i386/bin/rel/filename and .../target/bin/i386/dbg/filename.
+ Here we define the two differing sections: -->
+ <DebugArea value="dbg" />
+ <ReleaseArea value="rel" />
+ <!-- Paths in the file list that include <AlwaysTag> will always have the tag replaced
+ with <DebugArea> or <ReleaseArea>, depending on the type of build.
+ Paths that include <DebugTag> (or <ReleaseTag>) will only have the tag substituted
+ and be copied when doing a debug (or release) build. Examples:
+ Will always be copied, from a build-dependent directory:
+ <File name="kfwlogon.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ Will only be copied in debug build:
+ <File name="netidmgr.exe.static.manifest" from="..\target\bin\i386\%debug%\" to="\bin\i386" notrequired="true" />
+ Will always be copied, from a build-independent directory:
+ <File name="des.h" from="auth\krb4\include\" to="\inc\krb4" newname="foo.h"/>
+ -->
+ <AlwaysTag value="%bldtype%" /> <!-- Pick a string that won't appear in a path. -->
+ <DebugTag value="%debug%" /> <!-- Pick a string that won't appear in a path. -->
+ <ReleaseTag value="%release%" /> <!-- Pick a string that won't appear in a path. -->
+ </Config>
+ <Files>
+ <Include path="copyfiles.xml" />
+ </Files> <!-- Relative to location of bkw.pl. -->
+ </CopyList>
+ </PrePackage>
+ <Package>
+ <Config>
+ <Paths>
+ <Versions path="pismere/athena/include/kerberos.ver" /> <!-- Relative to <src>. -->
+ </Paths>
+ </Config>
+ <MSI></MSI>
+ <NSIS></NSIS> <!-- NB: Most config is done in site-local.nsi. -->
+ </Package>
+ <PostPackage>
+ <Config> <!-- This config info will be copied into each CopyList in PostPackage. -->
+ <FileStem name="kfw-%VERSION_MAJOR%-%VERSION_MINOR%-%VERSION_PATCH%" /> <!-- <FileStem> will be substituted for %filestem%. -->
+ <Signing>
+ <CommandTemplate value="signtool sign /a /d &quot;MIT Kerberos for Windows&quot; /du &quot;http://web.mit.edu/kerberos&quot; /t TIMESTAMPSERVERGOESHERE %filename%" />
+ <FilePatterns value="*.exe *.dll *.cpl *.msi" />
+ </Signing>
+ </Config>
+ <Zips>
+ <Zip dummy="foo" /> <!-- To force desired XML::Simple behavior -->
+ <!-- Files will be copied into directory <topdir>; <topdir> will appear in the paths of the files. -->
+ <!-- File from paths are relative to <src>/pismere. -->
+ <!-- File to paths are relative to <out>. -->
+ <Zip name="Core Binaries" filename="%filestem%.zip" topdir="%filestem%-final">
+ <CopyList>
+ <Config>
+ <DebugArea value="dbg" />
+ <ReleaseArea value="rel" />
+ <AlwaysTag value="%bldtype%" /> <!-- Pick a string that won't appear in a path. -->
+ <DebugTag value="%debug%" /> <!-- Pick a string that won't appear in a path. -->
+ <ReleaseTag value="%release%" /> <!-- Pick a string that won't appear in a path. -->
+ </Config>
+ <Files>
+ <Include path="corebinaryfiles.xml" /> <!-- Included file is relative to location of bkw.pl. -->
+ </Files>
+ </CopyList>
+ </Zip>
+ <Zip name="SDK" filename="%filestem%-sdk.zip" topdir="%filestem%-final">
+ <CopyList>
+ <Files>
+ <Include path="sdkfiles.xml" /> <!-- Included file is relative to location of bkw.pl. -->
+ </Files>
+ </CopyList>
+ </Zip>
+ </Zips>
+ <CopyList> <!-- Copied at end of post-package step. -->
+ <Files>
+ <File dummy="foo" />
+ <!-- File from paths are relative to <src/pismere>. -->
+ <!-- File to paths are relative to <out>. -->
+ <File name="msi-deployment-guide.txt" from="staging\install\wix\" to="" />
+ <File name="netidmgr_userdoc.pdf" from="staging\doc" to="" />
+ <File name="kfw.msi" from="buildwix" to="" newname="%filestem%.msi" />
+ <File name="MITKerberosForWindows%-DEBUG%.exe" from="buildnsi" to="" newname="%filestem%%-DEBUG%.exe" />
+ <File name="relnotes.html" from="staging\doc" to="" />
+ </Files>
+ </CopyList>
+ </PostPackage>
+ </Stages>
</BKW_Config> \ No newline at end of file
diff --git a/src/windows/build/Logger.pm b/src/windows/build/Logger.pm
index f74c218076..c7f904a946 100644
--- a/src/windows/build/Logger.pm
+++ b/src/windows/build/Logger.pm
@@ -1,87 +1,87 @@
-package Logger;
-
-use strict;
-use IO::File;
-use FindBin;
-
-my $bStarted = 0;
-
-sub new {
- my $class = shift;
- my $file = shift;
- my $append = shift;
- $file || die "Usage: \$foo = new Logger filename [append]\n";
- my $self = {};
- bless $self, $class;
- $self->{FILE} = $file;
- $self->{APPEND} = $append?'-a':'';
- return $self;
-}
-
-sub start {
- my $self = shift;
-
- return 1 if $self->{PIPE};
-
- STDOUT->flush;
- STDERR->flush;
-
- my $fh_out = new IO::File;
- my $fh_err = new IO::File;
- my $fh_pipe = new IO::File;
-
- $self->{OUT} = $fh_out;
- $self->{ERR} = $fh_err;
- $self->{PIPE} = $fh_pipe;
-
- $fh_out->open(">&STDOUT") || die;
- $fh_err->open(">&STDERR") || die;
- $fh_pipe->open("|$^X $FindBin::Bin/tee.pl $self->{APPEND} $self->{FILE}") || die;
-
- STDOUT->fdopen(fileno $fh_pipe, "w") || die;
- STDERR->fdopen(fileno $fh_pipe, "w") || die;
-
- STDOUT->autoflush(1);
- STDERR->autoflush(1);
-
- $SIG{__DIE__} = sub {
- print STDERR $_[0];
- $self->stop;
- die "\n";
- };
-
- $bStarted = 1;
- return 1;
-}
-
-# 20070314 kpkoch:
-# There appears to be a bug in ActivePerl where Logger's games with streams
-# and the SIG DIE handler cause eval to throw exceptions. By deleting the DIE handler,
-# subsequent evals do not fail.
-sub no_die_handler {
- delete $SIG{__DIE__};
- }
-
-sub stop {
- my $self = shift;
-
- return 0 if !$self->{PIPE};
-
- STDOUT->close;
- STDERR->close;
- $self->{PIPE}->close;
- STDOUT->fdopen(fileno $self->{OUT}, "w");
- STDERR->fdopen(fileno $self->{ERR}, "w");
- delete $self->{OUT};
- delete $self->{ERR};
- delete $self->{PIPE};
- $bStarted = 0;
- return 1;
-}
-
-sub DESTROY {
- my $self = shift;
- $self->stop if ($bStarted);
- }
-
-1;
+package Logger;
+
+use strict;
+use IO::File;
+use FindBin;
+
+my $bStarted = 0;
+
+sub new {
+ my $class = shift;
+ my $file = shift;
+ my $append = shift;
+ $file || die "Usage: \$foo = new Logger filename [append]\n";
+ my $self = {};
+ bless $self, $class;
+ $self->{FILE} = $file;
+ $self->{APPEND} = $append?'-a':'';
+ return $self;
+}
+
+sub start {
+ my $self = shift;
+
+ return 1 if $self->{PIPE};
+
+ STDOUT->flush;
+ STDERR->flush;
+
+ my $fh_out = new IO::File;
+ my $fh_err = new IO::File;
+ my $fh_pipe = new IO::File;
+
+ $self->{OUT} = $fh_out;
+ $self->{ERR} = $fh_err;
+ $self->{PIPE} = $fh_pipe;
+
+ $fh_out->open(">&STDOUT") || die;
+ $fh_err->open(">&STDERR") || die;
+ $fh_pipe->open("|$^X $FindBin::Bin/tee.pl $self->{APPEND} $self->{FILE}") || die;
+
+ STDOUT->fdopen(fileno $fh_pipe, "w") || die;
+ STDERR->fdopen(fileno $fh_pipe, "w") || die;
+
+ STDOUT->autoflush(1);
+ STDERR->autoflush(1);
+
+ $SIG{__DIE__} = sub {
+ print STDERR $_[0];
+ $self->stop;
+ die "\n";
+ };
+
+ $bStarted = 1;
+ return 1;
+}
+
+# 20070314 kpkoch:
+# There appears to be a bug in ActivePerl where Logger's games with streams
+# and the SIG DIE handler cause eval to throw exceptions. By deleting the DIE handler,
+# subsequent evals do not fail.
+sub no_die_handler {
+ delete $SIG{__DIE__};
+ }
+
+sub stop {
+ my $self = shift;
+
+ return 0 if !$self->{PIPE};
+
+ STDOUT->close;
+ STDERR->close;
+ $self->{PIPE}->close;
+ STDOUT->fdopen(fileno $self->{OUT}, "w");
+ STDERR->fdopen(fileno $self->{ERR}, "w");
+ delete $self->{OUT};
+ delete $self->{ERR};
+ delete $self->{PIPE};
+ $bStarted = 0;
+ return 1;
+}
+
+sub DESTROY {
+ my $self = shift;
+ $self->stop if ($bStarted);
+ }
+
+1;
diff --git a/src/windows/build/bkw-automation.html b/src/windows/build/bkw-automation.html
index 637c9c9b80..5e21ba570f 100644
--- a/src/windows/build/bkw-automation.html
+++ b/src/windows/build/bkw-automation.html
@@ -1,356 +1,356 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
-<!-- saved from url=(0066)https://confab.mit.edu/confluence/display/ISDA/lore-bkw-automation --><HTML><HEAD>
- <TITLE>lore-bkw-automation - Confluence</TITLE>
- <META http-equiv="Content-Type" content="text/html; charset=utf-8">
- <META http-equiv="Pragma" content="no-cache">
- <META http-equiv="Expires" content="-1">
- <LINK href="css/main-action.css" type="text/css" rel="stylesheet">
- <LINK href="css\main-action(1).css" type="text/css" rel="stylesheet">
- <META content="MSHTML 6.00.2900.3059" name="GENERATOR"></HEAD>
- <BODY>
- <DIV style="MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px" align="left">
- <DIV class="wiki-content" style="MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px" align="left">The
- Kerberos for Windows (KfW) build is automated.&nbsp; A script will fetch the
- sources from a repository and then build, sign and package all the KfW
- distribution components.
- </DIV>
- <DIV class="wiki-content" style="MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px" align="left">This
- description consists of
- </DIV>
- <UL>
- <LI>
- <A href="#Environment">Setting up the build environment</A>
- <LI>
- <A href="#Running">Running the script</A>
- <LI>
- <A href="Details">Script internal details</A>
- <LI>
- <A href="#Remainingwork">Remaining work / bug list</A>
- <LI>
- <A href="#Troubleshooting">Troubleshooting</A>
- </LI>
- </UL>
- <H2>Setting Up the Build Environment</H2>
- <P>KfW is built on a Windows PC, in the default Windows shell (cmd.exe). These
- components must be installed:</P>
- <UL>
- <LI>
- Visual Studio 2003<BR>
- Versions of Visual Studio before or after 2003 are not supported.
- <LI>
- A recent release of the
- <SPAN class="nobr">
- <A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&amp;displaylang=en">
- Microsoft Platform SDK</A></SPAN>
- &nbsp;
- <LI>
- <SPAN class="nobr">
- <A title="Visit page outside Confluence" href="http://www.activestate.com" rel="nofollow">
- ActiveState Perl 5.8 or more recent</A></SPAN><BR>
- Build 631 is known to work.
- <LI>
- <SPAN class="nobr">
- <A title="Visit page outside Confluence" href="http://www.doxygen.org/" rel="nofollow">
- Doxygen</A></SPAN>
- <LI>
- sed, awk, cat, rm and find<BR>
- These can be obtained from the
- <SPAN class="nobr">
- <A title="Visit page outside Confluence" href="http://cygwin.com/" rel="nofollow">Cygwin
- distribution</A></SPAN>.
- <BR clear="all">
- <BR clear="all">
- find must be in C:\tools\cygwin\bin, so install Cygwin in C:\tools\cygwin.
- <BR>
- <BR>
- The cygwin awk is a link and the MS shell doesn't deal well with that.&nbsp; <TT>C</TT>
- opy <TT>c:\tools\cygwin\bin\gawk</TT> to <TT>c:\tools\cygwin\bin\awk</TT>.
- <LI>
- <SPAN class="nobr">
- <A title="Visit page outside Confluence" href="http://sourceforge.net/project/showfiles.php?group_id=105970"
- rel="nofollow">Wix</A></SPAN>
- <LI>
- <SPAN class="nobr">
- <A title="Visit page outside Confluence" href="http://nsis.sourceforge.net" rel="nofollow">
- NSIS</A></SPAN></LI></UL>
- <H3>Environment variables</H3>
- <P>
- All the components above must be in PATH. Installing ActivePerl puts perl in
- the PATH. Doxygen, Cygwin, hhc, wix and&nbsp;nsis need to be added.</P>
- <P>perl must be installed so that .pl files are automatically executed with perl.
- The ActivePerl installation will do this for you.</P>
- <P>In the INCLUDE path, the Microsoft Platform SDK must come before the Microsoft
- Visual C++ include files. Using a Platform SDK Build Environment window will
- set this up the right way.&nbsp;</P>
- <P>If you make your path modifications permanent via Control Panel / System /
- Advanced / Environment Variables:&nbsp; If you use a Platform SDK Build
- Environment window, it appears that you need to put your PATH components in the
- System PATH, not the User PATH.</P>
- <P>Visual Studio installs hhc in C:\Program Files\HTML Help Workshop.</P>
- <P>nmake must be in PATH. If you use a Platform SDK build environment window, it is
- already done for you.</P>
- <h2>Running the Script<A name="Running"></A></h2>
- <P>
- The build is a perl script controlled by command line switches and an XML
- configuration file. The config file is required. Settings in the config file
- can be overridden by optional command line switches.&nbsp;</P>
- <P>There are options for controlling most steps of the build process.&nbsp; The
- steps are</P>
- <UL>
- <LI>
- Verifying the environment
- <LI>
- Fetching the sources from repositories
- <LI>
- Building the sources
- <LI>
- Setting up the packaging environment
- <LI>
- Building the installers
- <LI>
- Building the rest of the components
- </LI>
- </UL>
- <P>The usage message shows the switches that control these steps:</P>
- <P><TT>C:\Projects\KfW&gt;perl bkw.pl /?</TT><BR>
- <TT>Usage: bkw.pl [options] NMAKE-options</TT></P>
- <P><TT>&nbsp; Options are case insensitive. </TT>
- </P>
- <P><TT>&nbsp; Options:&nbsp;
- <BR>
- </TT><TT>&nbsp; /help /?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- usage information (what you now see).
- <BR>
- &nbsp; /config /f path&nbsp;&nbsp; Path to config file. Default is
- bkwconfig.xml.
- <BR>
- &nbsp; /src /s dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Source directory to use.
- Should contain
- <BR>
- &nbsp;&nbsp;&nbsp;
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- pismere/athena. If cvstag or svntag is&nbsp;null,
- <BR>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- the directory should be prepopulated.
- <BR>
- &nbsp; /out /o dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Directory to be created
- where build results will go
- <BR>
- </TT><TT>&nbsp; /repository checkout | co \ What repository action to take.
- <BR>
- &nbsp;&nbsp;&nbsp; &nbsp;/r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- update&nbsp;&nbsp; | up&nbsp;\ Options are to checkout, update, export<BR>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;
- | ex \ or take no action [skip].&nbsp;<BR>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- skip<BR>
- &nbsp; /username /u name username used to access svn if checking out.
- <BR>
- &nbsp; /cvstag /c tag&nbsp;&nbsp;&nbsp; use -r &lt;tag&gt;
- <TAG>in cvs
-command <BR>&nbsp; /svnbranch /b tag use
-/branches/&lt;tag&gt;<TAG>&nbsp;instead of /trunk.<BR>&nbsp; /svntag /t tag&nbsp;&nbsp;&nbsp; use
-/tags/&lt;tag&gt;<TAG>&nbsp;instead of /trunk.<BR>&nbsp; /debug
-/d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do&nbsp;debug make instead of
-release make. <BR>&nbsp;
-/[no]make&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-Control the make
-step. <BR>&nbsp;
-/clean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Build
-clean target. <BR>&nbsp;
-/[no]package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control the packaging step. <BR>&nbsp;
-/[no]sign&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control
-signing
-of executable&nbsp;files. <BR>&nbsp; /verbose
-/v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug mode - verbose output. <BR>&nbsp; /logfile /l path&nbsp; Where to write output.
-Default is bkw.pl.log. <BR>&nbsp;
- /nolog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Don't
- save output. </TT>
- </P>
- <P><TT>&nbsp; Other:
- <BR>
- &nbsp;&nbsp;&nbsp; NMAKE-options any options you want to pass to NMAKE, which
- can be:
- <BR>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- (note: /nologo is always used)<BR>
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NODEBUG=1</TT></P>
- <P><TT>NMAKE-options any options you want to pass to NMAKE, which can be:</TT><BR>
- <TT>(note: /nologo is always used)</TT><BR>
- <TT>[ nmake options follow ]</TT></P>
- <P><BR>
- Notes on the script steps:</P>
- <P><STRONG>Verifying the environment</STRONG>:&nbsp;
- <BR>
- The script tests for each program that it needs and warns if the program isn't
- found.</P>
- <P><STRONG>Fetching sources from repositories</STRONG>:&nbsp;
- <BR>
- If building from a source distribution kit, this section does not apply.</P>
- <P>CVSROOT and SVNURL must be specified in the configuration file.</P>
- <P>A source zip file can only be produced if checking out fresh sources from a
- repository.&nbsp;</P>
- <P>If checking out, the entire pismere directory will be deleted.&nbsp; A warning
- message requires that you confirm this action.</P>
- <P><STRONG>Building the sources:</STRONG><BR>
- /DEBUG controls whether a debug or release build is done.&nbsp; /CLEAN will
- build the CLEAN target.</P>
- <P><STRONG>Setting up the packaging environment :<BR>
- </STRONG>The pre-package steps gathers up build results and puts them in a <FONT face="Courier">
- staging</FONT> area.&nbsp;
- </P>
- <P>If /SIGN is specified, <FONT face="Courier">.exe</FONT>s, <FONT face="Courier">.dll</FONT>s
- and <FONT face="Courier">.cpl</FONT>s are signed.&nbsp; The signing command
- template is in the configuration file.</P>
- <P><STRONG>Building the installers:</STRONG><BR>
- The <FONT face="Courier">staging </FONT>area is copied into a fresh area for
- each of the installers.&nbsp; The installer results are copied back to the <FONT face="Courier">
- staging </FONT>area.</P>
- <P><STRONG>Building the rest of the components:</STRONG><BR>
- Zip files are built in temporary areas and copied to <FONT face="Courier">outdir</FONT>.&nbsp;
- The installers and assorted files are copied from <FONT face="Courier">staging</FONT>
- to <FONT face="Courier">outdir</FONT>.&nbsp; If /SIGN is specified, the
- installers will be signed.</P>
- <P>&nbsp;</P>
- <H2><A name="Details"></A>Script Internal Details</H2>
- <H3><A name="Copylists"></A>Copy Lists</H3>
- <P>CopyLists are used in many places.&nbsp;&nbsp;For example, files to be put into
- a .zip are copied to a fresh directory which is then zipped up.&nbsp; There is
- an optional Configuration section and a required Files section.&nbsp;</P>
- <P>The configuration section defines the roots of the from and to paths and can
- optionally define path substitutions.&nbsp;
- </P>
- <P>The to and from paths are forced by the script rather than being set in the
- config file.&nbsp; Comments in the copyfile xml indicate this.</P>
- <P>Lengthy copy lists can be kept in separate files and included with the Include
- directive.&nbsp; Example:</P>
- <P><TT>&lt;Include path="sdkfiles.xml" /&gt;</TT></P>
- <H3>Substitution tags</H3>
- <P>Filenames in copylists can contain variable 'tags' that are replaced before the
- file is copied.&nbsp; Some configuration files contain substitution tags which
- customize the configuration.&nbsp; The supported tags are</P>
- <P>
- <TABLE id="Table3" height="0" cellSpacing="1" cellPadding="1" border="1">
- <TR>
- <TD width="136">%VERSION_MAJOR%</TD>
- <TD height="21">KfW Version from pismere/athena/include/kerberos.ver.</TD>
- </TR>
- <TR>
- <TD width="136">%VERSION_MINOR%</TD>
- <TD height="9">KfW Version from pismere/athena/include/kerberos.ver.</TD>
- </TR>
- <TR>
- <TD width="136">%VERSION_PATCH%</TD>
- <TD height="17">KfW Version from pismere/athena/include/kerberos.ver.</TD>
- </TR>
- <TR>
- <TD width="136">%filestem%</TD>
- <TD height="17">Defined as kfw-%VERSION_MAJOR%-%VERSION_MINOR%-%VERSION_PATCH%.</TD>
- </TR>
- <TR>
- <TD width="136">%debug%</TD>
- <TD>'dbg.'&nbsp; Only substituted during a debug build.&nbsp;</TD>
- </TR>
- <TR>
- <TD width="136">%release%</TD>
- <TD>'rel.'&nbsp; Only substituted during a release build.&nbsp;
- </TD>
- </TR>
- <TR>
- <TD width="136">%bldtype%</TD>
- <TD>Always substituted, to 'dbg' or 'rel,' depending on the type of build.</TD>
- </TR>
- <TR>
- <TD width="136">%-DEBUG%</TD>
- <TD>'-DEBUG' during a debug build; otherwise empty.</TD>
- </TR>
- <TR>
- <TD width="136">%BUILDDIR%</TD>
- <TD>SRCDIR\pismere.&nbsp; Used in site-local installer configuration files.</TD>
- </TR>
- <TR>
- <TD width="136">%TARGETDIR%</TD>
- <TD>SRCDIR\pismere\staging.&nbsp; Used in site-local installer configuration files.</TD>
- </TR>
- <TR>
- <TD width="136">%CONFIGDIR-WIX%</TD>
- <TD>SRCDIR\pismere\staging\sample.&nbsp; Used in site-local installer configuration
- files.</TD>
- </TR>
- <TR>
- <TD width="136">%CONFIGDIR-NSI%</TD>
- <TD>SRCDIR\pismere\staging.&nbsp; Used in site-local installer configuration files.</TD>
- </TR>
- </TABLE>
- </P>
- <P>The overall build configuration specifies a debug or release build.&nbsp; Debug
- and release results are put in different places.&nbsp; Files whose location
- depend on the build type can use %bldtype% in their names.&nbsp; The script
- will substitute %bldtype% with either dbg or rel, depending on the build
- type.&nbsp;<STRONG></P>
- </DIV>
- <DIV style="MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px" align="left">
- <H3>Example</H3>
- </STRONG>
- <P>Here is&nbsp;a copylist entry.&nbsp; Each segment of the file's path that comes
- from a different place is in a different color.</P>
- <P>Release build.&nbsp; Config file:
- </P>
- <P>
- <TABLE id="Table2" cellSpacing="1" cellPadding="1" border="0">
- <TR>
- <TD colSpan="4"><FONT face="courier">&lt;BKW_Config&gt;</FONT></TD>
- </TR>
- <TR>
- <TD width="23"></TD>
- <TD colSpan="3"><FONT face="courier">&lt;Config&gt;</FONT></TD>
- </TR>
- <TR>
- <TD width="23"></TD>
- <TD width="20"></TD>
- <TD><FONT face="courier">&lt;src&nbsp;value ="<FONT color="#000099">C:\bkw"</FONT> /&gt;</FONT>
- </TD>
- </TR>
- </TABLE>
- </P>
- <P>Copylist comments:</P>
- <P><tt>&lt;!-- File from paths are relative to
- <src>\<FONT color="#ff00cc">pismere\athena</FONT> --&gt; <BR>&lt;!-- File to paths are relative to <src>\<FONT color="#00ff00">
- pismere\staging</FONT>
- --&gt; </tt>
- </P>
- <P>When the script processes this copylist, it will force the from and to paths as
- indicated.</P>
- <P>This line
- </P>
- <P><tt>&lt;File name="<FONT color="#00ffff">comerr32.dll</FONT>" from="<FONT color="#ff9933">..\target\bin\i386</FONT>\<FONT color="#ff0000">%bldtype%</FONT>\"
- to="\<FONT color="#9966ff">bin\i386</FONT>" /&gt;</tt></P>
- <P>will result in <FONT face="Courier"><FONT color="#000099">C:\bkw</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>
- <P>being copied to <FONT face="Courier"><FONT color="#000099">C:\bkw</FONT>\<FONT color="#00ff00">pismere\staging</FONT>\<FONT color="#9966ff">bin\i386</FONT>\<FONT color="#00ffff">comerr32.dll</FONT></FONT>.</P>
- <P>Other possible attributes in a copylist entry:</P>
- <UL>
- <LI>
- <TT>notrequired</TT>
- <LI>
- <TT>newname="filename"</TT>
- </LI>
- </UL>
- <P>By default, copylist entries are required and the script will die if they aren't
- present. To ignore missing files, add <TT>notrequired</TT>.</P>
- <P>To rename the file, set the <TT>newname</TT> attribute.</P>
- <H2><FONT face="Verdana"><A name="Remainingwork"></A>Remaining Work / Bug List</FONT></H2>
- <P>Implement RETAIL, OFFICIAL, PRERELEASE, PRIVATE, SPECIAL.</P>
- <P>Figure out what MIT_ONLY, BUILD_KFW, DEBUG_SYMBOL should be.</P>
- <P>TARGET, APPVER.</P>
- <P>NODEBUG=1.&nbsp; Set if release build.</P>
- <H2><FONT face="Verdana"><A name="Troubleshooting"></A>Troubleshooting</FONT>
- </H2>
- <P><STRONG>Can't clean directory; can't delete file or directory</STRONG><BR>
- Make sure a file in the named directory isn't open in another application.</P>
- <P><STRONG>Can't find kerberos.ver</STRONG><BR>
- You skipped the repository step and are trying to build in an empty directory.</P>
- </DIV>
- </BODY>
-</HTML>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
+<!-- saved from url=(0066)https://confab.mit.edu/confluence/display/ISDA/lore-bkw-automation --><HTML><HEAD>
+ <TITLE>lore-bkw-automation - Confluence</TITLE>
+ <META http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <META http-equiv="Pragma" content="no-cache">
+ <META http-equiv="Expires" content="-1">
+ <LINK href="css/main-action.css" type="text/css" rel="stylesheet">
+ <LINK href="css\main-action(1).css" type="text/css" rel="stylesheet">
+ <META content="MSHTML 6.00.2900.3059" name="GENERATOR"></HEAD>
+ <BODY>
+ <DIV style="MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px" align="left">
+ <DIV class="wiki-content" style="MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px" align="left">The
+ Kerberos for Windows (KfW) build is automated.&nbsp; A script will fetch the
+ sources from a repository and then build, sign and package all the KfW
+ distribution components.
+ </DIV>
+ <DIV class="wiki-content" style="MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px" align="left">This
+ description consists of
+ </DIV>
+ <UL>
+ <LI>
+ <A href="#Environment">Setting up the build environment</A>
+ <LI>
+ <A href="#Running">Running the script</A>
+ <LI>
+ <A href="Details">Script internal details</A>
+ <LI>
+ <A href="#Remainingwork">Remaining work / bug list</A>
+ <LI>
+ <A href="#Troubleshooting">Troubleshooting</A>
+ </LI>
+ </UL>
+ <H2>Setting Up the Build Environment</H2>
+ <P>KfW is built on a Windows PC, in the default Windows shell (cmd.exe). These
+ components must be installed:</P>
+ <UL>
+ <LI>
+ Visual Studio 2003<BR>
+ Versions of Visual Studio before or after 2003 are not supported.
+ <LI>
+ A recent release of the
+ <SPAN class="nobr">
+ <A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&amp;displaylang=en">
+ Microsoft Platform SDK</A></SPAN>
+ &nbsp;
+ <LI>
+ <SPAN class="nobr">
+ <A title="Visit page outside Confluence" href="http://www.activestate.com" rel="nofollow">
+ ActiveState Perl 5.8 or more recent</A></SPAN><BR>
+ Build 631 is known to work.
+ <LI>
+ <SPAN class="nobr">
+ <A title="Visit page outside Confluence" href="http://www.doxygen.org/" rel="nofollow">
+ Doxygen</A></SPAN>
+ <LI>
+ sed, awk, cat, rm and find<BR>
+ These can be obtained from the
+ <SPAN class="nobr">
+ <A title="Visit page outside Confluence" href="http://cygwin.com/" rel="nofollow">Cygwin
+ distribution</A></SPAN>.
+ <BR clear="all">
+ <BR clear="all">
+ find must be in C:\tools\cygwin\bin, so install Cygwin in C:\tools\cygwin.
+ <BR>
+ <BR>
+ The cygwin awk is a link and the MS shell doesn't deal well with that.&nbsp; <TT>C</TT>
+ opy <TT>c:\tools\cygwin\bin\gawk</TT> to <TT>c:\tools\cygwin\bin\awk</TT>.
+ <LI>
+ <SPAN class="nobr">
+ <A title="Visit page outside Confluence" href="http://sourceforge.net/project/showfiles.php?group_id=105970"
+ rel="nofollow">Wix</A></SPAN>
+ <LI>
+ <SPAN class="nobr">
+ <A title="Visit page outside Confluence" href="http://nsis.sourceforge.net" rel="nofollow">
+ NSIS</A></SPAN></LI></UL>
+ <H3>Environment variables</H3>
+ <P>
+ All the components above must be in PATH. Installing ActivePerl puts perl in
+ the PATH. Doxygen, Cygwin, hhc, wix and&nbsp;nsis need to be added.</P>
+ <P>perl must be installed so that .pl files are automatically executed with perl.
+ The ActivePerl installation will do this for you.</P>
+ <P>In the INCLUDE path, the Microsoft Platform SDK must come before the Microsoft
+ Visual C++ include files. Using a Platform SDK Build Environment window will
+ set this up the right way.&nbsp;</P>
+ <P>If you make your path modifications permanent via Control Panel / System /
+ Advanced / Environment Variables:&nbsp; If you use a Platform SDK Build
+ Environment window, it appears that you need to put your PATH components in the
+ System PATH, not the User PATH.</P>
+ <P>Visual Studio installs hhc in C:\Program Files\HTML Help Workshop.</P>
+ <P>nmake must be in PATH. If you use a Platform SDK build environment window, it is
+ already done for you.</P>
+ <h2>Running the Script<A name="Running"></A></h2>
+ <P>
+ The build is a perl script controlled by command line switches and an XML
+ configuration file. The config file is required. Settings in the config file
+ can be overridden by optional command line switches.&nbsp;</P>
+ <P>There are options for controlling most steps of the build process.&nbsp; The
+ steps are</P>
+ <UL>
+ <LI>
+ Verifying the environment
+ <LI>
+ Fetching the sources from repositories
+ <LI>
+ Building the sources
+ <LI>
+ Setting up the packaging environment
+ <LI>
+ Building the installers
+ <LI>
+ Building the rest of the components
+ </LI>
+ </UL>
+ <P>The usage message shows the switches that control these steps:</P>
+ <P><TT>C:\Projects\KfW&gt;perl bkw.pl /?</TT><BR>
+ <TT>Usage: bkw.pl [options] NMAKE-options</TT></P>
+ <P><TT>&nbsp; Options are case insensitive. </TT>
+ </P>
+ <P><TT>&nbsp; Options:&nbsp;
+ <BR>
+ </TT><TT>&nbsp; /help /?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ usage information (what you now see).
+ <BR>
+ &nbsp; /config /f path&nbsp;&nbsp; Path to config file. Default is
+ bkwconfig.xml.
+ <BR>
+ &nbsp; /src /s dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Source directory to use.
+ Should contain
+ <BR>
+ &nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ pismere/athena. If cvstag or svntag is&nbsp;null,
+ <BR>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ the directory should be prepopulated.
+ <BR>
+ &nbsp; /out /o dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Directory to be created
+ where build results will go
+ <BR>
+ </TT><TT>&nbsp; /repository checkout | co \ What repository action to take.
+ <BR>
+ &nbsp;&nbsp;&nbsp; &nbsp;/r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ update&nbsp;&nbsp; | up&nbsp;\ Options are to checkout, update, export<BR>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;export&nbsp;&nbsp;
+ | ex \ or take no action [skip].&nbsp;<BR>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ skip<BR>
+ &nbsp; /username /u name username used to access svn if checking out.
+ <BR>
+ &nbsp; /cvstag /c tag&nbsp;&nbsp;&nbsp; use -r &lt;tag&gt;
+ <TAG>in cvs
+command <BR>&nbsp; /svnbranch /b tag use
+/branches/&lt;tag&gt;<TAG>&nbsp;instead of /trunk.<BR>&nbsp; /svntag /t tag&nbsp;&nbsp;&nbsp; use
+/tags/&lt;tag&gt;<TAG>&nbsp;instead of /trunk.<BR>&nbsp; /debug
+/d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do&nbsp;debug make instead of
+release make. <BR>&nbsp;
+/[no]make&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+Control the make
+step. <BR>&nbsp;
+/clean&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Build
+clean target. <BR>&nbsp;
+/[no]package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control the packaging step. <BR>&nbsp;
+/[no]sign&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control
+signing
+of executable&nbsp;files. <BR>&nbsp; /verbose
+/v&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Debug mode - verbose output. <BR>&nbsp; /logfile /l path&nbsp; Where to write output.
+Default is bkw.pl.log. <BR>&nbsp;
+ /nolog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Don't
+ save output. </TT>
+ </P>
+ <P><TT>&nbsp; Other:
+ <BR>
+ &nbsp;&nbsp;&nbsp; NMAKE-options any options you want to pass to NMAKE, which
+ can be:
+ <BR>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ (note: /nologo is always used)<BR>
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NODEBUG=1</TT></P>
+ <P><TT>NMAKE-options any options you want to pass to NMAKE, which can be:</TT><BR>
+ <TT>(note: /nologo is always used)</TT><BR>
+ <TT>[ nmake options follow ]</TT></P>
+ <P><BR>
+ Notes on the script steps:</P>
+ <P><STRONG>Verifying the environment</STRONG>:&nbsp;
+ <BR>
+ The script tests for each program that it needs and warns if the program isn't
+ found.</P>
+ <P><STRONG>Fetching sources from repositories</STRONG>:&nbsp;
+ <BR>
+ If building from a source distribution kit, this section does not apply.</P>
+ <P>CVSROOT and SVNURL must be specified in the configuration file.</P>
+ <P>A source zip file can only be produced if checking out fresh sources from a
+ repository.&nbsp;</P>
+ <P>If checking out, the entire pismere directory will be deleted.&nbsp; A warning
+ message requires that you confirm this action.</P>
+ <P><STRONG>Building the sources:</STRONG><BR>
+ /DEBUG controls whether a debug or release build is done.&nbsp; /CLEAN will
+ build the CLEAN target.</P>
+ <P><STRONG>Setting up the packaging environment :<BR>
+ </STRONG>The pre-package steps gathers up build results and puts them in a <FONT face="Courier">
+ staging</FONT> area.&nbsp;
+ </P>
+ <P>If /SIGN is specified, <FONT face="Courier">.exe</FONT>s, <FONT face="Courier">.dll</FONT>s
+ and <FONT face="Courier">.cpl</FONT>s are signed.&nbsp; The signing command
+ template is in the configuration file.</P>
+ <P><STRONG>Building the installers:</STRONG><BR>
+ The <FONT face="Courier">staging </FONT>area is copied into a fresh area for
+ each of the installers.&nbsp; The installer results are copied back to the <FONT face="Courier">
+ staging </FONT>area.</P>
+ <P><STRONG>Building the rest of the components:</STRONG><BR>
+ Zip files are built in temporary areas and copied to <FONT face="Courier">outdir</FONT>.&nbsp;
+ The installers and assorted files are copied from <FONT face="Courier">staging</FONT>
+ to <FONT face="Courier">outdir</FONT>.&nbsp; If /SIGN is specified, the
+ installers will be signed.</P>
+ <P>&nbsp;</P>
+ <H2><A name="Details"></A>Script Internal Details</H2>
+ <H3><A name="Copylists"></A>Copy Lists</H3>
+ <P>CopyLists are used in many places.&nbsp;&nbsp;For example, files to be put into
+ a .zip are copied to a fresh directory which is then zipped up.&nbsp; There is
+ an optional Configuration section and a required Files section.&nbsp;</P>
+ <P>The configuration section defines the roots of the from and to paths and can
+ optionally define path substitutions.&nbsp;
+ </P>
+ <P>The to and from paths are forced by the script rather than being set in the
+ config file.&nbsp; Comments in the copyfile xml indicate this.</P>
+ <P>Lengthy copy lists can be kept in separate files and included with the Include
+ directive.&nbsp; Example:</P>
+ <P><TT>&lt;Include path="sdkfiles.xml" /&gt;</TT></P>
+ <H3>Substitution tags</H3>
+ <P>Filenames in copylists can contain variable 'tags' that are replaced before the
+ file is copied.&nbsp; Some configuration files contain substitution tags which
+ customize the configuration.&nbsp; The supported tags are</P>
+ <P>
+ <TABLE id="Table3" height="0" cellSpacing="1" cellPadding="1" border="1">
+ <TR>
+ <TD width="136">%VERSION_MAJOR%</TD>
+ <TD height="21">KfW Version from pismere/athena/include/kerberos.ver.</TD>
+ </TR>
+ <TR>
+ <TD width="136">%VERSION_MINOR%</TD>
+ <TD height="9">KfW Version from pismere/athena/include/kerberos.ver.</TD>
+ </TR>
+ <TR>
+ <TD width="136">%VERSION_PATCH%</TD>
+ <TD height="17">KfW Version from pismere/athena/include/kerberos.ver.</TD>
+ </TR>
+ <TR>
+ <TD width="136">%filestem%</TD>
+ <TD height="17">Defined as kfw-%VERSION_MAJOR%-%VERSION_MINOR%-%VERSION_PATCH%.</TD>
+ </TR>
+ <TR>
+ <TD width="136">%debug%</TD>
+ <TD>'dbg.'&nbsp; Only substituted during a debug build.&nbsp;</TD>
+ </TR>
+ <TR>
+ <TD width="136">%release%</TD>
+ <TD>'rel.'&nbsp; Only substituted during a release build.&nbsp;
+ </TD>
+ </TR>
+ <TR>
+ <TD width="136">%bldtype%</TD>
+ <TD>Always substituted, to 'dbg' or 'rel,' depending on the type of build.</TD>
+ </TR>
+ <TR>
+ <TD width="136">%-DEBUG%</TD>
+ <TD>'-DEBUG' during a debug build; otherwise empty.</TD>
+ </TR>
+ <TR>
+ <TD width="136">%BUILDDIR%</TD>
+ <TD>SRCDIR\pismere.&nbsp; Used in site-local installer configuration files.</TD>
+ </TR>
+ <TR>
+ <TD width="136">%TARGETDIR%</TD>
+ <TD>SRCDIR\pismere\staging.&nbsp; Used in site-local installer configuration files.</TD>
+ </TR>
+ <TR>
+ <TD width="136">%CONFIGDIR-WIX%</TD>
+ <TD>SRCDIR\pismere\staging\sample.&nbsp; Used in site-local installer configuration
+ files.</TD>
+ </TR>
+ <TR>
+ <TD width="136">%CONFIGDIR-NSI%</TD>
+ <TD>SRCDIR\pismere\staging.&nbsp; Used in site-local installer configuration files.</TD>
+ </TR>
+ </TABLE>
+ </P>
+ <P>The overall build configuration specifies a debug or release build.&nbsp; Debug
+ and release results are put in different places.&nbsp; Files whose location
+ depend on the build type can use %bldtype% in their names.&nbsp; The script
+ will substitute %bldtype% with either dbg or rel, depending on the build
+ type.&nbsp;<STRONG></P>
+ </DIV>
+ <DIV style="MARGIN-LEFT: 10px; MARGIN-RIGHT: 10px" align="left">
+ <H3>Example</H3>
+ </STRONG>
+ <P>Here is&nbsp;a copylist entry.&nbsp; Each segment of the file's path that comes
+ from a different place is in a different color.</P>
+ <P>Release build.&nbsp; Config file:
+ </P>
+ <P>
+ <TABLE id="Table2" cellSpacing="1" cellPadding="1" border="0">
+ <TR>
+ <TD colSpan="4"><FONT face="courier">&lt;BKW_Config&gt;</FONT></TD>
+ </TR>
+ <TR>
+ <TD width="23"></TD>
+ <TD colSpan="3"><FONT face="courier">&lt;Config&gt;</FONT></TD>
+ </TR>
+ <TR>
+ <TD width="23"></TD>
+ <TD width="20"></TD>
+ <TD><FONT face="courier">&lt;src&nbsp;value ="<FONT color="#000099">C:\bkw"</FONT> /&gt;</FONT>
+ </TD>
+ </TR>
+ </TABLE>
+ </P>
+ <P>Copylist comments:</P>
+ <P><tt>&lt;!-- File from paths are relative to
+ <src>\<FONT color="#ff00cc">pismere\athena</FONT> --&gt; <BR>&lt;!-- File to paths are relative to <src>\<FONT color="#00ff00">
+ pismere\staging</FONT>
+ --&gt; </tt>
+ </P>
+ <P>When the script processes this copylist, it will force the from and to paths as
+ indicated.</P>
+ <P>This line
+ </P>
+ <P><tt>&lt;File name="<FONT color="#00ffff">comerr32.dll</FONT>" from="<FONT color="#ff9933">..\target\bin\i386</FONT>\<FONT color="#ff0000">%bldtype%</FONT>\"
+ to="\<FONT color="#9966ff">bin\i386</FONT>" /&gt;</tt></P>
+ <P>will result in <FONT face="Courier"><FONT color="#000099">C:\bkw</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>
+ <P>being copied to <FONT face="Courier"><FONT color="#000099">C:\bkw</FONT>\<FONT color="#00ff00">pismere\staging</FONT>\<FONT color="#9966ff">bin\i386</FONT>\<FONT color="#00ffff">comerr32.dll</FONT></FONT>.</P>
+ <P>Other possible attributes in a copylist entry:</P>
+ <UL>
+ <LI>
+ <TT>notrequired</TT>
+ <LI>
+ <TT>newname="filename"</TT>
+ </LI>
+ </UL>
+ <P>By default, copylist entries are required and the script will die if they aren't
+ present. To ignore missing files, add <TT>notrequired</TT>.</P>
+ <P>To rename the file, set the <TT>newname</TT> attribute.</P>
+ <H2><FONT face="Verdana"><A name="Remainingwork"></A>Remaining Work / Bug List</FONT></H2>
+ <P>Implement RETAIL, OFFICIAL, PRERELEASE, PRIVATE, SPECIAL.</P>
+ <P>Figure out what MIT_ONLY, BUILD_KFW, DEBUG_SYMBOL should be.</P>
+ <P>TARGET, APPVER.</P>
+ <P>NODEBUG=1.&nbsp; Set if release build.</P>
+ <H2><FONT face="Verdana"><A name="Troubleshooting"></A>Troubleshooting</FONT>
+ </H2>
+ <P><STRONG>Can't clean directory; can't delete file or directory</STRONG><BR>
+ Make sure a file in the named directory isn't open in another application.</P>
+ <P><STRONG>Can't find kerberos.ver</STRONG><BR>
+ You skipped the repository step and are trying to build in an empty directory.</P>
+ </DIV>
+ </BODY>
+</HTML>
diff --git a/src/windows/build/bkw.pl b/src/windows/build/bkw.pl
index 9321bf69bd..9984a33437 100644
--- a/src/windows/build/bkw.pl
+++ b/src/windows/build/bkw.pl
@@ -1,690 +1,690 @@
-#!perl -w
-
-#use strict;
-use FindBin;
-use File::Spec;
-use File::Basename;
-use lib "$FindBin::Bin/build/lib";
-use Getopt::Long;
-use Cwd;
-use XML::Simple;
-use Data::Dumper;
-use Archive::Zip;
-use Logger;
-require "copyfiles.pl";
-require "prunefiles.pl";
-require "signfiles.pl";
-require "zipXML.pl";
-
-my $BAIL;
-$0 = fileparse($0);
-my $OPT = {foo => 'bar'};
-my $MAKE = 'NMAKE';
-our $config;
-
-sub get_info {
- my $cmd = shift || die;
- my $which = $^X.' which.pl';
- my $full = `$which $cmd`;
- return 0 if ($? / 256);
- chomp($full);
- $full = "\"".$full."\"";
- return { cmd => $cmd, full => $full};
- }
-
-sub usage {
- print <<USAGE;
-Usage: $0 [options] NMAKE-options
-
- Options are case insensitive.
-
- Options:
- /help /? usage information (what you now see).
- /config /f path Path to config file. Default is bkwconfig.xml.
- /srcdir /s dir Source directory to use. Should contain
- pismere/athena. If cvstag or svntag is null,
- the directory should be prepopulated.
- /outdir /o dir Directory to be created where build results will go
- /repository checkout | co \\ What repository action to take.
- /r update | up \\ Options are to checkout, update, export
- export | ex \\ or skip (take no action).
- skip
- /username /u name username used to access svn if checking out.
- /cvstag /c tag use -r <tag> in cvs command
- /svnbranch /b tag use /branches/<tag> instead of /trunk.
- /svntag /t tag use /tags/<tag> instead of /trunk.
- /debug /d Do debug make instead of release make.
- /[no]make Control the make step.
- /clean Build clean target.
- /[no]package Control the packaging step.
- /[no]sign Control signing of executable files.
- /verbose /v Debug mode - verbose output.
- /logfile /l path Where to write output. Default is bkw.pl.log.
- /nolog Don't save output.
- Other:
- NMAKE-options any options you want to pass to NMAKE, which can be:
- (note: /nologo is always used)
-
-USAGE
- system("$MAKE /?");
- }
-
-sub handler {
- my $sig = shift;
- my $bailmsg = "Bailing out due to SIG$sig!\n";
- my $warnmsg = <<EOH;
-*********************************
-* FUTURE BUILDS MAY FAIL UNLESS *
-* BUILD DIRECTORIES ARE CLEANED *
-*********************************
-EOH
- $BAIL = $bailmsg.$warnmsg;
-}
-
-sub main {
- local $cmdline = "bkw.pl";
- foreach $arg (@ARGV) {$cmdline .= " $arg";}
-
- Getopt::Long::Configure('no_bundling', 'no_auto_abbrev',
- 'no_getopt_compat', 'require_order',
- 'ignore_case', 'pass_through',
- 'prefix_pattern=(--|-|\+|\/)',
- );
-
- local @goargs = ('config|f=s');
- if (!GetOptions($OPT, @goargs)) {
- Usage();
- exit(0);
- }
-
- if (! exists $OPT->{config}) {$OPT->{config} = "bkwconfig.xml";}
- my $configfile = $OPT->{config};
- print "Info -- Reading configuration from $configfile.\n";
- my $xml = new XML::Simple();
- $config = $xml->XMLin($configfile); ## Read in configuration file.
-
- # Set up convenience variables:
- local $odr = $config->{Config}; ## Options, directories, repository, environment.
-
- # Build argument description from Config section of the XML,
- # to parse the rest of the arguments:
- local @xmlargs;
- while (($sw, $val) = each %$odr) {
- local $arg = $sw;
- if (exists $val->{abbr}) {$arg .= "|$val->{abbr}";}
- if (exists $val->{value}) { ## Can't do both negations and string values.
- $arg .= ":s";
- }
- else {
- if (! ($val->{def} =~ /A/)) {$arg .= "!";}
- }
- push @xmlargs, $arg;
- }
-
- if (!GetOptions($OPT, @xmlargs)) {$OPT->{help} = 1;}
-
- if ( $OPT->{help} ) {
- usage();
- exit(0);
- }
-
- delete $OPT->{foo};
-
-##++ Validate required conditions:
-
- # List of programs which must be in PATH:
- my @required_list = ('sed', 'awk', 'which', 'cat', 'rm', 'cvs', 'svn', 'doxygen',
- 'hhc', 'candle', 'light', 'makensis', 'nmake', 'plink', 'filever');
- my $requirements_met = 1;
- my $first_missing = 0;
- my $error_list = "";
- foreach my $required (@required_list) {
- if (!get_info($required)) {
- $requirements_met = 0;
- if (!$first_missing) {
- $first_missing = 1;
- $error_list = "Fatal -- Environment problem! The following program(s) are not in PATH:\n";
- }
- $error_list .= "$required\n";
- }
- }
- if (!$requirements_met) {
- print $error_list;
- print "Info -- Update PATH or install the programs and try again.\n";
- exit(0);
- }
-
-##-- Validate required conditions.
-
- use Time::gmtime;
- $ENV{DATE} = gmctime()." GMT";
- our $originalDir = `cd`;
- $originalDir =~ s/\n//g;
-
-##++ Assemble configuration from config file and command line:
-
- my $bOutputCleaned = 0;
-
-#while ($v = each %$OPT) {print "$v: $OPT->{$v}\n";}
-
- # Scan the configuration for switch definitions:
- while (($sw, $val) = each %$odr) {
- next if (! exists $val->{def}); ## ?? Should always exist.
-
- # Set/clear environment variables:
- if ($val->{env}) {
- if ($val->{def}) {$ENV{$sw} = (exists $val->{value}) ? $val->{value} : 1; }
- else {delete $ENV{$sw}; }
- }
-
- # If the switch is in the command line, override the stored value:
- if (exists $OPT->{$sw}) {
- if (exists $val->{value}) {
- $val->{value} = $OPT->{$sw};
- $val->{def} = 1;
- }
- else {
- $val->{def} = $OPT->{$sw}; ## If no<switch>, value will be zero.
- }
- }
- # If the switch can be negated, test that, too:
- if ( ! ($val->{def} =~ /A/)) {
- local $nosw = "no".$sw;
- if (exists $OPT->{$nosw}) {
- $val->{def} = 0;
- }
- }
-
- # For any switch definition with fixed values ("options"), validate:
- if (exists $val->{options}) {
- local $bValid = 0;
- # options can be like value1|syn1 value2|syn2|syn3
- foreach $option (split(/ /, $val->{options})) {
- local $bFirst = 1;
- local $sFirst;
- foreach $opt (split(/\|/, $option)) {
- # opt will be like value2, syn2, syn3
- if ($bFirst) {
- $sFirst = $opt; ## Remember the full name of the option.
- $bFirst = 0;
- }
- if ($val->{value} =~ /$opt/i) {
- $val->{value} = $sFirst; ## Save the full name.
- $bValid = 1;
- }
- }
- }
- if (! $bValid) {
- print "Fatal -- invalid $sw value $val->{value}. Possible values are $val->{options}.\n";
- usage();
- die;
- }
- }
- }
-
- # Set up convenience variables:
- our $verbose = $odr->{verbose}->{def};
- our $vverbose = $odr->{vverbose}->{def};
- our $clean = $clean->{clean}->{def};
- local $src = $odr->{src}->{value};
- local $out = $odr->{out}->{value};
-
- if ($clean && $odr->{package}->{def}) {
- print "Info -- /clean forces /nopackage.\n";
- $odr->{package}->{def} = 0;
- }
-
- if ($vverbose) {print "Debug -- Config: ".Dumper($config);}
-
- # Test the unix find command:
- # List of directories where it might be:
- my @find_dirs = ('c:\\cygwin\\bin', 'c:\\tools\\cygwin\\bin');
- if (exists $odr->{unixfind}->{value}) { ## Was an additional place to look specified?
- push (@find_dirs, $odr->{unixfind}->{value});
- }
- my $bFindFound = 0;
- foreach my $dir (@find_dirs) {
- if (-d $dir) {
- local $savedPATH = $ENV{PATH};
- $ENV{PATH} = $dir.";".$savedPATH;
- if (-e "a.tmp") {!system("rm a.tmp") or die "Fatal -- Couldn't clean temporary file a.tmp.";}
- !system("find . -maxdepth 0 -name a.tmp > b.tmp 2>&1") or die "Fatal -- find test failed.";
- local $filesize = -s "b.tmp";
- $ENV{PATH} = $savedPATH;
- if ($filesize <= 0) {
- $bFindFound = 1;
- $odr->{unixfind}->{value} = $dir;
- last;
- }
- }
- }
- if (! $bFindFound) {
- print "Fatal -- unix find command not found in \n";
- map {print " $_ "} @find_dirs;
- print "\n";
- die;
- }
-
- # Don't allow /svntag and /svnbranch simultaneously:
- if ( (length $odr->{svntag}->{value} > 0) &&
- (length $odr->{svnbranch}->{value} > 0) ) {
- die "Fatal -- Can't specify both /SVNTAG and /SVNBRANCH.";
- }
-
- # /logfile and /nolog interact:
- if ($odr->{nolog}->{def}) {$odr->{logfile}->{def} = 0;}
-
-##-- Assemble configuration from config file and command line.
-
- local $rverb = $odr->{repository}->{value};
- if ( (($rverb =~ /checkout/) || ($rverb =~ /export/)) && $clean) {
- print "Warning -- Because sources are being checked out, make clean will not be run.\n";
- $clean = $odr->{clean}->{def} = 0;
- }
-
- my $wd = $src."\\pismere";
-
- if (! ($rverb =~ /skip/)) {
- local $len = 0;
- if (exists $odr->{username}->{value}) {
- $len = length $odr->{username}->{value};
- }
- if ($len < 1) {
- die "Fatal -- you won't get far accessing the repository without specifying a username.";
- }
- }
-
- # (------------------------------------------------)
- if ( (-d $wd) && ( ($rverb =~ /export/) || ($rverb =~ /checkout/) ) ) {
- print "\n\nHEADS UP!!\n\n";
- print "/REPOSITORY ".uc($rverb)." will cause everything under $wd to be deleted.\n";
- print "If this is not what you intended, here's your chance to bail out!\n\n\n";
- print "Are you sure you want to remove everything under $wd? ";
- my $char = getc;
- if (! ($char =~ /y/i)) {die "Info -- operation aborted by user."}
- !system("rm -rf $wd/*") or die "Fatal -- Couldn't clean $wd.";
- !system("rmdir $wd") or die "Fatal -- Couldn't remove $wd.";
- }
-
-# Begin logging:
- my $l;
- if ($odr->{logfile}->{def}) {
- print "Info -- logging to $odr->{logfile}->{value}.\n";
- $l = new Logger $odr->{logfile}->{value};
- $l->start;
- $l->no_die_handler; ## Needed so XML::Simple won't throw exceptions.
- }
-
- print "Executing $cmdline\n";
- local $argvsize = @ARGV;
- if ($argvsize > 0) {
- print "\nArguments for NMAKE: ";
- map {print " $_ "} @ARGV;
- print "\n";
- }
-
- print "Info -- Using unix find in $odr->{unixfind}->{value}\n" if ($verbose);
-
-##++ Begin repository action:
- if ($rverb =~ /skip/) {print "Info -- *** Skipping repository access.\n" if ($verbose);}
- else {
- if ($verbose) {print "Info -- *** Begin fetching sources.\n";}
- local $cvspath = "$src";
- if (! -d $cvspath) { ## xcopy will create the entire path for us.
- !system("echo foo > a.tmp") or die "Fatal -- Couldn't create temporary file in ".`cd`;
- !system("echo F | xcopy a.tmp $cvspath\\a.tmp") or die "Fatal -- Couldn't xcopy to $cvspath.";
- !system("rm a.tmp") or die "Fatal -- Couldn't remove temporary file.";
- !system("rm $cvspath\\a.tmp") or die "Fatal -- Couldn't remove temporary file.";
- }
-
- # Set up cvs environment variables:
- $ENV{CVSROOT} = $odr->{CVSROOT}->{value};
- local $krb5dir = "$wd\\athena\\auth\\krb5";
-
- local $cvscmdroot = "cvs $rverb";
- if (length $odr->{cvstag}->{value} > 0) {
- $cvscmdroot .= " -r $odr->{cvstag}->{value}";
- }
-
- if (($rverb =~ /checkout/) || ($rverb =~ /export/)) {
- chdir($src) or die "Fatal -- couldn't chdir to $src\n";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- my @cvsmodules = (
- 'krb',
- 'pismere/athena/util/lib/delaydlls',
- 'pismere/athena/util/lib/getopt',
- 'pismere/athena/util/guiwrap'
- );
- foreach my $module (@cvsmodules) {
- local $cvscmd = $cvscmdroot." ".$module;
- if ($verbose) {print "Info -- cvs command: $cvscmd\n";}
- !system("$cvscmd") or die "Fatal -- command \"$cvscmd\" failed; return code $?\n";
- }
- }
- else { ## Update.
- chdir($wd) or die "Fatal -- couldn't chdir to $wd\n";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- if ($verbose) {print "Info -- cvs command: $cvscmdroot\n";}
- !system($cvscmdroot) or die "Fatal -- command \"$cvscmdroot\" failed; return code $?\n";
- }
-
- # Set up svn environment variable:
- $ENV{SVN_SSH} = "plink.exe";
- # If the directory structure doesn't exist, many cd commands will fail.
- if (! -d $krb5dir) { ## xcopy will create the entire path for us.
- !system("echo foo > a.tmp") or die "Fatal -- Couldn't create temporary file in ".`cd`;
- !system("echo F | xcopy a.tmp $krb5dir\\a.tmp") or die "Fatal -- Couldn't xcopy to $krb5dir.";
- !system("rm a.tmp") or die "Fatal -- Couldn't remove temporary file.";
- !system("rm $krb5dir\\a.tmp") or die "Fatal -- Couldn't remove temporary file.";
- }
-
- chdir($krb5dir) or die "Fatal -- Couldn't chdir to $krb5dir";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- my $svncmd = "svn $rverb ";
- if (($rverb =~ /checkout/) || ($rverb =~ /export/)) { # Append the rest of the checkout/export command:
- chdir("..");
- if ($rverb =~ /export/) {
- ## svn export will fail if the destination directory exists
- rmdir "krb5";
- }
- $svncmd .= "svn+ssh://".$odr->{username}->{value}."@".$odr->{SVNURL}->{value}."/krb5/";
- if (length $odr->{svntag}->{value} > 0) {
- $svncmd .= "tags/$odr->{svntag}->{value}";
- }
- elsif (length $odr->{svnbranch}->{value} > 0) {
- $svncmd .= "branches/$odr->{svnbranch}->{value}";
- }
- else {
- $svncmd .= "trunk";
- }
-
- $svncmd .= " krb5";
-
- }
- if ($verbose) {print "Info -- svn command: $svncmd\n";}
- !system($svncmd) or die "Fatal -- command \"$svncmd\" failed; return code $?\n";
- if ($verbose) {print "Info -- *** End fetching sources.\n";}
- }
-##-- End repository action.
-
- ##++ Read in the version information to be able to update the
- # site-local files in the install build areas.
- # ** Do this now (after repository update and before first zip)
- # because making zip files requires some configuration data be set up.
- local $version_path = $config->{Stages}->{Package}->{Config}->{Paths}->{Versions}->{path};
- open(DAT, "$src/$version_path") or die "Could not open $version_path.";
- @raw = <DAT>;
- close DAT;
- foreach $line (@raw) {
- chomp $line;
- if ($line =~ /#define/) { # Process #define lines:
- $line =~ s/#define//; # Remove #define token
- $line =~ s/^\s+//; # and leading & trailing whitespace
- $line =~ s/\s+$//;
- local @qr = split("\"", $line); # Try splitting with quotes
- if (exists $qr[1]) {
- $qr[0] =~ s/^\s+//; # Clean up whitespace
- $qr[0] =~ s/\s+$//;
- $config->{Versions}->{$qr[0]} = $qr[1]; # Save string
- }
- else { # No quotes, so
- local @ar = split(" ", $line); # split with space
- $ar[0] =~ s/^\s+//; # Clean up whitespace
- $ar[0] =~ s/\s+$//;
- $config->{Versions}->{$ar[0]} = $ar[1]; # and save numeric value
- }
- }
- }
-
- # Check that the versions we will need for site-local have been defined:
- my @required_versions = ('VER_PROD_MAJOR', 'VER_PROD_MINOR', 'VER_PROD_REV',
- 'VER_PROD_MAJOR_STR', 'VER_PROD_MINOR_STR', 'VER_PROD_REV_STR',
- 'VER_PRODUCTNAME_STR');
- $requirements_met = 1;
- $first_missing = 0;
- $error_list = "";
- foreach my $required (@required_versions) {
- if (! exists $config->{Versions}->{$required}) {
- $requirements_met = 0;
- if (!$first_missing) {
- $first_missing = 1;
- $error_list = "Fatal -- The following version(s) are not defined in $src/$version_path.\n";
- }
- $error_list .= "$required\n";
- }
- }
- if (!$requirements_met) {
- print $error_list;
- exit(0);
- }
-
- # Apply any of these tags to filestem:
- my $filestem = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};
- $filestem =~ s/%VERSION_MAJOR%/$config->{Versions}->{'VER_PROD_MAJOR_STR'}/;
- $filestem =~ s/%VERSION_MINOR%/$config->{Versions}->{'VER_PROD_MINOR_STR'}/;
- $filestem =~ s/%VERSION_PATCH%/$config->{Versions}->{'VER_PROD_REV_STR'}/;
- $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name} = $filestem;
- ##-- Read in the version information & set config info.
-
-##++ Repository action, part 2:
- if (($rverb =~ /checkout/) || ($rverb =~ /export/)) {
- if (! $bOutputCleaned) { ## In case somebody cleaned $out before us.
- if (-d $out) {!system("rm -rf $out/*") or die "Fatal -- Couldn't clean $out."} ## Clean output directory.
- else {mkdir($out);}
- $bOutputCleaned = 1;
- }
- zipXML($config->{Stages}->{FetchSources}, $config); ## Make zips.
- }
-##-- End repository action, part 2.
-
-##++ Make action:
- if ( ($odr->{make}->{def}) ) {
- if ($verbose) {print "Info -- *** Begin preparing for build.\n";}
-
- chdir("$wd") or die "Fatal -- couldn't chdir to $wd\n";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
-
- my ($path, $destpath);
-
- # Copy athena\scripts\site\graft\krb5\Makefile.src to athena\auth\krb5:
- $path = "scripts\\site\\graft\\krb5\\Makefile.src";
- if (!-e $path) {die "Fatal -- Expected file $wd\\$path not found.";}
- $destpath = "athena\\auth\\krb5\\Makefile.src";
- !system("echo F | xcopy /D $wd\\$path $wd\\$destpath /Y > NUL") or die "Fatal -- Copy of $wd\\$path to $wd\\$destpath failed.";
- print "Info -- copied $wd\\$path to $wd\\$destpath\n" if ($verbose);;
-
- # Add DEBUG_SYMBOL to .../wshelper/Makefile.src:
- $path = "athena\\wshelper\\wshelper\\Makefile.src";
- if (!-e $path) {die "Fatal -- Expected file $wd\\$path not found.";}
- if (system("grep DEBUG_SYMBOL $path > NUL") != 0) {
- !system ("echo DEBUG_SYMBOL=1 >> $wd\\$path") or die "Fatal -- Append line to file failed.\n";
- print "Info -- Added DEBUG_SYMBOL to $wd\\$path\n" if ($verbose);
- }
-
- # Prune any unwanted directories before the build:
- pruneFiles($config->{Stages}->{Make}, $config);
-
- if ($verbose) {print "Info -- *** End preparing for build.\n";}
-
- my ($buildtarget, $buildtext);
- if ($clean) {
- $buildtarget = "clean" ;
- $buildtext = " clean."
- }
- else {
- $buildtarget = "" ;
- $buildtext = "."
- }
-
- chdir("$wd\\athena") or die "Fatal -- couldn't chdir to source directory $wd\\athena\n";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- local $dbgswitch = ($odr->{debug}->{def}) ? " " : "NODEBUG=1";
- !system("perl ../scripts/build.pl --softdirs --nolog $buildtarget $dbgswitch BUILD_KFW=1 BUILD_OFFICIAL=1 DEBUG_SYMBOL=1")
- or die "Fatal -- build $buildtarget failed.";
-
- chdir("$wd") or die "Fatal -- couldn't chdir to $wd.";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- if ($clean) {
- if (-d "staging") {
- !system("rm -rf staging") or die "Fatal -- Couldn't remove $wd\\staging.";
- }
- }
-
- if ($verbose) {print "Info -- *** End build".$buildtext."\n";}
- } ## End make conditional.
- else {print "Info -- *** Skipping build.\n" if ($verbose);}
-##-- Make action.
-
-##++ Package action:
- if (! $odr->{package}->{def}) { ## If /clean, nopackage will be set.
- print "Info -- *** Skipping packaging.\n";
- if ((-d $out) && ! $bOutputCleaned) {
- print "Warning -- *** Output directory $out will not be cleaned.\n";
- }
- }
- else {
- if ($verbose) {print "Info -- *** Begin prepackage.\n";}
-
- if (! $bOutputCleaned) { ## In case somebody cleaned $out before us.
- if (-d $out) {!system("rm -rf $out/*") or die "Fatal -- Couldn't clean $out."} ## Clean output directory.
- else {mkdir($out);}
- $bOutputCleaned = 1;
- }
-
- # The build results are copied to a staging area, where the packager expects to find them.
- # We put the staging area in the fixed area .../pismere/staging.
- my $prepackage = $config->{Stages}->{PrePackage};
- my $staging = "$wd\\staging";
- chdir($wd) or die "Fatal -- couldn't chdir to $wd\n";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- if (-d "staging") {
- !system("rm -rf $staging/*") or die "Fatal -- Couldn't clean $staging.";
- }
- else {
- mkdir($staging) or die "Fatal -- Couldn't create $staging.";
- }
-
- # Force Where From and To are relative to:
- $prepackage->{CopyList}->{Config}->{From}->{root} = "$wd\\athena";
- $prepackage->{CopyList}->{Config}->{To}->{root} = "$wd\\staging";
- copyFiles($prepackage->{CopyList}, $config); ## Copy any files [this step takes a while]
-
- # Sign files:
- chdir($staging) or die "Fatal -- couldn't chdir to $staging\n";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- if ($odr->{sign}->{def}) {
- signFiles($config->{Stages}->{PostPackage}->{Config}->{Signing}, $config);
- }
-
- # Create working directories for building the installers:
- if (-d "$wd\\buildwix") {!system("rm -rf $wd\\buildwix/*") or die "Fatal -- Couldn't clean $wd\\buildwix."}
- !system("echo D | xcopy /s $wd\\staging\\install\\wix\\*.* $wd\\buildwix") or die "Fatal -- Couldn't create $wd\\buildwix.";
- if (-d "$wd\\buildnsi") {!system("rm -rf $wd\\buildnsi/*") or die "Fatal -- Couldn't clean $wd\\buildnsi."}
- !system("echo D | xcopy /s $wd\\staging\\install\\nsis\\*.* $wd\\buildnsi") or die "Fatal -- Couldn't create $wd\\buildnsi.";
-
- chdir("$staging\\install\\wix") or die "Fatal -- Couldn't cd to $staging\\install\\wix";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- # Correct errors in files.wxi:
- !system("sed 's/WorkingDirectory=\"\\[dirbin\\]\"/WorkingDirectory=\"dirbin\"/g' files.wxi > a.tmp") or die "Fatal -- Couldn't modify files.wxi.";
- !system("mv a.tmp files.wxi") or die "Fatal -- Couldn't update files.wxi.";
-
- # Make sed script to run on the site-local configuration files:
- local $tmpfile = "site-local.sed" ;
- if (-e $tmpfile) {system("del $tmpfile");}
- # Basic substitutions:
- local $dblback_wd = $wd;
- $dblback_wd =~ s/\\/\\\\/g;
- !system("echo s/%BUILDDIR%/$dblback_wd/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
- local $dblback_staging = "$wd\\staging";
- $dblback_staging =~ s/\\/\\\\/g;
- !system("echo s/%TARGETDIR%/$dblback_staging/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
- local $dblback_sample = "$wd\\staging\\sample";
- $dblback_sample =~ s/\\/\\\\/g;
- !system("echo s/%CONFIGDIR-WIX%/$dblback_sample/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
- !system("echo s/%CONFIGDIR-NSI%/$dblback_staging/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
- !system("echo s/%VERSION_MAJOR%/$config->{Versions}->{'VER_PROD_MAJOR_STR'}/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
- !system("echo s/%VERSION_MINOR%/$config->{Versions}->{'VER_PROD_MINOR_STR'}/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
- !system("echo s/%VERSION_PATCH%/$config->{Versions}->{'VER_PROD_REV_STR'}/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
- # Strip out some defines so they can be replaced: [used for site-local.nsi]
- !system("echo /\^!define\.\*RELEASE\.\*\$/d >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
- !system("echo /\^!define\.\*DEBUG\.\*\$/d >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
- !system("echo /\^!define\.\*BETA\.\*\$/d >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
-
- # Run the script on site-local.wxi:
- !system("sed -f $tmpfile site-local-tagged.wxi > $wd\\buildwix\\site-local.wxi") or die "Fatal -- Couldn't modify site-local.wxi.";
-
- # Now update site-local.nsi:
- chdir "..\\nsis";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- !system("sed -f ..\\wix\\$tmpfile site-local-tagged.nsi > b.tmp") or die "Fatal -- Couldn't modify site-local.wxi.";
- # Add DEBUG or RELEASE:
- if ($odr->{debug}->{def}) { ## debug build
- !system("echo !define DEBUG >> b.tmp") or die "Fatal -- Couldn't modify b.tmp.";
- }
- else { ## release build
- !system("echo !define RELEASE >> b.tmp") or die "Fatal -- Couldn't modify b.tmp.";
- }
- # Add BETA if present:
- if (exists $config->{Versions}->{'BETA_STR'}) {
- !system("echo !define BETA $config->{Versions}->{'BETA_STR'} >> b.tmp") or die "Fatal -- Couldn't modify b.tmp.";
- }
- !system("mv -f b.tmp $wd\\buildnsi\\site-local.nsi") or die "Fatal -- Couldn't replace site-local.nsi.";
-
- # Run the script on nsi-includes-tagged.nsi:
- !system("sed -f ..\\wix\\$tmpfile nsi-includes-tagged.nsi > $wd\\buildnsi\\nsi-includes.nsi") or die "Fatal -- Couldn't modify nsi-includes.nsi.";
- !system("rm ..\\wix\\$tmpfile") or die "Fatal -- Couldn't remove $tmpfile.";
-
- if ($verbose) {print "Info -- *** End prepackage.\n";}
-
- if ($verbose) {print "Info -- *** Begin package.\n";}
- # Make the msi:
- chdir("$wd\\buildwix") or die "Fatal -- Couldn't cd to $wd\\buildwix";
- print "Info -- *** Make .msi:\n" if ($verbose);
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- !system("$MAKE") or die "Error -- msi installer build failed.";
-
- chdir("$wd\\buildnsi") or die "Fatal -- Couldn't cd to $wd\\buildnsi";
- print "Info -- *** Make NSIS:\n" if ($verbose);
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- !system("cl.exe killer.cpp advapi32.lib") or die "Error -- nsis killer.exe not built.";
- !system("rename killer.exe Killer.exe") or die "Error -- Couldn't rename killer.exe";
- !system("makensis kfw.nsi") or die "Error -- executable installer build failed.";
-
-# Begin packaging extra items:
- chdir($wd) or die "Fatal -- Couldn't cd to $wd";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
-
- zipXML($config->{Stages}->{PostPackage}, $config); ## Make zips.
-
- $config->{Stages}->{PostPackage}->{CopyList}->{Config} = $config->{Stages}->{PostPackage}->{Config}; ## Use the post package config.
- $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{From}->{root} = "$src\\pismere";
- $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{To}->{root} = $out;
- copyFiles($config->{Stages}->{PostPackage}->{CopyList}, $config); ## Copy any files
-
- !system("rm -rf $wd\\buildwix") or die "Fatal -- Couldn't remove $wd\\buildwix.";
- !system("rm -rf $wd\\buildnsi") or die "Fatal -- Couldn't remove $wd\\buildnsi.";
-
- chdir($out) or die "Fatal -- Couldn't cd to $out";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- if ($odr->{sign}->{def}) {
- signFiles($config->{Stages}->{PostPackage}->{Config}->{Signing}, $config);
- }
-
- if ($verbose) {print "Info -- *** End package.\n";}
- }
-##-- Package action.
-
- system("rm -rf $src/a.tmp"); ## Clean up junk.
- system("rm -rf $out/a.tmp"); ## Clean up junk.
- system("rm -rf $out/ziptemp"); ## Clean up junk.
-
-# End logging:
- if ($odr->{logfile}->{def}) {$l->stop;}
-
- return 0;
- } ## End subroutine main.
-
-$SIG{'INT'} = \&handler;
-$SIG{'QUIT'} = \&handler;
-
+#!perl -w
+
+#use strict;
+use FindBin;
+use File::Spec;
+use File::Basename;
+use lib "$FindBin::Bin/build/lib";
+use Getopt::Long;
+use Cwd;
+use XML::Simple;
+use Data::Dumper;
+use Archive::Zip;
+use Logger;
+require "copyfiles.pl";
+require "prunefiles.pl";
+require "signfiles.pl";
+require "zipXML.pl";
+
+my $BAIL;
+$0 = fileparse($0);
+my $OPT = {foo => 'bar'};
+my $MAKE = 'NMAKE';
+our $config;
+
+sub get_info {
+ my $cmd = shift || die;
+ my $which = $^X.' which.pl';
+ my $full = `$which $cmd`;
+ return 0 if ($? / 256);
+ chomp($full);
+ $full = "\"".$full."\"";
+ return { cmd => $cmd, full => $full};
+ }
+
+sub usage {
+ print <<USAGE;
+Usage: $0 [options] NMAKE-options
+
+ Options are case insensitive.
+
+ Options:
+ /help /? usage information (what you now see).
+ /config /f path Path to config file. Default is bkwconfig.xml.
+ /srcdir /s dir Source directory to use. Should contain
+ pismere/athena. If cvstag or svntag is null,
+ the directory should be prepopulated.
+ /outdir /o dir Directory to be created where build results will go
+ /repository checkout | co \\ What repository action to take.
+ /r update | up \\ Options are to checkout, update, export
+ export | ex \\ or skip (take no action).
+ skip
+ /username /u name username used to access svn if checking out.
+ /cvstag /c tag use -r <tag> in cvs command
+ /svnbranch /b tag use /branches/<tag> instead of /trunk.
+ /svntag /t tag use /tags/<tag> instead of /trunk.
+ /debug /d Do debug make instead of release make.
+ /[no]make Control the make step.
+ /clean Build clean target.
+ /[no]package Control the packaging step.
+ /[no]sign Control signing of executable files.
+ /verbose /v Debug mode - verbose output.
+ /logfile /l path Where to write output. Default is bkw.pl.log.
+ /nolog Don't save output.
+ Other:
+ NMAKE-options any options you want to pass to NMAKE, which can be:
+ (note: /nologo is always used)
+
+USAGE
+ system("$MAKE /?");
+ }
+
+sub handler {
+ my $sig = shift;
+ my $bailmsg = "Bailing out due to SIG$sig!\n";
+ my $warnmsg = <<EOH;
+*********************************
+* FUTURE BUILDS MAY FAIL UNLESS *
+* BUILD DIRECTORIES ARE CLEANED *
+*********************************
+EOH
+ $BAIL = $bailmsg.$warnmsg;
+}
+
+sub main {
+ local $cmdline = "bkw.pl";
+ foreach $arg (@ARGV) {$cmdline .= " $arg";}
+
+ Getopt::Long::Configure('no_bundling', 'no_auto_abbrev',
+ 'no_getopt_compat', 'require_order',
+ 'ignore_case', 'pass_through',
+ 'prefix_pattern=(--|-|\+|\/)',
+ );
+
+ local @goargs = ('config|f=s');
+ if (!GetOptions($OPT, @goargs)) {
+ Usage();
+ exit(0);
+ }
+
+ if (! exists $OPT->{config}) {$OPT->{config} = "bkwconfig.xml";}
+ my $configfile = $OPT->{config};
+ print "Info -- Reading configuration from $configfile.\n";
+ my $xml = new XML::Simple();
+ $config = $xml->XMLin($configfile); ## Read in configuration file.
+
+ # Set up convenience variables:
+ local $odr = $config->{Config}; ## Options, directories, repository, environment.
+
+ # Build argument description from Config section of the XML,
+ # to parse the rest of the arguments:
+ local @xmlargs;
+ while (($sw, $val) = each %$odr) {
+ local $arg = $sw;
+ if (exists $val->{abbr}) {$arg .= "|$val->{abbr}";}
+ if (exists $val->{value}) { ## Can't do both negations and string values.
+ $arg .= ":s";
+ }
+ else {
+ if (! ($val->{def} =~ /A/)) {$arg .= "!";}
+ }
+ push @xmlargs, $arg;
+ }
+
+ if (!GetOptions($OPT, @xmlargs)) {$OPT->{help} = 1;}
+
+ if ( $OPT->{help} ) {
+ usage();
+ exit(0);
+ }
+
+ delete $OPT->{foo};
+
+##++ Validate required conditions:
+
+ # List of programs which must be in PATH:
+ my @required_list = ('sed', 'awk', 'which', 'cat', 'rm', 'cvs', 'svn', 'doxygen',
+ 'hhc', 'candle', 'light', 'makensis', 'nmake', 'plink', 'filever');
+ my $requirements_met = 1;
+ my $first_missing = 0;
+ my $error_list = "";
+ foreach my $required (@required_list) {
+ if (!get_info($required)) {
+ $requirements_met = 0;
+ if (!$first_missing) {
+ $first_missing = 1;
+ $error_list = "Fatal -- Environment problem! The following program(s) are not in PATH:\n";
+ }
+ $error_list .= "$required\n";
+ }
+ }
+ if (!$requirements_met) {
+ print $error_list;
+ print "Info -- Update PATH or install the programs and try again.\n";
+ exit(0);
+ }
+
+##-- Validate required conditions.
+
+ use Time::gmtime;
+ $ENV{DATE} = gmctime()." GMT";
+ our $originalDir = `cd`;
+ $originalDir =~ s/\n//g;
+
+##++ Assemble configuration from config file and command line:
+
+ my $bOutputCleaned = 0;
+
+#while ($v = each %$OPT) {print "$v: $OPT->{$v}\n";}
+
+ # Scan the configuration for switch definitions:
+ while (($sw, $val) = each %$odr) {
+ next if (! exists $val->{def}); ## ?? Should always exist.
+
+ # Set/clear environment variables:
+ if ($val->{env}) {
+ if ($val->{def}) {$ENV{$sw} = (exists $val->{value}) ? $val->{value} : 1; }
+ else {delete $ENV{$sw}; }
+ }
+
+ # If the switch is in the command line, override the stored value:
+ if (exists $OPT->{$sw}) {
+ if (exists $val->{value}) {
+ $val->{value} = $OPT->{$sw};
+ $val->{def} = 1;
+ }
+ else {
+ $val->{def} = $OPT->{$sw}; ## If no<switch>, value will be zero.
+ }
+ }
+ # If the switch can be negated, test that, too:
+ if ( ! ($val->{def} =~ /A/)) {
+ local $nosw = "no".$sw;
+ if (exists $OPT->{$nosw}) {
+ $val->{def} = 0;
+ }
+ }
+
+ # For any switch definition with fixed values ("options"), validate:
+ if (exists $val->{options}) {
+ local $bValid = 0;
+ # options can be like value1|syn1 value2|syn2|syn3
+ foreach $option (split(/ /, $val->{options})) {
+ local $bFirst = 1;
+ local $sFirst;
+ foreach $opt (split(/\|/, $option)) {
+ # opt will be like value2, syn2, syn3
+ if ($bFirst) {
+ $sFirst = $opt; ## Remember the full name of the option.
+ $bFirst = 0;
+ }
+ if ($val->{value} =~ /$opt/i) {
+ $val->{value} = $sFirst; ## Save the full name.
+ $bValid = 1;
+ }
+ }
+ }
+ if (! $bValid) {
+ print "Fatal -- invalid $sw value $val->{value}. Possible values are $val->{options}.\n";
+ usage();
+ die;
+ }
+ }
+ }
+
+ # Set up convenience variables:
+ our $verbose = $odr->{verbose}->{def};
+ our $vverbose = $odr->{vverbose}->{def};
+ our $clean = $clean->{clean}->{def};
+ local $src = $odr->{src}->{value};
+ local $out = $odr->{out}->{value};
+
+ if ($clean && $odr->{package}->{def}) {
+ print "Info -- /clean forces /nopackage.\n";
+ $odr->{package}->{def} = 0;
+ }
+
+ if ($vverbose) {print "Debug -- Config: ".Dumper($config);}
+
+ # Test the unix find command:
+ # List of directories where it might be:
+ my @find_dirs = ('c:\\cygwin\\bin', 'c:\\tools\\cygwin\\bin');
+ if (exists $odr->{unixfind}->{value}) { ## Was an additional place to look specified?
+ push (@find_dirs, $odr->{unixfind}->{value});
+ }
+ my $bFindFound = 0;
+ foreach my $dir (@find_dirs) {
+ if (-d $dir) {
+ local $savedPATH = $ENV{PATH};
+ $ENV{PATH} = $dir.";".$savedPATH;
+ if (-e "a.tmp") {!system("rm a.tmp") or die "Fatal -- Couldn't clean temporary file a.tmp.";}
+ !system("find . -maxdepth 0 -name a.tmp > b.tmp 2>&1") or die "Fatal -- find test failed.";
+ local $filesize = -s "b.tmp";
+ $ENV{PATH} = $savedPATH;
+ if ($filesize <= 0) {
+ $bFindFound = 1;
+ $odr->{unixfind}->{value} = $dir;
+ last;
+ }
+ }
+ }
+ if (! $bFindFound) {
+ print "Fatal -- unix find command not found in \n";
+ map {print " $_ "} @find_dirs;
+ print "\n";
+ die;
+ }
+
+ # Don't allow /svntag and /svnbranch simultaneously:
+ if ( (length $odr->{svntag}->{value} > 0) &&
+ (length $odr->{svnbranch}->{value} > 0) ) {
+ die "Fatal -- Can't specify both /SVNTAG and /SVNBRANCH.";
+ }
+
+ # /logfile and /nolog interact:
+ if ($odr->{nolog}->{def}) {$odr->{logfile}->{def} = 0;}
+
+##-- Assemble configuration from config file and command line.
+
+ local $rverb = $odr->{repository}->{value};
+ if ( (($rverb =~ /checkout/) || ($rverb =~ /export/)) && $clean) {
+ print "Warning -- Because sources are being checked out, make clean will not be run.\n";
+ $clean = $odr->{clean}->{def} = 0;
+ }
+
+ my $wd = $src."\\pismere";
+
+ if (! ($rverb =~ /skip/)) {
+ local $len = 0;
+ if (exists $odr->{username}->{value}) {
+ $len = length $odr->{username}->{value};
+ }
+ if ($len < 1) {
+ die "Fatal -- you won't get far accessing the repository without specifying a username.";
+ }
+ }
+
+ # (------------------------------------------------)
+ if ( (-d $wd) && ( ($rverb =~ /export/) || ($rverb =~ /checkout/) ) ) {
+ print "\n\nHEADS UP!!\n\n";
+ print "/REPOSITORY ".uc($rverb)." will cause everything under $wd to be deleted.\n";
+ print "If this is not what you intended, here's your chance to bail out!\n\n\n";
+ print "Are you sure you want to remove everything under $wd? ";
+ my $char = getc;
+ if (! ($char =~ /y/i)) {die "Info -- operation aborted by user."}
+ !system("rm -rf $wd/*") or die "Fatal -- Couldn't clean $wd.";
+ !system("rmdir $wd") or die "Fatal -- Couldn't remove $wd.";
+ }
+
+# Begin logging:
+ my $l;
+ if ($odr->{logfile}->{def}) {
+ print "Info -- logging to $odr->{logfile}->{value}.\n";
+ $l = new Logger $odr->{logfile}->{value};
+ $l->start;
+ $l->no_die_handler; ## Needed so XML::Simple won't throw exceptions.
+ }
+
+ print "Executing $cmdline\n";
+ local $argvsize = @ARGV;
+ if ($argvsize > 0) {
+ print "\nArguments for NMAKE: ";
+ map {print " $_ "} @ARGV;
+ print "\n";
+ }
+
+ print "Info -- Using unix find in $odr->{unixfind}->{value}\n" if ($verbose);
+
+##++ Begin repository action:
+ if ($rverb =~ /skip/) {print "Info -- *** Skipping repository access.\n" if ($verbose);}
+ else {
+ if ($verbose) {print "Info -- *** Begin fetching sources.\n";}
+ local $cvspath = "$src";
+ if (! -d $cvspath) { ## xcopy will create the entire path for us.
+ !system("echo foo > a.tmp") or die "Fatal -- Couldn't create temporary file in ".`cd`;
+ !system("echo F | xcopy a.tmp $cvspath\\a.tmp") or die "Fatal -- Couldn't xcopy to $cvspath.";
+ !system("rm a.tmp") or die "Fatal -- Couldn't remove temporary file.";
+ !system("rm $cvspath\\a.tmp") or die "Fatal -- Couldn't remove temporary file.";
+ }
+
+ # Set up cvs environment variables:
+ $ENV{CVSROOT} = $odr->{CVSROOT}->{value};
+ local $krb5dir = "$wd\\athena\\auth\\krb5";
+
+ local $cvscmdroot = "cvs $rverb";
+ if (length $odr->{cvstag}->{value} > 0) {
+ $cvscmdroot .= " -r $odr->{cvstag}->{value}";
+ }
+
+ if (($rverb =~ /checkout/) || ($rverb =~ /export/)) {
+ chdir($src) or die "Fatal -- couldn't chdir to $src\n";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ my @cvsmodules = (
+ 'krb',
+ 'pismere/athena/util/lib/delaydlls',
+ 'pismere/athena/util/lib/getopt',
+ 'pismere/athena/util/guiwrap'
+ );
+ foreach my $module (@cvsmodules) {
+ local $cvscmd = $cvscmdroot." ".$module;
+ if ($verbose) {print "Info -- cvs command: $cvscmd\n";}
+ !system("$cvscmd") or die "Fatal -- command \"$cvscmd\" failed; return code $?\n";
+ }
+ }
+ else { ## Update.
+ chdir($wd) or die "Fatal -- couldn't chdir to $wd\n";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ if ($verbose) {print "Info -- cvs command: $cvscmdroot\n";}
+ !system($cvscmdroot) or die "Fatal -- command \"$cvscmdroot\" failed; return code $?\n";
+ }
+
+ # Set up svn environment variable:
+ $ENV{SVN_SSH} = "plink.exe";
+ # If the directory structure doesn't exist, many cd commands will fail.
+ if (! -d $krb5dir) { ## xcopy will create the entire path for us.
+ !system("echo foo > a.tmp") or die "Fatal -- Couldn't create temporary file in ".`cd`;
+ !system("echo F | xcopy a.tmp $krb5dir\\a.tmp") or die "Fatal -- Couldn't xcopy to $krb5dir.";
+ !system("rm a.tmp") or die "Fatal -- Couldn't remove temporary file.";
+ !system("rm $krb5dir\\a.tmp") or die "Fatal -- Couldn't remove temporary file.";
+ }
+
+ chdir($krb5dir) or die "Fatal -- Couldn't chdir to $krb5dir";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ my $svncmd = "svn $rverb ";
+ if (($rverb =~ /checkout/) || ($rverb =~ /export/)) { # Append the rest of the checkout/export command:
+ chdir("..");
+ if ($rverb =~ /export/) {
+ ## svn export will fail if the destination directory exists
+ rmdir "krb5";
+ }
+ $svncmd .= "svn+ssh://".$odr->{username}->{value}."@".$odr->{SVNURL}->{value}."/krb5/";
+ if (length $odr->{svntag}->{value} > 0) {
+ $svncmd .= "tags/$odr->{svntag}->{value}";
+ }
+ elsif (length $odr->{svnbranch}->{value} > 0) {
+ $svncmd .= "branches/$odr->{svnbranch}->{value}";
+ }
+ else {
+ $svncmd .= "trunk";
+ }
+
+ $svncmd .= " krb5";
+
+ }
+ if ($verbose) {print "Info -- svn command: $svncmd\n";}
+ !system($svncmd) or die "Fatal -- command \"$svncmd\" failed; return code $?\n";
+ if ($verbose) {print "Info -- *** End fetching sources.\n";}
+ }
+##-- End repository action.
+
+ ##++ Read in the version information to be able to update the
+ # site-local files in the install build areas.
+ # ** Do this now (after repository update and before first zip)
+ # because making zip files requires some configuration data be set up.
+ local $version_path = $config->{Stages}->{Package}->{Config}->{Paths}->{Versions}->{path};
+ open(DAT, "$src/$version_path") or die "Could not open $version_path.";
+ @raw = <DAT>;
+ close DAT;
+ foreach $line (@raw) {
+ chomp $line;
+ if ($line =~ /#define/) { # Process #define lines:
+ $line =~ s/#define//; # Remove #define token
+ $line =~ s/^\s+//; # and leading & trailing whitespace
+ $line =~ s/\s+$//;
+ local @qr = split("\"", $line); # Try splitting with quotes
+ if (exists $qr[1]) {
+ $qr[0] =~ s/^\s+//; # Clean up whitespace
+ $qr[0] =~ s/\s+$//;
+ $config->{Versions}->{$qr[0]} = $qr[1]; # Save string
+ }
+ else { # No quotes, so
+ local @ar = split(" ", $line); # split with space
+ $ar[0] =~ s/^\s+//; # Clean up whitespace
+ $ar[0] =~ s/\s+$//;
+ $config->{Versions}->{$ar[0]} = $ar[1]; # and save numeric value
+ }
+ }
+ }
+
+ # Check that the versions we will need for site-local have been defined:
+ my @required_versions = ('VER_PROD_MAJOR', 'VER_PROD_MINOR', 'VER_PROD_REV',
+ 'VER_PROD_MAJOR_STR', 'VER_PROD_MINOR_STR', 'VER_PROD_REV_STR',
+ 'VER_PRODUCTNAME_STR');
+ $requirements_met = 1;
+ $first_missing = 0;
+ $error_list = "";
+ foreach my $required (@required_versions) {
+ if (! exists $config->{Versions}->{$required}) {
+ $requirements_met = 0;
+ if (!$first_missing) {
+ $first_missing = 1;
+ $error_list = "Fatal -- The following version(s) are not defined in $src/$version_path.\n";
+ }
+ $error_list .= "$required\n";
+ }
+ }
+ if (!$requirements_met) {
+ print $error_list;
+ exit(0);
+ }
+
+ # Apply any of these tags to filestem:
+ my $filestem = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};
+ $filestem =~ s/%VERSION_MAJOR%/$config->{Versions}->{'VER_PROD_MAJOR_STR'}/;
+ $filestem =~ s/%VERSION_MINOR%/$config->{Versions}->{'VER_PROD_MINOR_STR'}/;
+ $filestem =~ s/%VERSION_PATCH%/$config->{Versions}->{'VER_PROD_REV_STR'}/;
+ $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name} = $filestem;
+ ##-- Read in the version information & set config info.
+
+##++ Repository action, part 2:
+ if (($rverb =~ /checkout/) || ($rverb =~ /export/)) {
+ if (! $bOutputCleaned) { ## In case somebody cleaned $out before us.
+ if (-d $out) {!system("rm -rf $out/*") or die "Fatal -- Couldn't clean $out."} ## Clean output directory.
+ else {mkdir($out);}
+ $bOutputCleaned = 1;
+ }
+ zipXML($config->{Stages}->{FetchSources}, $config); ## Make zips.
+ }
+##-- End repository action, part 2.
+
+##++ Make action:
+ if ( ($odr->{make}->{def}) ) {
+ if ($verbose) {print "Info -- *** Begin preparing for build.\n";}
+
+ chdir("$wd") or die "Fatal -- couldn't chdir to $wd\n";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+
+ my ($path, $destpath);
+
+ # Copy athena\scripts\site\graft\krb5\Makefile.src to athena\auth\krb5:
+ $path = "scripts\\site\\graft\\krb5\\Makefile.src";
+ if (!-e $path) {die "Fatal -- Expected file $wd\\$path not found.";}
+ $destpath = "athena\\auth\\krb5\\Makefile.src";
+ !system("echo F | xcopy /D $wd\\$path $wd\\$destpath /Y > NUL") or die "Fatal -- Copy of $wd\\$path to $wd\\$destpath failed.";
+ print "Info -- copied $wd\\$path to $wd\\$destpath\n" if ($verbose);;
+
+ # Add DEBUG_SYMBOL to .../wshelper/Makefile.src:
+ $path = "athena\\wshelper\\wshelper\\Makefile.src";
+ if (!-e $path) {die "Fatal -- Expected file $wd\\$path not found.";}
+ if (system("grep DEBUG_SYMBOL $path > NUL") != 0) {
+ !system ("echo DEBUG_SYMBOL=1 >> $wd\\$path") or die "Fatal -- Append line to file failed.\n";
+ print "Info -- Added DEBUG_SYMBOL to $wd\\$path\n" if ($verbose);
+ }
+
+ # Prune any unwanted directories before the build:
+ pruneFiles($config->{Stages}->{Make}, $config);
+
+ if ($verbose) {print "Info -- *** End preparing for build.\n";}
+
+ my ($buildtarget, $buildtext);
+ if ($clean) {
+ $buildtarget = "clean" ;
+ $buildtext = " clean."
+ }
+ else {
+ $buildtarget = "" ;
+ $buildtext = "."
+ }
+
+ chdir("$wd\\athena") or die "Fatal -- couldn't chdir to source directory $wd\\athena\n";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ local $dbgswitch = ($odr->{debug}->{def}) ? " " : "NODEBUG=1";
+ !system("perl ../scripts/build.pl --softdirs --nolog $buildtarget $dbgswitch BUILD_KFW=1 BUILD_OFFICIAL=1 DEBUG_SYMBOL=1")
+ or die "Fatal -- build $buildtarget failed.";
+
+ chdir("$wd") or die "Fatal -- couldn't chdir to $wd.";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ if ($clean) {
+ if (-d "staging") {
+ !system("rm -rf staging") or die "Fatal -- Couldn't remove $wd\\staging.";
+ }
+ }
+
+ if ($verbose) {print "Info -- *** End build".$buildtext."\n";}
+ } ## End make conditional.
+ else {print "Info -- *** Skipping build.\n" if ($verbose);}
+##-- Make action.
+
+##++ Package action:
+ if (! $odr->{package}->{def}) { ## If /clean, nopackage will be set.
+ print "Info -- *** Skipping packaging.\n";
+ if ((-d $out) && ! $bOutputCleaned) {
+ print "Warning -- *** Output directory $out will not be cleaned.\n";
+ }
+ }
+ else {
+ if ($verbose) {print "Info -- *** Begin prepackage.\n";}
+
+ if (! $bOutputCleaned) { ## In case somebody cleaned $out before us.
+ if (-d $out) {!system("rm -rf $out/*") or die "Fatal -- Couldn't clean $out."} ## Clean output directory.
+ else {mkdir($out);}
+ $bOutputCleaned = 1;
+ }
+
+ # The build results are copied to a staging area, where the packager expects to find them.
+ # We put the staging area in the fixed area .../pismere/staging.
+ my $prepackage = $config->{Stages}->{PrePackage};
+ my $staging = "$wd\\staging";
+ chdir($wd) or die "Fatal -- couldn't chdir to $wd\n";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ if (-d "staging") {
+ !system("rm -rf $staging/*") or die "Fatal -- Couldn't clean $staging.";
+ }
+ else {
+ mkdir($staging) or die "Fatal -- Couldn't create $staging.";
+ }
+
+ # Force Where From and To are relative to:
+ $prepackage->{CopyList}->{Config}->{From}->{root} = "$wd\\athena";
+ $prepackage->{CopyList}->{Config}->{To}->{root} = "$wd\\staging";
+ copyFiles($prepackage->{CopyList}, $config); ## Copy any files [this step takes a while]
+
+ # Sign files:
+ chdir($staging) or die "Fatal -- couldn't chdir to $staging\n";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ if ($odr->{sign}->{def}) {
+ signFiles($config->{Stages}->{PostPackage}->{Config}->{Signing}, $config);
+ }
+
+ # Create working directories for building the installers:
+ if (-d "$wd\\buildwix") {!system("rm -rf $wd\\buildwix/*") or die "Fatal -- Couldn't clean $wd\\buildwix."}
+ !system("echo D | xcopy /s $wd\\staging\\install\\wix\\*.* $wd\\buildwix") or die "Fatal -- Couldn't create $wd\\buildwix.";
+ if (-d "$wd\\buildnsi") {!system("rm -rf $wd\\buildnsi/*") or die "Fatal -- Couldn't clean $wd\\buildnsi."}
+ !system("echo D | xcopy /s $wd\\staging\\install\\nsis\\*.* $wd\\buildnsi") or die "Fatal -- Couldn't create $wd\\buildnsi.";
+
+ chdir("$staging\\install\\wix") or die "Fatal -- Couldn't cd to $staging\\install\\wix";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ # Correct errors in files.wxi:
+ !system("sed 's/WorkingDirectory=\"\\[dirbin\\]\"/WorkingDirectory=\"dirbin\"/g' files.wxi > a.tmp") or die "Fatal -- Couldn't modify files.wxi.";
+ !system("mv a.tmp files.wxi") or die "Fatal -- Couldn't update files.wxi.";
+
+ # Make sed script to run on the site-local configuration files:
+ local $tmpfile = "site-local.sed" ;
+ if (-e $tmpfile) {system("del $tmpfile");}
+ # Basic substitutions:
+ local $dblback_wd = $wd;
+ $dblback_wd =~ s/\\/\\\\/g;
+ !system("echo s/%BUILDDIR%/$dblback_wd/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+ local $dblback_staging = "$wd\\staging";
+ $dblback_staging =~ s/\\/\\\\/g;
+ !system("echo s/%TARGETDIR%/$dblback_staging/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+ local $dblback_sample = "$wd\\staging\\sample";
+ $dblback_sample =~ s/\\/\\\\/g;
+ !system("echo s/%CONFIGDIR-WIX%/$dblback_sample/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+ !system("echo s/%CONFIGDIR-NSI%/$dblback_staging/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+ !system("echo s/%VERSION_MAJOR%/$config->{Versions}->{'VER_PROD_MAJOR_STR'}/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+ !system("echo s/%VERSION_MINOR%/$config->{Versions}->{'VER_PROD_MINOR_STR'}/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+ !system("echo s/%VERSION_PATCH%/$config->{Versions}->{'VER_PROD_REV_STR'}/ >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+ # Strip out some defines so they can be replaced: [used for site-local.nsi]
+ !system("echo /\^!define\.\*RELEASE\.\*\$/d >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+ !system("echo /\^!define\.\*DEBUG\.\*\$/d >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+ !system("echo /\^!define\.\*BETA\.\*\$/d >> $tmpfile") or die "Fatal -- Couldn't modify $tmpfile.";
+
+ # Run the script on site-local.wxi:
+ !system("sed -f $tmpfile site-local-tagged.wxi > $wd\\buildwix\\site-local.wxi") or die "Fatal -- Couldn't modify site-local.wxi.";
+
+ # Now update site-local.nsi:
+ chdir "..\\nsis";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ !system("sed -f ..\\wix\\$tmpfile site-local-tagged.nsi > b.tmp") or die "Fatal -- Couldn't modify site-local.wxi.";
+ # Add DEBUG or RELEASE:
+ if ($odr->{debug}->{def}) { ## debug build
+ !system("echo !define DEBUG >> b.tmp") or die "Fatal -- Couldn't modify b.tmp.";
+ }
+ else { ## release build
+ !system("echo !define RELEASE >> b.tmp") or die "Fatal -- Couldn't modify b.tmp.";
+ }
+ # Add BETA if present:
+ if (exists $config->{Versions}->{'BETA_STR'}) {
+ !system("echo !define BETA $config->{Versions}->{'BETA_STR'} >> b.tmp") or die "Fatal -- Couldn't modify b.tmp.";
+ }
+ !system("mv -f b.tmp $wd\\buildnsi\\site-local.nsi") or die "Fatal -- Couldn't replace site-local.nsi.";
+
+ # Run the script on nsi-includes-tagged.nsi:
+ !system("sed -f ..\\wix\\$tmpfile nsi-includes-tagged.nsi > $wd\\buildnsi\\nsi-includes.nsi") or die "Fatal -- Couldn't modify nsi-includes.nsi.";
+ !system("rm ..\\wix\\$tmpfile") or die "Fatal -- Couldn't remove $tmpfile.";
+
+ if ($verbose) {print "Info -- *** End prepackage.\n";}
+
+ if ($verbose) {print "Info -- *** Begin package.\n";}
+ # Make the msi:
+ chdir("$wd\\buildwix") or die "Fatal -- Couldn't cd to $wd\\buildwix";
+ print "Info -- *** Make .msi:\n" if ($verbose);
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ !system("$MAKE") or die "Error -- msi installer build failed.";
+
+ chdir("$wd\\buildnsi") or die "Fatal -- Couldn't cd to $wd\\buildnsi";
+ print "Info -- *** Make NSIS:\n" if ($verbose);
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ !system("cl.exe killer.cpp advapi32.lib") or die "Error -- nsis killer.exe not built.";
+ !system("rename killer.exe Killer.exe") or die "Error -- Couldn't rename killer.exe";
+ !system("makensis kfw.nsi") or die "Error -- executable installer build failed.";
+
+# Begin packaging extra items:
+ chdir($wd) or die "Fatal -- Couldn't cd to $wd";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+
+ zipXML($config->{Stages}->{PostPackage}, $config); ## Make zips.
+
+ $config->{Stages}->{PostPackage}->{CopyList}->{Config} = $config->{Stages}->{PostPackage}->{Config}; ## Use the post package config.
+ $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{From}->{root} = "$src\\pismere";
+ $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{To}->{root} = $out;
+ copyFiles($config->{Stages}->{PostPackage}->{CopyList}, $config); ## Copy any files
+
+ !system("rm -rf $wd\\buildwix") or die "Fatal -- Couldn't remove $wd\\buildwix.";
+ !system("rm -rf $wd\\buildnsi") or die "Fatal -- Couldn't remove $wd\\buildnsi.";
+
+ chdir($out) or die "Fatal -- Couldn't cd to $out";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ if ($odr->{sign}->{def}) {
+ signFiles($config->{Stages}->{PostPackage}->{Config}->{Signing}, $config);
+ }
+
+ if ($verbose) {print "Info -- *** End package.\n";}
+ }
+##-- Package action.
+
+ system("rm -rf $src/a.tmp"); ## Clean up junk.
+ system("rm -rf $out/a.tmp"); ## Clean up junk.
+ system("rm -rf $out/ziptemp"); ## Clean up junk.
+
+# End logging:
+ if ($odr->{logfile}->{def}) {$l->stop;}
+
+ return 0;
+ } ## End subroutine main.
+
+$SIG{'INT'} = \&handler;
+$SIG{'QUIT'} = \&handler;
+
exit(main()); \ No newline at end of file
diff --git a/src/windows/build/bootstrap.xml b/src/windows/build/bootstrap.xml
index d0767b071d..7cff6f53f3 100644
--- a/src/windows/build/bootstrap.xml
+++ b/src/windows/build/bootstrap.xml
@@ -1,19 +1,19 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!-- BKW: Build Kerberos for Windows -->
-<BKW_Config>
- <Config>
- <!-- Options: -->
- <repository def="1" value="skip" options="skip checkout|co update|up" />
- <src def="A" value="C:\KfW" /> <!-- Must be absolute path. -->
-
- <!-- Repository settings: -->
- <cvstag def="0" value="" />
- <svntag def="0" value="" />
- <svnbranch def="0" value="" />
- <CVSROOT def="A" value=":kserver:cvs.mit.edu:/cvs/pismere" />
- <SVNURL def="A" value="svn.mit.edu" /> <!-- NB: No protocol or slashes!! -->
- <username def="0" value="" /> <!-- Needed for svn/plink. Override from command line -->
-
- </Config>
-
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- BKW: Build Kerberos for Windows -->
+<BKW_Config>
+ <Config>
+ <!-- Options: -->
+ <repository def="1" value="skip" options="skip checkout|co update|up" />
+ <src def="A" value="C:\KfW" /> <!-- Must be absolute path. -->
+
+ <!-- Repository settings: -->
+ <cvstag def="0" value="" />
+ <svntag def="0" value="" />
+ <svnbranch def="0" value="" />
+ <CVSROOT def="A" value=":kserver:cvs.mit.edu:/cvs/pismere" />
+ <SVNURL def="A" value="svn.mit.edu" /> <!-- NB: No protocol or slashes!! -->
+ <username def="0" value="" /> <!-- Needed for svn/plink. Override from command line -->
+
+ </Config>
+
</BKW_Config> \ No newline at end of file
diff --git a/src/windows/build/commandandcontrol.pl b/src/windows/build/commandandcontrol.pl
index 53f84072cb..305b966030 100644
--- a/src/windows/build/commandandcontrol.pl
+++ b/src/windows/build/commandandcontrol.pl
@@ -1,170 +1,170 @@
-#!perl -w
-
-#use strict;
-
-sub commandandcontrol {
- local ($configdefault, $bIgnoreCmdlineConfig) = @_;
- local $OPT = {foo => 'bar'};
-
- Getopt::Long::Configure('no_bundling', 'no_auto_abbrev',
- 'no_getopt_compat', 'require_order',
- 'ignore_case', 'pass_through',
- 'prefix_pattern=(--|-|\+|\/)'
- );
- GetOptions($OPT,
- 'help|h|?',
- 'cvstag|c:s',
- 'svntag|s:s',
- 'svnbranch|b:s',
- 'src|r:s',
- 'out|o:s',
- 'debug|d',
- 'nodebug',
- 'config|f=s',
- 'logfile|l:s',
- 'nolog',
- 'repository:s',
- 'username|u:s',
- 'verbose|v',
- 'vverbose',
- 'make!',
- 'clean',
- 'package!',
- 'sign!',
- );
-
- if ( $OPT->{help} ) {
- usage();
- exit(0);
- }
-
- delete $OPT->{foo};
-
- local $argvsize = @ARGV;
- if ($argvsize > 0) {
- print "Error -- invalid argument: $ARGV[0]\n";
- usage();
- die;
- }
- # The first time C&C is called, it is OK to override the default (./bkwconfig.xml)
- # with a value from the command line.
- # The second time C&C is called, the repository has been updated and C&C will be passed
- # <src>/pismere/athena/auth/krb5/windows/build/bkwconfig.xml. That value MUST be used.
- if ($bIgnoreCmdlineConfig) {$OPT->{config} = $configdefault;}
- elsif (! exists $OPT->{config}) {$OPT->{config} = $configdefault;}
-
- my $configfile = $OPT->{config};
- my $bOutputCleaned = 0;
-
- print "Info -- Reading configuration from $configfile.\n";
-
- # Get configuration file:
- local $xml = new XML::Simple();
- my $config = $xml->XMLin($configfile);
- # Set up convenience variables:
- local $odr = $config->{Config}; ## Options, directories, repository, environment.
-
-#while ($v = each %$OPT) {print "$v: $OPT->{$v}\n";}
-
- # Scan the configuration for switch definitions:
- while (($sw, $val) = each %$odr) {
- next if (! exists $val->{def}); ## ?? Should always exist.
-
- # Set/clear environment variables:
- if ($val->{env}) {
- if ($val->{def}) {$ENV{$sw} = (exists $val->{value}) ? $val->{value} : 1; }
- else {delete $ENV{$sw}; }
- }
-
- # If the switch is in the command line, override the stored value:
- if (exists $OPT->{$sw}) {
- if (exists $val->{value}) {
- $val->{value} = $OPT->{$sw};
- $val->{def} = 1;
- }
- else {
- $val->{def} = $OPT->{$sw}; ## If no<switch>, value will be zero.
- }
- }
- # If the switch can be negated, test that, too:
- if ( ! ($val->{def} =~ /A/)) {
- local $nosw = "no".$sw;
- if (exists $OPT->{$nosw}) {
- $val->{def} = 0;
- }
- }
-
- # For any switch definition with fixed values ("options"), validate:
- if (exists $val->{options}) {
- local $bValid = 0;
- # options can be like value1|syn1 value2|syn2|syn3
- foreach $option (split(/ /, $val->{options})) {
- local $bFirst = 1;
- local $sFirst;
- foreach $opt (split(/\|/, $option)) {
- # opt will be like value2, syn2, syn3
- if ($bFirst) {
- $sFirst = $opt; ## Remember the full name of the option.
- $bFirst = 0;
- }
- if ($val->{value} =~ /$opt/i) {
- $val->{value} = $sFirst; ## Save the full name.
- $bValid = 1;
- }
- }
- }
- if (! $bValid) {
- print "Fatal -- invalid $sw value $val->{value}. Possible values are $val->{options}.\n";
- usage();
- die;
- }
- }
- }
-
- # Don't allow /svntag and /svnbranch simultaneously:
- if ( (length $odr->{svntag}->{value} > 0) &&
- (length $odr->{svnbranch}->{value} > 0) ) {
- die "Fatal -- Can't specify both /SVNTAG and /SVNBRANCH.";
- }
-
- return $config;
- }
-
-
-sub usage {
- print <<USAGE;
-Usage: $0 [options] NMAKE-options
-
- Options are case insensitive.
-
- Options:
- /help /? usage information (what you now see).
- /config /f path Path to config file. Default is bkwconfig.xml.
- /srcdir /r dir Source directory to use. Should contain
- pismere/athena. If cvstag or svntag is null,
- the directory should be prepopulated.
- /outdir /o dir Directory to be created where build results will go
- /repository checkout | co \\ What repository action to take.
- update | up ) Options are to checkout, update or
- skip / take no action [skip].
- /username /u name username used to access svn if checking out.
- /cvstag /c tag use -r <tag> in cvs command
- /svnbranch /b tag use /branches/<tag> instead of /trunk.
- /svntag /s tag use /tags/<tag> instead of /trunk.
- /debug /d Do debug make instead of release make.
- /[no]make Control the make step.
- /clean Build clean target.
- /[no]package Control the packaging step.
- /[no]sign Control signing of executable files.
- /verbose /v Debug mode - verbose output.
- /logfile /l path Where to write output. Default is bkw.pl.log.
- /nolog Don't save output.
- Other:
- NMAKE-options any options you want to pass to NMAKE, which can be:
- (note: /nologo is always used)
-
-USAGE
- system("$MAKE /?");
- }
-
+#!perl -w
+
+#use strict;
+
+sub commandandcontrol {
+ local ($configdefault, $bIgnoreCmdlineConfig) = @_;
+ local $OPT = {foo => 'bar'};
+
+ Getopt::Long::Configure('no_bundling', 'no_auto_abbrev',
+ 'no_getopt_compat', 'require_order',
+ 'ignore_case', 'pass_through',
+ 'prefix_pattern=(--|-|\+|\/)'
+ );
+ GetOptions($OPT,
+ 'help|h|?',
+ 'cvstag|c:s',
+ 'svntag|s:s',
+ 'svnbranch|b:s',
+ 'src|r:s',
+ 'out|o:s',
+ 'debug|d',
+ 'nodebug',
+ 'config|f=s',
+ 'logfile|l:s',
+ 'nolog',
+ 'repository:s',
+ 'username|u:s',
+ 'verbose|v',
+ 'vverbose',
+ 'make!',
+ 'clean',
+ 'package!',
+ 'sign!',
+ );
+
+ if ( $OPT->{help} ) {
+ usage();
+ exit(0);
+ }
+
+ delete $OPT->{foo};
+
+ local $argvsize = @ARGV;
+ if ($argvsize > 0) {
+ print "Error -- invalid argument: $ARGV[0]\n";
+ usage();
+ die;
+ }
+ # The first time C&C is called, it is OK to override the default (./bkwconfig.xml)
+ # with a value from the command line.
+ # The second time C&C is called, the repository has been updated and C&C will be passed
+ # <src>/pismere/athena/auth/krb5/windows/build/bkwconfig.xml. That value MUST be used.
+ if ($bIgnoreCmdlineConfig) {$OPT->{config} = $configdefault;}
+ elsif (! exists $OPT->{config}) {$OPT->{config} = $configdefault;}
+
+ my $configfile = $OPT->{config};
+ my $bOutputCleaned = 0;
+
+ print "Info -- Reading configuration from $configfile.\n";
+
+ # Get configuration file:
+ local $xml = new XML::Simple();
+ my $config = $xml->XMLin($configfile);
+ # Set up convenience variables:
+ local $odr = $config->{Config}; ## Options, directories, repository, environment.
+
+#while ($v = each %$OPT) {print "$v: $OPT->{$v}\n";}
+
+ # Scan the configuration for switch definitions:
+ while (($sw, $val) = each %$odr) {
+ next if (! exists $val->{def}); ## ?? Should always exist.
+
+ # Set/clear environment variables:
+ if ($val->{env}) {
+ if ($val->{def}) {$ENV{$sw} = (exists $val->{value}) ? $val->{value} : 1; }
+ else {delete $ENV{$sw}; }
+ }
+
+ # If the switch is in the command line, override the stored value:
+ if (exists $OPT->{$sw}) {
+ if (exists $val->{value}) {
+ $val->{value} = $OPT->{$sw};
+ $val->{def} = 1;
+ }
+ else {
+ $val->{def} = $OPT->{$sw}; ## If no<switch>, value will be zero.
+ }
+ }
+ # If the switch can be negated, test that, too:
+ if ( ! ($val->{def} =~ /A/)) {
+ local $nosw = "no".$sw;
+ if (exists $OPT->{$nosw}) {
+ $val->{def} = 0;
+ }
+ }
+
+ # For any switch definition with fixed values ("options"), validate:
+ if (exists $val->{options}) {
+ local $bValid = 0;
+ # options can be like value1|syn1 value2|syn2|syn3
+ foreach $option (split(/ /, $val->{options})) {
+ local $bFirst = 1;
+ local $sFirst;
+ foreach $opt (split(/\|/, $option)) {
+ # opt will be like value2, syn2, syn3
+ if ($bFirst) {
+ $sFirst = $opt; ## Remember the full name of the option.
+ $bFirst = 0;
+ }
+ if ($val->{value} =~ /$opt/i) {
+ $val->{value} = $sFirst; ## Save the full name.
+ $bValid = 1;
+ }
+ }
+ }
+ if (! $bValid) {
+ print "Fatal -- invalid $sw value $val->{value}. Possible values are $val->{options}.\n";
+ usage();
+ die;
+ }
+ }
+ }
+
+ # Don't allow /svntag and /svnbranch simultaneously:
+ if ( (length $odr->{svntag}->{value} > 0) &&
+ (length $odr->{svnbranch}->{value} > 0) ) {
+ die "Fatal -- Can't specify both /SVNTAG and /SVNBRANCH.";
+ }
+
+ return $config;
+ }
+
+
+sub usage {
+ print <<USAGE;
+Usage: $0 [options] NMAKE-options
+
+ Options are case insensitive.
+
+ Options:
+ /help /? usage information (what you now see).
+ /config /f path Path to config file. Default is bkwconfig.xml.
+ /srcdir /r dir Source directory to use. Should contain
+ pismere/athena. If cvstag or svntag is null,
+ the directory should be prepopulated.
+ /outdir /o dir Directory to be created where build results will go
+ /repository checkout | co \\ What repository action to take.
+ update | up ) Options are to checkout, update or
+ skip / take no action [skip].
+ /username /u name username used to access svn if checking out.
+ /cvstag /c tag use -r <tag> in cvs command
+ /svnbranch /b tag use /branches/<tag> instead of /trunk.
+ /svntag /s tag use /tags/<tag> instead of /trunk.
+ /debug /d Do debug make instead of release make.
+ /[no]make Control the make step.
+ /clean Build clean target.
+ /[no]package Control the packaging step.
+ /[no]sign Control signing of executable files.
+ /verbose /v Debug mode - verbose output.
+ /logfile /l path Where to write output. Default is bkw.pl.log.
+ /nolog Don't save output.
+ Other:
+ NMAKE-options any options you want to pass to NMAKE, which can be:
+ (note: /nologo is always used)
+
+USAGE
+ system("$MAKE /?");
+ }
+
return 1; \ No newline at end of file
diff --git a/src/windows/build/copyfiles.pl b/src/windows/build/copyfiles.pl
index 79b6e156ba..9f9ccdde68 100644
--- a/src/windows/build/copyfiles.pl
+++ b/src/windows/build/copyfiles.pl
@@ -1,137 +1,137 @@
-#!perl -w
-
-#use strict;
-use XML::Simple;
-use Data::Dumper;
-
-sub copyFiles {
- local ($xml, $config) = @_;
- local @odr = $config->{Config};
- local @files = $xml->{Files};
- # Check for includes:
- if (exists $xml->{Files}->{Include}->{path}) {
- my $includepath = $xml->{Files}->{Include}->{path};
- print "Info -- Including files from $includepath\n";
- my $savedDir = `cd`;
- $savedDir =~ s/\n//g;
- chdir $originalDir; ## Includes are relative to where we were invoked.
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- my $tmp = new XML::Simple;
- my $includeXML = $tmp->XMLin($includepath);
- chdir $savedDir;
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
-
- local $i = 0;
- while ($includeXML->{File}[$i]) { ## Copy File entries from includeXML.
- $files[0]->{File}[++$#{$files[0]->{File}}] = $includeXML->{File}[$i];
- $i++;
- }
- delete $files->{Include};
- }
- ##++ Set up path substitution variables for use inside the copy loop:
- # A path can contain a variable part, which will be handled here. If the variable part is
- # the Always or BuildDependent tag, then the variable will be changed to the
- # build-type-dependent PathFragment.
- # If the variable part is the IgnoreTag, then the file will not be copied.
- # If the variable part is %filestem%, it will be replaced with Config->FileStem->name.
- my ($PathFragment, $BuildDependentTag, $IgnoreTag, $FileStemFragment, $fromRoot, $toRoot);
- my $bPathTags = (exists $xml->{Config}->{DebugArea}) && (exists $xml->{Config}->{ReleaseArea});
- my $bFileStem = (exists $xml->{Config}->{FileStem});
-
- if ($odr->{debug}->{def}) { ## Debug build tags:
- $PathFragment = $xml->{Config}->{DebugArea}->{value};
- $BuildDependentTag = $xml->{Config}->{DebugTag}->{value};
- $IgnoreTag = $xml->{Config}->{ReleaseTag}->{value};
- }
- else { ## Release build tags:
- $PathFragment = $xml->{Config}->{ReleaseArea}->{value};
- $BuildDependentTag = $xml->{Config}->{ReleaseTag}->{value};
- $IgnoreTag = $xml->{Config}->{DebugTag}->{value};
- }
- my $AlwaysTag = $xml->{Config}->{AlwaysTag}->{value};
- $FileStemFragment = $xml->{Config}->{FileStem}->{name};
- $fromRoot = $xml->{Config}->{From}->{root};
- $toRoot = $xml->{Config}->{To}->{root};
- ##-- Set up path substitution variables for use inside the copy loop.
- # For each file in the file list:
- # Substitute any variable parts of the path name.
- # Handle wildcards
- # Copy
-
- local $i = 0;
- my $bOldDot = 1;
- my $bDot = 0;
- while ($files[0]->{File}[$i]) {
-
- my ($name, $newname, $from, $to, $file);
- $file = $files[0]->{File}->[$i];
- $name = $file->{name};
- if (exists $file->{newname}) {$newname = $file->{newname};}
- else {$newname = $name;}
- if ($name && (! exists $file->{ignore})) { ## Ignore or process this entry?
- $from = "$fromRoot\\$file->{from}\\$name";
- $to = "$toRoot\\$file->{to}\\$newname";
- # Copy this file? Check for ignore tag [debug-only in release mode or vice versa].
- if ( $bPathTags || $bFileStem || (index($from.$to, $IgnoreTag) <0) ) {
- if ($bPathTags) { ## Apply PathTag substitutions:
- $from =~ s/$AlwaysTag/$PathFragment/g;
- $to =~ s/$AlwaysTag/$PathFragment/g;
- $from =~ s/$BuildDependentTag/$PathFragment/g;
- $to =~ s/$BuildDependentTag/$PathFragment/g;
- }
- if ($bFileStem) { ## FileStem substitution?
- $from =~ s/%filestem%/$FileStemFragment/g;
- $to =~ s/%filestem%/$FileStemFragment/g;
- }
- # %-DEBUG% substitution:
- local $DebugFragment = ($odr->{debug}->{def}) ? "-DEBUG" : "";
- $from =~ s/%\-DEBUG%/$DebugFragment/g;
- $to =~ s/%\-DEBUG%/$DebugFragment/g;
- $to =~ s/\*.*//; ## Truncate to path before any wildcard
-
- my $bCopyOK = 1;
- my $fromcheck = $from;
- my $bRequired = ! (exists $file->{notrequired});
- if ($name =~ /\*/) { ## Wildcard case
- $fromcheck =~ s/\*.*//;
- if ($bRequired && (! -d $fromcheck)) {
- if ($bDot) {print "\n";}
- die "Fatal -- Can't find $fromcheck";
- }
- $bCopyOK = !system("echo D | xcopy /D /F /Y /S $from $to > a.tmp 2>NUL");
- }
- else { ## Specific file case
- if ($bRequired && (! -e $fromcheck)) {
- if ($bDot) {print "\n";}
- die "Fatal -- Can't find $fromcheck";
- }
- $bCopyOK = !system("echo F | xcopy /D /F /Y $from $to > a.tmp 2>NUL");
- }
-
- if ($bCopyOK) { ## xcopy OK - show progress
- # To show progress when files aren't copied, print a string of dots.
- open(MYINPUTFILE, "<a.tmp");
- my(@lines) = <MYINPUTFILE>;
- foreach $line (@lines) {
- $bDot = ($line =~ /^0/);
- }
- close(MYINPUTFILE);
- if (!$bDot && $bOldDot) {print "\n";}
- if ($bDot) {print "."; STDOUT->flush;}
- else {print "$from copied to $to\n";}
- $bOldDot = $bDot;
- }
- else { ## xcopy failed
- if (!exists $file->{notrequired}) {
- if ($bDot) {print "\n";}
- die "Fatal -- Copy of $from to $to failed";
- }
- } ## End xcopy succeed or fail
- } ## End not dummy entry nor ignored
- }
- $i++;
- }
- if ($bDot) {print "\n";}
- }
-
-return 1;
+#!perl -w
+
+#use strict;
+use XML::Simple;
+use Data::Dumper;
+
+sub copyFiles {
+ local ($xml, $config) = @_;
+ local @odr = $config->{Config};
+ local @files = $xml->{Files};
+ # Check for includes:
+ if (exists $xml->{Files}->{Include}->{path}) {
+ my $includepath = $xml->{Files}->{Include}->{path};
+ print "Info -- Including files from $includepath\n";
+ my $savedDir = `cd`;
+ $savedDir =~ s/\n//g;
+ chdir $originalDir; ## Includes are relative to where we were invoked.
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ my $tmp = new XML::Simple;
+ my $includeXML = $tmp->XMLin($includepath);
+ chdir $savedDir;
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+
+ local $i = 0;
+ while ($includeXML->{File}[$i]) { ## Copy File entries from includeXML.
+ $files[0]->{File}[++$#{$files[0]->{File}}] = $includeXML->{File}[$i];
+ $i++;
+ }
+ delete $files->{Include};
+ }
+ ##++ Set up path substitution variables for use inside the copy loop:
+ # A path can contain a variable part, which will be handled here. If the variable part is
+ # the Always or BuildDependent tag, then the variable will be changed to the
+ # build-type-dependent PathFragment.
+ # If the variable part is the IgnoreTag, then the file will not be copied.
+ # If the variable part is %filestem%, it will be replaced with Config->FileStem->name.
+ my ($PathFragment, $BuildDependentTag, $IgnoreTag, $FileStemFragment, $fromRoot, $toRoot);
+ my $bPathTags = (exists $xml->{Config}->{DebugArea}) && (exists $xml->{Config}->{ReleaseArea});
+ my $bFileStem = (exists $xml->{Config}->{FileStem});
+
+ if ($odr->{debug}->{def}) { ## Debug build tags:
+ $PathFragment = $xml->{Config}->{DebugArea}->{value};
+ $BuildDependentTag = $xml->{Config}->{DebugTag}->{value};
+ $IgnoreTag = $xml->{Config}->{ReleaseTag}->{value};
+ }
+ else { ## Release build tags:
+ $PathFragment = $xml->{Config}->{ReleaseArea}->{value};
+ $BuildDependentTag = $xml->{Config}->{ReleaseTag}->{value};
+ $IgnoreTag = $xml->{Config}->{DebugTag}->{value};
+ }
+ my $AlwaysTag = $xml->{Config}->{AlwaysTag}->{value};
+ $FileStemFragment = $xml->{Config}->{FileStem}->{name};
+ $fromRoot = $xml->{Config}->{From}->{root};
+ $toRoot = $xml->{Config}->{To}->{root};
+ ##-- Set up path substitution variables for use inside the copy loop.
+ # For each file in the file list:
+ # Substitute any variable parts of the path name.
+ # Handle wildcards
+ # Copy
+
+ local $i = 0;
+ my $bOldDot = 1;
+ my $bDot = 0;
+ while ($files[0]->{File}[$i]) {
+
+ my ($name, $newname, $from, $to, $file);
+ $file = $files[0]->{File}->[$i];
+ $name = $file->{name};
+ if (exists $file->{newname}) {$newname = $file->{newname};}
+ else {$newname = $name;}
+ if ($name && (! exists $file->{ignore})) { ## Ignore or process this entry?
+ $from = "$fromRoot\\$file->{from}\\$name";
+ $to = "$toRoot\\$file->{to}\\$newname";
+ # Copy this file? Check for ignore tag [debug-only in release mode or vice versa].
+ if ( $bPathTags || $bFileStem || (index($from.$to, $IgnoreTag) <0) ) {
+ if ($bPathTags) { ## Apply PathTag substitutions:
+ $from =~ s/$AlwaysTag/$PathFragment/g;
+ $to =~ s/$AlwaysTag/$PathFragment/g;
+ $from =~ s/$BuildDependentTag/$PathFragment/g;
+ $to =~ s/$BuildDependentTag/$PathFragment/g;
+ }
+ if ($bFileStem) { ## FileStem substitution?
+ $from =~ s/%filestem%/$FileStemFragment/g;
+ $to =~ s/%filestem%/$FileStemFragment/g;
+ }
+ # %-DEBUG% substitution:
+ local $DebugFragment = ($odr->{debug}->{def}) ? "-DEBUG" : "";
+ $from =~ s/%\-DEBUG%/$DebugFragment/g;
+ $to =~ s/%\-DEBUG%/$DebugFragment/g;
+ $to =~ s/\*.*//; ## Truncate to path before any wildcard
+
+ my $bCopyOK = 1;
+ my $fromcheck = $from;
+ my $bRequired = ! (exists $file->{notrequired});
+ if ($name =~ /\*/) { ## Wildcard case
+ $fromcheck =~ s/\*.*//;
+ if ($bRequired && (! -d $fromcheck)) {
+ if ($bDot) {print "\n";}
+ die "Fatal -- Can't find $fromcheck";
+ }
+ $bCopyOK = !system("echo D | xcopy /D /F /Y /S $from $to > a.tmp 2>NUL");
+ }
+ else { ## Specific file case
+ if ($bRequired && (! -e $fromcheck)) {
+ if ($bDot) {print "\n";}
+ die "Fatal -- Can't find $fromcheck";
+ }
+ $bCopyOK = !system("echo F | xcopy /D /F /Y $from $to > a.tmp 2>NUL");
+ }
+
+ if ($bCopyOK) { ## xcopy OK - show progress
+ # To show progress when files aren't copied, print a string of dots.
+ open(MYINPUTFILE, "<a.tmp");
+ my(@lines) = <MYINPUTFILE>;
+ foreach $line (@lines) {
+ $bDot = ($line =~ /^0/);
+ }
+ close(MYINPUTFILE);
+ if (!$bDot && $bOldDot) {print "\n";}
+ if ($bDot) {print "."; STDOUT->flush;}
+ else {print "$from copied to $to\n";}
+ $bOldDot = $bDot;
+ }
+ else { ## xcopy failed
+ if (!exists $file->{notrequired}) {
+ if ($bDot) {print "\n";}
+ die "Fatal -- Copy of $from to $to failed";
+ }
+ } ## End xcopy succeed or fail
+ } ## End not dummy entry nor ignored
+ }
+ $i++;
+ }
+ if ($bDot) {print "\n";}
+ }
+
+return 1;
diff --git a/src/windows/build/copyfiles.xml b/src/windows/build/copyfiles.xml
index 2fb3747c8a..269b42ba95 100644
--- a/src/windows/build/copyfiles.xml
+++ b/src/windows/build/copyfiles.xml
@@ -1,218 +1,218 @@
-<?xml version="1.0" encoding="utf-8" ?>
- <Files>
- <!-- File from paths are relative to <src>\pismere\athena -->
- <!-- File to paths are relative to <src>\pismere\staging -->
- <File dummy="foo" /> <!-- Forces XML::Simple behavior -->
- <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->
-
- <!-- Build-dependent files (from release or debug build): -->
- <File name="netidmgr_version.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr"/>
- <File name="netidmgr.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="perfstat.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr"/>
- <File name="utils.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="sync.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="mstring.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="kplugin.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="kmq.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="kmm.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khuidefs.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khtracker.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khrescache.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khremote.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khprops.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khnewcred.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khmsgtypes.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khlist.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khhtlink.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="kherror.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="kherr.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khdefs.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khconfigui.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khalerts.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khactiondef.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="khaction.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="kcreddb.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="kconfig.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="hashtable.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
- <File name="nidmgr32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="xpprof32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="wshelp32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="loadfuncs.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="leashw32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="krbv4w32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="krbcc32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="krb5_32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="krb524.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="kclnt32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="gssapi32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="getopt.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="delaydlls.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="comerr32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
- <File name="netidmgr.exe" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\" to="\bin\i386\w2k" />
- <File name="nidmgr32.dll" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\" to="\bin\i386\w2k" />
- <File name="netidmgr.pdb" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\" to="\bin\i386\w2k" />
- <File name="nidmgr32.pdb" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\" to="\bin\i386\w2k" />
- <File name="kfwcpcc.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kfwlogon.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="netidmgr.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="nidmgr32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb4cred.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb5cred.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="mit2ms.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kdeltkt.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kcpytkt.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="xpprof32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="wshelp32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="ms2mit.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="leashw32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="leash32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="leash32.chm" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kpasswd.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kvno.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krbv4w32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krbcc32s.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krbcc32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="k5sprt32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb5_32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb524.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="klist.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kinit.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kdestroy.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kclnt32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="k524init.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="gssapi32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="gss-server.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="gss-client.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="gss.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="comerr32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kfwcpcc.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kfwlogon.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="netidmgr.chm" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="netidmgr.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="nidmgr32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb4cred_en_us.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb4cred.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb5cred_en_us.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb5cred.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="mit2ms.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kdeltkt.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kcpytkt.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="xpprof32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="wshelp32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="ms2mit.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="leashw32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="leash32.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kpasswd.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kvno.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krbv4w32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krbcc32s.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krbcc32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="k5sprt32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb5_32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="krb524.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="klist.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kinit.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kdestroy.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="kclnt32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="k524init.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="gssapi32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="gss-server.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="gss-client.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="gss.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="comerr32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
- <File name="netiddev.chm" from="..\target\bin\i386\%bldtype%\" to="\doc" />
-<!-- why copy twice? <File name="NetIddev.chm" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\doc\" to="\doc" newname="netiddev.chm" /> -->
-
- <!-- Build-INdependent files, always copied: -->
- <File name="relnotes.html" from="..\doc\kerberos\" to="\doc" />
- <File name="leash_userdoc.pdf" from="auth\leash\help\" to="\doc" />
- <File name="NetIdMgr.pdf" from="auth\krb5\src\windows\identity\doc\" to="\doc" newname="netidmgr_userdoc.pdf" />
- <File name="msi-deployment-guide.txt" from="auth\krb5\src\windows\installer\wix\" to="\doc" />
- <File name="*" from="auth\krb5\src\windows\identity\sample\templates\credprov\" to="\sample\templates\credprov\" />
- <File name="*" from="auth\krb5\src\windows\identity\sample\templates\credprov\images\" to="\sample\templates\credprov\images" />
- <File name="*" from="auth\krb5\src\windows\identity\sample\templates\credprov\lang\" to="\sample\templates\credprov\lang" />
- <File name="*" from="auth\krb5\src\windows\identity\sample\templates\credprov\lang\en_us\" to="\sample\templates\credprov\lang\en_us" />
- <File name="kclient.h" from="auth\krb4\kclient\include\" to="\inc\kclient" />
- <File name="kcmacerr.h" from="auth\krb4\kclient\include\" to="\inc\kclient" />
- <File name="com_err.h" from="auth\krb4\include\" to="\inc\krb4" />
- <File name="conf-pc.h" from="auth\krb4\include\" to="\inc\krb4" />
- <File name="conf.h" from="auth\krb4\include\" to="\inc\krb4" />
- <File name="des.h" from="auth\krb4\include\" to="\inc\krb4" />
- <File name="kadm_err.h" from="auth\krb4\include\" to="\inc\krb4" />
- <File name="krb.h" from="auth\krb4\include\" to="\inc\krb4" />
- <File name="krberr.h" from="auth\krb4\include\" to="\inc\krb4" />
- <File name="mit_copy.h" from="auth\krb4\include\" to="\inc\krb4" />
- <File name="osconf.h" from="auth\krb4\include\" to="\inc\krb4" />
- <File name="com_err.h" from="auth\krb5\src\include\" to="\inc\krb5" />
- <File name="krb5.h" from="auth\krb5\src\include\" to="\inc\krb5" />
- <File name="profile.h" from="auth\krb5\src\include\" to="\inc\krb5" />
- <File name="win-mac.h" from="auth\krb5\src\include\" to="\inc\krb5" />
- <File name="krb5.h" from="auth\krb5\src\include\krb5\" to="\inc\krb5\krb5" notrequired="true" />
- <File name="gssapi.h" from="auth\krb5\src\include\gssapi\" to="\inc\krb5\gssapi" />
- <File name="gssapi_generic.h" from="auth\krb5\src\include\gssapi\" to="\inc\krb5\gssapi" />
- <File name="gssapi_krb5.h" from="auth\krb5\src\include\gssapi\" to="\inc\krb5\gssapi" />
- <File name="des.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
- <File name="kadm_err.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
- <File name="krb_err.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
- <File name="krb.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
- <File name="mit-copyright.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
- <File name="cacheapi.h" from="auth\krbcc\include\" to="\inc\krbcc" />
- <File name="leasherr.h" from="auth\leash\include\" to="\inc\leash" />
- <File name="leashinfo.h" from="auth\leash\include\" to="\inc\leash" />
- <File name="leashwin.h" from="auth\leash\include\" to="\inc\leash" />
- <File name="loadfuncs-afs.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs-afs36.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs-com_err.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs-krb.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs-krb5.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs-krb524.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs-leash.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs-lsa.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs-profile.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs-wshelper.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs.c" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="loadfuncs.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
- <File name="nameser.h" from="wshelper\include\arpa\" to="\inc\wshelper\arpa" />
- <File name="hesiod.h" from="wshelper\include\" to="\inc\wshelper" />
- <File name="mitwhich.h" from="wshelper\include\" to="\inc\wshelper" />
- <File name="resolv.h" from="wshelper\include\" to="\inc\wshelper" />
- <File name="wshelper.h" from="wshelper\include\" to="\inc\wshelper" />
- <File name="kfw-fixed.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="kfw.ico" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="kfw.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="KfWConfigPage.ini" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="KfWConfigPage2.ini" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="killer.cpp" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="licenses.rtf" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="site-local-tagged.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="nsi-includes-tagged.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="utils.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
- <File name="msi-deployment-guide.txt" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
- <File name="config.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
- <File name="features.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
- <File name="files.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
- <File name="kfw.wxs" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
- <File name="Makefile" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
- <File name="property.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
- <File name="site-local-tagged.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
- <File name="bannrbmp.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="completi.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="custicon.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="dlgbmp.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="exclamic.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="info.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="insticon.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="new.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="removico.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="repairic.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="up.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
- <File name="custom.cpp" from="auth\krb5\src\windows\installer\wix\custom\" to="\install\wix\custom" />
- <File name="custom.h" from="auth\krb5\src\windows\installer\wix\custom\" to="\install\wix\custom" />
- <File name="config_1033.wxi" from="auth\krb5\src\windows\installer\wix\lang\" to="\install\wix\lang" />
- <File name="strings_1033.wxl" from="auth\krb5\src\windows\installer\wix\lang\" to="\install\wix\lang" />
- <File name="ui_1033.wxi" from="auth\krb5\src\windows\installer\wix\lang\" to="\install\wix\lang" />
- <File name="license.rtf" from="auth\krb5\src\windows\installer\wix\lang\" to="\install\wix\lang" />
- <File name="krb5.conf" from="auth\krb5\src\config-files\" to="\sample" newname="krb5.ini" />
- <File name="krb.con" from="auth\krb4\sample-config\" to="\sample" />
- <File name="krbrealm.con" from="auth\krb4\sample-config\" to="\sample" />
+<?xml version="1.0" encoding="utf-8" ?>
+ <Files>
+ <!-- File from paths are relative to <src>\pismere\athena -->
+ <!-- File to paths are relative to <src>\pismere\staging -->
+ <File dummy="foo" /> <!-- Forces XML::Simple behavior -->
+ <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->
+
+ <!-- Build-dependent files (from release or debug build): -->
+ <File name="netidmgr_version.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr"/>
+ <File name="netidmgr.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="perfstat.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr"/>
+ <File name="utils.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="sync.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="mstring.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="kplugin.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="kmq.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="kmm.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khuidefs.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khtracker.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khrescache.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khremote.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khprops.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khnewcred.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khmsgtypes.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khlist.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khhtlink.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="kherror.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="kherr.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khdefs.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khconfigui.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khalerts.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khactiondef.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="khaction.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="kcreddb.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="kconfig.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="hashtable.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\" to="\inc\netidmgr" />
+ <File name="nidmgr32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="xpprof32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="wshelp32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="loadfuncs.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="leashw32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="krbv4w32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="krbcc32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="krb5_32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="krb524.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="kclnt32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="gssapi32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="getopt.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="delaydlls.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="comerr32.lib" from="..\target\lib\i386\%bldtype%\" to="\lib\i386" />
+ <File name="netidmgr.exe" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\" to="\bin\i386\w2k" />
+ <File name="nidmgr32.dll" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\" to="\bin\i386\w2k" />
+ <File name="netidmgr.pdb" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\" to="\bin\i386\w2k" />
+ <File name="nidmgr32.pdb" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\" to="\bin\i386\w2k" />
+ <File name="kfwcpcc.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kfwlogon.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="netidmgr.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="nidmgr32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb4cred.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb5cred.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="mit2ms.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kdeltkt.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kcpytkt.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="xpprof32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="wshelp32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="ms2mit.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="leashw32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="leash32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="leash32.chm" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kpasswd.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kvno.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krbv4w32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krbcc32s.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krbcc32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="k5sprt32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb5_32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb524.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="klist.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kinit.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kdestroy.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kclnt32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="k524init.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="gssapi32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="gss-server.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="gss-client.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="gss.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="comerr32.pdb" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kfwcpcc.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kfwlogon.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="netidmgr.chm" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="netidmgr.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="nidmgr32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb4cred_en_us.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb4cred.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb5cred_en_us.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb5cred.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="mit2ms.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kdeltkt.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kcpytkt.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="xpprof32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="wshelp32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="ms2mit.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="leashw32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="leash32.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kpasswd.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kvno.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krbv4w32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krbcc32s.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krbcc32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="k5sprt32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb5_32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="krb524.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="klist.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kinit.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kdestroy.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="kclnt32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="k524init.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="gssapi32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="gss-server.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="gss-client.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="gss.exe" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="comerr32.dll" from="..\target\bin\i386\%bldtype%\" to="\bin\i386" />
+ <File name="netiddev.chm" from="..\target\bin\i386\%bldtype%\" to="\doc" />
+<!-- why copy twice? <File name="NetIddev.chm" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\doc\" to="\doc" newname="netiddev.chm" /> -->
+
+ <!-- Build-INdependent files, always copied: -->
+ <File name="relnotes.html" from="..\doc\kerberos\" to="\doc" />
+ <File name="leash_userdoc.pdf" from="auth\leash\help\" to="\doc" />
+ <File name="NetIdMgr.pdf" from="auth\krb5\src\windows\identity\doc\" to="\doc" newname="netidmgr_userdoc.pdf" />
+ <File name="msi-deployment-guide.txt" from="auth\krb5\src\windows\installer\wix\" to="\doc" />
+ <File name="*" from="auth\krb5\src\windows\identity\sample\templates\credprov\" to="\sample\templates\credprov\" />
+ <File name="*" from="auth\krb5\src\windows\identity\sample\templates\credprov\images\" to="\sample\templates\credprov\images" />
+ <File name="*" from="auth\krb5\src\windows\identity\sample\templates\credprov\lang\" to="\sample\templates\credprov\lang" />
+ <File name="*" from="auth\krb5\src\windows\identity\sample\templates\credprov\lang\en_us\" to="\sample\templates\credprov\lang\en_us" />
+ <File name="kclient.h" from="auth\krb4\kclient\include\" to="\inc\kclient" />
+ <File name="kcmacerr.h" from="auth\krb4\kclient\include\" to="\inc\kclient" />
+ <File name="com_err.h" from="auth\krb4\include\" to="\inc\krb4" />
+ <File name="conf-pc.h" from="auth\krb4\include\" to="\inc\krb4" />
+ <File name="conf.h" from="auth\krb4\include\" to="\inc\krb4" />
+ <File name="des.h" from="auth\krb4\include\" to="\inc\krb4" />
+ <File name="kadm_err.h" from="auth\krb4\include\" to="\inc\krb4" />
+ <File name="krb.h" from="auth\krb4\include\" to="\inc\krb4" />
+ <File name="krberr.h" from="auth\krb4\include\" to="\inc\krb4" />
+ <File name="mit_copy.h" from="auth\krb4\include\" to="\inc\krb4" />
+ <File name="osconf.h" from="auth\krb4\include\" to="\inc\krb4" />
+ <File name="com_err.h" from="auth\krb5\src\include\" to="\inc\krb5" />
+ <File name="krb5.h" from="auth\krb5\src\include\" to="\inc\krb5" />
+ <File name="profile.h" from="auth\krb5\src\include\" to="\inc\krb5" />
+ <File name="win-mac.h" from="auth\krb5\src\include\" to="\inc\krb5" />
+ <File name="krb5.h" from="auth\krb5\src\include\krb5\" to="\inc\krb5\krb5" notrequired="true" />
+ <File name="gssapi.h" from="auth\krb5\src\include\gssapi\" to="\inc\krb5\gssapi" />
+ <File name="gssapi_generic.h" from="auth\krb5\src\include\gssapi\" to="\inc\krb5\gssapi" />
+ <File name="gssapi_krb5.h" from="auth\krb5\src\include\gssapi\" to="\inc\krb5\gssapi" />
+ <File name="des.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
+ <File name="kadm_err.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
+ <File name="krb_err.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
+ <File name="krb.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
+ <File name="mit-copyright.h" from="auth\krb5\src\include\KerberosIV\" to="\inc\krb5\KerberosIV" />
+ <File name="cacheapi.h" from="auth\krbcc\include\" to="\inc\krbcc" />
+ <File name="leasherr.h" from="auth\leash\include\" to="\inc\leash" />
+ <File name="leashinfo.h" from="auth\leash\include\" to="\inc\leash" />
+ <File name="leashwin.h" from="auth\leash\include\" to="\inc\leash" />
+ <File name="loadfuncs-afs.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs-afs36.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs-com_err.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs-krb.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs-krb5.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs-krb524.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs-leash.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs-lsa.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs-profile.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs-wshelper.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs.c" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="loadfuncs.h" from="util\loadfuncs\" to="\inc\loadfuncs" />
+ <File name="nameser.h" from="wshelper\include\arpa\" to="\inc\wshelper\arpa" />
+ <File name="hesiod.h" from="wshelper\include\" to="\inc\wshelper" />
+ <File name="mitwhich.h" from="wshelper\include\" to="\inc\wshelper" />
+ <File name="resolv.h" from="wshelper\include\" to="\inc\wshelper" />
+ <File name="wshelper.h" from="wshelper\include\" to="\inc\wshelper" />
+ <File name="kfw-fixed.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="kfw.ico" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="kfw.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="KfWConfigPage.ini" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="KfWConfigPage2.ini" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="killer.cpp" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="licenses.rtf" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="site-local-tagged.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="nsi-includes-tagged.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="utils.nsi" from="auth\krb5\src\windows\installer\nsis\" to="\install\nsis" />
+ <File name="msi-deployment-guide.txt" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
+ <File name="config.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
+ <File name="features.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
+ <File name="files.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
+ <File name="kfw.wxs" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
+ <File name="Makefile" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
+ <File name="property.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
+ <File name="site-local-tagged.wxi" from="auth\krb5\src\windows\installer\wix\" to="\install\wix" />
+ <File name="bannrbmp.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="completi.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="custicon.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="dlgbmp.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="exclamic.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="info.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="insticon.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="new.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="removico.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="repairic.ico" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="up.bmp" from="auth\krb5\src\windows\installer\wix\Binary\" to="\install\wix\Binary" />
+ <File name="custom.cpp" from="auth\krb5\src\windows\installer\wix\custom\" to="\install\wix\custom" />
+ <File name="custom.h" from="auth\krb5\src\windows\installer\wix\custom\" to="\install\wix\custom" />
+ <File name="config_1033.wxi" from="auth\krb5\src\windows\installer\wix\lang\" to="\install\wix\lang" />
+ <File name="strings_1033.wxl" from="auth\krb5\src\windows\installer\wix\lang\" to="\install\wix\lang" />
+ <File name="ui_1033.wxi" from="auth\krb5\src\windows\installer\wix\lang\" to="\install\wix\lang" />
+ <File name="license.rtf" from="auth\krb5\src\windows\installer\wix\lang\" to="\install\wix\lang" />
+ <File name="krb5.conf" from="auth\krb5\src\config-files\" to="\sample" newname="krb5.ini" />
+ <File name="krb.con" from="auth\krb4\sample-config\" to="\sample" />
+ <File name="krbrealm.con" from="auth\krb4\sample-config\" to="\sample" />
</Files> \ No newline at end of file
diff --git a/src/windows/build/corebinaryfiles.xml b/src/windows/build/corebinaryfiles.xml
index bf51b0e90a..9fcf8aa3a1 100644
--- a/src/windows/build/corebinaryfiles.xml
+++ b/src/windows/build/corebinaryfiles.xml
@@ -1,85 +1,85 @@
-<?xml version="1.0" encoding="utf-8" ?>
- <Files>
- <!-- File from paths are relative to <src>/pismere. -->
- <!-- File to paths are relative to <out>. -->
- <File dummy="foo" /> <!-- Forces XML::Simple behavior -->
- <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->
-
- <File name="netidmgr_userdoc.pdf" from="staging\doc" to="doc" />
- <File name="leash_userdoc.pdf" from="staging\doc" to="doc" />
- <File name="relnotes.html" from="doc\kerberos" to="doc" />
-
- <File name="comerr32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="comerr32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="gss-client.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="gss-client.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="gss-server.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="gss-server.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="gss.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="gss.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="gssapi32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="gssapi32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="k524init.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="k524init.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="k5sprt32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="k5sprt32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kclnt32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kclnt32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kcpytkt.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kcpytkt.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kdeltkt.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kdeltkt.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kdestroy.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kdestroy.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kfwcpcc.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kfwcpcc.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kfwlogon.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kfwlogon.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kinit.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kinit.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="klist.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="klist.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kpasswd.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kpasswd.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb4cred.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb4cred.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb4cred_en_us.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb524.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb524.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb5cred.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb5cred.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb5cred_en_us.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb5_32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krb5_32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krbcc32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krbcc32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krbcc32s.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krbcc32s.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krbv4w32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="krbv4w32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kvno.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="kvno.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="leash32.chm" from="staging\bin\i386" to="\bin\i386\" />
- <File name="leash32.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="leash32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="leashw32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="leashw32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="mit2ms.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="mit2ms.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="ms2mit.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="ms2mit.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="netidmgr.chm" from="staging\bin\i386" to="\bin\i386\" />
- <File name="netidmgr.exe" from="staging\bin\i386" to="\bin\i386\" />
- <File name="netidmgr.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="nidmgr32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="nidmgr32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="wshelp32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="wshelp32.pdb" from="staging\bin\i386" to="\bin\i386\" />
- <File name="xpprof32.dll" from="staging\bin\i386" to="\bin\i386\" />
- <File name="xpprof32.pdb" from="staging\bin\i386" to="\bin\i386\" />
-
- <File name="netidmgr.exe" from="staging\bin\i386\w2k" to="\bin\i386\w2k" />
- <File name="netidmgr.pdb" from="staging\bin\i386\w2k" to="\bin\i386\w2k" />
- <File name="nidmgr32.dll" from="staging\bin\i386\w2k" to="\bin\i386\w2k" />
- <File name="nidmgr32.pdb" from="staging\bin\i386\w2k" to="\bin\i386\w2k" />
+<?xml version="1.0" encoding="utf-8" ?>
+ <Files>
+ <!-- File from paths are relative to <src>/pismere. -->
+ <!-- File to paths are relative to <out>. -->
+ <File dummy="foo" /> <!-- Forces XML::Simple behavior -->
+ <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->
+
+ <File name="netidmgr_userdoc.pdf" from="staging\doc" to="doc" />
+ <File name="leash_userdoc.pdf" from="staging\doc" to="doc" />
+ <File name="relnotes.html" from="doc\kerberos" to="doc" />
+
+ <File name="comerr32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="comerr32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="gss-client.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="gss-client.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="gss-server.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="gss-server.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="gss.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="gss.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="gssapi32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="gssapi32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="k524init.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="k524init.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="k5sprt32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="k5sprt32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kclnt32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kclnt32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kcpytkt.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kcpytkt.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kdeltkt.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kdeltkt.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kdestroy.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kdestroy.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kfwcpcc.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kfwcpcc.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kfwlogon.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kfwlogon.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kinit.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kinit.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="klist.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="klist.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kpasswd.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kpasswd.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb4cred.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb4cred.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb4cred_en_us.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb524.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb524.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb5cred.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb5cred.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb5cred_en_us.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb5_32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krb5_32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krbcc32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krbcc32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krbcc32s.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krbcc32s.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krbv4w32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="krbv4w32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kvno.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="kvno.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="leash32.chm" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="leash32.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="leash32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="leashw32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="leashw32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="mit2ms.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="mit2ms.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="ms2mit.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="ms2mit.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="netidmgr.chm" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="netidmgr.exe" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="netidmgr.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="nidmgr32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="nidmgr32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="wshelp32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="wshelp32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="xpprof32.dll" from="staging\bin\i386" to="\bin\i386\" />
+ <File name="xpprof32.pdb" from="staging\bin\i386" to="\bin\i386\" />
+
+ <File name="netidmgr.exe" from="staging\bin\i386\w2k" to="\bin\i386\w2k" />
+ <File name="netidmgr.pdb" from="staging\bin\i386\w2k" to="\bin\i386\w2k" />
+ <File name="nidmgr32.dll" from="staging\bin\i386\w2k" to="\bin\i386\w2k" />
+ <File name="nidmgr32.pdb" from="staging\bin\i386\w2k" to="\bin\i386\w2k" />
</Files> \ No newline at end of file
diff --git a/src/windows/build/css/main-action(1).css b/src/windows/build/css/main-action(1).css
index a2302bc322..2a1cfc0d9e 100644
--- a/src/windows/build/css/main-action(1).css
+++ b/src/windows/build/css/main-action(1).css
@@ -1,54 +1,54 @@
-.sidebar {
- BACKGROUND-COLOR: #f0f0f0
-}
-#logodiv {
- PADDING-RIGHT: 15px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; TEXT-ALIGN: center
-}
-#menu {
- WIDTH: 150px
-}
-.leftnav H1 {
- PADDING-RIGHT: 4px; BORDER-TOP: white 1px solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: 11px; PADDING-BOTTOM: 4px; MARGIN: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #ccc 1px solid
-}
-.leftnav H5 {
- PADDING-RIGHT: 0px; BORDER-TOP: white 1px solid; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 11px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #ccc 1px solid
-}
-.leftnav H5 A {
- BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 5px; DISPLAY: block; PADDING-LEFT: 5px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none
-}
-.leftnav H5 A:hover {
- BORDER-TOP-WIDTH: 0px; DISPLAY: block; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BACKGROUND-COLOR: white; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none
-}
-.leftnav UL {
- PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
-}
-.leftnav LI {
- PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
-}
-.leftnav LI A {
- PADDING-RIGHT: 2px; DISPLAY: block; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 0px; COLOR: white; PADDING-TOP: 2px; TEXT-DECORATION: none
-}
-.leftnav LI A.current {
- COLOR: white; BACKGROUND-COLOR: #003366
-}
-.leftnav LI A:active {
- COLOR: white
-}
-.leftnav LI A:visited {
- COLOR: white
-}
-.leftnav LI A:hover {
- COLOR: white; BACKGROUND-COLOR: #003366
-}
-.leftnav LI.current {
- BACKGROUND-COLOR: #487bb7
-}
-.leftnav LI.current A {
- COLOR: #3c78b5
-}
-#PageContent {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #fff; TEXT-ALIGN: left
-}
-H1 {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 22px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; MARGIN: 27px 0px 4px; COLOR: #660000; PADDING-TOP: 0px; FONT-FAMILY: Arial, sans-serif; BACKGROUND-COLOR: #fff
-}
+.sidebar {
+ BACKGROUND-COLOR: #f0f0f0
+}
+#logodiv {
+ PADDING-RIGHT: 15px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; TEXT-ALIGN: center
+}
+#menu {
+ WIDTH: 150px
+}
+.leftnav H1 {
+ PADDING-RIGHT: 4px; BORDER-TOP: white 1px solid; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: 11px; PADDING-BOTTOM: 4px; MARGIN: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #ccc 1px solid
+}
+.leftnav H5 {
+ PADDING-RIGHT: 0px; BORDER-TOP: white 1px solid; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 11px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #ccc 1px solid
+}
+.leftnav H5 A {
+ BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 5px; DISPLAY: block; PADDING-LEFT: 5px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none
+}
+.leftnav H5 A:hover {
+ BORDER-TOP-WIDTH: 0px; DISPLAY: block; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BACKGROUND-COLOR: white; BORDER-RIGHT-WIDTH: 0px; TEXT-DECORATION: none
+}
+.leftnav UL {
+ PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; LIST-STYLE-TYPE: none
+}
+.leftnav LI {
+ PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px
+}
+.leftnav LI A {
+ PADDING-RIGHT: 2px; DISPLAY: block; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 0px; COLOR: white; PADDING-TOP: 2px; TEXT-DECORATION: none
+}
+.leftnav LI A.current {
+ COLOR: white; BACKGROUND-COLOR: #003366
+}
+.leftnav LI A:active {
+ COLOR: white
+}
+.leftnav LI A:visited {
+ COLOR: white
+}
+.leftnav LI A:hover {
+ COLOR: white; BACKGROUND-COLOR: #003366
+}
+.leftnav LI.current {
+ BACKGROUND-COLOR: #487bb7
+}
+.leftnav LI.current A {
+ COLOR: #3c78b5
+}
+#PageContent {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #fff; TEXT-ALIGN: left
+}
+H1 {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 22px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; MARGIN: 27px 0px 4px; COLOR: #660000; PADDING-TOP: 0px; FONT-FAMILY: Arial, sans-serif; BACKGROUND-COLOR: #fff
+}
diff --git a/src/windows/build/css/main-action.css b/src/windows/build/css/main-action.css
index e34af6a260..e08c50ecd1 100644
--- a/src/windows/build/css/main-action.css
+++ b/src/windows/build/css/main-action.css
@@ -1,1032 +1,1032 @@
-BODY {
- FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
-}
-P {
- FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
-}
-TD {
- FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
-}
-TABLE {
- FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
-}
-TR {
- FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
-}
-.bodytext {
- FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
-}
-.stepfield {
- FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
-}
-#PageContent {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 20px; MARGIN: 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #fff; TEXT-ALIGN: left
-}
-BODY {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #ffffff; TEXT-ALIGN: center
-}
-.monospaceInput {
- FONT: 12px monospace
-}
-.wiki-content P {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 16px 0px; PADDING-TOP: 0px
-}
-.commentblock P {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 16px 0px; PADDING-TOP: 0px
-}
-.wiki-content-preview {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 5px
-}
-UL {
- MARGIN-TOP: 2px; MARGIN-BOTTOM: 2px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
-}
-OL {
- MARGIN-TOP: 2px; MARGIN-BOTTOM: 2px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
-}
-PRE {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 5px 5px 5px 15px; PADDING-TOP: 0px; TEXT-ALIGN: left
-}
-.helpheading {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 4px; MARGIN: 10px 0px 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #d0d9bd
-}
-.helpcontent {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 20px; PADDING-TOP: 4px; BACKGROUND-COLOR: #f5f7f1
-}
-.code {
- BORDER-RIGHT: #3c78b5 1px dashed; BORDER-TOP: #3c78b5 1px dashed; FONT-SIZE: 11px; MARGIN: 10px; BORDER-LEFT: #3c78b5 1px dashed; LINE-HEIGHT: 13px; BORDER-BOTTOM: #3c78b5 1px dashed; FONT-FAMILY: Courier
-}
-.focusedComment {
- BACKGROUND: #ffffce
-}
-.commentBox {
- BORDER-RIGHT: #bbb 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #bbb 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 5px 0px; BORDER-LEFT: #bbb 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #bbb 1px solid
-}
-.focusedComment {
- BORDER-RIGHT: #bbb 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #bbb 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 5px 0px; BORDER-LEFT: #bbb 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #bbb 1px solid
-}
-.codeHeader {
- PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px dashed; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
-}
-.codeContent {
- PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: left
-}
-.preformatted {
- BORDER-RIGHT: #3c78b5 1px dashed; BORDER-TOP: #3c78b5 1px dashed; FONT-SIZE: 11px; MARGIN: 10px; BORDER-LEFT: #3c78b5 1px dashed; LINE-HEIGHT: 13px; BORDER-BOTTOM: #3c78b5 1px dashed; FONT-FAMILY: Courier
-}
-.preformattedHeader {
- PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px dashed; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
-}
-.preformattedContent {
- PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BACKGROUND-COLOR: #eeefcc
-}
-.panel {
- BORDER-RIGHT: #3c78b5 1px dashed; BORDER-TOP: #3c78b5 1px dashed; MARGIN: 0px 10px 10px; BORDER-LEFT: #3c78b5 1px dashed; BORDER-BOTTOM: #3c78b5 1px dashed
-}
-.panelHeader {
- PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px dashed; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
-}
-.panelContent {
- PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #eeefcc
-}
-.anonymousAlert {
- BORDER-RIGHT: red 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: red 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 10px; MARGIN: 4px; BORDER-LEFT: red 1px dashed; LINE-HEIGHT: 13px; PADDING-TOP: 10px; BORDER-BOTTOM: red 1px dashed; BACKGROUND-COLOR: #eeefcc
-}
-.lockAlert {
- BORDER-RIGHT: red 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: red 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 10px; MARGIN: 4px; BORDER-LEFT: red 1px dashed; WIDTH: 50%; LINE-HEIGHT: 13px; PADDING-TOP: 10px; BORDER-BOTTOM: red 1px dashed; BACKGROUND-COLOR: #eeefcc
-}
-.code-keyword {
- COLOR: #000091
-}
-.code-object {
- COLOR: #910091
-}
-.code-quote {
- COLOR: #009100
-}
-.code-comment {
- COLOR: #808080
-}
-.code-xml .code-keyword {
- FONT-WEIGHT: bold
-}
-.code-tag {
- COLOR: #000091
-}
-.breadcrumbs {
- BORDER-RIGHT: #3c78b5 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: 3px; BORDER-LEFT: #3c78b5 0px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
-}
-.navmenu {
- BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid
-}
-.menuheading {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; PADDING-TOP: 4px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
-}
-.menuitems {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 20px; PADDING-TOP: 4px
-}
-.rightpanel {
- BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid
-}
-#helpheading {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 4px; MARGIN: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #d0d9bd; TEXT-ALIGN: left
-}
-#helpcontent {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px; BACKGROUND-COLOR: #f5f7f1
-}
-.helptab-unselected {
- PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #f5f7f1
-}
-.helptab-selected {
- PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #d0d9bd
-}
-.helptabs {
- PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 0px; PADDING-TOP: 5px; BACKGROUND-COLOR: #f5f7f1
-}
-.infopanel-heading {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; PADDING-TOP: 4px
-}
-.pagebody {
-
-}
-.pageheader {
- PADDING-RIGHT: 5px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 1px solid
-}
-.pagetitle {
- FONT-WEIGHT: bold; FONT-SIZE: 22px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
-}
-.newpagetitle {
- COLOR: #ccc! important
-}
-.steptitle {
- FONT-WEIGHT: bold; FONT-SIZE: 18px; MARGIN-BOTTOM: 7px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
-}
-.substeptitle {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: 12px; PADDING-BOTTOM: 1px; MARGIN: 2px 4px 4px; COLOR: #003366; PADDING-TOP: 2px; FONT-FAMILY: Arial, sans-serif
-}
-.stepdesc {
- MARGIN-TOP: 7px; FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN-BOTTOM: 7px; COLOR: #666666; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
-}
-.steplabel {
- FONT-WEIGHT: bold; FLOAT: left; WIDTH: 15%; COLOR: black; MARGIN-RIGHT: 4px; TEXT-ALIGN: right
-}
-.stepfield {
- PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 5px; PADDING-TOP: 5px
-}
-.submitButtons {
- MARGIN-TOP: 5px; TEXT-ALIGN: right
-}
-.formtitle {
- FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
-}
-.sectionbottom {
- BORDER-BOTTOM: #3c78b5 1px solid
-}
-.topRow {
- BORDER-TOP: #3c78b5 2px solid
-}
-.tabletitle {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 14px; PADDING-BOTTOM: 2px; MARGIN: 8px 4px 2px 0px; COLOR: #003366; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 2px solid; FONT-FAMILY: Arial, sans-serif
-}
-.pagesubheading {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 10px; PADDING-BOTTOM: 5px; COLOR: #666666; PADDING-TOP: 0px
-}
-HR {
-
-}
-A:link {
- COLOR: #003366
-}
-A:visited {
- COLOR: #003366
-}
-A:active {
- COLOR: #003366
-}
-A:hover {
- COLOR: #003366
-}
-H1 A:link {
- TEXT-DECORATION: none
-}
-H1 A:visited {
- TEXT-DECORATION: none
-}
-H1 A:active {
- TEXT-DECORATION: none
-}
-H1 A:hover {
- BORDER-BOTTOM: #003366 1px dotted
-}
-UNKNOWN {
- MARGIN-TOP: 3px
-}
-.logocell {
- PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px
-}
-INPUT {
- FONT-SIZE: 11px; COLOR: #000000; FONT-FAMILY: verdana, geneva, arial, sans-serif
-}
-TEXTAREA {
- FONT-SIZE: 11px; COLOR: #333333; FONT-FAMILY: verdana, geneva, arial, sans-serif
-}
-TEXTAREA.editor {
- FONT-SIZE: 11px; COLOR: #333333; FONT-FAMILY: verdana, geneva, arial, sans-serif
-}
-.spacenametitle-printable {
- MARGIN: 0px; FONT: 100 20px/25px Impact, Arial, Helvetica; COLOR: #999999
-}
-.spacenametitle-printable A {
- COLOR: #999999; TEXT-DECORATION: none
-}
-.spacenametitle-printable A:visited {
- COLOR: #999999; TEXT-DECORATION: none
-}
-.blogDate {
- FONT-WEIGHT: bold; COLOR: black; TEXT-DECORATION: none
-}
-.blogSurtitle {
- BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 3px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px solid
-}
-.blogHeading {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 20px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: normal; PADDING-TOP: 0px
-}
-.blogHeading A {
- COLOR: black; TEXT-DECORATION: none
-}
-.endsection {
- MARGIN-TOP: 10px; COLOR: #666666; align: right
-}
-.endsectionleftnav {
- MARGIN-TOP: 10px; COLOR: #666666; align: right
-}
-H1 {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 24px; PADDING-BOTTOM: 2px; MARGIN: 36px 0px 4px; COLOR: #003366; LINE-HEIGHT: normal; PADDING-TOP: 2px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
-}
-H2 {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 18px; PADDING-BOTTOM: 2px; MARGIN: 27px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
-}
-H3 {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 14px; PADDING-BOTTOM: 2px; MARGIN: 21px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
-}
-H4 {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 12px; PADDING-BOTTOM: 2px; MARGIN: 18px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
-}
-H4.search {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: normal; FONT-SIZE: 12px; PADDING-BOTTOM: 4px; MARGIN: 18px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 4px; BACKGROUND-COLOR: #eeefcc
-}
-H5 {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 10px; PADDING-BOTTOM: 2px; MARGIN: 14px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
-}
-H6 {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 8px; PADDING-BOTTOM: 2px; MARGIN: 14px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
-}
-.smallfont {
- FONT-SIZE: 10px
-}
-.descfont {
- FONT-SIZE: 10px; COLOR: #666666
-}
-.smallerfont {
- FONT-SIZE: 9px
-}
-.smalltext {
- FONT-SIZE: 10px; COLOR: #666666
-}
-.smalltext A {
- COLOR: #666666
-}
-.smalltext-blue {
- FONT-SIZE: 10px; COLOR: #3c78b5
-}
-.surtitle {
- FONT-SIZE: 14px; MARGIN-BOTTOM: 5px; MARGIN-LEFT: 1px; COLOR: #666666
-}
-.navItemOver {
- FONT-WEIGHT: bold; FONT-SIZE: 10px; CURSOR: pointer; COLOR: #ffffff; BACKGROUND-COLOR: #003366; voice-family: inherit
-}
-.navItemOver A {
- COLOR: #ffffff; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none
-}
-.navItemOver A:visited {
- COLOR: #ffffff; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none
-}
-.navItemOver A:hover {
- COLOR: #ffffff; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none
-}
-.navItem {
- FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #ffffff; BACKGROUND-COLOR: #3c78b5
-}
-.navItem A {
- COLOR: #ffffff; TEXT-DECORATION: none
-}
-.navItem A:hover {
- COLOR: #ffffff; TEXT-DECORATION: none
-}
-.navItem A:visited {
- COLOR: #ffffff; TEXT-DECORATION: none
-}
-DIV.padded {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px
-}
-DIV.thickPadded {
- PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px
-}
-H3.macrolibrariestitle {
- MARGIN: 0px
-}
-DIV.centered {
- MARGIN: 10px; TEXT-ALIGN: center
-}
-DIV.centered TABLE {
- MARGIN: 0px auto; TEXT-ALIGN: left
-}
-.tableview TABLE {
- MARGIN: 0px
-}
-.tableview TH {
- PADDING-RIGHT: 0px; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; COLOR: #003366; PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 2px solid; TEXT-ALIGN: left
-}
-.tableview TD {
- BORDER-RIGHT: #ccc 0px solid; PADDING-RIGHT: 10px; BORDER-TOP: #ccc 0px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 4px; MARGIN: 0px; BORDER-LEFT: #ccc 0px solid; PADDING-TOP: 4px; BORDER-BOTTOM: #ccc 1px solid; TEXT-ALIGN: left
-}
-.grid {
- MARGIN: 2px 0px 5px; BORDER-COLLAPSE: collapse
-}
-.grid TH {
- BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 2px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid; TEXT-ALIGN: center
-}
-.grid TD {
- BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid
-}
-.gridHover {
- BACKGROUND-COLOR: #f9f9f9
-}
-TD.infocell {
- BACKGROUND-COLOR: #eeefcc
-}
-.label {
- FONT-WEIGHT: bold; COLOR: #003366
-}
-LABEL {
- FONT-WEIGHT: bold; COLOR: #003366
-}
-.error {
- BACKGROUND-COLOR: #fcc
-}
-.errorBox {
- BORDER-RIGHT: #c00 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #c00 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px; BORDER-LEFT: #c00 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #c00 1px solid; BACKGROUND-COLOR: #fcc
-}
-.errorMessage {
- COLOR: #c00
-}
-.success {
- BACKGROUND-COLOR: #dfd
-}
-.successBox {
- BORDER-RIGHT: #090 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #090 1px solid; MARGIN-TOP: 5px; PADDING-LEFT: 5px; MARGIN-BOTTOM: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #090 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #090 1px solid; BACKGROUND-COLOR: #dfd
-}
-BLOCKQUOTE {
- PADDING-RIGHT: 10px; PADDING-LEFT: 10px; MARGIN-LEFT: 5px; BORDER-LEFT: #3c78b5 1px solid; MARGIN-RIGHT: 0px
-}
-TABLE.confluenceTable {
- MARGIN: 5px; BORDER-COLLAPSE: collapse
-}
-TABLE.confluenceTable TD.confluenceTd {
- BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid
-}
-TABLE.confluenceTable TH.confluenceTh {
- BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
-}
-TD.confluenceTd {
- BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid
-}
-TH.confluenceTh {
- BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
-}
-DIV.small {
- FONT-SIZE: 9px
-}
-H1.pagename {
- MARGIN-TOP: 0px
-}
-IMG.inline {
-
-}
-.loginform {
- BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; MARGIN: 5px; BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid
-}
-.previewnote {
- FONT-SIZE: 11px; COLOR: red; TEXT-ALIGN: center
-}
-.previewcontent {
- BACKGROUND: #e0e0e0
-}
-.messagecontent {
- BACKGROUND: #e0e0e0
-}
-.conflictnote {
-
-}
-.createlink {
- COLOR: maroon
-}
-A.createlink {
- COLOR: maroon
-}
-.templateparameter {
- FONT-SIZE: 9px; COLOR: darkblue
-}
-.diffadded {
- PADDING-RIGHT: 1px; PADDING-LEFT: 4px; BACKGROUND: #ddffdd; PADDING-BOTTOM: 1px; BORDER-LEFT: darkgreen 4px solid; PADDING-TOP: 1px
-}
-.diffdeleted {
- PADDING-RIGHT: 1px; PADDING-LEFT: 4px; BACKGROUND: #ffdddd; PADDING-BOTTOM: 1px; BORDER-LEFT: darkred 4px solid; COLOR: #999; PADDING-TOP: 1px
-}
-.diffnochange {
- PADDING-RIGHT: 1px; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: lightgrey 4px solid; PADDING-TOP: 1px
-}
-.differror {
- BACKGROUND: brown
-}
-.diff {
- FONT-SIZE: 12px; LINE-HEIGHT: 14px; FONT-FAMILY: lucida console, courier new, fixed-width
-}
-.diffaddedchars {
- FONT-WEIGHT: bolder; BACKGROUND-COLOR: #99ff99
-}
-.diffremovedchars {
- FONT-WEIGHT: bolder; BACKGROUND-COLOR: #ff9999; TEXT-DECORATION: line-through
-}
-.greybackground {
- BACKGROUND: #eeefcc
-}
-.greybox {
- BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px solid
-}
-.borderedGreyBox {
- BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cccccc 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeefcc
-}
-.greyboxfilled {
- BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 3px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px solid
-}
-.navBackgroundBox {
- PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 22px; BACKGROUND: #3c78b5; PADDING-BOTTOM: 5px; COLOR: white; PADDING-TOP: 5px; FONT-FAMILY: Arial, sans-serif; TEXT-DECORATION: none
-}
-.previewBoxTop {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px 0px 0px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 0px solid; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
-}
-.previewContent {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #3c78b5 0px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 0px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #3c78b5 0px solid; BACKGROUND-COLOR: #fff
-}
-.previewBoxBottom {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #3c78b5 0px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 0px 0px 5px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
-}
-.functionbox {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
-}
-.functionbox-greyborder {
- BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px solid; BACKGROUND-COLOR: #eeefcc
-}
-.search-highlight {
- BACKGROUND-COLOR: #ffffcc
-}
-.rowNormal {
- BACKGROUND-COLOR: #ffffff
-}
-.rowAlternate {
- BACKGROUND-COLOR: #f7f7f7
-}
-.rowAlternateNoBottomColor {
- BACKGROUND-COLOR: #f7f7f7
-}
-.rowAlternateNoBottomNoColor {
-
-}
-.rowAlternateNoBottomColor TD {
- BORDER-BOTTOM-WIDTH: 0px
-}
-.rowAlternateNoBottomNoColor TD {
- BORDER-BOTTOM-WIDTH: 0px
-}
-.rowHighlight {
- BACKGROUND-COLOR: #eeefcc
-}
-TD.greenbar {
- BORDER-RIGHT: #9c9c9c 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #9c9c9c 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #00df00; PADDING-BOTTOM: 0px; BORDER-LEFT: #9c9c9c 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #9c9c9c 1px solid
-}
-TD.redbar {
- BORDER-RIGHT: #9c9c9c 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #9c9c9c 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #df0000; PADDING-BOTTOM: 0px; BORDER-LEFT: #9c9c9c 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #9c9c9c 1px solid
-}
-TD.darkredbar {
- BORDER-RIGHT: #9c9c9c 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #9c9c9c 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #af0000; PADDING-BOTTOM: 0px; BORDER-LEFT: #9c9c9c 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #9c9c9c 1px solid
-}
-TR.testpassed {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
-}
-TR.testfailed {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
-}
-.toolbar {
- MARGIN: 0px; BORDER-COLLAPSE: collapse
-}
-.toolbar TD {
- BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ccc 1px solid; COLOR: #ccc; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid
-}
-TD.noformatting {
- BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: 0px; TEXT-ALIGN: center
-}
-.commentblock {
- MARGIN: 12px 0px
-}
-.license-eval {
- BORDER-TOP: #bbbbbb 1px solid; FONT-SIZE: 10px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: center
-}
-.license-none {
- BORDER-TOP: #bbbbbb 1px solid; FONT-SIZE: 10px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: center
-}
-.license-nonprofit {
- BORDER-TOP: #bbbbbb 1px solid; FONT-SIZE: 10px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: center
-}
-.license-eval {
- BACKGROUND-COLOR: #ffcccc
-}
-.license-none {
- BACKGROUND-COLOR: #ffcccc
-}
-.license-eval B {
- COLOR: #990000
-}
-.license-none B {
- COLOR: #990000
-}
-.license-nonprofit {
- BACKGROUND-COLOR: #ffffff
-}
-.bottomshadow {
- BACKGROUND-IMAGE: url(/confluence/images/border/border_bottom.gif); BACKGROUND-REPEAT: repeat-x; HEIGHT: 12px
-}
-.navmenu .operations LI {
- PADDING-LEFT: 0px; MARGIN-LEFT: 0px; LIST-STYLE-TYPE: none
-}
-.navmenu .operations UL {
- PADDING-LEFT: 0px; MARGIN-LEFT: 0px; LIST-STYLE-TYPE: none
-}
-.navmenu .operations UL {
- MARGIN-BOTTOM: 9px
-}
-.navmenu .label {
-
-}
-.toolbar DIV {
- DISPLAY: none
-}
-.toolbar .label {
- DISPLAY: none
-}
-.toolbar .operations {
- DISPLAY: block
-}
-.toolbar .operations UL {
- DISPLAY: inline; PADDING-LEFT: 0px; MARGIN-LEFT: 10px; LIST-STYLE-TYPE: none
-}
-.toolbar .operations LI {
- DISPLAY: inline; LIST-STYLE-TYPE: none
-}
-#foldertab {
- PADDING-RIGHT: 0px; PADDING-LEFT: 8px; PADDING-BOTTOM: 3px; FONT: bold 11px Verdana, sans-serif; MARGIN-LEFT: 0px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px solid
-}
-#foldertab LI {
- DISPLAY: inline; MARGIN: 0px; LIST-STYLE-TYPE: none
-}
-#foldertab LI A {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 0.5em; BACKGROUND: #3c78b5; PADDING-BOTTOM: 3px; MARGIN-LEFT: 3px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px; TEXT-DECORATION: none
-}
-#foldertab LI A:link {
- COLOR: #ffffff
-}
-#foldertab LI A:visited {
- COLOR: #ffffff
-}
-#foldertab LI A:hover {
- BORDER-LEFT-COLOR: #003366; BACKGROUND: #003366; BORDER-BOTTOM-COLOR: #003366; COLOR: #ffffff; BORDER-TOP-COLOR: #003366; BORDER-RIGHT-COLOR: #003366
-}
-#foldertab LI A.current {
- BACKGROUND: white; COLOR: black; BORDER-BOTTOM: white 1px solid
-}
-#foldertab LI A.current:link {
- COLOR: black
-}
-#foldertab LI A.current:visited {
- COLOR: black
-}
-#foldertab LI A.current:hover {
- BACKGROUND: white; COLOR: black; BORDER-BOTTOM: white 1px solid
-}
-UL#squaretab {
- PADDING-LEFT: 0px; FONT: bold 8px Verdana, sans-serif; MARGIN-LEFT: 0px; WHITE-SPACE: nowrap
-}
-#squaretab LI {
- DISPLAY: inline; LIST-STYLE-TYPE: none
-}
-#squaretab A {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #3c78b5 1px solid
-}
-#squaretab A:link {
- COLOR: #fff; BACKGROUND-COLOR: #3c78b5; TEXT-DECORATION: none
-}
-#squaretab A:visited {
- COLOR: #fff; BACKGROUND-COLOR: #3c78b5; TEXT-DECORATION: none
-}
-#squaretab A:hover {
- BORDER-LEFT-COLOR: #003366; BORDER-BOTTOM-COLOR: #003366; COLOR: #ffffff; BORDER-TOP-COLOR: #003366; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none; BORDER-RIGHT-COLOR: #003366
-}
-#squaretab LI A#current {
- BACKGROUND: white; COLOR: black
-}
-.blogcalendar {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: normal; FONT-SIZE: x-small; PADDING-BOTTOM: 2px; LINE-HEIGHT: 140%; PADDING-TOP: 2px; FONT-FAMILY: verdana, arial, sans-serif
-}
-TABLE.blogcalendar {
- BORDER-RIGHT: #3c78b5 1px solid; BORDER-TOP: #3c78b5 1px solid; BORDER-LEFT: #3c78b5 1px solid; BORDER-BOTTOM: #3c78b5 1px solid
-}
-.blogcalendar TH.calendarhead {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: x-small; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; COLOR: #ffffff; PADDING-TOP: 2px; LETTER-SPACING: 0.3em; BACKGROUND-COLOR: #3c78b5
-}
-A.calendarhead {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: x-small; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; COLOR: #ffffff; PADDING-TOP: 2px; LETTER-SPACING: 0.3em; BACKGROUND-COLOR: #3c78b5
-}
-.calendarhead:visited {
- COLOR: white
-}
-.calendarhead:active {
- COLOR: white
-}
-.calendarhead:hover {
- COLOR: white
-}
-.blogcalendar TH {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: x-small; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
-}
-.blogcalendar TD {
- FONT-WEIGHT: normal; FONT-SIZE: x-small
-}
-.searchGroup {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 10px; PADDING-TOP: 0px
-}
-.searchGroupHeading {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: 10px; PADDING-BOTTOM: 1px; COLOR: #ffffff; PADDING-TOP: 2px; BACKGROUND-COLOR: #3c78b5
-}
-.searchItem {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; PADDING-TOP: 1px
-}
-.searchItemSelected {
- PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; BACKGROUND: #ddd; PADDING-BOTTOM: 1px; PADDING-TOP: 1px
-}
-.permissionHeading {
- BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; FONT-SIZE: 16px; BORDER-LEFT: 0px solid; BORDER-BOTTOM: #bbb 1px solid; TEXT-ALIGN: left
-}
-.permissionTab {
- BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; FONT-SIZE: 10px; BACKGROUND: #3c78b5; BORDER-LEFT: 1px solid; COLOR: #ffffff; BORDER-BOTTOM: 0px solid
-}
-.permissionSuperTab {
- BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BACKGROUND: #003366; BORDER-LEFT: 1px solid; COLOR: #ffffff; BORDER-BOTTOM: 0px solid
-}
-.permissionCell {
- BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BORDER-LEFT: #bbb 1px solid; BORDER-BOTTOM: 0px solid
-}
-.warningPanel {
- BORDER-RIGHT: #f0c000 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #f0c000 1px solid; PADDING-LEFT: 8px; BACKGROUND: #ffffce; PADDING-BOTTOM: 8px; MARGIN: 10px; BORDER-LEFT: #f0c000 1px solid; PADDING-TOP: 8px; BORDER-BOTTOM: #f0c000 1px solid
-}
-.alertPanel {
- BORDER-RIGHT: #c00 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #c00 1px solid; PADDING-LEFT: 8px; BACKGROUND: #ffcccc; PADDING-BOTTOM: 8px; MARGIN: 10px; BORDER-LEFT: #c00 1px solid; PADDING-TOP: 8px; BORDER-BOTTOM: #c00 1px solid
-}
-.infoPanel {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 8px; BACKGROUND: #d8e4f1; PADDING-BOTTOM: 8px; MARGIN: 10px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 8px; BORDER-BOTTOM: #3c78b5 1px solid
-}
-.optionPadded {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; PADDING-TOP: 2px
-}
-.optionSelected {
- BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN: -1px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #ddd 1px solid; BACKGROUND-COLOR: #ffffcc
-}
-.optionSelected A {
- FONT-WEIGHT: bold; COLOR: black; TEXT-DECORATION: none
-}
-.noteMacro {
- BORDER-RIGHT: #f0c000 1px solid; BORDER-TOP: #f0c000 1px solid; MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #f0c000 1px solid; BORDER-BOTTOM: #f0c000 1px solid; BACKGROUND-COLOR: #ffffce; TEXT-ALIGN: left
-}
-.warningMacro {
- BORDER-RIGHT: #c00 1px solid; BORDER-TOP: #c00 1px solid; MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #c00 1px solid; BORDER-BOTTOM: #c00 1px solid; BACKGROUND-COLOR: #fcc; TEXT-ALIGN: left
-}
-.infoMacro {
- BORDER-RIGHT: #3c78b5 1px solid; BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #3c78b5 1px solid; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #d8e4f1; TEXT-ALIGN: left
-}
-.tipMacro {
- BORDER-RIGHT: #090 1px solid; BORDER-TOP: #090 1px solid; MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #090 1px solid; BORDER-BOTTOM: #090 1px solid; BACKGROUND-COLOR: #dfd; TEXT-ALIGN: left
-}
-.informationMacroPadding {
- PADDING-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; PADDING-TOP: 5px
-}
-TABLE.infoMacro TD {
- BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
-}
-TABLE.warningMacro TD {
- BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
-}
-TABLE.tipMacro TD {
- BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
-}
-TABLE.noteMacro TD {
- BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
-}
-TABLE.sectionMacro TD {
- BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
-}
-TABLE.sectionMacroWithBorder TD.columnMacro {
- BORDER-RIGHT: #cccccc 1px dashed; BORDER-TOP: #cccccc 1px dashed; BORDER-LEFT: #cccccc 1px dashed; BORDER-BOTTOM: #cccccc 1px dashed
-}
-.pagecontent {
- PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; TEXT-ALIGN: left
-}
-.topBarDiv A:link {
- COLOR: #ffffff
-}
-.topBarDiv A:visited {
- COLOR: #ffffff
-}
-.topBarDiv A:active {
- COLOR: #ffffff
-}
-.topBarDiv A:hover {
- COLOR: #ffffff
-}
-.topBarDiv {
- COLOR: #ffffff
-}
-.topBar {
- BACKGROUND-COLOR: #003366
-}
-.greyLinks A:link {
- COLOR: #666666; TEXT-DECORATION: underline
-}
-.greyLinks A:visited {
- COLOR: #666666; TEXT-DECORATION: underline
-}
-.greyLinks A:active {
- COLOR: #666666; TEXT-DECORATION: underline
-}
-.greyLinks A:hover {
- COLOR: #666666; TEXT-DECORATION: underline
-}
-.greyLinks {
- PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; COLOR: #666666; PADDING-TOP: 10px
-}
-.logoSpaceLink {
- COLOR: #999999; TEXT-DECORATION: none
-}
-.logoSpaceLink A:link {
- COLOR: #999999; TEXT-DECORATION: none
-}
-.logoSpaceLink A:visited {
- COLOR: #999999; TEXT-DECORATION: none
-}
-.logoSpaceLink A:active {
- COLOR: #999999; TEXT-DECORATION: none
-}
-.logoSpaceLink A:hover {
- COLOR: #003366; TEXT-DECORATION: none
-}
-.basicPanelContainer {
- BORDER-RIGHT: #3c78b5 1px solid; BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 2px; MARGIN-BOTTOM: 8px; BORDER-LEFT: #3c78b5 1px solid; WIDTH: 100%; BORDER-BOTTOM: #3c78b5 1px solid
-}
-.basicPanelTitle {
- PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 5px; MARGIN: 0px; COLOR: black; PADDING-TOP: 5px; BACKGROUND-COLOR: #eeefcc
-}
-.basicPanelBody {
- PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 0px; PADDING-TOP: 5px
-}
-.separatorLinks A:link {
- COLOR: white
-}
-.separatorLinks A:visited {
- COLOR: white
-}
-.separatorLinks A:active {
- COLOR: white
-}
-.greynavbar {
- BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 2px; BACKGROUND-COLOR: #eeefcc
-}
-DIV.headerField {
- FLOAT: left; WIDTH: auto; HEIGHT: 100%
-}
-.headerFloat {
- MARGIN-LEFT: auto; WIDTH: 50%
-}
-.headerFloatLeft {
- FLOAT: left; MARGIN-BOTTOM: 10px; MARGIN-RIGHT: 20px
-}
-#headerRow {
- PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px
-}
-DIV.license-personal {
- COLOR: #ffffff; BACKGROUND-COLOR: #003366
-}
-DIV.license-personal A {
- COLOR: #ffffff
-}
-.greyFormBox {
- BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #cccccc 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #cccccc 1px solid
-}
-.marginlessForm {
- MARGIN: 0px
-}
-.openPageHighlight {
- BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #ddd 1px solid; BACKGROUND-COLOR: #ffffcc
-}
-.editPageInsertLinks {
- FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #666666
-}
-.editPageInsertLinks A {
- FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #666666
-}
-.top10 A {
- FONT-WEIGHT: bold; FONT-SIZE: 2em; COLOR: #003366
-}
-.top25 A {
- FONT-WEIGHT: bold; FONT-SIZE: 1.6em; COLOR: #003366
-}
-.top50 A {
- FONT-SIZE: 1.4em; COLOR: #003366
-}
-.top100 A {
- FONT-SIZE: 1.2em; COLOR: #003366
-}
-.heatmap {
- MARGIN: 0px auto; WIDTH: 95%; LIST-STYLE-TYPE: none
-}
-.heatmap A {
- TEXT-DECORATION: none
-}
-.heatmap A:hover {
- TEXT-DECORATION: underline
-}
-.heatmap LI {
- DISPLAY: inline
-}
-.minitab {
- PADDING-RIGHT: 0px; MARGIN-TOP: 1px; PADDING-LEFT: 8px; FLOAT: none; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; FONT: bold 9px Verdana, sans-serif; MARGIN-LEFT: 0px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px solid; TEXT-DECORATION: none
-}
-.selectedminitab {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 1px; PADDING-LEFT: 0.5em; BACKGROUND: white; PADDING-BOTTOM: 3px; MARGIN-LEFT: 3px; BORDER-LEFT: #3c78b5 1px solid; COLOR: #000000; PADDING-TOP: 3px; BORDER-BOTTOM: white 1px solid; TEXT-DECORATION: none
-}
-.unselectedminitab {
- BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 1px; PADDING-LEFT: 0.5em; BACKGROUND: #3c78b5; PADDING-BOTTOM: 3px; MARGIN-LEFT: 3px; BORDER-LEFT: #3c78b5 1px solid; COLOR: #ffffff; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px; TEXT-DECORATION: none
-}
-A.unselectedminitab:hover {
- BORDER-LEFT-COLOR: #003366; BACKGROUND: #003366; BORDER-BOTTOM-COLOR: #003366; COLOR: #ffffff; BORDER-TOP-COLOR: #003366; BORDER-RIGHT-COLOR: #003366
-}
-A.unselectedminitab:link {
- COLOR: white
-}
-A.unselectedminitab:visited {
- COLOR: white
-}
-A.selectedminitab:link {
- COLOR: black
-}
-A.selectedminitab:visited {
- COLOR: black
-}
-.linkerror {
- BACKGROUND-COLOR: #fcc
-}
-A.labelOperationLink:link {
- TEXT-DECORATION: underline
-}
-A.labelOperationLink:active {
- TEXT-DECORATION: underline
-}
-A.labelOperationLink:visited {
- TEXT-DECORATION: underline
-}
-A.labelOperationLink:hover {
- TEXT-DECORATION: underline
-}
-A.newLabel:link {
- BACKGROUND-COLOR: #ddffdd
-}
-A.newLabel:active {
- BACKGROUND-COLOR: #ddffdd
-}
-A.newLabel:visited {
- BACKGROUND-COLOR: #ddffdd
-}
-A.newLabel:hover {
- BACKGROUND-COLOR: #ddffdd
-}
-UL.square {
- LIST-STYLE-TYPE: square
-}
-.inline-control-link {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 9px; BACKGROUND: #ffc; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; COLOR: #666; PADDING-TOP: 2px; TEXT-DECORATION: none
-}
-.inline-control-link A:link {
- TEXT-DECORATION: none
-}
-.inline-control-link A:active {
- TEXT-DECORATION: none
-}
-.inline-control-link A:visited {
- TEXT-DECORATION: none
-}
-.inline-control-link A:hover {
- TEXT-DECORATION: none
-}
-.inline-control-link {
- PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 9px; BACKGROUND: #ffc; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; CURSOR: pointer; COLOR: #666; PADDING-TOP: 2px; TEXT-DECORATION: none
-}
-DIV.auto_complete {
- BACKGROUND: #fff; WIDTH: 350px
-}
-DIV.auto_complete UL {
- BORDER-RIGHT: #888 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #888 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: #888 1px solid; WIDTH: 100%; PADDING-TOP: 0px; BORDER-BOTTOM: #888 1px solid; LIST-STYLE-TYPE: none
-}
-DIV.auto_complete UL LI {
- PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 0px; PADDING-TOP: 3px
-}
-DIV.auto_complete UL LI.selected {
- BACKGROUND-COLOR: #ffb
-}
-DIV.auto_complete UL STRONG.highlight {
- PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #800; PADDING-TOP: 0px
-}
-.toogleFormDiv {
- BORDER-RIGHT: #a7a6aa 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #a7a6aa 1px solid; MARGIN-TOP: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #a7a6aa 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #a7a6aa 1px solid; BACKGROUND-COLOR: white
-}
-.toogleInfoDiv {
- BORDER-RIGHT: #a7a6aa 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #a7a6aa 1px solid; MARGIN-TOP: 10px; DISPLAY: none; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #a7a6aa 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #a7a6aa 1px solid; BACKGROUND-COLOR: white
-}
-.inputSection {
- MARGIN-BOTTOM: 20px
-}
-#editBox {
- BACKGROUND-COLOR: #eeefcc
-}
-.leftnav LI A {
- PADDING-RIGHT: 2px; BORDER-TOP: #3c78b5 1px solid; DISPLAY: block; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 0px; COLOR: white; PADDING-TOP: 2px; BACKGROUND-COLOR: #3c78b5; TEXT-DECORATION: none
-}
-.leftnav LI A:active {
- COLOR: white
-}
-.leftnav LI A:visited {
- COLOR: white
-}
-.leftnav LI A:hover {
- COLOR: white; BACKGROUND-COLOR: #003366
-}
-.replaced {
- BACKGROUND-COLOR: #33cc66
-}
-.topPadding {
- MARGIN-TOP: 20px
-}
-.form-block {
- PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; PADDING-TOP: 6px
-}
-.form-error-block {
- PADDING-RIGHT: 12px; BORDER-TOP: #eeefcc 1px solid; PADDING-LEFT: 12px; BACKGROUND: #fcc; MARGIN-BOTTOM: 6px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #eeefcc 1px solid
-}
-.form-element-large {
- FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
-}
-.form-element-small {
- FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
-}
-.form-header {
- PADDING-RIGHT: 12px; BORDER-TOP: #eeefcc 1px solid; PADDING-LEFT: 12px; BACKGROUND: lightyellow; MARGIN-BOTTOM: 6px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #eeefcc 1px solid
-}
-.form-header P {
- MARGIN: 12px 0px; LINE-HEIGHT: normal
-}
-.form-block P {
- MARGIN: 12px 0px; LINE-HEIGHT: normal
-}
-.form-error-block P {
- MARGIN: 12px 0px; LINE-HEIGHT: normal
-}
-.form-example {
- FONT-SIZE: 11px; COLOR: #888
-}
-.form-divider {
- MARGIN-BOTTOM: 6px; BORDER-BOTTOM: #ccc 1px solid
-}
-.form-buttons {
- PADDING-RIGHT: 10px; BORDER-TOP: #ccc 1px solid; MARGIN-TOP: 6px; PADDING-LEFT: 10px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BORDER-BOTTOM: #ccc 1px solid; TEXT-ALIGN: center
-}
-.form-buttons INPUT {
- WIDTH: 100px
-}
-.form-block .error {
- PADDING-RIGHT: 6px; PADDING-LEFT: 6px; MARGIN-BOTTOM: 6px; PADDING-BOTTOM: 6px; PADDING-TOP: 6px
-}
+BODY {
+ FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
+}
+P {
+ FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
+}
+TD {
+ FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
+}
+TABLE {
+ FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
+}
+TR {
+ FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
+}
+.bodytext {
+ FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
+}
+.stepfield {
+ FONT-WEIGHT: normal; FONT-SIZE: 11px; COLOR: #000000; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
+}
+#PageContent {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 20px; MARGIN: 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #fff; TEXT-ALIGN: left
+}
+BODY {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; BACKGROUND-COLOR: #ffffff; TEXT-ALIGN: center
+}
+.monospaceInput {
+ FONT: 12px monospace
+}
+.wiki-content P {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 16px 0px; PADDING-TOP: 0px
+}
+.commentblock P {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 16px 0px; PADDING-TOP: 0px
+}
+.wiki-content-preview {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 5px
+}
+UL {
+ MARGIN-TOP: 2px; MARGIN-BOTTOM: 2px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
+}
+OL {
+ MARGIN-TOP: 2px; MARGIN-BOTTOM: 2px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
+}
+PRE {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 5px 5px 5px 15px; PADDING-TOP: 0px; TEXT-ALIGN: left
+}
+.helpheading {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 4px; MARGIN: 10px 0px 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #d0d9bd
+}
+.helpcontent {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 20px; PADDING-TOP: 4px; BACKGROUND-COLOR: #f5f7f1
+}
+.code {
+ BORDER-RIGHT: #3c78b5 1px dashed; BORDER-TOP: #3c78b5 1px dashed; FONT-SIZE: 11px; MARGIN: 10px; BORDER-LEFT: #3c78b5 1px dashed; LINE-HEIGHT: 13px; BORDER-BOTTOM: #3c78b5 1px dashed; FONT-FAMILY: Courier
+}
+.focusedComment {
+ BACKGROUND: #ffffce
+}
+.commentBox {
+ BORDER-RIGHT: #bbb 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #bbb 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 5px 0px; BORDER-LEFT: #bbb 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #bbb 1px solid
+}
+.focusedComment {
+ BORDER-RIGHT: #bbb 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #bbb 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 5px 0px; BORDER-LEFT: #bbb 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #bbb 1px solid
+}
+.codeHeader {
+ PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px dashed; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
+}
+.codeContent {
+ PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: left
+}
+.preformatted {
+ BORDER-RIGHT: #3c78b5 1px dashed; BORDER-TOP: #3c78b5 1px dashed; FONT-SIZE: 11px; MARGIN: 10px; BORDER-LEFT: #3c78b5 1px dashed; LINE-HEIGHT: 13px; BORDER-BOTTOM: #3c78b5 1px dashed; FONT-FAMILY: Courier
+}
+.preformattedHeader {
+ PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px dashed; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
+}
+.preformattedContent {
+ PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BACKGROUND-COLOR: #eeefcc
+}
+.panel {
+ BORDER-RIGHT: #3c78b5 1px dashed; BORDER-TOP: #3c78b5 1px dashed; MARGIN: 0px 10px 10px; BORDER-LEFT: #3c78b5 1px dashed; BORDER-BOTTOM: #3c78b5 1px dashed
+}
+.panelHeader {
+ PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px dashed; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
+}
+.panelContent {
+ PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #eeefcc
+}
+.anonymousAlert {
+ BORDER-RIGHT: red 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: red 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 10px; MARGIN: 4px; BORDER-LEFT: red 1px dashed; LINE-HEIGHT: 13px; PADDING-TOP: 10px; BORDER-BOTTOM: red 1px dashed; BACKGROUND-COLOR: #eeefcc
+}
+.lockAlert {
+ BORDER-RIGHT: red 1px dashed; PADDING-RIGHT: 5px; BORDER-TOP: red 1px dashed; PADDING-LEFT: 5px; FONT-SIZE: 11px; PADDING-BOTTOM: 10px; MARGIN: 4px; BORDER-LEFT: red 1px dashed; WIDTH: 50%; LINE-HEIGHT: 13px; PADDING-TOP: 10px; BORDER-BOTTOM: red 1px dashed; BACKGROUND-COLOR: #eeefcc
+}
+.code-keyword {
+ COLOR: #000091
+}
+.code-object {
+ COLOR: #910091
+}
+.code-quote {
+ COLOR: #009100
+}
+.code-comment {
+ COLOR: #808080
+}
+.code-xml .code-keyword {
+ FONT-WEIGHT: bold
+}
+.code-tag {
+ COLOR: #000091
+}
+.breadcrumbs {
+ BORDER-RIGHT: #3c78b5 0px solid; PADDING-RIGHT: 0px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 11px; PADDING-BOTTOM: 3px; BORDER-LEFT: #3c78b5 0px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
+}
+.navmenu {
+ BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid
+}
+.menuheading {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; PADDING-TOP: 4px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
+}
+.menuitems {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 20px; PADDING-TOP: 4px
+}
+.rightpanel {
+ BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid
+}
+#helpheading {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; PADDING-BOTTOM: 4px; MARGIN: 0px; PADDING-TOP: 4px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #d0d9bd; TEXT-ALIGN: left
+}
+#helpcontent {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px; BACKGROUND-COLOR: #f5f7f1
+}
+.helptab-unselected {
+ PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #f5f7f1
+}
+.helptab-selected {
+ PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BACKGROUND-COLOR: #d0d9bd
+}
+.helptabs {
+ PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 0px; PADDING-TOP: 5px; BACKGROUND-COLOR: #f5f7f1
+}
+.infopanel-heading {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; PADDING-BOTTOM: 2px; PADDING-TOP: 4px
+}
+.pagebody {
+
+}
+.pageheader {
+ PADDING-RIGHT: 5px; PADDING-LEFT: 0px; PADDING-BOTTOM: 5px; PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 1px solid
+}
+.pagetitle {
+ FONT-WEIGHT: bold; FONT-SIZE: 22px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
+}
+.newpagetitle {
+ COLOR: #ccc! important
+}
+.steptitle {
+ FONT-WEIGHT: bold; FONT-SIZE: 18px; MARGIN-BOTTOM: 7px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
+}
+.substeptitle {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: 12px; PADDING-BOTTOM: 1px; MARGIN: 2px 4px 4px; COLOR: #003366; PADDING-TOP: 2px; FONT-FAMILY: Arial, sans-serif
+}
+.stepdesc {
+ MARGIN-TOP: 7px; FONT-WEIGHT: normal; FONT-SIZE: 11px; MARGIN-BOTTOM: 7px; COLOR: #666666; LINE-HEIGHT: 16px; FONT-FAMILY: Verdana, arial, sans-serif
+}
+.steplabel {
+ FONT-WEIGHT: bold; FLOAT: left; WIDTH: 15%; COLOR: black; MARGIN-RIGHT: 4px; TEXT-ALIGN: right
+}
+.stepfield {
+ PADDING-RIGHT: 5px; PADDING-LEFT: 5px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 5px; PADDING-TOP: 5px
+}
+.submitButtons {
+ MARGIN-TOP: 5px; TEXT-ALIGN: right
+}
+.formtitle {
+ FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
+}
+.sectionbottom {
+ BORDER-BOTTOM: #3c78b5 1px solid
+}
+.topRow {
+ BORDER-TOP: #3c78b5 2px solid
+}
+.tabletitle {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 14px; PADDING-BOTTOM: 2px; MARGIN: 8px 4px 2px 0px; COLOR: #003366; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 2px solid; FONT-FAMILY: Arial, sans-serif
+}
+.pagesubheading {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 10px; PADDING-BOTTOM: 5px; COLOR: #666666; PADDING-TOP: 0px
+}
+HR {
+
+}
+A:link {
+ COLOR: #003366
+}
+A:visited {
+ COLOR: #003366
+}
+A:active {
+ COLOR: #003366
+}
+A:hover {
+ COLOR: #003366
+}
+H1 A:link {
+ TEXT-DECORATION: none
+}
+H1 A:visited {
+ TEXT-DECORATION: none
+}
+H1 A:active {
+ TEXT-DECORATION: none
+}
+H1 A:hover {
+ BORDER-BOTTOM: #003366 1px dotted
+}
+UNKNOWN {
+ MARGIN-TOP: 3px
+}
+.logocell {
+ PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px
+}
+INPUT {
+ FONT-SIZE: 11px; COLOR: #000000; FONT-FAMILY: verdana, geneva, arial, sans-serif
+}
+TEXTAREA {
+ FONT-SIZE: 11px; COLOR: #333333; FONT-FAMILY: verdana, geneva, arial, sans-serif
+}
+TEXTAREA.editor {
+ FONT-SIZE: 11px; COLOR: #333333; FONT-FAMILY: verdana, geneva, arial, sans-serif
+}
+.spacenametitle-printable {
+ MARGIN: 0px; FONT: 100 20px/25px Impact, Arial, Helvetica; COLOR: #999999
+}
+.spacenametitle-printable A {
+ COLOR: #999999; TEXT-DECORATION: none
+}
+.spacenametitle-printable A:visited {
+ COLOR: #999999; TEXT-DECORATION: none
+}
+.blogDate {
+ FONT-WEIGHT: bold; COLOR: black; TEXT-DECORATION: none
+}
+.blogSurtitle {
+ BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 3px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px solid
+}
+.blogHeading {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 20px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: normal; PADDING-TOP: 0px
+}
+.blogHeading A {
+ COLOR: black; TEXT-DECORATION: none
+}
+.endsection {
+ MARGIN-TOP: 10px; COLOR: #666666; align: right
+}
+.endsectionleftnav {
+ MARGIN-TOP: 10px; COLOR: #666666; align: right
+}
+H1 {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 24px; PADDING-BOTTOM: 2px; MARGIN: 36px 0px 4px; COLOR: #003366; LINE-HEIGHT: normal; PADDING-TOP: 2px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
+}
+H2 {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 18px; PADDING-BOTTOM: 2px; MARGIN: 27px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
+}
+H3 {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 14px; PADDING-BOTTOM: 2px; MARGIN: 21px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
+}
+H4 {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 12px; PADDING-BOTTOM: 2px; MARGIN: 18px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
+}
+H4.search {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: normal; FONT-SIZE: 12px; PADDING-BOTTOM: 4px; MARGIN: 18px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 4px; BACKGROUND-COLOR: #eeefcc
+}
+H5 {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 10px; PADDING-BOTTOM: 2px; MARGIN: 14px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
+}
+H6 {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: 8px; PADDING-BOTTOM: 2px; MARGIN: 14px 0px 4px; LINE-HEIGHT: normal; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
+}
+.smallfont {
+ FONT-SIZE: 10px
+}
+.descfont {
+ FONT-SIZE: 10px; COLOR: #666666
+}
+.smallerfont {
+ FONT-SIZE: 9px
+}
+.smalltext {
+ FONT-SIZE: 10px; COLOR: #666666
+}
+.smalltext A {
+ COLOR: #666666
+}
+.smalltext-blue {
+ FONT-SIZE: 10px; COLOR: #3c78b5
+}
+.surtitle {
+ FONT-SIZE: 14px; MARGIN-BOTTOM: 5px; MARGIN-LEFT: 1px; COLOR: #666666
+}
+.navItemOver {
+ FONT-WEIGHT: bold; FONT-SIZE: 10px; CURSOR: pointer; COLOR: #ffffff; BACKGROUND-COLOR: #003366; voice-family: inherit
+}
+.navItemOver A {
+ COLOR: #ffffff; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none
+}
+.navItemOver A:visited {
+ COLOR: #ffffff; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none
+}
+.navItemOver A:hover {
+ COLOR: #ffffff; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none
+}
+.navItem {
+ FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #ffffff; BACKGROUND-COLOR: #3c78b5
+}
+.navItem A {
+ COLOR: #ffffff; TEXT-DECORATION: none
+}
+.navItem A:hover {
+ COLOR: #ffffff; TEXT-DECORATION: none
+}
+.navItem A:visited {
+ COLOR: #ffffff; TEXT-DECORATION: none
+}
+DIV.padded {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px
+}
+DIV.thickPadded {
+ PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px
+}
+H3.macrolibrariestitle {
+ MARGIN: 0px
+}
+DIV.centered {
+ MARGIN: 10px; TEXT-ALIGN: center
+}
+DIV.centered TABLE {
+ MARGIN: 0px auto; TEXT-ALIGN: left
+}
+.tableview TABLE {
+ MARGIN: 0px
+}
+.tableview TH {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 5px; FONT-SIZE: 12px; PADDING-BOTTOM: 0px; COLOR: #003366; PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 2px solid; TEXT-ALIGN: left
+}
+.tableview TD {
+ BORDER-RIGHT: #ccc 0px solid; PADDING-RIGHT: 10px; BORDER-TOP: #ccc 0px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 4px; MARGIN: 0px; BORDER-LEFT: #ccc 0px solid; PADDING-TOP: 4px; BORDER-BOTTOM: #ccc 1px solid; TEXT-ALIGN: left
+}
+.grid {
+ MARGIN: 2px 0px 5px; BORDER-COLLAPSE: collapse
+}
+.grid TH {
+ BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 2px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid; TEXT-ALIGN: center
+}
+.grid TD {
+ BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid
+}
+.gridHover {
+ BACKGROUND-COLOR: #f9f9f9
+}
+TD.infocell {
+ BACKGROUND-COLOR: #eeefcc
+}
+.label {
+ FONT-WEIGHT: bold; COLOR: #003366
+}
+LABEL {
+ FONT-WEIGHT: bold; COLOR: #003366
+}
+.error {
+ BACKGROUND-COLOR: #fcc
+}
+.errorBox {
+ BORDER-RIGHT: #c00 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #c00 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px; BORDER-LEFT: #c00 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #c00 1px solid; BACKGROUND-COLOR: #fcc
+}
+.errorMessage {
+ COLOR: #c00
+}
+.success {
+ BACKGROUND-COLOR: #dfd
+}
+.successBox {
+ BORDER-RIGHT: #090 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #090 1px solid; MARGIN-TOP: 5px; PADDING-LEFT: 5px; MARGIN-BOTTOM: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #090 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #090 1px solid; BACKGROUND-COLOR: #dfd
+}
+BLOCKQUOTE {
+ PADDING-RIGHT: 10px; PADDING-LEFT: 10px; MARGIN-LEFT: 5px; BORDER-LEFT: #3c78b5 1px solid; MARGIN-RIGHT: 0px
+}
+TABLE.confluenceTable {
+ MARGIN: 5px; BORDER-COLLAPSE: collapse
+}
+TABLE.confluenceTable TD.confluenceTd {
+ BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid
+}
+TABLE.confluenceTable TH.confluenceTh {
+ BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
+}
+TD.confluenceTd {
+ BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid
+}
+TH.confluenceTh {
+ BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 4px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 4px; PADDING-BOTTOM: 3px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ccc 1px solid; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
+}
+DIV.small {
+ FONT-SIZE: 9px
+}
+H1.pagename {
+ MARGIN-TOP: 0px
+}
+IMG.inline {
+
+}
+.loginform {
+ BORDER-RIGHT: #ccc 1px solid; BORDER-TOP: #ccc 1px solid; MARGIN: 5px; BORDER-LEFT: #ccc 1px solid; BORDER-BOTTOM: #ccc 1px solid
+}
+.previewnote {
+ FONT-SIZE: 11px; COLOR: red; TEXT-ALIGN: center
+}
+.previewcontent {
+ BACKGROUND: #e0e0e0
+}
+.messagecontent {
+ BACKGROUND: #e0e0e0
+}
+.conflictnote {
+
+}
+.createlink {
+ COLOR: maroon
+}
+A.createlink {
+ COLOR: maroon
+}
+.templateparameter {
+ FONT-SIZE: 9px; COLOR: darkblue
+}
+.diffadded {
+ PADDING-RIGHT: 1px; PADDING-LEFT: 4px; BACKGROUND: #ddffdd; PADDING-BOTTOM: 1px; BORDER-LEFT: darkgreen 4px solid; PADDING-TOP: 1px
+}
+.diffdeleted {
+ PADDING-RIGHT: 1px; PADDING-LEFT: 4px; BACKGROUND: #ffdddd; PADDING-BOTTOM: 1px; BORDER-LEFT: darkred 4px solid; COLOR: #999; PADDING-TOP: 1px
+}
+.diffnochange {
+ PADDING-RIGHT: 1px; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: lightgrey 4px solid; PADDING-TOP: 1px
+}
+.differror {
+ BACKGROUND: brown
+}
+.diff {
+ FONT-SIZE: 12px; LINE-HEIGHT: 14px; FONT-FAMILY: lucida console, courier new, fixed-width
+}
+.diffaddedchars {
+ FONT-WEIGHT: bolder; BACKGROUND-COLOR: #99ff99
+}
+.diffremovedchars {
+ FONT-WEIGHT: bolder; BACKGROUND-COLOR: #ff9999; TEXT-DECORATION: line-through
+}
+.greybackground {
+ BACKGROUND: #eeefcc
+}
+.greybox {
+ BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px solid
+}
+.borderedGreyBox {
+ BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; BORDER-LEFT: #cccccc 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeefcc
+}
+.greyboxfilled {
+ BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 3px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px solid
+}
+.navBackgroundBox {
+ PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 22px; BACKGROUND: #3c78b5; PADDING-BOTTOM: 5px; COLOR: white; PADDING-TOP: 5px; FONT-FAMILY: Arial, sans-serif; TEXT-DECORATION: none
+}
+.previewBoxTop {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 5px 0px 0px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 0px solid; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
+}
+.previewContent {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 10px; BORDER-TOP: #3c78b5 0px solid; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; MARGIN: 0px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 10px; BORDER-BOTTOM: #3c78b5 0px solid; BACKGROUND-COLOR: #fff
+}
+.previewBoxBottom {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #3c78b5 0px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 0px 0px 5px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc; TEXT-ALIGN: center
+}
+.functionbox {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #eeefcc
+}
+.functionbox-greyborder {
+ BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 1px 1px 10px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #ddd 1px solid; BACKGROUND-COLOR: #eeefcc
+}
+.search-highlight {
+ BACKGROUND-COLOR: #ffffcc
+}
+.rowNormal {
+ BACKGROUND-COLOR: #ffffff
+}
+.rowAlternate {
+ BACKGROUND-COLOR: #f7f7f7
+}
+.rowAlternateNoBottomColor {
+ BACKGROUND-COLOR: #f7f7f7
+}
+.rowAlternateNoBottomNoColor {
+
+}
+.rowAlternateNoBottomColor TD {
+ BORDER-BOTTOM-WIDTH: 0px
+}
+.rowAlternateNoBottomNoColor TD {
+ BORDER-BOTTOM-WIDTH: 0px
+}
+.rowHighlight {
+ BACKGROUND-COLOR: #eeefcc
+}
+TD.greenbar {
+ BORDER-RIGHT: #9c9c9c 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #9c9c9c 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #00df00; PADDING-BOTTOM: 0px; BORDER-LEFT: #9c9c9c 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #9c9c9c 1px solid
+}
+TD.redbar {
+ BORDER-RIGHT: #9c9c9c 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #9c9c9c 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #df0000; PADDING-BOTTOM: 0px; BORDER-LEFT: #9c9c9c 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #9c9c9c 1px solid
+}
+TD.darkredbar {
+ BORDER-RIGHT: #9c9c9c 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #9c9c9c 1px solid; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #af0000; PADDING-BOTTOM: 0px; BORDER-LEFT: #9c9c9c 1px solid; PADDING-TOP: 0px; BORDER-BOTTOM: #9c9c9c 1px solid
+}
+TR.testpassed {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
+}
+TR.testfailed {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING-BOTTOM: 0px; PADDING-TOP: 0px
+}
+.toolbar {
+ MARGIN: 0px; BORDER-COLLAPSE: collapse
+}
+.toolbar TD {
+ BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ccc 1px solid; COLOR: #ccc; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid
+}
+TD.noformatting {
+ BORDER-RIGHT: 0px; PADDING-RIGHT: 0px; BORDER-TOP: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; BORDER-LEFT: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: 0px; TEXT-ALIGN: center
+}
+.commentblock {
+ MARGIN: 12px 0px
+}
+.license-eval {
+ BORDER-TOP: #bbbbbb 1px solid; FONT-SIZE: 10px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: center
+}
+.license-none {
+ BORDER-TOP: #bbbbbb 1px solid; FONT-SIZE: 10px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: center
+}
+.license-nonprofit {
+ BORDER-TOP: #bbbbbb 1px solid; FONT-SIZE: 10px; FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif; TEXT-ALIGN: center
+}
+.license-eval {
+ BACKGROUND-COLOR: #ffcccc
+}
+.license-none {
+ BACKGROUND-COLOR: #ffcccc
+}
+.license-eval B {
+ COLOR: #990000
+}
+.license-none B {
+ COLOR: #990000
+}
+.license-nonprofit {
+ BACKGROUND-COLOR: #ffffff
+}
+.bottomshadow {
+ BACKGROUND-IMAGE: url(/confluence/images/border/border_bottom.gif); BACKGROUND-REPEAT: repeat-x; HEIGHT: 12px
+}
+.navmenu .operations LI {
+ PADDING-LEFT: 0px; MARGIN-LEFT: 0px; LIST-STYLE-TYPE: none
+}
+.navmenu .operations UL {
+ PADDING-LEFT: 0px; MARGIN-LEFT: 0px; LIST-STYLE-TYPE: none
+}
+.navmenu .operations UL {
+ MARGIN-BOTTOM: 9px
+}
+.navmenu .label {
+
+}
+.toolbar DIV {
+ DISPLAY: none
+}
+.toolbar .label {
+ DISPLAY: none
+}
+.toolbar .operations {
+ DISPLAY: block
+}
+.toolbar .operations UL {
+ DISPLAY: inline; PADDING-LEFT: 0px; MARGIN-LEFT: 10px; LIST-STYLE-TYPE: none
+}
+.toolbar .operations LI {
+ DISPLAY: inline; LIST-STYLE-TYPE: none
+}
+#foldertab {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 8px; PADDING-BOTTOM: 3px; FONT: bold 11px Verdana, sans-serif; MARGIN-LEFT: 0px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px solid
+}
+#foldertab LI {
+ DISPLAY: inline; MARGIN: 0px; LIST-STYLE-TYPE: none
+}
+#foldertab LI A {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 0.5em; BACKGROUND: #3c78b5; PADDING-BOTTOM: 3px; MARGIN-LEFT: 3px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px; TEXT-DECORATION: none
+}
+#foldertab LI A:link {
+ COLOR: #ffffff
+}
+#foldertab LI A:visited {
+ COLOR: #ffffff
+}
+#foldertab LI A:hover {
+ BORDER-LEFT-COLOR: #003366; BACKGROUND: #003366; BORDER-BOTTOM-COLOR: #003366; COLOR: #ffffff; BORDER-TOP-COLOR: #003366; BORDER-RIGHT-COLOR: #003366
+}
+#foldertab LI A.current {
+ BACKGROUND: white; COLOR: black; BORDER-BOTTOM: white 1px solid
+}
+#foldertab LI A.current:link {
+ COLOR: black
+}
+#foldertab LI A.current:visited {
+ COLOR: black
+}
+#foldertab LI A.current:hover {
+ BACKGROUND: white; COLOR: black; BORDER-BOTTOM: white 1px solid
+}
+UL#squaretab {
+ PADDING-LEFT: 0px; FONT: bold 8px Verdana, sans-serif; MARGIN-LEFT: 0px; WHITE-SPACE: nowrap
+}
+#squaretab LI {
+ DISPLAY: inline; LIST-STYLE-TYPE: none
+}
+#squaretab A {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 6px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #3c78b5 1px solid
+}
+#squaretab A:link {
+ COLOR: #fff; BACKGROUND-COLOR: #3c78b5; TEXT-DECORATION: none
+}
+#squaretab A:visited {
+ COLOR: #fff; BACKGROUND-COLOR: #3c78b5; TEXT-DECORATION: none
+}
+#squaretab A:hover {
+ BORDER-LEFT-COLOR: #003366; BORDER-BOTTOM-COLOR: #003366; COLOR: #ffffff; BORDER-TOP-COLOR: #003366; BACKGROUND-COLOR: #003366; TEXT-DECORATION: none; BORDER-RIGHT-COLOR: #003366
+}
+#squaretab LI A#current {
+ BACKGROUND: white; COLOR: black
+}
+.blogcalendar {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: normal; FONT-SIZE: x-small; PADDING-BOTTOM: 2px; LINE-HEIGHT: 140%; PADDING-TOP: 2px; FONT-FAMILY: verdana, arial, sans-serif
+}
+TABLE.blogcalendar {
+ BORDER-RIGHT: #3c78b5 1px solid; BORDER-TOP: #3c78b5 1px solid; BORDER-LEFT: #3c78b5 1px solid; BORDER-BOTTOM: #3c78b5 1px solid
+}
+.blogcalendar TH.calendarhead {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: x-small; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; COLOR: #ffffff; PADDING-TOP: 2px; LETTER-SPACING: 0.3em; BACKGROUND-COLOR: #3c78b5
+}
+A.calendarhead {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: x-small; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; COLOR: #ffffff; PADDING-TOP: 2px; LETTER-SPACING: 0.3em; BACKGROUND-COLOR: #3c78b5
+}
+.calendarhead:visited {
+ COLOR: white
+}
+.calendarhead:active {
+ COLOR: white
+}
+.calendarhead:hover {
+ COLOR: white
+}
+.blogcalendar TH {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-WEIGHT: bold; FONT-SIZE: x-small; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; BACKGROUND-COLOR: #eeefcc
+}
+.blogcalendar TD {
+ FONT-WEIGHT: normal; FONT-SIZE: x-small
+}
+.searchGroup {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 10px; PADDING-TOP: 0px
+}
+.searchGroupHeading {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: 10px; PADDING-BOTTOM: 1px; COLOR: #ffffff; PADDING-TOP: 2px; BACKGROUND-COLOR: #3c78b5
+}
+.searchItem {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; PADDING-TOP: 1px
+}
+.searchItemSelected {
+ PADDING-RIGHT: 4px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; BACKGROUND: #ddd; PADDING-BOTTOM: 1px; PADDING-TOP: 1px
+}
+.permissionHeading {
+ BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; FONT-SIZE: 16px; BORDER-LEFT: 0px solid; BORDER-BOTTOM: #bbb 1px solid; TEXT-ALIGN: left
+}
+.permissionTab {
+ BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; FONT-SIZE: 10px; BACKGROUND: #3c78b5; BORDER-LEFT: 1px solid; COLOR: #ffffff; BORDER-BOTTOM: 0px solid
+}
+.permissionSuperTab {
+ BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BACKGROUND: #003366; BORDER-LEFT: 1px solid; COLOR: #ffffff; BORDER-BOTTOM: 0px solid
+}
+.permissionCell {
+ BORDER-RIGHT: 0px solid; BORDER-TOP: 0px solid; BORDER-LEFT: #bbb 1px solid; BORDER-BOTTOM: 0px solid
+}
+.warningPanel {
+ BORDER-RIGHT: #f0c000 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #f0c000 1px solid; PADDING-LEFT: 8px; BACKGROUND: #ffffce; PADDING-BOTTOM: 8px; MARGIN: 10px; BORDER-LEFT: #f0c000 1px solid; PADDING-TOP: 8px; BORDER-BOTTOM: #f0c000 1px solid
+}
+.alertPanel {
+ BORDER-RIGHT: #c00 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #c00 1px solid; PADDING-LEFT: 8px; BACKGROUND: #ffcccc; PADDING-BOTTOM: 8px; MARGIN: 10px; BORDER-LEFT: #c00 1px solid; PADDING-TOP: 8px; BORDER-BOTTOM: #c00 1px solid
+}
+.infoPanel {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #3c78b5 1px solid; PADDING-LEFT: 8px; BACKGROUND: #d8e4f1; PADDING-BOTTOM: 8px; MARGIN: 10px; BORDER-LEFT: #3c78b5 1px solid; PADDING-TOP: 8px; BORDER-BOTTOM: #3c78b5 1px solid
+}
+.optionPadded {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; PADDING-TOP: 2px
+}
+.optionSelected {
+ BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN: -1px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #ddd 1px solid; BACKGROUND-COLOR: #ffffcc
+}
+.optionSelected A {
+ FONT-WEIGHT: bold; COLOR: black; TEXT-DECORATION: none
+}
+.noteMacro {
+ BORDER-RIGHT: #f0c000 1px solid; BORDER-TOP: #f0c000 1px solid; MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #f0c000 1px solid; BORDER-BOTTOM: #f0c000 1px solid; BACKGROUND-COLOR: #ffffce; TEXT-ALIGN: left
+}
+.warningMacro {
+ BORDER-RIGHT: #c00 1px solid; BORDER-TOP: #c00 1px solid; MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #c00 1px solid; BORDER-BOTTOM: #c00 1px solid; BACKGROUND-COLOR: #fcc; TEXT-ALIGN: left
+}
+.infoMacro {
+ BORDER-RIGHT: #3c78b5 1px solid; BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #3c78b5 1px solid; BORDER-BOTTOM: #3c78b5 1px solid; BACKGROUND-COLOR: #d8e4f1; TEXT-ALIGN: left
+}
+.tipMacro {
+ BORDER-RIGHT: #090 1px solid; BORDER-TOP: #090 1px solid; MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; BORDER-LEFT: #090 1px solid; BORDER-BOTTOM: #090 1px solid; BACKGROUND-COLOR: #dfd; TEXT-ALIGN: left
+}
+.informationMacroPadding {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-BOTTOM: 0px; PADDING-TOP: 5px
+}
+TABLE.infoMacro TD {
+ BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
+}
+TABLE.warningMacro TD {
+ BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
+}
+TABLE.tipMacro TD {
+ BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
+}
+TABLE.noteMacro TD {
+ BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
+}
+TABLE.sectionMacro TD {
+ BORDER-TOP-STYLE: none; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BORDER-BOTTOM-STYLE: none
+}
+TABLE.sectionMacroWithBorder TD.columnMacro {
+ BORDER-RIGHT: #cccccc 1px dashed; BORDER-TOP: #cccccc 1px dashed; BORDER-LEFT: #cccccc 1px dashed; BORDER-BOTTOM: #cccccc 1px dashed
+}
+.pagecontent {
+ PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; TEXT-ALIGN: left
+}
+.topBarDiv A:link {
+ COLOR: #ffffff
+}
+.topBarDiv A:visited {
+ COLOR: #ffffff
+}
+.topBarDiv A:active {
+ COLOR: #ffffff
+}
+.topBarDiv A:hover {
+ COLOR: #ffffff
+}
+.topBarDiv {
+ COLOR: #ffffff
+}
+.topBar {
+ BACKGROUND-COLOR: #003366
+}
+.greyLinks A:link {
+ COLOR: #666666; TEXT-DECORATION: underline
+}
+.greyLinks A:visited {
+ COLOR: #666666; TEXT-DECORATION: underline
+}
+.greyLinks A:active {
+ COLOR: #666666; TEXT-DECORATION: underline
+}
+.greyLinks A:hover {
+ COLOR: #666666; TEXT-DECORATION: underline
+}
+.greyLinks {
+ PADDING-RIGHT: 10px; DISPLAY: block; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; COLOR: #666666; PADDING-TOP: 10px
+}
+.logoSpaceLink {
+ COLOR: #999999; TEXT-DECORATION: none
+}
+.logoSpaceLink A:link {
+ COLOR: #999999; TEXT-DECORATION: none
+}
+.logoSpaceLink A:visited {
+ COLOR: #999999; TEXT-DECORATION: none
+}
+.logoSpaceLink A:active {
+ COLOR: #999999; TEXT-DECORATION: none
+}
+.logoSpaceLink A:hover {
+ COLOR: #003366; TEXT-DECORATION: none
+}
+.basicPanelContainer {
+ BORDER-RIGHT: #3c78b5 1px solid; BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 2px; MARGIN-BOTTOM: 8px; BORDER-LEFT: #3c78b5 1px solid; WIDTH: 100%; BORDER-BOTTOM: #3c78b5 1px solid
+}
+.basicPanelTitle {
+ PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; PADDING-BOTTOM: 5px; MARGIN: 0px; COLOR: black; PADDING-TOP: 5px; BACKGROUND-COLOR: #eeefcc
+}
+.basicPanelBody {
+ PADDING-RIGHT: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; MARGIN: 0px; PADDING-TOP: 5px
+}
+.separatorLinks A:link {
+ COLOR: white
+}
+.separatorLinks A:visited {
+ COLOR: white
+}
+.separatorLinks A:active {
+ COLOR: white
+}
+.greynavbar {
+ BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 2px; BACKGROUND-COLOR: #eeefcc
+}
+DIV.headerField {
+ FLOAT: left; WIDTH: auto; HEIGHT: 100%
+}
+.headerFloat {
+ MARGIN-LEFT: auto; WIDTH: 50%
+}
+.headerFloatLeft {
+ FLOAT: left; MARGIN-BOTTOM: 10px; MARGIN-RIGHT: 20px
+}
+#headerRow {
+ PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-BOTTOM: 10px; PADDING-TOP: 10px
+}
+DIV.license-personal {
+ COLOR: #ffffff; BACKGROUND-COLOR: #003366
+}
+DIV.license-personal A {
+ COLOR: #ffffff
+}
+.greyFormBox {
+ BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #cccccc 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #cccccc 1px solid
+}
+.marginlessForm {
+ MARGIN: 0px
+}
+.openPageHighlight {
+ BORDER-RIGHT: #ddd 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ddd 1px solid; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; BORDER-LEFT: #ddd 1px solid; PADDING-TOP: 2px; BORDER-BOTTOM: #ddd 1px solid; BACKGROUND-COLOR: #ffffcc
+}
+.editPageInsertLinks {
+ FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #666666
+}
+.editPageInsertLinks A {
+ FONT-WEIGHT: bold; FONT-SIZE: 10px; COLOR: #666666
+}
+.top10 A {
+ FONT-WEIGHT: bold; FONT-SIZE: 2em; COLOR: #003366
+}
+.top25 A {
+ FONT-WEIGHT: bold; FONT-SIZE: 1.6em; COLOR: #003366
+}
+.top50 A {
+ FONT-SIZE: 1.4em; COLOR: #003366
+}
+.top100 A {
+ FONT-SIZE: 1.2em; COLOR: #003366
+}
+.heatmap {
+ MARGIN: 0px auto; WIDTH: 95%; LIST-STYLE-TYPE: none
+}
+.heatmap A {
+ TEXT-DECORATION: none
+}
+.heatmap A:hover {
+ TEXT-DECORATION: underline
+}
+.heatmap LI {
+ DISPLAY: inline
+}
+.minitab {
+ PADDING-RIGHT: 0px; MARGIN-TOP: 1px; PADDING-LEFT: 8px; FLOAT: none; MARGIN-BOTTOM: 0px; PADDING-BOTTOM: 3px; FONT: bold 9px Verdana, sans-serif; MARGIN-LEFT: 0px; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px solid; TEXT-DECORATION: none
+}
+.selectedminitab {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 1px; PADDING-LEFT: 0.5em; BACKGROUND: white; PADDING-BOTTOM: 3px; MARGIN-LEFT: 3px; BORDER-LEFT: #3c78b5 1px solid; COLOR: #000000; PADDING-TOP: 3px; BORDER-BOTTOM: white 1px solid; TEXT-DECORATION: none
+}
+.unselectedminitab {
+ BORDER-RIGHT: #3c78b5 1px solid; PADDING-RIGHT: 0.5em; BORDER-TOP: #3c78b5 1px solid; MARGIN-TOP: 1px; PADDING-LEFT: 0.5em; BACKGROUND: #3c78b5; PADDING-BOTTOM: 3px; MARGIN-LEFT: 3px; BORDER-LEFT: #3c78b5 1px solid; COLOR: #ffffff; PADDING-TOP: 3px; BORDER-BOTTOM: #3c78b5 1px; TEXT-DECORATION: none
+}
+A.unselectedminitab:hover {
+ BORDER-LEFT-COLOR: #003366; BACKGROUND: #003366; BORDER-BOTTOM-COLOR: #003366; COLOR: #ffffff; BORDER-TOP-COLOR: #003366; BORDER-RIGHT-COLOR: #003366
+}
+A.unselectedminitab:link {
+ COLOR: white
+}
+A.unselectedminitab:visited {
+ COLOR: white
+}
+A.selectedminitab:link {
+ COLOR: black
+}
+A.selectedminitab:visited {
+ COLOR: black
+}
+.linkerror {
+ BACKGROUND-COLOR: #fcc
+}
+A.labelOperationLink:link {
+ TEXT-DECORATION: underline
+}
+A.labelOperationLink:active {
+ TEXT-DECORATION: underline
+}
+A.labelOperationLink:visited {
+ TEXT-DECORATION: underline
+}
+A.labelOperationLink:hover {
+ TEXT-DECORATION: underline
+}
+A.newLabel:link {
+ BACKGROUND-COLOR: #ddffdd
+}
+A.newLabel:active {
+ BACKGROUND-COLOR: #ddffdd
+}
+A.newLabel:visited {
+ BACKGROUND-COLOR: #ddffdd
+}
+A.newLabel:hover {
+ BACKGROUND-COLOR: #ddffdd
+}
+UL.square {
+ LIST-STYLE-TYPE: square
+}
+.inline-control-link {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 9px; BACKGROUND: #ffc; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; COLOR: #666; PADDING-TOP: 2px; TEXT-DECORATION: none
+}
+.inline-control-link A:link {
+ TEXT-DECORATION: none
+}
+.inline-control-link A:active {
+ TEXT-DECORATION: none
+}
+.inline-control-link A:visited {
+ TEXT-DECORATION: none
+}
+.inline-control-link A:hover {
+ TEXT-DECORATION: none
+}
+.inline-control-link {
+ PADDING-RIGHT: 2px; PADDING-LEFT: 2px; FONT-SIZE: 9px; BACKGROUND: #ffc; PADDING-BOTTOM: 2px; TEXT-TRANSFORM: uppercase; CURSOR: pointer; COLOR: #666; PADDING-TOP: 2px; TEXT-DECORATION: none
+}
+DIV.auto_complete {
+ BACKGROUND: #fff; WIDTH: 350px
+}
+DIV.auto_complete UL {
+ BORDER-RIGHT: #888 1px solid; PADDING-RIGHT: 0px; BORDER-TOP: #888 1px solid; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; BORDER-LEFT: #888 1px solid; WIDTH: 100%; PADDING-TOP: 0px; BORDER-BOTTOM: #888 1px solid; LIST-STYLE-TYPE: none
+}
+DIV.auto_complete UL LI {
+ PADDING-RIGHT: 3px; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: 0px; PADDING-TOP: 3px
+}
+DIV.auto_complete UL LI.selected {
+ BACKGROUND-COLOR: #ffb
+}
+DIV.auto_complete UL STRONG.highlight {
+ PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; COLOR: #800; PADDING-TOP: 0px
+}
+.toogleFormDiv {
+ BORDER-RIGHT: #a7a6aa 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #a7a6aa 1px solid; MARGIN-TOP: 5px; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #a7a6aa 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #a7a6aa 1px solid; BACKGROUND-COLOR: white
+}
+.toogleInfoDiv {
+ BORDER-RIGHT: #a7a6aa 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #a7a6aa 1px solid; MARGIN-TOP: 10px; DISPLAY: none; PADDING-LEFT: 5px; PADDING-BOTTOM: 5px; BORDER-LEFT: #a7a6aa 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #a7a6aa 1px solid; BACKGROUND-COLOR: white
+}
+.inputSection {
+ MARGIN-BOTTOM: 20px
+}
+#editBox {
+ BACKGROUND-COLOR: #eeefcc
+}
+.leftnav LI A {
+ PADDING-RIGHT: 2px; BORDER-TOP: #3c78b5 1px solid; DISPLAY: block; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 0px; COLOR: white; PADDING-TOP: 2px; BACKGROUND-COLOR: #3c78b5; TEXT-DECORATION: none
+}
+.leftnav LI A:active {
+ COLOR: white
+}
+.leftnav LI A:visited {
+ COLOR: white
+}
+.leftnav LI A:hover {
+ COLOR: white; BACKGROUND-COLOR: #003366
+}
+.replaced {
+ BACKGROUND-COLOR: #33cc66
+}
+.topPadding {
+ MARGIN-TOP: 20px
+}
+.form-block {
+ PADDING-RIGHT: 6px; PADDING-LEFT: 6px; PADDING-BOTTOM: 6px; PADDING-TOP: 6px
+}
+.form-error-block {
+ PADDING-RIGHT: 12px; BORDER-TOP: #eeefcc 1px solid; PADDING-LEFT: 12px; BACKGROUND: #fcc; MARGIN-BOTTOM: 6px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #eeefcc 1px solid
+}
+.form-element-large {
+ FONT-WEIGHT: bold; FONT-SIZE: 16px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
+}
+.form-element-small {
+ FONT-WEIGHT: bold; FONT-SIZE: 12px; COLOR: #003366; FONT-FAMILY: Arial, sans-serif
+}
+.form-header {
+ PADDING-RIGHT: 12px; BORDER-TOP: #eeefcc 1px solid; PADDING-LEFT: 12px; BACKGROUND: lightyellow; MARGIN-BOTTOM: 6px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px; BORDER-BOTTOM: #eeefcc 1px solid
+}
+.form-header P {
+ MARGIN: 12px 0px; LINE-HEIGHT: normal
+}
+.form-block P {
+ MARGIN: 12px 0px; LINE-HEIGHT: normal
+}
+.form-error-block P {
+ MARGIN: 12px 0px; LINE-HEIGHT: normal
+}
+.form-example {
+ FONT-SIZE: 11px; COLOR: #888
+}
+.form-divider {
+ MARGIN-BOTTOM: 6px; BORDER-BOTTOM: #ccc 1px solid
+}
+.form-buttons {
+ PADDING-RIGHT: 10px; BORDER-TOP: #ccc 1px solid; MARGIN-TOP: 6px; PADDING-LEFT: 10px; BACKGROUND: #eeefcc; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; BORDER-BOTTOM: #ccc 1px solid; TEXT-ALIGN: center
+}
+.form-buttons INPUT {
+ WIDTH: 100px
+}
+.form-block .error {
+ PADDING-RIGHT: 6px; PADDING-LEFT: 6px; MARGIN-BOTTOM: 6px; PADDING-BOTTOM: 6px; PADDING-TOP: 6px
+}
diff --git a/src/windows/build/makeZip.pl b/src/windows/build/makeZip.pl
index 1a1b533c33..30f0cf14b3 100644
--- a/src/windows/build/makeZip.pl
+++ b/src/windows/build/makeZip.pl
@@ -1,84 +1,84 @@
-#!perl -w
-
-#use strict;
-
-require "prunefiles.pl";
-
-use Data::Dumper;
-
-sub makeZip {
- local ($zip, $config) = @_;
-
- local $odr = $config->{Config}; ## Options, directories, repository, environment.
- local $src = $odr->{src}->{value};
- local $out = $odr->{out}->{value};
- local $zipname = $zip->{filename};
- local $filestem = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};
- $zipname =~ s/%filestem%/$filestem/g;
- if (exists $zip->{Requires}) {
- local $bMakeIt = 1;
- local $rverb = $odr->{repository}->{value};
- local $j = 0;
- while ($zip->{Requires}->{Switch}[$j]) { ## Check Require switches
- local $switch = $zip->{Requires}->{Switch}[$j];
- if (exists $switch->{name}) { ## Ignore dummy entry
- # We handle REPOSITORY and CLEAN switches:
- if ($switch->{name} =~ /REPOSITORY/i) {
- $bMakeIt &&= ($switch->{value} =~ /$rverb/i); ## Repository verb must match requirement
- }
- elsif ($switch->{name} =~ /CLEAN/i) { ## Clean must be specified
- $bMakeIt &&= $clean;
- }
- else {print "Error -- Unsupported switch $switch->{name} in Requires in ".Dumper($zip);
- $bMakeIt = 0;
- }
- }
- $j++;
- }
- if ( !$bMakeIt ) {
- if (exists $zip->{Requires}->{ErrorMsg}) {
- print "Error -- $zip->{Requires}->{ErrorMsg}->{text}\n";
- }
- else {
- print "Error -- requirements not met for building $zipname.\n";
- }
- return 0;
- }
- }
-
- local $ziptemp = "$out\\ziptemp";
- chdir "$out";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- system("rm -rf $ziptemp") if (-d $ziptemp);
- die "Fatal -- Couldn't remove $ziptemp" if (-d $ziptemp);
- mkdir($ziptemp);
- # Set up the zip's config section:
- $zip->{Config} = $config->{Stages}->{PostPackage}->{Config};
- # Add to the copylist's config section. Don't copy Postpackage->Config,
- # because the CopyList's Config might contain substitution tags.
- $zip->{CopyList}->{Config}->{FileStem}->{name} = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};
- $zip->{CopyList}->{Config}->{From}->{root} = "$src\\pismere"; ## Add zip-specific config settings.
- $zip->{CopyList}->{Config}->{To}->{root} = $ziptemp;
- copyFiles($zip->{CopyList}, $config);
- # Drop down into <out>/ziptemp so the path to the added file won't include <out>:
- chdir $ziptemp;
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
-
- # Prune any unwanted files or directories from the directory we're about to zip:
- pruneFiles($zip, $config);
-
- local $zipfile = Archive::Zip->new();
- local $topdir = $zip->{topdir};
- $topdir =~ s/%filestem%/$filestem/g;
- $zipfile->addTree('.', $topdir);
- if (-e $zipname) {!system("rm -f $zipname") or die "Error -- Couldn't remove $zipname.";}
- $zipfile->writeToFileNamed($zipname);
- chdir("$out");
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- # move .zip from <out>/ziptemp to <out>.
- !system("mv -f ziptemp/$zipname .") or die "Error -- Couldn't move $zipname to ..";
- system("rm -rf ziptemp") if (-d "ziptemp"); ## Clean up any temp directory.
- print "Info -- created $out\\$zipname.\n" if ($verbose);
- }
-
+#!perl -w
+
+#use strict;
+
+require "prunefiles.pl";
+
+use Data::Dumper;
+
+sub makeZip {
+ local ($zip, $config) = @_;
+
+ local $odr = $config->{Config}; ## Options, directories, repository, environment.
+ local $src = $odr->{src}->{value};
+ local $out = $odr->{out}->{value};
+ local $zipname = $zip->{filename};
+ local $filestem = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};
+ $zipname =~ s/%filestem%/$filestem/g;
+ if (exists $zip->{Requires}) {
+ local $bMakeIt = 1;
+ local $rverb = $odr->{repository}->{value};
+ local $j = 0;
+ while ($zip->{Requires}->{Switch}[$j]) { ## Check Require switches
+ local $switch = $zip->{Requires}->{Switch}[$j];
+ if (exists $switch->{name}) { ## Ignore dummy entry
+ # We handle REPOSITORY and CLEAN switches:
+ if ($switch->{name} =~ /REPOSITORY/i) {
+ $bMakeIt &&= ($switch->{value} =~ /$rverb/i); ## Repository verb must match requirement
+ }
+ elsif ($switch->{name} =~ /CLEAN/i) { ## Clean must be specified
+ $bMakeIt &&= $clean;
+ }
+ else {print "Error -- Unsupported switch $switch->{name} in Requires in ".Dumper($zip);
+ $bMakeIt = 0;
+ }
+ }
+ $j++;
+ }
+ if ( !$bMakeIt ) {
+ if (exists $zip->{Requires}->{ErrorMsg}) {
+ print "Error -- $zip->{Requires}->{ErrorMsg}->{text}\n";
+ }
+ else {
+ print "Error -- requirements not met for building $zipname.\n";
+ }
+ return 0;
+ }
+ }
+
+ local $ziptemp = "$out\\ziptemp";
+ chdir "$out";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ system("rm -rf $ziptemp") if (-d $ziptemp);
+ die "Fatal -- Couldn't remove $ziptemp" if (-d $ziptemp);
+ mkdir($ziptemp);
+ # Set up the zip's config section:
+ $zip->{Config} = $config->{Stages}->{PostPackage}->{Config};
+ # Add to the copylist's config section. Don't copy Postpackage->Config,
+ # because the CopyList's Config might contain substitution tags.
+ $zip->{CopyList}->{Config}->{FileStem}->{name} = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};
+ $zip->{CopyList}->{Config}->{From}->{root} = "$src\\pismere"; ## Add zip-specific config settings.
+ $zip->{CopyList}->{Config}->{To}->{root} = $ziptemp;
+ copyFiles($zip->{CopyList}, $config);
+ # Drop down into <out>/ziptemp so the path to the added file won't include <out>:
+ chdir $ziptemp;
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+
+ # Prune any unwanted files or directories from the directory we're about to zip:
+ pruneFiles($zip, $config);
+
+ local $zipfile = Archive::Zip->new();
+ local $topdir = $zip->{topdir};
+ $topdir =~ s/%filestem%/$filestem/g;
+ $zipfile->addTree('.', $topdir);
+ if (-e $zipname) {!system("rm -f $zipname") or die "Error -- Couldn't remove $zipname.";}
+ $zipfile->writeToFileNamed($zipname);
+ chdir("$out");
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ # move .zip from <out>/ziptemp to <out>.
+ !system("mv -f ziptemp/$zipname .") or die "Error -- Couldn't move $zipname to ..";
+ system("rm -rf ziptemp") if (-d "ziptemp"); ## Clean up any temp directory.
+ print "Info -- created $out\\$zipname.\n" if ($verbose);
+ }
+
return 1; \ No newline at end of file
diff --git a/src/windows/build/pruneFiles.pl b/src/windows/build/pruneFiles.pl
index 9e47b1777e..0bb517624e 100644
--- a/src/windows/build/pruneFiles.pl
+++ b/src/windows/build/pruneFiles.pl
@@ -1,36 +1,36 @@
-#!perl -w
-
-#use strict;
-use Data::Dumper;
-
-sub pruneFiles {
- local ($xml, $config) = @_;
- local $prunes = $xml->{Prunes};
- if (! $prunes) {return 0;}
-
- # Use Unix find instead of Windows find. Save PATH so we can restore it when we're done:
- local $savedPATH = $ENV{PATH};
- $ENV{PATH} = $config->{Config}->{unixfind}->{value}.";".$savedPATH;
- print "Info -- Processing prunes in ".`cd`."\n" if ($verbose);
- local $pru = $prunes->{Prune};
- local $files = "( ";
- local $bFirst = 1;
- while (($key, $val) = each %$pru) {
- local $flags = $val->{flags};
- $flags = "" if (!$flags);
- if (!$bFirst) {$files .= " -or ";}
- $bFirst = 0;
- $files .= "-".$flags."name $key";
- print "Info -- Looking for filenames matching $key\n" if ($verbose);
- }
- $files .= " )";
- local $list = `find . $files`;
- if (length($list) > 1) {
- print "Info -- Pruning $list\n" if ($verbose);
- ! system("rm -rf $list") or die "Unable to prune $list";
- }
-
- $ENV{PATH} = $savedPATH;
- }
-
-return 1;
+#!perl -w
+
+#use strict;
+use Data::Dumper;
+
+sub pruneFiles {
+ local ($xml, $config) = @_;
+ local $prunes = $xml->{Prunes};
+ if (! $prunes) {return 0;}
+
+ # Use Unix find instead of Windows find. Save PATH so we can restore it when we're done:
+ local $savedPATH = $ENV{PATH};
+ $ENV{PATH} = $config->{Config}->{unixfind}->{value}.";".$savedPATH;
+ print "Info -- Processing prunes in ".`cd`."\n" if ($verbose);
+ local $pru = $prunes->{Prune};
+ local $files = "( ";
+ local $bFirst = 1;
+ while (($key, $val) = each %$pru) {
+ local $flags = $val->{flags};
+ $flags = "" if (!$flags);
+ if (!$bFirst) {$files .= " -or ";}
+ $bFirst = 0;
+ $files .= "-".$flags."name $key";
+ print "Info -- Looking for filenames matching $key\n" if ($verbose);
+ }
+ $files .= " )";
+ local $list = `find . $files`;
+ if (length($list) > 1) {
+ print "Info -- Pruning $list\n" if ($verbose);
+ ! system("rm -rf $list") or die "Unable to prune $list";
+ }
+
+ $ENV{PATH} = $savedPATH;
+ }
+
+return 1;
diff --git a/src/windows/build/repository1.pl b/src/windows/build/repository1.pl
index 03ee519520..2f4ee21ae9 100644
--- a/src/windows/build/repository1.pl
+++ b/src/windows/build/repository1.pl
@@ -1,90 +1,90 @@
-#!perl -w
-
-#use strict;
-
-sub repository1 {
- local ($config) = @_;
- local $odr = $config->{Config}; ## Options, directories, repository, environment.
- local $src = $odr->{src}->{value};
- local $rverb = $odr->{repository}->{value};
- local $wd = $src."\\pismere";
-
- if ($rverb =~ /skip/) {print "Info -- *** Skipping repository access.\n" if ($verbose);}
- else {
- if ($verbose) {print "Info -- *** Begin fetching sources.\n";}
- local $cvspath = "$src";
- if (! -d $cvspath) { ## xcopy will create the entire path for us.
- !system("echo foo > a.tmp") or die "Fatal -- Couldn't create temporary file in ".`cd`;
- !system("echo F | xcopy a.tmp $cvspath\\a.tmp") or die "Fatal -- Couldn't xcopy to $cvspath.";
- !system("rm a.tmp") or die "Fatal -- Couldn't remove temporary file.";
- !system("rm $cvspath\\a.tmp") or die "Fatal -- Couldn't remove temporary file.";
- }
-
- # Set up cvs environment variables:
- $ENV{CVSROOT} = $odr->{CVSROOT}->{value};
- local $krb5dir = "$wd\\athena\\auth\\krb5";
-
- local $cvscmdroot = "cvs $rverb";
- if (length $odr->{cvstag}->{value} > 0) {
- $cvscmdroot .= " -r $odr->{cvstag}->{value}";
- }
-
- if ($rverb =~ /checkout/) {
- chdir($src) or die "Fatal -- couldn't chdir to $src\n";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- my @cvsmodules = (
- 'krb',
- 'pismere/athena/util/lib/delaydlls',
- 'pismere/athena/util/lib/getopt',
- 'pismere/athena/util/guiwrap'
- );
-
- foreach my $module (@cvsmodules) {
- local $cvscmd = $cvscmdroot." ".$module;
- if ($verbose) {print "Info -- cvs command: $cvscmd\n";}
- !system($cvscmd) or die "Fatal -- command \"$cvscmd\" failed; return code $?\n";
- }
- }
- else { ## Update.
- chdir($wd) or die "Fatal -- couldn't chdir to $wd\n";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- if ($verbose) {print "Info -- cvs command: $cvscmdroot\n";}
- !system($cvscmdroot) or die "Fatal -- command \"$cvscmdroot\" failed; return code $?\n";
- }
-
- # Set up svn environment variable:
- $ENV{SVN_SSH} = "plink.exe";
- # If the directory structure doesn't exist, many cd commands will fail.
- if (! -d $krb5dir) { ## xcopy will create the entire path for us.
- !system("echo foo > a.tmp") or die "Fatal -- Couldn't create temporary file in ".`cd`;
- !system("echo F | xcopy a.tmp $krb5dir\\a.tmp") or die "Fatal -- Couldn't xcopy to $krb5dir.";
- !system("rm a.tmp") or die "Fatal -- Couldn't remove temporary file.";
- !system("rm $krb5dir\\a.tmp") or die "Fatal -- Couldn't remove temporary file.";
- }
-
- chdir($krb5dir) or die "Fatal -- Couldn't chdir to $krb5dir";
- print "Info -- chdir to ".`cd`."\n" if ($verbose);
- my $svncmd = "svn $rverb ";
- if ($rverb =~ /checkout/) { # Append the rest of the checkout command:
- chdir("..");
- $svncmd .= "svn+ssh://".$odr->{username}->{value}."@".$odr->{SVNURL}->{value}."/krb5/";
- if (length $odr->{svntag}->{value} > 0) {
- $svncmd .= "tags/$odr->{svntag}->{value}";
- }
- elsif (length $odr->{svnbranch}->{value} > 0) {
- $svncmd .= "branches/$odr->{svnbranch}->{value}";
- }
- else {
- $svncmd .= "trunk";
- }
-
- $svncmd .= " krb5";
-
- }
- if ($verbose) {print "Info -- svn command: $svncmd\n";}
- !system($svncmd) or die "Fatal -- command \"$svncmd\" failed; return code $?\n";
- if ($verbose) {print "Info -- *** End fetching sources.\n";}
- }
- }
-
+#!perl -w
+
+#use strict;
+
+sub repository1 {
+ local ($config) = @_;
+ local $odr = $config->{Config}; ## Options, directories, repository, environment.
+ local $src = $odr->{src}->{value};
+ local $rverb = $odr->{repository}->{value};
+ local $wd = $src."\\pismere";
+
+ if ($rverb =~ /skip/) {print "Info -- *** Skipping repository access.\n" if ($verbose);}
+ else {
+ if ($verbose) {print "Info -- *** Begin fetching sources.\n";}
+ local $cvspath = "$src";
+ if (! -d $cvspath) { ## xcopy will create the entire path for us.
+ !system("echo foo > a.tmp") or die "Fatal -- Couldn't create temporary file in ".`cd`;
+ !system("echo F | xcopy a.tmp $cvspath\\a.tmp") or die "Fatal -- Couldn't xcopy to $cvspath.";
+ !system("rm a.tmp") or die "Fatal -- Couldn't remove temporary file.";
+ !system("rm $cvspath\\a.tmp") or die "Fatal -- Couldn't remove temporary file.";
+ }
+
+ # Set up cvs environment variables:
+ $ENV{CVSROOT} = $odr->{CVSROOT}->{value};
+ local $krb5dir = "$wd\\athena\\auth\\krb5";
+
+ local $cvscmdroot = "cvs $rverb";
+ if (length $odr->{cvstag}->{value} > 0) {
+ $cvscmdroot .= " -r $odr->{cvstag}->{value}";
+ }
+
+ if ($rverb =~ /checkout/) {
+ chdir($src) or die "Fatal -- couldn't chdir to $src\n";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ my @cvsmodules = (
+ 'krb',
+ 'pismere/athena/util/lib/delaydlls',
+ 'pismere/athena/util/lib/getopt',
+ 'pismere/athena/util/guiwrap'
+ );
+
+ foreach my $module (@cvsmodules) {
+ local $cvscmd = $cvscmdroot." ".$module;
+ if ($verbose) {print "Info -- cvs command: $cvscmd\n";}
+ !system($cvscmd) or die "Fatal -- command \"$cvscmd\" failed; return code $?\n";
+ }
+ }
+ else { ## Update.
+ chdir($wd) or die "Fatal -- couldn't chdir to $wd\n";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ if ($verbose) {print "Info -- cvs command: $cvscmdroot\n";}
+ !system($cvscmdroot) or die "Fatal -- command \"$cvscmdroot\" failed; return code $?\n";
+ }
+
+ # Set up svn environment variable:
+ $ENV{SVN_SSH} = "plink.exe";
+ # If the directory structure doesn't exist, many cd commands will fail.
+ if (! -d $krb5dir) { ## xcopy will create the entire path for us.
+ !system("echo foo > a.tmp") or die "Fatal -- Couldn't create temporary file in ".`cd`;
+ !system("echo F | xcopy a.tmp $krb5dir\\a.tmp") or die "Fatal -- Couldn't xcopy to $krb5dir.";
+ !system("rm a.tmp") or die "Fatal -- Couldn't remove temporary file.";
+ !system("rm $krb5dir\\a.tmp") or die "Fatal -- Couldn't remove temporary file.";
+ }
+
+ chdir($krb5dir) or die "Fatal -- Couldn't chdir to $krb5dir";
+ print "Info -- chdir to ".`cd`."\n" if ($verbose);
+ my $svncmd = "svn $rverb ";
+ if ($rverb =~ /checkout/) { # Append the rest of the checkout command:
+ chdir("..");
+ $svncmd .= "svn+ssh://".$odr->{username}->{value}."@".$odr->{SVNURL}->{value}."/krb5/";
+ if (length $odr->{svntag}->{value} > 0) {
+ $svncmd .= "tags/$odr->{svntag}->{value}";
+ }
+ elsif (length $odr->{svnbranch}->{value} > 0) {
+ $svncmd .= "branches/$odr->{svnbranch}->{value}";
+ }
+ else {
+ $svncmd .= "trunk";
+ }
+
+ $svncmd .= " krb5";
+
+ }
+ if ($verbose) {print "Info -- svn command: $svncmd\n";}
+ !system($svncmd) or die "Fatal -- command \"$svncmd\" failed; return code $?\n";
+ if ($verbose) {print "Info -- *** End fetching sources.\n";}
+ }
+ }
+
return 1; \ No newline at end of file
diff --git a/src/windows/build/sdkfiles.xml b/src/windows/build/sdkfiles.xml
index 37a5f422c7..c938107ca5 100644
--- a/src/windows/build/sdkfiles.xml
+++ b/src/windows/build/sdkfiles.xml
@@ -1,23 +1,23 @@
-<?xml version="1.0" encoding="utf-8" ?>
- <Files>
- <!-- File from paths are relative to <src>/pismere. -->
- <!-- File to paths are relative to <out>. -->
- <File dummy="foo" /> <!-- Forces XML::Simple behavior -->
- <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->
-
- <File name="relnotes.html" from="doc\kerberos" to="doc" />
- <File name="kclient.rtf" from="athena\auth\krb4\kclient\doc" to="doc" />
- <File name="msi-deployment-guide.txt" from="athena\auth\krb5\src\windows\installer\wix\" to="\doc" />
-
- <File name="*.*" from="staging\inc" to="inc" />
- <!-- loadfuncs.c is deliberately here. Otherwise, *.h would work. -->
-
- <File name="*.*" from="staging\install\nsis" to="install\nsis\" />
- <!-- We'll clean up the exes in the target directory in a later step. -->
-
- <File name="*.*" from="staging\install\wix" to="install\wix\" />
- <!-- We'll clean up the msi in the target directory in a later step. -->
-
- <File name="*.lib" from="staging\lib\i386" to="lib\i386\" />
-
+<?xml version="1.0" encoding="utf-8" ?>
+ <Files>
+ <!-- File from paths are relative to <src>/pismere. -->
+ <!-- File to paths are relative to <out>. -->
+ <File dummy="foo" /> <!-- Forces XML::Simple behavior -->
+ <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->
+
+ <File name="relnotes.html" from="doc\kerberos" to="doc" />
+ <File name="kclient.rtf" from="athena\auth\krb4\kclient\doc" to="doc" />
+ <File name="msi-deployment-guide.txt" from="athena\auth\krb5\src\windows\installer\wix\" to="\doc" />
+
+ <File name="*.*" from="staging\inc" to="inc" />
+ <!-- loadfuncs.c is deliberately here. Otherwise, *.h would work. -->
+
+ <File name="*.*" from="staging\install\nsis" to="install\nsis\" />
+ <!-- We'll clean up the exes in the target directory in a later step. -->
+
+ <File name="*.*" from="staging\install\wix" to="install\wix\" />
+ <!-- We'll clean up the msi in the target directory in a later step. -->
+
+ <File name="*.lib" from="staging\lib\i386" to="lib\i386\" />
+
</Files> \ No newline at end of file
diff --git a/src/windows/build/signFiles.pl b/src/windows/build/signFiles.pl
index 65ccb0a11c..ea093b1d7e 100644
--- a/src/windows/build/signFiles.pl
+++ b/src/windows/build/signFiles.pl
@@ -1,27 +1,27 @@
-#!perl -w
-
-#use strict;
-use Data::Dumper;
-
-sub signFiles {
- local ($signing, $config) = @_;
- local $exprs = $signing->{FilePatterns}->{value};
- local $template = $signing->{CommandTemplate}->{value};
- # Use Unix find instead of Windows find. Save PATH so we can restore it when we're done:
- local $savedPATH= $ENV{PATH};
- $ENV{PATH} = $config->{Config}->{unixfind}->{value}.";".$savedPATH;
- foreach $expr (split(" ", $exprs)) { ## exprs is something like "*.exe *.dll"
- local $cmd = "find . -iname \"$expr\"";
- local $list = `$cmd`; ## $list is files matching *.exe, for example.
- foreach $target (split("\n", $list)) {
- $target =~ s|/|\\|g; ## Flip path separators from unix-style to windows-style.
- local $template2 = $template;
- $template2 =~ s/%filename%/$target/;
- print "Info -- Signing $target\n" if ($verbose);
- !system("$template2") or die "Fatal -- Error signing $target.";
- }
- }
- $ENV{PATH} = $savedPATH;
- }
-
+#!perl -w
+
+#use strict;
+use Data::Dumper;
+
+sub signFiles {
+ local ($signing, $config) = @_;
+ local $exprs = $signing->{FilePatterns}->{value};
+ local $template = $signing->{CommandTemplate}->{value};
+ # Use Unix find instead of Windows find. Save PATH so we can restore it when we're done:
+ local $savedPATH= $ENV{PATH};
+ $ENV{PATH} = $config->{Config}->{unixfind}->{value}.";".$savedPATH;
+ foreach $expr (split(" ", $exprs)) { ## exprs is something like "*.exe *.dll"
+ local $cmd = "find . -iname \"$expr\"";
+ local $list = `$cmd`; ## $list is files matching *.exe, for example.
+ foreach $target (split("\n", $list)) {
+ $target =~ s|/|\\|g; ## Flip path separators from unix-style to windows-style.
+ local $template2 = $template;
+ $template2 =~ s/%filename%/$target/;
+ print "Info -- Signing $target\n" if ($verbose);
+ !system("$template2") or die "Fatal -- Error signing $target.";
+ }
+ }
+ $ENV{PATH} = $savedPATH;
+ }
+
return 1; \ No newline at end of file
diff --git a/src/windows/build/site-local.sed b/src/windows/build/site-local.sed
index 34d68ff66c..191d200897 100644
--- a/src/windows/build/site-local.sed
+++ b/src/windows/build/site-local.sed
@@ -1,2 +1,2 @@
-s/<?define TargetDir="c:.temp.*"?>/<?define TargetDir="%%TARGETDIR%%"?>/
+s/<?define TargetDir="c:.temp.*"?>/<?define TargetDir="%%TARGETDIR%%"?>/
s/<?define ConfigDir="c:.temp.*"?>/<?define ConfigDir="%%CONFIGDIR%%"?>/ \ No newline at end of file
diff --git a/src/windows/build/tee.pl b/src/windows/build/tee.pl
index a9c30fb459..2c33370af0 100644
--- a/src/windows/build/tee.pl
+++ b/src/windows/build/tee.pl
@@ -1,79 +1,79 @@
-# Usage 'tee filename'
-# Make sure that when using this as a perl pipe you
-# print a EOF char!
-# (This may be a bug in perl 4 for NT)
-#
-# Use it like:
-# open(PIPE, "|$^X tee.pl foo.log") || die "Can't pipe";
-# open(STDOUT, ">&PIPE") || die "Can't dup pipe to stdout";
-# open(STDERR, ">&PIPE") || die "Can't dup pipe to stderr";
-
-use IO::File;
-
-#$SIG{'INT'} = \&handler;
-#$SIG{'QUIT'} = \&handler;
-
-$SIG{'INT'} = 'IGNORE';
-$SIG{'QUIT'} = \&handler;
-
-my $fh = new IO::File;
-
-my $arg = shift;
-my $file;
-my $access = ">";
-
-while ($arg) {
- if ($arg =~ /-a/) {
- $access = ">>";
- } elsif ($arg =~ /-i/) {
- $SIG{'INT'} = 'IGNORE';
- $SIG{'QUIT'} = 'IGNORE';
- } else {
- $file = $arg;
- last;
- }
- $arg = shift;
-}
-
-STDOUT->autoflush(1);
-
-if ($file) {
- $fh->open($access.$file) || die "Could not open $file\n";
- $fh->autoflush(1);
-}
-
-while (<>) {
- $_ = &logtime.$_;
- print $_;
- print $fh $_ if $file;
-}
-
-sub logtime {
- my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
- $mon = $mon + 1;
- $year %= 100;
- sprintf ("[%02d/%02d/%02d %02d:%02d:%02d] ",
- $year, $mon, $mday,
- $hour, $min, $sec);
-}
-
-sub handler {
- my $sig = shift;
- my $bailmsg = &logtime."Bailing out due to SIG$sig!\n";
- my $warnmsg = <<EOH;
-*********************************
-* FUTURE BUILDS MAY FAIL UNLESS *
-* BUILD DIRECTORIES ARE CLEANED *
-*********************************
-EOH
- print $bailmsg, $warnmsg;
- print $fh $bailmsg, $warnmsg;
- print "Closing log...";
- undef $fh if $fh;
- print "closed!\n";
- exit(2);
-}
-
-END {
- undef $fh if $fh;
-}
+# Usage 'tee filename'
+# Make sure that when using this as a perl pipe you
+# print a EOF char!
+# (This may be a bug in perl 4 for NT)
+#
+# Use it like:
+# open(PIPE, "|$^X tee.pl foo.log") || die "Can't pipe";
+# open(STDOUT, ">&PIPE") || die "Can't dup pipe to stdout";
+# open(STDERR, ">&PIPE") || die "Can't dup pipe to stderr";
+
+use IO::File;
+
+#$SIG{'INT'} = \&handler;
+#$SIG{'QUIT'} = \&handler;
+
+$SIG{'INT'} = 'IGNORE';
+$SIG{'QUIT'} = \&handler;
+
+my $fh = new IO::File;
+
+my $arg = shift;
+my $file;
+my $access = ">";
+
+while ($arg) {
+ if ($arg =~ /-a/) {
+ $access = ">>";
+ } elsif ($arg =~ /-i/) {
+ $SIG{'INT'} = 'IGNORE';
+ $SIG{'QUIT'} = 'IGNORE';
+ } else {
+ $file = $arg;
+ last;
+ }
+ $arg = shift;
+}
+
+STDOUT->autoflush(1);
+
+if ($file) {
+ $fh->open($access.$file) || die "Could not open $file\n";
+ $fh->autoflush(1);
+}
+
+while (<>) {
+ $_ = &logtime.$_;
+ print $_;
+ print $fh $_ if $file;
+}
+
+sub logtime {
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
+ $mon = $mon + 1;
+ $year %= 100;
+ sprintf ("[%02d/%02d/%02d %02d:%02d:%02d] ",
+ $year, $mon, $mday,
+ $hour, $min, $sec);
+}
+
+sub handler {
+ my $sig = shift;
+ my $bailmsg = &logtime."Bailing out due to SIG$sig!\n";
+ my $warnmsg = <<EOH;
+*********************************
+* FUTURE BUILDS MAY FAIL UNLESS *
+* BUILD DIRECTORIES ARE CLEANED *
+*********************************
+EOH
+ print $bailmsg, $warnmsg;
+ print $fh $bailmsg, $warnmsg;
+ print "Closing log...";
+ undef $fh if $fh;
+ print "closed!\n";
+ exit(2);
+}
+
+END {
+ undef $fh if $fh;
+}
diff --git a/src/windows/build/which.pl b/src/windows/build/which.pl
index 1cf89ce571..8f3527c146 100644
--- a/src/windows/build/which.pl
+++ b/src/windows/build/which.pl
@@ -1,69 +1,69 @@
-#!perl -w
-
-use strict;
-use Config;
-use File::Basename;
-use Getopt::Long;
-
-$0 = fileparse($0);
-
-sub main
-{
- Getopt::Long::Configure('bundling', 'no_auto_abbrev',
- 'no_getopt_compat', 'require_order',
- 'ignore_case', 'pass_through',
- 'prefix_pattern=(--|-|\+|\/)',
- );
- my $OPT = {};
- GetOptions($OPT,
- 'help|h|?',
- 'all|a',
- 'quiet|q',
- 'debug|d',
- 'path:s',
- );
-
- my $f = shift @ARGV;
- if ($OPT->{help} || !$f) {
- usage();
- exit(0) if $OPT->{help};
- exit(1);
- }
-
- my $p = $OPT->{path} || $ENV{PATH};
- my $s = $Config{path_sep};
- my @d = split(/$s/, $p);
- my @e = split(/$s/, lc($ENV{PATHEXT} || '.bat;.exe;.com'));
- my @f = ($f, map { $f.$_; } @e);
- my $found = 0;
- foreach my $d (@d) {
- print "(Searching $d)\n" if $OPT->{debug};
- foreach my $f (@f) {
- my $df = $d.'\\'.$f; # cannot use $File::Spec->catfile due to UNC.
- print "(Checking for $df)\n" if $OPT->{debug};
- if (-f $df) {
- exit(0) if $OPT->{quiet};
- print "$df\n";
- exit(0) if !$OPT->{all};
- $found = 1;
- }
- }
- }
- print "Could not find $f\n" if !$found && !$OPT->{quiet};
- exit($found?0:1);
-}
-
-sub usage
-{
- print <<USAGE;
-Usage: $0 [options] command
- command find file executed by this command by looking at PATH
- -d, --debug debug output
- -a, --all find all such commands in PATH
- -q, --quiet no output, exit with non-zero errorcode if not found
- --path PATHARG search PATHARG instead of the PATH environment variable
- -?, -H, --help help
-USAGE
-}
-
-main();
+#!perl -w
+
+use strict;
+use Config;
+use File::Basename;
+use Getopt::Long;
+
+$0 = fileparse($0);
+
+sub main
+{
+ Getopt::Long::Configure('bundling', 'no_auto_abbrev',
+ 'no_getopt_compat', 'require_order',
+ 'ignore_case', 'pass_through',
+ 'prefix_pattern=(--|-|\+|\/)',
+ );
+ my $OPT = {};
+ GetOptions($OPT,
+ 'help|h|?',
+ 'all|a',
+ 'quiet|q',
+ 'debug|d',
+ 'path:s',
+ );
+
+ my $f = shift @ARGV;
+ if ($OPT->{help} || !$f) {
+ usage();
+ exit(0) if $OPT->{help};
+ exit(1);
+ }
+
+ my $p = $OPT->{path} || $ENV{PATH};
+ my $s = $Config{path_sep};
+ my @d = split(/$s/, $p);
+ my @e = split(/$s/, lc($ENV{PATHEXT} || '.bat;.exe;.com'));
+ my @f = ($f, map { $f.$_; } @e);
+ my $found = 0;
+ foreach my $d (@d) {
+ print "(Searching $d)\n" if $OPT->{debug};
+ foreach my $f (@f) {
+ my $df = $d.'\\'.$f; # cannot use $File::Spec->catfile due to UNC.
+ print "(Checking for $df)\n" if $OPT->{debug};
+ if (-f $df) {
+ exit(0) if $OPT->{quiet};
+ print "$df\n";
+ exit(0) if !$OPT->{all};
+ $found = 1;
+ }
+ }
+ }
+ print "Could not find $f\n" if !$found && !$OPT->{quiet};
+ exit($found?0:1);
+}
+
+sub usage
+{
+ print <<USAGE;
+Usage: $0 [options] command
+ command find file executed by this command by looking at PATH
+ -d, --debug debug output
+ -a, --all find all such commands in PATH
+ -q, --quiet no output, exit with non-zero errorcode if not found
+ --path PATHARG search PATHARG instead of the PATH environment variable
+ -?, -H, --help help
+USAGE
+}
+
+main();
diff --git a/src/windows/build/zipXML.pl b/src/windows/build/zipXML.pl
index 0c50e96aed..01e8fed419 100644
--- a/src/windows/build/zipXML.pl
+++ b/src/windows/build/zipXML.pl
@@ -1,21 +1,21 @@
-#!perl -w
-
-#use strict;
-require "makeZip.pl";
-
-use Data::Dumper;
-
-sub zipXML {
- local ($xml, $config) = @_;
- my $zipsXML = $xml->{Zips};
- if (! $zipsXML) {return 0;}
-
- local $i = 0;
- while ($zipsXML->{Zip}[$i]) {
- local $zip = $zipsXML->{Zip}[$i];
- makeZip($zip, $config) if (exists $zip->{name}); ## Ignore dummy entry.
- $i++;
- } ## End zip in xml.
- }
-
-return 1;
+#!perl -w
+
+#use strict;
+require "makeZip.pl";
+
+use Data::Dumper;
+
+sub zipXML {
+ local ($xml, $config) = @_;
+ my $zipsXML = $xml->{Zips};
+ if (! $zipsXML) {return 0;}
+
+ local $i = 0;
+ while ($zipsXML->{Zip}[$i]) {
+ local $zip = $zipsXML->{Zip}[$i];
+ makeZip($zip, $config) if (exists $zip->{name}); ## Ignore dummy entry.
+ $i++;
+ } ## End zip in xml.
+ }
+
+return 1;