The fakefile file follows the FSS-0005 (Somewhat Basic List) format with a sub-format of IKI-0002 (Simple Script).

A fakefile is broken up into multiple Basic Lists, referred to as Sections, with two special purpose reserved Sections.

The Sections are broken up into multiple Extended Objects and their respective Contents, referred to as Section Operations.

Each of these non-reserved Sections acts as a set to perform some set of Section Operations.

Each of these Section Operations perform a single command or action based on a set of reserved Section Operation types.

Each of these Section Operations have a set of Arguments associated with them.

How these Arguments are interpreted and processed are specific to each Operation type.

The Section Operations are represented by the Extended Object name and the Extended Content represents the Operation Arguments.

Each of these Section Operations support IKI variable substitution within their respective Arguments.

The Operation Extended Object does not support IKI variable substitution.

The reserved Settings Section does not support IKI variable substitution.

The IKI-0002 (Simple Script) vocabulary context is further clarified as follows:

  • context: The value is case-sensitive variable name.
  • define: The value must be a case-sensitive valid environment variable name (alpha-numeric or underscore, but no leading digits).
  • parameter: The value is a case-sensitive variable name.
    • Many parameters also support :option and :value appended at the end of the value.

The reserved Section Objects are:

  • settings: contains a list of Settings Objects and Content in FSS-0001 (Extended) format.
  • main: contains a list of Operation Objects and Content in FSS-0001 (Extended) format.

The Settings Objects are:

  • compiler: Only one Content, which must only be a valid filename.
  • define: First Content represents the variable name (case-sensitive), remaining Content represents the value.
  • environment: Zero or more Content representing valid environment variable names (alpha-numeric with underscore, but cannot begin with a number).
  • fail: Only one Content, which must be either exit, warn or ignore (quotes not required) (case-sensitive).
  • indexer: Only one Content, which must only be a valid filename.
  • indexer_arguments: Zero or more arguments supported by the indexer specified in code:build_indexer".
  • load_build: Only one Content, which must be either yes or no (quotes not required) (case-sensitive).
  • parameter: First Content represents the variable name (case-sensitive), remaining Content represents the value.
  • stage: Zero or one Content, which represents the build stage name (case-sensitive) (no slashes allowed).

The build settings may also be specified in the Settings Section.

The Section Operation Objects are:

  • and: One or more Content. First Content is the condition or no_dereference (when no_dereference, then the Second Content is the condition, etc..), remaining Content are specific to the condition.
  • break: Zero or one Content. If specified, First content must be one of success or failure.
  • build: Zero or more Content. First Content represents file name of the settings file to use, Second Content and on represent custom modes to use.
  • clean: Zero Content.
  • clone: Two or more Content representing paths to files.
  • compile: One or more Content as parameters to compiler.
  • copy: Two or more Content representing paths to files.
  • define: First Content represents variable name (case-sensitive), remaining Content represents the value.
  • delete: One or more Content representing paths to files.
  • deletes: One or more Content representing paths to files.
  • else: Zero Content.
  • exit: Zero or One Content. If specified, First content must be one of succeed or fail.
  • fail: One Content. First Content must be one of exit, warn, or ignore (case-sensitive).
  • group: Two or more Content. First Content is group name, number, or no_dereference (when no_dereference, then the second Content is the group name or number, etc..), remaining Content are paths to files.
  • groups: Two or more Content. First Content is group name, number, or no_dereference (when no_dereference, then the second Content is the group name or number, etc..), remaining Content are paths to files.
  • if: One or more Content. First Content is the condition or is no_dereference (when no_dereference, then the Second Content is the condition, etc..), remaining Content are specific to the condition.
  • index: One or more Content.
  • link: Two to Four Content. The first and second Content may be either force or strict, the second to last Content is the link target file, and the last Content is the pointer file (the link).
  • mode: Two or more Content. First Content is the mode, remaining Content are paths to files.
  • modes: Two or more Content. First Content is the mode, remaining Content are paths to files.
  • move: Two or more Content representing paths to files.
  • operate: One Content. First Content is the name of a valid Section Object, except for the reserved Section Objects.
  • or: One or more Content. First Content is the condition or no_dereference (when no_dereference, then the Second Content is the condition, etc..), remaining Content are specific to the condition.
  • owner: Two or more Content. First Content is owner name, number, or no_dereference (when no_dereference, then the second Content is the owner name or number, etc..), remaining Content are paths to files.
  • owners: Two or more Content. First Content is owner name, number, or no_dereference (when no_dereference, then the second Content is the owner name or number, etc..), remaining Content are paths to files.
  • parameter: First Content represents variable name (case-sensitive), remaining Content represents the value.
  • pop: Zero Content.
  • print: Zero or more Content.
  • run: One or more Content. First Content is the name of the program (or script) and all remaining Content are passed as arguments to the named program (or script).
  • shell: One or more Content. First Content is the file path of the program (or script) and all remaining Content are passed as arguments to the named program (or script).
  • skeleton: Zero Content.
  • to: One Content. First Content is the directory path.
  • top: Zero Content.
  • touch: Two or more Content. First Content is one of file or directory, remaining Content are paths to files.
  • write: One or more Content. First Content the file to write to, remaining Content represent the string to write.

