Remove tabs. Improve some comments. Regroup files in copylist.pl according to desti...
authorKevin Koch <kpkoch@mit.edu>
Fri, 30 Mar 2007 20:08:53 +0000 (20:08 +0000)
committerKevin Koch <kpkoch@mit.edu>
Fri, 30 Mar 2007 20:08:53 +0000 (20:08 +0000)
Add signing.

Factor zipfiles out of bkw.pl and signing out of makeZip.pl.

Rename MITKerberosForWindows.exe before zipping it into the SDK zipfile.

Target_Version: 1.6.1
Ticket: 5490
Tags: pullup

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19344 dc483132-0cff-0310-8789-dd5450dbe970

src/windows/build/BKWconfig.xml
src/windows/build/bkw.pl
src/windows/build/copyfiles.pl
src/windows/build/copyfiles.xml
src/windows/build/makeZip.pl [new file with mode: 0644]
src/windows/build/sdkfiles.xml
src/windows/build/signFiles.pl [new file with mode: 0644]

index 9818db79c1a2844ae9cc213319b04e1360e244df..7e1fd24c7d3d1472bdb06105db0c43881a62c0ac 100644 (file)
 <?xml version="1.0" encoding="utf-8" ?>\r
 <!-- BKW: Build Kerberos for Windows -->\r
 <BKW_Config>\r
-       <CommandLine>\r
-               <!-- The most changeable parameters can be specified on the command line.       -->\r
-               <Tags>\r
-                       <cvs value="" />\r
-                       <svn value=""/>\r
-                       </Tags>\r
-               <Directories>\r
-                       <!--    Sources will be checked out of repositories into <src>.  The structure\r
-                                               of the repositories will cause pismere/athena to be created under <src>.        -->\r
-                       <src                    path    ="C:\projects\Autobuild" />\r
-                       <out                    path    ="public" /> <!-- Relative to src. -->\r
-                       <unixfind       path    ="c:\cygwin\bin" />\r
-                       </Directories>\r
-               <Options>\r
-                       <debug value="0" />\r
-                       <logfile value="1" path="bkw.pl.log" />\r
-                       <repository value="skip" />\r
-                       <clean value="0" />\r
-                       <nomake value="0" />\r
-                       <nopackage value="0" />\r
-                       <verbose value="0" />\r
-                       <vverbose value="0" />\r
-                       </Options>\r
-               </CommandLine>\r
-       <Stages>\r
-               <FetchSources>\r
-                       <Config>\r
-                               <CVSROOT name=":kserver:cvs.mit.edu:/cvs/pismere" />\r
-                               <SVNURL name="svn.mit.edu" />   <!-- NB:  No protocol or slashes!! -->\r
-                               <USERNAME name="" />                                    <!-- Needed for svn/plink.  Override from command line -->\r
-                               </Config>\r
-               </FetchSources>\r
-               <Make>\r
-                       <Prunes> <!-- Files to be removed from current build to match what is in the 3.1 distribution:  -->\r
-                               <Prune dummy="foo" />           <!-- Force XML::Simple behavior -->\r
-                               <Prune name="afsauth" />\r
-                               <Prune name="aklog" />\r
-                               <Prune name="vs" />\r
-                               </Prunes>\r
-                       </Make>\r
-               <PrePackage>\r
-                       <CopyList>\r
-                               <Config>\r
-                                       <!--    Debug and Release build results go in different places.\r
-                                                               The otherwise identical paths differ in one section.  For example:\r
-                                                               .../target/bin/i386/bin/rel/filename and .../target/bin/i386/dbg/filename.\r
-                                                               Here we define the two differing sections:      -->\r
-                                       <DebugArea value="dbg" />\r
-                                       <ReleaseArea value="rel" />\r
-                                       <!--    Paths in the file list that include <AlwaysTag> will always have the tag replaced \r
-                                                               with <DebugArea> or <ReleaseArea>, depending on the type of build.\r
-                                                               Paths that include <DebugTag> (or <ReleaseTag>) will only have the tag substituted \r
-                                                               and be copied when doing a debug (or release) build.  Examples:\r
-                                                               Will always be copied, from a build-dependent directory:\r
-                                                               <File name="kfwlogon.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" /> \r
-                                                               Will only be copied in debug build:\r
-                                                               <File name="netidmgr.exe.static.manifest"       from="..\target\bin\i386\%debug%\"      to="\bin\i386" notrequired="true" />\r
-                                                               Will always be copied, from a build-independent directory:\r
-                                                               <File name="des.h"      from="auth\krb4\include\"       to="\inc\krb4" newname="foo.h"/>\r
-                                                               -->\r
-                                       <AlwaysTag value="%bldtype%" /> <!-- Pick a string that won't appear in a path. -->\r
-                                       <DebugTag value="%debug%" /> <!-- Pick a string that won't appear in a path. -->\r
-                                       <ReleaseTag value="%release%" /> <!-- Pick a string that won't appear in a path. -->\r
-                                       </Config>\r
-                               <Files>\r
-                                       <Include path="copyfiles.xml" />\r
-                                       </Files> <!-- Relative to location of bkw.pl. -->\r
-                       </CopyList>\r
-               </PrePackage>\r
-               <Package>\r
-                       <Config>\r
-                               <Paths> \r
-                                       <Versions path="pismere/athena/include/kerberos.ver" />         <!-- Relative to <src>. -->\r
-                                       </Paths>\r
-                               </Config>\r
-                       <MSI></MSI>\r
-                       <NSIS></NSIS> <!-- NB:  Most config is done in site-local.nsi.  -->\r
-               </Package>\r
-               <PostPackage>\r
-                       <Config>                                                                                                        <!-- This config info will be copied into each CopyList in PostPackage. -->\r
-                               <FileStem name="kfw-%VERSION_MAJOR%-%VERSION_MINOR%-%VERSION_PATCH%" />         <!--    <FileStem> will be substituted for %filestem%.  -->\r
-                               </Config>\r
-                       <Zips>\r
-                               <Zip dummy="foo" /> <!-- To force desired XML::Simple behavior  -->\r
-                               <!--    Files will be copied into directory <topdir>; <topdir> will appear in the paths of the files.   -->\r
-                               <!-- File from  paths are relative to <src>/pismere.    -->\r
-                               <!-- File to                    paths are relative to <out>.                                    -->\r
-                               <Zip name="Core Binaries" filename="%filestem%.zip" topdir="%filestem%-final">\r
-                                       <CopyList>\r
-                                               <Config>\r
-                                                       <DebugArea value="dbg" />\r
-                                                       <ReleaseArea value="rel" />\r
-                                                       <AlwaysTag value="%bldtype%" /> <!-- Pick a string that won't appear in a path. -->\r
-                                                       <DebugTag value="%debug%" /> <!-- Pick a string that won't appear in a path. -->\r
-                                                       <ReleaseTag value="%release%" /> <!-- Pick a string that won't appear in a path. -->\r
-                                                       </Config>\r
-                                               <Files>\r
-                                                       <Include path="corebinaryfiles.xml" />\r
-                                                       </Files> <!-- Relative to location of bkw.pl. -->\r
-                                               </CopyList>\r
-                               </Zip>\r
-                               <Zip name="SDK" filename="%filestem%-sdk.zip" topdir="%filestem%-final">\r
-                                       <CopyList>\r
-                                               <Files>\r
-                                                       <Include path="sdkfiles.xml" />\r
-                                                       </Files> <!-- Relative to location of bkw.pl. -->\r
-                                               </CopyList>\r
-                               </Zip>\r
-                               <Zip name="SRC" filename="%filestem%-src.zip" topdir="%filestem%-final">\r
-                                       <CopyList>\r
-                                               <Files>\r
-                                                       <!-- File from  paths are relative to <src>/pismere.    -->\r
-                                                       <!-- File to                    paths are relative to <out>.                                    -->\r
-                                                       <File dummy="foo" /> <!-- Forces XML::Simple behavior -->\r
-                                                       <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->\r
-                                                       <File name="*.*" from="athena" to="src\athena" />\r
-                                                       <File name="*.*" from="doc" to="src\doc" />\r
-                                                       <File name="*.*" from="scripts" to="src\scripts" />\r
-                                                       </Files>\r
-                                       </CopyList>\r
-                                       <Prunes> <!-- Files to be removed from current build to match what is in the 3.1 distribution:  -->\r
-                                               <Prune dummy="foo" />\r
-                                               <Prune name="CVS" />\r
-                                               <Prune name=".cvsignore" flags="i" />\r
-                                               <Prune name="Changelog" flags="i" />\r
-                                               <Prune name="obj" />\r
-                                               <Prune name="site" />\r
-                                               </Prunes>\r
-                                       <Requires>\r
-                                               <Switch dummy="foo" />\r
-                                               <Switch name="REPOSITORY" value="CHECKOUT"/>\r
-                                               <ErrorMsg text="Can't build source zip unless /REPOSITORY CHECKOUT is specified." />\r
-                                               </Requires>\r
-                                       </Zip>\r
-                               </Zips>                 \r
-                       <CopyList>                      <!-- Copied at end of post-package step.        -->\r
-                               <Files>\r
-                                       <File dummy="foo" />\r
-                                       <!-- File from  paths are relative to <src>/pismere.    -->\r
-                                       <!-- File to                    paths are relative to <out>.                                    -->\r
-                                       <File name="msi-deployment-guide.txt" from="staging\install\wix\" to="" />\r
-                                       <File name="netidmgr_userdoc.pdf" from="staging\doc" to="." />\r
-                                       <File name="kfw.msi" from="staging\install\wix\" to="" newname="%filestem%.msi" />\r
-                                       <File name="MITKerberosForWindows%-DEBUG%.exe" from="staging\install\nsis" to="" newname="%filestem%%-DEBUG%.exe" />\r
-                                       </Files>\r
-                               </CopyList>\r
-                       </PostPackage>\r
-       </Stages>\r
+    <CommandLine>\r
+        <!-- The most changeable parameters can be specified on the command line.    -->\r
+        <Tags>\r
+            <cvs value="" />\r
+            <svn value=""/>\r
+            </Tags>\r
+        <Directories>\r
+            <!--    Sources will be checked out of repositories into <src>.  The structure\r
+                    of the repositories will cause pismere/athena to be created under <src>.    -->\r
+            <src        path    ="C:\projects\Autobuild" />\r
+            <out        path    ="public" /> <!-- Relative to src. -->\r
+            <unixfind   path    ="c:\cygwin\bin" />\r
+            </Directories>\r
+        <Options>\r
+            <debug      value="0" />\r
+            <logfile    value="1" path="bkw.pl.log" />\r
+            <repository value="skip" />\r
+            <clean      value="0" />\r
+            <nomake     value="0" />\r
+            <nopackage  value="0" />\r
+            <sign       value="0" timestampserver="" />\r
+            <verbose    value="0" />\r
+            <vverbose   value="0" />\r
+            </Options>\r
+        </CommandLine>\r
+    <Stages>\r
+        <FetchSources>\r
+            <Config>\r
+                <CVSROOT    name=":kserver:cvs.mit.edu:/cvs/pismere" />\r
+                <SVNURL     name="svn.mit.edu" />   <!-- NB:  No protocol or slashes!! -->\r
+                <USERNAME   name="" />              <!-- Needed for svn/plink.  Override from command line -->\r
+                </Config>\r
+        </FetchSources>\r
+        <Make>\r
+            <Prunes> <!-- Files to be removed from current build to match what is in the 3.1 distribution:    -->\r
+                <Prune dummy="foo" />       <!-- Force XML::Simple behavior -->\r
+                <Prune name="afsauth" />\r
+                <Prune name="aklog" />\r
+                <Prune name="vs" />\r
+                </Prunes>\r
+            </Make>\r
+        <PrePackage>\r
+            <CopyList>\r
+                <Config>\r
+                    <!--    Debug and Release build results go in different places.\r
+                            The otherwise identical paths differ in one section.  For example:\r
+                            .../target/bin/i386/bin/rel/filename and .../target/bin/i386/dbg/filename.\r
+                            Here we define the two differing sections:    -->\r
+                    <DebugArea value="dbg" />\r
+                    <ReleaseArea value="rel" />\r
+                    <!--    Paths in the file list that include <AlwaysTag> will always have the tag replaced \r
+                            with <DebugArea> or <ReleaseArea>, depending on the type of build.\r
+                            Paths that include <DebugTag> (or <ReleaseTag>) will only have the tag substituted \r
+                            and be copied when doing a debug (or release) build.  Examples:\r
+                            Will always be copied, from a build-dependent directory:\r
+                            <File name="kfwlogon.dll"                 from="..\target\bin\i386\%bldtype%\" to="\bin\i386" /> \r
+                            Will only be copied in debug build:\r
+                            <File name="netidmgr.exe.static.manifest" from="..\target\bin\i386\%debug%\"   to="\bin\i386" notrequired="true" />\r
+                            Will always be copied, from a build-independent directory:\r
+                            <File name="des.h"                        from="auth\krb4\include\"            to="\inc\krb4" newname="foo.h"/>\r
+                            -->\r
+                    <AlwaysTag  value="%bldtype%" />    <!-- Pick a string that won't appear in a path. -->\r
+                    <DebugTag   value="%debug%" />      <!-- Pick a string that won't appear in a path. -->\r
+                    <ReleaseTag value="%release%" />    <!-- Pick a string that won't appear in a path. -->\r
+                    </Config>\r
+                <Files>\r
+                    <Include path="copyfiles.xml" />\r
+                    </Files> <!-- Relative to location of bkw.pl. -->\r
+            </CopyList>\r
+        </PrePackage>\r
+        <Package>\r
+            <Config>\r
+                <Paths>    \r
+                    <Versions path="pismere/athena/include/kerberos.ver" /> <!-- Relative to <src>. -->\r
+                    </Paths>\r
+                </Config>\r
+            <MSI></MSI>\r
+            <NSIS></NSIS> <!-- NB:  Most config is done in site-local.nsi.  -->\r
+        </Package>\r
+        <PostPackage>\r
+            <Config>    <!-- This config info will be copied into each CopyList in PostPackage. -->\r
+                <FileStem name="kfw-%VERSION_MAJOR%-%VERSION_MINOR%-%VERSION_PATCH%" /> <!-- <FileStem> will be substituted for %filestem%. -->\r
+                <Signing>\r
+                    <CommandTemplate    value="signtool sign /a /d &quot;MIT Kerberos for Windows&quot; /du &quot;http://web.mit.edu/kerberos&quot; /t TIMESTAMPSERVERGOESHERE %filename%" />\r
+                    <FilePatterns       value="*.exe *.dll *.cpl *.msi" />\r
+                    </Signing>\r
+                </Config>\r
+            <Zips>\r
+                <Zip dummy="foo" /> <!-- To force desired XML::Simple behavior    -->\r
+                <!--    Files will be copied into directory <topdir>; <topdir> will appear in the paths of the files.    -->\r
+                <!-- File from  paths are relative to <src>/pismere.    -->\r
+                <!-- File to    paths are relative to <out>.            -->\r
+                <Zip name="Core Binaries" filename="%filestem%.zip" topdir="%filestem%-final">\r
+                    <CopyList>\r
+                        <Config>\r
+                            <DebugArea   value="dbg" />\r
+                            <ReleaseArea value="rel" />\r
+                            <AlwaysTag   value="%bldtype%" /> <!-- Pick a string that won't appear in a path. -->\r
+                            <DebugTag    value="%debug%" />   <!-- Pick a string that won't appear in a path. -->\r
+                            <ReleaseTag  value="%release%" /> <!-- Pick a string that won't appear in a path. -->\r
+                            </Config>\r
+                        <Files>\r
+                            <Include path="corebinaryfiles.xml" />  <!-- Includeed file is relative to location of bkw.pl. -->\r
+                            </Files> \r
+                        </CopyList>\r
+                </Zip>\r
+                <Zip name="SDK" filename="%filestem%-sdk.zip" topdir="%filestem%-final">\r
+                    <CopyList>\r
+                        <Files>\r
+                            <Include path="sdkfiles.xml" />         <!-- Included file is relative to location of bkw.pl. -->\r
+                            </Files>\r
+                        </CopyList>\r
+                    <Prunes> \r
+                        <Prune dummy="foo" />\r
+                        <Prune name="MIT*.exe" />   <!-- MITKerberosForWindows.exe was copied to a new name in sdkfiles.xml. -->\r
+                        </Prunes>\r
+                </Zip>\r
+                <Zip name="SRC" filename="%filestem%-src.zip" topdir="%filestem%-final">\r
+                    <CopyList>\r
+                        <Files>\r
+                            <!-- File from    paths are relative to <src>/pismere.  -->\r
+                            <!-- File to      paths are relative to <out>.          -->\r
+                            <File dummy="foo" /> <!-- Forces XML::Simple behavior   -->\r
+                            <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->\r
+                            <File name="*.*" from="athena"  to="src\athena" />\r
+                            <File name="*.*" from="doc"     to="src\doc" />\r
+                            <File name="*.*" from="scripts" to="src\scripts" />\r
+                            </Files>\r
+                    </CopyList>\r
+                    <Prunes> <!-- Files to be removed from current build to match what is in the 3.1 distribution:    -->\r
+                        <Prune dummy="foo" />\r
+                        <Prune name="CVS" />\r
+                        <Prune name=".cvsignore" flags="i" />\r
+                        <Prune name="Changelog" flags="i" />\r
+                        <Prune name="obj" />\r
+                        <Prune name="site" />\r
+                        </Prunes>\r
+                    <Requires>\r
+                        <Switch dummy="foo" />\r
+                        <Switch name="REPOSITORY" value="CHECKOUT"/>\r
+                        <ErrorMsg text="Can't build source zip unless /REPOSITORY CHECKOUT is specified." />\r
+                        </Requires>\r
+                    </Zip>\r
+                </Zips>            \r
+            <CopyList>            <!-- Copied at end of post-package step.    -->\r
+                <Files>\r
+                    <File dummy="foo" />\r
+                    <!-- File from    paths are relative to <src>/pismere.    -->\r
+                    <!-- File to      paths are relative to <out>.            -->\r
+                    <File name="msi-deployment-guide.txt" from="staging\install\wix\" to="" />\r
+                    <File name="netidmgr_userdoc.pdf" from="staging\doc" to="." />\r
+                    <File name="kfw.msi" from="staging\install\wix\" to="" newname="%filestem%.msi" />\r
+                    <File name="MITKerberosForWindows%-DEBUG%.exe" from="staging\install\nsis" to="" newname="%filestem%%-DEBUG%.exe" />\r
+                    </Files>\r
+                </CopyList>\r
+            </PostPackage>\r
+    </Stages>\r
 </BKW_Config>
