diff --git a/README-NT b/README-NT index 292aa72add..40e4103fb6 100644 --- a/README-NT +++ b/README-NT @@ -42,17 +42,38 @@ The Microsoft development tools require anywhere from 660 MB to 1.8GB of storage depending on which compilers are selected. The following versions are supported: - Microsoft Visual C++ 6.0 Microsoft Visual .NET - Microsoft Visual .NET 2003 (recommended) + available via a MSDN subscription - Microsoft Platform SDK for Windows XP SP2 - [Core and Data Access SDKs are required] + Microsoft Visual .NET 2003 (recommended) + available via a MSDN subscription + + Microsoft Visual C++ Toolkit 2003 (same as .NET 2003) + http://msdn.microsoft.com/visualc/vctoolkit2003/ + +The following Microsoft SDK is required: + + Microsoft Platform SDK for Windows XP SP2 [Core, Data Access and Installer SDKs are required] + http://www.microsoft.com/msdownload/platformsdk/sdkupdate/downlevel.htm [IE required] + http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm + +The following Microsoft DDK is required: + + Microsoft Windows Server 2003 DDK + available via a MSDN subscription or via free CD + http://www.microsoft.com/whdc/devtools/ddk/orderddkcd.mspx The NSIS installer requires about 14 MB of storage. The following -version is supported. +version is supported: Nullsoft Scriptable Installation System 2.0 + http://nsis.sourceforge.net/home/ + +The WiX installer requires about 18 MB of storage. The following +version is supported: + + Wix 2.0.2217.0 + http://prdownloads.sourceforge.net/wix/sources-2.0.2217.0.zip The InstallShield scripts (although not supported) require version 5.5 of InstallShiled. Version 6.0 or higher of InstallShield are not @@ -69,13 +90,13 @@ Transfer OpenAFS source tree onto your hardrive. The source can be downloaded from the OpenAFS web site: http://www.OpenAFS.org/release/snapindex.html. -For this example, download source for version 1.3.60 using the +For this example, download source for version 1.3.74 using the following URL: -http://www.openafs.org/dl/openafs/1.3.60/openafs-1.3.60-src.tar +http://www.openafs.org/dl/openafs/1.3.74/openafs-1.3.74-src.tar HINT: DailySnapShots are pre-release source trees and much more likely to have compilation errors. If this is your first attempt, do -your build based on a release version of the source, e.g. 1.3.60. Once +your build based on a release version of the source, e.g. 1.3.74. Once you have completed a build process successfully, you can experiment with other source trees. @@ -83,23 +104,24 @@ You will need an unzip utility that can expand compressed tar files. For example "Pkzip for Windows" from Pkware will uncompress tar files. (http://www.pkware.com/) -Expand the downloaded tar file (openafs-1.3.60-src.tar) into target +Expand the downloaded tar file (openafs-1.3.74-src.tar) into target directory (c:\OpenAFS), the unzip routine will expand the source into a subdirectory tree: - c:\OpenAFS\OpenAFS-1.3.60\src + c:\OpenAFS\OpenAFS-1.3.74\src Copy the files 'NTMakefile' and 'ntbuild.bat' from 'src' to the OpenAFS -base directory: +base directory (aka %AFSROOT%): From a DOS command prompt window, enter the following copy commands: - copy c:\OpenAFS\OpenAFS-1.3.60\src\NTMakefile c:\OpenAFS\OpenAFS-1.3.60\. - copy c:\OpenAFS\OpenAFS-1.3.60\src\ntbuild.bat c:\OpenAFS\OpenAFS-1.3.60\. + cd c:\OpenAFS\OpenAFS-1.3.74 + copy src\NTMakefile . + copy src\ntbuild.bat . The AFS base directory should look something like the following: - c:\OpenAFS\OpenAFS-1.3.60\ + c:\OpenAFS\OpenAFS-1.3.74\ NTMakefile ntbuild.bat src @@ -107,8 +129,8 @@ The AFS base directory should look something like the following: STEP B. Install compiler and development tools. -Install a copy of Microsoft Visual C++ 6.0, Visual .NET, or Visual .NET 2003. -The "Typical" install setting is sufficient. +Install a copy of Microsoft Visual .NET, Visual .NET 2003, Visual C++ +Toolkit 2003. The "Typical" install setting is sufficient. (1) You can reduce the installation size by selecting "Custom" install and remove all but the following Options: @@ -121,17 +143,19 @@ and remove all but the following Options: STEP C. Install SDK header files. -Files from Microsoft's Platform SDK (August 2001 or later) are required to -complete a build on Windows 2000 or XP. You can install the "Core SDK" -from +Files from Microsoft's Platform SDK for Windows XP SP2 is required to +complete a build on Windows 2000/XP/2003. You can install the "Core, Data +Access and Installer SDKs" from http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ by using Internet Explorer 5.x or higher. (Active X controls are required) +If you do not which to use IE a complete SDK package is available from + + http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm The header files that are required are found from a Microsoft SDK are: - netspi.h (Windows 9x builds) npapi.h (Windows 2000,XP,2003 builds) netcfgx.h (NSIS Loopback Adapter installer - Windows 2000,XP,2003 builds) netcfgn.h (NSIS Loopback Adapter installer - Windows 2000,XP,2003 builds) @@ -139,16 +163,11 @@ The header files that are required are found from a Microsoft SDK are: These files come from the following Microsoft DDKs/SDKs: npapi.h: - Windows XP/2003 Platform SDK - include/ + Windows XP SP2 Platform SDK - include/ netcfgn.h, netcfgx.h: Windows XP/2003 DDK - inc/wxp/ - netmpr.h, netspi.h: - July 1998 Windows 95 DDK - net/inc/netmpr.h and net/inc/netspi.h - July 1999 Windows 98 DDK - src/net/inc/netmpr.h and src/net/inc/netspi.h - - you need to install "Legacy and Related - driver samples" STEP D. Configure NTBUILD.BAT. @@ -159,6 +178,7 @@ must be defined to match your configuration: AFSVER_CL: Set to 1200 if using MS Visual C++ 6.0 Set to 1300 if using MS Visual .NET Set to 1310 if using MS Visual .NET 2003 + Set to 1400 if using MS Visual .NET 2005 MSVCDIR: Set to the short name version of the directory into which the visual C++ compiler was installed regardless of version @@ -184,17 +204,17 @@ Edit file %AFSROOT%\src\config\NTMakefile.i386_nt40 AFSPRODUCT_VER_MINOR - Version Minor Number AFSPRODUCT_VER_PATCH - Version Patch Number AFSPRODUCT_VER_BUILD - Version Build Number - CELLSERVDB_INSTALL - The default file name for the CellServDB - included in the install Package. - CELLNAME_DEFAULT - The default home cell name. - CELLSERVDB_WEB - The default web address to obtain CellServDB + CELLSERVDB_INSTALL - The default file name for the CellServDB + included in the install Package. + CELLNAME_DEFAULT - The default home cell name. + CELLSERVDB_WEB - The default web address to obtain CellServDB For example: in the file %AFSROOT%\src\config\NTMakefile.i386_nt40 you would see the following: AFSPRODUCT_VER_MAJOR=1 AFSPRODUCT_VER_MINOR=3 - AFSPRODUCT_VER_PATCH=6000 + AFSPRODUCT_VER_PATCH=7400 AFSPRODUCT_VER_BUILD=0 CELLNAME_DEFAULT=openafs.org CELLSERVDB_INSTALL=CellServDB.GrandCentral @@ -206,7 +226,7 @@ one that can be downloaded from the web (CELLSERVDB_WEB). STEP F. Begin the build -(1) From Windows 2000/XP open up a DOS prompt window. +(1) From Windows 2000/XP/2003 open up a DOS prompt window. (2) Change to the %AFSROOT% directory @@ -267,16 +287,16 @@ sources. The following changes were made to exehead\config.h. STEP H. Build OpenAFS NSIS install package -From the DOS command prompt window run: +From the %AFSROOT% directory execute: nmake /f NTMakefile NSIS STEP I. Install Wix MSI Installer -Download the Wix 2.0.1927.1 installer from +Download the Wix 2.0.2217.0 installer from - http://prdownloads.sourceforge.net/wix/sources-2.0.1927.1.zip + http://prdownloads.sourceforge.net/wix/sources-2.0.2217.0.zip Apply the following patches to the source tree and execute @@ -284,152 +304,114 @@ Apply the following patches to the source tree and execute from the \src\wix directory. +Index: src/wix/Common.cs +=================================================================== +RCS file: /cvsroot/wix/wix/src/wix/Common.cs,v +retrieving revision 1.7 +diff -w -r1.7 Common.cs +140a141,146 +> public static long GetFileTimeFromDateTime(string dateTime) +> { +> System.DateTime sdt = System.Xml.XmlConvert.ToDateTime(dateTime); +> return sdt.ToFileTime(); +> } +> 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) +retrieving revision 1.14 +diff -w -r1.14 Compiler.cs +847c847 +< this.AddRegistryKey(sourceLineNumbers, null, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[!", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context +--- +> this.AddRegistryKey(sourceLineNumbers, null, MsiInterop.MsidbRegistryRootClassesRoot, String.Concat("CLSID\\", classId, "\\", context[i]), String.Empty, String.Concat("\"[#", fileServer, "]", argument == null ? String.Empty : " ", argument, "\""), componentId); // ClassId context +2352a2353,2358 +> // if a Value attribute was given by itself, make this a type 19 custom action +> if( sourceBits == 0 && targetBits == MsiInterop.MsidbCustomActionTypeTextData ) +> { +> sourceBits = MsiInterop.MsidbCustomActionTypeSourceFile; +> } +> +3881c3887 +< minDate = attrib.Value; +--- +> minDate = Common.GetFileTimeFromDateTime( attrib.Value ).ToString(); +3884c3890 +< maxDate = attrib.Value; +--- +> maxDate = Common.GetFileTimeFromDateTime( attrib.Value ).ToString(); +8187a8194,8207 +> 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; +9685a9706 +> 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 processing instruction without a matching ."); -+ 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 @@ - } - - /// -+ /// Returns true if the symbol exists. -+ /// -+ /// symbol name to check -+ /// true if symbol is defined -+ 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); -+ } -+ -+ /// - /// Replaces parameters in the source text. - /// - /// Text that may contain parameters to replace. +retrieving revision 1.6 +diff -w -r1.6 Preprocessor.cs +274c274 +< 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); +279c279 +< 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); +360a361,362 +> case "error": +> throw new WixPreprocessorException(this.GetCurrentSourceLineNumbers(), this.PreprocessVariables(reader.Value)); +419a422,437 +> /// Returns true if the symbol exists. +> /// +> /// symbol name to check +> /// true if symbol is defined +> 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); +> } +> +> /// 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" - /> - -+ -+ - - - -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 @@ - - - -+ - - - +diff -w -r1.4 wix.csproj +661a662,666 +> RelPath = "Xsd\wix.xsx" +> DependentUpon = "wix.xsd" +> BuildAction = "None" +> /> +> RelPath = "Xsd\wixloc.xsx" +> DependentUpon = "wixloc.xsd" +> BuildAction = "None" +> /> STEP J. Build Wix MSI install package -From the DOS command prompt window run: +From the %AFSROOT% directory execute: nmake /f NTMakefile wix @@ -442,7 +424,7 @@ STEP K. Final Results The build process generates its binaries in %AFSROOT%\DEST. The subdirectory would look like the following: -%AFSROOT%:\DEST\{checked,free}\ +%AFSROOT%\DEST\{checked,free}\ bin etc include @@ -454,7 +436,8 @@ would look like the following: Bin - contains build utilities. root.client - contains Open AFS binaries root.server - contain Open AFS Server binaries - WinInstall\OpenAFSforWindows.exe - is the install package for Open AFS + WinInstall\OpenAFSforWindows.exe - is the NSIS install package + WinInstall\openafs-en_US.msi - is the WiX MSI install package STEP L. Optional Items