Merge remote-tracking branch 'origin/2.5'
Conflicts: qtcreator.pri src/libs/utils/utils.qbs src/plugins/projectexplorer/miniprojecttargetselector.cpp src/plugins/qmljseditor/qmljseditor.qbs src/plugins/qmljsinspector/qmljsinspector.qbs Change-Id: Ib239d50c21cb06d3a8e821e03dc093552f40ffab
@@ -78,6 +78,9 @@ doc/api/html/*
|
||||
doc/pluginhowto/html/*
|
||||
.rcc
|
||||
.pch
|
||||
dist/gdb/qtcreator-*
|
||||
dist/gdb/source
|
||||
dist/gdb/staging
|
||||
|
||||
# Binaries
|
||||
# --------
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
broot=${PWD}
|
||||
source=${broot}/source
|
||||
targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi arm-none-symbianelf
|
||||
staging=${broot}/staging
|
||||
pyversion=2.7
|
||||
expatversion=2.0.1
|
||||
arch=`uname -sm | sed 's/ /-/g' | tr A-Z a-z`
|
||||
version=7.4
|
||||
targetdir=${broot}/qtcreator-gdb-${version}
|
||||
gdbtargets=$(addprefix ${targetdir}/gdb-, ${targets})
|
||||
packagename=qtcreator-gdb-${version}-${arch}.tar.gz
|
||||
|
||||
all:package
|
||||
|
||||
gdb-7.4: override version=7.4
|
||||
|
||||
gdb-7.4: ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a
|
||||
${MAKE} version=${version}
|
||||
|
||||
clean:
|
||||
rm -rf ${broot}/qtcreator-gdb-* ${staging}/gdb-* qtcreator-gdb-*.tar.gz
|
||||
|
||||
makesourcedir:
|
||||
test -e ${source} || mkdir ${source}
|
||||
|
||||
maketargetdir:
|
||||
test -e ${targetdir} || mkdir ${targetdir}
|
||||
|
||||
makestagingdir:
|
||||
test -e ${staging} || mkdir ${staging}
|
||||
|
||||
${source}/expat-${expatversion}.tar.gz: | makesourcedir
|
||||
cd ${source}; wget http://sourceforge.net/projects/expat/files/expat/${expatversion}/expat-${expatversion}.tar.gz && \
|
||||
touch ${source}/expat-${expatversion}.tar.gz
|
||||
|
||||
${source}/Python-${pyversion}.tgz: | makesourcedir
|
||||
cd ${source}; wget http://www.python.org/ftp/python/${pyversion}/Python-${pyversion}.tgz && \
|
||||
touch ${source}/Python-${pyversion}.tgz
|
||||
|
||||
${source}/gdb-${version}.tar.bz2: | makesourcedir
|
||||
cd ${source} &&\
|
||||
wget http://ftp.gnu.org/gnu/gdb/gdb-${version}.tar.bz2 || \
|
||||
wget -O gdb-${version}.tar.bz2 http://ftp.gnu.org/gnu/gdb/gdb-${version}a.tar.bz2 && \
|
||||
touch gdb-*.tar.bz2
|
||||
|
||||
${staging}/lib/libexpat.a: ${source}/expat-${expatversion}.tar.gz | makestagingdir
|
||||
cd ${staging} && tar xvf ${source}/expat-${expatversion}.tar.gz && cd expat-${expatversion} && \
|
||||
./configure --disable-shared -prefix=${staging} && ${MAKE} && ${MAKE} install
|
||||
|
||||
${staging}/lib/libpython${pyversion}.a: ${source}/Python-${pyversion}.tgz | makestagingdir
|
||||
unset PYTHONHOME && cd ${staging} && tar xvf ${source}/Python-${pyversion}.tgz && cd Python-${pyversion} && \
|
||||
export LDFLAGS="-pthread -lm" && \
|
||||
./configure --prefix=${staging} && ${MAKE} && ${MAKE} install
|
||||
|
||||
${targetdir}/python/include/python${pyversion}/pyconfig.h: ${staging}/lib/libpython${pyversion}.a | maketargetdir
|
||||
mkdir -p ${targetdir}/python/lib && cp -a ${staging}/lib/python${pyversion} ${targetdir}/python/lib/
|
||||
mkdir -p ${targetdir}/python/include/python${pyversion} && cp ${staging}/include/python${pyversion}/pyconfig.h ${targetdir}/python/include/python${pyversion}/
|
||||
|
||||
${staging}/gdb-${version}/configure: ${source}/gdb-${version}.tar.bz2 | makestagingdir
|
||||
cd ${staging} && \
|
||||
tar xvf ${source}/gdb-${version}.tar.bz2 && \
|
||||
cd gdb-${version} && \
|
||||
touch configure && \
|
||||
patch -p2 < ${broot}/patches/pythonhome-7.4.patch && \
|
||||
patch -p1 < ${broot}/patches/gdb-buildid-locate.patch && \
|
||||
patch -p1 < ${broot}/patches/gdb-ipv6.patch && \
|
||||
patch -p1 < ${broot}/patches/gdb-work-around-trk-single-step.patch
|
||||
|
||||
${gdbtargets}: ${targetdir}/gdb-%: ${staging}/gdb-${version}/configure ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a | maketargetdir
|
||||
test -e ${staging}/gdb-${version}-$* || mkdir ${staging}/gdb-${version}-$*
|
||||
export PYTHONHOME=${staging} && \
|
||||
export PATH="${staging}/bin/:$$PATH" && \
|
||||
export LDFLAGS="-pthread -lm" && \
|
||||
cd ${staging}/gdb-${version}-$* && \
|
||||
${staging}/gdb-${version}/configure --disable-nls --target=$* --with-python=${staging} --with-libexpat-prefix=${staging} && \
|
||||
sleep 3 && \
|
||||
${MAKE} MAKEFLAGS+=-j1 && \
|
||||
strip gdb/gdb && \
|
||||
cp -T gdb/gdb ${targetdir}/gdb-$*
|
||||
|
||||
${targetdir}/gdb: ${staging}/gdb-${version}/configure ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a | maketargetdir
|
||||
test -e ${staging}/gdb-${version}-${arch} || mkdir ${staging}/gdb-${version}-${arch}
|
||||
export PYTHONHOME=${staging} && \
|
||||
export PATH="${staging}/bin/:$$PATH" && \
|
||||
export LDFLAGS="-pthread -lm" && \
|
||||
cd ${staging}/gdb-${version}-${arch} && \
|
||||
${staging}/gdb-${version}/configure --disable-nls --with-python=${staging} --with-libexpat-prefix=${staging} && \
|
||||
${MAKE} MAKEFLAGS+=-j1 && \
|
||||
strip gdb/gdb && \
|
||||
cp -T gdb/gdb ${targetdir}/gdb
|
||||
|
||||
package: ${gdbtargets} ${targetdir}/gdb ${targetdir}/python/include/python${pyversion}/pyconfig.h
|
||||
mv ${targetdir} ${targetdir}-${arch}
|
||||
tar cvzf ${packagename} qtcreator-gdb-${version}-${arch}
|
||||
mv ${targetdir}-${arch} ${targetdir}
|
||||
@@ -0,0 +1,101 @@
|
||||
broot=${PWD}
|
||||
source=${broot}/source
|
||||
targets=arm-none-symbianelf arm-none-linux-gnueabi i686-pc-mingw32
|
||||
staging=${broot}/staging
|
||||
pyversion=2.7
|
||||
pydir=${broot}/python
|
||||
expatversion=2.0.1
|
||||
iconvversion=1.14
|
||||
version=7.4
|
||||
targetdir=${broot}/qtcreator-gdb-${version}
|
||||
gdbtargets=$(addprefix ${targetdir}/gdb-, ${targets})
|
||||
packageparts=${targetdir}/lib ${targetdir}/lib ${targetdir}/libiconv-2.dll ${targetdir}/python27.dll ${targetdir}/libexpat-1.dll
|
||||
arch=`uname -sm | sed 's/ /-/g' | tr A-Z a-z`
|
||||
packagename=qtcreator-gdb-${version}-${arch}.tar.gz
|
||||
|
||||
all: package
|
||||
|
||||
gdb-7.4: override version=7.4
|
||||
|
||||
gdb-7.4:
|
||||
${MAKE} version=${version}
|
||||
|
||||
clean:
|
||||
rm -rf ${broot}/qtcreator-gdb-* ${staging}/gdb-*
|
||||
|
||||
distclean:
|
||||
rm -rf ${staging} ${source} ${broot}/qtcreator-gdb-*
|
||||
|
||||
makesourcedir:
|
||||
test -e ${source} || mkdir ${source}
|
||||
|
||||
maketargetdir:
|
||||
test -e ${targetdir} || mkdir ${targetdir}
|
||||
|
||||
makestagingdir:
|
||||
test -e ${staging} || mkdir ${staging}
|
||||
|
||||
checkwget:
|
||||
wget -V &> /dev/null || mingw-get install msys-wget-bin
|
||||
|
||||
${source}/gdb-${version}.tar.bz2: | makesourcedir checkwget
|
||||
cd ${source} && \
|
||||
wget http://ftp.gnu.org/gnu/gdb/gdb-${version}.tar.bz2 || \
|
||||
wget -O gdb-${version}.tar.bz2 http://ftp.gnu.org/gnu/gdb/gdb-${version}a.tar.bz2 && \
|
||||
touch gdb-${version}.tar.bz2
|
||||
|
||||
${source}/libiconv-${iconvversion}.tar.gz: | makesourcedir checkwget
|
||||
cd ${source} && \
|
||||
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${iconvversion}.tar.gz && \
|
||||
touch ${source}/libiconv-${iconvversion}.tar.gz
|
||||
|
||||
${source}/expat-${expatversion}.tar.gz: | makesourcedir checkwget
|
||||
cd ${source} &&\
|
||||
wget http://sourceforge.net/projects/expat/files/expat/${expatversion}/expat-${expatversion}.tar.gz/download && \
|
||||
touch ${source}/expat-${expatversion}.tar.gz
|
||||
|
||||
${staging}/gdb-${version}/configure: ${source}/gdb-${version}.tar.bz2 | makestagingdir
|
||||
cd ${staging} && \
|
||||
tar xvf ${source}/gdb-${version}.tar.bz2 && \
|
||||
cd gdb-${version} && \
|
||||
touch configure && \
|
||||
patch -p1 < ${broot}/patches/gdb-ipv6.patch && \
|
||||
patch -p1 < ${broot}/patches/gdb-target-debugging.patch
|
||||
|
||||
${staging}/lib/libiconv.a: ${source}/libiconv-${iconvversion}.tar.gz | makestagingdir
|
||||
cd ${staging} && \
|
||||
tar xvf ${source}/libiconv-${iconvversion}.tar.gz && \
|
||||
cd libiconv-${iconvversion} && \
|
||||
./configure -prefix=${staging} --enable-static && \
|
||||
${MAKE} && ${MAKE} install
|
||||
|
||||
${staging}/lib/libexpat.a: ${source}/expat-${expatversion}.tar.gz | makestagingdir
|
||||
cd ${staging} && \
|
||||
tar xvf ${source}/expat-${expatversion}.tar.gz && \
|
||||
cd expat-${expatversion} && \
|
||||
./configure -prefix=${staging} --enable-static && \
|
||||
${MAKE} && ${MAKE} install
|
||||
|
||||
${gdbtargets}: ${targetdir}/gdb-%: ${staging}/lib/libexpat.a ${staging}/lib/libiconv.a ${staging}/gdb-${version}/configure | maketargetdir
|
||||
test -e ${staging}/gdb-${version}-$* || mkdir ${staging}/gdb-${version}-$*
|
||||
export PYTHONHOME=${pydir} && \
|
||||
LDFLAGS="L${pydir} -lpthread -ldl -lutil -lpython27" && \
|
||||
CFLAGS="-I${pydir}/include" && \
|
||||
cd ${staging}/gdb-${version}-$* && \
|
||||
${staging}/gdb-${version}/configure --target=$* --disable-nls \
|
||||
--with-libiconv-prefix=${staging} \
|
||||
--with-expat --with-libexpat-prefix=${staging} \
|
||||
--with-python=${pydir} &&\
|
||||
${MAKE} MAKEFLAGS+= -j1 &&\
|
||||
strip gdb/gdb.exe && \
|
||||
cp -T gdb/gdb.exe ${targetdir}/gdb-$*.exe
|
||||
|
||||
package: ${gdbtargets}
|
||||
cp ${staging}/bin/libiconv* ${targetdir} && \
|
||||
cp ${staging}/bin/libexpat* ${targetdir} && \
|
||||
cp ${pydir}/python*.dll ${targetdir} && \
|
||||
cp -r ${pydir}/lib ${targetdir} && \
|
||||
cp -r ${pydir}/include ${targetdir} && \
|
||||
mv ${targetdir} ${targetdir}-${arch} && \
|
||||
tar cvzf ${packagename} qtcreator-gdb-${version}-${arch} && \
|
||||
mv ${targetdir}-${arch} ${targetdir}
|
||||
@@ -0,0 +1,89 @@
|
||||
broot=${PWD}
|
||||
source=${broot}/source
|
||||
targets=x86_64-unknown-linux-gnu i686-unknown-linux-gnu arm-none-linux-gnueabi arm-none-symbianelf
|
||||
staging=${broot}/staging
|
||||
pyversion=2.7
|
||||
expatversion=2.0.1
|
||||
arch=`uname -sm | sed 's/ /-/g' | tr A-Z a-z`
|
||||
version=7.4
|
||||
targetdir=${broot}/qtcreator-gdb-${version}
|
||||
gdbtargets=$(addprefix ${targetdir}/gdb-, ${targets})
|
||||
packagename=qtcreator-gdb-${version}-${arch}.tar.gz
|
||||
|
||||
all:package
|
||||
|
||||
gdb-7.4: override version=7.4
|
||||
|
||||
gdb-7.4: ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a
|
||||
${MAKE} version=${version}
|
||||
|
||||
clean:
|
||||
rm -rf ${broot}/qtcreator-gdb-* ${staging}/gdb-* qtcreator-gdb-*.tar.gz
|
||||
|
||||
makesourcedir:
|
||||
test -e ${source} || mkdir ${source}
|
||||
|
||||
maketargetdir:
|
||||
test -e ${targetdir} || mkdir ${targetdir}
|
||||
|
||||
makestagingdir:
|
||||
test -e ${staging} || mkdir ${staging}
|
||||
|
||||
${source}/expat-${expatversion}.tar.gz: | makesourcedir
|
||||
cd ${source}; curl -LOf http://sourceforge.net/projects/expat/files/expat/${expatversion}/expat-${expatversion}.tar.gz && \
|
||||
touch ${source}/expat-${expatversion}.tar.gz
|
||||
|
||||
${source}/Python-${pyversion}.tgz: | makesourcedir
|
||||
cd ${source}; curl -Of http://www.python.org/ftp/python/${pyversion}/Python-${pyversion}.tgz && \
|
||||
touch ${source}/Python-${pyversion}.tgz
|
||||
|
||||
${source}/gdb-${version}.tar.bz2: | makesourcedir
|
||||
cd ${source} && \
|
||||
curl -Of http://ftp.gnu.org/gnu/gdb/gdb-${version}.tar.bz2 || \
|
||||
curl -of gdb-${version}.tar.bz2 http://ftp.gnu.org/gnu/gdb/gdb-${version}a.tar.bz2 && \
|
||||
touch gdb-*.tar.bz2
|
||||
|
||||
${staging}/lib/libexpat.a: ${source}/expat-${expatversion}.tar.gz | makestagingdir
|
||||
cd ${staging} && tar xvf ${source}/expat-${expatversion}.tar.gz && cd expat-${expatversion} && \
|
||||
./configure --disable-shared -prefix=/ && ${MAKE} && ${MAKE} install
|
||||
|
||||
${staging}/lib/libpython${pyversion}.a: ${source}/Python-${pyversion}.tgz | makestagingdir
|
||||
unset PYTHONHOME && cd ${staging} && tar xvf ${source}/Python-${pyversion}.tgz && cd Python-${pyversion} && \
|
||||
./configure --prefix=${staging} && ${MAKE} && ${MAKE} install
|
||||
|
||||
${targetdir}/python/include/python${pyversion}/pyconfig.h: ${staging}/lib/libpython${pyversion}.a | maketargetdir
|
||||
mkdir -p ${targetdir}/python/lib && cp -a ${staging}/lib/python${pyversion} ${targetdir}/python/lib/
|
||||
mkdir -p ${targetdir}/python/include/python${pyversion} && cp ${staging}/include/python${pyversion}/pyconfig.h ${targetdir}/python/include/python${pyversion}/
|
||||
|
||||
${staging}/gdb-${version}/configure: ${source}/gdb-${version}.tar.bz2 | makestagingdir
|
||||
cd ${staging} && \
|
||||
tar xvf ${source}/gdb-${version}.tar.bz2 && \
|
||||
cd gdb-${version} && \
|
||||
touch configure && \
|
||||
patch -p2 < ${broot}/patches/pythonhome-${version}.patch && \
|
||||
patch -p1 < ${broot}/patches/gdb-ipv6.patch
|
||||
|
||||
${gdbtargets}: ${targetdir}/gdb-%: ${staging}/gdb-${version}/configure ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a | maketargetdir
|
||||
test -e ${staging}/gdb-${version}-$* || mkdir ${staging}/gdb-${version}-$*
|
||||
export PYTHONHOME=${staging} && \
|
||||
export PATH="${staging}/bin/:$$PATH" && \
|
||||
cd ${staging}/gdb-${version}-$* && \
|
||||
${staging}/gdb-${version}/configure --disable-nls --target=$* --with-python=${staging} --with-libexpat-prefix=${staging} && \
|
||||
${MAKE} MAKEFLAGS+=-j1 && \
|
||||
strip gdb/gdb && \
|
||||
mv gdb/gdb ${targetdir}/gdb-$*
|
||||
|
||||
${targetdir}/gdb: ${staging}/gdb-${version}/configure ${staging}/lib/libpython${pyversion}.a ${staging}/lib/libexpat.a | maketargetdir
|
||||
test -e ${staging}/gdb-${version}-${arch} || mkdir ${staging}/gdb-${version}-${arch}
|
||||
export PYTHONHOME=${staging} && \
|
||||
export PATH="${staging}/bin/:$$PATH" && \
|
||||
cd ${staging}/gdb-${version}-${arch} && \
|
||||
${staging}/gdb-${version}/configure --disable-nls --with-python=${staging} --with-libexpat-prefix=${staging} --disable-werror && \
|
||||
${MAKE} MAKEFLAGS+=-j1 && \
|
||||
strip gdb/gdb && \
|
||||
mv gdb/gdb ${targetdir}/gdb
|
||||
|
||||
package: ${gdbtargets} ${targetdir}/gdb ${targetdir}/python/include/python${pyversion}/pyconfig.h
|
||||
mv ${targetdir} ${targetdir}-${arch}
|
||||
tar cvzf ${packagename} qtcreator-gdb-${version}-${arch}
|
||||
mv ${targetdir}-${arch} ${targetdir}
|
||||
@@ -0,0 +1,19 @@
|
||||
--- src/gdb/infcmd.c 2012/02/15 19:13:13
|
||||
+++ src/gdb/infcmd.c 2012/02/23 08:15:04
|
||||
@@ -1636,6 +1636,7 @@
|
||||
static void
|
||||
finish_forward (struct symbol *function, struct frame_info *frame)
|
||||
{
|
||||
+ struct frame_id frame_id = get_frame_id (frame);
|
||||
struct gdbarch *gdbarch = get_frame_arch (frame);
|
||||
struct symtab_and_line sal;
|
||||
struct thread_info *tp = inferior_thread ();
|
||||
@@ -1653,7 +1654,7 @@
|
||||
|
||||
old_chain = make_cleanup_delete_breakpoint (breakpoint);
|
||||
|
||||
- set_longjmp_breakpoint (tp, get_frame_id (frame));
|
||||
+ set_longjmp_breakpoint (tp, frame_id);
|
||||
make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
|
||||
|
||||
/* We want stop_registers, please... */
|
||||
@@ -0,0 +1,38 @@
|
||||
*** source/gdb-7.4/gdb/python/python.c 2012-02-01 10:39:59.812953656 +0100
|
||||
--- staging/gdb-7.4/gdb/python/python.c 2012-02-01 10:33:45.842953480 +0100
|
||||
***************
|
||||
*** 32,38 ****
|
||||
#include "serial.h"
|
||||
#include "readline/tilde.h"
|
||||
#include "python.h"
|
||||
!
|
||||
#include <ctype.h>
|
||||
|
||||
/* Declared constants and enum for python stack printing. */
|
||||
--- 32,38 ----
|
||||
#include "serial.h"
|
||||
#include "readline/tilde.h"
|
||||
#include "python.h"
|
||||
! #include <libgen.h>
|
||||
#include <ctype.h>
|
||||
|
||||
/* Declared constants and enum for python stack printing. */
|
||||
***************
|
||||
*** 1273,1278 ****
|
||||
--- 1273,1288 ----
|
||||
SLASH_STRING, "python", NULL));
|
||||
#endif
|
||||
|
||||
+
|
||||
+ char readlinkbuffer[BUFSIZ];
|
||||
+ int readlinks = readlink("/proc/self/exe", readlinkbuffer, BUFSIZ - 1);
|
||||
+ readlinkbuffer[readlinks] = 0;
|
||||
+ char *executeablepath = dirname(readlinkbuffer);
|
||||
+ char *pythonhome = malloc(strlen(executeablepath) + strlen("/python/") + 2);
|
||||
+ strcpy(pythonhome, executeablepath);
|
||||
+ strcat(pythonhome, "/python/");
|
||||
+ setenv("PYTHONHOME", pythonhome, 1);
|
||||
+
|
||||
Py_Initialize ();
|
||||
PyEval_InitThreads ();
|
||||
|
||||
|
Before Width: | Height: | Size: 542 B After Width: | Height: | Size: 547 B |
|
Before Width: | Height: | Size: 724 B After Width: | Height: | Size: 728 B |
|
Before Width: | Height: | Size: 930 B After Width: | Height: | Size: 726 B |
|
Before Width: | Height: | Size: 894 B After Width: | Height: | Size: 672 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 371 B After Width: | Height: | Size: 384 B |
|
Before Width: | Height: | Size: 964 B After Width: | Height: | Size: 726 B |
|
Before Width: | Height: | Size: 826 B After Width: | Height: | Size: 708 B |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 704 B |
|
After Width: | Height: | Size: 690 B |
|
After Width: | Height: | Size: 725 B |
|
After Width: | Height: | Size: 575 B |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 804 B |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 6.9 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.3 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 29 KiB |
@@ -27,7 +27,7 @@
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-debugging.html
|
||||
\previouspage creator-debugging-qml.html
|
||||
\page creator-debugging-example.html
|
||||
\nextpage creator-qml-debugging-example.html
|
||||
|
||||
@@ -103,6 +103,13 @@
|
||||
If you compile and run the above code, however, the application does not
|
||||
work correctly due to a logic error. To locate this logic error, step
|
||||
through the code using the following buttons:
|
||||
\inlineimage qtcreator-debug-button-stop.png
|
||||
(\gui Stop),
|
||||
\inlineimage qtcreator-debug-button-step-over.png
|
||||
(\gui {Step Over}),
|
||||
\inlineimage qtcreator-debug-button-step-into.png
|
||||
(\gui {Step Into}), and
|
||||
\inlineimage qtcreator-debug-button-step-out.png
|
||||
(\gui {Step Out}).
|
||||
|
||||
\image qtcreator-debugging-buttons.png
|
||||
*/
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
\contentspage index.html
|
||||
\previouspage creator-testing.html
|
||||
\page creator-debugging.html
|
||||
\nextpage creator-debugging-example.html
|
||||
\nextpage creator-debugger-engines.html
|
||||
|
||||
\title Debugging
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-qml-debugging-example.html
|
||||
\previouspage creator-debugger-engines.html
|
||||
\page creator-debugger-operating-modes.html
|
||||
\nextpage creator-debug-mode.html
|
||||
|
||||
@@ -362,9 +362,9 @@
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-debug-mode.html
|
||||
\previouspage creator-debugging.html
|
||||
\page creator-debugger-engines.html
|
||||
\nextpage creator-debugging-helpers.html
|
||||
\nextpage creator-debugger-operating-modes.html
|
||||
|
||||
\title Setting Up Debugger
|
||||
|
||||
@@ -695,7 +695,7 @@
|
||||
\contentspage index.html
|
||||
\previouspage creator-debugger-operating-modes.html
|
||||
\page creator-debug-mode.html
|
||||
\nextpage creator-debugger-engines.html
|
||||
\nextpage creator-debugging-helpers.html
|
||||
|
||||
\title Interacting with the Debugger
|
||||
|
||||
@@ -1092,7 +1092,7 @@
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-debugger-engines.html
|
||||
\previouspage creator-debug-mode.html
|
||||
\page creator-debugging-helpers.html
|
||||
\nextpage creator-debugging-qml.html
|
||||
|
||||
@@ -1439,7 +1439,7 @@
|
||||
|
||||
/*!
|
||||
\contentspage index.html
|
||||
\previouspage creator-debugging-qml.html
|
||||
\previouspage creator-qml-debugging-example.html
|
||||
\page creator-troubleshooting-debugging.html
|
||||
\nextpage creator-analyze-mode.html
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
\contentspage index.html
|
||||
\previouspage creator-debugging-example.html
|
||||
\page creator-qml-debugging-example.html
|
||||
\nextpage creator-debugger-operating-modes.html
|
||||
\nextpage creator-troubleshooting-debugging.html
|
||||
|
||||
\title Debugging a Qt Quick Example Application
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
\o To look at the code that starts a new game, place a breakpoint in
|
||||
samegame.qml by clicking between the line number and the window
|
||||
border on the line where where the \c startNewGame() function is
|
||||
called.
|
||||
called (1).
|
||||
|
||||
\image qtquick-example-setting-breakpoint1.png
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
\image qtquick-example-setting-breakpoint2.png
|
||||
|
||||
\o Click the
|
||||
\inlineimage qml-inspector-step-into.png
|
||||
\inlineimage qtcreator-debug-button-step-into.png
|
||||
(\gui {Step Into}) button on the toolbar or press \key F11 to step
|
||||
into the code in the stack. The samegame.js file opens in the code
|
||||
editor at the function that starts a new game.
|
||||
@@ -88,7 +88,7 @@
|
||||
\image qtquick-example-setting-breakpoint3.png
|
||||
|
||||
\o To execute JavaScript commands in the current context, select the
|
||||
\gui {QML Script Console} tab.
|
||||
\gui {Console} tab.
|
||||
|
||||
\o To change the score to 1000, enter \c{gameCanvas.score = 1000}
|
||||
in the console.
|
||||
@@ -111,8 +111,8 @@
|
||||
\o Click
|
||||
\inlineimage qml-inspector-select-button.png
|
||||
(\gui Select) to activate selection mode and then click the
|
||||
\gui {New Game} button to move into the \gui newGameButton component
|
||||
in the \gui {QML Script Console} and the code editor.
|
||||
\gui {Quit} button to move into the \gui ButtonLabel component
|
||||
in the \gui {Console} and the code editor.
|
||||
|
||||
\image qtquick-example-property-values.png
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
\contentspage index.html
|
||||
\previouspage creator-debugging-helpers.html
|
||||
\page creator-debugging-qml.html
|
||||
\nextpage creator-troubleshooting-debugging.html
|
||||
\nextpage creator-debugging-example.html
|
||||
|
||||
\title Debugging Qt Quick Projects
|
||||
|
||||
@@ -159,10 +159,10 @@
|
||||
\section1 Executing JavaScript Expressions
|
||||
|
||||
When the application is interrupted by a breakpoint, you can use the
|
||||
\gui {QML Script Console} to execute JavaScript expressions in the current
|
||||
context. To open it, choose \gui {Window > View > QML Script Console}.
|
||||
\gui {Console} to execute JavaScript expressions in the current
|
||||
context. To open it, choose \gui {Window > Views > Console}.
|
||||
|
||||
\image qml-script-console.png "QML Script Console view"
|
||||
\image qml-script-console.png "Console view"
|
||||
|
||||
You can type JavaScript expressions and use them to get information about
|
||||
the state or your application. You can change property values temporarily,
|
||||
@@ -174,11 +174,11 @@
|
||||
|
||||
If you change property values or add properties in the code editor, the
|
||||
debugger can update the properties in the running application when you save
|
||||
the file. This is enabled by default. To disable it, click
|
||||
the file. This is enabled by default. To disable it, click the
|
||||
\inlineimage qml-observer-bar-reload.png "Apply Changes on Save button"
|
||||
on the toolbar.
|
||||
(\gui {Apply Changes on Save}) button on the toolbar.
|
||||
|
||||
When you change property values in the \gui {QML Script Console} or
|
||||
When you change property values in the \gui {Console} or
|
||||
\gui {QML Inspector}, they are immediately updated in the running
|
||||
application, but not in the source code.
|
||||
|
||||
@@ -249,8 +249,8 @@
|
||||
contains zoom controls.
|
||||
|
||||
To inspect colors, click the \gui {Color Picker} button. You can also click
|
||||
\inlineimage qml-observer-bar-copy-color.png "Copy Color button"
|
||||
to copy the color definition to the clipboard.
|
||||
\inlineimage qml-observer-bar-copy-color.png "Color Picker button"
|
||||
(\gui {Color Picker}) to copy the color definition to the clipboard.
|
||||
|
||||
To switch out of the inspection mode, deselect the \gui Select, \gui Zoom,
|
||||
and \gui {Color Picker} button.
|
||||
@@ -260,14 +260,12 @@
|
||||
|
||||
To play and pause animations in the running application, select
|
||||
\inlineimage qml-inspector-play.png
|
||||
and
|
||||
(\gui {Play Animations}) and
|
||||
\inlineimage qml-inspector-pause.png
|
||||
on the toolbar.
|
||||
(\gui {Pause Animations}) on the toolbar.
|
||||
|
||||
To change the speed at which animations are played, click and hold down
|
||||
\inlineimage qml-inspector-play.png
|
||||
or
|
||||
\inlineimage qml-inspector-pause.png
|
||||
\gui {Play/Pause Animations}
|
||||
and select a value.
|
||||
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
\section2 Generating SSH Keys
|
||||
|
||||
If you do not have an SSH public and private key pair, you can generate it
|
||||
in \QC. You can specify key length and the key algorithm, RSA or DSA.
|
||||
in \QC. The connection wizard can create the key pair for you, or you can
|
||||
create it separately.
|
||||
|
||||
You can specify key length and the key algorithm, RSA or DSA.
|
||||
If you only use the keys to protect connections to the emulator or
|
||||
device, you can use the default values.
|
||||
|
||||
|
||||
@@ -236,13 +236,13 @@
|
||||
\list
|
||||
\o \l{Debugging}
|
||||
\list
|
||||
\o \l{Debugging a C++ Example Application}
|
||||
\o \l{Debugging a Qt Quick Example Application}
|
||||
\o \l{Setting Up Debugger}
|
||||
\o \l{Launching the Debugger}
|
||||
\o \l{Interacting with the Debugger}
|
||||
\o \l{Setting Up Debugger}
|
||||
\o \l{Using Debugging Helpers}
|
||||
\o \l{Debugging Qt Quick Projects}
|
||||
\o \l{Debugging a C++ Example Application}
|
||||
\o \l{Debugging a Qt Quick Example Application}
|
||||
\o \l{Troubleshooting Debugger}
|
||||
\endlist
|
||||
\o \l{Analyzing Code}
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
|
||||
\o In the \gui {Create SIS Package} step, select \gui {Self-signed certificate}.
|
||||
|
||||
\o In the \gui {Deploy SIS Package} step, click \gui {Remove Item} to
|
||||
\o In the \gui {Deploy SIS Package} step, click \gui {Remove Item} (1) to
|
||||
skip the step of copying the SIS file to a device. The SIS file is created
|
||||
in the project folder.
|
||||
|
||||
|
||||
@@ -501,15 +501,16 @@ def checkSimpleRef(ref):
|
||||
check(count < 1000000)
|
||||
|
||||
def checkRef(ref):
|
||||
# assume there aren't a million references to any object
|
||||
if qtMajorVersion() >= 5:
|
||||
count = ref["atomic"]["_q_value"]
|
||||
check(count >= -1)
|
||||
check(count < 1000000)
|
||||
else:
|
||||
count = ref["_q_value"]
|
||||
check(count > 0)
|
||||
check(count < 1000000)
|
||||
try:
|
||||
count = ref["atomic"]["_q_value"] # Qt 5.
|
||||
minimum = -1
|
||||
except:
|
||||
count = ref["_q_value"] # Qt 4.
|
||||
minimum = 0
|
||||
# Assume there aren't a million references to any object.
|
||||
check(count >= minimum)
|
||||
check(count < 1000000)
|
||||
|
||||
|
||||
#def couldBePointer(p, align):
|
||||
# type = lookupType("unsigned int")
|
||||
@@ -667,24 +668,6 @@ def qtNamespace():
|
||||
except:
|
||||
return ""
|
||||
|
||||
# -- Determine major Qt version by calling qVersion (cached)
|
||||
|
||||
qqMajorVersion = None
|
||||
|
||||
def qtMajorVersion():
|
||||
global qqMajorVersion
|
||||
if not qqMajorVersion is None:
|
||||
return qqMajorVersion
|
||||
try:
|
||||
# -- Result is returned as character, need to subtract '0'
|
||||
v = int(parseAndEvaluate("*(char*)qVersion()"))
|
||||
if v >= 51:
|
||||
qqMajorVersion = v - 48
|
||||
return qqMajorVersion
|
||||
return 0
|
||||
except:
|
||||
return 0
|
||||
|
||||
def findFirstZero(p, maximum):
|
||||
for i in xrange(maximum):
|
||||
if p.dereference() == 0:
|
||||
@@ -762,21 +745,17 @@ def encodeChar4Array(p, maxsize):
|
||||
return s
|
||||
|
||||
def qByteArrayData(value):
|
||||
if qtMajorVersion() < 5:
|
||||
d_ptr = value['d'].dereference()
|
||||
checkRef(d_ptr["ref"])
|
||||
data = d_ptr['data']
|
||||
size = d_ptr['size']
|
||||
alloc = d_ptr['alloc']
|
||||
return data, size, alloc
|
||||
else: # Qt5: Implement the QByteArrayData::data() accessor.
|
||||
qByteArrayData = value['d'].dereference()
|
||||
size = qByteArrayData['size']
|
||||
alloc = qByteArrayData['alloc']
|
||||
private = value['d']
|
||||
checkRef(private['ref'])
|
||||
try:
|
||||
# Qt 5. Will fail on Qt 4 due to the missing 'offset' member.
|
||||
offset = private['offset']
|
||||
charPointerType = lookupType('char *')
|
||||
data = qByteArrayData['d'].cast(charPointerType) \
|
||||
+ qByteArrayData['offset'] + charPointerType.sizeof
|
||||
return data, size, alloc
|
||||
data = private.cast(charPointerType) + private['offset']
|
||||
return data, int(private['size']), int(private['alloc'])
|
||||
except:
|
||||
# Qt 4:
|
||||
return private['data'], int(private['size']), int(private['alloc'])
|
||||
|
||||
def encodeByteArray(value):
|
||||
data, size, alloc = qByteArrayData(value)
|
||||
@@ -787,21 +766,23 @@ def encodeByteArray(value):
|
||||
return encodeCharArray(data, 100, size)
|
||||
|
||||
def qQStringData(value):
|
||||
if qtMajorVersion() < 5:
|
||||
d_ptr = value['d'].dereference()
|
||||
checkRef(d_ptr['ref'])
|
||||
return d_ptr['data'], int(d_ptr['size']), int(d_ptr['alloc'])
|
||||
else: # Qt5: Implement the QStringArrayData::data() accessor.
|
||||
qStringData = value['d'].dereference()
|
||||
private = value['d']
|
||||
checkRef(private['ref'])
|
||||
try:
|
||||
# Qt 5. Will fail on Qt 4 due to the missing 'offset' member.
|
||||
offset = private['offset']
|
||||
ushortPointerType = lookupType('ushort *')
|
||||
data = qStringData['d'].cast(ushortPointerType) \
|
||||
+ ushortPointerType.sizeof / 2 + qStringData['offset']
|
||||
return data, int(qStringData['size']), int(qStringData['alloc'])
|
||||
data = private.cast(ushortPointerType) + offset / 2
|
||||
return data, int(private['size']), int(private['alloc'])
|
||||
except:
|
||||
# Qt 4.
|
||||
return private['data'], int(private['size']), int(private['alloc'])
|
||||
|
||||
def encodeString(value):
|
||||
data, size, alloc = qQStringData(value)
|
||||
|
||||
check(0 <= size and size <= alloc and alloc <= 100*1000*1000)
|
||||
if alloc != 0:
|
||||
check(0 <= size and size <= alloc and alloc <= 100*1000*1000)
|
||||
if size > 0:
|
||||
checkAccess(data, 4)
|
||||
checkAccess(data + size) == 0
|
||||
|
||||
@@ -1644,23 +1644,29 @@ def qedit__QVector(expr, value):
|
||||
|
||||
|
||||
def qdump__QVector(d, value):
|
||||
d_ptr = value["d"]
|
||||
p_ptr = value["p"]
|
||||
alloc = d_ptr["alloc"]
|
||||
size = d_ptr["size"]
|
||||
private = value["d"]
|
||||
checkRef(private["ref"])
|
||||
alloc = private["alloc"]
|
||||
size = private["size"]
|
||||
innerType = templateArgument(value.type, 0)
|
||||
charPointerType = lookupType("char *")
|
||||
try:
|
||||
# Qt 5. Will fail on Qt 4 due to the missing 'offset' member.
|
||||
offset = private["offset"]
|
||||
data = private.cast(charPointerType) + offset
|
||||
except:
|
||||
# Qt 4.
|
||||
data = value["p"]["array"]
|
||||
|
||||
p = data.cast(innerType.pointer())
|
||||
|
||||
check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
|
||||
checkRef(d_ptr["ref"])
|
||||
|
||||
innerType = templateArgument(value.type, 0)
|
||||
d.putItemCount(size)
|
||||
d.putNumChild(size)
|
||||
if d.isExpanded():
|
||||
p = gdb.Value(p_ptr["array"]).cast(innerType.pointer())
|
||||
charPtr = lookupType("char").pointer()
|
||||
d.putField("size", size)
|
||||
with Children(d, size, maxNumChild=2000, childType=innerType, addrBase=p,
|
||||
addrStep=(p+1).cast(charPtr) - p.cast(charPtr)):
|
||||
addrStep=(p+1).cast(charPointerType) - p.cast(charPointerType)):
|
||||
for i in d.childRange():
|
||||
d.putSubItem(i, p.dereference())
|
||||
p += 1
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
*.patch -crlf
|
||||
@@ -1,35 +0,0 @@
|
||||
As baseline, d85391173658dc6dcbf1acc5edbe331b1296f572 (Mon Jun 20 17:53:28)
|
||||
should be used.
|
||||
|
||||
For Mac:
|
||||
|
||||
+ gdb-increased-dcache-line-size.patch
|
||||
|
||||
For Linux:
|
||||
|
||||
+ gdb-increased-dcache-line-size.patch
|
||||
|
||||
For MinGW:
|
||||
|
||||
+ gdb-increased-dcache-line-size.patch
|
||||
+ gdb-expand-line-sal-maybe.patch
|
||||
|
||||
For Maemo targets:
|
||||
(--target=arm-none-linux-gnueabi)
|
||||
|
||||
+ gdb-increased-dcache-line-size.patch
|
||||
// Don't use this: + gdb-stepping-for-maemo.patch
|
||||
|
||||
For Symbian targets:
|
||||
(--target=arm-none-symbianelf)
|
||||
|
||||
+ gdb-increased-dcache-line-size.patch
|
||||
+ gdb-work-around-trk-single-step.patch
|
||||
|
||||
|
||||
|
||||
Experimental for performance (don't apply):
|
||||
|
||||
gdb-without-dwarf-name-canonicalization.patch
|
||||
|
||||
|
||||
@@ -1,138 +0,0 @@
|
||||
|
||||
This is fixing https://bugreports.qt-project.org/browse/QTCREATORBUG-2004
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
* From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
|
||||
* To: gdb-patches at sourceware dot org
|
||||
* Date: Thu, 29 Jul 2010 00:39:54 +0200
|
||||
* Subject: [patch] Fix internal error on some -O2 -g breakpoints
|
||||
|
||||
Hi,
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=612253
|
||||
(gdb) file ./cc1plus
|
||||
(gdb) break add_new_name_mapping
|
||||
../../gdb/breakpoint.c:6594: internal-error: expand_line_sal_maybe: Assertion
|
||||
`found' failed.
|
||||
|
||||
# Test various conditions of prologue analysis on -O2 -g code. Particularly
|
||||
# when the first command of a function is an inlined function from a different
|
||||
# symtab. The inlined function can have also multiple concrete instances.
|
||||
# The next first line after the inlined function should have two PC ranges.
|
||||
|
||||
expand_line_sal_maybe processes already too complex data it cannot rely on the
|
||||
exact input PC would be found between the output resolved results. There are
|
||||
various bugs I was trying to fix which cause such incorrect multiple results
|
||||
in this case. But even after fixing all of them the code would be too fragile
|
||||
to stay relying on this conditional.
|
||||
|
||||
After this patch GDB will put the breakpoint only _after_ the initial inlined
|
||||
call (=incorrectly) in the testcase; it will no longer crash on it, though.
|
||||
|
||||
The symtab.c==expand_line_sal change is optional. I believe it is a correct
|
||||
change but I do not find it much important. With this change GDB will not
|
||||
only no longer crash but it will even place the breakpoint correctly in the
|
||||
real world cc1plus testcase from the downstream bug above.
|
||||
|
||||
Defining -DLEXICAL still crashes FSF GDB HEAD but just with the
|
||||
symtab.c==expand_line_sal change it no longer crashes.
|
||||
|
||||
Defining -DINLINED crashes FSF GDB HEAD even with the
|
||||
symtab.c==expand_line_sal change, therefore also
|
||||
breakpoint.c==expand_line_sal_maybe is patches in this patches.
|
||||
|
||||
I can remove the LEXICAL part and keep there only the un-#ifdef-ed INLINED
|
||||
one if anyone cares about.
|
||||
|
||||
<background>
|
||||
There remain more issues to solve. skip_prologue_sal should be called for
|
||||
each separate inlined instance (line number alias). It is called now first
|
||||
and then the other instances are being found... Also skip_prologue_sal should
|
||||
be able to _decrease_ the PC, not just increase it as it may be needed from
|
||||
breakpoint_re_set. Just reread_symbols contains bugs causing common GDB
|
||||
crashes on the reload so I did not try to fix skip_prologue_sal for it now.
|
||||
|
||||
Also there is a general problem that GDB now tries to heuristically guess some
|
||||
expected defects of the debuginfo in -O2 -g cases (see "For optimized code" in
|
||||
expand_line_sal), it is there because GCC does not generate proper is_stmt
|
||||
(DW_LNS_negate_stmt). Moreover very magic skip_prologue_sal is there just
|
||||
because GCC does not generate proper DW_LNS_set_prologue_end markers.
|
||||
|
||||
As GCC should produce these markers in a foreseeable future I did not want to
|
||||
try to do anything with these GDB heuristics.
|
||||
|
||||
There remains a question whether the expand_line_sal_maybe patch part should
|
||||
not possibly use just the first breakpoint if ORIGINAL_PC cannot be found.
|
||||
I find it safer this way without much disadvantages, multi-PC breakpoints are
|
||||
very transparent to the user, the other breakpoints are always somehow related
|
||||
and more breakpoints is always better than less of them, IMO.
|
||||
</background>
|
||||
|
||||
|
||||
No regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu.
|
||||
|
||||
The testcase may not necessarily crash current FSF GDB HEAD on other arches.
|
||||
|
||||
|
||||
Thanks,
|
||||
Jan
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
--- a/gdb/breakpoint.c
|
||||
+++ b/gdb/breakpoint.c
|
||||
@@ -7532,7 +7532,6 @@ expand_line_sal_maybe (struct symtab_and_line sal)
|
||||
struct symtabs_and_lines expanded;
|
||||
CORE_ADDR original_pc = sal.pc;
|
||||
char *original_function = NULL;
|
||||
- int found;
|
||||
int i;
|
||||
struct cleanup *old_chain;
|
||||
|
||||
@@ -7616,17 +7615,8 @@ expand_line_sal_maybe (struct symtab_and_line sal)
|
||||
return expanded;
|
||||
}
|
||||
|
||||
- if (original_pc)
|
||||
- {
|
||||
- found = 0;
|
||||
- for (i = 0; i < expanded.nelts; ++i)
|
||||
- if (expanded.sals[i].pc == original_pc)
|
||||
- {
|
||||
- found = 1;
|
||||
- break;
|
||||
- }
|
||||
- gdb_assert (found);
|
||||
- }
|
||||
+ /* ORIGINAL_PC may not be found between EXPANDED.SALS. expand_line_sal may
|
||||
+ have skipped too far. */
|
||||
|
||||
return expanded;
|
||||
}
|
||||
--- a/gdb/symtab.c
|
||||
+++ b/gdb/symtab.c
|
||||
@@ -4750,11 +4750,20 @@ expand_line_sal (struct symtab_and_line sal)
|
||||
blocks = alloca (ret.nelts * sizeof (struct block *));
|
||||
for (i = 0; i < ret.nelts; ++i)
|
||||
{
|
||||
+ struct block *bl;
|
||||
+
|
||||
set_current_program_space (ret.sals[i].pspace);
|
||||
|
||||
- filter[i] = 1;
|
||||
- blocks[i] = block_for_pc_sect (ret.sals[i].pc, ret.sals[i].section);
|
||||
+ /* Place breakpoint only to the first PC in a function, even if some of
|
||||
+ them are in a lexical sub-block. Put it too all the function
|
||||
+ instances incl. the inlined ones. */
|
||||
|
||||
+ bl = block_for_pc_sect (ret.sals[i].pc, ret.sals[i].section);
|
||||
+ while (bl != NULL && BLOCK_FUNCTION (bl) == NULL)
|
||||
+ bl = BLOCK_SUPERBLOCK (bl);
|
||||
+
|
||||
+ filter[i] = 1;
|
||||
+ blocks[i] = bl;
|
||||
}
|
||||
do_cleanups (old_chain);
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
diff --git a/gdb/dcache.c b/gdb/dcache.c
|
||||
index e1386e0..65b1a02 100644
|
||||
--- a/gdb/dcache.c
|
||||
+++ b/gdb/dcache.c
|
||||
@@ -76,7 +76,7 @@
|
||||
/* The size of a cache line. Smaller values reduce the time taken to
|
||||
read a single byte and make the cache more granular, but increase
|
||||
overhead and reduce the effectiveness of the cache as a prefetcher. */
|
||||
-#define LINE_SIZE_POWER 6
|
||||
+#define LINE_SIZE_POWER 8
|
||||
#define LINE_SIZE (1 << LINE_SIZE_POWER)
|
||||
|
||||
/* Each cache block holds LINE_SIZE bytes of data
|
||||
@@ -1,17 +0,0 @@
|
||||
NOTE: This relates to http://sourceware.org/bugzilla/show_bug.cgi?id=11497
|
||||
|
||||
Not clear whether the patch is needed at all.
|
||||
|
||||
--- a/gdb/infrun.c
|
||||
+++ b/gdb/infrun.c
|
||||
@@ -4627,7 +4627,9 @@ process_event_stop_test:
|
||||
|
||||
if (execution_direction != EXEC_REVERSE
|
||||
&& ecs->event_thread->control.step_over_calls == STEP_OVER_UNDEBUGGABLE
|
||||
- && in_solib_dynsym_resolve_code (stop_pc))
|
||||
+ && in_solib_dynsym_resolve_code (stop_pc)
|
||||
+ && !(ecs->event_thread->step_range_start > 1
|
||||
+ && in_solib_dynsym_resolve_code (ecs->event_thread->step_range_start)))
|
||||
{
|
||||
CORE_ADDR pc_after_resolver =
|
||||
gdbarch_skip_solib_resolver (gdbarch, stop_pc);
|
||||
@@ -1,19 +0,0 @@
|
||||
|
||||
This shortcuts the canonicalization of symbol names. This is likely to
|
||||
introduce regressions for setting breakpoints by function names (which
|
||||
is rarely used by IDE users) but speeds up startup by around 15% for a
|
||||
typical Qt application. So disabling it seems to be a good compromise.
|
||||
|
||||
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
|
||||
index a05c946..761fa34 100644
|
||||
--- a/gdb/dwarf2read.c
|
||||
+++ b/gdb/dwarf2read.c
|
||||
@@ -12157,7 +12157,7 @@ static char *
|
||||
dwarf2_canonicalize_name (char *name, struct dwarf2_cu *cu,
|
||||
struct obstack *obstack)
|
||||
{
|
||||
- if (name && cu->language == language_cplus)
|
||||
+ if (0 && name && cu->language == language_cplus)
|
||||
{
|
||||
char *canon_name = cp_canonicalize_string (name);
|
||||
|
||||
@@ -92,21 +92,6 @@ Product {
|
||||
]
|
||||
}
|
||||
|
||||
Group {
|
||||
qbs.installDir: "share/qtcreator/patches"
|
||||
fileTags: ["install"]
|
||||
prefix: "qtcreator/patches/"
|
||||
files: [
|
||||
".gitattributes",
|
||||
"README",
|
||||
"gdb-expand-line-sal-maybe.patch",
|
||||
"gdb-increased-dcache-line-size.patch",
|
||||
"gdb-stepping-for-maemo.patch",
|
||||
"gdb-without-dwarf-name-canonicalization.patch",
|
||||
"gdb-work-around-trk-single-step.patch",
|
||||
]
|
||||
}
|
||||
|
||||
Group {
|
||||
qbs.installDir: "share/qtcreator/qml-type-descriptions"
|
||||
fileTags: ["install"]
|
||||
|
||||
@@ -543,6 +543,7 @@ QtcLibrary {
|
||||
}
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
cpp.linkerFlags: {
|
||||
if (qbs.toolchain === 'mingw') {
|
||||
return ['--enable-auto-import']
|
||||
|
||||
@@ -173,6 +173,7 @@ QtcLibrary {
|
||||
]
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
cpp.includePaths: [
|
||||
".",
|
||||
"../3rdparty",
|
||||
|
||||
@@ -28,6 +28,7 @@ QtcLibrary {
|
||||
]
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
cpp.includePaths: ["."]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ QtcLibrary {
|
||||
]
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
Depends { name: "symbianutils" }
|
||||
cpp.includePaths: [
|
||||
"."
|
||||
|
||||
@@ -60,6 +60,7 @@ QtcLibrary {
|
||||
]
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
cpp.includePaths: ["."]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,6 +103,7 @@ QtcLibrary {
|
||||
]
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
cpp.includePaths: [
|
||||
".",
|
||||
"parser"
|
||||
|
||||
@@ -57,6 +57,7 @@ QtcLibrary {
|
||||
]
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
cpp.includePaths: [
|
||||
"../../shared/symbianutils",
|
||||
"../../shared/json",
|
||||
|
||||
@@ -684,7 +684,7 @@ void QtcProcess::start()
|
||||
prepareCommand(m_command, m_arguments, &command, &arguments, &env, &workDir);
|
||||
setNativeArguments(arguments);
|
||||
if (m_useCtrlCStub) {
|
||||
argList << command;
|
||||
argList << QDir::toNativeSeparators(command);
|
||||
command = QCoreApplication::applicationDirPath() + QLatin1String("/qtcreator_ctrlc_stub.exe");
|
||||
}
|
||||
QProcess::start(command, argList);
|
||||
|
||||
@@ -256,7 +256,7 @@ QtcLibrary {
|
||||
}
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "Qt"; submodules: ["concurrent"] }
|
||||
Depends { name: "Qt"; submodules: ["concurrent", "widgets", "network"] }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,5 +35,8 @@ QtcLibrary {
|
||||
"syssocket.h"
|
||||
]
|
||||
|
||||
ProductModule { cpp.includePaths: "." }
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
cpp.includePaths: "."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ QtcPlugin {
|
||||
]
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
cpp.includePaths: [
|
||||
"."
|
||||
]
|
||||
|
||||
@@ -245,13 +245,14 @@ QtcPlugin {
|
||||
}
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
Depends { name: "Aggregation" }
|
||||
Depends { name: "ExtensionSystem" }
|
||||
Depends { name: "Utils" }
|
||||
cpp.includePaths: [
|
||||
"../..",
|
||||
"../../libs",
|
||||
buildDirectory + "/.obj/Core/actionmanager"
|
||||
product.buildDirectory + "/.obj/Core/actionmanager"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -305,6 +305,7 @@ QtcPlugin {
|
||||
}
|
||||
|
||||
ProductModule {
|
||||
Depends { name: "cpp" }
|
||||
cpp.includePaths: ["."]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -521,7 +521,7 @@ static QList<DebuggerEngineType> enginesForToolChain(const Abi &toolChain,
|
||||
result.push_back(CdbEngineType);
|
||||
} else {
|
||||
result.push_back(CdbEngineType);
|
||||
result.push_back(GdbEngineType);
|
||||
//result.push_back(GdbEngineType);
|
||||
}
|
||||
if (languages & QmlLanguage)
|
||||
result.push_back(QmlEngineType);
|
||||
|
||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 291 B |
@@ -249,7 +249,7 @@ void ProjectListWidget::addProject(Project *project)
|
||||
m_ignoreIndexChange = true;
|
||||
|
||||
QString sortName = fullName(project);
|
||||
int pos = 0;
|
||||
int pos = count();
|
||||
for (int i=0; i < count(); ++i) {
|
||||
Project *p = item(i)->data(Qt::UserRole).value<Project*>();
|
||||
if (projectLesserThan(project, p)) {
|
||||
|
||||
@@ -269,6 +269,9 @@ QList<PropertyInfo> getObjectTypes(const ObjectValue *ov, const ContextPtr &cont
|
||||
if (!local) {
|
||||
const ObjectValue* prototype = ov->prototype(context);
|
||||
|
||||
if (prototype == ov)
|
||||
return list;
|
||||
|
||||
const CppComponentValue * qmlObjectValue = value_cast<CppComponentValue>(prototype);
|
||||
|
||||
if (qmlObjectValue) {
|
||||
|
||||
@@ -5,7 +5,7 @@ import "../QtcPlugin.qbs" as QtcPlugin
|
||||
QtcPlugin {
|
||||
name: "QmlJSEditor"
|
||||
|
||||
Depends { name: "qt"; submodules: ['widgets'] }
|
||||
Depends { name: "qt"; submodules: ['widgets', 'script'] }
|
||||
Depends { name: "Core" }
|
||||
Depends { name: "TextEditor" }
|
||||
Depends { name: "ProjectExplorer" }
|
||||
|
||||
@@ -5,7 +5,7 @@ import "../QtcPlugin.qbs" as QtcPlugin
|
||||
QtcPlugin {
|
||||
name: "QmlJSInspector"
|
||||
|
||||
Depends { name: "qt"; submodules: ['widgets'] }
|
||||
Depends { name: "qt"; submodules: ['widgets', 'quick1'] }
|
||||
Depends { name: "Core" }
|
||||
Depends { name: "Debugger" }
|
||||
Depends { name: "LanguageUtils" }
|
||||
|
||||
@@ -1863,6 +1863,10 @@ void Qt4ProFileNode::applyEvaluate(EvalResult evalResult, bool async)
|
||||
newVarValues[DefinesVar] = m_readerExact->values(QLatin1String("DEFINES"));
|
||||
newVarValues[IncludePathVar] = includePaths(m_readerExact);
|
||||
newVarValues[CppFlagsVar] = m_readerExact->values("QMAKE_CXXFLAGS");
|
||||
newVarValues[CppHeaderVar] = m_readerExact->absoluteFileValues(QLatin1String("HEADERS"),
|
||||
m_projectDir,
|
||||
QStringList() << m_projectDir,
|
||||
0);
|
||||
newVarValues[CppSourceVar] = m_readerExact->absoluteFileValues(QLatin1String("SOURCES"),
|
||||
m_projectDir,
|
||||
QStringList() << m_projectDir,
|
||||
|
||||
@@ -83,6 +83,7 @@ enum Qt4Variable {
|
||||
DefinesVar = 1,
|
||||
IncludePathVar,
|
||||
CppFlagsVar,
|
||||
CppHeaderVar,
|
||||
CppSourceVar,
|
||||
ObjCSourceVar,
|
||||
UiDirVar,
|
||||
@@ -117,7 +118,6 @@ using ProjectExplorer::FileType;
|
||||
|
||||
namespace Internal {
|
||||
class Qt4UiCodeModelSupport;
|
||||
class ProFileReader;
|
||||
class Qt4PriFile;
|
||||
struct InternalNode;
|
||||
}
|
||||
|
||||
@@ -545,6 +545,8 @@ void Qt4Project::updateCppCodeModel()
|
||||
part->cxx11Enabled = tc->compilerFlags(pro->variableValue(CppFlagsVar)) == ToolChain::STD_CXX11;
|
||||
|
||||
part->sourceFiles = pro->variableValue(CppSourceVar);
|
||||
part->sourceFiles += pro->variableValue(CppHeaderVar);
|
||||
part->sourceFiles.prepend(QLatin1String("<configuration>"));
|
||||
pinfo.appendProjectPart(part);
|
||||
|
||||
allFiles += part->sourceFiles;
|
||||
|
||||
@@ -78,7 +78,7 @@ static QString suppressionText(const Error &error)
|
||||
// we take the last stack frame and append the suppression kind, e.g.:
|
||||
// QDebug::operator<<(bool) [Memcheck:Cond]
|
||||
if (!error.stacks().isEmpty() && !error.stacks().first().frames().isEmpty()) {
|
||||
const Frame &frame = error.stacks().first().frames().first();
|
||||
const Frame frame = error.stacks().first().frames().first();
|
||||
|
||||
QString newName;
|
||||
if (!frame.functionName().isEmpty())
|
||||
|
||||
@@ -582,11 +582,24 @@ namespace qbytearray {
|
||||
dummyStatement(&buf1, &buf2, &buf3);
|
||||
}
|
||||
|
||||
void testQByteArray4()
|
||||
{
|
||||
char data[] = { 'H', 'e', 'l', 'l', 'o' };
|
||||
QByteArray ba1 = QByteArray::fromRawData(data, 4);
|
||||
QByteArray ba2 = QByteArray::fromRawData(data + 1, 4);
|
||||
BREAK_HERE;
|
||||
// Check ba1 "Hell" QByteArray.
|
||||
// Check ba2 "ello" QByteArray.
|
||||
// Continue.
|
||||
dummyStatement(&ba1, &ba2, &data);
|
||||
}
|
||||
|
||||
void testQByteArray()
|
||||
{
|
||||
testQByteArray1();
|
||||
testQByteArray2();
|
||||
testQByteArray3();
|
||||
testQByteArray4();
|
||||
}
|
||||
|
||||
} // namespace qbytearray
|
||||
@@ -3372,14 +3385,26 @@ namespace qstring {
|
||||
str += QLatin1Char(0);
|
||||
str += QLatin1Char(1);
|
||||
str += " fat ";
|
||||
str += " World ";
|
||||
str += " World ";
|
||||
str += " World";
|
||||
str.prepend("Prefix: ");
|
||||
BREAK_HERE;
|
||||
// Check str "Hello big, \t\r\n\000\001 fat World World " QString.
|
||||
// Check str "Prefix: Hello big, \t\r\n\000\001 fat World" QString.
|
||||
// Continue.
|
||||
dummyStatement(&str);
|
||||
}
|
||||
|
||||
void testQString2()
|
||||
{
|
||||
QChar data[] = { 'H', 'e', 'l', 'l', 'o' };
|
||||
QString str1 = QString::fromRawData(data, 4);
|
||||
QString str2 = QString::fromRawData(data + 1, 4);
|
||||
BREAK_HERE;
|
||||
// Check str1 "Hell" QString.
|
||||
// Check str2 "ello" QString.
|
||||
// Continue.
|
||||
dummyStatement(&str1, &str2, &data);
|
||||
}
|
||||
|
||||
void stringRefTest(const QString &refstring)
|
||||
{
|
||||
dummyStatement(&refstring);
|
||||
@@ -3410,6 +3435,7 @@ namespace qstring {
|
||||
void testQString()
|
||||
{
|
||||
testQString1();
|
||||
testQString2();
|
||||
testQString3();
|
||||
testQStringQuotes();
|
||||
}
|
||||
|
||||
@@ -284,6 +284,113 @@ def __checkParentAccess__(filePath):
|
||||
# and a list of supported versions as value
|
||||
def getCorrectlyConfiguredTargets():
|
||||
result = {}
|
||||
for tv in iterateQtVersions():
|
||||
for target,version in tv.iteritems():
|
||||
# Dialog sometimes differs from targets' names
|
||||
if target == "Maemo":
|
||||
target = "Maemo5"
|
||||
elif target == "Symbian":
|
||||
target = "Symbian Device"
|
||||
implicitTargets = [target]
|
||||
if target == "Desktop" and platform.system() in ("Linux", "Darwin"):
|
||||
implicitTargets.append("Embedded Linux")
|
||||
for currentTarget in implicitTargets:
|
||||
if currentTarget in result:
|
||||
oldV = result[currentTarget]
|
||||
if version not in oldV:
|
||||
oldV.append(version)
|
||||
result.update({currentTarget:oldV})
|
||||
else:
|
||||
result.update({currentTarget:[version]})
|
||||
test.log("Correctly configured targets: %s" % str(result))
|
||||
return result
|
||||
|
||||
def visibleCheckBoxExists(text):
|
||||
try:
|
||||
findObject("{type='QCheckBox' text='%s' visible='1'}" % text)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
|
||||
# this function verifies if the text matches the given
|
||||
# regex inside expectedTexts
|
||||
# param text must be a single str/unicode
|
||||
# param expectedTexts can be str/unicode/list/tuple
|
||||
def regexVerify(text, expectedTexts):
|
||||
if isinstance(expectedTexts, (str,unicode)):
|
||||
expectedTexts = [expectedTexts]
|
||||
for curr in expectedTexts:
|
||||
pattern = re.compile(curr)
|
||||
if pattern.match(text):
|
||||
return True
|
||||
return False
|
||||
|
||||
def checkDebuggingLibrary(targVersion, targets):
|
||||
# internal function to execute while iterating Qt versions
|
||||
def __checkDebugLibsInternalFunc__(target, version, targVersion, targStrings):
|
||||
built = failed = 0
|
||||
container = ("container=':qt_tabwidget_stackedwidget.QtSupport__Internal__"
|
||||
"QtVersionManager_QtSupport::Internal::QtOptionsPageWidget'")
|
||||
buildLogWindow = ("window={name='QtSupport__Internal__ShowBuildLog' type='QDialog' "
|
||||
"visible='1' windowTitle?='Debugging Helper Build Log*'}")
|
||||
if target in targStrings and version == targVersion:
|
||||
detailsButton = waitForObject("{%s type='Utils::DetailsButton' text='Details' "
|
||||
"visible='1' unnamed='1'}" % container)
|
||||
ensureChecked(detailsButton)
|
||||
gdbHelperStat = waitForObject("{%s type='QLabel' name='gdbHelperStatus' "
|
||||
"visible='1'}" % container)
|
||||
if 'Not yet built.' in str(gdbHelperStat.text):
|
||||
clickButton(waitForObject("{%s type='QPushButton' name='gdbHelperBuildButton' "
|
||||
"text='Build' visible='1'}" % container))
|
||||
buildLog = waitForObject("{type='QPlainTextEdit' name='log' visible='1' %s}" % buildLogWindow)
|
||||
if str(buildLog.plainText).endswith('Build succeeded.'):
|
||||
built += 1
|
||||
else:
|
||||
failed += 1
|
||||
test.fail("Building GDB Helper failed",
|
||||
buildLog.plainText)
|
||||
clickButton(waitForObject("{type='QPushButton' text='Close' unnamed='1' "
|
||||
"visible='1' %s}" % buildLogWindow))
|
||||
else:
|
||||
built += 1
|
||||
ensureChecked(detailsButton, False)
|
||||
return (built, failed)
|
||||
# end of internal function
|
||||
|
||||
tv, builtAndFailedList = iterateQtVersions(False, __checkDebugLibsInternalFunc__, targVersion,
|
||||
QtQuickConstants.getTargetsAsStrings(targets))
|
||||
built = failed = 0
|
||||
for current in builtAndFailedList:
|
||||
if current[0]:
|
||||
built += current[0]
|
||||
if current[1]:
|
||||
failed += current[1]
|
||||
if failed > 0:
|
||||
test.fail("%d of %d GDB Helper compilations failed." % (failed, failed+built))
|
||||
else:
|
||||
test.passes("%d GDB Helper found compiled or successfully built." % built)
|
||||
return failed == 0
|
||||
|
||||
# function that opens Options Dialog and parses the configured Qt versions
|
||||
# param keepOptionsOpen set to True if the Options dialog should stay open when
|
||||
# leaving this function
|
||||
# param additionalFunction pass a function or name of a defined function to execute
|
||||
# for each item on the list of Qt versions
|
||||
# this function must take at least 2 parameters - the first is the target name
|
||||
# and the second the version of the current selected Qt version item
|
||||
# param argsForAdditionalFunc you can specify as much parameters as you want to pass
|
||||
# to additionalFunction from the outside
|
||||
# the function returns a list of dict holding target-version mappings if used without
|
||||
# additionalFunction
|
||||
# WATCH OUT! if you're using the additionalFunction parameter - this function will
|
||||
# return the list mentioned above as well as the returned value(s) from
|
||||
# additionalFunction. You MUST call this function like
|
||||
# result, additionalResult = _iterateQtVersions(...)
|
||||
# where additionalResult is the result of all executions of additionalFunction which
|
||||
# means it is a list of results.
|
||||
def iterateQtVersions(keepOptionsOpen=False, additionalFunction=None, *argsForAdditionalFunc):
|
||||
result = []
|
||||
additionalResult = []
|
||||
invokeMenuItem("Tools", "Options...")
|
||||
waitForObjectItem(":Options_QListView", "Build & Run")
|
||||
clickItem(":Options_QListView", "Build & Run", 14, 15, 0, Qt.LeftButton)
|
||||
@@ -303,29 +410,21 @@ def getCorrectlyConfiguredTargets():
|
||||
if matches:
|
||||
target = matches.group("target").strip()
|
||||
version = matches.group("version").strip()
|
||||
# Dialog sometimes differs from targets' names
|
||||
if target == "Maemo":
|
||||
target = "Maemo5"
|
||||
elif target == "Symbian":
|
||||
target = "Symbian Device"
|
||||
implicitTargets = [target]
|
||||
if target == "Desktop" and platform.system() in ("Linux", "Darwin"):
|
||||
implicitTargets.append("Embedded Linux")
|
||||
for currentTarget in implicitTargets:
|
||||
if currentTarget in result:
|
||||
oldV = result[currentTarget]
|
||||
if version not in oldV:
|
||||
oldV.append(version)
|
||||
result.update({currentTarget:oldV})
|
||||
result.append({target:version})
|
||||
if additionalFunction:
|
||||
try:
|
||||
if isinstance(additionalFunction, (str, unicode)):
|
||||
currResult = globals()[additionalFunction](target, version, *argsForAdditionalFunc)
|
||||
else:
|
||||
result.update({currentTarget:[version]})
|
||||
clickButton(waitForObject(":Options.Cancel_QPushButton"))
|
||||
test.log("Correctly configured targets: %s" % str(result))
|
||||
return result
|
||||
|
||||
def visibleCheckBoxExists(text):
|
||||
try:
|
||||
findObject("{type='QCheckBox' text='%s' visible='1'}" % text)
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
currResult = additionalFunction(target, version, *argsForAdditionalFunc)
|
||||
except:
|
||||
currResult = None
|
||||
test.fatal("Function to additionally execute on Options Dialog could not be found or "
|
||||
"an exception occured while executing it.")
|
||||
additionalResult.append(currResult)
|
||||
if not keepOptionsOpen:
|
||||
clickButton(waitForObject(":Options.Cancel_QPushButton"))
|
||||
if additionalFunction:
|
||||
return result, additionalResult
|
||||
else:
|
||||
return result
|
||||
|
||||