\ No newline at end of file
index 69b523c5d86387f83d301be48f60a2f4f765cf25..ca8b3f82593ceec60bbad16d16f969bdc7304e35 100644 (file)
@@ -12,6 +12,8 @@ use Data::Dumper;
 use Archive::Zip;\r
 use Logger;\r
 require "copyfiles.pl";\r
+require "signfiles.pl";\r
+require "makeZip.pl";\r
 \r
 my $BAIL;\r
 $0 = fileparse($0);\r
@@ -19,15 +21,14 @@ my $OPT = {foo => 'bar'};
 my $MAKE = 'NMAKE';\r
 our $config;\r
 \r
-sub get_info\r
-    {\r
-       my $cmd = shift || die;\r
-       my $which = $^X.' which.pl';\r
-       my $full = `$which $cmd`;\r
-       return 0 if ($? / 256);\r
-       chomp($full);\r
-       $full = "\"".$full."\"";\r
-       return { cmd => $cmd, full => $full};\r
+sub get_info {\r
+    my $cmd = shift || die;\r
+    my $which = $^X.' which.pl';\r
+    my $full = `$which $cmd`;\r
+    return 0 if ($? / 256);\r
+    chomp($full);\r
+    $full = "\"".$full."\"";\r
+    return { cmd => $cmd, full => $full};\r
     }\r
 \r
 sub usage {\r
@@ -37,32 +38,34 @@ Usage: $0 (-f --config) config-file [options] NMAKE-options
   Options are case insensitive.\r
 \r
   Options:\r
-    /help /?        usage information (what you now see).\r
+    /help /?           usage information (what you now see).\r
     /config /c path    Path to config file.\r
     /srcdir /r dir     Source directory to use.  Should contain \r
-                    pismere/athena.  If cvstag or svntag is null, \r
-                    the directory should be prepopulated.\r
+                       pismere/athena.  If cvstag or svntag is null, \r
+                       the directory should be prepopulated.\r
     /outdir /o dir     Directory to be created where build results will go\r
     /repository checkout | co \\  What repository action to take.\r
-               update   | up  ) Options are to checkout, update or \r
-               skip          /  take no action [skip].\r
+                update   | up  ) Options are to checkout, update or \r
+                skip          /  take no action [skip].\r
     /username /u name  username used to access svn if checking out.\r
     /cvstag /c tag   \\ If non-empty, the tag is appended to cvs and svn\r
     /svntag /s tag   / commands to select the rev to fetch.\r
     /debug /d          Do debug make instead of release make.\r
-    /nomake         Skip make step.\r
-    /clean          Build clean target.\r
-    /nopackage      Skip packaging step.\r
+    /nomake            Skip make step.\r
+    /clean             Build clean target.\r
+    /nopackage         Skip packaging step.\r
+    /sign              Sign files\r
+    /nosign            Don't sign files\r
     /verbose /v        Debug mode - verbose output.\r
     /logfile /l path   Where to write output.  Default is bkw.pl.log\r
-    /nolog     Don't save output\r
+    /nolog             Don't save output\r
   Other:\r
-    NMAKE-options    any options you want to pass to NMAKE, which can be:\r
-                     (note: /nologo is always used)\r
+    NMAKE-options      any options you want to pass to NMAKE, which can be:\r
+                       (note: /nologo is always used)\r
 \r
 USAGE\r
     system("$MAKE /?");\r
-       }\r
+    }\r
 \r
 sub handler {\r
     my $sig = shift;\r
@@ -78,70 +81,72 @@ EOH
 \r
 sub main {\r
     Getopt::Long::Configure('no_bundling', 'no_auto_abbrev',\r
-                           'no_getopt_compat', 'require_order',\r
-                           'ignore_case', 'pass_through',\r
-                           'prefix_pattern=(--|-|\+|\/)',\r
-                          );\r
+           'no_getopt_compat', 'require_order',\r
+           'ignore_case', 'pass_through',\r
+           'prefix_pattern=(--|-|\+|\/)',\r
+           );\r
     GetOptions($OPT,\r
-              'help|h|?',\r
-              'cvstag|c:s',\r
-              'svntag|s:s',\r
-              'srcdir|r:s',\r
-              'outdir|o:s',\r
-              'debug|d',\r
-              'config|f:s',\r
-              'logfile|l:s',\r
-              'nolog',\r
-              'repository:s',\r
-              'username|u:s',\r
-              'verbose|v',\r
-              'vverbose|vv',\r
-              'nomake',\r
-              'clean',\r
-              'nopackage',\r
-              );\r
+           'help|h|?',\r
+           'cvstag|c:s',\r
+           'svntag|s:s',\r
+           'srcdir|r:s',\r
+           'outdir|o:s',\r
+           'debug|d',\r
+           'config|f:s',\r
+           'logfile|l:s',\r
+           'nolog',\r
+           'repository:s',\r
+           'username|u:s',\r
+           'verbose|v',\r
+           'vverbose|vv',\r
+           'nomake',\r
+           'clean',\r
+           'nopackage',\r
+           'sign',\r
+           'nosign',\r
+           );\r
 \r
     if ( $OPT->{help} ) {\r
-               usage();\r
-               exit(0);\r
-               }\r
-               \r
+        usage();\r
+        exit(0);\r
+        }\r
+        \r
 ##++ Validate required conditions:\r
 \r
     if ($OPT->{config}) {}\r
     else {\r
-      print "Fatal -- Configuration file must be specified.\n";\r
-      usage();\r
-      exit(0);\r
-      }\r
+        print "Fatal -- Configuration file must be specified.\n";\r
+        usage();\r
+        exit(0);\r
+        }\r
 \r
     # List of programs which must be in PATH:\r
     my @required_list = ('sed', 'awk', 'which', 'cat', 'rm', 'cvs', 'svn', 'doxygen', 'hhc', 'candle', 'light', 'makensis', 'nmake', 'plink');\r
     my $requirements_met = 1;\r
     my $first_missing = 0;\r
     my $error_list = "";\r
-       foreach my $required (@required_list) {\r
+    foreach my $required (@required_list) {\r
         if (!get_info($required)) {\r
-                       $requirements_met = 0;\r
-                       if (!$first_missing) {\r
-                               $first_missing = 1;\r
-                               $error_list = "Fatal -- Environment problem!  The following program(s) are not in PATH:\n";\r
-                               }\r
-                       $error_list .= "$required\n";\r
-                       }\r
-               }\r
-       if (!$requirements_met) {\r
-               print $error_list;\r
-               print "Info -- Update PATH or install the programs and try again.\n";\r
-               exit(0);\r
-               }\r
+            $requirements_met = 0;\r
+            if (!$first_missing) {\r
+                $first_missing = 1;\r
+                $error_list = "Fatal -- Environment problem!  The following program(s) are not in PATH:\n";\r
+                }\r
+            $error_list .= "$required\n";\r
+            }\r
+        }\r
+    if (!$requirements_met) {\r
+        print $error_list;\r
+        print "Info -- Update PATH or install the programs and try again.\n";\r
+        exit(0);\r
+        }\r
 \r
 ##-- Validate required conditions.\r
-       \r
+    \r
     use Time::gmtime;\r
     $ENV{DATE} = gmctime()." GMT";\r
-       our $originalDir = `cd`;\r
-       $originalDir =~ s/\n//g;\r
+    our $originalDir = `cd`;\r
+    $originalDir =~ s/\n//g;\r
 \r
 ##++ Assemble configuration from config file and command line:\r
 \r
@@ -151,498 +156,432 @@ sub main {
     print "Info -- Reading configuration from $configfile.\n";\r
 \r
     # Get configuration file:\r
-       my $xml = new XML::Simple();\r
-       $config = $xml->XMLin($configfile);\r
+    my $xml = new XML::Simple();\r
+    $config = $xml->XMLin($configfile);\r
 \r
-       # Set up convenience variables:\r
-       my (@switches, @paths, @tags, @fetch);\r
-       @switches               = $config->{CommandLine}->{Options};\r
-       @paths                  = $config->{CommandLine}->{Directories};\r
-       @tags                           = $config->{CommandLine}->{Tags};\r
-       @fetch                  = $config->{Stages}->{FetchSources}->{Config};\r
+    # Set up convenience variables:\r
+    my (@switches, @paths, @tags, @fetch);\r
+    @switches   = $config->{CommandLine}->{Options};\r
+    @paths      = $config->{CommandLine}->{Directories};\r
+    @tags       = $config->{CommandLine}->{Tags};\r
+    @fetch      = $config->{Stages}->{FetchSources}->{Config};\r
 \r
     # Update the configuration with overrides from the command line:\r
-       $tags[0]->{cvs}->{value} = $OPT->{cvstag}                                                               if exists $OPT->{cvstag};\r
-       $tags[0]->{svn}->{value} = $OPT->{svnurl}                                                               if exists $OPT->{svnurl};\r
-       $paths[0]->{src}->{path} = $OPT->{srcdir}                                                               if exists $OPT->{srcdir};\r
-    $paths[0]->{out}->{path} = $OPT->{outdir}                                                  if exists $OPT->{outdir};\r
-    $switches[0]->{debug}->{value} = $OPT->{debug}                             if exists $OPT->{debug};\r
-    $switches[0]->{clean}->{value} = 1                                                                                 if exists $OPT->{clean};\r
-    $switches[0]->{repository}->{value} = $OPT->{repository}   if exists $OPT->{repository};\r
-    $fetch[0]->{USERNAME}->{name} = $OPT->{username}   if exists $OPT->{username};\r
-    $switches[0]->{nomake}->{value} = 1                                                                                if exists $OPT->{nomake};\r
-    $switches[0]->{nopackage}->{value} = 1                                                                     if exists $OPT->{nopackage};\r
-    $switches[0]->{verbose}->{value} = $OPT->{verbose}                 if exists $OPT->{verbose};\r
-    $switches[0]->{vverbose}->{value} = $OPT->{verbose}                if exists $OPT->{vverbose};\r
-       if (exists $OPT->{logfile}) {\r
-               $switches[0]->{logfile}->{path} = $OPT->{logfile};\r
-               $switches[0]->{logfile}->{value} = 1;\r
-               }\r
-       if (exists $OPT->{nolog}) {\r
-               $switches[0]->{logfile}->{value} = 0;\r
-               }\r
-    our $verbose               = $config->{CommandLine}->{Options}->{verbose}->{value};\r
-    our $vverbose              = $config->{CommandLine}->{Options}->{vverbose}->{value};\r
-    our $clean                         = $switches[0]->{clean}->{value};\r
-       my $src                                 = $paths[0]->{src}->{path};\r
-\r
-       if ($clean && !$switches[0]->{nopackage}->{value}) {\r
-               print "Info -- /clean forces /nopackage.\n";\r
-               $switches[0]->{nopackage}->{value} = 1;\r
-               }\r
+    $tags[0]->{cvs}->{value} = $OPT->{cvstag}                   if exists $OPT->{cvstag};\r
+    $tags[0]->{svn}->{value} = $OPT->{svnurl}                   if exists $OPT->{svnurl};\r
+    $paths[0]->{src}->{path} = $OPT->{srcdir}                   if exists $OPT->{srcdir};\r
+    $paths[0]->{out}->{path} = $OPT->{outdir}                   if exists $OPT->{outdir};\r
+    $switches[0]->{debug}->{value} = $OPT->{debug}              if exists $OPT->{debug};\r
+    $switches[0]->{clean}->{value} = 1                          if exists $OPT->{clean};\r
+    $switches[0]->{repository}->{value} = $OPT->{repository}    if exists $OPT->{repository};\r
+    $fetch[0]->{USERNAME}->{name} = $OPT->{username}            if exists $OPT->{username};\r
+    $switches[0]->{nomake}->{value} = 1                         if exists $OPT->{nomake};\r
+    $switches[0]->{nopackage}->{value} = 1                      if exists $OPT->{nopackage};\r
+    $switches[0]->{verbose}->{value} = $OPT->{verbose}          if exists $OPT->{verbose};\r
+    $switches[0]->{vverbose}->{value} = $OPT->{verbose}         if exists $OPT->{vverbose};\r
+    if (exists $OPT->{logfile}) {\r
+        $switches[0]->{logfile}->{path} = $OPT->{logfile};\r
+        $switches[0]->{logfile}->{value} = 1;\r
+        }\r
+    if (exists $OPT->{nolog}) {\r
+        $switches[0]->{logfile}->{value} = 0;\r
+        }\r
+    if (exists $OPT->{sign}) {\r
+        $switches[0]->{sign}->{timestampserver} = $OPT->{sign};\r
+        $switches[0]->{sign}->{value} = 1;\r
+        }\r
+    if (exists $OPT->{nosign}) {\r
+        $switches[0]->{sign}->{value} = 0;\r
+        }\r
+    our $verbose    = $config->{CommandLine}->{Options}->{verbose}->{value};\r
+    our $vverbose   = $config->{CommandLine}->{Options}->{vverbose}->{value};\r
+    our $clean      = $switches[0]->{clean}->{value};\r
+    local $src      = $paths[0]->{src}->{path};\r
+    local $toPath   = $paths[0]->{out}->{path};\r
+\r
+    if ($clean && !$switches[0]->{nopackage}->{value}) {\r
+        print "Info -- /clean forces /nopackage.\n";\r
+        $switches[0]->{nopackage}->{value} = 1;\r
+        }\r
 \r
     if ($vverbose) {print "Debug -- Config: ".Dumper($config);}\r
     \r
-       # Examples of use:\r
-       #print "Logfile path: $switches[0]->{log}->{path}\n";\r
-       #print "src path: $paths[0]->{src}->{path}\n";\r
-       #print "cvs tag: $tags[0]->{cvs}->{value}\n";\r
-       #print "CVSROOT:   $fetch[0]->{CVSROOT}->{name}\n";\r
+    # Examples of use:\r
+    #print "Logfile path: $switches[0]->{log}->{path}\n";\r
+    #print "src path: $paths[0]->{src}->{path}\n";\r
+    #print "cvs tag: $tags[0]->{cvs}->{value}\n";\r
+    #print "CVSROOT:   $fetch[0]->{CVSROOT}->{name}\n";\r
 \r
 ##-- Assemble configuration from config file and command line.\r
 \r
-       my $sw = $switches[0]->{repository}->{value};\r
-       my $rverb;\r
-       if              ($sw =~ /skip/i)                        {$rverb = "skip";}\r
-       elsif   ($sw =~ /update/i)              {$rverb = "update";}\r
-       elsif   ($sw =~ /up/i)                          {$rverb = "update";}\r
-       elsif   ($sw =~ /checkout/i)    {$rverb = "checkout";}\r
-       elsif   ($sw =~ /co/i)                          {$rverb = "checkout";}\r
-       else {\r
-                       print "Fatal -- invalid /repository value.\n";\r
-                       usage();\r
-                       die;\r
-                       }\r
-\r
-       my $wd  = $src."\\pismere";\r
-\r
-       if (! ($rverb =~ /skip/)) {\r
-               local $len = 0;\r
-               if (exists $fetch[0]->{USERNAME}->{name}) {\r
-                       $len = length $fetch[0]->{USERNAME}->{name};\r
-                       }\r
-           if ($len < 1) {\r
-                       die "Fatal -- you won't get far accessing the repository without specifying a username.";\r
-                       }\r
-               }\r
-\r
-       if ( ($rverb =~ /checkout/) && (-d $wd) ){\r
-               print "\n\nHEADS UP!!\n\n";\r
-               print "/REPOSITORY CHECKOUT will cause everything under $wd to be deleted.\n";\r
-               print "If this is not what you intended, here's your chance to bail out!\n\n\n";\r
-               print "Are you sure you want to remove everything under $wd? ";\r
-               my $char = getc;\r
-               if (! ($char =~ /y/i)) {die "Info -- operation aborted by user."}\r
-               !system("rm -rf $wd/*")                                         or die "Fatal -- Couldn't clean $wd.";\r
-               !system("rmdir $wd")                                                    or die "Fatal -- Couldn't remove $wd.";\r
-#              !system("attrib -h -r $wd\\* /s /d")    or die "Fatal -- Couldn't clear read-only attributes.";\r
-#              !system("del /s /q $wd\\*.*")                           or die "Fatal -- Couldn't clean files from $wd."; \r
-#              !system("rm -rf $wd\\*.*")                                      or die "Fatal -- Couldn't clean directories from $wd.";\r
-               }\r
+    my $sw = $switches[0]->{repository}->{value};\r
+    my $rverb;\r
+    if       ($sw =~ /skip/i)       {$rverb = "skip";}\r
+    elsif    ($sw =~ /update/i)     {$rverb = "update";}\r
+    elsif    ($sw =~ /up/i)         {$rverb = "update";}\r
+    elsif    ($sw =~ /checkout/i)   {$rverb = "checkout";}\r
+    elsif    ($sw =~ /co/i)         {$rverb = "checkout";}\r
+    else {\r
+        print "Fatal -- invalid /repository value.\n";\r
+        usage();\r
+        die;\r
+        }\r
+    $switches[0]->{repository}->{value} = $rverb;   ## Save canonicalized repository verb.\r
+\r
+    my $wd  = $src."\\pismere";\r
+\r
+    if (! ($rverb =~ /skip/)) {\r
+        local $len = 0;\r
+        if (exists $fetch[0]->{USERNAME}->{name}) {\r
+            $len = length $fetch[0]->{USERNAME}->{name};\r
+            }\r
+        if ($len < 1) {\r
+            die "Fatal -- you won't get far accessing the repository without specifying a username.";\r
+            }\r
+        }\r
+\r
+    if ( ($rverb =~ /checkout/) && (-d $wd) ){\r
+        print "\n\nHEADS UP!!\n\n";\r
+        print "/REPOSITORY CHECKOUT will cause everything under $wd to be deleted.\n";\r
+        print "If this is not what you intended, here's your chance to bail out!\n\n\n";\r
+        print "Are you sure you want to remove everything under $wd? ";\r
+        my $char = getc;\r
+        if (! ($char =~ /y/i))  {die "Info -- operation aborted by user."}\r
+        !system("rm -rf $wd/*") or die "Fatal -- Couldn't clean $wd.";\r
+        !system("rmdir $wd")    or die "Fatal -- Couldn't remove $wd.";\r
+        }\r
 \r
 # Begin logging:\r
     my $l;\r
     if ($switches[0]->{logfile}->{value}) {\r
-               print "Info -- logging to $switches[0]->{logfile}->{path}.\n";\r
-               $l = new Logger $switches[0]->{logfile}->{path};\r
-               $l->start;\r
-               $l->no_die_handler;             ## Needed so XML::Simple won't throw exceptions.\r
-               }\r
+        print "Info -- logging to $switches[0]->{logfile}->{path}.\n";\r
+        $l = new Logger $switches[0]->{logfile}->{path};\r
+        $l->start;\r
+        $l->no_die_handler;        ## Needed so XML::Simple won't throw exceptions.\r
+        }\r
 \r
 ##++ Begin repository action:\r
