DDF files as used in SharePoint to create Solution (WSP) files are an anachronistic throwback to an ancient Microsoft technology: CAB files. Since CAB files predate the era of blogging, it is not particularly straightforward to find documentation on DDF files.
Unless you actually read the documentation provided by Microsoft, that is... Relevant excerpts from the MakeCab.doc included in the Microsoft Cabinet Software Development Kit are included below:
"4.2.2. Command Summary
"The following table provides a summary of the MakeCAB Directive File syntax. Directives begin with a period (“.”), followed by a command name, and possibly by blank delimited arguments. Note that a File Copy command is distinguished from a File Reference command by the setting of the GenerateInf variable.
Command Syntax | Description |
; | Comment (anywhere on a DDF line) |
src [dest] [/inf=yes|no] [/unique=yes|no] [/x=y ...] | File Copy command |
dest [/x=y ...] | File Reference command |
.Define variable=[value] | Define variable to be equal to value (see .Option Explicit) |
.Delete variable | Delete a variable definition |
.Dump | Display all variable definitions |
.InfBegin Disk | Cabinet | Folder | Copy lines to specified INF file section |
.InfEnd | End an .InfBegin section |
.InfWrite string | Write “string” to file section of INF file |
.InfWriteCabinet string | Write “string” to cabinet section of INF file |
.InfWriteDisk string | Write “string” to disk section of INF file |
.New Disk | Cabinet | Folder | Start a new Disk, Cabinet, or Folder |
.Option Explicit | Require .Define first time for user-defined variables |
.Set variable=[value] | Set variable to be equal to value |
%variable% | Substitute value of variable |
<blank line> | Blank lines are ignored |
"4.2.3. Variable Summary
Standard Variables | Description |
Cabinet=ON | OFF | Turns Cabinet Mode on or off |
CabinetFileCountThreshold=count | Threshold count of files per Cabinet |
CabinetNamen=filename | Cabinet file name for cabinet number n |
CabinetNameTemplate=template | Cabinet file name template; * is replaced by Cabinet number |
ChecksumWidth=1 | 2 | ... | 8 | Max low-order hex digits displayed by INF csum parameter |
ClusterSize=bytesPerCluster | Cluster size on diskette (default is 512 bytes) |
Compress=ON | OFF | Turns compression on or off |
CompressedFileExtensionChar=char | Last character of the file extension for compressed files |
CompressionType=MSZIP | Compression engine |
DestinationDir=path | Default path for destination files (stored in cabinet file) |
DiskDirectoryn=directory | Output directory name for disk n |
DiskDirectoryTemplate=template | Output directory name template; * is replaced by disk number |
DiskLabeln=label | Printed disk label name for disk n |
DiskLabelTemplate=template | Printed disk label name template; * is replaced by disk number |
DoNotCopyFiles= ON | OFF | Controls whether files are actually copied (ACME ADMIN.INF) |
FolderFileCountThreshold=count | Threshold count of files per Folder |
FolderSizeThreshold=size | Threshold folder size for current folder |
GenerateInf=ON | OFF | Control Unified vs. Relation INF generation mode |
InfXxx=string | Set default value for INF Parameter Xxx |
InfCabinetHeader[n]=string | INF cabinet section header text |
InfCabinetLineFormat[n]=format string | INF cabinet section detail line format |
InfCommentString=string | INF comment string |
InfDateFormat=yyyy-mm-dd | mm/dd/yy | INF date format |
InfDiskHeader[n]=string | INF disk section header text |
InfDiskLineFormat[n]=format string | INF disk section detail line format |
InfFileHeader[n]=string | INF file section header text |
InfFileLineFormat[n]=format string | INF file section detail line format |
InfFileName=filename | Name of INF file |
InfFooter[n]=string | INF footer text |
InfHeader[n]=string | INF header text |
InfSectionOrder=[D | C | F]* | INF section order (disk, cabinet, file) |
MaxCabinetSize=size | Maximum cabinet file size for current cabinet |
MaxDiskFileCount=count | Maximum count of files per Disk |
MaxDiskSize[n]=size | Maximum disk size |
MaxErrors=count | Maximum errors allowed before pass 1 terminates |
ReservePerCabinetSize=size | Base amount of space to reserve for FCRESERVE data |
ReservePerDataBlockSize=size | Amount of space to reserve in each data block |
ReservePerFolderSize=size | Amount of additional space in FCRESERVE for each folder |
RptFileName=filename | Name of RPT file |
SourceDir=path | Default path for source files |
UniqueFiles=ON | OFF | Control whether duplicate desintation file names are allowed |
Details of selected commands and variables:
.Define variable=[value]
Define variable to be equal to value.
To use variable, surround it with percent signs (%) -- %variable%.
Using an undefined variable is an error, and will cause MakeCAB to stop before pass 2.
value may include references to other variables.
Leading and trailing blanks in value are discarded.
Blanks may be enclose in quote (“) or apostrophe (‘) marks.
Explicit percent signs (%), quotes (“), or apostrophes (‘) must be specified twice.
NOTE: If .Option Explicit is specified, then you must first use .Define to define any user-defined variables before you can use .Set to modify them. For standard MakeCAB variables, .Define is not permitted, and only .Set may be used on. If .Option Explicit is not specified, then .Define is equivalent to .Set.
.Set variable=value
Set variable to be equal to value.
To use variable, surround it with percent signs (%) -- %variable%.
Using an undefined variable is an error, and will cause MakeCAB to stop before pass 2.
value may include references to other variables.
value may be empty, in which case variable is set to the empty string.
Leading and trailing blanks in value are discarded.
Blanks may be enclose in quote (“) or apostrophe (‘) marks.
Explicit percent signs (%), quotes (“), or apostrophes (‘) must be specified twice.
NOTE: If .Option Explicit is specified, then you must first use .Define to define any user-defined variables before you can use .Set to modify them. For standard MakeCAB variables, .Define is not permitted, and only .Set may be used on.
DestinationDir=path
Path prefix to store in cabinet file for each file in the cabinet.
Default: .Set DestinationDir= ; Default is no path prefix
path is concatenated with a path separator (“\”) and the target file name on File Copy Commands to produce the file name that is stored in cabinet file. EXTRACT.EXE will use this file name as the default name when the file is extracted.
SourceDir=path
The default path used to locate source files specified in File Copy Commands.
Default: .Set SourceDir= ; Default is to look in the current directory
path is concatenated with a path separator (“\”) and the source file name on the File Copy Command to produce the file name used to find the source file.
If path is empty, then the source file name specified on the File Copy Command is not modified.
UniqueFiles=ON | OFF
Controls whether destination file names in a layout must be unique..
Default: .Set UniqueFiles="ON" ; File names must be unique
If UniqueFiles is ON, MakeCAB checks that all destination file names (names stored on disks or in cabinets) are unique, and generates an error (during pass 1) if they are not. ON is the default, since using the same filename twice usually means that the same file was accidentaly included twice, and this would be a waste of disk space.
If UniqueFiles is OFF, MakeCAB permits duplicate destination file names.
The /UNIQUE parameter may be specified on individual File Copy commands to override the value of UniqueFiles.
Labels: howto, microsoft, moss, sharepoint