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