-       if ($rverb =~ /skip/) {print "Info -- *** Skipping repository access.\n"        if ($verbose);}\r
-       else {\r
-               if ($verbose) {print "Info -- *** Begin fetching sources.\n";}\r
-               if (! -d $wd) {                                         ## xcopy will create the entire path for us.\r
-                       !system("echo foo > a.tmp")                                                                                     or die "Fatal -- Couldn't create temporary file in ".`cd`;\r
-                       !system("echo F | xcopy a.tmp $wd\\CVS\\a.tmp") or die "Fatal -- Couldn't xcopy to $wd.";\r
-                       !system("rm a.tmp")                                                                                                             or die "Fatal -- Couldn't remove temporary file.";\r
-                       !system("rm $wd\\CVS\\a.tmp")                                                                   or die "Fatal -- Couldn't remove temporary file.";\r
-                       }\r
-               \r
-               # Set up cvs environment variables:\r
-               $ENV{CVSROOT} = $fetch[0]->{CVSROOT}->{name};\r
-               chdir($src)                                                                                     or die "Fatal -- couldn't chdir to $src\n";\r
-               print "Info -- chdir to ".`cd`."\n"                             if ($verbose);\r
-               my $krb5dir     = $wd."\\athena\\auth\\krb5";\r
-\r
-               my $cvscmdroot  = "cvs $rverb";\r
-               my $cvscmd                      = $cvscmdroot;\r
-               if ($rverb =~ /checkout/) {             \r
-                       my @cvsmodules  = (     \r
-                               'krb',  \r
-                               'pismere/athena/util/lib/delaydlls', \r
-                               'pismere/athena/util/lib/getopt', \r
-                               'pismere/athena/util/guiwrap'\r
-                               );\r
-\r
-                       foreach my $module (@cvsmodules) {\r
-                               $cvscmd = $cvscmdroot." ".$module;\r
-                               $cvscmd .= " ".$tags[0]->{cvs}->{value} if ($tags[0]->{cvs}->{value});\r
-                               if ($verbose) {print "Info -- cvs command: $cvscmd\n";}\r
-                               !system($cvscmd)                                                                or die "Fatal -- command \"$cvscmd\" failed; return code $?\n";\r
-                               }\r
-                       }\r
-               else {                          ## Update.\r
-                       $cvscmd = $cvscmdroot;\r
-                       $cvscmd .= " ".$tags[0]->{cvs}->{value} if ($tags[0]->{cvs}->{value});\r
-                       if ($verbose) {print "Info -- cvs command: $cvscmd\n";}\r
-                       !system($cvscmd)                                                                        or die "Fatal -- command \"$cvscmd\" failed; return code $?\n";\r
-                       }\r
-                                       \r
-               # Set up svn environment variable:\r
-               $ENV{SVN_SSH} = "plink.exe";\r
-               # If  the directory structure doesn't exist, many cd commands will fail.\r
-               if (! -d $krb5dir) {mkdir($krb5dir)             or die "Fatal -- Couldn't  create $krb5dir";}\r
-               chdir($krb5dir)                                                                                 or die "Fatal -- Couldn't chdir to $krb5dir";\r
-               print "Info -- chdir to ".`cd`."\n"                     if ($verbose);\r
-               my $svncmd = "svn $rverb ";\r
-               if ($rverb =~ /checkout/) {             # Append the rest of the checkout command:\r
-                       chdir("..");\r
-                       $svncmd .= "svn+ssh://".$fetch[0]->{USERNAME}->{name}."@".$fetch[0]->{SVNURL}->{name}."/krb5/trunk krb5";\r
-                       }\r
-               if ($tags[0]->{svn}->{value}) {$svncmd .= " ".$tags[0]->{svn}->{value};}        # Add any specific tag\r
-               if ($verbose) {print "Info -- svn command: $svncmd\n";}\r
-               !system($svncmd)                        or die "Fatal -- command \"$svncmd\" failed; return code $?\n";\r
-\r
-               if ($verbose) {print "Info -- ***   End fetching sources.\n";}\r
-               }\r
+    if ($rverb =~ /skip/) {print "Info -- *** Skipping repository access.\n"    if ($verbose);}\r
+    else {\r
+        if ($verbose) {print "Info -- *** Begin fetching sources.\n";}\r
+        if (! -d $wd) {                        ## xcopy will create the entire path for us.\r
+            !system("echo foo > a.tmp")                     or die "Fatal -- Couldn't create temporary file in ".`cd`;\r
+            !system("echo F | xcopy a.tmp $wd\\CVS\\a.tmp") or die "Fatal -- Couldn't xcopy to $wd.";\r
+            !system("rm a.tmp")                             or die "Fatal -- Couldn't remove temporary file.";\r
+            !system("rm $wd\\CVS\\a.tmp")                   or die "Fatal -- Couldn't remove temporary file.";\r
+            }\r
+        \r
+        # Set up cvs environment variables:\r
+        $ENV{CVSROOT}   = $fetch[0]->{CVSROOT}->{name};\r
+        chdir($src)                                         or die "Fatal -- couldn't chdir to $src\n";\r
+        print "Info -- chdir to ".`cd`."\n"                 if ($verbose);\r
+        my $krb5dir     = "$wd\\athena\\auth\\krb5";\r
+\r
+        my $cvscmdroot  = "cvs $rverb";\r
+        my $cvscmd      = $cvscmdroot;\r
+        if ($rverb =~ /checkout/) {        \r
+            my @cvsmodules    = (    \r
+                'krb',  \r
+                'pismere/athena/util/lib/delaydlls', \r
+                'pismere/athena/util/lib/getopt', \r
+                'pismere/athena/util/guiwrap'\r
+                );\r
+\r
+            foreach my $module (@cvsmodules) {\r
+                $cvscmd = $cvscmdroot." ".$module;\r
+                $cvscmd .= " ".$tags[0]->{cvs}->{value} if ($tags[0]->{cvs}->{value});\r
+                if ($verbose) {print "Info -- cvs command: $cvscmd\n";}\r
+                !system($cvscmd)                        or die "Fatal -- command \"$cvscmd\" failed; return code $?\n";\r
+                }\r
+            }\r
+        else {                ## Update.\r
+            $cvscmd = $cvscmdroot;\r
+            $cvscmd .= " ".$tags[0]->{cvs}->{value}     if ($tags[0]->{cvs}->{value});\r
+            if ($verbose) {print "Info -- cvs command: $cvscmd\n";}\r
+            !system($cvscmd)                            or die "Fatal -- command \"$cvscmd\" failed; return code $?\n";\r
+            }\r
+                    \r
+        # Set up svn environment variable:\r
+        $ENV{SVN_SSH} = "plink.exe";\r
+        # If  the directory structure doesn't exist, many cd commands will fail.\r
+        if (! -d $krb5dir) {mkdir($krb5dir)             or die "Fatal -- Couldn't  create $krb5dir";}\r
+        chdir($krb5dir)                                 or die "Fatal -- Couldn't chdir to $krb5dir";\r
+        print "Info -- chdir to ".`cd`."\n"             if ($verbose);\r
+        my $svncmd = "svn $rverb ";\r
+        if ($rverb =~ /checkout/) {        # Append the rest of the checkout command:\r
+            chdir("..");\r
+            $svncmd .= "svn+ssh://".$fetch[0]->{USERNAME}->{name}."@".$fetch[0]->{SVNURL}->{name}."/krb5/trunk krb5";\r
+            }\r
+        if ($tags[0]->{svn}->{value}) {$svncmd .= " ".$tags[0]->{svn}->{value};}    # Add any specific tag\r
+        if ($verbose) {print "Info -- svn command: $svncmd\n";}\r
+        !system($svncmd)            or die "Fatal -- command \"$svncmd\" failed; return code $?\n";\r
+\r
+        if ($verbose) {print "Info -- ***   End fetching sources.\n";}\r
+        }\r
 ##-- End  repository action.\r
-               \r
+        \r
 ##++ Make action:\r
-       if (    (!$switches[0]->{nomake}->{value}) ) {\r
-               if ($verbose) {print "Info -- *** Begin preparing for build.\n";}\r
-\r
-               $wd = $paths[0]->{src}->{path};\r
-               chdir("$wd") or die "Fatal -- couldn't chdir to $wd\n";\r
-               print "Info -- chdir to ".`cd`."\n"                             if ($verbose);\r
-       \r
-               my ($path, $destpath);\r
-               \r
-               # Copy athena\scripts\site\graft\krb5\Makefile.src to athena\auth\krb5:\r
-               $path = "pismere\\scripts\\site\\graft\\krb5\\Makefile.src";\r
-               if (!-e  $path) {die "Fatal -- Expected file $wd\\$path not found.";}\r
-               $destpath = "pismere\\athena\\auth\\krb5\\Makefile.src";\r
-               !system("echo F | xcopy /D $wd\\$path $wd\\$destpath /Y > NUL") or die "Fatal -- Copy of $wd\\$path to $wd\\$destpath failed.";\r
-               print "Info -- copied $wd\\$path to $wd\\$destpath\n"           if ($verbose);;\r
-               \r
-               # Add DEBUG_SYMBOL to .../wshelper/Makefile.src:\r
-               $path = "pismere\\athena\\wshelper\\wshelper\\Makefile.src";\r
-               if (!-e  $path) {die "Fatal -- Expected file $wd\\$path not found.";}\r
-               if (system("grep DEBUG_SYMBOL $path > NUL") != 0) {\r
-                       !system ("echo DEBUG_SYMBOL=1 >> $wd\\$path") or die "Fatal -- Append line to file failed.\n";\r
-                       print "Info -- Added DEBUG_SYMBOL to $wd\\$path\n"      if ($verbose);\r
-                       }\r
-               \r
-               # Prune any unwanted directories before the build:\r
-               if (exists $config->{Stages}->{Make}->{Prunes}) {\r
-                       # Use Unix find instead of Windows find.  Save PATH so we can restore it when we're done:\r
-                       my $savedPATH   = $ENV{PATH};\r
-                       $ENV{PATH} = $config->{CommandLine}->{Directories}->{unixfind}->{path}.";".$savedPATH;\r
-                       my $prunes = $config->{Stages}->{Make}->{Prunes};\r
-                       my $j=0;\r
-                       print "Info -- Processing prunes in ".`cd`."\n" if ($verbose);\r
-                       while ($prunes->{Prune}->[$j]) {\r
-                               if (exists $prunes->{Prune}->[$j]->{name}) {                                            ## Don't process dummy entry!\r
-                                       my $prune       = $prunes->{Prune}->[$j]->{name};\r
-                                       my $flags       = $prunes->{Prune}->[$j]->{flags};\r
-                                       $flags = "" if (!$flags);\r
-                                       my $cmd = "find . -".$flags."name $prune";\r
-                                       print "Info -- Looking for filenames containing $prune\n";\r
-                                       my $list = `$cmd`;\r
-                                       foreach $target (split("\n", $list)) {\r
-                                               print "Info -- Pruning $target\n" if ($verbose);\r
-                                               ! system("rm -rf $target")                              or die "Unable to prune $target";\r
-                                               }\r
-                                       }\r
-                               $j++;\r
-                               }\r
-                       $ENV{PATH} = $savedPATH;\r
-                       }\r
-\r
-               if ($verbose) {print "Info -- ***   End preparing for build.\n";}\r
-       \r
-               my ($buildtarget, $buildtext);\r
-               if ($clean) {\r
-                       $buildtarget = "clean" ;\r
-                       $buildtext = " clean."\r
-                       }\r
-               else {\r
-                       $buildtarget = "" ;\r
-                       $buildtext = "."\r
-                       }\r
-               \r
-               chdir("pismere/athena") or die "Fatal -- couldn't chdir to source directory $wd\\pismere\\athena\n";\r
-               if ($verbose) {print "Info -- chdir to $wd\\pismere\\athena\n";}\r
-               my $dbgswitch = ($switches[0]->{debug}->{value}) ? " " : "NODEBUG=1";\r
-               !system("perl ../scripts/build.pl --softdirs --nolog $buildtarget $dbgswitch")  or die "Fatal -- build $buildtarget failed.";\r
-                       \r
-               chdir("$wd\\pismere") or die "Fatal -- couldn't chdir to $wd\\pismere.";\r
-               if ($clean) {\r
-                       if (-d "staging") {\r
-                               !system("rm -rf staging") or die "Fatal -- Couldn't remove pismere/staging.";\r
-                               }\r
-                       }\r
-       \r
-               if ($verbose) {print "Info -- ***   End build".$buildtext."\n";}\r
-               }                               ## End make conditional.\r
-       else {print "Info -- *** Skipping build.\n"     if ($verbose);}\r
+    if (    (!$switches[0]->{nomake}->{value}) ) {\r
+        if ($verbose) {print "Info -- *** Begin preparing for build.\n";}\r
+\r
+        chdir("$wd") or die "Fatal -- couldn't chdir to $wd\n";\r
+        print "Info -- chdir to ".`cd`."\n"             if ($verbose);\r
+    \r
+        my ($path, $destpath);\r
+        \r
+        # Copy athena\scripts\site\graft\krb5\Makefile.src to athena\auth\krb5:\r
+        $path = "scripts\\site\\graft\\krb5\\Makefile.src";\r
+        if (!-e  $path) {die "Fatal -- Expected file $wd\\$path not found.";}\r
+        $destpath = "athena\\auth\\krb5\\Makefile.src";\r
+        !system("echo F | xcopy /D $wd\\$path $wd\\$destpath /Y > NUL") or die "Fatal -- Copy of $wd\\$path to $wd\\$destpath failed.";\r
+        print "Info -- copied $wd\\$path to $wd\\$destpath\n"   if ($verbose);;\r
+        \r
+        # Add DEBUG_SYMBOL to .../wshelper/Makefile.src:\r
+        $path = "athena\\wshelper\\wshelper\\Makefile.src";\r
+        if (!-e  $path) {die "Fatal -- Expected file $wd\\$path not found.";}\r
+        if (system("grep DEBUG_SYMBOL $path > NUL") != 0) {\r
+            !system ("echo DEBUG_SYMBOL=1 >> $wd\\$path") or die "Fatal -- Append line to file failed.\n";\r
+            print "Info -- Added DEBUG_SYMBOL to $wd\\$path\n"  if ($verbose);\r
+            }\r
+        \r
+        # Prune any unwanted directories before the build:\r
+        if (exists $config->{Stages}->{Make}->{Prunes}) {\r
+            # Use Unix find instead of Windows find.  Save PATH so we can restore it when we're done:\r
+            my $savedPATH    = $ENV{PATH};\r
+            $ENV{PATH} = $config->{CommandLine}->{Directories}->{unixfind}->{path}.";".$savedPATH;\r
+            my $prunes = $config->{Stages}->{Make}->{Prunes};\r
+            my $j=0;\r
+            print "Info -- Processing prunes in ".`cd`."\n"     if ($verbose);\r
+            while ($prunes->{Prune}->[$j]) {\r
+                if (exists $prunes->{Prune}->[$j]->{name}) {    ## Don't process dummy entry!\r
+                    my $prune    = $prunes->{Prune}->[$j]->{name};\r
+                    my $flags    = $prunes->{Prune}->[$j]->{flags};\r
+                    $flags = "" if (!$flags);\r
+                    my $cmd    = "find . -".$flags."name $prune";\r
+                    print "Info -- Looking for filenames containing $prune\n";\r
+                    my $list = `$cmd`;\r
+                    foreach $target (split("\n", $list)) {\r
+                        print "Info -- Pruning $target\n" if ($verbose);\r
+                        ! system("rm -rf $target")              or die "Unable to prune $target";\r
+                        }\r
+                    }\r
+                $j++;\r
+                }\r
+            $ENV{PATH} = $savedPATH;\r
+            }\r
+\r
+        if ($verbose) {print "Info -- ***   End preparing for build.\n";}\r
+    \r
+        my ($buildtarget, $buildtext);\r
+        if ($clean) {\r
+            $buildtarget = "clean" ;\r
+            $buildtext   = " clean."\r
+            }\r
+        else {\r
+            $buildtarget = "" ;\r
+            $buildtext   = "."\r
+            }\r
+        \r
+        chdir("$wd\\athena") or die "Fatal -- couldn't chdir to source directory $wd\\athena\n";\r
+        print "Info -- chdir to ".`cd`."\n"         if ($verbose);\r
+        my $dbgswitch = ($switches[0]->{debug}->{value}) ? " " : "NODEBUG=1";\r
+        !system("perl ../scripts/build.pl --softdirs --nolog $buildtarget $dbgswitch")    or die "Fatal -- build $buildtarget failed.";\r
+            \r
+        chdir("$wd")               or die "Fatal -- couldn't chdir to $wd.";\r
+        if ($clean) {\r
+            if (-d "staging") {\r
+                !system("rm -rf staging")   or die "Fatal -- Couldn't remove $wd\\staging.";\r
+                }\r
+            }\r
+    \r
+        if ($verbose) {print "Info -- ***   End build".$buildtext."\n";}\r
+        }                                           ## End make conditional.\r
+    else {print "Info -- *** Skipping build.\n"    if ($verbose);}\r
 ##-- Make action.\r
