[2] | 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 |
---|