if(NOT QT_DEFINES_FOUND) #Threshold for tests set(QT_NO_DEBUG 16) set(QT_NO_ACCESSIBILITY 0) set(QT_NO_ACTION 5) set(QT_NO_BUTTONGROUP 12) set(QT_NO_CHECKBOX 10) set(QT_NO_COLORDIALOG 12) set(QT_NO_COMBOBOX 10) set(QT_NO_CURSOR 5) set(QT_NO_DATASTREAM 5) set(QT_NO_DATETIMEEDIT 12) set(QT_NO_DIAL 10) set(QT_NO_DIALOG 12) set(QT_NO_DIR 5) set(QT_NO_DOM 5) set(QT_NO_DRAGANDDROP 5) set(QT_NO_DRAWUTIL 0) set(QT_NO_ERRORMESSAGE 13) set(QT_NO_FILEDIALOG 13) set(QT_NO_FONTDATABASE 5) set(QT_NO_FONTDIALOG 12) set(QT_NO_FRAME 10) set(QT_NO_FTP 9) set(QT_NO_GROUPBOX 12) set(QT_NO_LABEL 10) set(QT_NO_LAYOUT 10) set(QT_NO_LCDNUMBER 12) set(QT_NO_LINEEDIT 12) set(QT_NO_LISTVIEW 13) set(QT_NO_MAINWINDOW 13) set(QT_NO_MATRIX 0) set(QT_NO_MENUBAR 13) set(QT_NO_MESSAGEBOX 13) set(QT_NO_MOVIE 5) set(QT_NO_NETWORK 5) set(QT_NO_PALETTE 5) set(QT_NO_PICTURE 5) set(QT_NO_PRINTER 5) set(QT_NO_PRINTDIALOG 13) set(QT_NO_PROCESS 5) set(QT_NO_PROGRESSBAR 12) set(QT_NO_PROGRESSDIALOG 13) set(QT_NO_PROPERTIES 0) set(QT_NO_PUSHBUTTON 12) set(QT_NO_QUUID_STRING 8) set(QT_NO_RADIOBUTTON 12) set(QT_NO_SCROLLBAR 12) set(QT_NO_SETTINGS 5) set(QT_NO_SIGNALMAPPER 0) set(QT_NO_SIZEGRIP 10) set(QT_NO_SLIDER 12) set(QT_NO_SOUND 5) set(QT_NO_STRINGLIST 0) set(QT_NO_STYLE_PLASTIQUE 16) set(QT_NO_STYLE_S60 16) set(QT_NO_STYLE_WINDOWSXP 16) set(QT_NO_STYLE_WINDOWS 16) set(QT_NO_STYLE_MAC 16) set(QT_NO_STYLE_CLEANLOOKS 16) set(QT_NO_TABBAR 10) set(QT_NO_TABLEVIEW 16) set(QT_NO_TABWIDGET 10) set(QT_NO_TEXTBROWSER 14) set(QT_NO_TEXTCODEC 1) set(QT_NO_TEXTCODECPLUGIN 6) set(QT_NO_TEXTEDIT 13) set(QT_NO_TEXTSTREAM 5) set(QT_NO_THREAD 5) set(QT_NO_TOOLBAR 10) set(QT_NO_TOOLBUTTON 12) set(QT_NO_TOOLTIP 10) set(QT_NO_VARIANT 0) set(QT_NO_WHATSTHIS 10) set(QT_NO_WHEELEVENT 1) set(QT_NO_XML 5) #all tests set(define_tests QT_NO_DEBUG QT_NO_ACCESSIBILITY QT_NO_ACTION QT_NO_BUTTONGROUP QT_NO_CHECKBOX QT_NO_COLORDIALOG QT_NO_COMBOBOX QT_NO_CURSOR QT_NO_DATASTREAM QT_NO_DATETIMEEDIT QT_NO_DIAL QT_NO_DIALOG QT_NO_DIR QT_NO_DOM QT_NO_DRAGANDDROP QT_NO_DRAWUTIL QT_NO_ERRORMESSAGE QT_NO_FILEDIALOG QT_NO_FONTDATABASE QT_NO_FONTDIALOG QT_NO_FRAME QT_NO_FTP QT_NO_GROUPBOX QT_NO_LABEL QT_NO_LAYOUT QT_NO_LCDNUMBER QT_NO_LINEEDIT QT_NO_LISTVIEW QT_NO_MAINWINDOW QT_NO_MATRIX QT_NO_MENUBAR QT_NO_MESSAGEBOX QT_NO_MOVIE QT_NO_NETWORK QT_NO_PALETTE QT_NO_PICTURE QT_NO_PRINTER QT_NO_PRINTDIALOG QT_NO_PROCESS QT_NO_PROGRESSBAR QT_NO_PROGRESSDIALOG QT_NO_PROPERTIES QT_NO_PUSHBUTTON QT_NO_QUUID_STRING QT_NO_RADIOBUTTON QT_NO_SCROLLBAR QT_NO_SETTINGS QT_NO_SIGNALMAPPER QT_NO_SIZEGRIP QT_NO_SLIDER QT_NO_SOUND QT_NO_STRINGLIST QT_NO_STYLE_PLASTIQUE QT_NO_STYLE_S60 QT_NO_STYLE_WINDOWSXP QT_NO_STYLE_WINDOWS QT_NO_STYLE_MAC QT_NO_STYLE_CLEANLOOKS QT_NO_TABBAR QT_NO_TABLEVIEW QT_NO_TABWIDGET QT_NO_TEXTBROWSER QT_NO_TEXTCODEC QT_NO_TEXTCODECPLUGIN QT_NO_TEXTEDIT QT_NO_TEXTSTREAM QT_NO_THREAD QT_NO_TOOLBAR QT_NO_TOOLBUTTON QT_NO_TOOLTIP QT_NO_VARIANT QT_NO_WHATSTHIS QT_NO_WHEELEVENT QT_NO_XML) # macro is defined in qt-copy/src/qbase.pri but couldn't be found by qtguess, so I append it manually list(APPEND qtdefines "QT_NO_CAST_TO_ASCII") list(APPEND qtdefines "QT_GUI_LIB") # check for MSVC compiler if (MSVC) list(APPEND qtdefines "Q_CC_MSVC") endif (MSVC) foreach(test_entry ${define_tests}) if(${${test_entry}} GREATER ${qt_test_threshold}) list(APPEND test_targets ${test_entry}) endif(${${test_entry}} GREATER ${qt_test_threshold}) endforeach(test_entry ${define_tests}) if(WIN32) file(STRINGS "${QT_QTCORE_INCLUDE_DIR}/../../src/corelib/global/qglobal.h" qglobal_h NEWLINE_CONSUME) file(STRINGS "${QT_QTCORE_INCLUDE_DIR}/../../src/corelib/global/qconfig.h" qconfig_h NEWLINE_CONSUME) file(STRINGS "${QT_QTCORE_INCLUDE_DIR}/../../src/corelib/global/qfeatures.h" qfeatures_h NEWLINE_CONSUME) else(WIN32) file(STRINGS "${QT_QTCORE_INCLUDE_DIR}/qglobal.h" qglobal_h NEWLINE_CONSUME) file(STRINGS "${QT_QTCORE_INCLUDE_DIR}/qconfig.h" qconfig_h NEWLINE_CONSUME) file(STRINGS "${QT_QTCORE_INCLUDE_DIR}/qfeatures.h" qfeatures_h NEWLINE_CONSUME) endif(WIN32) set(qtheaders "${qglobal_h}\n${qconfig_h}\n${qfeatures_h}") string(REGEX REPLACE "\n" ";" qtheaders "${qtheaders}") file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/qtdefines.cpp ${CMAKE_CURRENT_BINARY_DIR}/qtdefines) file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/qtdefines.cpp "#include \n#include \"qglobal.h\"\nint main(int argc, char** argv)\n{\n") foreach( line ${qtheaders} ) if(line MATCHES "^#[ ]*define[ ]+(QT_[A-Z_0-9]+)[ ]*$") #ifdef DEF; printf "DEF"; #endif file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/qtdefines.cpp "#ifdef ${CMAKE_MATCH_1}\n#ifdef QTDEF_MULTI\nprintf(\";\");\n#endif\n#ifndef QTDEF_MULTI\n#define QTDEF_MULTI\n#endif\nprintf(\"${CMAKE_MATCH_1}\");\n#endif\n") endif(line MATCHES "^#[ ]*define[ ]+(QT_[A-Z_0-9]+)[ ]*$") endforeach(line) file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/qtdefines.cpp "return 0;\n}\n") try_run(qtdefines_run qtdefines_compile ${CMAKE_CURRENT_BINARY_DIR}/qtdefines ${CMAKE_CURRENT_BINARY_DIR}/qtdefines.cpp CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${QT_INCLUDE_DIR};${QT_QTCORE_INCLUDE_DIR};${CMAKE_SYSTEM_INCLUDE_PATH}" RUN_OUTPUT_VARIABLE qtdefines_output) if(${qtdefines_run} EQUAL 0) list(REMOVE_DUPLICATES qtdefines_output) list(REMOVE_ITEM qtdefines_output "QT_DEBUG") # message(STATUS "Got defines from Qt headers ${qtdefines_output}") list(APPEND qtdefines ${qtdefines_output}) list(REMOVE_ITEM test_targets ${qtdefines_output}) endif(${qtdefines_run} EQUAL 0) message(STATUS "Checking how Qt was built...") message(STATUS "Threshold is set to ${qt_test_threshold}") include (HandleImportedTargetsInCMakeRequiredLibraries) set(CMAKE_REQUIRED_INCLUDES ${CMAKE_SYSTEM_INCLUDE_PATH} ${QT_INCLUDE_DIR}) set(CMAKE_REQUIRED_LIBRARIES ${QT_QTCORE_LIBRARY} ${QT_QTDBUS_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTOPENGL_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTSVG_LIBRARY}) HANDLE_IMPORTED_TARGETS_IN_CMAKE_REQUIRED_LIBRARIES(_CMAKE_REQUIRED_LIBRARIES) foreach(test_target ${test_targets}) file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/test-${test_target}) if(QT_QTDBUS_FOUND) try_compile(test_result "${CMAKE_CURRENT_BINARY_DIR}/test-${test_target}" ${CMAKE_CURRENT_SOURCE_DIR}/tests/test.cpp COMPILE_DEFINITIONS -DTEST_${test_target} CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_SYSTEM_INCLUDE_PATH};${QT_INCLUDE_DIR}" "-DLINK_LIBRARIES:STRING=${QT_QTCORE_LIBRARY};${QT_QTDBUS_LIBRARY};${QT_QTGUI_LIBRARY};${QT_QTNETWORK_LIBRARY};${QT_QTOPENGL_LIBRARY};${QT_QTXML_LIBRARY};${QT_QTSVG_LIBRARY}") else(QT_QTDBUS_FOUND) try_compile(test_result "${CMAKE_CURRENT_BINARY_DIR}/test-${test_target}" ${CMAKE_CURRENT_SOURCE_DIR}/tests/test.cpp COMPILE_DEFINITIONS -DTEST_${test_target} CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${CMAKE_SYSTEM_INCLUDE_PATH};${QT_INCLUDE_DIR}" "-DLINK_LIBRARIES:STRING=${QT_QTCORE_LIBRARY};${QT_QTGUI_LIBRARY};${QT_QTNETWORK_LIBRARY};${QT_QTOPENGL_LIBRARY};${QT_QTXML_LIBRARY};${QT_QTSVG_LIBRARY}") endif(QT_QTDBUS_FOUND) if(test_result) message(STATUS "${test_target} *Undefined*") else(test_result) message(STATUS "${test_target} [Defined]") list(APPEND qtdefines ${test_target}) endif(test_result) endforeach(test_target ${test_targets}) # string(REGEX REPLACE ";" "\n" qtdefines ${qtdefines}) # file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/../qtdefines-ng ${qtdefines}) file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/../qtdefines) foreach(definition ${qtdefines}) file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/../qtdefines "${definition}\n") endforeach(definition ${qtdefines}) set(QT_DEFINES_FOUND true CACHE BOOL "Test results that describe how Qt was built") endif(NOT QT_DEFINES_FOUND)