-               \r
-       if (!$switches[0]->{nopackage}->{value}) {              ## If /clean, this switch will have been cleared.\r
-               if ($verbose) {print "Info -- *** Begin prepackage.\n";}\r
-\r
-               # We read in the version information to be able to update the site-local files in the install build areas:\r
-               local $version_path = $config->{Stages}->{Package}->{Config}->{Paths}->{Versions}->{path};\r
-               open(DAT, "$src/$version_path")         or die "Could not open $version_path.";\r
-               @raw = <DAT>;\r
-               close DAT;\r
-               foreach $line (@raw) {\r
-                       chomp $line;\r
-                       if ($line =~ /#define/) {                                       # Process #define lines:\r
-                               $line =~ s/#define//;                                   # Remove #define token\r
-                               $line =~ s/^\s+//;                                              #  and leading & trailing whitespace\r
-                               $line =~ s/\s+$//;\r
-                               local @qr = split("\"", $line);         # Try splitting with quotes\r
-                               if (exists $qr[1]) {\r
-                                       $qr[0] =~ s/^\s+//;                             #  Clean up whitespace\r
-                                       $qr[0] =~ s/\s+$//;\r
-                                       $config->{Versions}->{$qr[0]} = $qr[1];         # Save string\r
-                                       }\r
-                               else {                                                                                          # No quotes, so\r
-                                       local @ar = split(" ", $line);          #  split with space\r
-                                       $ar[0] =~ s/^\s+//;                             #  Clean up whitespace\r
-                                       $ar[0] =~ s/\s+$//;\r
-                                       $config->{Versions}->{$ar[0]} = $ar[1];                 # and  save numeric value\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-               # Check that the versions we will need for site-local have been defined:\r
-           my @required_versions = ('VER_PROD_MAJOR', 'VER_PROD_MINOR', 'VER_PROD_REV', \r
-                                                                                                               'VER_PROD_MAJOR_STR', 'VER_PROD_MINOR_STR', 'VER_PROD_REV_STR', \r
-                                                                                                               'VER_PRODUCTNAME_STR');\r
-           my $requirements_met = 1;\r
-           my $first_missing = 0;\r
-           my $error_list = "";\r
-               foreach my $required (@required_versions) {\r
-               if (! exists $config->{Versions}->{$required}) {\r
-                               $requirements_met = 0;\r
-                               if (!$first_missing) {\r
-                                       $first_missing = 1;\r
-                                       $error_list = "Fatal -- The following version(s) are not defined in $src/$version_path.\n";\r
-                                       }\r
-                               $error_list .= "$required\n";\r
-                               }\r
-                       }\r
-               if (!$requirements_met) {\r
-                       print $error_list;\r
-                       exit(0);\r
-                       }\r
-               # Apply any of these tags to filestem:\r
-               my $filestem            = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};\r
-               $filestem                       =~ s/%VERSION_MAJOR%/$config->{Versions}->{'VER_PROD_MAJOR_STR'}/;\r
-               $filestem                       =~ s/%VERSION_MINOR%/$config->{Versions}->{'VER_PROD_MINOR_STR'}/;\r
-               $filestem                       =~ s/%VERSION_PATCH%/$config->{Versions}->{'VER_PROD_REV_STR'}/;\r
-               $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name}  = $filestem;\r
-               \r
-               # The build results are copied to a staging area, where the packager expects to find them.\r
-               #  We put the staging area in the fixed area .../pismere/staging.\r
-               my $prepackage  = $config->{Stages}->{PrePackage};\r
-               $wd = $paths[0]->{src}->{path}."\\pismere";\r
-               my $staging_area = "$wd\\staging";\r
-               chdir($wd) or die "Fatal -- couldn't chdir to $wd\n";\r
-               if ($verbose) {print "Info -- chdir to $wd\n";}\r
-               (-e $staging_area) or mkdir($staging_area);\r
-               \r
-               # Force Where From and To are relative to:\r
-               $prepackage->{CopyList}->{Config}->{From}->{root}               = "$src\\pismere\\athena";\r
-               $prepackage->{CopyList}->{Config}->{To}->{root}                 = "$src\\pismere\\staging";\r
-               copyFiles($prepackage->{CopyList}, $config);                            ## Copy any files [this step takes a while]\r
-\r
-               chdir("staging\\install\\wix") or die "Fatal -- Couldn't cd to $wd\\staging\\install\\wix";\r
-               # Correct errors in files.wxi:\r
-               !system("sed 's/WorkingDirectory=\"\\[dirbin\\]\"/WorkingDirectory=\"dirbin\"/g' files.wxi > a.tmp") or die "Fatal -- Couldn't modify files.wxi.";\r
-               !system("mv a.tmp files.wxi") or die "Fatal -- Couldn't update files.wxi.";\r
-                       \r
-               # Make sed script to run on the site-local configuration files:\r
-               local $tmpfile  = "site-local.sed" ;\r
-               system("del $tmpfile");\r
-               # Basic substitutions:\r
-               local $dblback_wd                       = $wd;\r
-               $dblback_wd                                             =~ s/\\/\\\\/g;\r
-               !system("echo s/%BUILDDIR%/$dblback_wd/ >> $tmpfile")                                                   or die "Fatal -- Couldn't modify $tmpfile.";    \r
-               local $dblback_staging  = "$wd\\staging";\r
-               $dblback_staging                                =~ s/\\/\\\\/g;\r
-               !system("echo s/%TARGETDIR%/$dblback_staging/ >> $tmpfile")                             or die "Fatal -- Couldn't modify $tmpfile.";    \r
-               local $dblback_sample   = "$wd\\staging\\sample";\r
-               $dblback_sample                         =~ s/\\/\\\\/g;\r
-               !system("echo s/%CONFIGDIR-WIX%/$dblback_sample/ >> $tmpfile")          or die "Fatal -- Couldn't modify $tmpfile.";    \r
-               !system("echo s/%CONFIGDIR-NSI%/$dblback_staging/ >> $tmpfile")         or die "Fatal -- Couldn't modify $tmpfile.";    \r
-               !system("echo s/%VERSION_MAJOR%/$config->{Versions}->{'VER_PROD_MAJOR_STR'}/ >> $tmpfile")              or die "Fatal -- Couldn't modify $tmpfile.";    \r
-               !system("echo s/%VERSION_MINOR%/$config->{Versions}->{'VER_PROD_MINOR_STR'}/ >> $tmpfile")              or die "Fatal -- Couldn't modify $tmpfile.";    \r
-               !system("echo s/%VERSION_PATCH%/$config->{Versions}->{'VER_PROD_REV_STR'}/ >> $tmpfile")                        or die "Fatal -- Couldn't modify $tmpfile.";    \r
-               # Strip out some defines so they can be replaced:  [used for site-local.nsi]\r
-               !system("echo /\^!define\.\*RELEASE\.\*\$/d >> $tmpfile")                                                       or die "Fatal -- Couldn't modify $tmpfile.";    \r
-               !system("echo /\^!define\.\*DEBUG\.\*\$/d >> $tmpfile")                                                 or die "Fatal -- Couldn't modify $tmpfile.";    \r
-               !system("echo /\^!define\.\*BETA\.\*\$/d >> $tmpfile")                                                          or die "Fatal -- Couldn't modify $tmpfile.";    \r
-\r
-               # Run the script on site-local.wxi:\r
-               !system("sed -f $tmpfile site-local-tagged.wxi > site-local.wxi")                                       or die "Fatal -- Couldn't modify site-local.wxi.";\r
-\r
-               # Now update site-local.nsi:\r
-               chdir "..\\nsis";\r
-               print "Info -- chdir to ".`cd`."\n"                                                                             if ($verbose);\r
-               local $tmpfile  = "site-local.sed" ;\r
-               !system("sed -f ..\\wix\\$tmpfile site-local-tagged.nsi > b.tmp")                               or die "Fatal -- Couldn't modify site-local.wxi.";\r
-               # Add DEBUG or RELEASE:\r
-               if ($switches[0]->{debug}->{value}) {                           ## debug build\r
-                       !system("echo !define DEBUG >> b.tmp")                                                                                                          or die "Fatal -- Couldn't modify b.tmp.";       \r
-                       }\r
-               else {                                                                                                                                          ## release build\r
-                       !system("echo !define RELEASE >> b.tmp")                                                                                                                or die "Fatal -- Couldn't modify b.tmp.";       \r
-                       !system("echo !define NO_DEBUG >> b.tmp")                                                                                               or die "Fatal -- Couldn't modify b.tmp.";       \r
-                       }\r
-               # Add BETA if present:\r
-               if ( exists $config->{Versions}->{'BETA_STR'}) {\r
-                       !system("echo !define BETA $config->{Versions}->{'BETA_STR'} >> b.tmp") or die "Fatal -- Couldn't modify b.tmp.";       \r
-                       }\r
-               !system("mv -f b.tmp site-local.nsi")                                                                                                                                   or die "Fatal -- Couldn't replace site-local.nsi.";\r
-\r
-               # Run the script on nsi-includes-tagged.nsi:\r
-               !system("sed -f ..\\wix\\$tmpfile nsi-includes-tagged.nsi > nsi-includes.nsi")          or die "Fatal -- Couldn't modify nsi-includes.nsi.";\r
-\r
-               if ($verbose) {print "Info -- ***   End prepackage.\n";}\r
-               \r
-               if ($verbose) {print "Info -- *** Begin package.\n";}\r
-               # Make the msi:\r
-               chdir("$wd\\staging\\install\\wix") or die "Fatal -- Couldn't cd to $wd\\staging\\install\\wix";\r
-               print "Info -- *** Make .msi:\n"                                                        if ($verbose);\r
-               !system("$MAKE")                                                                                                        or die "Error -- msi installer build failed.";\r
-                               \r
-               chdir("$wd\\staging\\install\\nsis") or die "Fatal -- Couldn't cd to $wd\\staging\\install\\nsis";\r
-               print "Info -- chdir to ".`cd`."\n"                                             if ($verbose);\r
-               print "Info -- *** Make NSIS:\n"                                                        if ($verbose);\r
-               !system("cl.exe killer.cpp advapi32.lib")                       or die "Error -- nsis killer.exe not built.";\r
-               !system("rename killer.exe Killer.exe")                         or die "Error -- Couldn't rename killer.exe";\r
-               !system("makensis kfw.nsi")                                                             or die "Error -- executable installer build failed.";\r
+        \r
+##++ Package action:\r
+    if ($switches[0]->{nopackage}->{value}) {      ## If /clean, this switch will have been cleared.\r
+        print "Info -- *** Skipping packaging.";\r
+        }\r
+    else {\r
+        if ($verbose) {print "Info -- *** Begin prepackage.\n";}\r
+\r
+        # We read in the version information to be able to update the site-local files in the install build areas:\r
+        local $version_path = $config->{Stages}->{Package}->{Config}->{Paths}->{Versions}->{path};\r
+        open(DAT, "$src/$version_path")     or die "Could not open $version_path.";\r
+        @raw = <DAT>;\r
+        close DAT;\r
+        foreach $line (@raw) {\r
+            chomp $line;\r
+            if ($line =~ /#define/) {                   # Process #define lines:\r
+                $line =~ s/#define//;                   # Remove #define token\r
+                $line =~ s/^\s+//;                      #  and leading & trailing whitespace\r
+                $line =~ s/\s+$//;\r
+                local @qr = split("\"", $line);         # Try splitting with quotes\r
+                if (exists $qr[1]) {\r
+                    $qr[0] =~ s/^\s+//;                 #  Clean up whitespace\r
+                    $qr[0] =~ s/\s+$//;\r
+                    $config->{Versions}->{$qr[0]} = $qr[1]; # Save string\r
+                    }\r
+                else {                                  # No quotes, so\r
+                    local @ar = split(" ", $line);      #  split with space\r
+                    $ar[0] =~ s/^\s+//;                 #  Clean up whitespace\r
+                    $ar[0] =~ s/\s+$//;\r
+                    $config->{Versions}->{$ar[0]} = $ar[1]; # and  save numeric value\r
+                    }\r
+                }\r
+            }\r
+\r
+        # Check that the versions we will need for site-local have been defined:\r
+        my @required_versions = ('VER_PROD_MAJOR', 'VER_PROD_MINOR', 'VER_PROD_REV', \r
+                                 'VER_PROD_MAJOR_STR', 'VER_PROD_MINOR_STR', 'VER_PROD_REV_STR', \r
+                                 'VER_PRODUCTNAME_STR');\r
+        my $requirements_met = 1;\r
+        my $first_missing = 0;\r
+        my $error_list = "";\r
+        foreach my $required (@required_versions) {\r
+            if (! exists $config->{Versions}->{$required}) {\r
+                $requirements_met = 0;\r
+                if (!$first_missing) {\r
+                    $first_missing = 1;\r
+                    $error_list = "Fatal -- The following version(s) are not defined in $src/$version_path.\n";\r
+                    }\r
+                $error_list .= "$required\n";\r
+                }\r
+            }\r
+        if (!$requirements_met) {\r
+            print $error_list;\r
+            exit(0);\r
+            }\r
+        # Apply any of these tags to filestem:\r
+        my $filestem    = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};\r
+        $filestem       =~ s/%VERSION_MAJOR%/$config->{Versions}->{'VER_PROD_MAJOR_STR'}/;\r
+        $filestem       =~ s/%VERSION_MINOR%/$config->{Versions}->{'VER_PROD_MINOR_STR'}/;\r
+        $filestem       =~ s/%VERSION_PATCH%/$config->{Versions}->{'VER_PROD_REV_STR'}/;\r
+        $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name}    = $filestem;\r
+        \r
+        # The build results are copied to a staging area, where the packager expects to find them.\r
+        #  We put the staging area in the fixed area .../pismere/staging.\r
+        my $prepackage    = $config->{Stages}->{PrePackage};\r
+        my $staging_area = "$wd\\staging";\r
+        chdir($wd) or die "Fatal -- couldn't chdir to $wd\n";\r
+        if ($verbose) {print "Info -- chdir to $wd\n";}\r
+        (-e $staging_area) or mkdir($staging_area);\r
+        \r
+        # Force Where From and To are relative to:\r
+        $prepackage->{CopyList}->{Config}->{From}->{root}   = "$wd\\athena";\r
+        $prepackage->{CopyList}->{Config}->{To}->{root}     = "$wd\\staging";\r
+        copyFiles($prepackage->{CopyList}, $config);        ## Copy any files [this step takes a while]\r
+\r
+        chdir("staging\\install\\wix") or die "Fatal -- Couldn't cd to $wd\\staging\\install\\wix";\r
+        # Correct errors in files.wxi:\r
+        !system("sed 's/WorkingDirectory=\"\\[dirbin\\]\"/WorkingDirectory=\"dirbin\"/g' files.wxi > a.tmp") or die "Fatal -- Couldn't modify files.wxi.";\r
+        !system("mv a.tmp files.wxi") or die "Fatal -- Couldn't update files.wxi.";\r
+            \r
+        # Make sed script to run on the site-local configuration files:\r
+        local $tmpfile      = "site-local.sed" ;\r
+        system("del $tmpfile");\r
+        # Basic substitutions:\r
+        local $dblback_wd   = $wd;\r
+        $dblback_wd         =~ s/\\/\\\\/g;\r
+        !system("echo s/%BUILDDIR%/$dblback_wd/ >> $tmpfile")               or die "Fatal -- Couldn't modify $tmpfile.";    \r
+        local $dblback_staging  = "$wd\\staging";\r
+        $dblback_staging        =~ s/\\/\\\\/g;\r
+        !system("echo s/%TARGETDIR%/$dblback_staging/ >> $tmpfile")         or die "Fatal -- Couldn't modify $tmpfile.";    \r
+        local $dblback_sample   = "$wd\\staging\\sample";\r
+        $dblback_sample         =~ s/\\/\\\\/g;\r
+        !system("echo s/%CONFIGDIR-WIX%/$dblback_sample/ >> $tmpfile")      or die "Fatal -- Couldn't modify $tmpfile.";    \r
+        !system("echo s/%CONFIGDIR-NSI%/$dblback_staging/ >> $tmpfile")     or die "Fatal -- Couldn't modify $tmpfile.";    \r
+        !system("echo s/%VERSION_MAJOR%/$config->{Versions}->{'VER_PROD_MAJOR_STR'}/ >> $tmpfile")  or die "Fatal -- Couldn't modify $tmpfile.";    \r
+        !system("echo s/%VERSION_MINOR%/$config->{Versions}->{'VER_PROD_MINOR_STR'}/ >> $tmpfile")  or die "Fatal -- Couldn't modify $tmpfile.";    \r
+        !system("echo s/%VERSION_PATCH%/$config->{Versions}->{'VER_PROD_REV_STR'}/ >> $tmpfile")    or die "Fatal -- Couldn't modify $tmpfile.";    \r
+        # Strip out some defines so they can be replaced:  [used for site-local.nsi]\r
+        !system("echo /\^!define\.\*RELEASE\.\*\$/d >> $tmpfile")           or die "Fatal -- Couldn't modify $tmpfile.";    \r
+        !system("echo /\^!define\.\*DEBUG\.\*\$/d >> $tmpfile")             or die "Fatal -- Couldn't modify $tmpfile.";    \r
+        !system("echo /\^!define\.\*BETA\.\*\$/d >> $tmpfile")              or die "Fatal -- Couldn't modify $tmpfile.";    \r
+\r
+        # Run the script on site-local.wxi:\r
+        !system("sed -f $tmpfile site-local-tagged.wxi > site-local.wxi")   or die "Fatal -- Couldn't modify site-local.wxi.";\r
+\r
+        # Now update site-local.nsi:\r
+        chdir "..\\nsis";\r
+        print "Info -- chdir to ".`cd`."\n"                                 if ($verbose);\r
+        local $tmpfile    = "site-local.sed" ;\r
+        !system("sed -f ..\\wix\\$tmpfile site-local-tagged.nsi > b.tmp")   or die "Fatal -- Couldn't modify site-local.wxi.";\r
+        # Add DEBUG or RELEASE:\r
+        if ($switches[0]->{debug}->{value}) {                               ## debug build\r
+            !system("echo !define DEBUG >> b.tmp")                          or die "Fatal -- Couldn't modify b.tmp.";    \r
+            }\r
+        else {                                                              ## release build\r
+            !system("echo !define RELEASE >> b.tmp")                        or die "Fatal -- Couldn't modify b.tmp.";    \r
+            !system("echo !define NO_DEBUG >> b.tmp")                       or die "Fatal -- Couldn't modify b.tmp.";    \r
+            }\r
+        # Add BETA if present:\r
+        if ( exists $config->{Versions}->{'BETA_STR'}) {\r
+            !system("echo !define BETA $config->{Versions}->{'BETA_STR'} >> b.tmp") or die "Fatal -- Couldn't modify b.tmp.";    \r
+            }\r
+        !system("mv -f b.tmp site-local.nsi")                               or die "Fatal -- Couldn't replace site-local.nsi.";\r
+\r
+        # Run the script on nsi-includes-tagged.nsi:\r
+        !system("sed -f ..\\wix\\$tmpfile nsi-includes-tagged.nsi > nsi-includes.nsi")  or die "Fatal -- Couldn't modify nsi-includes.nsi.";\r
+\r
+        if ($verbose) {print "Info -- ***   End prepackage.\n";}\r
+        \r
+        if ($verbose) {print "Info -- *** Begin package.\n";}\r
+        # Make the msi:\r
+        chdir("$wd\\staging\\install\\wix") or die "Fatal -- Couldn't cd to $wd\\staging\\install\\wix";\r
+        print "Info -- *** Make .msi:\n"            if ($verbose);\r
+        !system("$MAKE")                            or die "Error -- msi installer build failed.";\r
+                \r
+        chdir("$wd\\staging\\install\\nsis") or die "Fatal -- Couldn't cd to $wd\\staging\\install\\nsis";\r
+        print "Info -- chdir to ".`cd`."\n"         if ($verbose);\r
+        print "Info -- *** Make NSIS:\n"            if ($verbose);\r
+        !system("cl.exe killer.cpp advapi32.lib")   or die "Error -- nsis killer.exe not built.";\r
+        !system("rename killer.exe Killer.exe")     or die "Error -- Couldn't rename killer.exe";\r
+        !system("makensis kfw.nsi")                 or die "Error -- executable installer build failed.";\r
 \r
 # Begin packaging extra items:\r
-               my $fromRoot    = $paths[0]->{src}->{path};\r
-               my $toRoot              = $paths[0]->{out}->{path};\r
-               chdir($fromRoot);               # Now in <src>.\r
-               print "Info -- chdir to ".`cd`."\n"                                                                             if ($verbose);\r
-               system("rm -rf $toRoot")                                                                                                        if (-d $toRoot);\r
-               die "Fatal -- Couldn't remove $fromRoot\\$toRoot."      if (-d $toRoot);\r
-               mkdir($toRoot);\r
-               my $zipsXML = $config->{Stages}->{PostPackage}->{Zips};\r
-\r
-               $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{From}->{root}          = "$src\\pismere";              ## Used after zips are made.\r
-               $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{To}->{root}                    = "$src\\$toRoot\\ziptemp";\r
-\r
-               local $i = 0;\r
-               while ($zipsXML->{Zip}[$i]) {\r
-                       my $zip = $zipsXML->{Zip}[$i];\r
-                       if (exists $zip->{name}) {                                                                                              ## Ignore dummy entry.\r
-                               my $zipname     = $zip->{filename};\r
-                               $zipname                        =~ s/%filestem%/$filestem/g;\r
-                               my $bMakeIt             = 1;\r
-                               if (exists $zip->{Requires}) {\r
-                                       local $j = 0;\r
-                                       while ($zip->{Requires}->{Switch}[$j]) {                                ## Check Require switches\r
-                                               local $switch   = $zip->{Requires}->{Switch}[$j];\r
-                                               if (exists $switch->{name}) {                                                           ## Ignore dummy entry\r
-                                                       # We handle REPOSITORY and CLEAN switches:\r
-                                                       if ($switch->{name} =~ /REPOSITORY/i) {\r
-                                                               $bMakeIt &&= ($switch->{value} =~ /$rverb/i);   ## Repository verb must match requirement\r
-                                                               }\r
-                                                       elsif ($switch->{name} =~ /CLEAN/i) {           ## Clean must be specified\r
-                                                               $bMakeIt &&= $clean;\r
-                                                               }\r
-                                                       else {print "Error -- Unsupported switch $switch->{name} in Requires in ".Dumper($zip);}\r
-                                                       }\r
-                                               $j++;\r
-                                               }\r
-                                       if ( !$bMakeIt && (exists $zip->{Requires}->{ErrorMsg}) ) {\r
-                                               print "Error -- $zip->{Requires}->{ErrorMsg}->{text}\n";\r
-                                               }\r
-                                       }\r
-                               if ($bMakeIt) {\r
-                                       my $todir                       = "$src\\$toRoot\\ziptemp";\r
-                                       system("rm -rf $todir")                                                         if (-d $todir);\r
-                                       die "Fatal -- Couldn't remove $todir"           if (-d $todir);\r
-                                       mkdir($todir);\r
-#      Add to the zip's config section.  Don't copy Postpackage->Config, because the Zip's Config might contain substitution tags.\r
-                                       $zip->{CopyList}->{Config}->{FileStem}                          = $config->{Stages}->{PostPackage}->{Config}->{FileStem};               ## Each zip uses the post package config.\r
-                                       $zip->{CopyList}->{Config}->{From}->{root}              = "$src\\pismere";                                                              ## Used by zips\r
-                                       $zip->{CopyList}->{Config}->{To}->{root}                        = "$src\\$toRoot\\ziptemp\\$zip->{topdir}";\r
-                                       copyFiles($zip->{CopyList}, $config);\r
-                                       # Drop down into <out>/ziptemp so the path to the added file won't include <out>:\r
-                                       chdir $todir;\r
-                                       print "Info -- chdir to ".`cd`."\n"                             if ($verbose);\r
-\r
-                                       # Prune any unwanted files or directories from the directory we're about to zip:\r
-                                       if (exists $zip->{Prunes}) {\r
-                                               # Use Unix find instead of Windows find.  Save PATH so we can restore it when we're done:\r
-                                               my $savedPATH   = $ENV{PATH};\r
-                                               $ENV{PATH} = $config->{CommandLine}->{Directories}->{unixfind}->{path}.";".$savedPATH;\r
-                                               my $prunes = $zip->{Prunes};\r
-                                               my $j=0;\r
-                                               print "Info -- Processing prunes in ".`cd`."\n" if ($verbose);\r
-                                               while ($prunes->{Prune}->[$j]) {\r
-                                                       if (exists $prunes->{Prune}->[$j]->{name}) {                                            ## Don't process dummy entry!\r
-                                                               my $prune       = $prunes->{Prune}->[$j]->{name};\r
-                                                               my $flags       = $prunes->{Prune}->[$j]->{flags};\r
-                                                               $flags = "" if (!$flags);\r
-                                                               my $cmd = "find . -".$flags."name $prune";\r
-                                                               print "Info -- Looking for filenames containing $prune\n";\r
-                                                               my $list = `$cmd`;\r
-                                                               foreach $target (split("\n", $list)) {\r
-                                                                       print "Info -- Pruning $target\n" if ($verbose);\r
-                                                                       !system("rm -rf $target")                       or die "Error -- Couldn't remove $target.";;\r
-                                                                       }\r
-                                                               }\r
-                                                       $j++;\r
-                                                       }\r
-                                               $ENV{PATH} = $savedPATH;\r
-                                               }\r
-\r
-                                       my $zipfile                     = Archive::Zip->new();\r
-                                       my $topdir              = $zip->{topdir};\r
-                                       $topdir                         =~ s/%filestem%/$filestem/g;\r
-                                       $zipfile->addTree('.', $topdir);\r
-                                       if (-e $zipname)        {!system("rm -f $zipname")      or die "Error -- Couldn't remove $zipname.";}\r
-                                       $zipfile->writeToFileNamed($zipname);\r
-                                       print "Info -- created $src\\$toRoot\\$zipname.\n"      if ($verbose);\r
-                                       !system("mv -f $zipname  ..")                                   or die "Error -- Couldn't move $zipname to ..";\r
-                                       chdir "..";                                             ## Back to <out>\r
-                                       print "Info -- chdir to ".`cd`."\n"                             if ($verbose);\r
-                                       }                                               ## End else OK to process zip\r
-                               }                                                       ## End not the dummy entry\r
-                               $i++;                                   \r
-                       }                                                               ## End zip in xml.\r
-                               \r
-               $todir  = "$src\\$toRoot\\ziptemp";                                     ## Clean up any temp directory.\r
-               system("rm -rf $todir")                                                                                 if (-d $todir);\r
-                               \r
-               my $out         = $config->{CommandLine}->{Directories}->{out}->{path};\r
-               $config->{Stages}->{PostPackage}->{CopyList}->{Config} = $config->{Stages}->{PostPackage}->{Config};            ## Use the post package config.\r
-               $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{From}->{root}          = "$src\\pismere";\r
-               $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{To}->{root}                    = "$src\\$out";\r
-               copyFiles($config->{Stages}->{PostPackage}->{CopyList}, $config);                       ## Copy any files\r
-               if ($verbose) {print "Info -- ***   End package.\n";}\r
-               }\r
-       else {\r
-               print "Info -- Package step skipped.";\r
-               }\r
-\r
-       system("rm -rf $src/a.tmp");                                                                    ## Clean up junk.\r
-                               \r
+        chdir($src);        # Now in <src>.\r
+        print "Info -- chdir to ".`cd`."\n"             if ($verbose);\r
+        system("rm -rf $toPath")                        if (-d $toPath);\r
+        die "Fatal -- Couldn't remove $src\\$toPath."   if (-d $toPath);\r
+        mkdir($toPath);\r
+        my $zipsXML = $config->{Stages}->{PostPackage}->{Zips};\r
+\r
+        local $i = 0;\r
+            while ($zipsXML->{Zip}[$i]) {\r
+                local $zip = $zipsXML->{Zip}[$i];\r
+                makeZip($zip, $config)  if (exists $zip->{name});   ## Ignore dummy entry.\r
+                $i++;                    \r
+            }                                   ## End zip in xml.\r
+                \r
+        $ziptemp    = "$src\\$toPath\\ziptemp"; ## Clean up any temp directory.\r
+        chdir("$src\\$toPath");\r
+        print "Info -- chdir to ".`cd`."\n"     if ($verbose);\r
+        system("rm -rf $ziptemp")               if (-d $ziptemp);\r
+                \r
+        my $out     = $config->{CommandLine}->{Directories}->{out}->{path};\r
+        $config->{Stages}->{PostPackage}->{CopyList}->{Config} = $config->{Stages}->{PostPackage}->{Config};    ## Use the post package config.\r
+        $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{From}->{root}  = "$src\\pismere";\r
+        $config->{Stages}->{PostPackage}->{CopyList}->{Config}->{To}->{root}    = "$src\\$out";\r
+        copyFiles($config->{Stages}->{PostPackage}->{CopyList}, $config);       ## Copy any files\r
+\r
+        if ($switches[0]->{sign}->{value}) {\r
+            signFiles($config->{Stages}->{PostPackage}->{Config}->{Signing}, $config);\r
+            }\r
+\r
+        if ($verbose) {print "Info -- ***   End package.\n";}\r
+        }\r
+##-- Package action.\r
+\r
+    system("rm -rf $src/a.tmp");                ## Clean up junk.\r
+    system("rm -rf $src/$toPath/ziptemp");    ## Clean up junk.\r
+                \r
 # End logging:\r
