-# this is a template for an ini file
-# these are comments
-; so are these
+# This is an example INI file that can be used to set compiler options
+# without the rquirement for supplying them as arguments on the command
+# line, this can be coupled with progs.src. To utilize this file there
+# are two options availble, if it's named "gmqcc.ini" or "gmqcc.cfg" and
+# the file exists in the directory that GMQCC is invoked from, the compiler
+# will implicitally find and execute regardless. For more freedom you may
+# use -config=<file> from the command line to specify a more explicit
+# directory/name.ext for the configuration file.
+
+# These are common compiler flags usually represented via the -f prefix
+# from the command line.
[flags]
- OVERLAP_LOCALS = false ; comments can exist on lines too
- DARKPLACES_STRING_TABLE_BUG = false # like this as well
+ # Enabling this can potentially reduces code size by overlapping
+ # locals where possible.
+ OVERLAP_LOCALS = false
+
+ # in some older versions of the Darkplaces engine the string table
+ # size is computed wrong causing compiled progs.dat to fail to load
+ # Enabling this works around the bug by writing a few additional
+ # null bytes to the end of the string table to compensate.
+ DARKPLACES_STRING_TABLE_BUG = false
+
+ # Enabling this corrects the assignment of vector field pointers via
+ # subsituting STORE_FLD with STORE_V.
ADJUST_VECTOR_FIELDS = true
+
+ # Enabling this allows the use of the FTEQ preprocessor, as well as
+ # additional preprocessing directives such as #error and #warning.
FTEPP = true
+
+ # Enabling this relaxes switch statement semantics
RELAXED_SWITCH = false
+
+ # Enabling this allows short-circut evaluation and logic, opposed
+ # to full evaluation.
SHORT_LOGIC = false
+
+ # Enabling this allows perl-like evaluation/logic.
PERL_LOGIC = true
+
+ # Enabling this allows the use of the "translatable strings" extension
+ # assisted by .po files.
TRANSLATABLE_STRINGS = false
+
+ # Enabling this prevents initializations from becoming constant unless
+ # 'const' is specified as a type qualifier.
INITIALIZED_NONCONSTANTS = false
+
+ # Enabling this allows function types to be assignable even if their
+ # signatures are invariant of each other.
ASSIGN_FUNCTION_TYPES = false
+
+ # Enabling this will allow the generation of .lno files for engine
+ # virtual machine backtraces (this is enabled with -g as well).
LNO = false
+
+ # Enabling this corrects ternary percedence bugs present in fteqcc.
CORRECT_TERNARY = true
-# enable all warnings (minus debug)
+ # Prevent the creation of _x, _y and _z progdefs for vectors
+ SINGLE_VECTOR_DEFS = false
+
+ # Cast vectors to real booleans when used in logic expressions.
+ # This is achieved by using NOT_V.
+ CORRECT_LOGIC = false
+
+ # Always treat empty strings as true. Usuall !"" yields true, because
+ # the string-NOT instruction considers empty strings to be false, while
+ # an empty string as condition for 'if' will be considered true, since
+ # only the numerical value of the global is looked at.
+ TRUE_EMPTY_STRINGS = false
+
+ # Opposite of the above, empty strings are always false. Similar to
+ # CORRECT_LOGIC this will always use NOT_S to cast a string to a real
+ # boolean value.
+ FALSE_EMPTY_STRINGS = false
+
+ # Recognize utf-8 characters in character constants, and encode
+ # codepoint escape sequences in strings as utf-8. This essentially allows
+ # \{1234} escape sequences to be higher than 255.
+ UTF8
+
+ # When a warning is printed and it is set to be treated as error via
+ # a -Werror switch, compilation will be stopped, unless this is false.
+ # When this is false, the rest of the code will be compiled, and at the end
+ # the file and line of the first warning will be shown.
+ BAIL_ON_WERROR = true
+
+ # Allow loops and switches to be labeled and break and continue to take an
+ # optional label to target a specific loop/switch.
+ LOOP_LABELS = false
+
+ # Enable the 'nil' null constant, which has no type. It can be used as the
+ # right hand of any assignment regardless of the required type.
+ UNTYPED_NIL = false
+
+ # Be "permissive". For instance, when -funtyped-nil is used, this allows local
+ # variables with the name 'nil' to be declared.
+ PREMISSIVE = false
+
+ # Allow vararg access from within QC of the form: ...(argnumber, type)
+ VARIADIC_ARGS = true
+
+ # Most Quake VMs, including the one from FTEQW or up till recently
+ # Darkplaces, do not cope well with vector instructions with overlapping
+ # input and output. This option will avoid producing such code.
+ LEGACY_VECTOR_MATHS = true
+
+ # Builtin-numbers are usually just immediate constants.
+ # The following allows whole expressions to be used, as long as they
+ # are compile-time constant.
+ EXPRESSIONS_FOR_BUILTINS = false
+
+# These are all the warnings, usually present via the -W prefix from
+# the command line.
[warnings]
+ # ?? Used for debugging ??
DEBUG = false
+
+ # Enables warnings about unused variables.
UNUSED_VARIABLE = true
+
+ # Enables warnings about uninitialized variables.
USED_UNINITIALIZED = true
+
+ # Enables warnings about the unknown control sequences in the source
+ # stream.
UNKNOWN_CONTROL_SEQUENCE = true
+
+ # Enables warnings about the use of (an) extension(s).
EXTENSIONS = true
+
+ # Enables warnings about redeclared fields.
FIELD_REDECLARED = true
+
+ # Enables warnings about missing return values.
MISSING_RETURN_VALUES = true
- TOO_FEW_PARAMETERS = true
+
+ # Enables warnings about missing parameters for function calls.
+ INVALID_PARAMETER_COUNT = true
+
+ # Enables warnings about locals shadowing parameters or other locals.
LOCAL_SHADOWS = true
+
+ # Enables warnings about constants specified as locals.
LOCAL_CONSTANTS = true
+
+ # Enables warnings about variables declared as type void.
VOID_VARIABLES = true
+
+ # Enables warnings about implicitally declared function pointers.
IMPLICIT_FUNCTION_POINTER = true
+
+ # Enables warnings for use of varadics for non-builtin functions.
VARIADIC_FUNCTION = true
+
+ # Enables warnings about duplicated frame macros.
FRAME_MACROS = true
+
+ # Enables warnings about effectivless statements.
EFFECTLESS_STATEMENT = true
+
+ # Enables warnings of "end_sys_fields" beiing declared a field.
END_SYS_FIELDS = true
+
+ # Enables warnings for infompatible function pointer signatures used
+ # in assignment.
ASSIGN_FUNCTION_TYPES = true
+
+ # Enables warnings about redefined macros in the preprocessor
PREPROCESSOR = true
+
+ # Enables warnings about multi-file if statements
MULTIFILE_IF = true
+
+ # Enables warnings about double declarations
DOUBLE_DECLARATION = true
+
+ # Enables warnings about type qualifiers containing both 'var' and
+ # 'const'
CONST_VAR = true
+
+ # Enables warnings about the use of multibytes characters / constants
MULTIBYTE_CHARACTER = true
+
+ # Enables warnings about ternary expressions whos precedence may be
+ # not what was initially expected.
TERNARY_PRECEDENCE = true
+
+ # Enables warnings about unknown pragmas.
UNKNOWN_PRAGMAS = true
-; enable all optimizations!
+ # Enables warnings about unreachable code.
+ UNREACHABLE_CODE = true
+
+ # Enables preprocessor "#warnings"
+ CPP = true
+
+ # With the [[attribute]] syntax enabled, warn when an unknown
+ # attribute is encountered. Its first token will be included in the
+ # message.
+ UNKNOWN_ATTRIBUTE = true
+
+ # Warn when declaring variables or fields with a reserved name like 'nil'
+ RESERVED_NAMES = true
+
+ # Warn about 'const'-qualified global variables with no initializing value.
+ UNINITIALIZED_CONSTANT = true
+
+ # Warn about non-constant global variables with no initializing value.
+ UNINITIALIZED_GLOBAL = true
+
+ # Redeclaring a 'const' as 'var' or the other way round.
+ DIFFERENT_QUALIFIERS = true
+
+ # Redeclaring a function with different attributes such as
+ # [[noreturn]]
+ DIFFERENT_ATTRIBUTES = true
+
+ # Warn when a function is marked with the attribute
+ # "[[deprecated]]". This flag enables a warning on calls to functions
+ # marked as such.
+ DEPRECATED = true
+
+ # Warn about possible problems from missing parenthesis, like an
+ # assignment used as truth value without additional parens around.
+ PARENTHESIS = true
+
+# Finally these are all the optimizations, usually present via the -O
+# prefix from the command line.
[optimizations]
+ # Enables peephole optimizations.
PEEPHOLE = true
+
+ # Enables localtemp omission optimizations.
LOCALTEMPS = true
+
+ # Enables tail recrusion optimizationd.
TAIL_RECURSION = true
+
+ # Enables tail-call optimizations. (Not implemented)
TAIL_CALLS = true
+
+ # Every function where it is safe to do so will share its local data section
+ # with the others. The criteria are currently that the function must not have
+ # any possibly uninitialized locals, or local arrays regardless of how they
+ # are initialized.
+ OVERLAP_LOCALS = false
+
+ # Strip out the names of constants to save some space in the progs.dat
+ STRIP_CONSTANT_NAMES = true
+
+ # Aggressivly reuse strings in the string-section
+ OVERLAP_STRINGS = true
+
+ # Have expressions which are used as function parameters evaluate directly
+ # into the parameter-globals if possible.
+ # This avoids a whole lot of copying.
+ CALL_STORES = true
+
+ # Do not create a RETURN instruction at the end functions of return-type void.
+ VOID_RETURN = true
+
+ # Turn extraction-multiplications such as (a_vector * '0 1 0')
+ # into direct component accesses
+ VECTOR_COMPONENTS = true