| project('qt4 and 5 build test', 'cpp', |
| # Qt5 now requires C++ 11 support |
| default_options : ['cpp_std=c++11']) |
| |
| qt5_modules = ['Widgets'] |
| foreach qt : ['qt4', 'qt5'] |
| qt_modules = ['Core', 'Gui'] |
| if qt == 'qt5' |
| qt_modules += qt5_modules |
| endif |
| # Test that invalid modules are indeed not found |
| fakeqtdep = dependency(qt, modules : ['DefinitelyNotFound'], required : false, method : get_option('method')) |
| if fakeqtdep.found() |
| error('Invalid qt dep incorrectly found!') |
| endif |
| # Test that partially-invalid modules are indeed not found |
| fakeqtdep = dependency(qt, modules : ['Core', 'DefinitelyNotFound'], required : false, method : get_option('method')) |
| if fakeqtdep.found() |
| error('Invalid qt dep incorrectly found!') |
| endif |
| # If qt4 modules are found, test that. qt5 is required. |
| qtdep = dependency(qt, modules : qt_modules, required : qt == 'qt5', method : get_option('method')) |
| if qtdep.found() |
| qtmodule = import(qt) |
| |
| # The following has two resource files because having two in one target |
| # requires you to do it properly or you get linker symbol clashes. |
| |
| prep = qtmodule.preprocess( |
| moc_headers : ['mainWindow.h'], # These need to be fed through the moc tool before use. |
| ui_files : 'mainWindow.ui', # XML files that need to be compiled with the uic tol. |
| qresources : ['stuff.qrc', 'stuff2.qrc'], # Resource file for rcc compiler. |
| method : get_option('method') |
| ) |
| |
| # Test that setting a unique name with a positional argument works |
| qtmodule.preprocess(qt + 'teststuff', qresources : ['stuff.qrc'], method : get_option('method')) |
| |
| qexe = executable(qt + 'app', |
| sources : ['main.cpp', 'mainWindow.cpp', # Sources that don't need preprocessing. |
| prep], |
| dependencies : qtdep) |
| |
| # We need a console test application because some test environments |
| # do not have an X server. |
| |
| qtcore = dependency(qt, modules : 'Core', method : get_option('method')) |
| |
| qtcoreapp = executable(qt + 'core', 'q5core.cpp', |
| dependencies : qtcore) |
| |
| test(qt + 'test', qtcoreapp) |
| |
| # The build system needs to include the cpp files from |
| # headers but the user must manually include moc |
| # files from sources. |
| manpreprocessed = qtmodule.preprocess( |
| moc_sources : 'manualinclude.cpp', |
| moc_headers : 'manualinclude.h', |
| method : get_option('method')) |
| |
| qtmaninclude = executable(qt + 'maninclude', |
| sources : ['manualinclude.cpp', manpreprocessed], |
| dependencies : qtcore) |
| |
| test(qt + 'maninclude', qtmaninclude) |
| endif |
| endforeach |