-    if ($switches[0]->{logfile}->{value})      {$l->stop;}\r
+    if ($switches[0]->{logfile}->{value})   {$l->stop;}\r
 \r
     return 0;\r
-       }                                                       ## End subroutine main.\r
+    }                                           ## End subroutine main.\r
 \r
 $SIG{'INT'} = \&handler;\r
 $SIG{'QUIT'} = \&handler;\r
index 5e4200bb185ad3e580863bc563aaab60a0406553..9160db07bc78b4327feea5d85401a6afaf41b5e5 100644 (file)
@@ -5,134 +5,133 @@ use XML::Simple;
 use Data::Dumper;\r
 \r
 sub copyFiles {\r
-       local ($xml, $config)   = @_;\r
-       local @switches                         = $config->{CommandLine}->{Options};\r
-       local @files                                            = $xml->{Files};\r
-       # Check for includes:\r
-       if (exists $xml->{Files}->{Include}->{path}) {\r
-               my $includepath = $xml->{Files}->{Include}->{path};\r
-               print "Info -- Including files from $includepath\n";\r
-               my $savedDir = `cd`;\r
-               $savedDir =~ s/\n//g;\r
-               chdir $originalDir;                                                                             ## Includes are relative to where we were invoked.\r
-               print "Info -- chdir to ".`cd`."\n"                             if ($verbose);\r
-               my $tmp = new XML::Simple;\r
-               my $includeXML = $tmp->XMLin($includepath);\r
-               chdir $savedDir;\r
-               print "Info -- chdir to ".`cd`."\n"                             if ($verbose);\r
+    local ($xml, $config)   = @_;\r
+    local @switches         = $config->{CommandLine}->{Options};\r
+    local @files            = $xml->{Files};\r
+    # Check for includes:\r
+    if (exists $xml->{Files}->{Include}->{path}) {\r
+        my $includepath    = $xml->{Files}->{Include}->{path};\r
+        print "Info -- Including files from $includepath\n";\r
+        my $savedDir = `cd`;\r
+        $savedDir =~ s/\n//g;\r
+        chdir $originalDir;                         ## Includes are relative to where we were invoked.\r
+        print "Info -- chdir to ".`cd`."\n"         if ($verbose);\r
+        my $tmp    = new XML::Simple;\r
+        my $includeXML = $tmp->XMLin($includepath);\r
+        chdir $savedDir;\r
+        print "Info -- chdir to ".`cd`."\n"         if ($verbose);\r
 \r
-               local $i = 0;\r
-               while ($includeXML->{File}[$i]) {                               ## Copy File entries from includeXML.\r
-                       $files[0]->{File}[++$#{$files[0]->{File}}] = $includeXML->{File}[$i];           \r
-                       $i++;\r
-                       }\r
-               delete $files->{Include};\r
-               }\r
-       ##++ Set up path substitution variables for use inside the copy loop:\r
-       # A path can contain a variable part, which will be handled here.  If the variable part is \r
-       # the Always or BuildDependent tag, then the variable will be changed to the \r
-       # build-type-dependent PathFragment.\r
-       # If the variable part is the IgnoreTag, then the file will not be copied.\r
-       # If the variable part is %filestem%, it will be replaced with Config->FileStem->name.\r
-       my ($PathFragment, $BuildDependentTag, $IgnoreTag, $FileStemFragment, $fromRoot, $toRoot); \r
-       my $bPathTags   = (exists $xml->{Config}->{DebugArea}) && (exists $xml->{Config}->{ReleaseArea});\r
-       my $bFileStem   = (exists $xml->{Config}->{FileStem});\r
-       \r
-       if ($switches[0]->{debug}->{value}) {           ## Debug build tags:\r
-               $PathFragment                           = $xml->{Config}->{DebugArea}->{value};\r
-               $BuildDependentTag      = $xml->{Config}->{DebugTag}->{value};\r
-               $IgnoreTag                                      = $xml->{Config}->{ReleaseTag}->{value};\r
-               }\r
-       else {                                                                                                                          ## Release build tags:\r
-               $PathFragment                           = $xml->{Config}->{ReleaseArea}->{value};\r
-               $BuildDependentTag      = $xml->{Config}->{ReleaseTag}->{value};\r
-               $IgnoreTag                                      = $xml->{Config}->{DebugTag}->{value};\r
-               }                       \r
-       my $AlwaysTag                           = $xml->{Config}->{AlwaysTag}->{value};\r
-       $FileStemFragment                       = $xml->{Config}->{FileStem}->{name};   \r
-       $fromRoot                                                       = $xml->{Config}->{From}->{root};       \r
-       $toRoot                                                         = $xml->{Config}->{To}->{root}; \r
-       ##-- Set up path substitution variables for use inside the copy loop.\r
-       # For each file in the file list:\r
-       #  Substitute any variable parts of the path name.\r
-       #  Handle wildcards\r
-       #  Copy\r
+        local $i = 0;\r
+        while ($includeXML->{File}[$i]) {           ## Copy File entries from includeXML.\r
+            $files[0]->{File}[++$#{$files[0]->{File}}] = $includeXML->{File}[$i];        \r
+            $i++;\r
+            }\r
+        delete $files->{Include};\r
+        }\r
+    ##++ Set up path substitution variables for use inside the copy loop:\r
+    # A path can contain a variable part, which will be handled here.  If the variable part is \r
+    # the Always or BuildDependent tag, then the variable will be changed to the \r
+    # build-type-dependent PathFragment.\r
+    # If the variable part is the IgnoreTag, then the file will not be copied.\r
+    # If the variable part is %filestem%, it will be replaced with Config->FileStem->name.\r
+    my ($PathFragment, $BuildDependentTag, $IgnoreTag, $FileStemFragment, $fromRoot, $toRoot); \r
+    my $bPathTags    = (exists $xml->{Config}->{DebugArea}) && (exists $xml->{Config}->{ReleaseArea});\r
+    my $bFileStem    = (exists $xml->{Config}->{FileStem});\r
+    \r
+    if ($switches[0]->{debug}->{value}) {   ## Debug build tags:\r
+        $PathFragment       = $xml->{Config}->{DebugArea}->{value};\r
+        $BuildDependentTag  = $xml->{Config}->{DebugTag}->{value};\r
+        $IgnoreTag          = $xml->{Config}->{ReleaseTag}->{value};\r
+        }\r
+    else {                                  ## Release build tags:\r
+        $PathFragment       = $xml->{Config}->{ReleaseArea}->{value};\r
+        $BuildDependentTag  = $xml->{Config}->{ReleaseTag}->{value};\r
+        $IgnoreTag          = $xml->{Config}->{DebugTag}->{value};\r
+        }            \r
+    my $AlwaysTag           = $xml->{Config}->{AlwaysTag}->{value};\r
+    $FileStemFragment       = $xml->{Config}->{FileStem}->{name};    \r
+    $fromRoot               = $xml->{Config}->{From}->{root};    \r
+    $toRoot                 = $xml->{Config}->{To}->{root};    \r
+    ##-- Set up path substitution variables for use inside the copy loop.\r
+    # For each file in the file list:\r
+    #  Substitute any variable parts of the path name.\r
+    #  Handle wildcards\r
+    #  Copy\r
 \r
-       local $i = 0;\r
-       my $bOldDot     = 1;\r
-       my $bDot                        = 0;\r
-       while ($files[0]->{File}[$i]) {\r
+    local $i    = 0;\r
+    my $bOldDot = 1;\r
+    my $bDot    = 0;\r
+    while ($files[0]->{File}[$i]) {\r
 \r
-               my ($name, $newname, $from, $to, $file);\r
-               $file                   = $files[0]->{File}->[$i];\r
-               $name   = $file->{name};\r
-               if (exists $file->{newname})    {$newname = $file->{newname};}\r
-               else                                                                                            {$newname = $name;}\r
-               if ($name && (! exists $file->{ignore})) {              ## Ignore or process this entry?\r
-                       $from   = "$fromRoot\\$file->{from}\\$name";\r
-                       $to             = "$toRoot\\$file->{to}\\$newname";\r
-                       if ( $bPathTags || $bFileStem || (index($from.$to, $IgnoreTag) <0) ) {          ## Copy this file?\r
-                               if ($bPathTags) {                                                                               ## Apply PathTag substitutions:\r
-                                       $from   =~ s/$AlwaysTag/$PathFragment/g;\r
-                                       $to             =~ s/$AlwaysTag/$PathFragment/g;\r
-                                       $from   =~ s/$BuildDependentTag/$PathFragment/g;\r
-                                       $to             =~ s/$BuildDependentTag/$PathFragment/g;\r
-                                       }\r
-                               if ($bFileStem) {                                                                               ## FileStem substitution?\r
-                                       $from   =~ s/%filestem%/$FileStemFragment/g;\r
-                                       $to             =~ s/%filestem%/$FileStemFragment/g;\r
-                                       }               \r
-                               # %-DEBUG% substitution:\r
-                               local $DebugFragment    = ($switches[0]->{debug}->{value}) ? "-DEBUG" : "";\r
-if ($from =~ /\-DEBUG/) {print "\n$from ... \n";}\r
-                               $from   =~ s/%\-DEBUG%/$DebugFragment/g;\r
-                               $to             =~ s/%\-DEBUG%/$DebugFragment/g;\r
-if ($from =~ /DEBUG/) {print "\n$from ... \n";}\r
-                               $to                                                     =~ s/\*.*//;                            ## Truncate to path before any wildcard\r
+        my ($name, $newname, $from, $to, $file);\r
+        $file   = $files[0]->{File}->[$i];\r
+        $name   = $file->{name};\r
+        if (exists $file->{newname})    {$newname = $file->{newname};}\r
+        else                            {$newname = $name;}\r
+        if ($name && (! exists $file->{ignore})) {      ## Ignore or process this entry?\r
+            $from   = "$fromRoot\\$file->{from}\\$name";\r
+            $to     = "$toRoot\\$file->{to}\\$newname";\r
+            # Copy this file?  Check for ignore tag [debug-only in release mode or vice versa].\r
+            if ( $bPathTags || $bFileStem || (index($from.$to, $IgnoreTag) <0) ) {  \r
+                if ($bPathTags) {                                   ## Apply PathTag substitutions:\r
+                    $from   =~ s/$AlwaysTag/$PathFragment/g;\r
+                    $to     =~ s/$AlwaysTag/$PathFragment/g;\r
+                    $from   =~ s/$BuildDependentTag/$PathFragment/g;\r
+                    $to     =~ s/$BuildDependentTag/$PathFragment/g;\r
+                    }\r
+                if ($bFileStem) {                                   ## FileStem substitution?\r
+                    $from   =~ s/%filestem%/$FileStemFragment/g;\r
+                    $to     =~ s/%filestem%/$FileStemFragment/g;\r
+                    }        \r
+                # %-DEBUG% substitution:\r
+                local $DebugFragment    = ($switches[0]->{debug}->{value}) ? "-DEBUG" : "";\r
+                $from       =~ s/%\-DEBUG%/$DebugFragment/g;\r
+                $to         =~ s/%\-DEBUG%/$DebugFragment/g;\r
+                $to         =~ s/\*.*//;                ## Truncate to path before any wildcard\r
 \r
-                               my $bCopyOK             = 1;\r
-                               my $fromcheck   = $from;\r
-                               my $bRequired           = ! (exists $file->{notrequired});\r
-                               if ($name =~ /\*/) {                                                                    ## Wildcard case\r
-                                       $fromcheck =~ s/\*.*//;\r
-                                       if ($bRequired && (! -d $fromcheck)) {\r
-                                               if ($bDot) {print "\n";}\r
-                                               die "Fatal -- Can't find $fromcheck";\r
-                                               }\r
-                                       $bCopyOK = !system("echo D | xcopy /D /F /Y /S  $from $to > a.tmp 2>NUL");\r
-                                       }\r
-                               else {                                                                                                                  ## Specific file case\r
-                                       if ($bRequired && (! -e $fromcheck)) {\r
-                                               if ($bDot) {print "\n";}\r
-                                               die "Fatal -- Can't find $fromcheck";\r
-                                               }\r
-                                       $bCopyOK        = !system("echo F | xcopy /D /F /Y $from $to > a.tmp 2>NUL");\r
-                                       }\r
+                my $bCopyOK     = 1;\r
+                my $fromcheck   = $from;\r
+                my $bRequired   = ! (exists $file->{notrequired});\r
+                if ($name =~ /\*/) {                    ## Wildcard case\r
+                    $fromcheck =~ s/\*.*//;\r
+                    if ($bRequired && (! -d $fromcheck)) {\r
+                        if ($bDot) {print "\n";}\r
+                        die "Fatal -- Can't find $fromcheck";\r
+                        }\r
+                    $bCopyOK = !system("echo D | xcopy /D /F /Y /S  $from $to > a.tmp 2>NUL");\r
+                    }\r
+                else {                                  ## Specific file case\r
+                    if ($bRequired && (! -e $fromcheck)) {\r
+                        if ($bDot) {print "\n";}\r
+                        die "Fatal -- Can't find $fromcheck";\r
+                        }\r
+                    $bCopyOK    = !system("echo F | xcopy /D /F /Y $from $to > a.tmp 2>NUL");\r
+                    }\r
 \r
-                               if ($bCopyOK) {                                                                                 ## xcopy OK - show progress\r
-                                       # To show progress when files aren't copied, print a string of dots.\r
-                                       open(MYINPUTFILE, "<a.tmp");\r
-                                       my(@lines) = <MYINPUTFILE>;\r
-                                       foreach $line (@lines) { \r
-                                               $bDot = ($line =~ /^0/);\r
-                                               }\r
-                                       close(MYINPUTFILE);\r
-                                       if (!$bDot && $bOldDot) {print "\n";}\r
-                                       if ($bDot) {print "."; STDOUT->flush;}\r
-                                       else {print "$from copied to $to\n";}\r
-                                       $bOldDot = $bDot;\r
-                                       }\r
-                               else {                                                                                                                  ## xcopy failed\r
-                                       if (!exists $file->{notrequired}) {\r
-                                               if ($bDot) {print "\n";}\r
-                                               die "Fatal -- Copy of $from to $to failed";\r
-                                               }\r
-                                       }                                                                                                                               ## End xcopy succeed or fail\r
-                               }                                                                                                                                       ## End not dummy entry nor ignored\r
-                       }\r
-               $i++;\r
-               }\r
-       if ($bDot) {print "\n";}\r
-       }\r
+                if ($bCopyOK) {                         ## xcopy OK - show progress\r
+                    # To show progress when files aren't copied, print a string of dots.\r
+                    open(MYINPUTFILE, "<a.tmp");\r
+                    my(@lines) = <MYINPUTFILE>;\r
+                    foreach $line (@lines) { \r
+                        $bDot = ($line =~ /^0/);\r
+                        }\r
+                    close(MYINPUTFILE);\r
+                    if (!$bDot && $bOldDot) {print "\n";}\r
+                    if ($bDot) {print "."; STDOUT->flush;}\r
+                    else {print "$from copied to $to\n";}\r
+                    $bOldDot = $bDot;\r
+                    }\r
+                else {                                  ## xcopy failed\r
+                    if (!exists $file->{notrequired}) {\r
+                        if ($bDot) {print "\n";}\r
+                        die "Fatal -- Copy of $from to $to failed";\r
+                        }\r
+                    }                                   ## End xcopy succeed or fail\r
+                }                                       ## End not dummy entry nor ignored\r
+            }\r
+        $i++;\r
+        }\r
+    if ($bDot) {print "\n";}\r
+    }\r
 \r
 return 1;\r
index 1071c5180566421ec983110db47da59b34c78bda..d571be63dcff44b05bec7ff9e5b30e34661a5fe0 100644 (file)
 <?xml version="1.0" encoding="utf-8" ?>\r
-       <Files>\r
-               <!-- File from  paths are relative to <src>\pismere\athena  -->\r
-               <!-- File to                    paths are relative to <src>\pismere\staging -->\r
-               <File dummy="foo" /> <!-- Forces XML::Simple behavior -->\r
-                       <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->\r
+    <Files>\r
+        <!-- File from    paths are relative to <src>\pismere\athena  -->\r
+        <!-- File to            paths are relative to <src>\pismere\staging -->\r
+        <File dummy="foo" /> <!-- Forces XML::Simple behavior -->\r
+            <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->\r
 \r
-               <!-- Build-dependent files (from release or debug build): -->\r
-               <File name="netidmgr.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="netidmgr_version.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr"/>\r
-               <File name="perfstat.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr"/>\r
-               <File name="utils.h"    from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="sync.h"     from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="mstring.h"  from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="kplugin.h"  from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="kmq.h"      from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="kmm.h"      from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khuidefs.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khtracker.h"        from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khrescache.h"       from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khremote.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khprops.h"  from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khnewcred.h"        from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khmsgtypes.h"       from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khlist.h"   from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khhtlink.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="kherror.h"  from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="kherr.h"    from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khdefs.h"   from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khconfigui.h"       from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khalerts.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khactiondef.h"      from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="khaction.h" from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="kcreddb.h"  from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="kconfig.h"  from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="hashtable.h"        from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"   to="\inc\netidmgr" />\r
-               <File name="nidmgr32.lib"       from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="xpprof32.lib"       from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="wshelp32.lib"       from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="loadfuncs.lib"      from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="leashw32.lib"       from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="krbv4w32.lib"       from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="krbcc32.lib"        from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="krb5_32.lib"        from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="krb524.lib" from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="kclnt32.lib"        from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="gssapi32.lib"       from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="getopt.lib" from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="delaydlls.lib"      from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="comerr32.lib"       from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
-               <File name="netidmgr.pdb"       from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\"   to="\bin\i386\w2k" />\r
-               <File name="nidmgr32.pdb"       from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\"   to="\bin\i386\w2k" />\r
-               <File name="kfwcpcc.pdb"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kfwlogon.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="netidmgr.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="nidmgr32.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb4cred.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb5cred.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="mit2ms.pdb" from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kdeltkt.pdb"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kcpytkt.pdb"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="xpprof32.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="wshelp32.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="ms2mit.pdb" from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="leashw32.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="leash32.pdb"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="leash32.chm"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kpasswd.pdb"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kvno.pdb"   from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krbv4w32.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krbcc32s.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krbcc32.pdb"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="k5sprt32.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb5_32.pdb"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb524.pdb" from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="klist.pdb"  from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kinit.pdb"  from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kdestroy.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kclnt32.pdb"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="k524init.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="gssapi32.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="gss-server.pdb"     from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="gss-client.pdb"     from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="gss.pdb"    from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="comerr32.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="netidmgr.exe"       from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\"   to="\bin\i386\w2k" />\r
-               <File name="nidmgr32.dll"       from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\"   to="\bin\i386\w2k" />\r
-               <File name="kfwcpcc.exe"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kfwlogon.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="netidmgr.chm"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="netidmgr.exe"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="netiddev.chm"       from="..\target\bin\i386\%bldtype%\"    to="\doc" />\r
-               <File name="nidmgr32.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb4cred_en_us.dll" from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb4cred.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb5cred_en_us.dll" from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb5cred.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="mit2ms.exe" from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kdeltkt.exe"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kcpytkt.exe"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="xpprof32.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="wshelp32.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="ms2mit.exe" from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="leashw32.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="leash32.exe"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kpasswd.exe"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kvno.exe"   from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krbv4w32.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krbcc32s.exe"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krbcc32.dll"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="k5sprt32.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb5_32.dll"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="krb524.dll" from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="klist.exe"  from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kinit.exe"  from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kdestroy.exe"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="kclnt32.dll"        from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="k524init.exe"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="gssapi32.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="gss-server.exe"     from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="gss-client.exe"     from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="gss.exe"    from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="comerr32.dll"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
-               <File name="NetIddev.chm"       from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\doc\"   to="\doc" newname="netiddev.chm" />\r
+        <!-- Build-dependent files (from release or debug build): -->\r
+          <File name="netidmgr_version.h"   from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr"/>\r
+          <File name="netidmgr.h"           from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="perfstat.h"           from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr"/>\r
+          <File name="utils.h"              from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="sync.h"               from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="mstring.h"            from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="kplugin.h"            from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="kmq.h"                from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="kmm.h"                from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khuidefs.h"           from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khtracker.h"          from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khrescache.h"         from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khremote.h"           from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khprops.h"            from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khnewcred.h"          from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khmsgtypes.h"         from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khlist.h"             from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khhtlink.h"           from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="kherror.h"            from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="kherr.h"              from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khdefs.h"             from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khconfigui.h"         from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khalerts.h"           from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khactiondef.h"        from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="khaction.h"           from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="kcreddb.h"            from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="kconfig.h"            from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="hashtable.h"          from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\inc\"    to="\inc\netidmgr" />\r
+          <File name="nidmgr32.lib"         from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="xpprof32.lib"         from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="wshelp32.lib"         from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="loadfuncs.lib"        from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="leashw32.lib"         from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="krbv4w32.lib"         from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="krbcc32.lib"          from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="krb5_32.lib"          from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="krb524.lib"           from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="kclnt32.lib"          from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="gssapi32.lib"         from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="getopt.lib"           from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="delaydlls.lib"        from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="comerr32.lib"         from="..\target\lib\i386\%bldtype%\"    to="\lib\i386" />\r
+          <File name="netidmgr.exe"         from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\"    to="\bin\i386\w2k" />\r
+          <File name="nidmgr32.dll"         from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\"    to="\bin\i386\w2k" />\r
+          <File name="netidmgr.pdb"         from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\"    to="\bin\i386\w2k" />\r
+          <File name="nidmgr32.pdb"         from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\w2k\"    to="\bin\i386\w2k" />\r
+          <File name="kfwcpcc.pdb"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kfwlogon.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="netidmgr.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="nidmgr32.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb4cred.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb5cred.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="mit2ms.pdb"           from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kdeltkt.pdb"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kcpytkt.pdb"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="xpprof32.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="wshelp32.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="ms2mit.pdb"           from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="leashw32.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="leash32.pdb"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="leash32.chm"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kpasswd.pdb"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kvno.pdb"             from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krbv4w32.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krbcc32s.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krbcc32.pdb"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="k5sprt32.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb5_32.pdb"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb524.pdb"           from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="klist.pdb"            from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kinit.pdb"            from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kdestroy.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kclnt32.pdb"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="k524init.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="gssapi32.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="gss-server.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="gss-client.pdb"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="gss.pdb"              from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="comerr32.pdb"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kfwcpcc.exe"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kfwlogon.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="netidmgr.chm"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="netidmgr.exe"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="nidmgr32.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb4cred_en_us.dll"   from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb4cred.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb5cred_en_us.dll"   from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb5cred.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="mit2ms.exe"           from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kdeltkt.exe"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kcpytkt.exe"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="xpprof32.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="wshelp32.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="ms2mit.exe"           from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="leashw32.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="leash32.exe"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kpasswd.exe"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kvno.exe"             from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krbv4w32.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krbcc32s.exe"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krbcc32.dll"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="k5sprt32.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb5_32.dll"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="krb524.dll"           from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="klist.exe"            from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kinit.exe"            from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kdestroy.exe"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="kclnt32.dll"          from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="k524init.exe"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="gssapi32.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="gss-server.exe"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="gss-client.exe"       from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="gss.exe"              from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="comerr32.dll"         from="..\target\bin\i386\%bldtype%\"    to="\bin\i386" />\r
+          <File name="netiddev.chm"         from="..\target\bin\i386\%bldtype%\"                            to="\doc" />\r
+          <File name="NetIddev.chm"         from="auth\krb5\src\windows\identity\obj\i386\%bldtype%\doc\"   to="\doc" newname="netiddev.chm" />\r
 \r
-               <!-- Build-INdependent files, always copied: -->\r
-               <File name="relnotes.html"      from="..\doc\kerberos\" to="\doc" />\r
-               <File name="leash_userdoc.pdf"  from="auth\leash\help\" to="\doc" />\r
-               <File name="NetIdMgr.pdf" from="auth\krb5\src\windows\identity\doc\" to="\doc" newname="netidmgr_userdoc.pdf" />\r
-               <File name="*"  from="auth\krb5\src\windows\identity\sample\templates\credprov\"        to="\sample\templates\credprov\" />\r
-               <File name="*"  from="auth\krb5\src\windows\identity\sample\templates\credprov\images\" to="\sample\templates\credprov\images" />\r
-               <File name="*"  from="auth\krb5\src\windows\identity\sample\templates\credprov\lang\"   to="\sample\templates\credprov\lang" />\r
-               <File name="*"  from="auth\krb5\src\windows\identity\sample\templates\credprov\lang\en_us\"     to="\sample\templates\credprov\lang\en_us" />\r
-               <File name="kclient.h"  from="auth\krb4\kclient\include\"       to="\inc\kclient" />\r
-               <File name="kcmacerr.h" from="auth\krb4\kclient\include\"       to="\inc\kclient" />\r
-               <File name="com_err.h"  from="auth\krb4\include\"       to="\inc\krb4" />\r
-               <File name="conf-pc.h"  from="auth\krb4\include\"       to="\inc\krb4" />\r
-               <File name="conf.h"     from="auth\krb4\include\"       to="\inc\krb4" />\r
-               <File name="des.h"      from="auth\krb4\include\"       to="\inc\krb4" />\r
-               <File name="kadm_err.h" from="auth\krb4\include\"       to="\inc\krb4" />\r
-               <File name="krb.h"      from="auth\krb4\include\"       to="\inc\krb4" />\r
-               <File name="krberr.h"   from="auth\krb4\include\"       to="\inc\krb4" />\r
-               <File name="mit_copy.h" from="auth\krb4\include\"       to="\inc\krb4" />\r
-               <File name="osconf.h"   from="auth\krb4\include\"       to="\inc\krb4" />\r
-               <File name="com_err.h"  from="auth\krb5\src\include\"   to="\inc\krb5" />\r
-               <File name="gssapi.h"   from="auth\krb5\src\include\gssapi\"    to="\inc\krb5\gssapi" />\r
-               <File name="gssapi_generic.h"   from="auth\krb5\src\include\gssapi\"    to="\inc\krb5\gssapi" />\r
-               <File name="gssapi_krb5.h"      from="auth\krb5\src\include\gssapi\"    to="\inc\krb5\gssapi" />\r
-               <File name="des.h"      from="auth\krb5\src\include\KerberosIV\"        to="\inc\krb5\KerberosIV" />\r
-               <File name="kadm_err.h" from="auth\krb5\src\include\KerberosIV\"        to="\inc\krb5\KerberosIV" />\r
-               <File name="krb_err.h"  from="auth\krb5\src\include\KerberosIV\"        to="\inc\krb5\KerberosIV" />\r
-               <File name="krb.h"      from="auth\krb5\src\include\KerberosIV\"        to="\inc\krb5\KerberosIV" />\r
-               <File name="mit-copyright.h"    from="auth\krb5\src\include\KerberosIV\"        to="\inc\krb5\KerberosIV" />\r
-               <File name="krb5.h"     from="auth\krb5\src\include\"   to="\inc\krb5" />\r
-               <File name="profile.h"  from="auth\krb5\src\include\"   to="\inc\krb5" />\r
-               <File name="win-mac.h"  from="auth\krb5\src\include\"   to="\inc\krb5" />\r
-               <File name="krb5.h"     from="auth\krb5\src\include\krb5\"      to="\inc\krb5\krb5" notrequired="true" />\r
-               <File name="cacheapi.h" from="auth\krbcc\include\"      to="\inc\krbcc" />\r
-               <File name="leasherr.h" from="auth\leash\include\"      to="\inc\leash" />\r
-               <File name="leashinfo.h"        from="auth\leash\include\"      to="\inc\leash" />\r
-               <File name="leashwin.h" from="auth\leash\include\"      to="\inc\leash" />\r
-               <File name="loadfuncs-afs.h"    from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs-afs36.h"  from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs-com_err.h"        from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs-krb.h"    from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs-krb5.h"   from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs-krb524.h" from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs-leash.h"  from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs-lsa.h"    from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs-profile.h"        from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs-wshelper.h"       from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs.c"        from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="loadfuncs.h"        from="util\loadfuncs\"  to="\inc\loadfuncs" />\r
-               <File name="nameser.h"  from="wshelper\include\arpa\"   to="\inc\wshelper\arpa" />\r
-               <File name="hesiod.h"   from="wshelper\include\"        to="\inc\wshelper" />\r
-               <File name="mitwhich.h" from="wshelper\include\"        to="\inc\wshelper" />\r
-               <File name="resolv.h"   from="wshelper\include\"        to="\inc\wshelper" />\r
-               <File name="wshelper.h" from="wshelper\include\"        to="\inc\wshelper" />\r
-               <File name="kfw-fixed.nsi"      from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="kfw.ico"    from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="kfw.nsi"    from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="KfWConfigPage.ini"  from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="KfWConfigPage2.ini" from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="killer.cpp" from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="licenses.rtf"       from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="site-local-tagged.nsi"      from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="nsi-includes-tagged.nsi"    from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="utils.nsi"  from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
-               <File name="msi-deployment-guide.txt"   from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
-               <File name="config.wxi" from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
-               <File name="features.wxi"       from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
-               <File name="files.wxi"  from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
-               <File name="kfw.wxs"    from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
-               <File name="Makefile"   from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
-               <File name="property.wxi"       from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
-               <File name="site-local-tagged.wxi"      from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
-               <File name="bannrbmp.bmp"       from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="completi.ico"       from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="custicon.ico"       from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="dlgbmp.bmp" from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="exclamic.ico"       from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="info.bmp"   from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="insticon.ico"       from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="new.bmp"    from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="removico.ico"       from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="repairic.ico"       from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="up.bmp"     from="auth\krb5\src\windows\installer\wix\Binary\"      to="\install\wix\Binary" />\r
-               <File name="custom.cpp" from="auth\krb5\src\windows\installer\wix\custom\"      to="\install\wix\custom" />\r
-               <File name="custom.h"   from="auth\krb5\src\windows\installer\wix\custom\"      to="\install\wix\custom" />\r
-               <File name="config_1033.wxi"    from="auth\krb5\src\windows\installer\wix\lang\"        to="\install\wix\lang" />\r
-               <File name="strings_1033.wxl"   from="auth\krb5\src\windows\installer\wix\lang\"        to="\install\wix\lang" />\r
-               <File name="ui_1033.wxi"        from="auth\krb5\src\windows\installer\wix\lang\"        to="\install\wix\lang" />\r
-               <File name="license.rtf"        from="auth\krb5\src\windows\installer\wix\lang\"        to="\install\wix\lang" />\r
-               <File name="krb5.conf"  from="auth\krb5\src\config-files\"      to="\sample" newname="krb5.ini" />\r
-               <File name="krb.con"    from="auth\krb4\sample-config\" to="\sample" />\r
-               <File name="krbrealm.con"       from="auth\krb4\sample-config\" to="\sample" />\r
-       </Files>
\ No newline at end of file
+        <!-- Build-INdependent files, always copied: -->\r
+        <File name="relnotes.html"          from="..\doc\kerberos\"                                         to="\doc" />\r
+        <File name="leash_userdoc.pdf"      from="auth\leash\help\"                                         to="\doc" />\r
+        <File name="NetIdMgr.pdf"           from="auth\krb5\src\windows\identity\doc\"                      to="\doc" newname="netidmgr_userdoc.pdf" />\r
+        <File name="*"                      from="auth\krb5\src\windows\identity\sample\templates\credprov\"            to="\sample\templates\credprov\" />\r
+        <File name="*"                      from="auth\krb5\src\windows\identity\sample\templates\credprov\images\"     to="\sample\templates\credprov\images" />\r
+        <File name="*"                      from="auth\krb5\src\windows\identity\sample\templates\credprov\lang\"       to="\sample\templates\credprov\lang" />\r
+        <File name="*"                      from="auth\krb5\src\windows\identity\sample\templates\credprov\lang\en_us\" to="\sample\templates\credprov\lang\en_us" />\r
+        <File name="kclient.h"              from="auth\krb4\kclient\include\"    to="\inc\kclient" />\r
+        <File name="kcmacerr.h"             from="auth\krb4\kclient\include\"    to="\inc\kclient" />\r
+        <File name="com_err.h"              from="auth\krb4\include\"    to="\inc\krb4" />\r
+        <File name="conf-pc.h"              from="auth\krb4\include\"    to="\inc\krb4" />\r
+        <File name="conf.h"                 from="auth\krb4\include\"    to="\inc\krb4" />\r
+        <File name="des.h"                  from="auth\krb4\include\"    to="\inc\krb4" />\r
+        <File name="kadm_err.h"             from="auth\krb4\include\"    to="\inc\krb4" />\r
+        <File name="krb.h"                  from="auth\krb4\include\"    to="\inc\krb4" />\r
+        <File name="krberr.h"               from="auth\krb4\include\"    to="\inc\krb4" />\r
+        <File name="mit_copy.h"             from="auth\krb4\include\"    to="\inc\krb4" />\r
+        <File name="osconf.h"               from="auth\krb4\include\"    to="\inc\krb4" />\r
+        <File name="com_err.h"              from="auth\krb5\src\include\"       to="\inc\krb5" />\r
+        <File name="krb5.h"                 from="auth\krb5\src\include\"       to="\inc\krb5" />\r
+        <File name="profile.h"              from="auth\krb5\src\include\"       to="\inc\krb5" />\r
+        <File name="win-mac.h"              from="auth\krb5\src\include\"       to="\inc\krb5" />\r
+        <File name="krb5.h"                 from="auth\krb5\src\include\krb5\"  to="\inc\krb5\krb5" notrequired="true" />\r
+        <File name="gssapi.h"               from="auth\krb5\src\include\gssapi\"    to="\inc\krb5\gssapi" />\r
+        <File name="gssapi_generic.h"       from="auth\krb5\src\include\gssapi\"    to="\inc\krb5\gssapi" />\r
+        <File name="gssapi_krb5.h"          from="auth\krb5\src\include\gssapi\"    to="\inc\krb5\gssapi" />\r
+        <File name="des.h"                  from="auth\krb5\src\include\KerberosIV\"    to="\inc\krb5\KerberosIV" />\r
+        <File name="kadm_err.h"             from="auth\krb5\src\include\KerberosIV\"    to="\inc\krb5\KerberosIV" />\r
+        <File name="krb_err.h"              from="auth\krb5\src\include\KerberosIV\"    to="\inc\krb5\KerberosIV" />\r
+        <File name="krb.h"                  from="auth\krb5\src\include\KerberosIV\"    to="\inc\krb5\KerberosIV" />\r
+        <File name="mit-copyright.h"        from="auth\krb5\src\include\KerberosIV\"    to="\inc\krb5\KerberosIV" />\r
+        <File name="cacheapi.h"             from="auth\krbcc\include\"    to="\inc\krbcc" />\r
+        <File name="leasherr.h"             from="auth\leash\include\"    to="\inc\leash" />\r
+        <File name="leashinfo.h"            from="auth\leash\include\"    to="\inc\leash" />\r
+        <File name="leashwin.h"             from="auth\leash\include\"    to="\inc\leash" />\r
+        <File name="loadfuncs-afs.h"        from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs-afs36.h"      from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs-com_err.h"    from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs-krb.h"        from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs-krb5.h"       from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs-krb524.h"     from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs-leash.h"      from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs-lsa.h"        from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs-profile.h"    from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs-wshelper.h"   from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs.c"            from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="loadfuncs.h"            from="util\loadfuncs\"    to="\inc\loadfuncs" />\r
+        <File name="nameser.h"              from="wshelper\include\arpa\"   to="\inc\wshelper\arpa" />\r
+        <File name="hesiod.h"               from="wshelper\include\"        to="\inc\wshelper" />\r
+        <File name="mitwhich.h"             from="wshelper\include\"        to="\inc\wshelper" />\r
+        <File name="resolv.h"               from="wshelper\include\"        to="\inc\wshelper" />\r
+        <File name="wshelper.h"             from="wshelper\include\"        to="\inc\wshelper" />\r
+        <File name="kfw-fixed.nsi"          from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
+        <File name="kfw.ico"                from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
+        <File name="kfw.nsi"                from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
+        <File name="KfWConfigPage.ini"      from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
+        <File name="KfWConfigPage2.ini"     from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
+        <File name="killer.cpp"             from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
+        <File name="licenses.rtf"           from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
+        <File name="site-local-tagged.nsi"  from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
+        <File name="nsi-includes-tagged.nsi" from="auth\krb5\src\windows\installer\nsis\"   to="\install\nsis" />\r
+        <File name="utils.nsi"              from="auth\krb5\src\windows\installer\nsis\"    to="\install\nsis" />\r
+        <File name="msi-deployment-guide.txt" from="auth\krb5\src\windows\installer\wix\"   to="\install\wix" />\r
+        <File name="config.wxi"             from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
+        <File name="features.wxi"           from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
+        <File name="files.wxi"              from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
+        <File name="kfw.wxs"                from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
+        <File name="Makefile"               from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
+        <File name="property.wxi"           from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
+        <File name="site-local-tagged.wxi"  from="auth\krb5\src\windows\installer\wix\"     to="\install\wix" />\r
+        <File name="bannrbmp.bmp"           from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="completi.ico"           from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="custicon.ico"           from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="dlgbmp.bmp"             from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="exclamic.ico"           from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="info.bmp"               from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="insticon.ico"           from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="new.bmp"                from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="removico.ico"           from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="repairic.ico"           from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="up.bmp"                 from="auth\krb5\src\windows\installer\wix\Binary\"  to="\install\wix\Binary" />\r
+        <File name="custom.cpp"             from="auth\krb5\src\windows\installer\wix\custom\"  to="\install\wix\custom" />\r
+        <File name="custom.h"               from="auth\krb5\src\windows\installer\wix\custom\"  to="\install\wix\custom" />\r
+        <File name="config_1033.wxi"        from="auth\krb5\src\windows\installer\wix\lang\"    to="\install\wix\lang" />\r
+        <File name="strings_1033.wxl"       from="auth\krb5\src\windows\installer\wix\lang\"    to="\install\wix\lang" />\r
+        <File name="ui_1033.wxi"            from="auth\krb5\src\windows\installer\wix\lang\"    to="\install\wix\lang" />\r
+        <File name="license.rtf"            from="auth\krb5\src\windows\installer\wix\lang\"    to="\install\wix\lang" />\r
+        <File name="krb5.conf"              from="auth\krb5\src\config-files\"  to="\sample" newname="krb5.ini" />\r
+        <File name="krb.con"                from="auth\krb4\sample-config\"     to="\sample" />\r
+        <File name="krbrealm.con"           from="auth\krb4\sample-config\"     to="\sample" />\r
+    </Files>
\ No newline at end of file
diff --git a/src/windows/build/makeZip.pl b/src/windows/build/makeZip.pl
new file mode 100644 (file)
index 0000000..ab11005
--- /dev/null
@@ -0,0 +1,108 @@
+#!perl -w\r
+\r
+#use strict;\r
+use Data::Dumper;\r
+\r
+require "signfiles.pl";\r
+\r
+sub makeZip {\r
+    local ($zip, $config)   = @_;\r
+\r
+    local $src          = $config->{CommandLine}->{Directories}->{src}->{path};\r
+    local $toPath       = $config->{CommandLine}->{Directories}->{out}->{path};\r
+    local @switches     = $config->{CommandLine}->{Options};\r
+    local $zipname      = $zip->{filename};\r
+    local $filestem     = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};\r
+    $zipname            =~ s/%filestem%/$filestem/g;\r
+    if (exists $zip->{Requires}) {\r
+        local $bMakeIt  = 1;\r
+        local $rverb    = $switches[0]->{repository}->{value};\r
+        local $j        = 0;\r
+        while ($zip->{Requires}->{Switch}[$j]) {                    ## Check Require switches\r
+            local $switch    = $zip->{Requires}->{Switch}[$j];\r
+            if (exists $switch->{name}) {                           ## Ignore dummy entry\r
+                # We handle REPOSITORY and CLEAN switches:\r
+                if ($switch->{name} =~ /REPOSITORY/i) {\r
+                    $bMakeIt &&= ($switch->{value} =~ /$rverb/i);   ## Repository verb must match requirement\r
+                    }\r
+                 elsif ($switch->{name} =~ /CLEAN/i) {               ## Clean must be specified\r
+                    $bMakeIt &&= $clean;\r
+                    }\r
+                 else {print "Error -- Unsupported switch $switch->{name} in Requires in ".Dumper($zip);\r
+                    $bMakeIt    = 0;\r
+                    }\r
+                 }\r
+             $j++;\r
+             }   \r
+        if ( !$bMakeIt ) {\r
+            if (exists $zip->{Requires}->{ErrorMsg}) {\r
+                print "Error -- $zip->{Requires}->{ErrorMsg}->{text}\n";\r
+                }\r
+            else {\r
+                print "Error -- requirements not met for building $zipname.\n";\r
+                }\r
+            return 0;\r
+            }\r
+        }\r
+        \r
+    local $ziptemp    = "$src\\$toPath\\ziptemp";\r
+    chdir "$src\\$toPath";\r
+    print "Info -- chdir to ".`cd`."\n"         if ($verbose);\r
+    system("rm -rf $ziptemp")                 if (-d $ziptemp);\r
+    die "Fatal -- Couldn't remove $ziptemp"   if (-d $ziptemp);\r
+    mkdir($ziptemp);\r
+    # Set up the zip's config section:\r
+    $zip->{Config}                                  = $config->{Stages}->{PostPackage}->{Config};\r
+    # Add to the copylist's config section.  Don't copy Postpackage->Config, \r
+    #  because the CopyList's Config might contain substitution tags.\r
+    $zip->{CopyList}->{Config}->{FileStem}->{name}  = $config->{Stages}->{PostPackage}->{Config}->{FileStem}->{name};\r
+    $zip->{CopyList}->{Config}->{From}->{root}      = "$src\\pismere";  ## Add zip-specific config settings.\r
+    $zip->{CopyList}->{Config}->{To}->{root}        = "$ziptemp\\$zip->{topdir}";\r
+    copyFiles($zip->{CopyList}, $config);\r
+    # Drop down into <out>/ziptemp so the path to the added file won't include <out>:\r
+    chdir $ziptemp;\r
+    print "Info -- chdir to ".`cd`."\n"         if ($verbose);\r
+\r
+    # Prune any unwanted files or directories from the directory we're about to zip:\r
+    if (exists $zip->{Prunes}) {\r
+        # Use Unix find instead of Windows find.  Save PATH so we can restore it when we're done:\r
+        local $savedPATH    = $ENV{PATH};\r
+        $ENV{PATH}          = $config->{CommandLine}->{Directories}->{unixfind}->{path}.";".$savedPATH;\r
+        local $prunes       = $zip->{Prunes};\r
+        local $j            = 0;\r
+        print "Info -- Processing prunes in ".`cd`."\n" if ($verbose);\r
+        while ($prunes->{Prune}->[$j]) {\r
+            if (exists $prunes->{Prune}->[$j]->{name}) {        ## Don't process dummy entry!\r
+                local $prune    = $prunes->{Prune}->[$j]->{name};\r
+                local $flags    = $prunes->{Prune}->[$j]->{flags};\r
+                $flags = "" if (!$flags);\r
+                local $cmd    = "find . -".$flags."name $prune";\r
+                print "Info -- Looking for filenames containing $prune\n";\r
+                local $list = `$cmd`;\r
+                foreach $target (split("\n", $list)) {\r
+                    print "Info -- Pruning $target\n" if ($verbose);\r
+                    !system("rm -rf $target")   or die "Error -- Couldn't remove $target.";;\r
+                    }\r
+                }\r
+            $j++;\r
+            }\r
+        $ENV{PATH} = $savedPATH;\r
+        }\r
+                    \r
+    # Sign files:\r
+    if ($switches[0]->{sign}->{value}) {\r
+        signFiles($zip->{Config}->{Signing}, $config);\r
+        }\r
+            \r
+    local $zipfile  = Archive::Zip->new();\r
+    local $topdir   = $zip->{topdir};\r
+    $topdir         =~ s/%filestem%/$filestem/g;\r
+    $zipfile->addTree('.', $topdir);\r
+    if (-e $zipname)    {!system("rm -f $zipname")     or die "Error -- Couldn't remove $zipname.";}\r
+    $zipfile->writeToFileNamed($zipname);\r
+    print "Info -- created $src\\$toPath\\$zipname.\n"  if ($verbose);\r
+       # move .zip from <src>/<out>/ziptemp to <src>/<out>.\r
+    !system("mv -f $zipname     ..")                    or die "Error -- Couldn't move $zipname to ..";\r
+    }\r
+    \r
+return 1;
\ No newline at end of file
index d80a681d7c6ee652f6e749eff1d81db21fff5b33..35535854145ee678ad616200ce8e82cdefe8a66d 100644 (file)
 <?xml version="1.0" encoding="utf-8" ?>\r
        <Files>\r
                <!-- File from  paths are relative to <src>/pismere.    -->\r
