# With DEF files enabled, removed exported symbols are treated as errors # and there is binary compatibility between successive builds. CONFIG -= def_files_disabled # We need a target name without the INFIX'ed part, since DEF files are not infixed. equals(QMAKE_TARGET_PRODUCT, Qt4)|equals(QMAKE_TARGET_PRODUCT, QTestLib):clean_TARGET = $$replace(TARGET, "$${QT_LIBINFIX}$", "") else:clean_TARGET = $$TARGET defineTest(qtTestIfDirExists) { contains(QMAKE_HOST.os,Windows) { dirToTest = $$1 $$dirToTest ~= s,/,\\, # Windows trick. Test for existence of nul, which every directory has. retValue = $$system("if exist $$dirToTest\\nul echo true") contains(retValue, true):return(true)|return(false) } else { system("test -d $$1"):return(true)|return(false) } } symbian-abld|symbian-sbsv2 { # Firstly, if the MMP_RULES already contain a defBlock variable, don't generate another one # (this bit is slightly magic, because it depends upon everyone creating their DEFFILE statements # in a defBlock variable; but otherwise we have to expand MMP_RULES then scan for the DEFFILE keyword) # Similarly, explicit EXPORTUNFROZEN should block adding defBlock !contains(MMP_RULES, defBlock):!contains(MMP_RULES, EXPORTUNFROZEN) { # Apps are executables on Symbian, so don't have exports, and therefore don't have DEF files # Plugins use standard DEF files, which qmake generates, so shouldn't be using these DEFFILE # statements - they use the qmake generated statements instead # Static libraries obviously don't have DEF files, as they don't take part in dynamic linkage !contains(TEMPLATE, app):!contains(CONFIG, plugin):!contains(CONFIG, staticlib): { !isEmpty(DEF_FILE) { defBlock = \ "$${LITERAL_HASH}ifdef WINSCW" \ "DEFFILE $$DEF_FILE/bwins/$${clean_TARGET}.def" \ "$${LITERAL_HASH}elif defined EABI" \ "DEFFILE $$DEF_FILE/eabi/$${clean_TARGET}.def" \ "$${LITERAL_HASH}endif" } else:!isEmpty(defFilePath) { defBlock = \ "$${LITERAL_HASH}ifdef WINSCW" \ "DEFFILE $$defFilePath/bwins/$${clean_TARGET}.def" \ "$${LITERAL_HASH}elif defined EABI" \ "DEFFILE $$defFilePath/eabi/$${clean_TARGET}.def" \ "$${LITERAL_HASH}endif" } else { # If defFilePath is not defined, then put the folders containing the DEF files at the # same level as the .pro (and generated MMP) file(s) defBlock = \ "$${LITERAL_HASH}ifdef WINSCW" \ "DEFFILE ./bwins/$${clean_TARGET}.def" \ "$${LITERAL_HASH}elif defined EABI" \ "DEFFILE ./eabi/$${clean_TARGET}.def" \ "$${LITERAL_HASH}endif" } MMP_RULES += defBlock } } } else:contains(TEMPLATE, lib):!contains(CONFIG, static):!contains(CONFIG, staticlib):!contains(CONFIG, plugin) { !isEmpty(DEF_FILE) { defFile = $$DEF_FILE } else { defFile = . } qtTestIfDirExists($$_PRO_FILE_PWD_/$$defFile) { !exists("$$_PRO_FILE_PWD_/$$defFile/eabi") { dirToCreate = $$_PRO_FILE_PWD_/$$defFile/eabi contains(QMAKE_HOST.os,Windows):dirToCreate ~= s,/,\\, system("$$QMAKE_MKDIR $$dirToCreate") } elf2e32FileToAdd = $$_PRO_FILE_PWD_/$$defFile/eabi/$$basename(clean_TARGET)u.def } else { elf2e32FileToAdd = $$_PRO_FILE_PWD_/$$defFile } QMAKE_ELF2E32_FLAGS += "--definput=$$elf2e32FileToAdd" symbianObjdir = $$OBJECTS_DIR isEmpty(symbianObjdir):symbianObjdir = . freeze_target.target = freeze freeze_target.depends = first # The perl part is to convert to unix line endings and remove comments, which the s60 tools refuse to do. freeze_target.commands = $$QMAKE_COPY $$symbianObjdir/$${TARGET}.def $$elf2e32FileToAdd QMAKE_EXTRA_TARGETS += freeze_target } else:contains(TEMPLATE, subdirs) { freeze_target.target = freeze freeze_target.CONFIG = recursive freeze_target.recurse = $$SUBDIRS QMAKE_EXTRA_TARGETS += freeze_target } else { freeze_target.target = freeze freeze_target.commands = QMAKE_EXTRA_TARGETS += freeze_target }