contains(TEMPLATE, ".*(lib|app)"):CONFIG += have_target !have_target:!force_qt: CONFIG -= qt QT_BREAKPAD_ROOT_PATH = $$(QT_BREAKPAD_ROOT_PATH) !isEmpty(QT_BREAKPAD_ROOT_PATH): \ # quick test first whether requested ... !staticlib:!static:CONFIG(release, debug|release):have_target: \ # is it applicable? !contains(TARGET, .*phony_target.*): \ # monster hack, you don't really see this here, right? ;) system($$QT_BREAKPAD_ROOT_PATH/qtbreakpadsymbols --breakpad-exists) { # do we really have it? CONFIG += breakpad CONFIG -= no_debug_info separate_debug_info QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO } CONFIG(debug, debug|release):load(debug) else:load(release) debug_and_release:load(debug_and_release) incredibuild_xge { CONFIG -= incredibuild_xge CONFIG = incredibuild_xge $$CONFIG } breakpad { load(resolve_target) win32 { DEBUGFILENAME = $${QMAKE_RESOLVED_TARGET} PDBFILENAME = $$replace(QMAKE_RESOLVED_TARGET, ...$, pdb) DEBUGFILENAME ~= s,/,\\, PDBFILENAME ~= s,/,\\, QMAKE_CLEAN += $$PDBFILENAME # for the debug case it is hardcoded in qmake } else { DEBUGFILENAME = $$QMAKE_RESOLVED_TARGET } PROJECTPATH = $$OUT_PWD win32:PROJECTPATH ~= s,/,\\, !isEmpty(QMAKE_POST_LINK):QMAKE_POST_LINK = $$QMAKE_POST_LINK$$escape_expand(\\n\\t) QMAKE_POST_LINK = $$QMAKE_POST_LINK$$quote($${QT_BREAKPAD_ROOT_PATH}$${QMAKE_DIR_SEP}qtbreakpadsymbols \"$$DEBUGFILENAME\" \"$$PROJECTPATH\") !isEmpty(QMAKE_STRIP):QMAKE_POST_LINK = $$QMAKE_POST_LINK$$escape_expand(\\n\\t)$$quote($$QMAKE_STRIP \"$$DEBUGFILENAME\") } QMAKE_INCDIR += $$QMAKE_INCDIR_POST QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST # Let every project have a standard GNU `check' target !contains(QMAKE_EXTRA_TARGETS, check) { # `make check' should iterate through all subdirs # (except those with no_default_target or no_check_target) contains(TEMPLATE, subdirs) { for(subdir, SUBDIRS) { subdir_config=$$eval($${subdir}.CONFIG) !contains(subdir_config, no_check_target):!contains(subdir_config, no_default_target):check.recurse += $$subdir unset(subdir_config) } !isEmpty(check.recurse) { # setup the recurse target only when there is to recurse into check.CONFIG = recursive check.recurse_target = check } } # `make check' should imply building the project else { check.depends = first } QMAKE_EXTRA_TARGETS += check } # Let every project have a 'docs' target !contains(QMAKE_EXTRA_TARGETS, docs) { contains(TEMPLATE, subdirs) { # `make docs' should iterate through all subdirs # (except those with no_default_target or no_docs_target) !contains(CONFIG, no_docs_target):for(subdir, SUBDIRS) { subdir_config = $$eval($${subdir}.CONFIG) !contains(subdir_config, no_docs_target):!contains(subdir_config, no_default_target):docs.recurse += $$subdir unset(subdir_config) } !isEmpty(docs.recurse) { # setup the recurse target only when there is something to recurse into docs.CONFIG = recursive docs.recurse_target = docs } } else { # apps and libs only generate docs if QMAKE_DOCS is set !isEmpty(QMAKE_DOCS) { !exists($$QMAKE_DOCS):error("Cannot find documentation specification file $$QMAKE_DOCS") qtPrepareTool(QDOC, qdoc) for(index, QMAKE_DOCS_INDEX):QDOC_INDEX += -indexdir $$index !isEmpty(QMAKE_DOCS_INSTALLDIR):QMAKE_DOCS_OPTIONS += -installdir $$QMAKE_DOCS_INSTALLDIR docs.commands += $$QDOC $$QMAKE_DOCS_OPTIONS $$QDOC_INDEX $$QMAKE_DOCS } } QMAKE_EXTRA_TARGETS += docs }