CMakeLists.txt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. cmake_minimum_required(VERSION 2.8)
  2. project(Qt4Targets)
  3. cmake_policy(SET CMP0020 NEW)
  4. find_package(Qt4 REQUIRED)
  5. set(CMAKE_AUTOMOC ON)
  6. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  7. add_executable(Qt4Targets WIN32 main.cpp)
  8. target_link_libraries(Qt4Targets Qt4::QtGui)
  9. if (WIN32)
  10. if (TARGET Qt4::QAxServer)
  11. add_executable(activeqtexe WIN32 activeqtexe.cpp)
  12. set_property(TARGET activeqtexe PROPERTY QT4_NO_LINK_QTMAIN ON)
  13. target_link_libraries(activeqtexe Qt4::QAxServer Qt4::QtGui)
  14. endif()
  15. endif()
  16. # Qt4 moc does not support utf8 paths in _parameter files generated by
  17. # qt4_wrap_cpp and qt4_generate_moc
  18. # https://bugreports.qt.io/browse/QTBUG-35480
  19. # Do a simple check if there is are non ASCII character in the build path
  20. string(REGEX MATCH "[^ -~]+" NON_ASCII_BDIR ${CMAKE_CURRENT_BINARY_DIR})
  21. if(NON_ASCII_BDIR)
  22. message(WARNING "Build path contains non ASCII characters. Skipping Qt4 test.")
  23. return()
  24. endif()
  25. qt4_generate_moc(main_gen_test.cpp
  26. "${CMAKE_CURRENT_BINARY_DIR}/main_gen_test.moc"
  27. TARGET Qt4GenerateMacroTest
  28. )
  29. add_executable(Qt4GenerateMacroTest WIN32 main_gen_test.cpp "${CMAKE_CURRENT_BINARY_DIR}/main_gen_test.moc")
  30. set_property(TARGET Qt4GenerateMacroTest PROPERTY AUTOMOC OFF)
  31. target_include_directories(Qt4GenerateMacroTest PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/interface")
  32. target_link_libraries(Qt4GenerateMacroTest Qt4::QtGui)
  33. qt4_wrap_cpp(moc_file mywrapobject.h
  34. TARGET Qt4WrapMacroTest
  35. )
  36. add_executable(Qt4WrapMacroTest WIN32 main_wrap_test.cpp ${moc_file})
  37. set_property(TARGET Qt4WrapMacroTest PROPERTY AUTOMOC OFF)
  38. target_include_directories(Qt4WrapMacroTest PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/interface")
  39. target_link_libraries(Qt4WrapMacroTest Qt4::QtGui)
  40. macro(test_incremental def)
  41. set(timeformat "%Y%j%H%M%S")
  42. try_compile(RESULT
  43. "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild_${def}"
  44. "${CMAKE_CURRENT_SOURCE_DIR}/IncrementalMoc"
  45. IncrementalMoc
  46. CMAKE_FLAGS -D${def}=0 "-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
  47. OUTPUT_VARIABLE output
  48. )
  49. file(TIMESTAMP "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild_${def}/moc_foo.cpp" tsvar_before "${timeformat}")
  50. if (NOT tsvar_before)
  51. message(SEND_ERROR
  52. "Unable to read timestamp from moc file from first build with -D${def}!\n"
  53. "try_compile output:\n${output}"
  54. )
  55. endif()
  56. execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep 2) # Ensure that the timestamp will change.
  57. try_compile(RESULT
  58. "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild_${def}"
  59. "${CMAKE_CURRENT_SOURCE_DIR}/IncrementalMoc"
  60. IncrementalMoc
  61. CMAKE_FLAGS -D${def}=1 "-DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}"
  62. OUTPUT_VARIABLE output
  63. )
  64. file(TIMESTAMP "${CMAKE_CURRENT_BINARY_DIR}/IncrementalMocBuild_${def}/moc_foo.cpp" tsvar_after "${timeformat}")
  65. if (NOT tsvar_after)
  66. message(SEND_ERROR
  67. "Unable to read timestamp from moc file from second build!\n"
  68. "try_compile output:\n${output}"
  69. )
  70. endif()
  71. if (NOT tsvar_after GREATER tsvar_before)
  72. message(SEND_ERROR "Rebuild did not re-create moc file with -D${def}. Before: ${tsvar_before}. After: ${tsvar_after}")
  73. endif()
  74. endmacro()
  75. test_incremental(ADD_TARGET_DEF)
  76. test_incremental(ADD_DIR_DEF)