diff --git a/dist/changes-4.0.0.md b/dist/changes-4.0.0.md index 923eda39373..35e8a3b56fc 100644 --- a/dist/changes-4.0.0.md +++ b/dist/changes-4.0.0.md @@ -96,6 +96,7 @@ Debugging * LLDB * Fixed issues with Xcode 7.3 (QTCREATORBUG-15965, QTCREATORBUG-15945, QTCREATORBUG-15949) + * Fixed breakpoint commands (QTCREATORBUG-15585) QML Profiler @@ -182,6 +183,11 @@ Android * Fixed issues with `Select Android Device` (QTCREATORBUG-15338, QTCREATORBUG-15422) +iOS + +* Fixed building for device with Qt 5.7 (QTCREATORBUG-16102) +* Fixed brief freezes while handling build output (QTCREATORBUG-15613) + Credits for these changes go to: Alessandro Portale Alexandru Croitor diff --git a/scripts/common.py b/scripts/common.py index fd724f1e94a..22fcca98720 100644 --- a/scripts/common.py +++ b/scripts/common.py @@ -125,15 +125,18 @@ def fix_rpaths(path, qt_deploy_path, qt_install_info, chrpath=None): new_rpath = filter(lambda path: not path.startswith(qt_install_prefix) and not path.startswith(qt_install_libs), rpath) - # add Qt RPATH if necessary - relative_path = os.path.relpath(qt_deploy_path, os.path.dirname(filepath)) - if relative_path == '.': - relative_path = '' - else: - relative_path = '/' + relative_path - qt_rpath = '$ORIGIN' + relative_path - if not any((path == qt_rpath) for path in rpath): - new_rpath.append(qt_rpath) + # check for Qt linking + lddOutput = subprocess.check_output(['ldd', filepath]) + if lddOutput.find('libQt5') >= 0 or lddOutput.find('libicu') >= 0: + # add Qt RPATH if necessary + relative_path = os.path.relpath(qt_deploy_path, os.path.dirname(filepath)) + if relative_path == '.': + relative_path = '' + else: + relative_path = '/' + relative_path + qt_rpath = '$ORIGIN' + relative_path + if not any((path == qt_rpath) for path in rpath): + new_rpath.append(qt_rpath) # change RPATH if len(new_rpath) > 0: diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 7e4ba8d979b..a305dbec7c4 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -1455,9 +1455,13 @@ class DumperBase: self.put('keyencoded="latin1",') self.putItem(v) propertyCount += 1 - - self.putValue(str('<%s items>' % propertyCount if propertyCount else '<>0 items>')) - self.putNumChild(1) + self.putItemCount(propertyCount) + else: + # We need a handle to [x] for the user to expand the item + # before we know whether there are actual children. Counting + # them is too expensive. + self.putNumChild(1) + self.putSpecialValue("minimumitemcount", 0) with SubItem(self, "[methods]"): methodCount = self.staticQObjectMethodCount(smo) diff --git a/src/plugins/cmakeprojectmanager/builddirmanager.cpp b/src/plugins/cmakeprojectmanager/builddirmanager.cpp index 87f3c07a931..c8fb4630378 100644 --- a/src/plugins/cmakeprojectmanager/builddirmanager.cpp +++ b/src/plugins/cmakeprojectmanager/builddirmanager.cpp @@ -214,8 +214,8 @@ void BuildDirManager::parse() void BuildDirManager::clearCache() { - auto cmakeCache = Utils::FileName(buildDirectory()).appendPath(QLatin1String("CMakeCache.txt")); - auto cmakeFiles = Utils::FileName(buildDirectory()).appendPath(QLatin1String("CMakeFiles")); + auto cmakeCache = Utils::FileName(workDirectory()).appendPath(QLatin1String("CMakeCache.txt")); + auto cmakeFiles = Utils::FileName(workDirectory()).appendPath(QLatin1String("CMakeFiles")); const bool mustCleanUp = cmakeCache.exists() || cmakeFiles.exists(); if (!mustCleanUp) diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index a12fe364cec..25b631e6514 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -931,6 +931,7 @@ QString BaseQtVersion::findQtBinary(Binaries binary) const case Linguist: if (HostOsInfo::isMacHost()) possibleCommands << QLatin1String("Linguist.app/Contents/MacOS/Linguist"); + else possibleCommands << HostOsInfo::withExecutableSuffix(QLatin1String("linguist")); break; case Uic: diff --git a/src/tools/clangbackend/clangbackend.qbs b/src/tools/clangbackend/clangbackend.qbs index adcbf0959b4..59fdc5b7dd8 100644 --- a/src/tools/clangbackend/clangbackend.qbs +++ b/src/tools/clangbackend/clangbackend.qbs @@ -29,4 +29,10 @@ QtcTool { cpp.includePaths: base.concat(["ipcsource", llvmIncludeDir]) cpp.libraryPaths: base.concat(llvmLibDir) cpp.dynamicLibraries: base.concat(llvmLibs) + cpp.rpaths: base.concat(llvmLibDir) + + Properties { + condition: qbs.targetOS.contains("unix") && !qbs.targetOS.contains("osx") + cpp.linkerFlags: base.concat(["-z", "origin"]) + } } diff --git a/tests/system/shared/utils.py b/tests/system/shared/utils.py index 97f1d7c5d42..d75d683dfb8 100644 --- a/tests/system/shared/utils.py +++ b/tests/system/shared/utils.py @@ -176,10 +176,17 @@ def invokeMenuItem(menu, item, *subItems): waitForObject(":Qt Creator.QtCreator.MenuBar_QMenuBar", 2000) except: nativeMouseClick(waitForObject(":Qt Creator_Core::Internal::MainWindow", 1000), 20, 20, 0, Qt.LeftButton) - # HACK to avoid squish crash using Qt5.2 on Squish 5.0.1 - remove asap + # HACK as Squish fails to provide a proper way to access the system menu if platform.system() == "Darwin": if menu == "Tools" and item == "Options...": - nativeType("") + #nativeType("") + # the following is a pure HACK because using the default key sequence seems to be broken + # when running from inside Squish + menuBar = waitForObject(":Qt Creator.QtCreator.MenuBar_QMenuBar", 500) + nativeMouseClick(menuBar, 75, 5, 0, Qt.LeftButton) + for _ in range(3): + nativeType("") + nativeType("") return if menu == "File" and item == "Exit": nativeType("") diff --git a/tests/system/suite_HELP/tst_HELP02/test.py b/tests/system/suite_HELP/tst_HELP02/test.py index f21fdf7201d..e0ec1aa8a97 100755 --- a/tests/system/suite_HELP/tst_HELP02/test.py +++ b/tests/system/suite_HELP/tst_HELP02/test.py @@ -53,11 +53,14 @@ def checkQtCreatorHelpVersion(expectedVersion): switchViewTo(ViewConstants.HELP) try: helpContentWidget = waitForObject(':Qt Creator_QHelpContentWidget', 5000) + waitFor("helpContentWidget.model().rowCount > 0", 2000) items = dumpItems(helpContentWidget.model()) test.compare(filter(lambda x: x.startswith('Qt Creator Manual'), items)[0], 'Qt Creator Manual %s' % expectedVersion, 'Verifying whether manual uses expected version.') except: + t, v = sys.exc_info()[:2] + test.log("Exception caught", "%s(%s)" % (str(t), str(v))) test.fail("Missing Qt Creator Manual.") def setKeyboardShortcutForAboutQtC(): @@ -74,11 +77,19 @@ def setKeyboardShortcutForAboutQtC(): "container={column='0' text='QtCreator' type='QModelIndex' " "container=%s}}" % objectMap.realName(treewidget)) mouseClick(modelIndex, 5, 5, 0, Qt.LeftButton) - shortcut = waitForObject("{container={title='Shortcut' type='QGroupBox' unnamed='1' " - "visible='1'} type='Utils::FancyLineEdit' unnamed='1' visible='1' " - "placeHolderText='Type to set shortcut'}") - mouseClick(shortcut, 5, 5, 0, Qt.LeftButton) + shortcutGB = "{title='Shortcut' type='QGroupBox' unnamed='1' visible='1'}" + record = waitForObject("{container=%s type='Core::Internal::ShortcutButton' unnamed='1' " + "visible='1' text~='(Stop Recording|Record)'}" % shortcutGB) + shortcut = ("{container=%s type='Utils::FancyLineEdit' unnamed='1' visible='1' " + "placeHolderText='Enter key sequence as text'}" % shortcutGB) + clickButton(record) nativeType("") + clickButton(record) + expected = 'Ctrl+Alt+A' + if platform.system() == 'Darwin': + expected = 'Ctrl+Opt+A' + test.verify(waitFor("str(findObject(shortcut).text) == expected", 5000), + "Expected key sequence is displayed.") clickButton(waitForObject(":Options.OK_QPushButton")) def main():