The PP option specifies which (and in what order) preprocessors are invoked prior to compilation.
.-NOPP---------------------------------------. | .-+---+------------------------. | | | '-,-' | | | V | | >>-+-PP--(----pp-name--+-----------------+-+--)-+-------------->< '-(--pp-string--)-'
Preprocessor options are processed from left to right, and if two options conflict, the last (rightmost) option is used. For example, if you invoke the MACRO preprocessor with the option string 'CASE(ASIS) CASE(UPPER)', then the option CASE(UPPER) is used.
The same preprocessor can be specified multiple times, and you can specify a maximum of 31 preprocessor steps.
The MACRO option and the PP(MACRO) option both cause the macro facility to be invoked prior to compilation. If both MACRO and PP(MACRO) are specified, the macro facility is invoked twice.
If you specify the PP option more than once, the compiler effectively concatenates them. So specifying PP(SQL) PP(CICS) is the same as specifying PP(SQL CICS). This also means that if you specified PP(MACRO SQL('OPTIONS')) and PP(MACRO SQL('OPTIONS DATE(ISO)')), then the resulting PP option would be PP( MACRO SQL('OPTIONS') MACRO SQL('OPTIONS DATE(ISO)')) and both the MACRO and SQL preprocessor would be invoked twice. If you were doing this in an attempt to override the earlier SQL options, it might be better not to specify the preprocessor options in the PP option, but rather to specify them via the PPSQL option, i.e. specify PP(MACRO SQL) PPSQL('OPTIONS DATE(ISO)').
For more discussion of the preprocessors, see PL/I preprocessors.