-               <!-- File to                    paths are relative to <out>.                                    -->\r
-               <File dummy="foo" /> <!-- Forces XML::Simple behavior -->\r
+               <!-- File to    paths are relative to <out>.                    -->\r
+               <File dummy="foo" /> <!-- Forces XML::Simple behavior   -->\r
                        <!-- Without this, XML::Simple does not make an anonymous array and I can't figure out how to iterate over it. -->\r
 \r
-               <File name="relnotes.html" from="doc\kerberos" to="doc" />\r
-               <File name="kclient.rtf" from="athena\auth\krb4\kclient\doc" to="doc" />\r
+               <File name="relnotes.html"  from="doc\kerberos"                 to="doc" />\r
+               <File name="kclient.rtf"    from="athena\auth\krb4\kclient\doc" to="doc" />\r
 \r
-               <File  name="*.h" from="staging\inc" to="inc" />\r
-<!--   \r
-               <File  name="*.h" from="staging\inc\kclient" to="inc\kclient\" />\r
-               <File  name="*.h" from="staging\inc\krb4" to="inc\krb4\" />\r
-               <File  name="*.h" from="staging\inc\krb5" to="inc\krb5\" />\r
+               <File  name="*.h"           from="staging\inc"                  to="inc" />\r
 \r
-               <File  name="gssapi.h" from="" to="" inc\krb5\gssapi\\r
-               <File  name="gssapi_generic.h" from="" to="" inc\krb5\gssapi\\r
-               <File  name="gssapi_krb5.h" from="" to="" inc\krb5\gssapi\\r
+               <File  name="*.*"           from="staging\install\nsis"         to="install\nsis\" />\r
 \r
