How do I let Boost.Build know about dependencies on generated header files?
I have a simple Jamfile that runs flex and bison, builds a library with the output, and builds an executable with the library and a source file:
lib sql_parser : sql_lexer.ll sql_parser.yy : <link>static ;
exe sql_parser_test : main.cpp sql_parser ;
This works okay for non-parallel build (no -j option), but fails parallel builds because dependencies on the generated header files don't seem to be scanned. For example, main.cpp starts being compiled before flex or bison are run to generate the sql_lexer.hpp and sql_parser.hpp files it includes.
sql_lexer.cpp includes sql_parser.hpp, sql_parser.cpp includes sql_lexer.hpp, and main.cpp includes both. Therefore both flex and bison need to run before any source files are compiled, but the dependencies to guarantee this aren't there. Manually adding DEPENDS or INCLUDES rules doesn't seem to help, but maybe there's a trick to correctly resolving the targets.
I noticed this in qt4.jam:
# Since this generator will return a H target, the linking generator
# won't use it at all, and won't set any dependency on it. However,
# we need the target to be seen by bjam, so that dependency from
# sources to this generated header is detected -- if jam does not
# know about this target, it won't do anything.
DEPENDS all : [ $(target).actualize ] ;
However, I'm not sure how to obtain the target object, since I don't have a custom generator.
I'm using Boost.Build V2 (Milestone 12), Boost.Jam 03.1.17.