windows-force-krb524-20030921
[openafs.git] / README-NT
index 436a684..292aa72 100644 (file)
--- a/README-NT
+++ b/README-NT
@@ -33,8 +33,10 @@ The following steps describe how to configure Windows 2000/XP:
    F. Build Win2000 binaries
    G. Install NSIS 2.0
    H. Build NSIS Install Package
-   I. Final Results
-   J. Optional Items
+   I. Install Wix 2.0
+   J. Build Wix MSI Install Package
+   K. Final Results
+   L. Optional Items
        
 The Microsoft development tools require anywhere from 660 MB to 1.8GB
 of storage depending on which compilers are selected.  The following 
@@ -44,7 +46,8 @@ versions are supported:
     Microsoft Visual .NET 
     Microsoft Visual .NET 2003 (recommended)
 
-    Any version of the Microsoft SDK and Tools released August 2001 or later.
+    Microsoft Platform SDK for Windows XP SP2
+      [Core and Data Access SDKs are required]
 
 The NSIS installer requires about 14 MB of storage. The following 
 version is supported.
@@ -269,7 +272,172 @@ From the DOS command prompt window run:
     nmake /f NTMakefile NSIS
 
 
-STEP I. Final Results
+STEP I.  Install Wix MSI Installer
+
+Download the Wix 2.0.1927.1 installer from 
+
+    http://prdownloads.sourceforge.net/wix/sources-2.0.1927.1.zip
+
+Apply the following patches to the source tree and execute 
+
+    make ship
+
+from the \src\wix directory.  
+
+Index: src/wix/Compiler.cs
+===================================================================
+RCS file: /cvsroot/wix/wix/src/wix/Compiler.cs,v
+retrieving revision 1.10
+diff -u -w -r1.10 Compiler.cs
+--- src/wix/Compiler.cs        28 Jul 2004 15:50:22 -0000      1.10
++++ src/wix/Compiler.cs        4 Aug 2004 16:28:16 -0000
+@@ -647,7 +647,7 @@
+                 // add the core registry keys for each context in the class
+                 for (int i = 0; i < contextCount; ++i)
+                 {
+-                    this.AddRegistryKey(sourceLineNumbers, null, 0, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[!", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
++                    this.AddRegistryKey(sourceLineNumbers, null, 0, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[#", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context
+                     if (null != icon) // ClassId default icon
+                     {
+                         if (null != iconIndex)
+@@ -7385,6 +7385,20 @@
+                             break;
+                     }
+                         break;
++                                      case "Delete":
++                                              switch (attrib.Value)
++                                              {
++                                                      case "install":
++                                                              events |= MsiInterop.MsidbServiceControlEventDelete;
++                                                              break;
++                                                      case "uninstall":
++                                                              events |= MsiInterop.MsidbServiceControlEventUninstallDelete;
++                                                              break;
++                                                      case "both":
++                                                              events |= MsiInterop.MsidbServiceControlEventDelete | MsiInterop.MsidbServiceControlEventUninstallDelete;
++                                                              break;
++                                              }
++                                              break;
+                     case "Wait":
+                         wait = Common.IsYes(attrib.Value, sourceLineNumbers, node.Name, attrib.Name, id) ? "1" : "0";   // strings used since integer column is nullable
+                         break;
+@@ -8715,6 +8729,7 @@
+                         }
+                         bits ^= (bit * 65536);
+                         break;
++
+                     default:
+                         bit = this.NameToBit(MsiInterop.CommonControlAttributes, attrib.Name, attrib.Value, node.Name, id);
+                         if (-1 == bit)
+Index: src/wix/Preprocessor.cs
+===================================================================
+RCS file: /cvsroot/wix/wix/src/wix/Preprocessor.cs,v
+retrieving revision 1.5
+diff -u -w -r1.5 Preprocessor.cs
+--- src/wix/Preprocessor.cs    28 Jul 2004 15:50:22 -0000      1.5
++++ src/wix/Preprocessor.cs    4 Aug 2004 16:28:16 -0000
+@@ -267,12 +267,12 @@
+                             break;
+                         case "ifdef":
+                             stack.Push(context);
+-                            context = new IfContext(context.IsTrue & context.Active, this.variables.ContainsKey(reader.Value.Trim()), IfState.If);
++                            context = new IfContext(context.IsTrue & context.Active, this.IsDefined(reader.Value.Trim()), IfState.If);
+                             ignore = true;
+                             break;
+                         case "ifndef":
+                             stack.Push(context);
+-                            context = new IfContext(context.IsTrue & context.Active, !this.variables.ContainsKey(reader.Value.Trim()), IfState.If);
++                            context = new IfContext(context.IsTrue & context.Active, !this.IsDefined(reader.Value.Trim()), IfState.If);
+                             ignore = true;
+                             break;
+                         case "elseif":
+@@ -354,6 +354,8 @@
+                             break;
+                         case "endforeach": // endforeach is handled in PreprocessForeach, so seeing it here is an error
+                             throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), "Cannot have a <?endforeach?> processing instruction without a matching <?foreach?>.");
++                                              case "error":
++                                                      throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), this.PreprocessVariables(reader.Value));
+                         default:
+                             // Console.WriteLine("processing instruction: {0}, {1}", reader.Name, reader.Value);
+                             break;
+@@ -401,6 +403,22 @@
+         }
+         /// <summary>
++              /// Returns true if the symbol exists.
++              /// </summary>
++              /// <param name="symbol">symbol name to check</param>
++              /// <returns>true if symbol is defined</returns>
++              private bool IsDefined(string symbol)
++              {
++                      if( symbol.StartsWith("env.") )
++                              return Environment.GetEnvironmentVariable(symbol.Substring(4)) != null;
++                      if( symbol.StartsWith("var.") )
++                              return this.variables.ContainsKey(symbol.Substring(4));
++                      if( symbol.StartsWith("sys.") )
++                              return this.systemVariables.ContainsKey(symbol.Substring(4));
++                      return this.variables.ContainsKey(symbol);
++              }
++
++        /// <summary>
+         /// Replaces parameters in the source text.
+         /// </summary>
+         /// <param name="value">Text that may contain parameters to replace.</param>
+Index: src/wix/wix.csproj
+===================================================================
+RCS file: /cvsroot/wix/wix/src/wix/wix.csproj,v
+retrieving revision 1.4
+diff -u -w -r1.4 wix.csproj
+--- src/wix/wix.csproj 31 May 2004 01:07:40 -0000      1.4
++++ src/wix/wix.csproj 4 Aug 2004 16:28:16 -0000
+@@ -659,9 +659,19 @@
+                     BuildAction = "EmbeddedResource"
+                 />
+                 <File
++                    RelPath = "Xsd\wix.xsx"
++                    DependentUpon = "wix.xsd"
++                    BuildAction = "None"
++                />
++                <File
+                     RelPath = "Xsd\wixloc.xsd"
+                     BuildAction = "Content"
+                 />
++                <File
++                    RelPath = "Xsd\wixloc.xsx"
++                    DependentUpon = "wixloc.xsd"
++                    BuildAction = "None"
++                />
+             </Include>
+         </Files>
+     </CSHARP>
+Index: src/wix/Xsd/wix.xsd
+===================================================================
+RCS file: /cvsroot/wix/wix/src/wix/Xsd/wix.xsd,v
+retrieving revision 1.12
+diff -u -w -r1.12 wix.xsd
+--- src/wix/Xsd/wix.xsd        28 Jul 2004 15:50:24 -0000      1.12
++++ src/wix/Xsd/wix.xsd        4 Aug 2004 16:28:17 -0000
+@@ -2733,6 +2733,7 @@
+                                       </xs:restriction>
+                               </xs:simpleType>
+                       </xs:attribute>
++                      <xs:attribute name="Separator" type="xs:string"/>
+                       <xs:attribute name="Permanent" type="YesNoType"/>
+                       <xs:attribute name="System" type="YesNoType"/>
+               </xs:complexType>
+
+
+STEP J.  Build Wix MSI install package
+
+From the DOS command prompt window run:
+
+    nmake /f NTMakefile wix
+
+Make sure the binaries installed to \src\wix\release\ship are
+available in the PATH environment variable
+
+
+STEP K. Final Results
 
 The build process generates its binaries in %AFSROOT%\DEST. The subdirectory
 would look like the following:
@@ -289,7 +457,7 @@ would look like the following:
     WinInstall\OpenAFSforWindows.exe - is the install package for Open AFS
 
 
-STEP J. Optional Items
+STEP L. Optional Items
 
 The build process has an error table that is compiled for many OpenAFS
 applications.  This table is generated by Unix based tools.  It is not