-               <File  name="des.h" from="" to="" inc\krb5\KerberosIV\\r
-               <File  name="kadm_err.h" from="" to="" inc\krb5\KerberosIV\\r
-               <File  name="krb.h" from="" to="" inc\krb5\KerberosIV\\r
-               <File  name="krb_err.h" from="" to="" inc\krb5\KerberosIV\\r
-               <File  name="mit-copyright.h" from="" to="" inc\krb5\KerberosIV\\r
+               <File  name="MITKerberosForWindows%-DEBUG%.exe"\r
+                                           from="staging\install\nsis"         to="install\nsis\"  newname="%filestem%.exe" />\r
+        <!-- We'll clean up the MITKerberosForWindows.exe in the target directory in a later step.  -->\r
 \r
-               <File  name="krb5.h" from="" to="" inc\krb5\krb5\\r
-\r
-               <File  name="cacheapi.h" from="" to="" inc\krbcc\\r
-\r
-               <File  name="leasherr.h" from="" to="" inc\leash\\r
-               <File  name="leashinfo.h" from="" to="" inc\leash\\r
-               <File  name="leashwin.h" from="" to="" inc\leash\\r
-\r
-               <File  name="loadfuncs.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-afs.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-afs36.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-com_err.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-krb.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-krb5.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-krb524.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-leash.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-lsa.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-profile.h" from="" to="" inc\loadfuncs\\r
-               <File  name="loadfuncs-wshelper.h" from="" to="" inc\loadfuncs\\r
-\r
-               <File  name="loadfuncs.c" from="" to="" inc\loadfuncs\\r
-\r
-               <File  name="hashtable.h" from="" to="" inc\netidmgr\\r
-               <File  name="kconfig.h" from="" to="" inc\netidmgr\\r
-               <File  name="kcreddb.h" from="" to="" inc\netidmgr\\r
-               <File  name="khaction.h" from="" to="" inc\netidmgr\\r
-               <File  name="khactiondef.h" from="" to="" inc\netidmgr\\r
-               <File  name="khalerts.h" from="" to="" inc\netidmgr\\r
-               <File  name="khconfigui.h" from="" to="" inc\netidmgr\\r
-               <File  name="khdefs.h" from="" to="" inc\netidmgr\\r
-               <File  name="kherr.h" from="" to="" inc\netidmgr\\r
-               <File  name="kherror.h" from="" to="" inc\netidmgr\\r
-               <File  name="khhtlink.h" from="" to="" inc\netidmgr\\r
-               <File  name="khlist.h" from="" to="" inc\netidmgr\\r
-               <File  name="khmsgtypes.h" from="" to="" inc\netidmgr\\r
-               <File  name="khnewcred.h" from="" to="" inc\netidmgr\\r
-               <File  name="khprops.h" from="" to="" inc\netidmgr\\r
-               <File  name="khremote.h" from="" to="" inc\netidmgr\\r
-               <File  name="khrescache.h" from="" to="" inc\netidmgr\\r
-               <File  name="khtracker.h" from="" to="" inc\netidmgr\\r
-               <File  name="khuidefs.h" from="" to="" inc\netidmgr\\r
-               <File  name="kmm.h" from="" to="" inc\netidmgr\\r
-               <File  name="kmq.h" from="" to="" inc\netidmgr\\r
-               <File  name="kplugin.h" from="" to="" inc\netidmgr\\r
-               <File  name="mstring.h" from="" to="" inc\netidmgr\\r
-               <File  name="netidmgr.h" from="" to="" inc\netidmgr\\r
-               <File  name="netidmgr_version.h" from="" to="" inc\netidmgr\\r
-               <File  name="perfstat.h" from="" to="" inc\netidmgr\\r
-               <File  name="sync.h" from="" to="" inc\netidmgr\\r
-               <File  name="utils.h" from="" to="" inc\netidmgr\\r
-\r
-               <File  name="nameser.h" from="" to="" inc\wshelper\arpa\\r
-\r
-               <File  name="hesiod.h" from="" to="" inc\wshelper\\r
-               <File  name="mitwhich.h" from="" to="" inc\wshelper\\r
-               <File  name="resolv.h" from="" to="" inc\wshelper\\r
-               <File  name="wshelper.h" from="" to="" inc\wshelper\\r
--->\r
-\r
-               <File  name="*.*" from="staging\install\nsis" to="install\nsis\" />\r
-<!--           <File  name="kfw-fixed.nsi" from="" to="" install\nsis\\r
-               <File  name="kfw.ico" from="" to="" install\nsis\\r
-               <File  name="kfw.nsi" from="" to="" install\nsis\\r
-               <File  name="KfWConfigPage.ini" from="" to="" install\nsis\\r
-               <File  name="KfWConfigPage2.ini" from="" to="" install\nsis\\r
-               <File  name="killer.cpp" from="" to="" install\nsis\\r
-               <File  name="licenses.rtf" from="" to="" install\nsis\\r
-               <File  name="site-local.nsi" from="" to="" install\nsis\\r
-               <File  name="utils.nsi" from="" to="" install\nsis\\r
--->\r
-\r
-               <File  name="config.wxi" from="staging\install\wix" to="install\wix\" />\r
-               <File  name="features.wxi" from="staging\install\wix" to="install\wix\" />\r
-               <File  name="files.wxi" from="staging\install\wix" to="install\wix\" />\r
-               <File  name="kfw.wxs" from="staging\install\wix" to="install\wix\" />\r
-               <File  name="Makefile" from="staging\install\wix" to="install\wix\" />\r
+               <File  name="config.wxi"    from="staging\install\wix"          to="install\wix\" />\r
+               <File  name="features.wxi"  from="staging\install\wix"          to="install\wix\" />\r
+               <File  name="files.wxi"     from="staging\install\wix"          to="install\wix\" />\r
+               <File  name="kfw.wxs"       from="staging\install\wix"          to="install\wix\" />\r
+               <File  name="Makefile"      from="staging\install\wix"          to="install\wix\" />\r
                <File  name="msi-deployment-guide.txt" from="staging\install\wix" to="install\wix\" />\r
