1 | |
---|
2 | #global defaults |
---|
3 | isEmpty(QMAKE_MOC) { |
---|
4 | win32:QMAKE_MOC = $$[QT_INSTALL_BINS]\moc.exe |
---|
5 | else:QMAKE_MOC = $$[QT_INSTALL_BINS]/moc |
---|
6 | } |
---|
7 | isEmpty(MOC_DIR):MOC_DIR = . |
---|
8 | isEmpty(QMAKE_H_MOD_MOC):QMAKE_H_MOD_MOC = moc_ |
---|
9 | isEmpty(QMAKE_EXT_CPP_MOC):QMAKE_EXT_CPP_MOC = .moc |
---|
10 | |
---|
11 | # This function on Windows puts the includes into a .inc file which moc will read, if the project |
---|
12 | # has more than 30 includes. We do this to overcome a command-line limit on Win < XP |
---|
13 | # Otherwise the function simply returns the normal command-line for moc |
---|
14 | defineReplace(mocCmd) { |
---|
15 | win32:count($$list($$INCPATH), 40, >) { |
---|
16 | EOC = $$escape_expand(\n\t) |
---|
17 | |
---|
18 | if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) { |
---|
19 | # the VCPROJ generator will replace the \r\h with the coded \r\n: 
 |
---|
20 | # No other generator understands the \h |
---|
21 | if(win32-msvc.net|win32-msvc2*|wince*msvc*): EOC = $$escape_expand(\r\h) |
---|
22 | else: EOC = $$escape_expand(\\)$$escape_expand(\n\t) |
---|
23 | } |
---|
24 | |
---|
25 | INCLUDETEMP = mocinclude.tmp |
---|
26 | unset(INCFILELIST) |
---|
27 | RET = |
---|
28 | for(incfile, $$list($$INCPATH)) { |
---|
29 | INCFILELIST = -I$$incfile |
---|
30 | isEmpty(RET): RET += @echo $$INCFILELIST> $$INCLUDETEMP $$EOC |
---|
31 | else: RET += @echo $$INCFILELIST>> $$INCLUDETEMP $$EOC |
---|
32 | } |
---|
33 | !isEmpty(INCFILELIST):RET += @echo $$INCFILELIST>> $$INCLUDETEMP $$EOC |
---|
34 | RET += $$QMAKE_MOC $(DEFINES) @$$INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$1 -o $$2 |
---|
35 | return($$RET) |
---|
36 | } |
---|
37 | return($$QMAKE_MOC $(DEFINES) $(INCPATH) $$join(QMAKE_COMPILER_DEFINES, " -D", -D) $$1 -o $$2) |
---|
38 | } |
---|
39 | |
---|
40 | #moc headers |
---|
41 | moc_header.CONFIG = moc_verify |
---|
42 | moc_header.dependency_type = TYPE_C |
---|
43 | moc_header.commands = ${QMAKE_FUNC_mocCmd} |
---|
44 | moc_header.output = $$MOC_DIR/$${QMAKE_H_MOD_MOC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)} |
---|
45 | moc_header.input = HEADERS |
---|
46 | moc_header.variable_out = SOURCES |
---|
47 | moc_header.name = MOC ${QMAKE_FILE_IN} |
---|
48 | silent:moc_header.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_header.commands |
---|
49 | QMAKE_EXTRA_COMPILERS += moc_header |
---|
50 | INCREDIBUILD_XGE += moc_header |
---|
51 | |
---|
52 | #moc sources |
---|
53 | moc_source.CONFIG = no_link moc_verify |
---|
54 | moc_source.dependency_type = TYPE_C |
---|
55 | moc_source.commands = ${QMAKE_FUNC_mocCmd} |
---|
56 | moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC} |
---|
57 | moc_source.input = SOURCES OBJECTIVE_SOURCES |
---|
58 | moc_source.name = MOC ${QMAKE_FILE_IN} |
---|
59 | silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands |
---|
60 | QMAKE_EXTRA_COMPILERS += moc_source |
---|
61 | INCREDIBUILD_XGE += moc_source |
---|
62 | |
---|
63 | #make sure we can include these files |
---|
64 | moc_dir_short = $$MOC_DIR |
---|
65 | win32:moc_dir_short ~= s,^.:,/, |
---|
66 | contains(moc_dir_short, ^[/\\\\].*):INCLUDEPATH += $$MOC_DIR |
---|
67 | else:INCLUDEPATH += $$OUT_PWD/$$MOC_DIR |
---|
68 | |
---|
69 | # Backwards compatibility: Make shadow builds with default MOC_DIR work |
---|
70 | # if the user did not add the source dir explicitly. |
---|
71 | equals(MOC_DIR, .) { |
---|
72 | CONFIG -= include_source_dir |
---|
73 | CONFIG = include_source_dir $$CONFIG |
---|
74 | } |
---|
75 | |
---|
76 | #auto depend on moc |
---|
77 | unix:!no_mocdepend { |
---|
78 | moc_source.depends += $$first(QMAKE_MOC) |
---|
79 | moc_header.depends += $$first(QMAKE_MOC) |
---|
80 | !contains(TARGET, moc) { #auto build moc |
---|
81 | isEmpty(QMAKE_MOC_SRC):QMAKE_MOC_SRC = "$(QTDIR)/src/tools/moc" |
---|
82 | make_moc.target = $$first(QMAKE_MOC) |
---|
83 | make_moc.commands = (cd $$QMAKE_MOC_SRC && $(MAKE)) |
---|
84 | QMAKE_EXTRA_TARGETS += make_moc |
---|
85 | } |
---|
86 | } |
---|
87 | |
---|
88 | #generate a mocclean |
---|
89 | build_pass|isEmpty(BUILDS):mocclean.depends = compiler_moc_header_clean compiler_moc_source_clean |
---|
90 | else:mocclean.CONFIG += recursive |
---|
91 | QMAKE_EXTRA_TARGETS += mocclean |
---|
92 | |
---|
93 | #generate a mocables |
---|
94 | build_pass|isEmpty(BUILDS):mocables.depends = compiler_moc_header_make_all compiler_moc_source_make_all |
---|
95 | else:mocables.CONFIG += recursive |
---|
96 | QMAKE_EXTRA_TARGETS += mocables |
---|