blob: 1ebc6246dbee0500881ff318976834234846b359 [file] [log] [blame]
QT = core gui qml testlib scxml
CONFIG += testcase c++11 console
CONFIG -= app_bundle
TARGET = tst_scion
TEMPLATE = app
RESOURCES = $$OUT_PWD/scion.qrc
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
SOURCES += \
tst_scion.cpp
defineReplace(nameTheNamespace) {
sn=$$relative_path($$absolute_path($$dirname(1), $$OUT_PWD),$$SCXMLS_DIR)
sn~=s/\\.txml$//
sn~=s/[^a-zA-Z_0-9]/_/
return ($$sn)
}
defineReplace(nameTheClass) {
cn = $$basename(1)
cn ~= s/\\.scxml$//
cn ~=s/\\.txml$//
cn ~= s/[^a-zA-Z_0-9]/_/
return ($$cn)
}
qtPrepareTool(QMAKE_QSCXMLC, qscxmlc)
win32 {
msvc: QMAKE_CXXFLAGS += /bigobj
}
myscxml.commands = $$QMAKE_QSCXMLC --header scxml/${QMAKE_FUNC_nameTheNamespace}_${QMAKE_FILE_IN_BASE}.h --impl ${QMAKE_FILE_OUT} --namespace ${QMAKE_FUNC_nameTheNamespace} --classname ${QMAKE_FUNC_nameTheClass} ${QMAKE_FILE_IN}
myscxml.depends += $$QMAKE_QSCXMLC_EXE
myscxml.output = scxml/${QMAKE_FUNC_nameTheNamespace}_${QMAKE_FILE_IN_BASE}.cpp
myscxml.input = SCXMLS
myscxml.variable_out = SOURCES
QMAKE_EXTRA_COMPILERS += myscxml
myscxml_hdr.input = SCXMLS
myscxml_hdr.variable_out = SCXML_HEADERS
myscxml_hdr.commands = $$escape_expand(\\n)
myscxml_hdr.depends = scxml/${QMAKE_FUNC_nameTheNamespace}_${QMAKE_FILE_IN_BASE}.cpp
myscxml_hdr.output = scxml/${QMAKE_FUNC_nameTheNamespace}_${QMAKE_FILE_IN_BASE}.h
QMAKE_EXTRA_COMPILERS += myscxml_hdr
SCXMLS_DIR += $$absolute_path($$PWD/../../3rdparty/scion-tests/scxml-test-framework/test)
ALLSCXMLS = $$files($$SCXMLS_DIR/*.scxml, true)
# For a better explanation about the "blacklisted" tests, see tst_scion.cpp
# <invoke>
BLACKLISTED = \
test216sub1.scxml \
test226sub1.txml \
test239sub1.scxml \
test242sub1.scxml \
test276sub1.scxml \
test530.txml.scxml
# other
BLACKLISTED += \
test301.txml.scxml \
test441a.txml.scxml \
test441b.txml.scxml \
test557.txml.scxml
for (f,ALLSCXMLS) {
cn = $$basename(f)
if (!contains(BLACKLISTED, $$cn)) {
SCXMLS += $$f
cn ~= s/\\.scxml$//
hn = $$cn
cn ~=s/\\.txml$//
sn = $$relative_path($$dirname(f), $$SCXMLS_DIR)
sn ~=s/[^a-zA-Z_0-9]/_/
inc_list += "$${LITERAL_HASH}include \"scxml/$${sn}_$${hn}.h\""
func_list += " []()->QScxmlStateMachine*{return new $${sn}::$${cn};},"
base = $$relative_path($$f,$$absolute_path($$SCXMLS_DIR))
tn = $$base
tn ~= s/\\.scxml$//
testBases += " \"$$tn\","
}
}
ALLFILES = $$files($$SCXMLS_DIR/*.*, true)
for (f,ALLFILES) {
base = $$relative_path($$f,$$absolute_path($$SCXMLS_DIR))
file = $$relative_path($$f, $$absolute_path($$OUT_PWD))
qrc += '<file alias="$$base">$$file</file>'
}
contents = $$inc_list "std::function<QScxmlStateMachine *()> creators[] = {" $$func_list "};"
write_file("$$OUT_PWD/scxml/compiled_tests.h", contents)|error("Aborting.")
contents = "const char *testBases[] = {" $$testBases "};"
write_file("$$OUT_PWD/scxml/scion.h", contents)|error("Aborting.")
contents = '<!DOCTYPE RCC><RCC version=\"1.0\">' '<qresource>' $$qrc '</qresource></RCC>'
write_file("$$OUT_PWD/scion.qrc", contents)|error("Aborting.")