mo.notono.us

Monday, July 02, 2007

DDF Command and Variable Syntax

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: , , ,

3 Comments:

Post a Comment

<< Home