-               <File  name="property.wxi" from="staging\install\wix" to="install\wix\" />\r
-               <File  name="site-local.wxi" from="staging\install\wix" to="install\wix\" />\r
+               <File  name="property.wxi"  from="staging\install\wix"          to="install\wix\" />\r
+               <File  name="site-local.wxi" from="staging\install\wix"         to="install\wix\" />\r
 \r
-               <File  name="*.*" from="staging\install\wix\Binary" to="install\wix\Binary\" />\r
-<!--           <File  name="bannrbmp.bmp" from="" to="" install\wix\Binary\\r
-               <File  name="completi.ico" from="" to="" install\wix\Binary\\r
-               <File  name="custicon.ico" from="" to="" install\wix\Binary\\r
-               <File  name="dlgbmp.bmp" from="" to="" install\wix\Binary\\r
-               <File  name="exclamic.ico" from="" to="" install\wix\Binary\\r
-               <File  name="info.bmp" from="" to="" install\wix\Binary\\r
-               <File  name="insticon.ico" from="" to="" install\wix\Binary\\r
-               <File  name="new.bmp" from="" to="" install\wix\Binary\\r
-               <File  name="removico.ico" from="" to="" install\wix\Binary\\r
-               <File  name="repairic.ico" from="" to="" install\wix\Binary\\r
-               <File  name="up.bmp" from="" to="" install\wix\Binary\\r
--->            \r
+               <File  name="*.*"           from="staging\install\wix\Binary"   to="install\wix\Binary\" />\r
 \r
-               <File  name="custom.cpp" from="staging\install\wix\custom" to="install\wix\custom\" />\r
-               <File  name="custom.h" from="staging\install\wix\custom" to="install\wix\custom\" />\r
+               <File  name="custom.cpp"    from="staging\install\wix\custom"   to="install\wix\custom\" />\r
+               <File  name="custom.h"      from="staging\install\wix\custom"   to="install\wix\custom\" />\r
 \r
-               <File  name="config_1033.wxi" from="staging\install\wix\lang" to="install\wix\lang\" />\r
-               <File  name="strings_1033.wxl" from="staging\install\wix\lang" to="install\wix\lang\" />\r
-               <File  name="ui_1033.wxi" from="staging\install\wix\lang" to="install\wix\lang\" />\r
+               <File  name="config_1033.wxi" from="staging\install\wix\lang"   to="install\wix\lang\" />\r
+               <File  name="strings_1033.wxl" from="staging\install\wix\lang"  to="install\wix\lang\" />\r
+               <File  name="ui_1033.wxi"   from="staging\install\wix\lang"     to="install\wix\lang\" />\r
                <!-- Why not license.rtf? -->\r
 \r
-               <File  name="*.lib" from="staging\lib\i386" to="lib\i386\" />\r
-<!--           \r
-               <File  name="comerr32.lib" from="" to="" lib\i386\\r
-               <File  name="delaydlls.lib" from="" to="" lib\i386\\r
-               <File  name="getopt.lib" from="" to="" lib\i386\\r
-               <File  name="gssapi32.lib" from="" to="" lib\i386\\r
-               <File  name="kclnt32.lib" from="" to="" lib\i386\\r
-               <File  name="krb524.lib" from="" to="" lib\i386\\r
-               <File  name="krb5_32.lib" from="" to="" lib\i386\\r
-               <File  name="krbcc32.lib" from="" to="" lib\i386\\r
-               <File  name="krbv4w32.lib" from="" to="" lib\i386\\r
-               <File  name="leashw32.lib" from="" to="" lib\i386\\r
-               <File  name="loadfuncs.lib" from="" to="" lib\i386\\r
-               <File  name="nidmgr32.lib" from="" to="" lib\i386\\r
-               <File  name="wshelp32.lib" from="" to="" lib\i386\\r
-               <File  name="xpprof32.lib" from="" to="" lib\i386\\r
--->    \r
+               <File  name="*.lib"         from="staging\lib\i386"             to="lib\i386\" />\r
        \r
        </Files>
\ No newline at end of file
diff --git a/src/windows/build/signFiles.pl b/src/windows/build/signFiles.pl
new file mode 100644 (file)
index 0000000..a94c4f2
--- /dev/null
@@ -0,0 +1,27 @@
+#!perl -w\r
+\r
+#use strict;\r
+use Data::Dumper;\r
+\r
+sub signFiles {\r
+    local ($signing, $config)   = @_;\r
+    local $exprs    = $signing->{FilePatterns}->{value};\r
+    local $template = $signing->{CommandTemplate}->{value};\r
+    # Use Unix find instead of Windows find.  Save PATH so we can restore it when we're done:\r
+    local $savedPATH= $ENV{PATH};\r
+    $ENV{PATH}      = $config->{CommandLine}->{Directories}->{unixfind}->{path}.";".$savedPATH;\r
+    foreach $expr (split(" ", $exprs)) {            ## exprs is something like "*.exe *.dll"\r
+        local $cmd  = "find . -iname \"$expr\"";\r
+        local $list = `$cmd`;                       ## $list is files matching *.exe, for example.\r
+    foreach $target (split("\n", $list)) {\r
+            $target =~ s|/|\\|g;                    ## Flip path separators from unix-style to windows-style.\r
+            local $template2    = $template;\r
+            $template2          =~ s/%filename%/$target/;\r
+            print "Info -- Signing $target\n" if ($verbose);\r
+            !system($template2) or die "Fatal -- Error signing $target.";\r
+            }\r
+        }\r
+        $ENV{PATH} = $savedPATH;\r
+    }\r
+\r
+return 1;
\ No newline at end of file