The current ocamlbuild support for -pp flags is not satisfying for preprocessing commands that need user-passed arguments. It is possible to pass "-pp foo" and "-ppflag foo" to the command-line invocation of ocamlbuild, but they will replace the preprocessor invocation command instead of being appended to it.

It would be useful to directly support ocamlfind's -ppopt option
(when -use-ocamlfind is used), that doesn't replace the preprocessor
command entirely but only appends to it. One would then be able to do
(I'm using below the new "-syntax" command-line option corresponding
to the flag):
ocamlbuild -use-ocamlfind -syntax camlp4o -package camlp4.macro -ppopt -DFOO test.byte

Of course, it is important to also have a "ppopt(-DFOO)" parametrized
flag to be able to use it locally.

Note that, as a workaround, it is currently possible to pass -ppopt as
a -cflags parameter:
ocamlbuild -use-ocamlfind -syntax camlp4o -package camlp4.macro -cflags -ppopt,-DFOO test.byte

The problem is that only works during "compile" steps, and will not
work, for example, when building a .pp.ml target.

(In the long-term it is unclear to me whether having both -ppflag and -ppopt is useful, and we should not use the appending semantics of -ppopt for -ppflag as well. This would have backward-compatibility implications though, so it's better left for later.)