| 1 |
|
|---|
| 2 | #global defaults
|
|---|
| 3 | qtPrepareTool(QMAKE_MOC, moc)
|
|---|
| 4 | isEmpty(MOC_DIR):MOC_DIR = .
|
|---|
| 5 | isEmpty(QMAKE_H_MOD_MOC):QMAKE_H_MOD_MOC = moc_
|
|---|
| 6 | isEmpty(QMAKE_EXT_CPP_MOC):QMAKE_EXT_CPP_MOC = .moc
|
|---|
| 7 |
|
|---|
| 8 | # On Windows, put the includes into a .inc file which moc will read, if the project
|
|---|
| 9 | # has too many includes. We do this to overcome a command-line limit on Win < XP
|
|---|
| 10 | INCLUDETEMP=
|
|---|
| 11 | WIN_INCLUDETEMP=
|
|---|
| 12 | win32:count($$list($$INCLUDEPATH), 40, >) {
|
|---|
| 13 | INCLUDETEMP = $$MOC_DIR/mocinclude.tmp
|
|---|
| 14 |
|
|---|
| 15 | WIN_INCLUDETEMP=$$INCLUDETEMP
|
|---|
| 16 |
|
|---|
| 17 | EOC = $$escape_expand(\\n\\t)
|
|---|
| 18 |
|
|---|
| 19 | if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) {
|
|---|
| 20 | # the VCPROJ generator will replace the \r\h with the coded \r\n: 

|
|---|
| 21 | # No other generator understands the \h
|
|---|
| 22 | if(win32-msvc2*|wince*msvc*): EOC = $$escape_expand(\\r\\h)
|
|---|
| 23 | else: EOC = $$escape_expand(\\\\\\n\\t)
|
|---|
| 24 | }
|
|---|
| 25 |
|
|---|
| 26 | unset(INCFILELIST)
|
|---|
| 27 | RET =
|
|---|
| 28 | for(incfile, $$list($$INCLUDEPATH)) {
|
|---|
| 29 | INCFILELIST = -I$$incfile
|
|---|
| 30 | isEmpty(RET): RET += @echo $$INCFILELIST> $$WIN_INCLUDETEMP $$EOC
|
|---|
| 31 | else: RET += @echo $$INCFILELIST>> $$WIN_INCLUDETEMP $$EOC
|
|---|
| 32 | }
|
|---|
| 33 | !isEmpty(INCFILELIST):RET += @echo $$INCFILELIST>> $$WIN_INCLUDETEMP $$EOC
|
|---|
| 34 |
|
|---|
| 35 | build_pass|isEmpty(BUILDS) {
|
|---|
| 36 | mocinclude.target = $$INCLUDETEMP
|
|---|
| 37 | mocinclude.commands = $$RET
|
|---|
| 38 | QMAKE_EXTRA_TARGETS += mocinclude
|
|---|
| 39 | }
|
|---|
| 40 | }
|
|---|
| 41 |
|
|---|
| 42 | defineReplace(mocCmdBase) {
|
|---|
| 43 | !isEmpty(WIN_INCLUDETEMP) {
|
|---|
| 44 | RET =
|
|---|
| 45 | if(contains(TEMPLATE, "vc.*")|contains(TEMPLATE_PREFIX, "vc")) {
|
|---|
| 46 | RET += $$mocinclude.commands
|
|---|
| 47 | }
|
|---|
| 48 | RET += $$QMAKE_MOC $(DEFINES) @$$WIN_INCLUDETEMP $$join(QMAKE_COMPILER_DEFINES, " -D", -D)
|
|---|
| 49 | return($$RET)
|
|---|
| 50 | }
|
|---|
| 51 | # On OS/2, command line length restrictions similar to Windows apply, but we use
|
|---|
| 52 | # response files defined in mkspecs/os2-*/qmake.conf (also used by the compiler
|
|---|
| 53 | # and other tools)
|
|---|
| 54 | os2 {
|
|---|
| 55 | isEmpty(QMAKE_INCPATH_RSP_VAR):I = $(INCPATH)
|
|---|
| 56 | else:I = @$($$QMAKE_INCPATH_RSP_VAR)
|
|---|
| 57 | isEmpty(QMAKE_DEFINES_RSP_VAR):D = $(INCPATH)
|
|---|
| 58 | else:D = @$($$QMAKE_DEFINES_RSP_VAR)
|
|---|
| 59 |
|
|---|
| 60 | return($$QMAKE_MOC $$D $$I $$join(QMAKE_COMPILER_DEFINES, " -D", -D))
|
|---|
| 61 | }
|
|---|
| 62 | return($$QMAKE_MOC $(DEFINES) $(INCPATH) $$join(QMAKE_COMPILER_DEFINES, " -D", -D))
|
|---|
| 63 | }
|
|---|
| 64 |
|
|---|
| 65 | #moc headers
|
|---|
| 66 | moc_header.CONFIG = moc_verify
|
|---|
| 67 | moc_header.dependency_type = TYPE_C
|
|---|
| 68 | moc_header.commands = ${QMAKE_FUNC_mocCmdBase} ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
|
|---|
| 69 | moc_header.output = $$MOC_DIR/$${QMAKE_H_MOD_MOC}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_CPP)}
|
|---|
| 70 | moc_header.input = HEADERS
|
|---|
| 71 | moc_header.variable_out = SOURCES
|
|---|
| 72 | moc_header.name = MOC ${QMAKE_FILE_IN}
|
|---|
| 73 | if(!contains(TEMPLATE, "vc.*"):!contains(TEMPLATE_PREFIX, "vc")) {
|
|---|
| 74 | !isEmpty(INCLUDETEMP):moc_header.depends += $$INCLUDETEMP
|
|---|
| 75 | }
|
|---|
| 76 | silent:moc_header.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_header.commands
|
|---|
| 77 | QMAKE_EXTRA_COMPILERS += moc_header
|
|---|
| 78 | INCREDIBUILD_XGE += moc_header
|
|---|
| 79 |
|
|---|
| 80 | #moc sources
|
|---|
| 81 | moc_source.CONFIG = no_link moc_verify
|
|---|
| 82 | moc_source.dependency_type = TYPE_C
|
|---|
| 83 | moc_source.commands = ${QMAKE_FUNC_mocCmdBase} ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
|
|---|
| 84 | moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC}
|
|---|
| 85 | moc_source.input = SOURCES OBJECTIVE_SOURCES
|
|---|
| 86 | moc_source.name = MOC ${QMAKE_FILE_IN}
|
|---|
| 87 | if(!contains(TEMPLATE, "vc.*"):!contains(TEMPLATE_PREFIX, "vc")) {
|
|---|
| 88 | !isEmpty(INCLUDETEMP):moc_source.depends += $$INCLUDETEMP
|
|---|
| 89 | }
|
|---|
| 90 | silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands
|
|---|
| 91 | QMAKE_EXTRA_COMPILERS += moc_source
|
|---|
| 92 | INCREDIBUILD_XGE += moc_source
|
|---|
| 93 |
|
|---|
| 94 | #make sure we can include these files
|
|---|
| 95 | moc_dir_short = $$MOC_DIR
|
|---|
| 96 | contains(QMAKE_HOST.os,Windows)|os2:moc_dir_short ~= s,^.:,/,
|
|---|
| 97 | contains(moc_dir_short, ^[/\\\\].*):INCLUDEPATH += $$MOC_DIR
|
|---|
| 98 | else:INCLUDEPATH += $$OUT_PWD/$$MOC_DIR
|
|---|
| 99 |
|
|---|
| 100 | # Backwards compatibility: Make shadow builds with default MOC_DIR work
|
|---|
| 101 | # if the user did not add the source dir explicitly.
|
|---|
| 102 | equals(MOC_DIR, .) {
|
|---|
| 103 | CONFIG -= include_source_dir
|
|---|
| 104 | CONFIG = include_source_dir $$CONFIG
|
|---|
| 105 | }
|
|---|
| 106 |
|
|---|
| 107 | #auto depend on moc
|
|---|
| 108 | unix:!symbian:!no_mocdepend {
|
|---|
| 109 | moc_source.depends += $$first(QMAKE_MOC)
|
|---|
| 110 | moc_header.depends += $$first(QMAKE_MOC)
|
|---|
| 111 | !contains(TARGET, moc) { #auto build moc
|
|---|
| 112 | isEmpty(QMAKE_MOC_SRC):QMAKE_MOC_SRC = "$(QTDIR)/src/tools/moc"
|
|---|
| 113 | make_moc.target = $$first(QMAKE_MOC)
|
|---|
| 114 | make_moc.commands = (cd $$QMAKE_MOC_SRC && $(MAKE))
|
|---|
| 115 | QMAKE_EXTRA_TARGETS += make_moc
|
|---|
| 116 | }
|
|---|
| 117 | }
|
|---|
| 118 |
|
|---|
| 119 | #generate a mocclean
|
|---|
| 120 | build_pass|isEmpty(BUILDS):mocclean.depends = compiler_moc_header_clean compiler_moc_source_clean
|
|---|
| 121 | else:mocclean.CONFIG += recursive
|
|---|
| 122 | QMAKE_EXTRA_TARGETS += mocclean
|
|---|
| 123 |
|
|---|
| 124 | #generate a mocables
|
|---|
| 125 | build_pass|isEmpty(BUILDS):mocables.depends = compiler_moc_header_make_all compiler_moc_source_make_all
|
|---|
| 126 | else:mocables.CONFIG += recursive
|
|---|
| 127 | QMAKE_EXTRA_TARGETS += mocables
|
|---|