c34d289c44
Scan lex and yacc sources for dependencies as if they were C source code, which is close enough to reality. This will unfortunately result in the generated source files depending on the generated headers, while it should have been the object files created from these sources which have that dependency. But qmake cannot do better, and this is good enough. Task-number: QTBUG-56507 Change-Id: Ic3e1941bf2e2820bfddf99deba854e1e82f83669 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
44 lines
2.2 KiB
Plaintext
44 lines
2.2 KiB
Plaintext
#
|
|
# Yacc extra-compiler for handling files specified in the YACCSOURCES variable
|
|
#
|
|
|
|
{
|
|
yacc_decl.name = Yacc header
|
|
yacc_decl.input = YACCSOURCES
|
|
yacc_decl.variable_out = GENERATED_FILES
|
|
|
|
|
|
isEmpty(QMAKE_YACCFLAGS_MANGLE) {
|
|
QMAKE_YACCFLAGS_MANGLE = -p ${QMAKE_FILE_BASE} -b ${QMAKE_FILE_BASE}
|
|
QMAKE_YACC_HEADER = ${QMAKE_FILE_BASE}.tab.h
|
|
QMAKE_YACC_SOURCE = ${QMAKE_FILE_BASE}.tab.c
|
|
} else {
|
|
QMAKE_YACCFLAGS_MANGLE ~= s/\\$base/${QMAKE_FILE_BASE}/g #backwards compat
|
|
QMAKE_YACC_HEADER ~= s/\\$base/${QMAKE_FILE_BASE}/g
|
|
QMAKE_YACC_SOURCE ~= s/\\$base/${QMAKE_FILE_BASE}/g
|
|
}
|
|
QMAKE_YACCDECLFLAGS = $$QMAKE_YACCFLAGS
|
|
!yacc_no_name_mangle:QMAKE_YACCDECLFLAGS += $$QMAKE_YACCFLAGS_MANGLE
|
|
|
|
yacc_decl.commands = \
|
|
-$(DEL_FILE) $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_H)} $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_CPP)}$$escape_expand(\\n\\t) \
|
|
$$QMAKE_YACC $$QMAKE_YACCDECLFLAGS ${QMAKE_FILE_IN}$$escape_expand(\\n\\t) \
|
|
$(MOVE) $${QMAKE_YACC_HEADER} $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_H)}$$escape_expand(\\n\\t) \
|
|
$(MOVE) $${QMAKE_YACC_SOURCE} $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_CPP)}$$escape_expand(\\n\\t)
|
|
yacc_decl.output = $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_H)}
|
|
|
|
silent:yacc_decl.commands = @echo Yacc ${QMAKE_FILE_IN} && $$yacc_decl.commands
|
|
QMAKE_EXTRA_COMPILERS += yacc_decl
|
|
}
|
|
|
|
{
|
|
yacc_impl.name = source for ${QMAKE_FILE_IN}
|
|
yacc_impl.input = YACCSOURCES
|
|
yacc_impl.variable_out = GENERATED_SOURCES
|
|
yacc_impl.dependency_type = TYPE_C
|
|
yacc_impl.commands = $$escape_expand(\\n) # We don't want any commands where, but if command is empty no rules are created
|
|
yacc_impl.depends = $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_H)} # Make sure we depend on the step above
|
|
yacc_impl.output = $${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_MOD_YACC}$${first(QMAKE_EXT_CPP)} # Faked output from this step, output really created in step above
|
|
QMAKE_EXTRA_COMPILERS += yacc_impl
|
|
}
|