The if Section Operation conditions are:

  • ==: Two or more Content.
  • >: Two or more Content.
  • <: Two or more Content.
  • >=: Two or more Content.
  • <=: Two or more Content.
  • <>: Two or more Content.
  • define: One or more Content are valid environment variable name.
  • exist: One or more Content representing the files to check the existence of.
  • failure: has no other Content.
  • group: First Content is the name of a group. Second or more Content are paths to files.
  • is: First Content is a list of block, character, no_dereference, directory, fifo, link, regular , or socket followed by "for" and then the Remaining Content that are paths to files.
  • mode: First Content is either has, is, or no_dereference. Second Content is a valid file mode. Third or more Content are paths to files.
  • no_dereference: A non-condition inserted before any of exist, is, and mode (then the second Content is the actual condition followed by any Content associated with that condition).
  • not: First Content is one of define, exist, group, is, mode, no_dereference, owner, or parameter and all remaining Content are based on the First Content's if Section Operation Content rules.
  • owner: First Content is the name of an owner. Second or more Content are paths to files.
  • parameter: One or more Content are valid IKI names.
  • success: has no other Content.

The if Section Operation conditions and numbers:

  • The numbers may be represented in any of the forms:
    1. decimal: all numbers without a base-type prefix are of base-type 10, referred to as decimal.
    2. binary: all numbers with the prefix 0b (uppercase or lowercase b) are of base-type 2, referred to as binary.
    3. octal: all numbers with the prefix 0o (that is zero followed by the letter o, uppercase or lowercase o) are of base-type 8, referred to as octal.
    4. duodecimal: all numbers with the prefix 0d (uppercase or lowercase d) are of base-type 12, referred to as duodecimal.
    5. hexadecimal: all numbers with the prefix 0x (uppercase or lowercase x) are of base-type 16, referred to as hexadecimal.

    (At this time) The numbers may be of a max value of 2^64, or 18446744073709551615, positive or negative.

    (At this time) The numbers may only be whole numbers.

    Note: There are plans to impose no limits on the number size or any decimal values, but this requires significant work is not to be implemented at this time. Once this restriction is lifted, it should be conditional upon an implementation for what the maximum supported numbers or digits may be.

    Only the following if Section Operation conditions use these operators:
    • >
    • <
    • >=
    • <=

The if Section Operation condition parameter:

  • The following reserved words are available for parameter names: build, color, current, data, define, fakefile, mode, process, return, settings, sources, top, verbosity, and work.
  • Each of the reserved words supports having :option and :value appended, such as: work:value.