Initial import
commit
239e873a38
@ -0,0 +1,7 @@
|
||||
Here is an unsorted list of known deficiencies of kdbg.
|
||||
|
||||
- Handles only C and C++
|
||||
|
||||
- Cannot handle source file names which contain new-lines or
|
||||
a sequence of the form
|
||||
:[0-9]+:[0-9]+:beg
|
@ -0,0 +1,441 @@
|
||||
Later versions
|
||||
|
||||
Please use the gitweb log at http://repo.or.cz/w/kdbg.git to browse
|
||||
the changes.
|
||||
|
||||
Version 2.0.4
|
||||
|
||||
Fixed encoding of the Czech translation thanks to Jakub Galgonek.
|
||||
|
||||
Added support for QString in Qt4's debug libraries.
|
||||
|
||||
Fixed that the debugger window really comes to the foreground and
|
||||
receives the focus when the debuggee stops at a breakpoint, when this
|
||||
option is on (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=171845).
|
||||
|
||||
Added a filter edit box to the Attach to Process dialog to improve
|
||||
usability.
|
||||
|
||||
Version 2.0.3
|
||||
|
||||
Fixed parsing of gdb output that mentions "operator<<", "operator>>",
|
||||
"operator<", and "operator>" within text delimited by angle brackets <>.
|
||||
This fixes a crash when any such function is disassembled and other
|
||||
misbehaviors.
|
||||
|
||||
Fixed parsing stack frames that mention "operator<<" or "operator<".
|
||||
Thanks to Charles Samuels, who pointed out the problem and provided
|
||||
an initial fix.
|
||||
|
||||
Version 2.0.2
|
||||
|
||||
Fixed stack display for functions in an anonymous namespace and
|
||||
for functions whose names involve template parameter lists (thanks to
|
||||
André Wöbbeking).
|
||||
|
||||
Fixed environment list which would add back the entry from the edit box
|
||||
even if it was just deleted.
|
||||
|
||||
Fixed that the Run/Continue button was enabled while the program was
|
||||
running.
|
||||
|
||||
Fixed parsing of NaN (Not a Number) floating point values.
|
||||
|
||||
Version 2.0.1
|
||||
|
||||
Updated Hungarian translation (thanks to Tamas Szanto).
|
||||
|
||||
Worked around gdb 6.3 crashes at "info line main" command (thanks to
|
||||
Stefan Taferner).
|
||||
|
||||
Updated XSLT debugger parser for xsldbg >= 3.4.0 (by Keith Isdale).
|
||||
|
||||
Version 2.0.0
|
||||
|
||||
References and const types are treated like the base type (thanks to
|
||||
Shaheed).
|
||||
|
||||
Fixed parsing of large arrays with many different values, which were
|
||||
terminated by "...".
|
||||
|
||||
Fixed the kdbg.desktop file: Encoding is UTF-8, install in XDG menu
|
||||
location.
|
||||
|
||||
Fixed PS_COMMAND detection for Solaris' /bin/sh.
|
||||
|
||||
Version 1.9.7
|
||||
|
||||
Added a new animated button in the toolbar.
|
||||
|
||||
Fixed Norwegian translation file names.
|
||||
|
||||
Version 1.9.6
|
||||
|
||||
"<invalid float value>" in register dumps was not parsed correctly.
|
||||
|
||||
Fixed that variable popup location was computed incorrectly if tab
|
||||
width is not 0.
|
||||
|
||||
Updated the manual.
|
||||
|
||||
Implemented printing of Qt4's QStrings.
|
||||
|
||||
Version 1.9.5
|
||||
|
||||
Fixed some issues when the items in the environment variable list
|
||||
are selected.
|
||||
|
||||
Added a command line option to attach to a process (thanks to
|
||||
Matthew Allen for the initial code).
|
||||
|
||||
Fixed the "Using host libthread_db" error message properly.
|
||||
|
||||
Fixed inappropriate icon sizes.
|
||||
|
||||
Version 1.9.4
|
||||
|
||||
Updated the build system to the latest auto* tools.
|
||||
|
||||
Worked around the problem that gdb reports "Using host libthread_db"
|
||||
on Fedora Core when it processes the file command.
|
||||
|
||||
Version 1.9.3
|
||||
|
||||
Improved editing of values; it is now possible to edit variables also
|
||||
in the watch window.
|
||||
|
||||
Version 1.9.2
|
||||
|
||||
The previous security fix only protects against accidents, not attacks,
|
||||
as Matt Zimmerman pointed out. Did it right this time.
|
||||
|
||||
Basic editing of values in the local variables window is available.
|
||||
More refinements are still necessary.
|
||||
|
||||
Version 1.9.1
|
||||
|
||||
Fixed security flaw regarding the program specific debugger command.
|
||||
|
||||
Configurable key bindings.
|
||||
|
||||
Version 1.9.0
|
||||
|
||||
Program arguments that are file names can be browsed for.
|
||||
|
||||
Added XSLT debugging (using xsldbg) by Keith Isdale.
|
||||
|
||||
The program counter can be changed via point and click.
|
||||
|
||||
Improved register formating by Daniel Kristjansson.
|
||||
|
||||
"Orphaned breakpoints", i.e. breakpoints that gdb cannot set
|
||||
immediately, can be set. This helps debug shared libraries and
|
||||
dynamically loaded modules.
|
||||
|
||||
Version 1.2.10
|
||||
|
||||
Fixed the "Using host libthread_db" error message.
|
||||
|
||||
Fixed inappropriate icon sizes.
|
||||
|
||||
Version 1.2.9
|
||||
|
||||
The previous security fix only protects against accidents, not attacks,
|
||||
as Matt Zimmerman pointed out. Did it right this time.
|
||||
|
||||
Version 1.2.8
|
||||
|
||||
Fixed security flaw regarding the program specific debugger command.
|
||||
|
||||
Version 1.2.7
|
||||
|
||||
Fixed parsing of stack frames for recent gdbs.
|
||||
|
||||
Support vector registers (thanks to Daniel Thor Kristjansson for
|
||||
initial code).
|
||||
|
||||
Work around bug in some gdbs which inhibits printing of QString values.
|
||||
|
||||
Version 1.2.6
|
||||
|
||||
Opening the Find dialog no longer toggles a breakpoint.
|
||||
|
||||
Make mouse wheel work (again) in source, variables, and watch windows.
|
||||
|
||||
When a pointer to a struct is expanded the struct is also expanded.
|
||||
|
||||
Improved toolbar and application icons.
|
||||
|
||||
Version 1.2.5
|
||||
|
||||
Now compiles for KDE 3.
|
||||
|
||||
Fixed make install for builddir != srcdir.
|
||||
|
||||
Fixed status bar flicker. This gives a nice speed-up by a factor of 4
|
||||
when the contents of an array of 50 QStrings are displayed!
|
||||
|
||||
Version 1.2.4
|
||||
|
||||
Now compiles for KDE 3 (Beta1).
|
||||
|
||||
Support QString of Qt 3.x.
|
||||
|
||||
Improved (and fixed) the display of arrays with repeated values.
|
||||
|
||||
Fixed crash when a file is reloaded while disassembled code is
|
||||
displayed.
|
||||
|
||||
Fixed parsing of stack frames involving signal handler invocations.
|
||||
|
||||
Version 1.2.3
|
||||
|
||||
Fixed invisible toolbar under KDE 2.x (really, this time, I promise).
|
||||
|
||||
Fixed crash when no line has the cursor (empty files).
|
||||
|
||||
Don't display a blank page when a non-existing file was tried to open.
|
||||
|
||||
Version 1.2.2
|
||||
|
||||
Fixed a special, but common case where removing a breakpoint didn't
|
||||
work but add more on the same line instead (thanks to Ron Lerech).
|
||||
|
||||
Fixed invisible toolbar under KDE 2.1.2 (thanks to Neil Butterworth).
|
||||
|
||||
Fixed compilation for gcc 3.0 (thanks to Ben Burton):
|
||||
|
||||
Fixed make install if srcdir != builddir.
|
||||
|
||||
Changed encoding of German translations (and also Danish, Italian,
|
||||
Norwegian, Romanian, Slovak, Swedish) to UTF-8, which fixes message
|
||||
strings under KDE2 (at least for German - couldn't test the others).
|
||||
|
||||
Version 1.2.1
|
||||
|
||||
Working directory can be browsed for.
|
||||
|
||||
Added context menu to move the selected expression from the local
|
||||
variables window to the watch window.
|
||||
|
||||
Fixed crash when environment variables are removed.
|
||||
|
||||
Fixed problems with trailing backslashes in watched expressions.
|
||||
|
||||
Fixed compilation on FreeBSD (openpty).
|
||||
|
||||
Version 1.2.0
|
||||
|
||||
Translations for: Hungarian, Japanese, Norwegian (Nynorsk), Serbian,
|
||||
Turkish
|
||||
|
||||
Updated the User's Manual (English, Russian (thanks, Ilmar!), German).
|
||||
|
||||
Version 1.1.7beta1
|
||||
|
||||
Improved the program icon; made the installation more KDE2 compliant.
|
||||
|
||||
Enabled mouse wheel scrolling at various places.
|
||||
|
||||
Version 1.1.6
|
||||
|
||||
Added memory display.
|
||||
|
||||
Single-stepping by instruction.
|
||||
|
||||
Watchpoints. Finally! (On Linux/i386 works best with gdb 5!)
|
||||
|
||||
Version 1.1.5
|
||||
|
||||
Made Delete key work in the watch window.
|
||||
|
||||
Breakpoints can be enabled and disabled in the breakpoint list.
|
||||
|
||||
Detach from debugged program on exit (and when new program is debugged).
|
||||
|
||||
Added a list of recently opened executables (thanks to
|
||||
Thomas Sparr <thomas.sparr@kreatel.se>).
|
||||
|
||||
Version 1.1.4
|
||||
|
||||
Fixed endless loop on shutdown.
|
||||
|
||||
Brought in line with KDE 1.91 (KDE 2 beta).
|
||||
|
||||
Version 1.1.3
|
||||
|
||||
Debugging of multi-threaded programs. Requires a gdb that supports
|
||||
multi-threaded programs, like gdb 5.
|
||||
|
||||
Debugger window pops into the foreground when the program stops.
|
||||
|
||||
Made tab width a user-settable option.
|
||||
|
||||
Version 1.1.2
|
||||
|
||||
Display disassembled code.
|
||||
|
||||
Version 1.1.1
|
||||
|
||||
Use the KDE system fixed font for the source code window.
|
||||
|
||||
By default, do not log communication with gdb.
|
||||
|
||||
Added an integrated output window (based on code by Judin Max).
|
||||
|
||||
Program specific settings can be set. In particular: the debugger
|
||||
command (required if you are debugging remote devices), the
|
||||
terminal emulation needed for the program.
|
||||
|
||||
Verison 1.1.0
|
||||
|
||||
Use docking windows thanks to Judin Max <novaprint@mtu-net.ru>.
|
||||
|
||||
Added a register dump window. Based on code by Judin Max.
|
||||
|
||||
Implemented "balloons" (tool tips) that show variable values.
|
||||
|
||||
./configure fix for NetBSD thanks to
|
||||
Berndt Josef Wulf <wulf@ping.net.au>.
|
||||
|
||||
There's now a Swedish translation thanks to
|
||||
Örjan Lindbergh <orjan.lindbergh@telia.com>.
|
||||
|
||||
Version 1.0.2
|
||||
|
||||
Save and restore watched expressions.
|
||||
|
||||
More adjustments for the KRASH release.
|
||||
|
||||
Show <repeat...> count in QStrings like in normal C strings instead
|
||||
of repeating the characters.
|
||||
|
||||
Use QListView instead of KTabListBox.
|
||||
|
||||
Version 1.0.1
|
||||
|
||||
Added a hack to set a remote target. Thanks to
|
||||
Johnny Chan <johnnykc@iprg.nokia.com>.
|
||||
|
||||
Display function arguments. Based on suggestions by Johnny Chan.
|
||||
|
||||
KDE 2 fixes.
|
||||
|
||||
Support builddir != srcdir.
|
||||
|
||||
Version 1.0.0
|
||||
|
||||
Brought up-to-date for latest KDE 2.
|
||||
|
||||
Version 1.0beta3
|
||||
|
||||
Removal of minor misfeatures.
|
||||
|
||||
Prepared for KDE 2 and Qt 2 (it's a configure option:
|
||||
--with-kde-version=2).
|
||||
|
||||
Added Russian documentation (thanks to
|
||||
Ilmar S. Habibulin <ilmar@ints.ru>) and German documentation.
|
||||
|
||||
There is now a Spanish translation thanks to
|
||||
Manuel Soriano <manu@europa3.com>.
|
||||
|
||||
Version 1.0beta2
|
||||
|
||||
Recognize strings with repeated characters: 'x' <repeats 34 times>.
|
||||
|
||||
Fix structs with no (additional) data members and other fixes
|
||||
for gdb 4.18.
|
||||
|
||||
Save window size across sessions.
|
||||
|
||||
There is now an Italian translation thanks to
|
||||
Massimo Morin <mmorin@schedsys.com>.
|
||||
|
||||
Version 1.0beta1
|
||||
|
||||
Fixed non-displaying QString (Qt2) with certain gdb 4.17's (at least
|
||||
mine here, of SuSE 6.1, had a problem :-)
|
||||
|
||||
Fixed cases where gdb commands where executed after debuggee has exited.
|
||||
|
||||
Do not execute gdb commands after an interrupt.
|
||||
|
||||
Updated some translations. Still most are incomplete. Please help!
|
||||
|
||||
There is now a Polish translation thanks to
|
||||
Jacek Wojdel <wojdel@kbs.twi.tudelft.nl>.
|
||||
|
||||
Version 0.3.1
|
||||
|
||||
The working directory for the program being debugged can be set
|
||||
(Execution|Arguments).
|
||||
|
||||
There's now a global options dialog in place (File|Global Options).
|
||||
At the moment the debugger program (which must be gdb, but it could be
|
||||
an experimental gdb version, for example) and the terminal for program
|
||||
output can be specified.
|
||||
|
||||
Fixed Makefiles to support make DESTDIR=/tmp/foo install (which is
|
||||
needed by packagers and to create relocatable RPMs).
|
||||
|
||||
There's now a Danish translation thanks to
|
||||
Steen Rabol <rabol@get2net.dk>.
|
||||
|
||||
Version 0.3.0
|
||||
|
||||
Starting with this version, Qt 1.42 and KDE 1.1 is required.
|
||||
|
||||
Ported to Qt 2.0 and KDE post-1.1! KDbg now runs with both
|
||||
KDE 1.1 (using Qt 1.42) and the latest experimental KDE. You can of
|
||||
course run one version and debug programs written for the other version.
|
||||
|
||||
KDbg can now display Qt 2.0's QString values (which are Unicode
|
||||
strings)!
|
||||
|
||||
Environment variables can be set. Changes become effective the next time
|
||||
the program being debugged is run.
|
||||
|
||||
The breakpoint list has been improved. It disables command buttons at
|
||||
times when it is not possible to change breakpoints. The icons that
|
||||
show the breakpoint status are now the same as those in the source
|
||||
window.
|
||||
|
||||
Popup menus (context menus) for frequently used commands have been added
|
||||
to the source code window (thanks to Tom Nguyen <ttomnguyen@yahoo.com>)
|
||||
|
||||
There's now a Russian translation thanks to
|
||||
Ilmar Habibulin <ilmar@ints.ru>.
|
||||
|
||||
Internal restructuring. These changes are invisible. They just make
|
||||
future extensions less cumbersome.
|
||||
|
||||
Version 0.2.5
|
||||
|
||||
This is the last version that supports Qt 1.33 and KDE 1.0.
|
||||
|
||||
There's now a Czech translation thanks to
|
||||
Martin Spirk <spirk@kla.pvt.cz>.
|
||||
|
||||
Recognize and report when gdb dies unexpectedly. This happens commonly
|
||||
when writing CORBA programs since gdb obviously has problems in
|
||||
debugging C++ classes with virtual base classes.
|
||||
|
||||
Added conditional breakpoints and ignore counts.
|
||||
|
||||
Version 0.2.4
|
||||
|
||||
Added a toolbar button to load the executable. The button to open a
|
||||
source file is still there. I hope it's clear which one does what.
|
||||
|
||||
Attaching to a running process is now possible (Execution|Attach).
|
||||
|
||||
Made more visible when gdb is busy using a gear wheel in the upper right
|
||||
corner of the window like kfm.
|
||||
|
||||
Made the KTreeView widget more flexible by adding a bunch of virtual
|
||||
keywords. (No, this doesn't have any influence on the look and feel of
|
||||
KDbg.) While doing that, I fixed a small repainting bug.
|
||||
|
||||
|
||||
ChangeLog starts here.
|
@ -0,0 +1,29 @@
|
||||
SUBDIRS = kdbg po
|
||||
|
||||
# not a GNU package. You can remove this line, if
|
||||
# have all needed files, that a GNU package needs
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
|
||||
EXTRA_DIST = BUGS ChangeLog-pre-2.2.0 COPYING TODO admin \
|
||||
ReleaseNotes-2.2.0 \
|
||||
ReleaseNotes-2.2.1 \
|
||||
ReleaseNotes-2.2.2
|
||||
|
||||
$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;
|
||||
|
||||
$(top_srcdir)/subdirs:
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs
|
||||
|
||||
$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in
|
||||
@cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4
|
||||
|
||||
MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files
|
||||
|
||||
package-messages:
|
||||
$(MAKE) -f admin/Makefile.common package-messages
|
||||
$(MAKE) -C po merge
|
||||
|
||||
dist-hook:
|
||||
cd $(top_distdir) && perl admin/am_edit -padmin
|
||||
cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs
|
@ -0,0 +1,921 @@
|
||||
# Makefile.in generated by automake 1.10.1 from Makefile.am.
|
||||
# KDE tags expanded automatically by am_edit - $Revision: 483858 $
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = .
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||
$(top_srcdir)/configure COPYING TODO admin/compile \
|
||||
admin/config.guess admin/config.sub admin/depcomp \
|
||||
admin/install-sh admin/ltmain.sh admin/missing \
|
||||
admin/mkinstalldirs admin/ylwrap
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
#>- html-recursive info-recursive install-data-recursive \
|
||||
#>- install-dvi-recursive install-exec-recursive \
|
||||
#>- install-html-recursive install-info-recursive \
|
||||
#>- install-pdf-recursive install-ps-recursive install-recursive \
|
||||
#>- installcheck-recursive installdirs-recursive pdf-recursive \
|
||||
#>- ps-recursive uninstall-recursive
|
||||
#>+ 7
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-dvi-recursive install-exec-recursive \
|
||||
install-html-recursive install-info-recursive \
|
||||
install-pdf-recursive install-ps-recursive install-recursive \
|
||||
installcheck-recursive installdirs-recursive pdf-recursive \
|
||||
ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive
|
||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||
distclean-recursive maintainer-clean-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
#>+ 1
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d $(distdir) \
|
||||
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr $(distdir); }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
ARTSCCONFIG = @ARTSCCONFIG@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTODIRS = @AUTODIRS@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CONF_FILES = @CONF_FILES@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DCOPIDL = @DCOPIDL@
|
||||
DCOPIDL2CPP = @DCOPIDL2CPP@
|
||||
DCOPIDLNG = @DCOPIDLNG@
|
||||
DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
ENABLE_PERMISSIVE_FLAG = @ENABLE_PERMISSIVE_FLAG@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
FRAMEWORK_COREAUDIO = @FRAMEWORK_COREAUDIO@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GREP = @GREP@
|
||||
HAVE_GCC_VISIBILITY = @HAVE_GCC_VISIBILITY@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@
|
||||
KCONFIG_COMPILER = @KCONFIG_COMPILER@
|
||||
KDECONFIG = @KDECONFIG@
|
||||
KDE_CHECK_PLUGIN = @KDE_CHECK_PLUGIN@
|
||||
KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@
|
||||
KDE_INCLUDES = @KDE_INCLUDES@
|
||||
KDE_LDFLAGS = @KDE_LDFLAGS@
|
||||
KDE_MT_LDFLAGS = @KDE_MT_LDFLAGS@
|
||||
KDE_MT_LIBS = @KDE_MT_LIBS@
|
||||
KDE_NO_UNDEFINED = @KDE_NO_UNDEFINED@
|
||||
KDE_PLUGIN = @KDE_PLUGIN@
|
||||
KDE_RPATH = @KDE_RPATH@
|
||||
KDE_USE_CLOSURE_FALSE = @KDE_USE_CLOSURE_FALSE@
|
||||
KDE_USE_CLOSURE_TRUE = @KDE_USE_CLOSURE_TRUE@
|
||||
KDE_USE_FINAL_FALSE = @KDE_USE_FINAL_FALSE@
|
||||
KDE_USE_FINAL_TRUE = @KDE_USE_FINAL_TRUE@
|
||||
KDE_USE_FPIE = @KDE_USE_FPIE@
|
||||
KDE_USE_NMCHECK_FALSE = @KDE_USE_NMCHECK_FALSE@
|
||||
KDE_USE_NMCHECK_TRUE = @KDE_USE_NMCHECK_TRUE@
|
||||
KDE_USE_PIE = @KDE_USE_PIE@
|
||||
KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LDFLAGS_AS_NEEDED = @LDFLAGS_AS_NEEDED@
|
||||
LDFLAGS_NEW_DTAGS = @LDFLAGS_NEW_DTAGS@
|
||||
LIBCOMPAT = @LIBCOMPAT@
|
||||
LIBCRYPT = @LIBCRYPT@
|
||||
LIBDL = @LIBDL@
|
||||
LIBJPEG = @LIBJPEG@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBPNG = @LIBPNG@
|
||||
LIBPTHREAD = @LIBPTHREAD@
|
||||
LIBRESOLV = @LIBRESOLV@
|
||||
LIBS = @LIBS@
|
||||
LIBSM = @LIBSM@
|
||||
LIBSOCKET = @LIBSOCKET@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBUCB = @LIBUCB@
|
||||
LIBUTIL = @LIBUTIL@
|
||||
LIBZ = @LIBZ@
|
||||
LIB_KAB = @LIB_KAB@
|
||||
LIB_KABC = @LIB_KABC@
|
||||
LIB_KDECORE = @LIB_KDECORE@
|
||||
LIB_KDED = @LIB_KDED@
|
||||
LIB_KDEPIM = @LIB_KDEPIM@
|
||||
LIB_KDEPRINT = @LIB_KDEPRINT@
|
||||
LIB_KDEUI = @LIB_KDEUI@
|
||||
LIB_KDNSSD = @LIB_KDNSSD@
|
||||
LIB_KFILE = @LIB_KFILE@
|
||||
LIB_KFM = @LIB_KFM@
|
||||
LIB_KHTML = @LIB_KHTML@
|
||||
LIB_KIMPROXY = @LIB_KIMPROXY@
|
||||
LIB_KIO = @LIB_KIO@
|
||||
LIB_KJS = @LIB_KJS@
|
||||
LIB_KNEWSTUFF = @LIB_KNEWSTUFF@
|
||||
LIB_KPARTS = @LIB_KPARTS@
|
||||
LIB_KSPELL = @LIB_KSPELL@
|
||||
LIB_KSYCOCA = @LIB_KSYCOCA@
|
||||
LIB_KUNITTEST = @LIB_KUNITTEST@
|
||||
LIB_KUTILS = @LIB_KUTILS@
|
||||
LIB_POLL = @LIB_POLL@
|
||||
LIB_QPE = @LIB_QPE@
|
||||
LIB_QT = @LIB_QT@
|
||||
LIB_SMB = @LIB_SMB@
|
||||
LIB_X11 = @LIB_X11@
|
||||
LIB_XEXT = @LIB_XEXT@
|
||||
LIB_XRENDER = @LIB_XRENDER@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MAKEKDEWIDGETS = @MAKEKDEWIDGETS@
|
||||
MCOPIDL = @MCOPIDL@
|
||||
MEINPROC = @MEINPROC@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
MOC = @MOC@
|
||||
MSGFMT = @MSGFMT@
|
||||
NOOPT_CFLAGS = @NOOPT_CFLAGS@
|
||||
NOOPT_CXXFLAGS = @NOOPT_CXXFLAGS@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PERL = @PERL@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PS_COMMAND = @PS_COMMAND@
|
||||
QTE_NORTTI = @QTE_NORTTI@
|
||||
QT_INCLUDES = @QT_INCLUDES@
|
||||
QT_LDFLAGS = @QT_LDFLAGS@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
TOPSUBDIRS = @TOPSUBDIRS@
|
||||
UIC = @UIC@
|
||||
UIC_TR = @UIC_TR@
|
||||
USER_INCLUDES = @USER_INCLUDES@
|
||||
USER_LDFLAGS = @USER_LDFLAGS@
|
||||
USE_EXCEPTIONS = @USE_EXCEPTIONS@
|
||||
USE_RTTI = @USE_RTTI@
|
||||
USE_THREADS = @USE_THREADS@
|
||||
VERSION = @VERSION@
|
||||
WOVERLOADED_VIRTUAL = @WOVERLOADED_VIRTUAL@
|
||||
XGETTEXT = @XGETTEXT@
|
||||
XMKMF = @XMKMF@
|
||||
XMLLINT = @XMLLINT@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_INCLUDES = @X_INCLUDES@
|
||||
X_LDFLAGS = @X_LDFLAGS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
X_RPATH = @X_RPATH@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
all_includes = @all_includes@
|
||||
all_libraries = @all_libraries@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
kde_appsdir = @kde_appsdir@
|
||||
kde_bindir = @kde_bindir@
|
||||
kde_confdir = @kde_confdir@
|
||||
kde_datadir = @kde_datadir@
|
||||
kde_htmldir = @kde_htmldir@
|
||||
kde_icondir = @kde_icondir@
|
||||
kde_includes = @kde_includes@
|
||||
kde_kcfgdir = @kde_kcfgdir@
|
||||
kde_libraries = @kde_libraries@
|
||||
kde_libs_htmldir = @kde_libs_htmldir@
|
||||
kde_libs_prefix = @kde_libs_prefix@
|
||||
kde_locale = @kde_locale@
|
||||
kde_mimedir = @kde_mimedir@
|
||||
kde_moduledir = @kde_moduledir@
|
||||
kde_qtver = @kde_qtver@
|
||||
kde_servicesdir = @kde_servicesdir@
|
||||
kde_servicetypesdir = @kde_servicetypesdir@
|
||||
kde_sounddir = @kde_sounddir@
|
||||
kde_styledir = @kde_styledir@
|
||||
kde_templatesdir = @kde_templatesdir@
|
||||
kde_wallpaperdir = @kde_wallpaperdir@
|
||||
kde_widgetdir = @kde_widgetdir@
|
||||
kdeinitdir = @kdeinitdir@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
qt_includes = @qt_includes@
|
||||
qt_libraries = @qt_libraries@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
x_includes = @x_includes@
|
||||
x_libraries = @x_libraries@
|
||||
xdg_appsdir = @xdg_appsdir@
|
||||
xdg_directorydir = @xdg_directorydir@
|
||||
xdg_menudir = @xdg_menudir@
|
||||
SUBDIRS = kdbg po
|
||||
|
||||
# not a GNU package. You can remove this line, if
|
||||
# have all needed files, that a GNU package needs
|
||||
AUTOMAKE_OPTIONS = foreign
|
||||
EXTRA_DIST = BUGS ChangeLog-pre-2.2.0 COPYING TODO admin \
|
||||
ReleaseNotes-2.2.0 \
|
||||
ReleaseNotes-2.2.1 \
|
||||
ReleaseNotes-2.2.2
|
||||
|
||||
MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files
|
||||
#>- all: config.h
|
||||
#>+ 1
|
||||
all: docs-am config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
#>- @for dep in $?; do \
|
||||
#>- case '$(am__configure_deps)' in \
|
||||
#>- *$$dep*) \
|
||||
#>- echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
|
||||
#>- cd $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
#>- && exit 0; \
|
||||
#>- exit 1;; \
|
||||
#>- esac; \
|
||||
#>- done; \
|
||||
#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
#>- cd $(top_srcdir) && \
|
||||
#>- $(AUTOMAKE) --foreign Makefile
|
||||
#>+ 14
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
|
||||
( \
|
||||
cd $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
) || exit 1; echo ' cd $(top_srcdir) && perl admin/am_edit -padmin '; cd $(top_srcdir) && perl admin/am_edit -padmin && exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --foreign Makefile
|
||||
cd $(top_srcdir) && perl admin/am_edit -padmin Makefile.in
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
#>- cd $(srcdir) && $(AUTOCONF)
|
||||
#>+ 2
|
||||
cd $(srcdir) && rm -f configure
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h1; \
|
||||
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
cd $(top_srcdir) && $(AUTOHEADER)
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
distclean-libtool:
|
||||
-rm -f libtool
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
$(RECURSIVE_CLEAN_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
test -d $(distdir) || mkdir $(distdir)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
am__remove_distdir=: \
|
||||
am__skip_length_check=: \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
||||
dist-hook
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-lzma: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lzma*) \
|
||||
unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& cd $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@cd $(distuninstallcheck_dir) \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
||||
#>- clean: clean-recursive
|
||||
#>+ 1
|
||||
clean: kde-rpo-clean clean-recursive
|
||||
|
||||
#>- clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
#>+ 1
|
||||
clean-am: clean-bcheck clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-recursive
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-recursive
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-recursive
|
||||
|
||||
install-ps: install-ps-recursive
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
|
||||
install-strip
|
||||
|
||||
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
|
||||
all all-am am--refresh check check-am clean clean-generic \
|
||||
clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
|
||||
dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-zip \
|
||||
distcheck distclean distclean-generic distclean-hdr \
|
||||
distclean-libtool distclean-tags distcleancheck distdir \
|
||||
distuninstallcheck dvi dvi-am html html-am info info-am \
|
||||
install install-am install-data install-data-am install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-info install-info-am install-man \
|
||||
install-pdf install-pdf-am install-ps install-ps-am \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
||||
ps ps-am tags tags-recursive uninstall uninstall-am
|
||||
|
||||
|
||||
$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;
|
||||
|
||||
$(top_srcdir)/subdirs:
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs
|
||||
|
||||
$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in
|
||||
@cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4
|
||||
|
||||
package-messages:
|
||||
$(MAKE) -f admin/Makefile.common package-messages
|
||||
$(MAKE) -C po merge
|
||||
|
||||
dist-hook:
|
||||
cd $(top_distdir) && perl admin/am_edit -padmin
|
||||
cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
|
||||
clean-bcheck:
|
||||
rm -f *.bchecktest.cc *.bchecktest.cc.class a.out
|
||||
|
||||
bcheck: bcheck-recursive
|
||||
|
||||
bcheck-am:
|
||||
@for i in ; do \
|
||||
if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \
|
||||
echo "int main() {return 0;}" > $$i.bchecktest.cc ; \
|
||||
echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \
|
||||
echo "$$i"; \
|
||||
if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \
|
||||
rm -f $$i.bchecktest.cc; exit 1; \
|
||||
fi ; \
|
||||
echo "" >> $$i.bchecktest.cc.class; \
|
||||
perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \
|
||||
rm -f a.out; \
|
||||
fi ; \
|
||||
done
|
||||
|
||||
|
||||
|
||||
#>+ 2
|
||||
KDE_DIST=stamp-h.in subdirs Makefile.in configure.files config.h.in configure.in configure.in.mid kdbg.spec aclocal.m4 configure.in.in Makefile.am configure acinclude.m4 autogen.sh
|
||||
|
||||
#>+ 2
|
||||
docs-am:
|
||||
|
||||
#>+ 7
|
||||
force-reedit:
|
||||
\
|
||||
cd $(srcdir) && $(AUTOMAKE) --foreign \
|
||||
|
||||
cd $(top_srcdir) && perl admin/am_edit -padmin Makefile.in
|
||||
|
||||
|
||||
#>+ 21
|
||||
clean-bcheck:
|
||||
rm -f *.bchecktest.cc *.bchecktest.cc.class a.out
|
||||
|
||||
bcheck: bcheck-recursive
|
||||
|
||||
bcheck-am:
|
||||
@for i in ; do \
|
||||
if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \
|
||||
echo "int main() {return 0;}" > $$i.bchecktest.cc ; \
|
||||
echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \
|
||||
echo "$$i"; \
|
||||
if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \
|
||||
rm -f $$i.bchecktest.cc; exit 1; \
|
||||
fi ; \
|
||||
echo "" >> $$i.bchecktest.cc.class; \
|
||||
perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \
|
||||
rm -f a.out; \
|
||||
fi ; \
|
||||
done
|
||||
|
||||
|
||||
#>+ 3
|
||||
final:
|
||||
$(MAKE) all-am
|
||||
|
||||
#>+ 3
|
||||
final-install:
|
||||
$(MAKE) install-am
|
||||
|
||||
#>+ 3
|
||||
no-final:
|
||||
$(MAKE) all-am
|
||||
|
||||
#>+ 3
|
||||
no-final-install:
|
||||
$(MAKE) install-am
|
||||
|
||||
#>+ 3
|
||||
kde-rpo-clean:
|
||||
-rm -f *.rpo
|
||||
|
||||
#>+ 3
|
||||
nmcheck:
|
||||
nmcheck-am: nmcheck
|
@ -0,0 +1,19 @@
|
||||
This is KDbg, a graphical user interface around gdb using
|
||||
KDE, the K Desktop Environment.
|
||||
|
||||
To install:
|
||||
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
|
||||
Problem reports as well as success stories are welcome!
|
||||
|
||||
The homepage is at
|
||||
|
||||
http://www.kdbg.org/
|
||||
|
||||
You'll find the most recent version of KDbg there as well as
|
||||
other useful information concerning debugging.
|
||||
|
||||
Johannes Sixt <j6t@kdbg.org>
|
@ -0,0 +1,36 @@
|
||||
KDbg Release Notes for version 2.2.0
|
||||
====================================
|
||||
|
||||
The 2.2.x series is still based on Qt 3 and KDE 3.
|
||||
|
||||
Changes since 2.1.1
|
||||
-------------------
|
||||
|
||||
Features:
|
||||
|
||||
- Source code windows have now a tab attached, which makes switching
|
||||
source files much easier.
|
||||
|
||||
- Source code windows now show line numbers at the left.
|
||||
|
||||
- There are now "Find Next" and "Find Previous" commands with shortcuts
|
||||
F3 and Shift+F3.
|
||||
|
||||
- Improved support of template types in the type tables (which are used
|
||||
to show structure members next to a structure variable). Notably, the
|
||||
number of elements in STL and Qt collection classes are shown.
|
||||
|
||||
- Arguments for the debugged program can be passed on KDbg's command line.
|
||||
|
||||
Bug fixes
|
||||
|
||||
- An incorrect terminal command string setting could crash KDbg if it
|
||||
contained format specifiers other than exactly one '%s'.
|
||||
|
||||
- The format specifier in the memory dump window was not correctly
|
||||
preserved when the expression is changed.
|
||||
|
||||
- Setting a conditional breakpoint could crash KDbg.
|
||||
|
||||
- Using Attach on systems that use the simplified Attach to Process dialog
|
||||
could crash KDbg.
|
@ -0,0 +1,23 @@
|
||||
KDbg Release Notes for version 2.2.1
|
||||
====================================
|
||||
|
||||
The 2.2.x series is still based on Qt 3 and KDE 3.
|
||||
|
||||
Changes since 2.2.0
|
||||
-------------------
|
||||
|
||||
Bug fixes
|
||||
|
||||
- Compilation with newer glibc failed.
|
||||
|
||||
- A crash could occur when the variable window was updated.
|
||||
|
||||
- A crash when command line switch -a was used together with a non-existing
|
||||
executable name.
|
||||
|
||||
- Syntax highlighting was applied to all files, not just C/C++.
|
||||
|
||||
- The display was incorrect when a file was reloaded that had disassembly
|
||||
lines visible.
|
||||
|
||||
There are also some minor documentation fixes.
|
@ -0,0 +1,11 @@
|
||||
KDbg Release Notes for version 2.2.2
|
||||
====================================
|
||||
|
||||
The 2.2.x series is still based on Qt 3 and KDE 3.
|
||||
|
||||
Changes since 2.2.1
|
||||
-------------------
|
||||
|
||||
There is only one bug fix:
|
||||
|
||||
- An error message was shown instead of assembler code when gdb 7.1 was used.
|
@ -0,0 +1,44 @@
|
||||
7. Show a list of files for the executable.
|
||||
|
||||
9. Use gnuclient to show source code in emacs.
|
||||
|
||||
10. Provide formatting options in watch window via mouse, not /FMT.
|
||||
|
||||
13. Remember which subtrees have been expanded even when function is left and
|
||||
reentered.
|
||||
|
||||
14. Speed up direct members by reusing values that are already available in
|
||||
members.
|
||||
|
||||
19. Improve support of breakpoints in source files having directories in their
|
||||
names.
|
||||
|
||||
22. Allow to change whether signals are handled or ignored.
|
||||
|
||||
24. Allow to view fewer or more bytes in the memory dump. Beautify the display.
|
||||
|
||||
25. Automatic single-stepping by instruction when a source line is disassembled.
|
||||
|
||||
26. Let the user hide some members of certain structures (on a per-type basis).
|
||||
The parent indicates whether all members are visible. Provide a context menu
|
||||
to display the hidden entries. Save the settings somewhere.
|
||||
|
||||
28. Better support for remote debugging and special versions of gdb, e.g.
|
||||
"target pilot localhost:2000".
|
||||
|
||||
29. "Crash report" function: Stack trace with excerpts of the source code and
|
||||
variable dumps for every frame.
|
||||
|
||||
30. Grey out watch window expressions if there are variables that are not
|
||||
in scope.
|
||||
|
||||
31. Show the memory dump in a combined ASCII and hex view.
|
||||
|
||||
32. Allow to manipulate memory in the memory dump window
|
||||
|
||||
33. Clear the status bar when the program is (re-)started (because if this takes
|
||||
some time, you don't know whether KDbg does something.)
|
||||
|
||||
35. Allow to copy variable values to the clipboard.
|
||||
|
||||
36.
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,881 @@
|
||||
# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
m4_if(AC_AUTOCONF_VERSION, [2.63],,
|
||||
[m4_warning([this file was generated for autoconf 2.63.
|
||||
You have another version of autoconf. It may work, but is not guaranteed to.
|
||||
If you have problems, you may need to regenerate the build system entirely.
|
||||
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
||||
|
||||
# Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_AUTOMAKE_VERSION(VERSION)
|
||||
# ----------------------------
|
||||
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||
# generated from the m4 files accompanying Automake X.Y.
|
||||
# (This private macro should not be called outside this file.)
|
||||
AC_DEFUN([AM_AUTOMAKE_VERSION],
|
||||
[am__api_version='1.10'
|
||||
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||
dnl require some minimum version. Point them to the right macro.
|
||||
m4_if([$1], [1.10.1], [],
|
||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||
])
|
||||
|
||||
# _AM_AUTOCONF_VERSION(VERSION)
|
||||
# -----------------------------
|
||||
# aclocal traces this macro to find the Autoconf version.
|
||||
# This is a private macro too. Using m4_define simplifies
|
||||
# the logic in aclocal, which can simply ignore this definition.
|
||||
m4_define([_AM_AUTOCONF_VERSION], [])
|
||||
|
||||
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
||||
# -------------------------------
|
||||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||
[AM_AUTOMAKE_VERSION([1.10.1])dnl
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
|
||||
|
||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
||||
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
||||
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
|
||||
#
|
||||
# Of course, Automake must honor this variable whenever it calls a
|
||||
# tool from the auxiliary directory. The problem is that $srcdir (and
|
||||
# therefore $ac_aux_dir as well) can be either absolute or relative,
|
||||
# depending on how configure is run. This is pretty annoying, since
|
||||
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
|
||||
# source directory, any form will work fine, but in subdirectories a
|
||||
# relative path needs to be adjusted first.
|
||||
#
|
||||
# $ac_aux_dir/missing
|
||||
# fails when called from a subdirectory if $ac_aux_dir is relative
|
||||
# $top_srcdir/$ac_aux_dir/missing
|
||||
# fails if $ac_aux_dir is absolute,
|
||||
# fails when called from a subdirectory in a VPATH build with
|
||||
# a relative $ac_aux_dir
|
||||
#
|
||||
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
|
||||
# are both prefixed by $srcdir. In an in-source build this is usually
|
||||
# harmless because $srcdir is `.', but things will broke when you
|
||||
# start a VPATH build or use an absolute $srcdir.
|
||||
#
|
||||
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
|
||||
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
|
||||
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
|
||||
# and then we would define $MISSING as
|
||||
# MISSING="\${SHELL} $am_aux_dir/missing"
|
||||
# This will work as long as MISSING is not called from configure, because
|
||||
# unfortunately $(top_srcdir) has no meaning in configure.
|
||||
# However there are other variables, like CC, which are often used in
|
||||
# configure, and could therefore not use this "fixed" $ac_aux_dir.
|
||||
#
|
||||
# Another solution, used here, is to always expand $ac_aux_dir to an
|
||||
# absolute PATH. The drawback is that using absolute paths prevent a
|
||||
# configured tree to be moved without reconfiguration.
|
||||
|
||||
AC_DEFUN([AM_AUX_DIR_EXPAND],
|
||||
[dnl Rely on autoconf to set up CDPATH properly.
|
||||
AC_PREREQ([2.50])dnl
|
||||
# expand $ac_aux_dir to an absolute path
|
||||
am_aux_dir=`cd $ac_aux_dir && pwd`
|
||||
])
|
||||
|
||||
# AM_CONDITIONAL -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 8
|
||||
|
||||
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
|
||||
# -------------------------------------
|
||||
# Define a conditional.
|
||||
AC_DEFUN([AM_CONDITIONAL],
|
||||
[AC_PREREQ(2.52)dnl
|
||||
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
|
||||
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
|
||||
AC_SUBST([$1_TRUE])dnl
|
||||
AC_SUBST([$1_FALSE])dnl
|
||||
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
|
||||
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
|
||||
if $2; then
|
||||
$1_TRUE=
|
||||
$1_FALSE='#'
|
||||
else
|
||||
$1_TRUE='#'
|
||||
$1_FALSE=
|
||||
fi
|
||||
AC_CONFIG_COMMANDS_PRE(
|
||||
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
|
||||
AC_MSG_ERROR([[conditional "$1" was never defined.
|
||||
Usually this means the macro was only invoked conditionally.]])
|
||||
fi])])
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 9
|
||||
|
||||
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
|
||||
# written in clear, in which case automake, when reading aclocal.m4,
|
||||
# will think it sees a *use*, and therefore will trigger all it's
|
||||
# C support machinery. Also note that it means that autoscan, seeing
|
||||
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
|
||||
|
||||
|
||||
# _AM_DEPENDENCIES(NAME)
|
||||
# ----------------------
|
||||
# See how the compiler implements dependency checking.
|
||||
# NAME is "CC", "CXX", "GCJ", or "OBJC".
|
||||
# We try a few techniques and use that to set a single cache variable.
|
||||
#
|
||||
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
|
||||
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
|
||||
# dependency, and given that the user is not expected to run this macro,
|
||||
# just rely on AC_PROG_CC.
|
||||
AC_DEFUN([_AM_DEPENDENCIES],
|
||||
[AC_REQUIRE([AM_SET_DEPDIR])dnl
|
||||
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
|
||||
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
|
||||
AC_REQUIRE([AM_DEP_TRACK])dnl
|
||||
|
||||
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
|
||||
[$1], CXX, [depcc="$CXX" am_compiler_list=],
|
||||
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
|
||||
[$1], UPC, [depcc="$UPC" am_compiler_list=],
|
||||
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
|
||||
[depcc="$$1" am_compiler_list=])
|
||||
|
||||
AC_CACHE_CHECK([dependency style of $depcc],
|
||||
[am_cv_$1_dependencies_compiler_type],
|
||||
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
|
||||
# We make a subdir and do the tests there. Otherwise we can end up
|
||||
# making bogus files that we don't know about and never remove. For
|
||||
# instance it was reported that on HP-UX the gcc test will end up
|
||||
# making a dummy file named `D' -- because `-MD' means `put the output
|
||||
# in D'.
|
||||
mkdir conftest.dir
|
||||
# Copy depcomp to subdir because otherwise we won't find it if we're
|
||||
# using a relative directory.
|
||||
cp "$am_depcomp" conftest.dir
|
||||
cd conftest.dir
|
||||
# We will build objects and dependencies in a subdirectory because
|
||||
# it helps to detect inapplicable dependency modes. For instance
|
||||
# both Tru64's cc and ICC support -MD to output dependencies as a
|
||||
# side effect of compilation, but ICC will put the dependencies in
|
||||
# the current directory while Tru64 will put them in the object
|
||||
# directory.
|
||||
mkdir sub
|
||||
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
if test "$am_compiler_list" = ""; then
|
||||
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
|
||||
fi
|
||||
for depmode in $am_compiler_list; do
|
||||
# Setup a source with many dependencies, because some compilers
|
||||
# like to wrap large dependency lists on column 80 (with \), and
|
||||
# we should not choose a depcomp mode which is confused by this.
|
||||
#
|
||||
# We need to recreate these files for each test, as the compiler may
|
||||
# overwrite some of them when testing with obscure command lines.
|
||||
# This happens at least with the AIX C compiler.
|
||||
: > sub/conftest.c
|
||||
for i in 1 2 3 4 5 6; do
|
||||
echo '#include "conftst'$i'.h"' >> sub/conftest.c
|
||||
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
|
||||
# Solaris 8's {/usr,}/bin/sh.
|
||||
touch sub/conftst$i.h
|
||||
done
|
||||
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
|
||||
|
||||
case $depmode in
|
||||
nosideeffect)
|
||||
# after this tag, mechanisms are not by side-effect, so they'll
|
||||
# only be used when explicitly requested
|
||||
if test "x$enable_dependency_tracking" = xyes; then
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
none) break ;;
|
||||
esac
|
||||
# We check with `-c' and `-o' for the sake of the "dashmstdout"
|
||||
# mode. It turns out that the SunPro C++ compiler does not properly
|
||||
# handle `-M -o', and we need to detect this.
|
||||
if depmode=$depmode \
|
||||
source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
|
||||
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
|
||||
$SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
|
||||
>/dev/null 2>conftest.err &&
|
||||
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
|
||||
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
|
||||
# icc doesn't choke on unknown options, it will just issue warnings
|
||||
# or remarks (even with -Werror). So we grep stderr for any message
|
||||
# that says an option was ignored or not supported.
|
||||
# When given -MP, icc 7.0 and 7.1 complain thusly:
|
||||
# icc: Command line warning: ignoring option '-M'; no argument required
|
||||
# The diagnosis changed in icc 8.0:
|
||||
# icc: Command line remark: option '-MP' not supported
|
||||
if (grep 'ignoring option' conftest.err ||
|
||||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
|
||||
am_cv_$1_dependencies_compiler_type=$depmode
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
cd ..
|
||||
rm -rf conftest.dir
|
||||
else
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
fi
|
||||
])
|
||||
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
|
||||
AM_CONDITIONAL([am__fastdep$1], [
|
||||
test "x$enable_dependency_tracking" != xno \
|
||||
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
|
||||
])
|
||||
|
||||
|
||||
# AM_SET_DEPDIR
|
||||
# -------------
|
||||
# Choose a directory name for dependency files.
|
||||
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
|
||||
AC_DEFUN([AM_SET_DEPDIR],
|
||||
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
|
||||
])
|
||||
|
||||
|
||||
# AM_DEP_TRACK
|
||||
# ------------
|
||||
AC_DEFUN([AM_DEP_TRACK],
|
||||
[AC_ARG_ENABLE(dependency-tracking,
|
||||
[ --disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors])
|
||||
if test "x$enable_dependency_tracking" != xno; then
|
||||
am_depcomp="$ac_aux_dir/depcomp"
|
||||
AMDEPBACKSLASH='\'
|
||||
fi
|
||||
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
|
||||
AC_SUBST([AMDEPBACKSLASH])dnl
|
||||
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
|
||||
])
|
||||
|
||||
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
#serial 3
|
||||
|
||||
# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# ------------------------------
|
||||
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[for mf in $CONFIG_FILES; do
|
||||
# Strip MF so we end up with the name of the file.
|
||||
mf=`echo "$mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile or not.
|
||||
# We used to match only the files named `Makefile.in', but
|
||||
# some people rename them; so instead we look at the file content.
|
||||
# Grep'ing the first line is not enough: some people post-process
|
||||
# each Makefile.in and add a new line on top of each file to say so.
|
||||
# Grep'ing the whole file is not good either: AIX grep has a line
|
||||
# limit of 2048, but all sed's we know have understand at least 4000.
|
||||
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
|
||||
dirpart=`AS_DIRNAME("$mf")`
|
||||
else
|
||||
continue
|
||||
fi
|
||||
# Extract the definition of DEPDIR, am__include, and am__quote
|
||||
# from the Makefile without running `make'.
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
||||
test -z "am__include" && continue
|
||||
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
||||
# When using ansi2knr, U may be empty or an underscore; expand it
|
||||
U=`sed -n 's/^U = //p' < "$mf"`
|
||||
# Find all dependency output files, they are included files with
|
||||
# $(DEPDIR) in their names. We invoke sed twice because it is the
|
||||
# simplest approach to changing $(DEPDIR) to its actual value in the
|
||||
# expansion.
|
||||
for file in `sed -n "
|
||||
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
||||
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
||||
# Make sure the directory exists.
|
||||
test -f "$dirpart/$file" && continue
|
||||
fdir=`AS_DIRNAME(["$file"])`
|
||||
AS_MKDIR_P([$dirpart/$fdir])
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
done
|
||||
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
|
||||
|
||||
# AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# -----------------------------
|
||||
# This macro should only be invoked once -- use via AC_REQUIRE.
|
||||
#
|
||||
# This code is only required when automatic dependency tracking
|
||||
# is enabled. FIXME. This creates each `.P' file that we will
|
||||
# need in order to bootstrap the dependency handling code.
|
||||
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AC_CONFIG_COMMANDS([depfiles],
|
||||
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
|
||||
])
|
||||
|
||||
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 8
|
||||
|
||||
# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
|
||||
AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
|
||||
|
||||
# Do all the work for Automake. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 13
|
||||
|
||||
# This macro actually does too much. Some checks are only needed if
|
||||
# your package does certain things. But this isn't really a big deal.
|
||||
|
||||
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
|
||||
# AM_INIT_AUTOMAKE([OPTIONS])
|
||||
# -----------------------------------------------
|
||||
# The call with PACKAGE and VERSION arguments is the old style
|
||||
# call (pre autoconf-2.50), which is being phased out. PACKAGE
|
||||
# and VERSION should now be passed to AC_INIT and removed from
|
||||
# the call to AM_INIT_AUTOMAKE.
|
||||
# We support both call styles for the transition. After
|
||||
# the next Automake release, Autoconf can make the AC_INIT
|
||||
# arguments mandatory, and then we can depend on a new Autoconf
|
||||
# release and drop the old call support.
|
||||
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||
[AC_PREREQ([2.60])dnl
|
||||
dnl Autoconf wants to disallow AM_ names. We explicitly allow
|
||||
dnl the ones we care about.
|
||||
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
|
||||
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
||||
AC_REQUIRE([AC_PROG_INSTALL])dnl
|
||||
if test "`cd $srcdir && pwd`" != "`pwd`"; then
|
||||
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
|
||||
# is not polluted with repeated "-I."
|
||||
AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
|
||||
# test to see if srcdir already configured
|
||||
if test -f $srcdir/config.status; then
|
||||
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||
fi
|
||||
fi
|
||||
|
||||
# test whether we have cygpath
|
||||
if test -z "$CYGPATH_W"; then
|
||||
if (cygpath --version) >/dev/null 2>/dev/null; then
|
||||
CYGPATH_W='cygpath -w'
|
||||
else
|
||||
CYGPATH_W=echo
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([CYGPATH_W])
|
||||
|
||||
# Define the identity of the package.
|
||||
dnl Distinguish between old-style and new-style calls.
|
||||
m4_ifval([$2],
|
||||
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
|
||||
AC_SUBST([PACKAGE], [$1])dnl
|
||||
AC_SUBST([VERSION], [$2])],
|
||||
[_AM_SET_OPTIONS([$1])dnl
|
||||
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
|
||||
m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
|
||||
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
|
||||
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
|
||||
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
|
||||
|
||||
_AM_IF_OPTION([no-define],,
|
||||
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
|
||||
|
||||
# Some tools Automake needs.
|
||||
AC_REQUIRE([AM_SANITY_CHECK])dnl
|
||||
AC_REQUIRE([AC_ARG_PROGRAM])dnl
|
||||
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOCONF, autoconf)
|
||||
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOHEADER, autoheader)
|
||||
AM_MISSING_PROG(MAKEINFO, makeinfo)
|
||||
AM_PROG_INSTALL_SH
|
||||
AM_PROG_INSTALL_STRIP
|
||||
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
|
||||
# We need awk for the "check" target. The system "awk" is bad on
|
||||
# some platforms.
|
||||
AC_REQUIRE([AC_PROG_AWK])dnl
|
||||
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
||||
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
|
||||
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
|
||||
[_AM_PROG_TAR([v7])])])
|
||||
_AM_IF_OPTION([no-dependencies],,
|
||||
[AC_PROVIDE_IFELSE([AC_PROG_CC],
|
||||
[_AM_DEPENDENCIES(CC)],
|
||||
[define([AC_PROG_CC],
|
||||
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_CXX],
|
||||
[_AM_DEPENDENCIES(CXX)],
|
||||
[define([AC_PROG_CXX],
|
||||
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
|
||||
[_AM_DEPENDENCIES(OBJC)],
|
||||
[define([AC_PROG_OBJC],
|
||||
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
|
||||
])
|
||||
])
|
||||
|
||||
|
||||
# When config.status generates a header, we must update the stamp-h file.
|
||||
# This file resides in the same directory as the config header
|
||||
# that is generated. The stamp files are numbered to have different names.
|
||||
|
||||
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
|
||||
# loop where config.status creates the headers, so we can generate
|
||||
# our stamp files there.
|
||||
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
|
||||
[# Compute $1's index in $config_headers.
|
||||
_am_arg=$1
|
||||
_am_stamp_count=1
|
||||
for _am_header in $config_headers :; do
|
||||
case $_am_header in
|
||||
$_am_arg | $_am_arg:* )
|
||||
break ;;
|
||||
* )
|
||||
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
||||
esac
|
||||
done
|
||||
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_SH
|
||||
# ------------------
|
||||
# Define $install_sh.
|
||||
AC_DEFUN([AM_PROG_INSTALL_SH],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
|
||||
AC_SUBST(install_sh)])
|
||||
|
||||
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# Check whether the underlying file-system supports filenames
|
||||
# with a leading dot. For instance MS-DOS doesn't.
|
||||
AC_DEFUN([AM_SET_LEADING_DOT],
|
||||
[rm -rf .tst 2>/dev/null
|
||||
mkdir .tst 2>/dev/null
|
||||
if test -d .tst; then
|
||||
am__leading_dot=.
|
||||
else
|
||||
am__leading_dot=_
|
||||
fi
|
||||
rmdir .tst 2>/dev/null
|
||||
AC_SUBST([am__leading_dot])])
|
||||
|
||||
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 3
|
||||
|
||||
# AM_MAKE_INCLUDE()
|
||||
# -----------------
|
||||
# Check to see how make treats includes.
|
||||
AC_DEFUN([AM_MAKE_INCLUDE],
|
||||
[am_make=${MAKE-make}
|
||||
cat > confinc << 'END'
|
||||
am__doit:
|
||||
@echo done
|
||||
.PHONY: am__doit
|
||||
END
|
||||
# If we don't find an include directive, just comment out the code.
|
||||
AC_MSG_CHECKING([for style of include used by $am_make])
|
||||
am__include="#"
|
||||
am__quote=
|
||||
_am_result=none
|
||||
# First try GNU make style include.
|
||||
echo "include confinc" > confmf
|
||||
# We grep out `Entering directory' and `Leaving directory'
|
||||
# messages which can occur if `w' ends up in MAKEFLAGS.
|
||||
# In particular we don't look at `^make:' because GNU make might
|
||||
# be invoked under some other name (usually "gmake"), in which
|
||||
# case it prints its new name instead of `make'.
|
||||
if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
|
||||
am__include=include
|
||||
am__quote=
|
||||
_am_result=GNU
|
||||
fi
|
||||
# Now try BSD make style include.
|
||||
if test "$am__include" = "#"; then
|
||||
echo '.include "confinc"' > confmf
|
||||
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
|
||||
am__include=.include
|
||||
am__quote="\""
|
||||
_am_result=BSD
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([am__include])
|
||||
AC_SUBST([am__quote])
|
||||
AC_MSG_RESULT([$_am_result])
|
||||
rm -f confinc confmf
|
||||
])
|
||||
|
||||
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 5
|
||||
|
||||
# AM_MISSING_PROG(NAME, PROGRAM)
|
||||
# ------------------------------
|
||||
AC_DEFUN([AM_MISSING_PROG],
|
||||
[AC_REQUIRE([AM_MISSING_HAS_RUN])
|
||||
$1=${$1-"${am_missing_run}$2"}
|
||||
AC_SUBST($1)])
|
||||
|
||||
|
||||
# AM_MISSING_HAS_RUN
|
||||
# ------------------
|
||||
# Define MISSING if not defined so far and test if it supports --run.
|
||||
# If it does, set am_missing_run to use it, otherwise, to nothing.
|
||||
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
AC_REQUIRE_AUX_FILE([missing])dnl
|
||||
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --run true"; then
|
||||
am_missing_run="$MISSING --run "
|
||||
else
|
||||
am_missing_run=
|
||||
AC_MSG_WARN([`missing' script is too old or missing])
|
||||
fi
|
||||
])
|
||||
|
||||
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_MKDIR_P
|
||||
# ---------------
|
||||
# Check for `mkdir -p'.
|
||||
AC_DEFUN([AM_PROG_MKDIR_P],
|
||||
[AC_PREREQ([2.60])dnl
|
||||
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
|
||||
dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
|
||||
dnl while keeping a definition of mkdir_p for backward compatibility.
|
||||
dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
|
||||
dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
|
||||
dnl Makefile.ins that do not define MKDIR_P, so we do our own
|
||||
dnl adjustment using top_builddir (which is defined more often than
|
||||
dnl MKDIR_P).
|
||||
AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
|
||||
case $mkdir_p in
|
||||
[[\\/$]]* | ?:[[\\/]]*) ;;
|
||||
*/*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
|
||||
esac
|
||||
])
|
||||
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 3
|
||||
|
||||
# _AM_MANGLE_OPTION(NAME)
|
||||
# -----------------------
|
||||
AC_DEFUN([_AM_MANGLE_OPTION],
|
||||
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
# _AM_SET_OPTION(NAME)
|
||||
# ------------------------------
|
||||
# Set option NAME. Presently that only means defining a flag for this option.
|
||||
AC_DEFUN([_AM_SET_OPTION],
|
||||
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
|
||||
|
||||
# _AM_SET_OPTIONS(OPTIONS)
|
||||
# ----------------------------------
|
||||
# OPTIONS is a space-separated list of Automake options.
|
||||
AC_DEFUN([_AM_SET_OPTIONS],
|
||||
[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
||||
|
||||
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
|
||||
# -------------------------------------------
|
||||
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||
AC_DEFUN([_AM_IF_OPTION],
|
||||
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||
|
||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# AM_SANITY_CHECK
|
||||
# ---------------
|
||||
AC_DEFUN([AM_SANITY_CHECK],
|
||||
[AC_MSG_CHECKING([whether build environment is sane])
|
||||
# Just in case
|
||||
sleep 1
|
||||
echo timestamp > conftest.file
|
||||
# Do `set' in a subshell so we don't clobber the current shell's
|
||||
# arguments. Must try -L first in case configure is actually a
|
||||
# symlink; some systems play weird games with the mod time of symlinks
|
||||
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||
# directory).
|
||||
if (
|
||||
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
|
||||
if test "$[*]" = "X"; then
|
||||
# -L didn't work.
|
||||
set X `ls -t $srcdir/configure conftest.file`
|
||||
fi
|
||||
rm -f conftest.file
|
||||
if test "$[*]" != "X $srcdir/configure conftest.file" \
|
||||
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
|
||||
|
||||
# If neither matched, then we have a broken ls. This can happen
|
||||
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||
# broken ls alias from the environment. This has actually
|
||||
# happened. Such a system could not be considered "sane".
|
||||
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||
alias in your environment])
|
||||
fi
|
||||
|
||||
test "$[2]" = conftest.file
|
||||
)
|
||||
then
|
||||
# Ok.
|
||||
:
|
||||
else
|
||||
AC_MSG_ERROR([newly created file is older than distributed files!
|
||||
Check your system clock])
|
||||
fi
|
||||
AC_MSG_RESULT(yes)])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_STRIP
|
||||
# ---------------------
|
||||
# One issue with vendor `install' (even GNU) is that you can't
|
||||
# specify the program used to strip binaries. This is especially
|
||||
# annoying in cross-compiling environments, where the build's strip
|
||||
# is unlikely to handle the host's binaries.
|
||||
# Fortunately install-sh will honor a STRIPPROG variable, so we
|
||||
# always use install-sh in `make install-strip', and initialize
|
||||
# STRIPPROG with the value of the STRIP variable (set by the user).
|
||||
AC_DEFUN([AM_PROG_INSTALL_STRIP],
|
||||
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||
# Installed binaries are usually stripped using `strip' when the user
|
||||
# run `make install-strip'. However `strip' might not be the right
|
||||
# tool to use in cross-compilation environments, therefore Automake
|
||||
# will honor the `STRIP' environment variable to overrule this program.
|
||||
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
|
||||
if test "$cross_compiling" != no; then
|
||||
AC_CHECK_TOOL([STRIP], [strip], :)
|
||||
fi
|
||||
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||
|
||||
# Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# _AM_SUBST_NOTMAKE(VARIABLE)
|
||||
# ---------------------------
|
||||
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
|
||||
# This macro is traced by Automake.
|
||||
AC_DEFUN([_AM_SUBST_NOTMAKE])
|
||||
|
||||
# Check how to create a tarball. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# _AM_PROG_TAR(FORMAT)
|
||||
# --------------------
|
||||
# Check how to create a tarball in format FORMAT.
|
||||
# FORMAT should be one of `v7', `ustar', or `pax'.
|
||||
#
|
||||
# Substitute a variable $(am__tar) that is a command
|
||||
# writing to stdout a FORMAT-tarball containing the directory
|
||||
# $tardir.
|
||||
# tardir=directory && $(am__tar) > result.tar
|
||||
#
|
||||
# Substitute a variable $(am__untar) that extract such
|
||||
# a tarball read from stdin.
|
||||
# $(am__untar) < result.tar
|
||||
AC_DEFUN([_AM_PROG_TAR],
|
||||
[# Always define AMTAR for backward compatibility.
|
||||
AM_MISSING_PROG([AMTAR], [tar])
|
||||
m4_if([$1], [v7],
|
||||
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
|
||||
[m4_case([$1], [ustar],, [pax],,
|
||||
[m4_fatal([Unknown tar format])])
|
||||
AC_MSG_CHECKING([how to create a $1 tar archive])
|
||||
# Loop over all known methods to create a tar archive until one works.
|
||||
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
||||
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
|
||||
# Do not fold the above two line into one, because Tru64 sh and
|
||||
# Solaris sh will not grok spaces in the rhs of `-'.
|
||||
for _am_tool in $_am_tools
|
||||
do
|
||||
case $_am_tool in
|
||||
gnutar)
|
||||
for _am_tar in tar gnutar gtar;
|
||||
do
|
||||
AM_RUN_LOG([$_am_tar --version]) && break
|
||||
done
|
||||
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
|
||||
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
|
||||
am__untar="$_am_tar -xf -"
|
||||
;;
|
||||
plaintar)
|
||||
# Must skip GNU tar: if it does not support --format= it doesn't create
|
||||
# ustar tarball either.
|
||||
(tar --version) >/dev/null 2>&1 && continue
|
||||
am__tar='tar chf - "$$tardir"'
|
||||
am__tar_='tar chf - "$tardir"'
|
||||
am__untar='tar xf -'
|
||||
;;
|
||||
pax)
|
||||
am__tar='pax -L -x $1 -w "$$tardir"'
|
||||
am__tar_='pax -L -x $1 -w "$tardir"'
|
||||
am__untar='pax -r'
|
||||
;;
|
||||
cpio)
|
||||
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
|
||||
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
|
||||
am__untar='cpio -i -H $1 -d'
|
||||
;;
|
||||
none)
|
||||
am__tar=false
|
||||
am__tar_=false
|
||||
am__untar=false
|
||||
;;
|
||||
esac
|
||||
|
||||
# If the value was cached, stop now. We just wanted to have am__tar
|
||||
# and am__untar set.
|
||||
test -n "${am_cv_prog_tar_$1}" && break
|
||||
|
||||
# tar/untar a dummy directory, and stop if the command works
|
||||
rm -rf conftest.dir
|
||||
mkdir conftest.dir
|
||||
echo GrepMe > conftest.dir/file
|
||||
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
|
||||
rm -rf conftest.dir
|
||||
if test -s conftest.tar; then
|
||||
AM_RUN_LOG([$am__untar <conftest.tar])
|
||||
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
|
||||
fi
|
||||
done
|
||||
rm -rf conftest.dir
|
||||
|
||||
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
|
||||
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
|
||||
AC_SUBST([am__tar])
|
||||
AC_SUBST([am__untar])
|
||||
]) # _AM_PROG_TAR
|
||||
|
||||
m4_include([acinclude.m4])
|
@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
# Prepare a new checked-out source tree for configuration
|
||||
|
||||
make -f admin/Makefile.common cvs
|
@ -0,0 +1,310 @@
|
||||
/* config.h.in. Generated from configure.in by autoheader. */
|
||||
|
||||
/* Define to the name of the file that communication with gdb should be logged
|
||||
to; undefine it for no logging */
|
||||
#undef GDB_TRANSCRIPT
|
||||
|
||||
/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
|
||||
#undef HAVE_CARBON_CARBON_H
|
||||
|
||||
/* Define if you have the CoreAudio API */
|
||||
#undef HAVE_COREAUDIO
|
||||
|
||||
/* Define to 1 if you have the <crt_externs.h> header file. */
|
||||
#undef HAVE_CRT_EXTERNS_H
|
||||
|
||||
/* Defines if your system has the crypt function */
|
||||
#undef HAVE_CRYPT
|
||||
|
||||
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
|
||||
*/
|
||||
#undef HAVE_DIRENT_H
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */
|
||||
#undef HAVE_FCNTL_H
|
||||
|
||||
/* Define to 1 if you have the <fnmatch.h> header file. */
|
||||
#undef HAVE_FNMATCH_H
|
||||
|
||||
/* Define if you have openpty */
|
||||
#undef HAVE_FUNC_OPENPTY
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if you have libjpeg */
|
||||
#undef HAVE_LIBJPEG
|
||||
|
||||
/* Define if you have libpng */
|
||||
#undef HAVE_LIBPNG
|
||||
|
||||
/* Define if you have a working libpthread (will enable threaded code) */
|
||||
#undef HAVE_LIBPTHREAD
|
||||
|
||||
/* Define to 1 if you have the <libutil.h> header file. */
|
||||
#undef HAVE_LIBUTIL_H
|
||||
|
||||
/* Define if you have libz */
|
||||
#undef HAVE_LIBZ
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the `mkfifo' function. */
|
||||
#undef HAVE_MKFIFO
|
||||
|
||||
/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
|
||||
#undef HAVE_NDIR_H
|
||||
|
||||
/* Define if your system needs _NSGetEnviron to set up the environment */
|
||||
#undef HAVE_NSGETENVIRON
|
||||
|
||||
/* Define if placement new works */
|
||||
#undef HAVE_PLACEMENT_NEW
|
||||
|
||||
/* Define to 1 if you have the <pty.h> header file. */
|
||||
#undef HAVE_PTY_H
|
||||
|
||||
/* Define to 1 if you have the `putenv' function. */
|
||||
#undef HAVE_PUTENV
|
||||
|
||||
/* Define if you have res_init */
|
||||
#undef HAVE_RES_INIT
|
||||
|
||||
/* Define if you have the res_init prototype */
|
||||
#undef HAVE_RES_INIT_PROTO
|
||||
|
||||
/* Define to 1 if you have the `setpgid' function. */
|
||||
#undef HAVE_SETPGID
|
||||
|
||||
/* Define if you have a STL implementation by SGI */
|
||||
#undef HAVE_SGI_STL
|
||||
|
||||
/* Define to 1 if you have the `snprintf' function. */
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
/* Define to 1 if you have the `socket' function. */
|
||||
#undef HAVE_SOCKET
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define if you have strlcat */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define if you have the strlcat prototype */
|
||||
#undef HAVE_STRLCAT_PROTO
|
||||
|
||||
/* Define if you have strlcpy */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define if you have the strlcpy prototype */
|
||||
#undef HAVE_STRLCPY_PROTO
|
||||
|
||||
/* Define to 1 if you have the <sysent.h> header file. */
|
||||
#undef HAVE_SYSENT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/bitypes.h> header file. */
|
||||
#undef HAVE_SYS_BITYPES_H
|
||||
|
||||
/* Define to 1 if you have the <sys/cdefs.h> header file. */
|
||||
#undef HAVE_SYS_CDEFS_H
|
||||
|
||||
/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
|
||||
*/
|
||||
#undef HAVE_SYS_DIR_H
|
||||
|
||||
/* Define to 1 if you have the <sys/ioctl.h> header file. */
|
||||
#undef HAVE_SYS_IOCTL_H
|
||||
|
||||
/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
|
||||
*/
|
||||
#undef HAVE_SYS_NDIR_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||
#undef HAVE_SYS_TIME_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if you have the <util.h> header file. */
|
||||
#undef HAVE_UTIL_H
|
||||
|
||||
/* Define to 1 if you have the `vsnprintf' function. */
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
/* Suffix for lib directories */
|
||||
#undef KDELIBSUFF
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define how to invoke ps */
|
||||
#undef PS_COMMAND
|
||||
|
||||
/* The size of `char *', as computed by sizeof. */
|
||||
#undef SIZEOF_CHAR_P
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#undef SIZEOF_INT
|
||||
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG
|
||||
|
||||
/* The size of `short', as computed by sizeof. */
|
||||
#undef SIZEOF_SHORT
|
||||
|
||||
/* The size of `size_t', as computed by sizeof. */
|
||||
#undef SIZEOF_SIZE_T
|
||||
|
||||
/* The size of `unsigned long', as computed by sizeof. */
|
||||
#undef SIZEOF_UNSIGNED_LONG
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#undef TIME_WITH_SYS_TIME
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define if you want to see voluminous trace output */
|
||||
#undef WANT_TRACE_OUTPUT
|
||||
|
||||
/* Defined if compiling without arts */
|
||||
#undef WITHOUT_ARTS
|
||||
|
||||
/*
|
||||
* jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
|
||||
* headers and I'm too lazy to write a configure test as long as only
|
||||
* unixware is related
|
||||
*/
|
||||
#ifdef _UNIXWARE
|
||||
#define HAVE_BOOLEAN
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
|
||||
* that defines bzero.
|
||||
*/
|
||||
|
||||
#if defined(_AIX)
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
|
||||
# include <sys/time.h>
|
||||
# include <crt_externs.h>
|
||||
# define environ (*_NSGetEnviron())
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if !defined(HAVE_RES_INIT_PROTO)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
int res_init(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if !defined(HAVE_STRLCAT_PROTO)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
unsigned long strlcat(char*, const char*, unsigned long);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if !defined(HAVE_STRLCPY_PROTO)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
unsigned long strlcpy(char*, const char*, unsigned long);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* On HP-UX, the declaration of vsnprintf() is needed every time !
|
||||
*/
|
||||
|
||||
#if !defined(HAVE_VSNPRINTF) || defined(hpux)
|
||||
#if __STDC__
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
int snprintf(char *str, size_t n, char const *fmt, ...);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(__SVR4) && !defined(__svr4__)
|
||||
#define __svr4__ 1
|
||||
#endif
|
||||
|
||||
|
||||
/* type to use in place of socklen_t if not defined */
|
||||
#undef kde_socklen_t
|
||||
|
||||
/* type to use in place of socklen_t if not defined (deprecated, use
|
||||
kde_socklen_t) */
|
||||
#undef ksize_t
|
@ -0,0 +1,3 @@
|
||||
./admin/configure.in.min
|
||||
configure.in.in
|
||||
configure.in.mid
|
@ -0,0 +1,241 @@
|
||||
dnl =======================================================
|
||||
dnl FILE: ./admin/configure.in.min
|
||||
dnl =======================================================
|
||||
|
||||
dnl This file is part of the KDE libraries/packages
|
||||
dnl Copyright (C) 2001 Stephan Kulow (coolo@kde.org)
|
||||
|
||||
dnl This file is free software; you can redistribute it and/or
|
||||
dnl modify it under the terms of the GNU Library General Public
|
||||
dnl License as published by the Free Software Foundation; either
|
||||
dnl version 2 of the License, or (at your option) any later version.
|
||||
|
||||
dnl This library is distributed in the hope that it will be useful,
|
||||
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
dnl Library General Public License for more details.
|
||||
|
||||
dnl You should have received a copy of the GNU Library General Public License
|
||||
dnl along with this library; see the file COPYING.LIB. If not, write to
|
||||
dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
dnl Boston, MA 02110-1301, USA.
|
||||
|
||||
# Original Author was Kalle@kde.org
|
||||
# I lifted it in some mater. (Stephan Kulow)
|
||||
# I used much code from Janos Farkas
|
||||
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_INIT(acinclude.m4) dnl a source file from your sub dir
|
||||
|
||||
dnl This is so we can use kde-common
|
||||
AC_CONFIG_AUX_DIR(admin)
|
||||
|
||||
dnl This ksh/zsh feature conflicts with `cd blah ; pwd`
|
||||
unset CDPATH
|
||||
|
||||
dnl Checking host/target/build systems, for make, install etc.
|
||||
AC_CANONICAL_SYSTEM
|
||||
dnl Perform program name transformation
|
||||
AC_ARG_PROGRAM
|
||||
|
||||
dnl Automake doc recommends to do this only here. (Janos)
|
||||
AM_INIT_AUTOMAKE(kdbg, 2.2.2) dnl searches for some needed programs
|
||||
|
||||
KDE_SET_PREFIX
|
||||
|
||||
dnl generate the config header
|
||||
AM_CONFIG_HEADER(config.h) dnl at the distribution this done
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_CHECK_COMPILERS
|
||||
AC_ENABLE_SHARED(yes)
|
||||
AC_ENABLE_STATIC(no)
|
||||
KDE_PROG_LIBTOOL
|
||||
|
||||
dnl for NLS support. Call them in this order!
|
||||
dnl WITH_NLS is for the po files
|
||||
AM_KDE_WITH_NLS
|
||||
|
||||
dnl KDE_USE_QT
|
||||
AC_PATH_KDE
|
||||
dnl =======================================================
|
||||
dnl FILE: configure.in.in
|
||||
dnl =======================================================
|
||||
|
||||
#MIN_CONFIG
|
||||
|
||||
dnl PACKAGE set before
|
||||
|
||||
KDE_CREATE_SUBDIRSLIST
|
||||
AC_CONFIG_FILES([ Makefile ])
|
||||
AC_CONFIG_FILES([ kdbg/Makefile ])
|
||||
AC_CONFIG_FILES([ kdbg/doc/Makefile ])
|
||||
AC_CONFIG_FILES([ kdbg/doc/de/Makefile ])
|
||||
AC_CONFIG_FILES([ kdbg/doc/en/Makefile ])
|
||||
AC_CONFIG_FILES([ kdbg/doc/ru/Makefile ])
|
||||
AC_CONFIG_FILES([ kdbg/pics/Makefile ])
|
||||
AC_CONFIG_FILES([ kdbg/testprogs/Makefile ])
|
||||
AC_CONFIG_FILES([ kdbg/typetables/Makefile ])
|
||||
AC_CONFIG_FILES([ po/Makefile ])
|
||||
dnl Checks for header files.
|
||||
AC_LANG_C dnl switch to C
|
||||
AC_HEADER_DIRENT dnl check for dirent.h
|
||||
AC_HEADER_STDC dnl check for other stdc headers. More traditional ;)
|
||||
dnl check for some more header files. You can remove some of
|
||||
dnl them, if you want to. But it doesn't hurt
|
||||
AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h sys/cdefs.h)
|
||||
AC_CHECK_HEADERS(fnmatch.h sysent.h strings.h sys/stat.h)
|
||||
AC_CHECK_HEADERS(sys/ioctl.h pty.h libutil.h util.h)
|
||||
|
||||
dnl Checks for libraries.
|
||||
AC_CHECK_LIB(socket, socket, [LIBSOCKET="-lsocket -lnsl"]) dnl for Solaris' X11
|
||||
AC_SUBST(LIBSOCKET)
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_HEADER_TIME
|
||||
|
||||
dnl Checks for library functions.
|
||||
AC_CHECK_FUNCS(setpgid putenv socket vsnprintf mkfifo)
|
||||
|
||||
dnl pseudo tty support in glibc2
|
||||
AC_SEARCH_LIBS(openpty, util,
|
||||
AC_DEFINE_UNQUOTED(HAVE_FUNC_OPENPTY, 1, [Define if you have openpty]))
|
||||
|
||||
dnl Check whether we want much debugging output
|
||||
AH_TEMPLATE([WANT_TRACE_OUTPUT],
|
||||
[Define if you want to see voluminous trace output])
|
||||
AC_MSG_CHECKING([whether kdbg should generate lots of trace output])
|
||||
dnl Default is no trace output
|
||||
AC_ARG_ENABLE(lots-a-trace,
|
||||
[ --enable-lots-a-trace generate lots of trace output [default=no]],
|
||||
WANT_TRACE_OUTPUT=$enableval, WANT_TRACE_OUTPUT=no)
|
||||
AC_MSG_RESULT($WANT_TRACE_OUTPUT)
|
||||
if test "x$WANT_TRACE_OUTPUT" = "xyes"; then
|
||||
AC_DEFINE_UNQUOTED(WANT_TRACE_OUTPUT)
|
||||
fi
|
||||
|
||||
dnl Check whether test programs should be compiled
|
||||
dnl Default is not to compile them
|
||||
AC_ARG_ENABLE(testprogs,
|
||||
[ --enable-testprogs compile test programs [default=no]],
|
||||
[buildtestprogs=$enableval],[buildtestprogs=no])
|
||||
AM_CONDITIONAL(BUILDTESTPROGS,test "x$buildtestprogs" = "xyes")
|
||||
dnl write a notice into the log
|
||||
echo "build test programs: $buildtestprogs" >&5
|
||||
|
||||
dnl Check where the communication with gdb should be logged
|
||||
AC_MSG_CHECKING([where communication with gdb should be logged])
|
||||
dnl Default is ./gdb-transcript until kdbg is released
|
||||
AC_ARG_WITH(transcript,
|
||||
[ --with-transcript=file log communication with gdb [default=not logged]],
|
||||
GDB_TRANSCRIPT=$withval, GDB_TRANSCRIPT=no)
|
||||
if test "x$GDB_TRANSCRIPT" = "xyes"; then
|
||||
GDB_TRANSCRIPT="./gdb-transcript"
|
||||
fi
|
||||
if test "x$GDB_TRANSCRIPT" = "xno"; then
|
||||
GDB_TRANSCRIPT="not logged"
|
||||
else
|
||||
dnl add quotes
|
||||
GDB_TRANSCRIPT=\"$GDB_TRANSCRIPT\"
|
||||
AC_DEFINE_UNQUOTED(GDB_TRANSCRIPT, $GDB_TRANSCRIPT,
|
||||
[Define to the name of the file that communication with gdb
|
||||
should be logged to; undefine it for no logging])
|
||||
fi
|
||||
AC_MSG_RESULT($GDB_TRANSCRIPT)
|
||||
|
||||
dnl Check whether placement new works
|
||||
AH_TEMPLATE([HAVE_PLACEMENT_NEW],[Define if placement new works])
|
||||
AC_LANG_CPLUSPLUS
|
||||
AC_MSG_CHECKING(whether placement new is available)
|
||||
AC_CACHE_VAL(ac_cv_have_placement_new,
|
||||
[
|
||||
AC_TRY_COMPILE([
|
||||
#include <new>
|
||||
],
|
||||
[
|
||||
int ii;
|
||||
new(&ii) int;
|
||||
],
|
||||
ac_cv_have_placement_new=yes,
|
||||
ac_cv_have_placement_new=no)
|
||||
])
|
||||
AC_MSG_RESULT($ac_cv_have_placement_new)
|
||||
if eval "test \"`echo `$ac_cv_have_placement_new\" = yes"; then
|
||||
AC_DEFINE(HAVE_PLACEMENT_NEW)
|
||||
fi
|
||||
|
||||
dnl -----------------
|
||||
AC_PATH_PROG(PS_COMMAND, ps)
|
||||
if test -n "$PS_COMMAND"; then
|
||||
AC_MSG_CHECKING(for suitable ps invocation)
|
||||
|
||||
PS_COMMAND="$PS_COMMAND -eo pid,ppid,uid,vsz,etime,time,args"
|
||||
if $PS_COMMAND > /dev/null 2>&1; then
|
||||
# works in principle; check output: extract first line, but avoid 'head -1'
|
||||
set x `$PS_COMMAND | (read firstline; echo "$firstline")`
|
||||
if test "$*" = "x PID PPID UID VSZ ELAPSED TIME COMMAND"; then
|
||||
: # fine
|
||||
else
|
||||
PS_COMMAND="" # not suitable
|
||||
fi
|
||||
else
|
||||
PS_COMMAND="" # not suitable
|
||||
fi
|
||||
|
||||
if test -n "$PS_COMMAND"; then
|
||||
AC_MSG_RESULT($PS_COMMAND)
|
||||
PS_COMMAND=\"`echo $PS_COMMAND | sed -e 's/ /", "/g'`\"
|
||||
AC_DEFINE_UNQUOTED(PS_COMMAND, $PS_COMMAND,
|
||||
[Define how to invoke ps])
|
||||
else
|
||||
AC_MSG_RESULT([not suitable])
|
||||
fi
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_PS_COMMAND, test -n "$PS_COMMAND")
|
||||
AC_OUTPUT
|
||||
# Check if KDE_SET_PREFIX was called, and --prefix was passed to configure
|
||||
if test -n "$kde_libs_prefix" -a -n "$given_prefix"; then
|
||||
# And if so, warn when they don't match
|
||||
if test "$kde_libs_prefix" != "$given_prefix"; then
|
||||
# And if kde doesn't know about the prefix yet
|
||||
echo ":"`kde-config --path exe`":" | grep ":$given_prefix/bin/:" 2>&1 >/dev/null
|
||||
if test $? -ne 0; then
|
||||
echo ""
|
||||
echo "Warning: you chose to install this package in $given_prefix,"
|
||||
echo "but KDE was found in $kde_libs_prefix."
|
||||
echo "For this to work, you will need to tell KDE about the new prefix, by ensuring"
|
||||
echo "that KDEDIRS contains it, e.g. export KDEDIRS=$given_prefix:$kde_libs_prefix"
|
||||
echo "Then restart KDE."
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x$GXX = "xyes" -a x$kde_have_gcc_visibility = "xyes" -a x$kde_cv_val_qt_gcc_visibility_patched = "xno"; then
|
||||
echo ""
|
||||
echo "Your GCC supports symbol visibility, but the patch for Qt supporting visibility"
|
||||
echo "was not included. Therefore, GCC symbol visibility support remains disabled."
|
||||
echo ""
|
||||
echo "For better performance, consider including the Qt visibility supporting patch"
|
||||
echo "located at:"
|
||||
echo ""
|
||||
echo "http://bugs.kde.org/show_bug.cgi?id=109386"
|
||||
echo ""
|
||||
echo "and recompile all of Qt and KDE. Note, this is entirely optional and"
|
||||
echo "everything will continue to work just fine without it."
|
||||
echo ""
|
||||
fi
|
||||
|
||||
if test "$all_tests" = "bad"; then
|
||||
if test ! "$cache_file" = "/dev/null"; then
|
||||
echo ""
|
||||
echo "Please remove the file $cache_file after changing your setup"
|
||||
echo "so that configure will find the changes next time."
|
||||
echo ""
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
echo "Good - your configure finished. Start make now"
|
||||
echo ""
|
||||
fi
|
@ -0,0 +1,4 @@
|
||||
#MIN_CONFIG
|
||||
|
||||
AM_INIT_AUTOMAKE(kdbg, 2.2.2)
|
||||
|
@ -0,0 +1,115 @@
|
||||
dnl Checks for header files.
|
||||
AC_LANG_C dnl switch to C
|
||||
AC_HEADER_DIRENT dnl check for dirent.h
|
||||
AC_HEADER_STDC dnl check for other stdc headers. More traditional ;)
|
||||
dnl check for some more header files. You can remove some of
|
||||
dnl them, if you want to. But it doesn't hurt
|
||||
AC_CHECK_HEADERS(fcntl.h sys/time.h unistd.h sys/cdefs.h)
|
||||
AC_CHECK_HEADERS(fnmatch.h sysent.h strings.h sys/stat.h)
|
||||
AC_CHECK_HEADERS(sys/ioctl.h pty.h libutil.h util.h)
|
||||
|
||||
dnl Checks for libraries.
|
||||
AC_CHECK_LIB(socket, socket, [LIBSOCKET="-lsocket -lnsl"]) dnl for Solaris' X11
|
||||
AC_SUBST(LIBSOCKET)
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_HEADER_TIME
|
||||
|
||||
dnl Checks for library functions.
|
||||
AC_CHECK_FUNCS(setpgid putenv socket vsnprintf mkfifo)
|
||||
|
||||
dnl pseudo tty support in glibc2
|
||||
AC_SEARCH_LIBS(openpty, util,
|
||||
AC_DEFINE_UNQUOTED(HAVE_FUNC_OPENPTY, 1, [Define if you have openpty]))
|
||||
|
||||
dnl Check whether we want much debugging output
|
||||
AH_TEMPLATE([WANT_TRACE_OUTPUT],
|
||||
[Define if you want to see voluminous trace output])
|
||||
AC_MSG_CHECKING([whether kdbg should generate lots of trace output])
|
||||
dnl Default is no trace output
|
||||
AC_ARG_ENABLE(lots-a-trace,
|
||||
[ --enable-lots-a-trace generate lots of trace output [default=no]],
|
||||
WANT_TRACE_OUTPUT=$enableval, WANT_TRACE_OUTPUT=no)
|
||||
AC_MSG_RESULT($WANT_TRACE_OUTPUT)
|
||||
if test "x$WANT_TRACE_OUTPUT" = "xyes"; then
|
||||
AC_DEFINE_UNQUOTED(WANT_TRACE_OUTPUT)
|
||||
fi
|
||||
|
||||
dnl Check whether test programs should be compiled
|
||||
dnl Default is not to compile them
|
||||
AC_ARG_ENABLE(testprogs,
|
||||
[ --enable-testprogs compile test programs [default=no]],
|
||||
[buildtestprogs=$enableval],[buildtestprogs=no])
|
||||
AM_CONDITIONAL(BUILDTESTPROGS,test "x$buildtestprogs" = "xyes")
|
||||
dnl write a notice into the log
|
||||
echo "build test programs: $buildtestprogs" >&5
|
||||
|
||||
dnl Check where the communication with gdb should be logged
|
||||
AC_MSG_CHECKING([where communication with gdb should be logged])
|
||||
dnl Default is ./gdb-transcript until kdbg is released
|
||||
AC_ARG_WITH(transcript,
|
||||
[ --with-transcript=file log communication with gdb [default=not logged]],
|
||||
GDB_TRANSCRIPT=$withval, GDB_TRANSCRIPT=no)
|
||||
if test "x$GDB_TRANSCRIPT" = "xyes"; then
|
||||
GDB_TRANSCRIPT="./gdb-transcript"
|
||||
fi
|
||||
if test "x$GDB_TRANSCRIPT" = "xno"; then
|
||||
GDB_TRANSCRIPT="not logged"
|
||||
else
|
||||
dnl add quotes
|
||||
GDB_TRANSCRIPT=\"$GDB_TRANSCRIPT\"
|
||||
AC_DEFINE_UNQUOTED(GDB_TRANSCRIPT, $GDB_TRANSCRIPT,
|
||||
[Define to the name of the file that communication with gdb
|
||||
should be logged to; undefine it for no logging])
|
||||
fi
|
||||
AC_MSG_RESULT($GDB_TRANSCRIPT)
|
||||
|
||||
dnl Check whether placement new works
|
||||
AH_TEMPLATE([HAVE_PLACEMENT_NEW],[Define if placement new works])
|
||||
AC_LANG_CPLUSPLUS
|
||||
AC_MSG_CHECKING(whether placement new is available)
|
||||
AC_CACHE_VAL(ac_cv_have_placement_new,
|
||||
[
|
||||
AC_TRY_COMPILE([
|
||||
#include <new>
|
||||
],
|
||||
[
|
||||
int ii;
|
||||
new(&ii) int;
|
||||
],
|
||||
ac_cv_have_placement_new=yes,
|
||||
ac_cv_have_placement_new=no)
|
||||
])
|
||||
AC_MSG_RESULT($ac_cv_have_placement_new)
|
||||
if eval "test \"`echo `$ac_cv_have_placement_new\" = yes"; then
|
||||
AC_DEFINE(HAVE_PLACEMENT_NEW)
|
||||
fi
|
||||
|
||||
dnl -----------------
|
||||
AC_PATH_PROG(PS_COMMAND, ps)
|
||||
if test -n "$PS_COMMAND"; then
|
||||
AC_MSG_CHECKING(for suitable ps invocation)
|
||||
|
||||
PS_COMMAND="$PS_COMMAND -eo pid,ppid,uid,vsz,etime,time,args"
|
||||
if $PS_COMMAND > /dev/null 2>&1; then
|
||||
# works in principle; check output: extract first line, but avoid 'head -1'
|
||||
set x `$PS_COMMAND | (read firstline; echo "$firstline")`
|
||||
if test "$*" = "x PID PPID UID VSZ ELAPSED TIME COMMAND"; then
|
||||
: # fine
|
||||
else
|
||||
PS_COMMAND="" # not suitable
|
||||
fi
|
||||
else
|
||||
PS_COMMAND="" # not suitable
|
||||
fi
|
||||
|
||||
if test -n "$PS_COMMAND"; then
|
||||
AC_MSG_RESULT($PS_COMMAND)
|
||||
PS_COMMAND=\"`echo $PS_COMMAND | sed -e 's/ /", "/g'`\"
|
||||
AC_DEFINE_UNQUOTED(PS_COMMAND, $PS_COMMAND,
|
||||
[Define how to invoke ps])
|
||||
else
|
||||
AC_MSG_RESULT([not suitable])
|
||||
fi
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_PS_COMMAND, test -n "$PS_COMMAND")
|
@ -0,0 +1,67 @@
|
||||
%define name kdbg
|
||||
%define version 2.0.0
|
||||
%define release 1.kde2
|
||||
%define prefix /usr
|
||||
|
||||
%define builddir $RPM_BUILD_DIR/%{name}-%{version}
|
||||
|
||||
Summary: KDbg - KDE Debugging GUI around gdb
|
||||
Name: %{name}
|
||||
Version: %{version}
|
||||
Release: %{release}
|
||||
Prefix: %{prefix}
|
||||
Group: X11/KDE/Development
|
||||
Copyright: GPL
|
||||
Distribution: RedHat 7.0
|
||||
Vendor: Johannes Sixt <j6t@kdbg.org>
|
||||
Packager: Ullrich von Bassewitz <uz@musoftware.de>
|
||||
Source: %{name}-%{version}.tar.gz
|
||||
URL: http://www.kdbg.org/
|
||||
Requires: kdelibs >= 2.0
|
||||
BuildRoot: /tmp/build-%{name}-%{version}
|
||||
|
||||
%description
|
||||
KDbg is a graphical user interface to gdb, the GNU debugger. It provides
|
||||
an intuitive interface for setting breakpoints, inspecting variables, and
|
||||
stepping through code.
|
||||
|
||||
%prep
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
rm -rf %{builddir}
|
||||
|
||||
%setup
|
||||
touch `find . -type f`
|
||||
|
||||
%build
|
||||
if [ -z "$KDEDIR" ]; then
|
||||
export KDEDIR=%{prefix}
|
||||
fi
|
||||
CXXFLAGS="$RPM_OPT_FLAGS" CFLAGS="$RPM_OPT_FLAGS" ./configure \
|
||||
--prefix=$KDEDIR
|
||||
make
|
||||
|
||||
|
||||
%install
|
||||
if [ -z "$KDEDIR" ]; then
|
||||
export KDEDIR=%{prefix}
|
||||
fi
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
make DESTDIR=$RPM_BUILD_ROOT install-strip
|
||||
|
||||
cd $RPM_BUILD_ROOT
|
||||
find . -type d | sed '1,2d;s,^\.,\%attr(-\,root\,root) \%dir ,' > \
|
||||
$RPM_BUILD_DIR/file.list.%{name}
|
||||
find . -type f | sed -e 's,^\.,\%attr(-\,root\,root) ,' \
|
||||
-e '/\/config\//s|^|%config|' >> \
|
||||
$RPM_BUILD_DIR/file.list.%{name}
|
||||
find . -type l | sed 's,^\.,\%attr(-\,root\,root) ,' >> \
|
||||
$RPM_BUILD_DIR/file.list.%{name}
|
||||
echo "%docdir $KDEDIR/share/doc/HTML" >> $RPM_BUILD_DIR/file.list.%{name}
|
||||
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
rm -rf %{builddir}
|
||||
rm -f $RPM_BUILD_DIR/file.list.%{name}
|
||||
|
||||
%files -f ../file.list.%{name}
|
@ -0,0 +1,98 @@
|
||||
# set the include path for X, qt and KDE
|
||||
INCLUDES= $(all_includes)
|
||||
|
||||
# claim, which subdirectories you want to install
|
||||
SUBDIRS = doc pics typetables testprogs
|
||||
|
||||
####### This part is very kdbg specific
|
||||
# you can add here more. This one gets installed
|
||||
bin_PROGRAMS = kdbg
|
||||
|
||||
# Which sources should be compiled for kdbg.
|
||||
kdbg_SOURCES = \
|
||||
pgmargs.cpp \
|
||||
pgmargsbase.ui \
|
||||
procattach.cpp \
|
||||
procattachbase.ui \
|
||||
debugger.cpp \
|
||||
programconfig.cpp \
|
||||
dbgdriver.cpp \
|
||||
gdbdriver.cpp \
|
||||
xsldbgdriver.cpp \
|
||||
brkpt.cpp \
|
||||
exprwnd.cpp \
|
||||
regwnd.cpp \
|
||||
memwindow.cpp \
|
||||
threadlist.cpp \
|
||||
sourcewnd.cpp \
|
||||
winstack.cpp \
|
||||
ttywnd.cpp \
|
||||
typetable.cpp \
|
||||
prefdebugger.cpp \
|
||||
prefmisc.cpp \
|
||||
pgmsettings.cpp \
|
||||
mainwndbase.cpp \
|
||||
dbgmainwnd.cpp \
|
||||
main.cpp
|
||||
|
||||
# the library search path
|
||||
kdbg_LDFLAGS = \
|
||||
$(all_libraries) $(KDE_RPATH)
|
||||
|
||||
# the libraries to link against.
|
||||
kdbg_LDADD = $(LIB_KIO)
|
||||
|
||||
# this option you can leave out. Just, if you use "make dist", you need it
|
||||
noinst_HEADERS = \
|
||||
pgmargs.h \
|
||||
procattach.h \
|
||||
debugger.h \
|
||||
programconfig.h \
|
||||
dbgdriver.h \
|
||||
gdbdriver.h \
|
||||
xsldbgdriver.h \
|
||||
brkpt.h \
|
||||
exprwnd.h \
|
||||
regwnd.h \
|
||||
memwindow.h \
|
||||
threadlist.h \
|
||||
sourcewnd.h \
|
||||
winstack.h \
|
||||
ttywnd.h \
|
||||
typetable.h \
|
||||
prefdebugger.h \
|
||||
prefmisc.h \
|
||||
pgmsettings.h \
|
||||
mainwndbase.h \
|
||||
dbgmainwnd.h \
|
||||
envvar.h \
|
||||
commandids.h \
|
||||
mydebug.h
|
||||
|
||||
kdbg_METASOURCES = AUTO
|
||||
|
||||
# if you "make clean", this files get removed. If you want to remove
|
||||
# them while "make distclean", use DISTCLEANFILES
|
||||
CLEANFILES = $(kdbg_METASOURCES)
|
||||
|
||||
xdg_apps_DATA = kdbg.desktop
|
||||
|
||||
configdir = $(kde_confdir)
|
||||
config_DATA = kdbgrc
|
||||
|
||||
rcdir = $(kde_datadir)/kdbg
|
||||
rc_DATA = kdbgui.rc
|
||||
|
||||
# Make messages.po and move it to $(top_srcdir)/po. "make merge" there.
|
||||
# the -x is for skipping messages already translated in kdelibs
|
||||
# Messages are generated in the source directory so that file names
|
||||
# mentioned in the .pot file are not prefixed by $(srcdir).
|
||||
messages:
|
||||
cd $(srcdir) && \
|
||||
extractrc *.rc *.ui > rc.cpp && \
|
||||
LIST=`find . -name \*.h -o -name \*.cpp -o -name \*.cc -o -name \*.cxx -o -name \*.C` && \
|
||||
$(XGETTEXT) -C -ki18n -kI18N_NOOP -x $(includedir)/kde.pot \
|
||||
$$LIST && mv messages.po $(top_srcdir)/po/kdbg.pot; \
|
||||
rm -f rc.cpp
|
||||
|
||||
EXTRA_DIST = kdbg.desktop kdbgrc
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,513 @@
|
||||
/*
|
||||
* Copyright Johannes Sixt
|
||||
* This file is licensed under the GNU General Public License Version 2.
|
||||
* See the file COPYING in the toplevel directory of the source directory.
|
||||
*/
|
||||
|
||||
#include <kapplication.h>
|
||||
#include <klocale.h> /* i18n */
|
||||
#include <kiconloader.h>
|
||||
#include <ksimpleconfig.h>
|
||||
#include <qdialog.h>
|
||||
#include <qkeycode.h>
|
||||
#include <qpainter.h>
|
||||
#include <qlabel.h>
|
||||
#include <qbitmap.h>
|
||||
#include "debugger.h"
|
||||
#include "brkpt.h"
|
||||
#include "dbgdriver.h"
|
||||
#include <ctype.h>
|
||||
#include <list>
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include "mydebug.h"
|
||||
|
||||
|
||||
class BreakpointItem : public QListViewItem, public Breakpoint
|
||||
{
|
||||
public:
|
||||
BreakpointItem(QListView* list, const Breakpoint& bp);
|
||||
void updateFrom(const Breakpoint& bp);
|
||||
void display(); /* sets icon and visible texts */
|
||||
bool enabled() const { return Breakpoint::enabled; }
|
||||
};
|
||||
|
||||
|
||||
BreakpointTable::BreakpointTable(QWidget* parent, const char* name) :
|
||||
QWidget(parent, name),
|
||||
m_debugger(0),
|
||||
m_bpEdit(this, "bpedit"),
|
||||
m_list(this, "bptable"),
|
||||
m_btAddBP(this, "addbp"),
|
||||
m_btAddWP(this, "addwp"),
|
||||
m_btRemove(this, "remove"),
|
||||
m_btEnaDis(this, "enadis"),
|
||||
m_btViewCode(this, "view"),
|
||||
m_btConditional(this, "conditional"),
|
||||
m_layout(this, 8),
|
||||
m_listandedit(8),
|
||||
m_buttons(8)
|
||||
{
|
||||
m_bpEdit.setMinimumSize(m_bpEdit.sizeHint());
|
||||
connect(&m_bpEdit, SIGNAL(returnPressed()), this, SLOT(addBP()));
|
||||
|
||||
initListAndIcons();
|
||||
connect(&m_list, SIGNAL(currentChanged(QListViewItem*)), SLOT(updateUI()));
|
||||
// double click on item is same as View code
|
||||
connect(&m_list, SIGNAL(doubleClicked(QListViewItem*)), this, SLOT(viewBP()));
|
||||
|
||||
// need mouse button events
|
||||
m_list.viewport()->installEventFilter(this);
|
||||
|
||||
m_btAddBP.setText(i18n("Add &Breakpoint"));
|
||||
m_btAddBP.setMinimumSize(m_btAddBP.sizeHint());
|
||||
connect(&m_btAddBP, SIGNAL(clicked()), this, SLOT(addBP()));
|
||||
|
||||
m_btAddWP.setText(i18n("Add &Watchpoint"));
|
||||
m_btAddWP.setMinimumSize(m_btAddWP.sizeHint());
|
||||
connect(&m_btAddWP, SIGNAL(clicked()), this, SLOT(addWP()));
|
||||
|
||||
m_btRemove.setText(i18n("&Remove"));
|
||||
m_btRemove.setMinimumSize(m_btRemove.sizeHint());
|
||||
connect(&m_btRemove, SIGNAL(clicked()), this, SLOT(removeBP()));
|
||||
|
||||
// the Enable/Disable button changes its label
|
||||
m_btEnaDis.setText(i18n("&Disable"));
|
||||
// make a dummy button to get the size of the alternate label
|
||||
{
|
||||
QSize size = m_btEnaDis.sizeHint();
|
||||
QPushButton dummy(this);
|
||||
dummy.setText(i18n("&Enable"));
|
||||
QSize sizeAlt = dummy.sizeHint();
|
||||
if (sizeAlt.width() > size.width())
|
||||
size.setWidth(sizeAlt.width());
|
||||
if (sizeAlt.height() > size.height())
|
||||
size.setHeight(sizeAlt.height());
|
||||
m_btEnaDis.setMinimumSize(size);
|
||||
}
|
||||
connect(&m_btEnaDis, SIGNAL(clicked()), this, SLOT(enadisBP()));
|
||||
|
||||
m_btViewCode.setText(i18n("&View Code"));
|
||||
m_btViewCode.setMinimumSize(m_btViewCode.sizeHint());
|
||||
connect(&m_btViewCode, SIGNAL(clicked()), this, SLOT(viewBP()));
|
||||
|
||||
m_btConditional.setText(i18n("&Conditional..."));
|
||||
m_btConditional.setMinimumSize(m_btConditional.sizeHint());
|
||||
connect(&m_btConditional, SIGNAL(clicked()), this, SLOT(conditionalBP()));
|
||||
|
||||
m_layout.addLayout(&m_listandedit, 10);
|
||||
m_layout.addLayout(&m_buttons);
|
||||
m_listandedit.addWidget(&m_bpEdit);
|
||||
m_listandedit.addWidget(&m_list, 10);
|
||||
m_buttons.addWidget(&m_btAddBP);
|
||||
m_buttons.addWidget(&m_btAddWP);
|
||||
m_buttons.addWidget(&m_btRemove);
|
||||
m_buttons.addWidget(&m_btEnaDis);
|
||||
m_buttons.addWidget(&m_btViewCode);
|
||||
m_buttons.addWidget(&m_btConditional);
|
||||
m_buttons.addStretch(10);
|
||||
|
||||
m_layout.activate();
|
||||
|
||||
resize(350, 300);
|
||||
|
||||
m_bpEdit.setFocus();
|
||||
}
|
||||
|
||||
BreakpointTable::~BreakpointTable()
|
||||
{
|
||||
}
|
||||
|
||||
void BreakpointTable::updateBreakList()
|
||||
{
|
||||
std::list<BreakpointItem*> deletedItems;
|
||||
|
||||
for (QListViewItem* it = m_list.firstChild(); it != 0; it = it->nextSibling()) {
|
||||
deletedItems.push_back(static_cast<BreakpointItem*>(it));
|
||||
}
|
||||
|
||||
// get the new list
|
||||
for (KDebugger::BrkptROIterator bp = m_debugger->breakpointsBegin(); bp != m_debugger->breakpointsEnd(); ++bp)
|
||||
{
|
||||
// look up this item
|
||||
for (std::list<BreakpointItem*>::iterator o = deletedItems.begin(); o != deletedItems.end(); ++o)
|
||||
{
|
||||
if ((*o)->id == bp->id) {
|
||||
(*o)->updateFrom(*bp);
|
||||
deletedItems.erase(o); /* don't delete */
|
||||
goto nextItem;
|
||||
}
|
||||
}
|
||||
// not in the list; add it
|
||||
new BreakpointItem(&m_list, *bp);
|
||||
nextItem:;
|
||||
}
|
||||
|
||||
// delete all untouched breakpoints
|
||||
while (!deletedItems.empty()) {
|
||||
delete deletedItems.front();
|
||||
deletedItems.pop_front();
|
||||
}
|
||||
}
|
||||
|
||||
BreakpointItem::BreakpointItem(QListView* list, const Breakpoint& bp) :
|
||||
QListViewItem(list),
|
||||
Breakpoint(bp)
|
||||
{
|
||||
display();
|
||||
}
|
||||
|
||||
void BreakpointItem::updateFrom(const Breakpoint& bp)
|
||||
{
|
||||
Breakpoint::operator=(bp); /* assign new values */
|
||||
display();
|
||||
}
|
||||
|
||||
void BreakpointTable::addBP()
|
||||
{
|
||||
// set a breakpoint at the specified text
|
||||
QString bpText = m_bpEdit.text();
|
||||
bpText = bpText.stripWhiteSpace();
|
||||
if (m_debugger->isReady())
|
||||
{
|
||||
Breakpoint* bp = new Breakpoint;
|
||||
bp->text = bpText;
|
||||
|
||||
m_debugger->setBreakpoint(bp, false);
|
||||
}
|
||||
}
|
||||
|
||||
void BreakpointTable::addWP()
|
||||
{
|
||||
// set a watchpoint for the specified expression
|
||||
QString wpExpr = m_bpEdit.text();
|
||||
wpExpr = wpExpr.stripWhiteSpace();
|
||||
if (m_debugger->isReady()) {
|
||||
Breakpoint* bp = new Breakpoint;
|
||||
bp->type = Breakpoint::watchpoint;
|
||||
bp->text = wpExpr;
|
||||
|
||||
m_debugger->setBreakpoint(bp, false);
|
||||
}
|
||||
}
|
||||
|
||||
void BreakpointTable::removeBP()
|
||||
{
|
||||
BreakpointItem* bp = static_cast<BreakpointItem*>(m_list.currentItem());
|
||||
if (bp != 0) {
|
||||
m_debugger->deleteBreakpoint(bp->id);
|
||||
// note that bp may be deleted by now
|
||||
// (if bp was an orphaned breakpoint)
|
||||
}
|
||||
}
|
||||
|
||||
void BreakpointTable::enadisBP()
|
||||
{
|
||||
BreakpointItem* bp = static_cast<BreakpointItem*>(m_list.currentItem());
|
||||
if (bp != 0) {
|
||||
m_debugger->enableDisableBreakpoint(bp->id);
|
||||
}
|
||||
}
|
||||
|
||||
void BreakpointTable::viewBP()
|
||||
{
|
||||
BreakpointItem* bp = static_cast<BreakpointItem*>(m_list.currentItem());
|
||||
if (bp == 0)
|
||||
return;
|
||||
|
||||
emit activateFileLine(bp->fileName, bp->lineNo, bp->address);
|
||||
}
|
||||
|
||||
void BreakpointTable::updateUI()
|
||||
{
|
||||
bool enableChkpt = m_debugger->canChangeBreakpoints();
|
||||
m_btAddBP.setEnabled(enableChkpt);
|
||||
m_btAddWP.setEnabled(enableChkpt);
|
||||
|
||||
BreakpointItem* bp = static_cast<BreakpointItem*>(m_list.currentItem());
|
||||
m_btViewCode.setEnabled(bp != 0);
|
||||
|
||||
if (bp == 0) {
|
||||
enableChkpt = false;
|
||||
} else {
|
||||
if (bp->enabled()) {
|
||||
m_btEnaDis.setText(i18n("&Disable"));
|
||||
} else {
|
||||
m_btEnaDis.setText(i18n("&Enable"));
|
||||
}
|
||||
}
|
||||
m_btRemove.setEnabled(enableChkpt);
|
||||
m_btEnaDis.setEnabled(enableChkpt);
|
||||
m_btConditional.setEnabled(enableChkpt);
|
||||
}
|
||||
|
||||
bool BreakpointTable::eventFilter(QObject* ob, QEvent* ev)
|
||||
{
|
||||
if (ev->type() == QEvent::MouseButtonPress)
|
||||
{
|
||||
QMouseEvent* mev = static_cast<QMouseEvent*>(ev);
|
||||
if (mev->button() == MidButton) {
|
||||
// enable or disable the clicked-on item
|
||||
BreakpointItem* bp =
|
||||
static_cast<BreakpointItem*>(m_list.itemAt(mev->pos()));
|
||||
if (bp != 0)
|
||||
{
|
||||
m_debugger->enableDisableBreakpoint(bp->id);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return QWidget::eventFilter(ob, ev);
|
||||
}
|
||||
|
||||
class ConditionalDlg : public QDialog
|
||||
{
|
||||
public:
|
||||
ConditionalDlg(QWidget* parent);
|
||||
~ConditionalDlg();
|
||||
|
||||
void setCondition(const QString& text) { m_condition.setText(text); }
|
||||
QString condition() { return m_condition.text(); }
|
||||
void setIgnoreCount(uint count);
|
||||
uint ignoreCount();
|
||||
|
||||
protected:
|
||||
QLabel m_conditionLabel;
|
||||
QLineEdit m_condition;
|
||||
QLabel m_ignoreLabel;
|
||||
QLineEdit m_ignoreCount;
|
||||
QPushButton m_buttonOK;
|
||||
QPushButton m_buttonCancel;
|
||||
QVBoxLayout m_layout;
|
||||
QGridLayout m_inputs;
|
||||
QHBoxLayout m_buttons;
|
||||
};
|
||||
|
||||
void BreakpointTable::conditionalBP()
|
||||
{
|
||||
BreakpointItem* bp = static_cast<BreakpointItem*>(m_list.currentItem());
|
||||
if (bp == 0)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Important: we must not keep a pointer to the Breakpoint around,
|
||||
* since it may vanish while the modal dialog is open through other
|
||||
* user interactions (like clicking at the breakpoint in the source
|
||||
* window)!
|
||||
*/
|
||||
int id = bp->id;
|
||||
|
||||
ConditionalDlg dlg(this);
|
||||
dlg.setCondition(bp->condition);
|
||||
dlg.setIgnoreCount(bp->ignoreCount);
|
||||
|
||||
if (dlg.exec() != QDialog::Accepted)
|
||||
return;
|
||||
|
||||
QString conditionInput = dlg.condition();
|
||||
int ignoreCount = dlg.ignoreCount();
|
||||
m_debugger->conditionalBreakpoint(id, conditionInput, ignoreCount);
|
||||
}
|
||||
|
||||
|
||||
void BreakpointTable::initListAndIcons()
|
||||
{
|
||||
m_list.addColumn(i18n("Location"), 220);
|
||||
m_list.addColumn(i18n("Address"), 65);
|
||||
m_list.addColumn(i18n("Hits"), 30);
|
||||
m_list.addColumn(i18n("Ignore"), 30);
|
||||
m_list.addColumn(i18n("Condition"), 200);
|
||||
|
||||
m_list.setMinimumSize(200, 100);
|
||||
|
||||
m_list.setSorting(-1);
|
||||
|
||||
// add pixmaps
|
||||
QPixmap brkena = UserIcon("brkena.xpm");
|
||||
QPixmap brkdis = UserIcon("brkdis.xpm");
|
||||
QPixmap watchena = UserIcon("watchena.xpm");
|
||||
QPixmap watchdis = UserIcon("watchdis.xpm");
|
||||
QPixmap brktmp = UserIcon("brktmp.xpm");
|
||||
QPixmap brkcond = UserIcon("brkcond.xpm");
|
||||
QPixmap brkorph = UserIcon("brkorph.xpm");
|
||||
|
||||
/*
|
||||
* There are 32 different pixmaps: The basic enabled or disabled
|
||||
* breakpoint, plus an optional overlaid brktmp icon plus an optional
|
||||
* overlaid brkcond icon, plus an optional overlaid brkorph icon. Then
|
||||
* the same sequence for watchpoints.
|
||||
*/
|
||||
m_icons.resize(32);
|
||||
QPixmap canvas(16,16);
|
||||
|
||||
for (int i = 0; i < 32; i++) {
|
||||
{
|
||||
QPainter p(&canvas);
|
||||
// clear canvas
|
||||
p.fillRect(0,0, canvas.width(),canvas.height(), cyan);
|
||||
// basic icon
|
||||
if (i & 1) {
|
||||
p.drawPixmap(1,1, (i & 8) ? watchena : brkena);
|
||||
} else {
|
||||
p.drawPixmap(1,1, (i & 8) ? watchdis : brkdis);
|
||||
}
|
||||
// temporary overlay
|
||||
if (i & 2) {
|
||||
p.drawPixmap(1,1, brktmp);
|
||||
}
|
||||
// conditional overlay
|
||||
if (i & 4) {
|
||||
p.drawPixmap(1,1, brkcond);
|
||||
}
|
||||
// orphan overlay
|
||||
if (i & 16) {
|
||||
p.drawPixmap(1,1, brkorph);
|
||||
}
|
||||
}
|
||||
canvas.setMask(canvas.createHeuristicMask());
|
||||
m_icons[i] = canvas;
|
||||
}
|
||||
}
|
||||
|
||||
void BreakpointItem::display()
|
||||
{
|
||||
BreakpointTable* lb = static_cast<BreakpointTable*>(listView()->parent());
|
||||
|
||||
/* breakpoint icon code; keep order the same as in BreakpointTable::initListAndIcons */
|
||||
int code = enabled() ? 1 : 0;
|
||||
if (temporary)
|
||||
code += 2;
|
||||
if (!condition.isEmpty() || ignoreCount > 0)
|
||||
code += 4;
|
||||
if (type == watchpoint)
|
||||
code += 8;
|
||||
if (isOrphaned())
|
||||
code += 16;
|
||||
setPixmap(0, lb->m_icons[code]);
|
||||
|
||||
// more breakpoint info
|
||||
if (!location.isEmpty()) {
|
||||
setText(0, location);
|
||||
} else if (!Breakpoint::text.isEmpty()) {
|
||||
setText(0, Breakpoint::text);
|
||||
} else if (!fileName.isEmpty()) {
|
||||
// use only the file name portion
|
||||
QString file = fileName;
|
||||
int slash = file.findRev('/');
|
||||
if (slash >= 0) {
|
||||
file = file.mid(slash+1);
|
||||
}
|
||||
// correct zero-based line-numbers
|
||||
setText(0, file + ":" + QString::number(lineNo+1));
|
||||
} else {
|
||||
setText(0, "*" + address.asString());
|
||||
}
|
||||
|
||||
int c = 0;
|
||||
setText(++c, address.asString());
|
||||
QString tmp;
|
||||
if (hitCount == 0) {
|
||||
setText(++c, QString());
|
||||
} else {
|
||||
tmp.setNum(hitCount);
|
||||
setText(++c, tmp);
|
||||
}
|
||||
if (ignoreCount == 0) {
|
||||
setText(++c, QString());
|
||||
} else {
|
||||
tmp.setNum(ignoreCount);
|
||||
setText(++c, tmp);
|
||||
}
|
||||
if (condition.isEmpty()) {
|
||||
setText(++c, QString());
|
||||
} else {
|
||||
setText(++c, condition);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ConditionalDlg::ConditionalDlg(QWidget* parent) :
|
||||
QDialog(parent, "conditional", true),
|
||||
m_conditionLabel(this, "condLabel"),
|
||||
m_condition(this, "condition"),
|
||||
m_ignoreLabel(this, "ignoreLabel"),
|
||||
m_ignoreCount(this, "ignoreCount"),
|
||||
m_buttonOK(this, "ok"),
|
||||
m_buttonCancel(this, "cancel"),
|
||||
m_layout(this, 10),
|
||||
m_inputs(2, 2, 10),
|
||||
m_buttons(4)
|
||||
{
|
||||
QString title = kapp->caption();
|
||||
title += i18n(": Conditional breakpoint");
|
||||
setCaption(title);
|
||||
|
||||
m_conditionLabel.setText(i18n("&Condition:"));
|
||||
m_conditionLabel.setMinimumSize(m_conditionLabel.sizeHint());
|
||||
m_ignoreLabel.setText(i18n("Ignore &next hits:"));
|
||||
m_ignoreLabel.setMinimumSize(m_ignoreLabel.sizeHint());
|
||||
|
||||
m_condition.setMinimumSize(150, 24);
|
||||
m_condition.setMaxLength(10000);
|
||||
m_condition.setFrame(true);
|
||||
m_ignoreCount.setMinimumSize(150, 24);
|
||||
m_ignoreCount.setMaxLength(10000);
|
||||
m_ignoreCount.setFrame(true);
|
||||
|
||||
m_conditionLabel.setBuddy(&m_condition);
|
||||
m_ignoreLabel.setBuddy(&m_ignoreCount);
|
||||
|
||||
m_buttonOK.setMinimumSize(100, 30);
|
||||
connect(&m_buttonOK, SIGNAL(clicked()), SLOT(accept()));
|
||||
m_buttonOK.setText(i18n("OK"));
|
||||
m_buttonOK.setDefault(true);
|
||||
|
||||
m_buttonCancel.setMinimumSize(100, 30);
|
||||
connect(&m_buttonCancel, SIGNAL(clicked()), SLOT(reject()));
|
||||
m_buttonCancel.setText(i18n("Cancel"));
|
||||
|
||||
m_layout.addLayout(&m_inputs);
|
||||
m_inputs.addWidget(&m_conditionLabel, 0, 0);
|
||||
m_inputs.addWidget(&m_condition, 0, 1);
|
||||
m_inputs.addWidget(&m_ignoreLabel, 1, 0);
|
||||
m_inputs.addWidget(&m_ignoreCount, 1, 1);
|
||||
m_inputs.setColStretch(1, 10);
|
||||
m_layout.addLayout(&m_buttons);
|
||||
m_layout.addStretch(10);
|
||||
m_buttons.addStretch(10);
|
||||
m_buttons.addWidget(&m_buttonOK);
|
||||
m_buttons.addSpacing(40);
|
||||
m_buttons.addWidget(&m_buttonCancel);
|
||||
m_buttons.addStretch(10);
|
||||
|
||||
m_layout.activate();
|
||||
|
||||
m_condition.setFocus();
|
||||
resize(400, 100);
|
||||
}
|
||||
|
||||
ConditionalDlg::~ConditionalDlg()
|
||||
{
|
||||
}
|
||||
|
||||
uint ConditionalDlg::ignoreCount()
|
||||
{
|
||||
bool ok;
|
||||
QString input = m_ignoreCount.text();
|
||||
uint result = input.toUInt(&ok);
|
||||
return ok ? result : 0;
|
||||
}
|
||||
|
||||
void ConditionalDlg::setIgnoreCount(uint count)
|
||||
{
|
||||
QString text;
|
||||
// set empty if ignore count is zero
|
||||
if (count > 0) {
|
||||
text.setNum(count);
|
||||
}
|
||||
m_ignoreCount.setText(text);
|
||||
}
|
||||
|
||||
|
||||
#include "brkpt.moc"
|
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright Johannes Sixt
|
||||
* This file is licensed under the GNU General Public License Version 2.
|
||||
* See the file COPYING in the toplevel directory of the source directory.
|
||||
*/
|
||||
|
||||
#ifndef BRKPT_H
|
||||
#define BRKPT_H
|
||||
|
||||
#include <qlistview.h>
|
||||
#include <qlayout.h>
|
||||
#include <qpushbutton.h>
|
||||
#include <qlineedit.h>
|
||||
#include <qvaluevector.h>
|
||||
|
||||
class KDebugger;
|
||||
class BreakpointItem;
|
||||
|
||||
|
||||
class BreakpointTable : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
BreakpointTable(QWidget* parent, const char* name);
|
||||
~BreakpointTable();
|
||||
void setDebugger(KDebugger* deb) { m_debugger = deb; }
|
||||
|
||||
protected:
|
||||
KDebugger* m_debugger;
|
||||
QLineEdit m_bpEdit;
|
||||
QListView m_list;
|
||||
QPushButton m_btAddBP;
|
||||
QPushButton m_btAddWP;
|
||||
QPushButton m_btRemove;
|
||||
QPushButton m_btEnaDis;
|
||||
QPushButton m_btViewCode;
|
||||
QPushButton m_btConditional;
|
||||
QHBoxLayout m_layout;
|
||||
QVBoxLayout m_listandedit;
|
||||
QVBoxLayout m_buttons;
|
||||
QValueVector<QPixmap> m_icons;
|
||||
|
||||
void insertBreakpoint(int num, bool temp, bool enabled, QString location,
|
||||
QString fileName = 0, int lineNo = -1,
|
||||
int hits = 0, uint ignoreCount = 0,
|
||||
QString condition = QString());
|
||||
void initListAndIcons();
|
||||
virtual bool eventFilter(QObject* ob, QEvent* ev);
|
||||
|
||||
friend class BreakpointItem;
|
||||
|
||||
signals:
|
||||
/**
|
||||
* This signal is emitted when the user wants to go to the source code
|
||||
* where the current breakpoint is in.
|
||||
*
|
||||
* @param file specifies the file; this is not necessarily a full path
|
||||
* name, and if it is relative, you won't know relative to what, you
|
||||
* can only guess.
|
||||
* @param lineNo specifies the line number (0-based!).
|
||||
* @param address specifies the exact address of the breakpoint.
|
||||
*/
|
||||
void activateFileLine(const QString& file, int lineNo, const DbgAddr& address);
|
||||
public slots:
|
||||
virtual void addBP();
|
||||
virtual void addWP();
|
||||
virtual void removeBP();
|
||||
virtual void enadisBP();
|
||||
virtual void viewBP();
|
||||
virtual void conditionalBP();
|
||||
void updateUI();
|
||||
void updateBreakList();
|
||||
};
|
||||
|
||||
#endif // BRKPT_H
|
@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright Johannes Sixt
|
||||
* This file is licensed under the GNU General Public License Version 2.
|
||||
* See the file COPYING in the toplevel directory of the source directory.
|
||||
*/
|
||||
|
||||
#ifndef COMMANDIDS_H
|
||||
#define COMMANDIDS_H
|
||||
|
||||
// statusbar ids
|
||||
#define ID_STATUS_MSG 191
|
||||
#define ID_STATUS_BUSY 192
|
||||
#define ID_STATUS_ACTIVE 193
|
||||
#endif // COMMANDIDS_H
|
@ -0,0 +1,527 @@
|
||||
/*
|
||||
* Copyright Johannes Sixt
|
||||
* This file is licensed under the GNU General Public License Version 2.
|
||||
* See the file COPYING in the toplevel directory of the source directory.
|
||||
*/
|
||||
|
||||
#include "dbgdriver.h"
|
||||
#include "exprwnd.h"
|
||||
#include <qstringlist.h>
|
||||
#include <ctype.h>
|
||||
#include <stdlib.h> /* strtol, atoi */
|
||||
#include <algorithm>
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include "mydebug.h"
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
DebuggerDriver::DebuggerDriver() :
|
||||
KProcess(),
|
||||
m_state(DSidle),
|
||||
m_output(0),
|
||||
m_outputLen(0),
|
||||
m_outputAlloc(0),
|
||||
m_activeCmd(0),
|
||||
m_promptMinLen(0),
|
||||
m_promptLastChar('\0')
|
||||
{
|
||||
m_outputAlloc = 4000;
|
||||
m_output = new char[m_outputAlloc];
|
||||
|
||||
m_prompt[0] = '\0';
|
||||
// Derived classes can set either m_prompt or m_promptRE.
|
||||
// If m_promptRE is set, it must include the '$' at the end.
|
||||
// m_promptLastChar and m_promptMinLen must also be set.
|
||||
|
||||
// debugger process
|
||||
connect(this, SIGNAL(receivedStdout(KProcess*,char*,int)),
|
||||
SLOT(slotReceiveOutput(KProcess*,char*,int)));
|
||||
connect(this, SIGNAL(wroteStdin(KProcess*)), SLOT(slotCommandRead(KProcess*)));
|
||||
connect(this, SIGNAL(processExited(KProcess*)), SLOT(slotExited(KProcess*)));
|
||||
}
|
||||
|
||||
DebuggerDriver::~DebuggerDriver()
|
||||
{
|
||||
delete[] m_output;
|
||||
flushHiPriQueue();
|
||||
flushLoPriQueue();
|
||||
}
|
||||
|
||||
int DebuggerDriver::commSetupDoneC()
|
||||
{
|
||||
TRACE(__PRETTY_FUNCTION__);
|
||||
|
||||
if (!KProcess::commSetupDoneC())
|
||||
return 0;
|
||||
|
||||
close(STDERR_FILENO);
|
||||
return dup2(STDOUT_FILENO, STDERR_FILENO) != -1;
|
||||
}
|
||||
|
||||
|
||||
bool DebuggerDriver::startup(QString cmdStr)
|
||||
{
|
||||
// clear command queues
|
||||
delete m_activeCmd;
|
||||
m_activeCmd = 0;
|
||||
flushHiPriQueue();
|
||||
flushLoPriQueue();
|
||||
m_state = DSidle;
|
||||
|
||||
// debugger executable
|
||||
if (cmdStr.isEmpty())
|
||||
cmdStr = defaultInvocation();
|
||||
|
||||
QStringList cmd = QStringList::split(' ', cmdStr);
|
||||
clearArguments();
|
||||
for (QStringList::iterator i = cmd.begin(); i != cmd.end(); ++i) {
|
||||
*this << *i;
|
||||
}
|
||||
|
||||
if (!start(KProcess::NotifyOnExit,
|
||||
KProcess::Communication(KProcess::Stdin|KProcess::Stdout))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// open log file
|
||||
if (!m_logFile.isOpen() && !m_logFileName.isEmpty()) {
|
||||
m_logFile.setName(m_logFileName);
|
||||
m_logFile.open(IO_WriteOnly);
|
||||
}
|
||||
|
||||
// these must be set by derived classes in their constructor
|
||||
assert(m_promptMinLen > 0); // _must_ have a prompt
|
||||
assert(m_promptLastChar != '\0'); // last char _must_ be fixed
|
||||
assert(m_prompt[0] == '\0' || strlen(m_prompt) == m_promptMinLen);
|
||||
// either a prompt or a regexp
|
||||
assert(m_prompt[0] != '\0' && m_promptMinLen < sizeof(m_prompt) ||
|
||||
!m_promptRE.isEmpty() && m_promptRE.isValid());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DebuggerDriver::slotExited(KProcess*)
|
||||
{
|
||||
static const char txt[] = "\n====== debugger exited ======\n";
|
||||
if (m_logFile.isOpen()) {
|
||||
m_logFile.writeBlock(txt,sizeof(txt)-1);
|
||||
}
|
||||
|
||||
// reset state
|
||||
m_state = DSidle;
|
||||
// empty buffer
|
||||
m_outputLen = 0;
|
||||
*m_output = '\0';
|
||||
}
|
||||
|
||||
|
||||
CmdQueueItem* DebuggerDriver::executeCmdString(DbgCommand cmd,
|
||||
QString cmdString, bool clearLow)
|
||||
{
|
||||
// place a new command into the high-priority queue
|
||||
CmdQueueItem* cmdItem = new CmdQueueItem(cmd, cmdString);
|
||||
m_hipriCmdQueue.push(cmdItem);
|
||||
|
||||
if (clearLow) {
|
||||
if (m_state == DSrunningLow) {
|
||||
// take the liberty to interrupt the running command
|
||||
m_state = DSinterrupted;
|
||||
kill(SIGINT);
|
||||
ASSERT(m_activeCmd != 0);
|
||||
TRACE(QString().sprintf("interrupted the command %d",
|
||||
(m_activeCmd ? m_activeCmd->m_cmd : -1)));
|
||||
delete m_activeCmd;
|
||||
m_activeCmd = 0;
|
||||
}
|
||||
flushLoPriQueue();
|
||||
}
|
||||
// if gdb is idle, send it the command
|
||||
if (m_state == DSidle) {
|
||||
ASSERT(m_activeCmd == 0);
|
||||
writeCommand();
|
||||
}
|
||||
|
||||
return cmdItem;
|
||||
}
|
||||
|
||||
bool CmdQueueItem::IsEqualCmd::operator()(CmdQueueItem* cmd) const
|
||||
{
|
||||
return cmd->m_cmd == m_cmd && cmd->m_cmdString == m_str;
|
||||
}
|
||||
|
||||
CmdQueueItem* DebuggerDriver::queueCmdString(DbgCommand cmd,
|
||||
QString cmdString, QueueMode mode)
|
||||
{
|
||||
// place a new command into the low-priority queue
|
||||
std::list<CmdQueueItem*>::iterator i;
|
||||
CmdQueueItem* cmdItem = 0;
|
||||
switch (mode) {
|
||||
case QMoverrideMoreEqual:
|
||||
case QMoverride:
|
||||
// check whether gdb is currently processing this command
|
||||
if (m_activeCmd != 0 &&
|
||||
m_activeCmd->m_cmd == cmd && m_activeCmd->m_cmdString == cmdString)
|
||||
{
|
||||
return m_activeCmd;
|
||||
}
|
||||
// check whether there is already the same command in the queue
|
||||
i = find_if(m_lopriCmdQueue.begin(), m_lopriCmdQueue.end(), CmdQueueItem::IsEqualCmd(cmd, cmdString));
|
||||
if (i != m_lopriCmdQueue.end()) {
|
||||
// found one
|
||||
cmdItem = *i;
|
||||
if (mode == QMoverrideMoreEqual) {
|
||||
// All commands are equal, but some are more equal than others...
|
||||
// put this command in front of all others
|
||||
m_lopriCmdQueue.erase(i);
|
||||
m_lopriCmdQueue.push_front(cmdItem);
|
||||
}
|
||||
break;
|
||||
} // else none found, so add it
|
||||
// drop through
|
||||
case QMnormal:
|
||||
cmdItem = new CmdQueueItem(cmd, cmdString);
|
||||
m_lopriCmdQueue.push_back(cmdItem);
|
||||
}
|
||||
|
||||
// if gdb is idle, send it the command
|
||||
if (m_state == DSidle) {
|
||||
ASSERT(m_activeCmd == 0);
|
||||
writeCommand();
|
||||
}
|
||||
|
||||
return cmdItem;
|
||||
}
|
||||
|
||||
// dequeue a pending command, make it the active one and send it to gdb
|
||||
void DebuggerDriver::writeCommand()
|
||||
{
|
||||
// ASSERT(m_activeCmd == 0);
|
||||
assert(m_activeCmd == 0);
|
||||
|
||||
// first check the high-priority queue - only if it is empty
|
||||
// use a low-priority command.
|
||||
CmdQueueItem* cmd;
|
||||
DebuggerState newState = DScommandSent;
|
||||
if (!m_hipriCmdQueue.empty()) {
|
||||
cmd = m_hipriCmdQueue.front();
|
||||
m_hipriCmdQueue.pop();
|
||||
} else if (!m_lopriCmdQueue.empty()) {
|
||||
cmd = m_lopriCmdQueue.front();
|
||||
m_lopriCmdQueue.pop_front();
|
||||
newState = DScommandSentLow;
|
||||
} else {
|
||||
// nothing to do
|
||||
m_state = DSidle; /* is necessary if command was interrupted earlier */
|
||||
return;
|
||||
}
|
||||
|
||||
m_activeCmd = cmd;
|
||||
TRACE("in writeCommand: " + cmd->m_cmdString);
|
||||
|
||||
const char* str = cmd->m_cmdString;
|
||||
writeStdin(const_cast<char*>(str), cmd->m_cmdString.length());
|
||||
|
||||
// write also to log file
|
||||
if (m_logFile.isOpen()) {
|
||||
m_logFile.writeBlock(str, cmd->m_cmdString.length());
|
||||
m_logFile.flush();
|
||||
}
|
||||
|
||||
m_state = newState;
|
||||
}
|
||||
|
||||
void DebuggerDriver::flushLoPriQueue()
|
||||
{
|
||||
while (!m_lopriCmdQueue.empty()) {
|
||||
delete m_lopriCmdQueue.back();
|
||||
m_lopriCmdQueue.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerDriver::flushHiPriQueue()
|
||||
{
|
||||
while (!m_hipriCmdQueue.empty()) {
|
||||
delete m_hipriCmdQueue.front();
|
||||
m_hipriCmdQueue.pop();
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerDriver::flushCommands(bool hipriOnly)
|
||||
{
|
||||
flushHiPriQueue();
|
||||
if (!hipriOnly) {
|
||||
flushLoPriQueue();
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerDriver::slotCommandRead(KProcess*)
|
||||
{
|
||||
TRACE(__PRETTY_FUNCTION__);
|
||||
|
||||
// there must be an active command which is not yet commited
|
||||
ASSERT(m_state == DScommandSent || m_state == DScommandSentLow);
|
||||
ASSERT(m_activeCmd != 0);
|
||||
ASSERT(!m_activeCmd->m_committed);
|
||||
|
||||
// commit the command
|
||||
m_activeCmd->m_committed = true;
|
||||
|
||||
// now the debugger is officially working on the command
|
||||
m_state = m_state == DScommandSent ? DSrunning : DSrunningLow;
|
||||
|
||||
// set the flag that reflects whether the program is really running
|
||||
switch (m_activeCmd->m_cmd) {
|
||||
case DCrun: case DCcont: case DCnext: case DCstep: case DCfinish: case DCuntil:
|
||||
emit inferiorRunning();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// re-receive delayed output
|
||||
while (!m_delayedOutput.empty()) {
|
||||
QByteArray delayed = m_delayedOutput.front();
|
||||
m_delayedOutput.pop();
|
||||
slotReceiveOutput(0, const_cast<char*>(delayed.data()), delayed.size());
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerDriver::slotReceiveOutput(KProcess*, char* buffer, int buflen)
|
||||
{
|
||||
/*
|
||||
* The debugger should be running (processing a command) at this point.
|
||||
* If it is not, it is still idle because we haven't received the
|
||||
* wroteStdin signal yet, in which case there must be an active command
|
||||
* which is not commited.
|
||||
*/
|
||||
if (m_state == DScommandSent || m_state == DScommandSentLow) {
|
||||
ASSERT(m_activeCmd != 0);
|
||||
ASSERT(!m_activeCmd->m_committed);
|
||||
/*
|
||||
* We received output before we got signal wroteStdin. Collect this
|
||||
* output, it will be re-sent by commandRead when it gets the
|
||||
* acknowledgment for the uncommitted command.
|
||||
*/
|
||||
m_delayedOutput.push(QByteArray().duplicate(buffer, buflen));
|
||||
return;
|
||||
}
|
||||
// write to log file (do not log delayed output - it would appear twice)
|
||||
if (m_logFile.isOpen()) {
|
||||
m_logFile.writeBlock(buffer, buflen);
|
||||
m_logFile.flush();
|
||||
}
|
||||
|
||||
/*
|
||||
* gdb sometimes produces stray output while it's idle. This happens if
|
||||
* it receives a signal, most prominently a SIGCONT after a SIGTSTP:
|
||||
* The user haltet kdbg with Ctrl-Z, then continues it with "fg", which
|
||||
* also continues gdb, which repeats the prompt!
|
||||
*/
|
||||
if (m_activeCmd == 0 && m_state != DSinterrupted) {
|
||||
// ignore the output
|
||||
TRACE("ignoring stray output: " + QString::fromLatin1(buffer, buflen));
|
||||
return;
|
||||
}
|
||||
ASSERT(m_state == DSrunning || m_state == DSrunningLow || m_state == DSinterrupted);
|
||||
ASSERT(m_activeCmd != 0 || m_state == DSinterrupted);
|
||||
|
||||
// collect output until next prompt string is found
|
||||
|
||||
// accumulate it
|
||||
if (m_outputLen + buflen >= m_outputAlloc) {
|
||||
/*
|
||||
* Must enlarge m_output: double it. Note: That particular
|
||||
* sequence of commandes here ensures exception safety.
|
||||
*/
|
||||
int newSize = m_outputAlloc * 2;
|
||||
char* newBuf = new char[newSize];
|
||||
memcpy(newBuf, m_output, m_outputLen);
|
||||
delete[] m_output;
|
||||
m_output = newBuf;
|
||||
m_outputAlloc = newSize;
|
||||
}
|
||||
memcpy(m_output+m_outputLen, buffer, buflen);
|
||||
m_outputLen += buflen;
|
||||
m_output[m_outputLen] = '\0';
|
||||
|
||||
/*
|
||||
* If there's a prompt string in the collected output, it must be at
|
||||
* the very end. In order to quickly find out whether there is a prompt
|
||||
* string, we check whether the last character of m_output is identical
|
||||
* to the last character of the prompt string. Only if it is, we check
|
||||
* for the full prompt string.
|
||||
*
|
||||
* Note: Using the regular expression here is most expensive, because
|
||||
* it translates m_output to a QString each time.
|
||||
*
|
||||
* Note: It could nevertheless happen that a character sequence that is
|
||||
* equal to the prompt string appears at the end of the output,
|
||||
* although it is very, very unlikely (namely as part of a string that
|
||||
* lingered in gdb's output buffer due to some timing/heavy load
|
||||
* conditions for a very long time such that that buffer overflowed
|
||||
* exactly at the end of the prompt string look-a-like).
|
||||
*/
|
||||
int promptStart = -1;
|
||||
if (m_output[m_outputLen-1] == m_promptLastChar &&
|
||||
m_outputLen >= m_promptMinLen)
|
||||
{
|
||||
// this is a candidate for a prompt at the end,
|
||||
// now see if there really is
|
||||
if (m_prompt[0] != '\0') {
|
||||
if (strncmp(m_output+m_outputLen-m_promptMinLen,
|
||||
m_prompt, m_promptMinLen) == 0)
|
||||
{
|
||||
promptStart = m_outputLen-m_promptMinLen;
|
||||
}
|
||||
} else {
|
||||
QString output = QString::fromLatin1(m_output, m_outputLen);
|
||||
#if QT_VERSION >= 300
|
||||
promptStart = m_promptRE.search(output);
|
||||
#else
|
||||
promptStart = m_promptRE.match(output);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
if (promptStart >= 0)
|
||||
{
|
||||
// found prompt!
|
||||
|
||||
// terminate output before the prompt
|
||||
m_output[promptStart] = '\0';
|
||||
|
||||
/*
|
||||
* We've got output for the active command. But if it was
|
||||
* interrupted, ignore it.
|
||||
*/
|
||||
if (m_state != DSinterrupted) {
|
||||
/*
|
||||
* m_state shouldn't be DSidle while we are parsing the output
|
||||
* so that all commands produced by parse() go into the queue
|
||||
* instead of being written to gdb immediately.
|
||||
*/
|
||||
ASSERT(m_state != DSidle);
|
||||
CmdQueueItem* cmd = m_activeCmd;
|
||||
m_activeCmd = 0;
|
||||
commandFinished(cmd);
|
||||
delete cmd;
|
||||
}
|
||||
|
||||
// empty buffer
|
||||
m_outputLen = 0;
|
||||
*m_output = '\0';
|
||||
// also clear delayed output if interrupted
|
||||
if (m_state == DSinterrupted) {
|
||||
m_delayedOutput = std::queue<QByteArray>();
|
||||
}
|
||||
|
||||
/*
|
||||
* We parsed some output successfully. Unless there's more delayed
|
||||
* output, the debugger must be idle now, so send down the next
|
||||
* command.
|
||||
*/
|
||||
if (m_delayedOutput.empty()) {
|
||||
if (m_hipriCmdQueue.empty() && m_lopriCmdQueue.empty()) {
|
||||
// no pending commands
|
||||
m_state = DSidle;
|
||||
emit enterIdleState();
|
||||
} else {
|
||||
writeCommand();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerDriver::dequeueCmdByVar(VarTree* var)
|
||||
{
|
||||
if (var == 0)
|
||||
return;
|
||||
|
||||
std::list<CmdQueueItem*>::iterator i = m_lopriCmdQueue.begin();
|
||||
while (i != m_lopriCmdQueue.end()) {
|
||||
if ((*i)->m_expr != 0 && var->isAncestorEq((*i)->m_expr)) {
|
||||
// this is indeed a critical command; delete it
|
||||
TRACE("removing critical lopri-cmd: " + (*i)->m_cmdString);
|
||||
delete *i;
|
||||
m_lopriCmdQueue.erase(i++);
|
||||
} else
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QString DebuggerDriver::editableValue(VarTree* value)
|
||||
{
|
||||
// by default, let the user edit what is visible
|
||||
return value->value();
|
||||
}
|
||||
|
||||
|
||||
StackFrame::~StackFrame()
|
||||
{
|
||||
delete var;
|
||||
}
|
||||
|
||||
|
||||
DbgAddr::DbgAddr(const QString& aa) :
|
||||
a(aa)
|
||||
{
|
||||
cleanAddr();
|
||||
}
|
||||
|
||||
/*
|
||||
* We strip off the leading 0x and any leading zeros.
|
||||
*/
|
||||
void DbgAddr::cleanAddr()
|
||||
{
|
||||
if (a.isEmpty())
|
||||
return;
|
||||
|
||||
while (a[0] == '0' || a[0] == 'x') {
|
||||
a.remove(0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void DbgAddr::operator=(const QString& aa)
|
||||
{
|
||||
a = aa;
|
||||
fnoffs = QString();
|
||||
cleanAddr();
|
||||
}
|
||||
|
||||
/* Re-attach 0x in front of the address */
|
||||
QString DbgAddr::asString() const
|
||||
{
|
||||
if (a.isEmpty())
|
||||
return QString();
|
||||
else
|
||||
return "0x" + a;
|
||||
}
|
||||
|
||||
bool operator==(const DbgAddr& a1, const DbgAddr& a2)
|
||||
{
|
||||
return QString::compare(a1.a, a2.a) == 0;
|
||||
}
|
||||
|
||||
bool operator>(const DbgAddr& a1, const DbgAddr& a2)
|
||||
{
|
||||
if (a1.a.length() > a2.a.length())
|
||||
return true;
|
||||
if (a1.a.length() < a2.a.length())
|
||||
return false;
|
||||
return QString::compare(a1.a, a2.a) > 0;
|
||||
}
|
||||
|
||||
|
||||
Breakpoint::Breakpoint() :
|
||||
id(0),
|
||||
type(breakpoint),
|
||||
temporary(false),
|
||||
enabled(true),
|
||||
ignoreCount(0),
|
||||
hitCount(0),
|
||||
lineNo(0)
|
||||
{ }
|
||||
|
||||
#include "dbgdriver.moc"
|
@ -0,0 +1,622 @@
|
||||
/*
|
||||
* Copyright Johannes Sixt
|
||||
* This file is licensed under the GNU General Public License Version 2.
|
||||
* See the file COPYING in the toplevel directory of the source directory.
|
||||
*/
|
||||
|
||||
#ifndef DBGDRIVER_H
|
||||
#define DBGDRIVER_H
|
||||
|
||||
#include <qfile.h>
|
||||
#include <qregexp.h>
|
||||
#include <qcstring.h>
|
||||
#include <kprocess.h>
|
||||
#include <queue>
|
||||
#include <list>
|
||||
|
||||
|
||||
class VarTree;
|
||||
class ExprValue;
|
||||
class ExprWnd;
|
||||
class KDebugger;
|
||||
class QStringList;
|
||||
|
||||
|
||||
/**
|
||||
* A type representing an address.
|
||||
*/
|
||||
struct DbgAddr
|
||||
{
|
||||
QString a;
|
||||
QString fnoffs;
|
||||
DbgAddr() { }
|
||||
DbgAddr(const QString& aa);
|
||||
DbgAddr(const DbgAddr& src) : a(src.a), fnoffs(src.fnoffs) { }
|
||||
void operator=(const QString& aa);
|
||||
void operator=(const DbgAddr& src) { a = src.a; fnoffs = src.fnoffs; }
|
||||
QString asString() const;
|
||||
bool isEmpty() const { return a.isEmpty(); }
|
||||
protected:
|
||||
void cleanAddr();
|
||||
};
|
||||
bool operator==(const DbgAddr& a1, const DbgAddr& a2);
|
||||
bool operator>(const DbgAddr& a1, const DbgAddr& a2);
|
||||
|
||||
|
||||
enum DbgCommand {
|
||||
DCinitialize,
|
||||
DCtty,
|
||||
DCexecutable,
|
||||
DCtargetremote,
|
||||
DCcorefile,
|
||||
DCattach,
|
||||
DCinfolinemain,
|
||||
DCinfolocals,
|
||||
DCinforegisters,
|
||||
DCexamine,
|
||||
DCinfoline,
|
||||
DCdisassemble,
|
||||
DCsetargs,
|
||||
DCsetenv,
|
||||
DCunsetenv,
|
||||
DCsetoption, /* debugger options */
|
||||
DCcd,
|
||||
DCbt,
|
||||
DCrun,
|
||||
DCcont,
|
||||
DCstep,
|
||||
DCstepi,
|
||||
DCnext,
|
||||
DCnexti,
|
||||
DCfinish,
|
||||
DCuntil, /* line number is zero-based! */
|
||||
DCkill,
|
||||
DCbreaktext,
|
||||
DCbreakline, /* line number is zero-based! */
|
||||
DCtbreakline, /* line number is zero-based! */
|
||||
DCbreakaddr,
|
||||
DCtbreakaddr,
|
||||
DCwatchpoint,
|
||||
DCdelete,
|
||||
DCenable,
|
||||
DCdisable,
|
||||
DCprint,
|
||||
DCprintDeref,
|
||||
DCprintStruct,
|
||||
DCprintQStringStruct,
|
||||
DCframe,
|
||||
DCfindType,
|
||||
DCinfosharedlib,
|
||||
DCthread,
|
||||
DCinfothreads,
|
||||
DCinfobreak,
|
||||
DCcondition,
|
||||
DCsetpc,
|
||||
DCignore,
|
||||
DCprintWChar,
|
||||
DCsetvariable
|
||||
};
|
||||
|
||||
enum RunDevNull {
|
||||
RDNstdin = 0x1, /* redirect stdin to /dev/null */
|
||||
RDNstdout = 0x2, /* redirect stdout to /dev/null */
|
||||
RDNstderr = 0x4 /* redirect stderr to /dev/null */
|
||||
};
|
||||
|
||||
/**
|
||||
* How the memory dump is formated. The lowest 4 bits define the size of
|
||||
* the entities. The higher bits define how these are formatted. Note that
|
||||
* not all combinations make sense.
|
||||
*/
|
||||
enum MemoryDumpType {
|
||||
// sizes
|
||||
MDTbyte = 0x1,
|
||||
MDThalfword = 0x2,
|
||||
MDTword = 0x3,
|
||||
MDTgiantword = 0x4,
|
||||
MDTsizemask = 0xf,
|
||||
// formats
|
||||
MDThex = 0x10,
|
||||
MDTsigned = 0x20,
|
||||
MDTunsigned = 0x30,
|
||||
MDToctal = 0x40,
|
||||
MDTbinary = 0x50,
|
||||
MDTaddress = 0x60,
|
||||
MDTchar = 0x70,
|
||||
MDTfloat = 0x80,
|
||||
MDTstring = 0x90,
|
||||
MDTinsn = 0xa0,
|
||||
MDTformatmask = 0xf0
|
||||
};
|
||||
|
||||
struct Breakpoint;
|
||||
|
||||
/**
|
||||
* Debugger commands are placed in a queue. Only one command at a time is
|
||||
* sent down to the debugger. All other commands in the queue are retained
|
||||
* until the sent command has been processed by gdb. The debugger tells us
|
||||
* that it's done with the command by sending the prompt. The output of the
|
||||
* debugger is parsed at that time. Then, if more commands are in the
|
||||
* queue, the next one is sent to the debugger.
|
||||
*/
|
||||
struct CmdQueueItem
|
||||
{
|
||||
DbgCommand m_cmd;
|
||||
QString m_cmdString;
|
||||
bool m_committed; /* just a debugging aid */
|
||||
// remember which expression when printing an expression
|
||||
VarTree* m_expr;
|
||||
ExprWnd* m_exprWnd;
|
||||
// remember file position
|
||||
QString m_fileName;
|
||||
int m_lineNo;
|
||||
// the breakpoint info
|
||||
Breakpoint* m_brkpt;
|
||||
int m_existingBrkpt;
|
||||
// whether command was emitted due to direct user request (only set when relevant)
|
||||
bool m_byUser;
|
||||
|
||||
CmdQueueItem(DbgCommand cmd, const QString& str) :
|
||||
m_cmd(cmd),
|
||||
m_cmdString(str),
|
||||
m_committed(false),
|
||||
m_expr(0),
|
||||
m_exprWnd(0),
|
||||
m_lineNo(0),
|
||||
m_brkpt(0),
|
||||
m_existingBrkpt(0),
|
||||
m_byUser(false)
|
||||
{ }
|
||||
|
||||
struct IsEqualCmd
|
||||
{
|
||||
IsEqualCmd(DbgCommand cmd, const QString& str) : m_cmd(cmd), m_str(str) { }
|
||||
bool operator()(CmdQueueItem*) const;
|
||||
DbgCommand m_cmd;
|
||||
const QString& m_str;
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* The information about a breakpoint that is parsed from the list of
|
||||
* breakpoints.
|
||||
*/
|
||||
struct Breakpoint
|
||||
{
|
||||
int id; /* gdb's number */
|
||||
enum Type {
|
||||
breakpoint, watchpoint
|
||||
} type;
|
||||
bool temporary;
|
||||
bool enabled;
|
||||
QString location;
|
||||
QString text; /* text if set using DCbreaktext */
|
||||
DbgAddr address; /* exact address of breakpoint */
|
||||
QString condition; /* condition as printed by gdb */
|
||||
int ignoreCount; /* ignore next that may hits */
|
||||
int hitCount; /* as reported by gdb */
|
||||
// the following items repeat the location, but in a better usable way
|
||||
QString fileName;
|
||||
int lineNo; /* zero-based line number */
|
||||
Breakpoint();
|
||||
bool isOrphaned() const { return id < 0; }
|
||||
};
|
||||
|
||||
/**
|
||||
* Information about a stack frame.
|
||||
*/
|
||||
struct FrameInfo
|
||||
{
|
||||
QString fileName;
|
||||
int lineNo; /* zero-based line number */
|
||||
DbgAddr address; /* exact address of PC */
|
||||
};
|
||||
|
||||
/**
|
||||
* The information about a stack frame as parsed from the backtrace.
|
||||
*/
|
||||
struct StackFrame : FrameInfo
|
||||
{
|
||||
int frameNo;
|
||||
ExprValue* var; /* more information if non-zero */
|
||||
StackFrame() : var(0) { }
|
||||
~StackFrame();
|
||||
};
|
||||
|
||||
/**
|
||||
* The information about a thread as parsed from the threads list.
|
||||
*/
|
||||
struct ThreadInfo : FrameInfo
|
||||
{
|
||||
int id; /* gdb's number */
|
||||
QString threadName; /* the SYSTAG */
|
||||
QString function; /* where thread is halted */
|
||||
bool hasFocus; /* the thread whose stack we are watching */
|
||||
};
|
||||
|
||||
/**
|
||||
* Register information
|
||||
*/
|
||||
struct RegisterInfo
|
||||
{
|
||||
QString regName;
|
||||
QString rawValue;
|
||||
QString cookedValue; /* may be empty */
|
||||
QString type; /* of vector register if not empty */
|
||||
};
|
||||
|
||||
/**
|
||||
* Disassembled code
|
||||
*/
|
||||
struct DisassembledCode
|
||||
{
|
||||
DbgAddr address;
|
||||
QString code;
|
||||
};
|
||||
|
||||
/**
|
||||
* Memory contents
|
||||
*/
|
||||
struct MemoryDump
|
||||
{
|
||||
DbgAddr address;
|
||||
QString dump;
|
||||
};
|
||||
|
||||
/**
|
||||
* This is an abstract base class for debugger process.
|
||||
*
|
||||
* This class represents the debugger program. It provides the low-level
|
||||
* interface to the commandline debugger. As such it implements the
|
||||
* commands and parses the output.
|
||||
*/
|
||||
class DebuggerDriver : public KProcess
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DebuggerDriver();
|
||||
virtual ~DebuggerDriver() = 0;
|
||||
|
||||
virtual QString driverName() const = 0;
|
||||
/**
|
||||
* Returns the default command string to invoke the debugger driver.
|
||||
*/
|
||||
virtual QString defaultInvocation() const = 0;
|
||||
|
||||
/**
|
||||
* Returns a list of options that can be turned on and off.
|
||||
*/
|
||||
virtual QStringList boolOptionList() const = 0;
|
||||
|
||||
virtual bool startup(QString cmdStr);
|
||||
void setLogFileName(const QString& fname) { m_logFileName = fname; }
|
||||
|
||||
protected:
|
||||
QString m_runCmd;
|
||||
|
||||
enum DebuggerState {
|
||||
DSidle, /* gdb waits for input */
|
||||
DSinterrupted, /* a command was interrupted */
|
||||
DSrunningLow, /* gdb is running a low-priority command */
|
||||
DSrunning, /* gdb waits for program */
|
||||
DScommandSent, /* command has been sent, we wait for wroteStdin signal */
|
||||
DScommandSentLow /* low-prioritycommand has been sent */
|
||||
};
|
||||
DebuggerState m_state;
|
||||
|
||||
public:
|
||||
bool isIdle() const { return m_state == DSidle; }
|
||||
/**
|
||||
* Tells whether a high prority command would be executed immediately.
|
||||
*/
|
||||
bool canExecuteImmediately() const { return m_hipriCmdQueue.empty(); }
|
||||
|
||||
protected:
|
||||
char* m_output; /* normal gdb output */
|
||||
size_t m_outputLen; /* amount of data so far accumulated in m_output */
|
||||
size_t m_outputAlloc; /* space available in m_output */
|
||||
std::queue<QByteArray> m_delayedOutput; /* output colleced while we have receivedOutput */
|
||||
/* but before signal wroteStdin arrived */
|
||||
|
||||
public:
|
||||
/**
|
||||
* Enqueues a high-priority command. High-priority commands are
|
||||
* executed before any low-priority commands. No user interaction is
|
||||
* possible as long as there is a high-priority command in the queue.
|
||||
*/
|
||||
virtual CmdQueueItem* executeCmd(DbgCommand,
|
||||
bool clearLow = false) = 0;
|
||||
virtual CmdQueueItem* executeCmd(DbgCommand, QString strArg,
|
||||
bool clearLow = false) = 0;
|
||||
virtual CmdQueueItem* executeCmd(DbgCommand, int intArg,
|
||||
bool clearLow = false) = 0;
|
||||
virtual CmdQueueItem* executeCmd(DbgCommand, QString strArg, int intArg,
|
||||
bool clearLow = false) = 0;
|
||||
virtual CmdQueueItem* executeCmd(DbgCommand, QString strArg1, QString strArg2,
|
||||
bool clearLow = false) = 0;
|
||||
virtual CmdQueueItem* executeCmd(DbgCommand, int intArg1, int intArg2,
|
||||
bool clearLow = false) = 0;
|
||||
|
||||
enum QueueMode {
|
||||
QMnormal, /* queues the command last */
|
||||
QMoverride, /* removes an already queued command */
|
||||
QMoverrideMoreEqual /* ditto, also puts the command first in the queue */
|
||||
};
|
||||
|
||||
/**
|
||||
* Enqueues a low-priority command. Low-priority commands are executed
|
||||
* after any high-priority commands.
|
||||
*/
|
||||
virtual CmdQueueItem* queueCmd(DbgCommand,
|
||||
QueueMode mode) = 0;
|
||||
virtual CmdQueueItem* queueCmd(DbgCommand, QString strArg,
|
||||
QueueMode mode) = 0;
|
||||
virtual CmdQueueItem* queueCmd(DbgCommand, int intArg,
|
||||
QueueMode mode) = 0;
|
||||
virtual CmdQueueItem* queueCmd(DbgCommand, QString strArg, int intArg,
|
||||
QueueMode mode) = 0;
|
||||
virtual CmdQueueItem* queueCmd(DbgCommand, QString strArg1, QString strArg2,
|
||||
QueueMode mode) = 0;
|
||||
|
||||
/**
|
||||
* Flushes the command queues.
|
||||
* @param hipriOnly if true, only the high priority queue is flushed.
|
||||
*/
|
||||
virtual void flushCommands(bool hipriOnly = false);
|
||||
|
||||
/**
|
||||
* Terminates the debugger process.
|
||||
*/
|
||||
virtual void terminate() = 0;
|
||||
|
||||
/**
|
||||
* Terminates the debugger process, but also detaches any program that
|
||||
* it has been attached to.
|
||||
*/
|
||||
virtual void detachAndTerminate() = 0;
|
||||
|
||||
/**
|
||||
* Interrupts the debuggee.
|
||||
*/
|
||||
virtual void interruptInferior() = 0;
|
||||
|
||||
/**
|
||||
* Specifies the command that prints the QString data.
|
||||
*/
|
||||
virtual void setPrintQStringDataCmd(const char* cmd) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output as an array of QChars.
|
||||
*/
|
||||
virtual ExprValue* parseQCharArray(const char* output, bool wantErrorValue, bool qt3like) = 0;
|
||||
|
||||
/**
|
||||
* Parses a back-trace (the output of the DCbt command).
|
||||
*/
|
||||
virtual void parseBackTrace(const char* output, std::list<StackFrame>& stack) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCframe command;
|
||||
* @param frameNo Returns the frame number.
|
||||
* @param file Returns the source file name.
|
||||
* @param lineNo The zero-based line number.
|
||||
* @param address Returns the exact address.
|
||||
* @return false if the frame could not be parsed successfully. The
|
||||
* output values are undefined in this case.
|
||||
*/
|
||||
virtual bool parseFrameChange(const char* output, int& frameNo,
|
||||
QString& file, int& lineNo, DbgAddr& address) = 0;
|
||||
|
||||
/**
|
||||
* Parses a list of breakpoints.
|
||||
* @param output The output of the debugger.
|
||||
* @param brks The list of new #Breakpoint objects. The list
|
||||
* must initially be empty.
|
||||
* @return False if there was an error before the first breakpoint
|
||||
* was found. Even if true is returned, #brks may be empty.
|
||||
*/
|
||||
virtual bool parseBreakList(const char* output, std::list<Breakpoint>& brks) = 0;
|
||||
|
||||
/**
|
||||
* Parses a list of threads.
|
||||
* @param output The output of the debugger.
|
||||
* @return The new thread list. There is no indication if there was
|
||||
* a parse error.
|
||||
*/
|
||||
virtual std::list<ThreadInfo> parseThreadList(const char* output) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output when the program stops to see whether this it
|
||||
* stopped due to a breakpoint.
|
||||
* @param output The output of the debugger.
|
||||
* @param id Returns the breakpoint id.
|
||||
* @param file Returns the file name in which the breakpoint is.
|
||||
* @param lineNo Returns the zero-based line number of the breakpoint.
|
||||
* @param address Returns the address of the breakpoint.
|
||||
* @return False if there was no breakpoint.
|
||||
*/
|
||||
virtual bool parseBreakpoint(const char* output, int& id,
|
||||
QString& file, int& lineNo, QString& address) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCinfolocals command.
|
||||
* @param output The output of the debugger.
|
||||
* @param newVars Receives the parsed variable values. The values are
|
||||
* simply append()ed to the supplied list.
|
||||
*/
|
||||
virtual void parseLocals(const char* output, std::list<ExprValue*>& newVars) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of a DCprint or DCprintStruct command.
|
||||
* @param output The output of the debugger.
|
||||
* @param wantErrorValue Specifies whether the error message should be
|
||||
* provided as the value of a NKplain variable. If this is false,
|
||||
* 0 is returned if the printed value is an error message.
|
||||
* @return the parsed value. It is 0 if there was a parse error
|
||||
* or if the output is an error message and #wantErrorValue
|
||||
* is \c false. The returned object's text() is undefined.
|
||||
*/
|
||||
virtual ExprValue* parsePrintExpr(const char* output, bool wantErrorValue) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCcd command.
|
||||
* @return false if the message is an error message.
|
||||
*/
|
||||
virtual bool parseChangeWD(const char* output, QString& message) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCexecutable command.
|
||||
* @return false if an error occured.
|
||||
*/
|
||||
virtual bool parseChangeExecutable(const char* output, QString& message) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCcorefile command.
|
||||
* @return false if the core file was not loaded successfully.
|
||||
*/
|
||||
virtual bool parseCoreFile(const char* output) = 0;
|
||||
|
||||
enum StopFlags {
|
||||
SFrefreshSource = 1, /* refresh of source code is needed */
|
||||
SFrefreshBreak = 2, /* refresh breakpoints */
|
||||
SFrefreshThreads = 4, /* refresh thread list */
|
||||
SFprogramActive = 128 /* program remains active */
|
||||
};
|
||||
/**
|
||||
* Parses the output of commands that execute (a piece of) the program.
|
||||
* @return The inclusive OR of zero or more of the StopFlags.
|
||||
*/
|
||||
virtual uint parseProgramStopped(const char* output, QString& message) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCsharedlibs command.
|
||||
*/
|
||||
virtual QStringList parseSharedLibs(const char* output) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCfindType command.
|
||||
* @return true if a type was found.
|
||||
*/
|
||||
virtual bool parseFindType(const char* output, QString& type) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCinforegisters command.
|
||||
*/
|
||||
virtual std::list<RegisterInfo> parseRegisters(const char* output) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCinfoline command. Returns false if the
|
||||
* two addresses could not be found.
|
||||
*/
|
||||
virtual bool parseInfoLine(const char* output,
|
||||
QString& addrFrom, QString& addrTo) = 0;
|
||||
|
||||
/**
|
||||
* Parses the ouput of the DCdisassemble command.
|
||||
*/
|
||||
virtual std::list<DisassembledCode> parseDisassemble(const char* output) = 0;
|
||||
|
||||
/**
|
||||
* Parses a memory dump. Returns an empty string if no error was found;
|
||||
* otherwise it contains an error message.
|
||||
*/
|
||||
virtual QString parseMemoryDump(const char* output, std::list<MemoryDump>& memdump) = 0;
|
||||
|
||||
/**
|
||||
* Parses the output of the DCsetvariable command. Returns an empty
|
||||
* string if no error was found; otherwise it contains an error
|
||||
* message.
|
||||
*/
|
||||
virtual QString parseSetVariable(const char* output) = 0;
|
||||
|
||||
/**
|
||||
* Returns a value that the user can edit.
|
||||
*/
|
||||
virtual QString editableValue(VarTree* value);
|
||||
|
||||
protected:
|
||||
/** Removes all commands from the low-priority queue. */
|
||||
void flushLoPriQueue();
|
||||
/** Removes all commands from the high-priority queue. */
|
||||
void flushHiPriQueue();
|
||||
|
||||
std::queue<CmdQueueItem*> m_hipriCmdQueue;
|
||||
std::list<CmdQueueItem*> m_lopriCmdQueue;
|
||||
/**
|
||||
* The active command is kept separately from other pending commands.
|
||||
*/
|
||||
CmdQueueItem* m_activeCmd;
|
||||
/**
|
||||
* Helper function that queues the given command string in the
|
||||
* low-priority queue.
|
||||
*/
|
||||
CmdQueueItem* queueCmdString(DbgCommand cmd, QString cmdString,
|
||||
QueueMode mode);
|
||||
/**
|
||||
* Helper function that queues the given command string in the
|
||||
* high-priority queue.
|
||||
*/
|
||||
CmdQueueItem* executeCmdString(DbgCommand cmd, QString cmdString,
|
||||
bool clearLow);
|
||||
void writeCommand();
|
||||
virtual void commandFinished(CmdQueueItem* cmd) = 0;
|
||||
|
||||
protected:
|
||||
/** @internal */
|
||||
virtual int commSetupDoneC();
|
||||
|
||||
char m_prompt[10];
|
||||
size_t m_promptMinLen;
|
||||
char m_promptLastChar;
|
||||
QRegExp m_promptRE;
|
||||
|
||||
// log file
|
||||
QString m_logFileName;
|
||||
QFile m_logFile;
|
||||
|
||||
public slots:
|
||||
void dequeueCmdByVar(VarTree* var);
|
||||
|
||||
protected slots:
|
||||
virtual void slotReceiveOutput(KProcess*, char* buffer, int buflen);
|
||||
virtual void slotCommandRead(KProcess*);
|
||||
virtual void slotExited(KProcess*);
|
||||
|
||||
signals:
|
||||
/**
|
||||
* This signal is emitted when the output of a command has been fully
|
||||
* collected and is ready to be interpreted.
|
||||
*/
|
||||
void commandReceived(CmdQueueItem* cmd, const char* output);
|
||||
|
||||
/**
|
||||
* This signal is emitted when the debugger recognizes that a specific
|
||||
* location in a file ought to be displayed.
|
||||
*
|
||||
* Gdb's --fullname option supports this for the step, next, frame, and
|
||||
* run commands (and possibly others).
|
||||
*
|
||||
* @param file specifies the file; this is not necessarily a full path
|
||||
* name, and if it is relative, you won't know relative to what, you
|
||||
* can only guess.
|
||||
* @param lineNo specifies the line number (0-based!) (this may be
|
||||
* negative, in which case the file should be activated, but the line
|
||||
* should NOT be changed).
|
||||
* @param address specifies the exact address of the PC or is empty.
|
||||
*/
|
||||
void activateFileLine(const QString& file, int lineNo, const DbgAddr& address);
|
||||
|
||||
/**
|
||||
* This signal is emitted when a command that starts the inferior has
|
||||
* been submitted to the debugger.
|
||||
*/
|
||||
void inferiorRunning();
|
||||
|
||||
/**
|
||||
* This signal is emitted when all output from the debugger has been
|
||||
* consumed and no more commands are in the queues.
|
||||
*/
|
||||
void enterIdleState();
|
||||
};
|
||||
|
||||
#endif // DBGDRIVER_H
|
@ -0,0 +1,876 @@
|
||||
/*
|
||||
* Copyright Johannes Sixt
|
||||
* This file is licensed under the GNU General Public License Version 2.
|
||||
* See the file COPYING in the toplevel directory of the source directory.
|
||||
*/
|
||||
|
||||
#include <kapplication.h>
|
||||
#include <klocale.h> /* i18n */
|
||||
#include <kmessagebox.h>
|
||||
#include <kconfig.h>
|
||||
#include <kstatusbar.h>
|
||||
#include <kiconloader.h>
|
||||
#include <kstdaccel.h>
|
||||
#include <kstdaction.h>
|
||||
#include <kaction.h>
|
||||
#include <kpopupmenu.h>
|
||||
#include <kfiledialog.h>
|
||||
#include <kprocess.h>
|
||||
#include <kkeydialog.h>
|
||||
#include <kanimwidget.h>
|
||||
#include <kwin.h>
|
||||
#include <qlistbox.h>
|
||||
#include <qfileinfo.h>
|
||||
#include "dbgmainwnd.h"
|
||||
#include "debugger.h"
|
||||
#include "commandids.h"
|
||||
#include "winstack.h"
|
||||
#include "brkpt.h"
|
||||
#include "threadlist.h"
|
||||
#include "memwindow.h"
|
||||
#include "ttywnd.h"
|
||||
#include "procattach.h"
|
||||
#include "dbgdriver.h"
|
||||
#include "mydebug.h"
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
|
||||
DebuggerMainWnd::DebuggerMainWnd(const char* name) :
|
||||
KDockMainWindow(0, name),
|
||||
DebuggerMainWndBase()
|
||||
{
|
||||
QPixmap p;
|
||||
|
||||
KDockWidget* dw0 = createDockWidget("Source", p, 0, i18n("Source"));
|
||||
m_filesWindow = new WinStack(dw0, "files");
|
||||
dw0->setWidget(m_filesWindow);
|
||||
dw0->setDockSite(KDockWidget::DockCorner);
|
||||
dw0->setEnableDocking(KDockWidget::DockNone);
|
||||
setView(dw0);
|
||||
setMainDockWidget(dw0);
|
||||
|
||||
KDockWidget* dw1 = createDockWidget("Stack", p, 0, i18n("Stack"));
|
||||
m_btWindow = new QListBox(dw1, "backtrace");
|
||||
dw1->setWidget(m_btWindow);
|
||||
KDockWidget* dw2 = createDockWidget("Locals", p, 0, i18n("Locals"));
|
||||
m_localVariables = new ExprWnd(dw2, i18n("Variable"), "locals");
|
||||
dw2->setWidget(m_localVariables);
|
||||
KDockWidget* dw3 = createDockWidget("Watches", p, 0, i18n("Watches"));
|
||||
m_watches = new WatchWindow(dw3, "watches");
|
||||
dw3->setWidget(m_watches);
|
||||
KDockWidget* dw4 = createDockWidget("Registers", p, 0, i18n("Registers"));
|
||||
m_registers = new RegisterView(dw4, "registers");
|
||||
dw4->setWidget(m_registers);
|
||||
KDockWidget* dw5 = createDockWidget("Breakpoints", p, 0, i18n("Breakpoints"));
|
||||
m_bpTable = new BreakpointTable(dw5, "breakpoints");
|
||||
dw5->setWidget(m_bpTable);
|
||||
KDockWidget* dw6 = createDockWidget("Output", p, 0, i18n("Output"));
|
||||
m_ttyWindow = new TTYWindow(dw6, "output");
|
||||
dw6->setWidget(m_ttyWindow);
|
||||
KDockWidget* dw7 = createDockWidget("Threads", p, 0, i18n("Threads"));
|
||||
m_threads = new ThreadList(dw7, "threads");
|
||||
dw7->setWidget(m_threads);
|
||||
KDockWidget* dw8 = createDockWidget("Memory", p, 0, i18n("Memory"));
|
||||
m_memoryWindow = new MemoryWindow(dw8, "memory");
|
||||
dw8->setWidget(m_memoryWindow);
|
||||
|
||||
setupDebugger(this, m_localVariables, m_watches->watchVariables(), m_btWindow);
|
||||
m_bpTable->setDebugger(m_debugger);
|
||||
m_memoryWindow->setDebugger(m_debugger);
|
||||
|
||||
setStandardToolBarMenuEnabled(true);
|
||||
initKAction();
|
||||
initToolbar(); // kind of obsolete?
|
||||
|
||||
connect(m_watches, SIGNAL(addWatch()), SLOT(slotAddWatch()));
|
||||
connect(m_watches, SIGNAL(deleteWatch()), m_debugger, SLOT(slotDeleteWatch()));
|
||||
connect(m_watches, SIGNAL(textDropped(const QString&)), SLOT(slotAddWatch(const QString&)));
|
||||
|
||||
connect(&m_filesWindow->m_findDlg, SIGNAL(closed()), SLOT(updateUI()));
|
||||
connect(m_filesWindow, SIGNAL(newFileLoaded()),
|
||||
SLOT(slotNewFileLoaded()));
|
||||
connect(m_filesWindow, SIGNAL(toggleBreak(const QString&,int,const DbgAddr&,bool)),
|
||||
this, SLOT(slotToggleBreak(const QString&,int,const DbgAddr&,bool)));
|
||||
connect(m_filesWindow, SIGNAL(enadisBreak(const QString&,int,const DbgAddr&)),
|
||||
this, SLOT(slotEnaDisBreak(const QString&,int,const DbgAddr&)));
|
||||
connect(m_debugger, SIGNAL(activateFileLine(const QString&,int,const DbgAddr&)),
|
||||
m_filesWindow, SLOT(activate(const QString&,int,const DbgAddr&)));
|
||||
connect(m_debugger, SIGNAL(executableUpdated()),
|
||||
m_filesWindow, SLOT(reloadAllFiles()));
|
||||
connect(m_debugger, SIGNAL(updatePC(const QString&,int,const DbgAddr&,int)),
|
||||
m_filesWindow, SLOT(updatePC(const QString&,int,const DbgAddr&,int)));
|
||||
// value popup communication
|
||||
connect(m_filesWindow, SIGNAL(initiateValuePopup(const QString&)),
|
||||
m_debugger, SLOT(slotValuePopup(const QString&)));
|
||||
connect(m_debugger, SIGNAL(valuePopup(const QString&)),
|
||||
m_filesWindow, SLOT(slotShowValueTip(const QString&)));
|
||||
// disassembling
|
||||
connect(m_filesWindow, SIGNAL(disassemble(const QString&, int)),
|
||||
m_debugger, SLOT(slotDisassemble(const QString&, int)));
|
||||
connect(m_debugger, SIGNAL(disassembled(const QString&,int,const std::list<DisassembledCode>&)),
|
||||
m_filesWindow, SLOT(slotDisassembled(const QString&,int,const std::list<DisassembledCode>&)));
|
||||
connect(m_filesWindow, SIGNAL(moveProgramCounter(const QString&,int,const DbgAddr&)),
|
||||
m_debugger, SLOT(setProgramCounter(const QString&,int,const DbgAddr&)));
|
||||
// program stopped
|
||||
connect(m_debugger, SIGNAL(programStopped()), SLOT(slotProgramStopped()));
|
||||
connect(&m_backTimer, SIGNAL(timeout()), SLOT(slotBackTimer()));
|
||||
// tab width
|
||||
connect(this, SIGNAL(setTabWidth(int)), m_filesWindow, SIGNAL(setTabWidth(int)));
|
||||
|
||||
// connect breakpoint table
|
||||
connect(m_bpTable, SIGNAL(activateFileLine(const QString&,int,const DbgAddr&)),
|
||||
m_filesWindow, SLOT(activate(const QString&,int,const DbgAddr&)));
|
||||
connect(m_debugger, SIGNAL(updateUI()), m_bpTable, SLOT(updateUI()));
|
||||
connect(m_debugger, SIGNAL(breakpointsChanged()), m_bpTable, SLOT(updateBreakList()));
|
||||
connect(m_debugger, SIGNAL(breakpointsChanged()), m_bpTable, SLOT(updateUI()));
|
||||
|
||||
connect(m_debugger, SIGNAL(registersChanged(const std::list<RegisterInfo>&)),
|
||||
m_registers, SLOT(updateRegisters(const std::list<RegisterInfo>&)));
|
||||
|
||||
connect(m_debugger, SIGNAL(memoryDumpChanged(const QString&, const std::list<MemoryDump>&)),
|
||||
m_memoryWindow, SLOT(slotNewMemoryDump(const QString&, const std::list<MemoryDump>&)));
|
||||
connect(m_debugger, SIGNAL(saveProgramSpecific(KConfigBase*)),
|
||||
m_memoryWindow, SLOT(saveProgramSpecific(KConfigBase*)));
|
||||
connect(m_debugger, SIGNAL(restoreProgramSpecific(KConfigBase*)),
|
||||
m_memoryWindow, SLOT(restoreProgramSpecific(KConfigBase*)));
|
||||
|
||||
// thread window
|
||||
connect(m_debugger, SIGNAL(threadsChanged(const std::list<ThreadInfo>&)),
|
||||
m_threads, SLOT(updateThreads(const std::list<ThreadInfo>&)));
|
||||
connect(m_threads, SIGNAL(setThread(int)),
|
||||
m_debugger, SLOT(setThread(int)));
|
||||
|
||||
// view menu changes when docking state changes
|
||||
connect(dockManager, SIGNAL(change()), SLOT(updateUI()));
|
||||
|
||||
// popup menu of the local variables window
|
||||
connect(m_localVariables, SIGNAL(contextMenuRequested(QListViewItem*, const QPoint&, int)),
|
||||
this, SLOT(slotLocalsPopup(QListViewItem*, const QPoint&)));
|
||||
|
||||
restoreSettings(kapp->config());
|
||||
|
||||
updateUI();
|
||||
m_bpTable->updateUI();
|
||||
}
|
||||
|
||||
DebuggerMainWnd::~DebuggerMainWnd()
|
||||
{
|
||||
saveSettings(kapp->config());
|
||||
// must delete m_debugger early since it references our windows
|
||||
delete m_debugger;
|
||||
m_debugger = 0;
|
||||
|
||||
delete m_memoryWindow;
|
||||
delete m_threads;
|
||||
delete m_ttyWindow;
|
||||
delete m_bpTable;
|
||||
delete m_registers;
|
||||
delete m_watches;
|
||||
delete m_localVariables;
|
||||
delete m_btWindow;
|
||||
delete m_filesWindow;
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::initKAction()
|
||||
{
|
||||
// file menu
|
||||
KAction* open = KStdAction::open(this, SLOT(slotFileOpen()),
|
||||
actionCollection());
|
||||
open->setText(i18n("&Open Source..."));
|
||||
KStdAction::close(m_filesWindow, SLOT(slotClose()), actionCollection());
|
||||
(void)new KAction(i18n("&Reload Source"), "reload", 0, m_filesWindow,
|
||||
SLOT(slotFileReload()), actionCollection(),
|
||||
"file_reload");
|
||||
(void)new KAction(i18n("&Executable..."), "execopen", 0, this,
|
||||
SLOT(slotFileExe()), actionCollection(),
|
||||
"file_executable");
|
||||
m_recentExecAction = new KRecentFilesAction(i18n("Recent E&xecutables"), 0,
|
||||
this, SLOT(slotRecentExec(const KURL&)),
|
||||
actionCollection(), "file_executable_recent");
|
||||
(void)new KAction(i18n("&Core dump..."), 0, this, SLOT(slotFileCore()),
|
||||
actionCollection(), "file_core_dump");
|
||||
KStdAction::quit(kapp, SLOT(closeAllWindows()), actionCollection());
|
||||
|
||||
// settings menu
|
||||
(void)new KAction(i18n("This &Program..."), 0, this,
|
||||
SLOT(slotFileProgSettings()), actionCollection(),
|
||||
"settings_program");
|
||||
(void)new KAction(i18n("&Global Options..."), 0, this,
|
||||
SLOT(slotFileGlobalSettings()), actionCollection(),
|
||||
"settings_global");
|
||||
KStdAction::keyBindings(this, SLOT(slotConfigureKeys()), actionCollection());
|
||||
KStdAction::showStatusbar(this, SLOT(slotViewStatusbar()), actionCollection());
|
||||
|
||||
// view menu
|
||||
(void)new KToggleAction(i18n("&Find"), "find", CTRL+Key_F, m_filesWindow,
|
||||
SLOT(slotViewFind()), actionCollection(),
|
||||
"view_find");
|
||||
(void)KStdAction::findNext(m_filesWindow, SLOT(slotFindForward()), actionCollection(), "view_findnext");
|
||||
(void)KStdAction::findPrev(m_filesWindow, SLOT(slotFindBackward()), actionCollection(), "view_findprev");
|
||||
|
||||
i18n("Source &code");
|
||||
struct { QString text; QWidget* w; QString id; } dw[] = {
|
||||
{ i18n("Stac&k"), m_btWindow, "view_stack"},
|
||||
{ i18n("&Locals"), m_localVariables, "view_locals"},
|
||||
{ i18n("&Watched expressions"), m_watches, "view_watched_expressions"},
|
||||
{ i18n("&Registers"), m_registers, "view_registers"},
|
||||
{ i18n("&Breakpoints"), m_bpTable, "view_breakpoints"},
|
||||
{ i18n("T&hreads"), m_threads, "view_threads"},
|
||||
{ i18n("&Output"), m_ttyWindow, "view_output"},
|
||||
{ i18n("&Memory"), m_memoryWindow, "view_memory"}
|
||||
};
|
||||
for (unsigned i = 0; i < sizeof(dw)/sizeof(dw[0]); i++) {
|
||||
KDockWidget* d = dockParent(dw[i].w);
|
||||
(void)new KToggleAction(dw[i].text, 0, d, SLOT(changeHideShowState()),
|
||||
actionCollection(), dw[i].id);
|
||||
}
|
||||
|
||||
|
||||
// execution menu
|
||||
KAction* a = new KAction(i18n("&Run"), "pgmrun", Key_F5, m_debugger,
|
||||
SLOT(programRun()), actionCollection(), "exec_run");
|
||||
connect(a, SIGNAL(activated()), this, SLOT(intoBackground()));
|
||||
a = new KAction(i18n("Step &into"), "pgmstep", Key_F8, m_debugger,
|
||||
SLOT(programStep()), actionCollection(),
|
||||
"exec_step_into");
|
||||
connect(a, SIGNAL(activated()), this, SLOT(intoBackground()));
|
||||
a = new KAction(i18n("Step &over"), "pgmnext", Key_F10, m_debugger,
|
||||
SLOT(programNext()), actionCollection(),
|
||||
"exec_step_over");
|
||||
connect(a, SIGNAL(activated()), this, SLOT(intoBackground()));
|
||||
a = new KAction(i18n("Step o&ut"), "pgmfinish", Key_F6, m_debugger,
|
||||
SLOT(programFinish()), actionCollection(),
|
||||
"exec_step_out");
|
||||
connect(a, SIGNAL(activated()), this, SLOT(intoBackground()));
|
||||
a = new KAction(i18n("Run to &cursor"), Key_F7, this,
|
||||
SLOT(slotExecUntil()), actionCollection(),
|
||||
"exec_run_to_cursor");
|
||||
connect(a, SIGNAL(activated()), this, SLOT(intoBackground()));
|
||||
a = new KAction(i18n("Step i&nto by instruction"), "pgmstepi",
|
||||
SHIFT+Key_F8, m_debugger, SLOT(programStepi()),
|
||||
actionCollection(), "exec_step_into_by_insn");
|
||||
connect(a, SIGNAL(activated()), this, SLOT(intoBackground()));
|
||||
a = new KAction(i18n("Step o&ver by instruction"), "pgmnexti",
|
||||
SHIFT+Key_F10, m_debugger, SLOT(programNexti()),
|
||||
actionCollection(), "exec_step_over_by_insn");
|
||||
connect(a, SIGNAL(activated()), this, SLOT(intoBackground()));
|
||||
(void)new KAction(i18n("&Program counter to current line"), 0,
|
||||
m_filesWindow, SLOT(slotMoveProgramCounter()),
|
||||
actionCollection(), "exec_movepc");
|
||||
(void)new KAction(i18n("&Break"), 0, m_debugger,
|
||||
SLOT(programBreak()), actionCollection(),
|
||||
"exec_break");
|
||||
(void)new KAction(i18n("&Kill"), 0, m_debugger,
|
||||
SLOT(programKill()), actionCollection(),
|
||||
"exec_kill");
|
||||
(void)new KAction(i18n("Re&start"), 0, m_debugger,
|
||||
SLOT(programRunAgain()), actionCollection(),
|
||||
"exec_restart");
|
||||
(void)new KAction(i18n("A&ttach..."), 0, this,
|
||||
SLOT(slotExecAttach()), actionCollection(),
|
||||
"exec_attach");
|
||||
(void)new KAction(i18n("&Arguments..."), 0, this,
|
||||
SLOT(slotExecArgs()), actionCollection(),
|
||||
"exec_arguments");
|
||||
|
||||
// breakpoint menu
|
||||
(void)new KAction(i18n("Set/Clear &breakpoint"), "brkpt", Key_F9,
|
||||
m_filesWindow, SLOT(slotBrkptSet()), actionCollection(),
|
||||
"breakpoint_set");
|
||||
(void)new KAction(i18n("Set &temporary breakpoint"), SHIFT+Key_F9,
|
||||
m_filesWindow, SLOT(slotBrkptSetTemp()), actionCollection(),
|
||||
"breakpoint_set_temporary");
|
||||
(void)new KAction(i18n("&Enable/Disable breakpoint"), CTRL+Key_F9,
|
||||
m_filesWindow, SLOT(slotBrkptEnable()), actionCollection(),
|
||||
"breakpoint_enable");
|
||||
|
||||
// only in popup menus
|
||||
(void)new KAction(i18n("Watch Expression"), 0, this,
|
||||
SLOT(slotLocalsToWatch()), actionCollection(),
|
||||
"watch_expression");
|
||||
(void)new KAction(i18n("Edit Value"), Key_F2, this,
|
||||
SLOT(slotEditValue()), actionCollection(),
|
||||
"edit_value");
|
||||
|
||||
// all actions force an UI update
|
||||
QValueList<KAction*> actions = actionCollection()->actions();
|
||||
QValueList<KAction*>::Iterator it = actions.begin();
|
||||
for (; it != actions.end(); ++it) {
|
||||
connect(*it, SIGNAL(activated()), this, SLOT(updateUI()));
|
||||
}
|
||||
|
||||
createGUI("kdbgui.rc");
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::initToolbar()
|
||||
{
|
||||
KToolBar* toolbar = toolBar("mainToolBar");
|
||||
toolbar->insertAnimatedWidget(ID_STATUS_BUSY,
|
||||
actionCollection()->action("exec_break"), SLOT(activate()),
|
||||
"pulse", -1);
|
||||
toolbar->alignItemRight(ID_STATUS_BUSY, true);
|
||||
m_animRunning = false;
|
||||
|
||||
KStatusBar* statusbar = statusBar();
|
||||
statusbar->insertItem(m_statusActive, ID_STATUS_ACTIVE);
|
||||
m_lastActiveStatusText = m_statusActive;
|
||||
statusbar->insertItem("", ID_STATUS_MSG); /* message pane */
|
||||
|
||||
// reserve some translations
|
||||
i18n("Restart");
|
||||
i18n("Core dump");
|
||||
}
|
||||
|
||||
bool DebuggerMainWnd::queryClose()
|
||||
{
|
||||
if (m_debugger != 0) {
|
||||
m_debugger->shutdown();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// instance properties
|
||||
void DebuggerMainWnd::saveProperties(KConfig* config)
|
||||
{
|
||||
// session management
|
||||
QString executable = "";
|
||||
if (m_debugger != 0) {
|
||||
executable = m_debugger->executable();
|
||||
}
|
||||
config->writeEntry("executable", executable);
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::readProperties(KConfig* config)
|
||||
{
|
||||
// session management
|
||||
QString execName = config->readEntry("executable");
|
||||
|
||||
TRACE("readProperties: executable=" + execName);
|
||||
if (!execName.isEmpty()) {
|
||||
debugProgram(execName, "");
|
||||
}
|
||||
}
|
||||
|
||||
const char WindowGroup[] = "Windows";
|
||||
const char RecentExecutables[] = "RecentExecutables";
|
||||
const char LastSession[] = "LastSession";
|
||||
|
||||
void DebuggerMainWnd::saveSettings(KConfig* config)
|
||||
{
|
||||
KConfigGroupSaver g(config, WindowGroup);
|
||||
|
||||
writeDockConfig(config);
|
||||
fixDockConfig(config, false); // downgrade
|
||||
|
||||
m_recentExecAction->saveEntries(config, RecentExecutables);
|
||||
|
||||
KConfigGroupSaver g2(config, LastSession);
|
||||
config->writeEntry("Width0Locals", m_localVariables->columnWidth(0));
|
||||
config->writeEntry("Width0Watches", m_watches->columnWidth(0));
|
||||
|
||||
DebuggerMainWndBase::saveSettings(config);
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::restoreSettings(KConfig* config)
|
||||
{
|
||||
KConfigGroupSaver g(config, WindowGroup);
|
||||
|
||||
fixDockConfig(config, true); // upgrade
|
||||
readDockConfig(config);
|
||||
|
||||
// Workaround bug #87787: KDockManager stores the titles of the KDockWidgets
|
||||
// in the config files, although they are localized:
|
||||
// If the user changes the language, the titles remain in the previous language.
|
||||
struct { QString text; QWidget* w; } dw[] = {
|
||||
{ i18n("Stack"), m_btWindow },
|
||||
{ i18n("Locals"), m_localVariables },
|
||||
{ i18n("Watches"), m_watches },
|
||||
{ i18n("Registers"), m_registers },
|
||||
{ i18n("Breakpoints"), m_bpTable },
|
||||
{ i18n("Threads"), m_threads },
|
||||
{ i18n("Output"), m_ttyWindow },
|
||||
{ i18n("Memory"), m_memoryWindow }
|
||||
};
|
||||
for (int i = 0; i < int(sizeof(dw)/sizeof(dw[0])); i++)
|
||||
{
|
||||
KDockWidget* w = dockParent(dw[i].w);
|
||||
w->setTabPageLabel(dw[i].text);
|
||||
// this actually changes the captions in the tabs:
|
||||
QEvent ev(QEvent::CaptionChange);
|
||||
w->event(&ev);
|
||||
}
|
||||
|
||||
m_recentExecAction->loadEntries(config, RecentExecutables);
|
||||
|
||||
KConfigGroupSaver g2(config, LastSession);
|
||||
int w;
|
||||
w = config->readNumEntry("Width0Locals", -1);
|
||||
if (w >= 0 && w < 30000)
|
||||
m_localVariables->setColumnWidth(0, w);
|
||||
w = config->readNumEntry("Width0Watches", -1);
|
||||
if (w >= 0 && w < 30000)
|
||||
m_watches->setColumnWidth(0, w);
|
||||
|
||||
DebuggerMainWndBase::restoreSettings(config);
|
||||
|
||||
emit setTabWidth(m_tabWidth);
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::updateUI()
|
||||
{
|
||||
KToggleAction* viewFind =
|
||||
static_cast<KToggleAction*>(actionCollection()->action("view_find"));
|
||||
viewFind->setChecked(m_filesWindow->m_findDlg.isVisible());
|
||||
viewFind->setEnabled(m_filesWindow->hasWindows());
|
||||
actionCollection()->action("breakpoint_set")->setEnabled(m_debugger->canChangeBreakpoints());
|
||||
actionCollection()->action("breakpoint_set_temporary")->setEnabled(m_debugger->canChangeBreakpoints());
|
||||
actionCollection()->action("breakpoint_enable")->setEnabled(m_debugger->canChangeBreakpoints());
|
||||
dockUpdateHelper("view_breakpoints", m_bpTable);
|
||||
dockUpdateHelper("view_stack", m_btWindow);
|
||||
dockUpdateHelper("view_locals", m_localVariables);
|
||||
dockUpdateHelper("view_watched_expressions", m_watches);
|
||||
dockUpdateHelper("view_registers", m_registers);
|
||||
dockUpdateHelper("view_threads", m_threads);
|
||||
dockUpdateHelper("view_memory", m_memoryWindow);
|
||||
dockUpdateHelper("view_output", m_ttyWindow);
|
||||
|
||||
// AB: maybe in mainwndbase.cpp?
|
||||
actionCollection()->action("file_executable")->setEnabled(m_debugger->isIdle());
|
||||
actionCollection()->action("settings_program")->setEnabled(m_debugger->haveExecutable());
|
||||
actionCollection()->action("file_core_dump")->setEnabled(m_debugger->canStart());
|
||||
actionCollection()->action("file_close")->setEnabled(m_filesWindow->hasWindows());
|
||||
actionCollection()->action("file_reload")->setEnabled(m_filesWindow->hasWindows());
|
||||
actionCollection()->action("exec_step_into")->setEnabled(m_debugger->canSingleStep());
|
||||
actionCollection()->action("exec_step_into_by_insn")->setEnabled(m_debugger->canSingleStep());
|
||||
actionCollection()->action("exec_step_over")->setEnabled(m_debugger->canSingleStep());
|
||||
actionCollection()->action("exec_step_over_by_insn")->setEnabled(m_debugger->canSingleStep());
|
||||
actionCollection()->action("exec_step_out")->setEnabled(m_debugger->canSingleStep());
|
||||
actionCollection()->action("exec_run_to_cursor")->setEnabled(m_debugger->canSingleStep());
|
||||
actionCollection()->action("exec_movepc")->setEnabled(m_debugger->canSingleStep());
|
||||
actionCollection()->action("exec_restart")->setEnabled(m_debugger->canSingleStep());
|
||||
actionCollection()->action("exec_attach")->setEnabled(m_debugger->isReady());
|
||||
actionCollection()->action("exec_run")->setEnabled(m_debugger->canStart() || m_debugger->canSingleStep());
|
||||
actionCollection()->action("exec_kill")->setEnabled(m_debugger->haveExecutable() && m_debugger->isProgramActive());
|
||||
actionCollection()->action("exec_break")->setEnabled(m_debugger->isProgramRunning());
|
||||
actionCollection()->action("exec_arguments")->setEnabled(m_debugger->haveExecutable());
|
||||
actionCollection()->action("edit_value")->setEnabled(m_debugger->canSingleStep());
|
||||
|
||||
// animation
|
||||
KAnimWidget* w = toolBar("mainToolBar")->animatedWidget(ID_STATUS_BUSY);
|
||||
if (m_debugger->isIdle()) {
|
||||
if (m_animRunning) {
|
||||
w->stop();
|
||||
m_animRunning = false;
|
||||
}
|
||||
} else {
|
||||
if (!m_animRunning) {
|
||||
w->start();
|
||||
m_animRunning = true;
|
||||
}
|
||||
}
|
||||
|
||||
// update statusbar
|
||||
QString newStatus;
|
||||
if (m_debugger->isProgramActive())
|
||||
newStatus = m_statusActive;
|
||||
if (newStatus != m_lastActiveStatusText) {
|
||||
statusBar()->changeItem(newStatus, ID_STATUS_ACTIVE);
|
||||
m_lastActiveStatusText = newStatus;
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::dockUpdateHelper(QString action, QWidget* w)
|
||||
{
|
||||
KToggleAction* item =
|
||||
static_cast<KToggleAction*>(actionCollection()->action(action));
|
||||
bool canChange = canChangeDockVisibility(w);
|
||||
item->setEnabled(canChange);
|
||||
item->setChecked(canChange && isDockVisible(w));
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::updateLineItems()
|
||||
{
|
||||
m_filesWindow->updateLineItems(m_debugger);
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotAddWatch()
|
||||
{
|
||||
if (m_debugger != 0) {
|
||||
QString t = m_watches->watchText();
|
||||
m_debugger->addWatch(t);
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotAddWatch(const QString& text)
|
||||
{
|
||||
if (m_debugger != 0) {
|
||||
m_debugger->addWatch(text);
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotNewFileLoaded()
|
||||
{
|
||||
// updates program counter in the new file
|
||||
if (m_debugger != 0)
|
||||
m_filesWindow->updateLineItems(m_debugger);
|
||||
}
|
||||
|
||||
KDockWidget* DebuggerMainWnd::dockParent(QWidget* w)
|
||||
{
|
||||
while ((w = w->parentWidget()) != 0) {
|
||||
if (w->isA("KDockWidget"))
|
||||
return static_cast<KDockWidget*>(w);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool DebuggerMainWnd::isDockVisible(QWidget* w)
|
||||
{
|
||||
KDockWidget* d = dockParent(w);
|
||||
return d != 0 && d->mayBeHide();
|
||||
}
|
||||
|
||||
bool DebuggerMainWnd::canChangeDockVisibility(QWidget* w)
|
||||
{
|
||||
KDockWidget* d = dockParent(w);
|
||||
return d != 0 && (d->mayBeHide() || d->mayBeShow());
|
||||
}
|
||||
|
||||
// upgrades the entries from version 0.0.4 to 0.0.5 and back
|
||||
void DebuggerMainWnd::fixDockConfig(KConfig* c, bool upgrade)
|
||||
{
|
||||
static const char dockGroup[] = "dock_setting_default";
|
||||
if (!c->hasGroup(dockGroup))
|
||||
return;
|
||||
|
||||
static const char oldVersion[] = "0.0.4";
|
||||
static const char newVersion[] = "0.0.5";
|
||||
const char* from = upgrade ? oldVersion : newVersion;
|
||||
const char* to = upgrade ? newVersion : oldVersion;
|
||||
QMap<QString,QString> e = c->entryMap(dockGroup);
|
||||
if (e["Version"] != from)
|
||||
return;
|
||||
|
||||
KConfigGroupSaver g(c, dockGroup);
|
||||
c->writeEntry("Version", to);
|
||||
TRACE(upgrade ? "upgrading dockconfig" : "downgrading dockconfig");
|
||||
|
||||
// turn all orientation entries from 0 to 1 and from 1 to 0
|
||||
QMap<QString,QString>::Iterator i;
|
||||
for (i = e.begin(); i != e.end(); ++i)
|
||||
{
|
||||
if (i.key().right(12) == ":orientation") {
|
||||
TRACE("upgrading " + i.key() + " old value: " + *i);
|
||||
int orientation = c->readNumEntry(i.key(), -1);
|
||||
if (orientation >= 0) { // paranoia
|
||||
c->writeEntry(i.key(), 1 - orientation);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TTYWindow* DebuggerMainWnd::ttyWindow()
|
||||
{
|
||||
return m_ttyWindow;
|
||||
}
|
||||
|
||||
bool DebuggerMainWnd::debugProgram(const QString& exe, const QString& lang)
|
||||
{
|
||||
// check the file name
|
||||
QFileInfo fi(exe);
|
||||
|
||||
bool success = fi.isFile();
|
||||
if (!success)
|
||||
{
|
||||
QString msg = i18n("`%1' is not a file or does not exist");
|
||||
KMessageBox::sorry(this, msg.arg(exe));
|
||||
}
|
||||
else
|
||||
{
|
||||
success = DebuggerMainWndBase::debugProgram(fi.absFilePath(), lang, this);
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
m_recentExecAction->addURL(KURL(fi.absFilePath()));
|
||||
|
||||
// keep the directory
|
||||
m_lastDirectory = fi.dirPath(true);
|
||||
m_filesWindow->setExtraDirectory(m_lastDirectory);
|
||||
|
||||
// set caption to basename part of executable
|
||||
QString caption = fi.fileName();
|
||||
setCaption(caption);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_recentExecAction->removeURL(KURL(fi.absFilePath()));
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotNewStatusMsg()
|
||||
{
|
||||
newStatusMsg(statusBar());
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotFileGlobalSettings()
|
||||
{
|
||||
int oldTabWidth = m_tabWidth;
|
||||
|
||||
doGlobalOptions(this);
|
||||
|
||||
if (m_tabWidth != oldTabWidth) {
|
||||
emit setTabWidth(m_tabWidth);
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotDebuggerStarting()
|
||||
{
|
||||
DebuggerMainWndBase::slotDebuggerStarting();
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotToggleBreak(const QString& fileName, int lineNo,
|
||||
const DbgAddr& address, bool temp)
|
||||
{
|
||||
// lineNo is zero-based
|
||||
if (m_debugger != 0) {
|
||||
m_debugger->setBreakpoint(fileName, lineNo, address, temp);
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotEnaDisBreak(const QString& fileName, int lineNo,
|
||||
const DbgAddr& address)
|
||||
{
|
||||
// lineNo is zero-based
|
||||
if (m_debugger != 0) {
|
||||
m_debugger->enableDisableBreakpoint(fileName, lineNo, address);
|
||||
}
|
||||
}
|
||||
|
||||
QString DebuggerMainWnd::createOutputWindow()
|
||||
{
|
||||
QString tty = DebuggerMainWndBase::createOutputWindow();
|
||||
if (!tty.isEmpty()) {
|
||||
connect(m_outputTermProc, SIGNAL(processExited(KProcess*)),
|
||||
SLOT(slotTermEmuExited()));
|
||||
}
|
||||
return tty;
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotTermEmuExited()
|
||||
{
|
||||
shutdownTermWindow();
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotProgramStopped()
|
||||
{
|
||||
// when the program stopped, move the window to the foreground
|
||||
if (m_popForeground) {
|
||||
// unfortunately, this requires quite some force to work :-(
|
||||
KWin::raiseWindow(winId());
|
||||
KWin::forceActiveWindow(winId());
|
||||
}
|
||||
m_backTimer.stop();
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::intoBackground()
|
||||
{
|
||||
if (m_popForeground) {
|
||||
m_backTimer.start(m_backTimeout, true); /* single-shot */
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotBackTimer()
|
||||
{
|
||||
lower();
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotRecentExec(const KURL& url)
|
||||
{
|
||||
QString exe = url.path();
|
||||
debugProgram(exe, "");
|
||||
}
|
||||
|
||||
QString DebuggerMainWnd::makeSourceFilter()
|
||||
{
|
||||
QString f;
|
||||
f = m_sourceFilter + " " + m_headerFilter + i18n("|All source files\n");
|
||||
f += m_sourceFilter + i18n("|Source files\n");
|
||||
f += m_headerFilter + i18n("|Header files\n");
|
||||
f += i18n("*|All files");
|
||||
return f;
|
||||
}
|
||||
|
||||
/*
|
||||
* Pop up the context menu in the locals window
|
||||
*/
|
||||
void DebuggerMainWnd::slotLocalsPopup(QListViewItem*, const QPoint& pt)
|
||||
{
|
||||
QPopupMenu* popup =
|
||||
static_cast<QPopupMenu*>(factory()->container("popup_locals", this));
|
||||
if (popup == 0) {
|
||||
return;
|
||||
}
|
||||
if (popup->isVisible()) {
|
||||
popup->hide();
|
||||
} else {
|
||||
popup->popup(pt);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Copies the currently selected item to the watch window.
|
||||
*/
|
||||
void DebuggerMainWnd::slotLocalsToWatch()
|
||||
{
|
||||
VarTree* item = m_localVariables->selectedItem();
|
||||
|
||||
if (item != 0 && m_debugger != 0) {
|
||||
QString text = item->computeExpr();
|
||||
m_debugger->addWatch(text);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Starts editing a value in a value display
|
||||
*/
|
||||
void DebuggerMainWnd::slotEditValue()
|
||||
{
|
||||
// does one of the value trees have the focus
|
||||
QWidget* f = kapp->focusWidget();
|
||||
ExprWnd* wnd;
|
||||
if (f == m_localVariables) {
|
||||
wnd = m_localVariables;
|
||||
} else if (f == m_watches->watchVariables()) {
|
||||
wnd = m_watches->watchVariables();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_localVariables->isEditing() ||
|
||||
m_watches->watchVariables()->isEditing())
|
||||
{
|
||||
return; /* don't edit twice */
|
||||
}
|
||||
|
||||
VarTree* expr = wnd->currentItem();
|
||||
if (expr != 0 && m_debugger != 0 && m_debugger->canSingleStep())
|
||||
{
|
||||
TRACE("edit value");
|
||||
// determine the text to edit
|
||||
QString text = m_debugger->driver()->editableValue(expr);
|
||||
wnd->editValue(expr, text);
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotFileOpen()
|
||||
{
|
||||
// start browsing in the active file's directory
|
||||
// fall back to last used directory (executable)
|
||||
QString dir = m_lastDirectory;
|
||||
QString fileName = m_filesWindow->activeFileName();
|
||||
if (!fileName.isEmpty()) {
|
||||
QFileInfo fi(fileName);
|
||||
dir = fi.dirPath();
|
||||
}
|
||||
|
||||
fileName = myGetFileName(i18n("Open"),
|
||||
dir,
|
||||
makeSourceFilter(), this);
|
||||
|
||||
if (!fileName.isEmpty())
|
||||
{
|
||||
QFileInfo fi(fileName);
|
||||
m_lastDirectory = fi.dirPath();
|
||||
m_filesWindow->setExtraDirectory(m_lastDirectory);
|
||||
m_filesWindow->activateFile(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotFileExe()
|
||||
{
|
||||
if (m_debugger->isIdle())
|
||||
{
|
||||
// open a new executable
|
||||
QString executable = myGetFileName(i18n("Select the executable to debug"),
|
||||
m_lastDirectory, 0, this);
|
||||
if (executable.isEmpty())
|
||||
return;
|
||||
|
||||
debugProgram(executable, "");
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotFileCore()
|
||||
{
|
||||
if (m_debugger->canStart())
|
||||
{
|
||||
QString corefile = myGetFileName(i18n("Select core dump"),
|
||||
m_lastDirectory, 0, this);
|
||||
if (!corefile.isEmpty()) {
|
||||
m_debugger->useCoreFile(corefile, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotFileProgSettings()
|
||||
{
|
||||
if (m_debugger != 0) {
|
||||
m_debugger->programSettings(this);
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotViewStatusbar()
|
||||
{
|
||||
if (statusBar()->isVisible())
|
||||
statusBar()->hide();
|
||||
else
|
||||
statusBar()->show();
|
||||
setSettingsDirty();
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotExecUntil()
|
||||
{
|
||||
if (m_debugger != 0)
|
||||
{
|
||||
QString file;
|
||||
int lineNo;
|
||||
if (m_filesWindow->activeLine(file, lineNo))
|
||||
m_debugger->runUntil(file, lineNo);
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotExecAttach()
|
||||
{
|
||||
#ifdef PS_COMMAND
|
||||
ProcAttachPS dlg(this);
|
||||
// seed filter with executable name
|
||||
QFileInfo fi = m_debugger->executable();
|
||||
dlg.filterEdit->setText(fi.fileName());
|
||||
#else
|
||||
ProcAttach dlg(this);
|
||||
dlg.setText(m_debugger->attachedPid());
|
||||
#endif
|
||||
if (dlg.exec()) {
|
||||
m_debugger->attachProgram(dlg.text());
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotExecArgs()
|
||||
{
|
||||
if (m_debugger != 0) {
|
||||
m_debugger->programArgs(this);
|
||||
}
|
||||
}
|
||||
|
||||
void DebuggerMainWnd::slotConfigureKeys()
|
||||
{
|
||||
KKeyDialog::configure(actionCollection(), this);
|
||||
}
|
||||
|
||||
#include "dbgmainwnd.moc"
|
@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Copyright Johannes Sixt
|
||||
* This file is licensed under the GNU General Public License Version 2.
|
||||
* See the file COPYING in the toplevel directory of the source directory.
|
||||
*/
|
||||
|
||||
#ifndef DBGMAINWND_H
|
||||
#define DBGMAINWND_H
|
||||
|
||||
#include <qtimer.h>
|
||||
#include <kdockwidget.h>
|
||||
#include "mainwndbase.h"
|
||||
#include "regwnd.h"
|
||||
|
||||
class KRecentFilesAction;
|
||||
class WinStack;
|
||||
class QListBox;
|
||||
class QCString;
|
||||
class ExprWnd;
|
||||
class BreakpointTable;
|
||||
class ThreadList;
|
||||
class MemoryWindow;
|
||||
struct DbgAddr;
|
||||
|
||||
class DebuggerMainWnd : public KDockMainWindow, public DebuggerMainWndBase
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DebuggerMainWnd(const char* name);
|
||||
~DebuggerMainWnd();
|
||||
|
||||
bool debugProgram(const QString& exe, const QString& lang);
|
||||
|
||||
protected:
|
||||
// session properties
|
||||
virtual void saveProperties(KConfig*);
|
||||
virtual void readProperties(KConfig*);
|
||||
// settings
|
||||
void saveSettings(KConfig*);
|
||||
void restoreSettings(KConfig*);
|
||||
|
||||
void initToolbar();
|
||||
void initKAction();
|
||||
|
||||
// view windows
|
||||
WinStack* m_filesWindow;
|
||||
QListBox* m_btWindow;
|
||||
ExprWnd* m_localVariables;
|
||||
WatchWindow* m_watches;
|
||||
RegisterView* m_registers;
|
||||
BreakpointTable* m_bpTable;
|
||||
TTYWindow* m_ttyWindow;
|
||||
ThreadList* m_threads;
|
||||
MemoryWindow* m_memoryWindow;
|
||||
|
||||
QTimer m_backTimer;
|
||||
|
||||
// recent execs in File menu
|
||||
KRecentFilesAction* m_recentExecAction;
|
||||
|
||||
protected:
|
||||
virtual bool queryClose();
|
||||
virtual TTYWindow* ttyWindow();
|
||||
virtual QString createOutputWindow();
|
||||
|
||||
KDockWidget* dockParent(QWidget* w);
|
||||
bool isDockVisible(QWidget* w);
|
||||
bool canChangeDockVisibility(QWidget* w);
|
||||
void dockUpdateHelper(QString action, QWidget* w);
|
||||
void fixDockConfig(KConfig* c, bool upgrade);
|
||||
|
||||
QString makeSourceFilter();
|
||||
|
||||
// to avoid flicker when the status bar is updated,
|
||||
// we store the last string that we put there
|
||||
QString m_lastActiveStatusText;
|
||||
bool m_animRunning;
|
||||
|
||||
signals:
|
||||
void setTabWidth(int tabWidth);
|
||||
|
||||
public slots:
|
||||
virtual void updateUI();
|
||||
virtual void updateLineItems();
|
||||
void slotAddWatch();
|
||||
void slotAddWatch(const QString& text);
|
||||
void slotNewFileLoaded();
|
||||
void slotNewStatusMsg();
|
||||
void slotDebuggerStarting();
|
||||
void slotToggleBreak(const QString&, int, const DbgAddr&, bool);
|
||||
void slotEnaDisBreak(const QString&, int, const DbgAddr&);
|
||||
void slotTermEmuExited();
|
||||
void slotProgramStopped();
|
||||
void slotBackTimer();
|
||||
void slotRecentExec(const KURL& url);
|
||||
void slotLocalsPopup(QListViewItem*, const QPoint& pt);
|
||||
void slotLocalsToWatch();
|
||||
void slotEditValue();
|
||||
|
||||
void slotFileOpen();
|
||||
void slotFileExe();
|
||||
void slotFileCore();
|
||||
void slotFileGlobalSettings();
|
||||
void slotFileProgSettings();
|
||||
void slotViewStatusbar();
|
||||
void slotExecUntil();
|
||||
void slotExecAttach();
|
||||
void slotExecArgs();
|
||||
void intoBackground();
|
||||
void slotConfigureKeys();
|
||||
};
|
||||
|
||||
#endif // DBGMAINWND_H
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,556 @@
|
||||
/*
|
||||
* Copyright Johannes Sixt
|
||||
* This file is licensed under the GNU General Public License Version 2.
|
||||
* See the file COPYING in the toplevel directory of the source directory.
|
||||
*/
|
||||
|
||||
#ifndef DEBUGGER_H
|
||||
#define DEBUGGER_H
|
||||
|
||||
#include <qtimer.h>
|
||||
#include <qdict.h>
|
||||
#include <qstringlist.h>
|
||||
#include "envvar.h"
|
||||
#include "exprwnd.h" /* some compilers require this */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
class ExprWnd;
|
||||
class VarTree;
|
||||
struct ExprValue;
|
||||
class ProgramTypeTable;
|
||||
class KTreeViewItem;
|
||||
class KConfig;
|
||||
class KConfigBase;
|
||||
class ProgramConfig;
|
||||
class QListBox;
|
||||
class RegisterInfo;
|
||||
class ThreadInfo;
|
||||
class DebuggerDriver;
|
||||
class CmdQueueItem;
|
||||
class Breakpoint;
|
||||
struct DisassembledCode;
|
||||
struct MemoryDump;
|
||||
struct DbgAddr;
|
||||
class KProcess;
|
||||
|
||||
|
||||
class KDebugger : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
KDebugger(QWidget* parent, /* will be used as the parent for dialogs */
|
||||
ExprWnd* localVars,
|
||||
ExprWnd* watchVars,
|
||||
QListBox* backtrace);
|
||||
~KDebugger();
|
||||
|
||||
/**
|
||||
* This function starts to debug the specified executable using the
|
||||
* specified driver. If a program is currently being debugged, it is
|
||||
* terminated first. Ownership of driver is taken if and only if
|
||||
* true is returned.
|
||||
*
|
||||
* @return false if an error occurs.
|
||||
*/
|
||||
bool debugProgram(const QString& executable,
|
||||
DebuggerDriver* driver);
|
||||
|
||||
/**
|
||||
* Uses the specified core to debug the active program.
|
||||
* @param batch tells whether the core file was given on the
|
||||
* command line.
|
||||
*/
|
||||
void useCoreFile(QString corefile, bool batch);
|
||||
|
||||
/**
|
||||
* Overrides the program argument in the per-program config
|
||||
* with a new value.
|
||||
*/
|
||||
void overrideProgramArguments(const QString& args);
|
||||
|
||||
|
||||
/**
|
||||
* Uses the specified pid to attach to the active program.
|
||||
*/
|
||||
void setAttachPid(const QString& pid);
|
||||
|
||||
/**
|
||||
* Attaches to the specified process and debugs it.
|
||||
*/
|
||||
void attachProgram(const QString& pid);
|
||||
|
||||
/**
|
||||
* Returns the file name of the per-program config file for the
|
||||
* specified program.
|
||||
*/
|
||||
static QString getConfigForExe(const QString& exe);
|
||||
|
||||
/**
|
||||
* The driver name entry in the per-program config file.
|
||||
*/
|
||||
static const char DriverNameEntry[];
|
||||
|
||||
public slots:
|
||||
/**
|
||||
* Runs the program or continues it if it is stopped at a breakpoint.
|
||||
*/
|
||||
void programRun();
|
||||
|
||||
/**
|
||||
* Restarts the debuggee.
|
||||
*/
|
||||
void programRunAgain();
|
||||
|
||||
/**
|
||||
* Performs a single-step, possibly stepping into a function call.
|
||||
* If byInsn is true, a step by instruction is performed.
|
||||
*/
|
||||
void programStep();
|
||||
|
||||
/**
|
||||
* Performs a single-step, stepping over a function call.
|
||||
* If byInsn is true, a step by instruction is performed.
|
||||
*/
|
||||
void programNext();
|
||||
|
||||
/**
|
||||
* Performs a single-step by instruction, possibly stepping into a
|
||||
* function call.
|
||||
*/
|
||||
void programStepi();
|
||||
|
||||
/**
|
||||
* Performs a single-step by instruction, stepping over a function
|
||||
* call.
|
||||
*/
|
||||
void programNexti();
|
||||
|
||||
/**
|
||||
* Runs the program until it returns from the current function.
|
||||
*/
|
||||
void programFinish();
|
||||
|
||||
/**
|
||||
* Kills the program (removes it from memory).
|
||||
*/
|
||||
void programKill();
|
||||
|
||||
/**
|
||||
* Interrupts the program if it is currently running.
|
||||
*/
|
||||
void programBreak();
|
||||
|
||||
/**
|
||||
* Moves the program counter to the specified line.
|
||||
* If an address is given, it is moved to the address.
|
||||
*/
|
||||
void setProgramCounter(const QString&, int, const DbgAddr&);
|
||||
|
||||
public:
|
||||
/**
|
||||
* Queries the user for program arguments.
|
||||
*/
|
||||
void programArgs(QWidget* parent);
|
||||
|
||||
/**
|
||||
* Queries the user for program settings: Debugger command, terminal
|
||||
* emulator.
|
||||
*/
|
||||
void programSettings(QWidget* parent);
|
||||
|
||||
/**
|
||||
* Setup remote debugging device
|
||||
*/
|
||||
void setRemoteDevice(const QString& remoteDevice) { m_remoteDevice = remoteDevice; }
|
||||
|
||||
/**
|
||||
* Run the debuggee until the specified line in the specified file is
|
||||
* reached.
|
||||
*
|
||||
* @return false if the command was not executed, e.g. because the
|
||||
* debuggee is running at the moment.
|
||||
*/
|
||||
bool runUntil(const QString& fileName, int lineNo);
|
||||
|
||||
/**
|
||||
* Set a breakpoint.
|
||||
*
|
||||
* @param fileName The source file in which to set the breakpoint.
|
||||
* @param lineNo The zero-based line number.
|
||||
* @param address The exact address of the breakpoint.
|
||||
* @param temporary Specifies whether this is a temporary breakpoint
|
||||
* @return false if the command was not executed, e.g. because the
|
||||
* debuggee is running at the moment.
|
||||
*/
|
||||
bool setBreakpoint(QString fileName, int lineNo,
|
||||
const DbgAddr& address, bool temporary);
|
||||
|
||||
/**
|
||||
* Set a breakpoint.
|
||||
*
|
||||
* @param bp Describes the breakpoint.
|
||||
* @param queueOnly If false, the breakpoint is set using a high-priority command.
|
||||
*/
|
||||
void setBreakpoint(Breakpoint* bp, bool queueOnly);
|
||||
|
||||
/**
|
||||
* Enable or disable a breakpoint at the specified location.
|
||||
*
|
||||
* @param fileName The source file in which the breakpoint is.
|
||||
* @param lineNo The zero-based line number.
|
||||
* @param address The exact address of the breakpoint.
|
||||
* @return false if the command was not executed, e.g. because the
|
||||
* debuggee is running at the moment.
|
||||
*/
|
||||
bool enableDisableBreakpoint(QString fileName, int lineNo,
|
||||
const DbgAddr& address);
|
||||
|
||||
/**
|
||||
* Enables or disables the specified breakpoint.
|
||||
*
|
||||
* @return false if the command was not executed, e.g. because the
|
||||
* debuggee is running at the moment.
|
||||
*/
|
||||
bool enableDisableBreakpoint(int id)
|
||||
{ return enableDisableBreakpoint(breakpointById(id)); }
|
||||
|
||||
/**
|
||||
* Removes the specified breakpoint. Note that if bp is an orphaned
|
||||
* breakpoint, then bp is an invalid pointer if (and only if) this
|
||||
* function returns true.
|
||||
*
|
||||
* @return false if the command was not executed, e.g. because the
|
||||
* debuggee is running at the moment.
|
||||
*/
|
||||
bool deleteBreakpoint(int id)
|
||||
{ return deleteBreakpoint(breakpointById(id)); }
|
||||
|
||||
/**
|
||||
* Changes the specified breakpoint's condition and ignore count.
|
||||
*
|
||||
* @return false if the command was not executed, e.g. because the
|
||||
* debuggee is running at the moment.
|
||||
*/
|
||||
bool conditionalBreakpoint(int id,
|
||||
const QString& condition,
|
||||
int ignoreCount)
|
||||
{ return conditionalBreakpoint(breakpointById(id), condition, ignoreCount); }
|
||||
|
||||
/**
|
||||
* Tells whether one of the single stepping commands can be invoked
|
||||
* (step, next, finish, until, also run).
|
||||
*/
|
||||
bool canSingleStep();
|
||||
|
||||
/**
|
||||
* Tells whether a breakpoints can be set, deleted, enabled, or disabled.
|
||||
*/
|
||||
bool canChangeBreakpoints();
|
||||
|
||||
/**
|
||||
* Tells whether a the program is loaded, but not active.
|
||||
*/
|
||||
bool canStart();
|
||||
|
||||
/**
|
||||
* Add a watch expression.
|
||||
*/
|
||||
void addWatch(const QString& expr);
|
||||
|
||||
/**
|
||||
* Retrieves the current status message.
|
||||
*/
|
||||
const QString& statusMessage() const { return m_statusMessage; }
|
||||
|
||||
/**
|
||||
* Is the debugger ready to receive another high-priority command?
|
||||
*/
|
||||
bool isReady() const;
|
||||
|
||||
/**
|
||||
* Is the debuggee running (not just active)?
|
||||
*/
|
||||
bool isProgramRunning() { return m_haveExecutable && m_programRunning; }
|
||||
|
||||
/**
|
||||
* Do we have an executable set?
|
||||
*/
|
||||
bool haveExecutable() { return m_haveExecutable; }
|
||||
|
||||
/**
|
||||
* Is the debuggee active, i.e. was it started by the debugger?
|
||||
*/
|
||||
bool isProgramActive() { return m_programActive; }
|
||||
|
||||
/**
|
||||
* Is the debugger driver idle?
|
||||
*/
|
||||
bool isIdle() const;
|
||||
|
||||
/* The list of breakpoints. */
|
||||
typedef std::list<Breakpoint>::const_iterator BrkptROIterator;
|
||||
BrkptROIterator breakpointsBegin() const { return m_brkpts.begin(); }
|
||||
BrkptROIterator breakpointsEnd() const { return m_brkpts.end(); }
|
||||
|
||||
const QString& executable() const { return m_executable; }
|
||||
|
||||
/**
|
||||
* Terminal emulation level.
|
||||
*/
|
||||
enum TTYLevel {
|
||||
ttyNone = 0, /* ignore output, input triggers EOF */
|
||||
ttySimpleOutputOnly = 1, /* minmal output emulation, input triggers EOF */
|
||||
ttyFull = 7 /* program needs full emulation */
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the level of terminal emulation requested by the inferior.
|
||||
*/
|
||||
TTYLevel ttyLevel() const { return m_ttyLevel; }
|
||||
|
||||
/** Sets the terminal that is to be used by the debugger. */
|
||||
void setTerminal(const QString& term) { m_inferiorTerminal = term; }
|
||||
|
||||
/** Returns the debugger driver. */
|
||||
DebuggerDriver* driver() { return m_d; }
|
||||
|
||||
/** Returns the pid that the debugger is currently attached to. */
|
||||
const QString& attachedPid() const { return m_attachedPid; }
|
||||
|
||||
/**
|
||||
* The memory at that the expression evaluates to is watched. Can be
|
||||
* empty. Triggers a redisplay even if the expression did not change.
|
||||
*/
|
||||
void setMemoryExpression(const QString& memexpr);
|
||||
|
||||
/**
|
||||
* Sets how the watched memory location is displayed.
|
||||
* Call setMemoryExpression() to force a redisplay.
|
||||
*/
|
||||
void setMemoryFormat(unsigned format) { m_memoryFormat = format; }
|
||||
|
||||
// settings
|
||||
void saveSettings(KConfig*);
|
||||
void restoreSettings(KConfig*);
|
||||
|
||||
protected:
|
||||
QString m_inferiorTerminal;
|
||||
QString m_debuggerCmd; /* per-program setting */
|
||||
TTYLevel m_ttyLevel; /* level of terminal emulation */
|
||||
bool startDriver();
|
||||
void stopDriver();
|
||||
void writeCommand();
|
||||
|
||||
QStringList m_watchEvalExpr; /* exprs to evaluate for watch window */
|
||||
std::list<Breakpoint> m_brkpts;
|
||||
QString m_memoryExpression; /* memory location to watch */
|
||||
unsigned m_memoryFormat; /* how that output should look */
|
||||
|
||||
protected slots:
|
||||
void parse(CmdQueueItem* cmd, const char* output);
|
||||
protected:
|
||||
void handleRunCommands(const char* output);
|
||||
void updateAllExprs();
|
||||
void updateProgEnvironment(const QString& args, const QString& wd,
|
||||
const QDict<EnvVar>& newVars,
|
||||
const QStringList& newOptions);
|
||||
void parseLocals(const char* output, std::list<ExprValue*>& newVars);
|
||||
void handleLocals(const char* output);
|
||||
bool handlePrint(CmdQueueItem* cmd, const char* output);
|
||||
bool handlePrintDeref(CmdQueueItem* cmd, const char* output);
|
||||
void handleBacktrace(const char* output);
|
||||
void handleFrameChange(const char* output);
|
||||
void handleFindType(CmdQueueItem* cmd, const char* output);
|
||||
void handlePrintStruct(CmdQueueItem* cmd, const char* output);
|
||||
void handleSharedLibs(const char* output);
|
||||
void handleRegisters(const char* output);
|
||||
void handleMemoryDump(const char* output);
|
||||
void handleInfoLine(CmdQueueItem* cmd, const char* output);
|
||||
void handleDisassemble(CmdQueueItem* cmd, const char* output);
|
||||
void handleThreadList(const char* output);
|
||||
void handleSetPC(const char* output);
|
||||
void handleSetVariable(CmdQueueItem* cmd, const char* output);
|
||||
void evalExpressions();
|
||||
void evalInitialStructExpression(VarTree* var, ExprWnd* wnd, bool immediate);
|
||||
void evalStructExpression(VarTree* var, ExprWnd* wnd, bool immediate);
|
||||
void dereferencePointer(ExprWnd* wnd, VarTree* var, bool immediate);
|
||||
void determineType(ExprWnd* wnd, VarTree* var);
|
||||
void queueMemoryDump(bool immediate);
|
||||
CmdQueueItem* loadCoreFile();
|
||||
void openProgramConfig(const QString& name);
|
||||
|
||||
typedef std::list<Breakpoint>::iterator BrkptIterator;
|
||||
BrkptIterator breakpointByFilePos(QString file, int lineNo,
|
||||
const DbgAddr& address);
|
||||
BrkptIterator breakpointById(int id);
|
||||
CmdQueueItem* executeBreakpoint(const Breakpoint* bp, bool queueOnly);
|
||||
void newBreakpoint(CmdQueueItem* cmd, const char* output);
|
||||
void updateBreakList(const char* output);
|
||||
bool stopMayChangeBreakList() const;
|
||||
void saveBreakpoints(ProgramConfig* config);
|
||||
void restoreBreakpoints(ProgramConfig* config);
|
||||
bool enableDisableBreakpoint(BrkptIterator bp);
|
||||
bool deleteBreakpoint(BrkptIterator bp);
|
||||
bool conditionalBreakpoint(BrkptIterator bp,
|
||||
const QString& condition,
|
||||
int ignoreCount);
|
||||
|
||||
bool m_haveExecutable; /* has an executable been specified */
|
||||
bool m_programActive; /* is the program active (possibly halting in a brkpt)? */
|
||||
bool m_programRunning; /* is the program executing (not stopped)? */
|
||||
bool m_sharedLibsListed; /* do we know the shared libraries loaded by the prog? */
|
||||
QString m_executable;
|
||||
QString m_corefile;
|
||||
QString m_attachedPid; /* user input of attaching to pid */
|
||||
QString m_programArgs;
|
||||
QString m_remoteDevice;
|
||||
QString m_programWD; /* working directory of gdb */
|
||||
QDict<EnvVar> m_envVars; /* environment variables set by user */
|
||||
QStringList m_boolOptions; /* boolean options */
|
||||
QStringList m_sharedLibs; /* shared libraries used by program */
|
||||
ProgramTypeTable* m_typeTable; /* known types used by the program */
|
||||
ProgramConfig* m_programConfig; /* program-specific settings (brkpts etc) */
|
||||
void saveProgramSettings();
|
||||
void restoreProgramSettings();
|
||||
QString readDebuggerCmd();
|
||||
|
||||
// debugger process
|
||||
DebuggerDriver* m_d;
|
||||
bool m_explicitKill; /* whether we are killing gdb ourselves */
|
||||
|
||||
QString m_statusMessage;
|
||||
|
||||
protected slots:
|
||||
void gdbExited(KProcess*);
|
||||
void slotInferiorRunning();
|
||||
void backgroundUpdate();
|
||||
void gotoFrame(int);
|
||||
void slotExpanding(QListViewItem*);
|
||||
void slotDeleteWatch();
|
||||
void slotValuePopup(const QString&);
|
||||
void slotDisassemble(const QString&, int);
|
||||
void slotValueEdited(VarTree*, const QString&);
|
||||
public slots:
|
||||
void setThread(int);
|
||||
void shutdown();
|
||||
|
||||
signals:
|
||||
/**
|
||||
* This signal is emitted before the debugger is started. The slot is
|
||||
* supposed to set up m_inferiorTerminal.
|
||||
*/
|
||||
void debuggerStarting();
|
||||
|
||||
/**
|
||||
* This signal is emitted whenever a part of the debugger needs to
|
||||
* highlight the specfied source code line (e.g. when the program
|
||||
* stops).
|
||||
*
|
||||
* @param file specifies the file; this is not necessarily a full path
|
||||
* name, and if it is relative, you won't know relative to what, you
|
||||
* can only guess.
|
||||
* @param lineNo specifies the line number (0-based!) (this may be
|
||||
* negative, in which case the file should be activated, but the line
|
||||
* should NOT be changed).
|
||||
* @param address specifies the exact address of the PC or is empty.
|
||||
*/
|
||||
void activateFileLine(const QString& file, int lineNo, const DbgAddr& address);
|
||||
|
||||
/**
|
||||
* This signal indicates that the program counter has changed.
|
||||
*
|
||||
* @param filename specifies the filename where the program stopped
|
||||
* @param lineNo specifies the line number (zero-based); it can be -1
|
||||
* if it is unknown
|
||||
* @param address specifies the address that the instruction pointer
|
||||
* points to.
|
||||
* @param frameNo specifies the frame number: 0 is the innermost frame,
|
||||
* positive numbers are frames somewhere up the stack (indicates points
|
||||
* where a function was called); the latter cases should be indicated
|
||||
* differently in the source window.
|
||||
*/
|
||||
void updatePC(const QString& filename, int lineNo,
|
||||
const DbgAddr& address, int frameNo);
|
||||
|
||||
/**
|
||||
* This signal is emitted when gdb detects that the executable has been
|
||||
* updated, e.g. recompiled. (You usually need not handle this signal
|
||||
* if you are the editor which changed the executable.)
|
||||
*/
|
||||
void executableUpdated();
|
||||
|
||||
/**
|
||||
* Indicates that a new status message is available.
|
||||
*/
|
||||
void updateStatusMessage();
|
||||
|
||||
/**
|
||||
* Indicates that the internal state of the debugger has changed, and
|
||||
* that this will very likely have an impact on the UI.
|
||||
*/
|
||||
void updateUI();
|
||||
|
||||
/**
|
||||
* Indicates that the list of breakpoints has possibly changed.
|
||||
*/
|
||||
void breakpointsChanged();
|
||||
|
||||
/**
|
||||
* Indicates that the register values have possibly changed.
|
||||
*/
|
||||
void registersChanged(const std::list<RegisterInfo>&);
|
||||
|
||||
/**
|
||||
* Indicates that the list of threads has possibly changed.
|
||||
*/
|
||||
void threadsChanged(const std::list<ThreadInfo>&);
|
||||
|
||||
/**
|
||||
* Indicates that the value for a value popup is ready.
|
||||
*/
|
||||
void valuePopup(const QString&);
|
||||
|
||||
/**
|
||||
* Provides the disassembled code of the location given by file and
|
||||
* line number (zero-based).
|
||||
*/
|
||||
void disassembled(const QString& file, int line, const std::list<DisassembledCode>& code);
|
||||
|
||||
/**
|
||||
* Indicates that the program has stopped for any reason: by a
|
||||
* breakpoint, by a signal that the debugger driver caught, by a single
|
||||
* step instruction.
|
||||
*/
|
||||
void programStopped();
|
||||
|
||||
/**
|
||||
* Indicates that a new memory dump output is ready.
|
||||
* @param msg is an error message or empty
|
||||
* @param memdump is the memory dump
|
||||
*/
|
||||
void memoryDumpChanged(const QString&, const std::list<MemoryDump>&);
|
||||
|
||||
/**
|
||||
* Gives other objects a chance to save program specific settings.
|
||||
*/
|
||||
void saveProgramSpecific(KConfigBase* config);
|
||||
|
||||
/**
|
||||
* Gives other objects a chance to restore program specific settings.
|
||||
*/
|
||||
void restoreProgramSpecific(KConfigBase* config);
|
||||
|
||||
protected:
|
||||
ExprWnd& m_localVariables;
|
||||
ExprWnd& m_watchVariables;
|
||||
QListBox& m_btWindow;
|
||||
|
||||
// implementation helpers
|
||||
protected:
|
||||
QWidget* parentWidget() { return static_cast<QWidget*>(parent()); }
|
||||
};
|
||||
|
||||
#endif // DEBUGGER_H
|
@ -0,0 +1,3 @@
|
||||
|
||||
# add here all the languages, you have docu for
|
||||
SUBDIRS = de en ru
|
@ -0,0 +1,721 @@
|
||||
# Makefile.in generated by automake 1.10.1 from Makefile.am.
|
||||
# KDE tags expanded automatically by am_edit - $Revision: 483858 $
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = kdbg/doc
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
#>- RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
#>- html-recursive info-recursive install-data-recursive \
|
||||
#>- install-dvi-recursive install-exec-recursive \
|
||||
#>- install-html-recursive install-info-recursive \
|
||||
#>- install-pdf-recursive install-ps-recursive install-recursive \
|
||||
#>- installcheck-recursive installdirs-recursive pdf-recursive \
|
||||
#>- ps-recursive uninstall-recursive
|
||||
#>+ 7
|
||||
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
|
||||
html-recursive info-recursive install-data-recursive \
|
||||
install-dvi-recursive install-exec-recursive \
|
||||
install-html-recursive install-info-recursive \
|
||||
install-pdf-recursive install-ps-recursive install-recursive \
|
||||
installcheck-recursive installdirs-recursive pdf-recursive \
|
||||
ps-recursive uninstall-recursive nmcheck-recursive bcheck-recursive
|
||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
||||
distclean-recursive maintainer-clean-recursive
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
#>+ 1
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
ARTSCCONFIG = @ARTSCCONFIG@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTODIRS = @AUTODIRS@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CONF_FILES = @CONF_FILES@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DCOPIDL = @DCOPIDL@
|
||||
DCOPIDL2CPP = @DCOPIDL2CPP@
|
||||
DCOPIDLNG = @DCOPIDLNG@
|
||||
DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
ENABLE_PERMISSIVE_FLAG = @ENABLE_PERMISSIVE_FLAG@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
FRAMEWORK_COREAUDIO = @FRAMEWORK_COREAUDIO@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GREP = @GREP@
|
||||
HAVE_GCC_VISIBILITY = @HAVE_GCC_VISIBILITY@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@
|
||||
KCONFIG_COMPILER = @KCONFIG_COMPILER@
|
||||
KDECONFIG = @KDECONFIG@
|
||||
KDE_CHECK_PLUGIN = @KDE_CHECK_PLUGIN@
|
||||
KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@
|
||||
KDE_INCLUDES = @KDE_INCLUDES@
|
||||
KDE_LDFLAGS = @KDE_LDFLAGS@
|
||||
KDE_MT_LDFLAGS = @KDE_MT_LDFLAGS@
|
||||
KDE_MT_LIBS = @KDE_MT_LIBS@
|
||||
KDE_NO_UNDEFINED = @KDE_NO_UNDEFINED@
|
||||
KDE_PLUGIN = @KDE_PLUGIN@
|
||||
KDE_RPATH = @KDE_RPATH@
|
||||
KDE_USE_CLOSURE_FALSE = @KDE_USE_CLOSURE_FALSE@
|
||||
KDE_USE_CLOSURE_TRUE = @KDE_USE_CLOSURE_TRUE@
|
||||
KDE_USE_FINAL_FALSE = @KDE_USE_FINAL_FALSE@
|
||||
KDE_USE_FINAL_TRUE = @KDE_USE_FINAL_TRUE@
|
||||
KDE_USE_FPIE = @KDE_USE_FPIE@
|
||||
KDE_USE_NMCHECK_FALSE = @KDE_USE_NMCHECK_FALSE@
|
||||
KDE_USE_NMCHECK_TRUE = @KDE_USE_NMCHECK_TRUE@
|
||||
KDE_USE_PIE = @KDE_USE_PIE@
|
||||
KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LDFLAGS_AS_NEEDED = @LDFLAGS_AS_NEEDED@
|
||||
LDFLAGS_NEW_DTAGS = @LDFLAGS_NEW_DTAGS@
|
||||
LIBCOMPAT = @LIBCOMPAT@
|
||||
LIBCRYPT = @LIBCRYPT@
|
||||
LIBDL = @LIBDL@
|
||||
LIBJPEG = @LIBJPEG@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBPNG = @LIBPNG@
|
||||
LIBPTHREAD = @LIBPTHREAD@
|
||||
LIBRESOLV = @LIBRESOLV@
|
||||
LIBS = @LIBS@
|
||||
LIBSM = @LIBSM@
|
||||
LIBSOCKET = @LIBSOCKET@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBUCB = @LIBUCB@
|
||||
LIBUTIL = @LIBUTIL@
|
||||
LIBZ = @LIBZ@
|
||||
LIB_KAB = @LIB_KAB@
|
||||
LIB_KABC = @LIB_KABC@
|
||||
LIB_KDECORE = @LIB_KDECORE@
|
||||
LIB_KDED = @LIB_KDED@
|
||||
LIB_KDEPIM = @LIB_KDEPIM@
|
||||
LIB_KDEPRINT = @LIB_KDEPRINT@
|
||||
LIB_KDEUI = @LIB_KDEUI@
|
||||
LIB_KDNSSD = @LIB_KDNSSD@
|
||||
LIB_KFILE = @LIB_KFILE@
|
||||
LIB_KFM = @LIB_KFM@
|
||||
LIB_KHTML = @LIB_KHTML@
|
||||
LIB_KIMPROXY = @LIB_KIMPROXY@
|
||||
LIB_KIO = @LIB_KIO@
|
||||
LIB_KJS = @LIB_KJS@
|
||||
LIB_KNEWSTUFF = @LIB_KNEWSTUFF@
|
||||
LIB_KPARTS = @LIB_KPARTS@
|
||||
LIB_KSPELL = @LIB_KSPELL@
|
||||
LIB_KSYCOCA = @LIB_KSYCOCA@
|
||||
LIB_KUNITTEST = @LIB_KUNITTEST@
|
||||
LIB_KUTILS = @LIB_KUTILS@
|
||||
LIB_POLL = @LIB_POLL@
|
||||
LIB_QPE = @LIB_QPE@
|
||||
LIB_QT = @LIB_QT@
|
||||
LIB_SMB = @LIB_SMB@
|
||||
LIB_X11 = @LIB_X11@
|
||||
LIB_XEXT = @LIB_XEXT@
|
||||
LIB_XRENDER = @LIB_XRENDER@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MAKEKDEWIDGETS = @MAKEKDEWIDGETS@
|
||||
MCOPIDL = @MCOPIDL@
|
||||
MEINPROC = @MEINPROC@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
MOC = @MOC@
|
||||
MSGFMT = @MSGFMT@
|
||||
NOOPT_CFLAGS = @NOOPT_CFLAGS@
|
||||
NOOPT_CXXFLAGS = @NOOPT_CXXFLAGS@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PERL = @PERL@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PS_COMMAND = @PS_COMMAND@
|
||||
QTE_NORTTI = @QTE_NORTTI@
|
||||
QT_INCLUDES = @QT_INCLUDES@
|
||||
QT_LDFLAGS = @QT_LDFLAGS@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
TOPSUBDIRS = @TOPSUBDIRS@
|
||||
UIC = @UIC@
|
||||
UIC_TR = @UIC_TR@
|
||||
USER_INCLUDES = @USER_INCLUDES@
|
||||
USER_LDFLAGS = @USER_LDFLAGS@
|
||||
USE_EXCEPTIONS = @USE_EXCEPTIONS@
|
||||
USE_RTTI = @USE_RTTI@
|
||||
USE_THREADS = @USE_THREADS@
|
||||
VERSION = @VERSION@
|
||||
WOVERLOADED_VIRTUAL = @WOVERLOADED_VIRTUAL@
|
||||
XGETTEXT = @XGETTEXT@
|
||||
XMKMF = @XMKMF@
|
||||
XMLLINT = @XMLLINT@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_INCLUDES = @X_INCLUDES@
|
||||
X_LDFLAGS = @X_LDFLAGS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
X_RPATH = @X_RPATH@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
all_includes = @all_includes@
|
||||
all_libraries = @all_libraries@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
kde_appsdir = @kde_appsdir@
|
||||
kde_bindir = @kde_bindir@
|
||||
kde_confdir = @kde_confdir@
|
||||
kde_datadir = @kde_datadir@
|
||||
kde_htmldir = @kde_htmldir@
|
||||
kde_icondir = @kde_icondir@
|
||||
kde_includes = @kde_includes@
|
||||
kde_kcfgdir = @kde_kcfgdir@
|
||||
kde_libraries = @kde_libraries@
|
||||
kde_libs_htmldir = @kde_libs_htmldir@
|
||||
kde_libs_prefix = @kde_libs_prefix@
|
||||
kde_locale = @kde_locale@
|
||||
kde_mimedir = @kde_mimedir@
|
||||
kde_moduledir = @kde_moduledir@
|
||||
kde_qtver = @kde_qtver@
|
||||
kde_servicesdir = @kde_servicesdir@
|
||||
kde_servicetypesdir = @kde_servicetypesdir@
|
||||
kde_sounddir = @kde_sounddir@
|
||||
kde_styledir = @kde_styledir@
|
||||
kde_templatesdir = @kde_templatesdir@
|
||||
kde_wallpaperdir = @kde_wallpaperdir@
|
||||
kde_widgetdir = @kde_widgetdir@
|
||||
kdeinitdir = @kdeinitdir@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
qt_includes = @qt_includes@
|
||||
qt_libraries = @qt_libraries@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
x_includes = @x_includes@
|
||||
x_libraries = @x_libraries@
|
||||
xdg_appsdir = @xdg_appsdir@
|
||||
xdg_directorydir = @xdg_directorydir@
|
||||
xdg_menudir = @xdg_menudir@
|
||||
|
||||
# add here all the languages, you have docu for
|
||||
SUBDIRS = de en ru
|
||||
#>- all: all-recursive
|
||||
#>+ 1
|
||||
all: docs-am all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
#>- @for dep in $?; do \
|
||||
#>- case '$(am__configure_deps)' in \
|
||||
#>- *$$dep*) \
|
||||
#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
#>- && exit 0; \
|
||||
#>- exit 1;; \
|
||||
#>- esac; \
|
||||
#>- done; \
|
||||
#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kdbg/doc/Makefile'; \
|
||||
#>- cd $(top_srcdir) && \
|
||||
#>- $(AUTOMAKE) --gnu kdbg/doc/Makefile
|
||||
#>+ 12
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kdbg/doc/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu kdbg/doc/Makefile
|
||||
cd $(top_srcdir) && perl admin/am_edit -padmin kdbg/doc/Makefile.in
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
$(RECURSIVE_CLEAN_TARGETS):
|
||||
@failcom='exit 1'; \
|
||||
for f in x $$MAKEFLAGS; do \
|
||||
case $$f in \
|
||||
*=* | --[!k]*);; \
|
||||
*k*) failcom='fail=yes';; \
|
||||
esac; \
|
||||
done; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| eval $$failcom; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
done
|
||||
ctags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
|
||||
done
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
||||
include_option=--etags-include; \
|
||||
empty_fix=.; \
|
||||
else \
|
||||
include_option=--include; \
|
||||
empty_fix=; \
|
||||
fi; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test ! -f $$subdir/TAGS || \
|
||||
tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$tags $$unique; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$tags$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$tags $$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& cd $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) $$here
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d "$(distdir)/$$subdir" \
|
||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
||||
|| exit 1; \
|
||||
distdir=`$(am__cd) $(distdir) && pwd`; \
|
||||
top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$$top_distdir" \
|
||||
distdir="$$distdir/$$subdir" \
|
||||
am__remove_distdir=: \
|
||||
am__skip_length_check=: \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-recursive
|
||||
all-am: Makefile
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
#>- clean: clean-recursive
|
||||
#>+ 1
|
||||
clean: kde-rpo-clean clean-recursive
|
||||
|
||||
#>- clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
#>+ 1
|
||||
clean-am: clean-bcheck clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-recursive
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-recursive
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-dvi: install-dvi-recursive
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-recursive
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-recursive
|
||||
|
||||
install-ps: install-ps-recursive
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-recursive
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-recursive
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am:
|
||||
|
||||
.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
|
||||
install-strip
|
||||
|
||||
.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
|
||||
all all-am check check-am clean clean-generic clean-libtool \
|
||||
ctags ctags-recursive distclean distclean-generic \
|
||||
distclean-libtool distclean-tags distdir dvi dvi-am html \
|
||||
html-am info info-am install install-am install-data \
|
||||
install-data-am install-dvi install-dvi-am install-exec \
|
||||
install-exec-am install-html install-html-am install-info \
|
||||
install-info-am install-man install-pdf install-pdf-am \
|
||||
install-ps install-ps-am install-strip installcheck \
|
||||
installcheck-am installdirs installdirs-am maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
||||
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
|
||||
uninstall uninstall-am
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
|
||||
|
||||
#>+ 2
|
||||
KDE_DIST=Makefile.in Makefile.am
|
||||
|
||||
#>+ 2
|
||||
docs-am:
|
||||
|
||||
#>+ 15
|
||||
force-reedit:
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kdbg/doc/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu kdbg/doc/Makefile
|
||||
cd $(top_srcdir) && perl admin/am_edit -padmin kdbg/doc/Makefile.in
|
||||
|
||||
|
||||
#>+ 21
|
||||
clean-bcheck:
|
||||
rm -f *.bchecktest.cc *.bchecktest.cc.class a.out
|
||||
|
||||
bcheck: bcheck-recursive
|
||||
|
||||
bcheck-am:
|
||||
@for i in ; do \
|
||||
if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \
|
||||
echo "int main() {return 0;}" > $$i.bchecktest.cc ; \
|
||||
echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \
|
||||
echo "$$i"; \
|
||||
if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \
|
||||
rm -f $$i.bchecktest.cc; exit 1; \
|
||||
fi ; \
|
||||
echo "" >> $$i.bchecktest.cc.class; \
|
||||
perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \
|
||||
rm -f a.out; \
|
||||
fi ; \
|
||||
done
|
||||
|
||||
|
||||
#>+ 3
|
||||
final:
|
||||
$(MAKE) all-am
|
||||
|
||||
#>+ 3
|
||||
final-install:
|
||||
$(MAKE) install-am
|
||||
|
||||
#>+ 3
|
||||
no-final:
|
||||
$(MAKE) all-am
|
||||
|
||||
#>+ 3
|
||||
no-final-install:
|
||||
$(MAKE) install-am
|
||||
|
||||
#>+ 3
|
||||
kde-rpo-clean:
|
||||
-rm -f *.rpo
|
||||
|
||||
#>+ 3
|
||||
nmcheck:
|
||||
nmcheck-am: nmcheck
|
@ -0,0 +1,27 @@
|
||||
html_DATA = \
|
||||
argspwdenv.html \
|
||||
breakptlist.html \
|
||||
globaloptions.html \
|
||||
howdoi.html \
|
||||
localvars.html \
|
||||
memory.html \
|
||||
pgmoutput.html \
|
||||
pgmsettings.html \
|
||||
registers.html \
|
||||
sourcecode.html \
|
||||
stack.html \
|
||||
threads.html \
|
||||
tips.html \
|
||||
watches.html \
|
||||
index.html
|
||||
|
||||
htmldir = $(kde_htmldir)/de/kdbg
|
||||
|
||||
EXTRA_DIST = $(html_DATA)
|
||||
|
||||
install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(htmldir)
|
||||
cd $(DESTDIR)$(htmldir) && ln -s -f ../../en/kdbg/types.html .
|
||||
|
||||
uninstall-local:
|
||||
-rm -f $(DESTDIR)$(htmldir)/types.html
|
@ -0,0 +1,609 @@
|
||||
# Makefile.in generated by automake 1.10.1 from Makefile.am.
|
||||
# KDE tags expanded automatically by am_edit - $Revision: 483858 $
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
target_triplet = @target@
|
||||
subdir = kdbg/doc/de
|
||||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
|
||||
$(top_srcdir)/configure.in
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/admin/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
SOURCES =
|
||||
DIST_SOURCES =
|
||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
||||
am__vpath_adj = case $$p in \
|
||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
||||
*) f=$$p;; \
|
||||
esac;
|
||||
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
|
||||
am__installdirs = "$(DESTDIR)$(htmldir)"
|
||||
htmlDATA_INSTALL = $(INSTALL_DATA)
|
||||
DATA = $(html_DATA)
|
||||
#>- DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
#>+ 1
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) $(KDE_DIST)
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AR = @AR@
|
||||
ARTSCCONFIG = @ARTSCCONFIG@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTODIRS = @AUTODIRS@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CONF_FILES = @CONF_FILES@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DCOPIDL = @DCOPIDL@
|
||||
DCOPIDL2CPP = @DCOPIDL2CPP@
|
||||
DCOPIDLNG = @DCOPIDLNG@
|
||||
DCOP_DEPENDENCIES = @DCOP_DEPENDENCIES@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO = @ECHO@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
ENABLE_PERMISSIVE_FLAG = @ENABLE_PERMISSIVE_FLAG@
|
||||
EXEEXT = @EXEEXT@
|
||||
F77 = @F77@
|
||||
FFLAGS = @FFLAGS@
|
||||
FRAMEWORK_COREAUDIO = @FRAMEWORK_COREAUDIO@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
GREP = @GREP@
|
||||
HAVE_GCC_VISIBILITY = @HAVE_GCC_VISIBILITY@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
KCFG_DEPENDENCIES = @KCFG_DEPENDENCIES@
|
||||
KCONFIG_COMPILER = @KCONFIG_COMPILER@
|
||||
KDECONFIG = @KDECONFIG@
|
||||
KDE_CHECK_PLUGIN = @KDE_CHECK_PLUGIN@
|
||||
KDE_EXTRA_RPATH = @KDE_EXTRA_RPATH@
|
||||
KDE_INCLUDES = @KDE_INCLUDES@
|
||||
KDE_LDFLAGS = @KDE_LDFLAGS@
|
||||
KDE_MT_LDFLAGS = @KDE_MT_LDFLAGS@
|
||||
KDE_MT_LIBS = @KDE_MT_LIBS@
|
||||
KDE_NO_UNDEFINED = @KDE_NO_UNDEFINED@
|
||||
KDE_PLUGIN = @KDE_PLUGIN@
|
||||
KDE_RPATH = @KDE_RPATH@
|
||||
KDE_USE_CLOSURE_FALSE = @KDE_USE_CLOSURE_FALSE@
|
||||
KDE_USE_CLOSURE_TRUE = @KDE_USE_CLOSURE_TRUE@
|
||||
KDE_USE_FINAL_FALSE = @KDE_USE_FINAL_FALSE@
|
||||
KDE_USE_FINAL_TRUE = @KDE_USE_FINAL_TRUE@
|
||||
KDE_USE_FPIE = @KDE_USE_FPIE@
|
||||
KDE_USE_NMCHECK_FALSE = @KDE_USE_NMCHECK_FALSE@
|
||||
KDE_USE_NMCHECK_TRUE = @KDE_USE_NMCHECK_TRUE@
|
||||
KDE_USE_PIE = @KDE_USE_PIE@
|
||||
KDE_XSL_STYLESHEET = @KDE_XSL_STYLESHEET@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LDFLAGS_AS_NEEDED = @LDFLAGS_AS_NEEDED@
|
||||
LDFLAGS_NEW_DTAGS = @LDFLAGS_NEW_DTAGS@
|
||||
LIBCOMPAT = @LIBCOMPAT@
|
||||
LIBCRYPT = @LIBCRYPT@
|
||||
LIBDL = @LIBDL@
|
||||
LIBJPEG = @LIBJPEG@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBPNG = @LIBPNG@
|
||||
LIBPTHREAD = @LIBPTHREAD@
|
||||
LIBRESOLV = @LIBRESOLV@
|
||||
LIBS = @LIBS@
|
||||
LIBSM = @LIBSM@
|
||||
LIBSOCKET = @LIBSOCKET@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LIBUCB = @LIBUCB@
|
||||
LIBUTIL = @LIBUTIL@
|
||||
LIBZ = @LIBZ@
|
||||
LIB_KAB = @LIB_KAB@
|
||||
LIB_KABC = @LIB_KABC@
|
||||
LIB_KDECORE = @LIB_KDECORE@
|
||||
LIB_KDED = @LIB_KDED@
|
||||
LIB_KDEPIM = @LIB_KDEPIM@
|
||||
LIB_KDEPRINT = @LIB_KDEPRINT@
|
||||
LIB_KDEUI = @LIB_KDEUI@
|
||||
LIB_KDNSSD = @LIB_KDNSSD@
|
||||
LIB_KFILE = @LIB_KFILE@
|
||||
LIB_KFM = @LIB_KFM@
|
||||
LIB_KHTML = @LIB_KHTML@
|
||||
LIB_KIMPROXY = @LIB_KIMPROXY@
|
||||
LIB_KIO = @LIB_KIO@
|
||||
LIB_KJS = @LIB_KJS@
|
||||
LIB_KNEWSTUFF = @LIB_KNEWSTUFF@
|
||||
LIB_KPARTS = @LIB_KPARTS@
|
||||
LIB_KSPELL = @LIB_KSPELL@
|
||||
LIB_KSYCOCA = @LIB_KSYCOCA@
|
||||
LIB_KUNITTEST = @LIB_KUNITTEST@
|
||||
LIB_KUTILS = @LIB_KUTILS@
|
||||
LIB_POLL = @LIB_POLL@
|
||||
LIB_QPE = @LIB_QPE@
|
||||
LIB_QT = @LIB_QT@
|
||||
LIB_SMB = @LIB_SMB@
|
||||
LIB_X11 = @LIB_X11@
|
||||
LIB_XEXT = @LIB_XEXT@
|
||||
LIB_XRENDER = @LIB_XRENDER@
|
||||
LN_S = @LN_S@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MAKEKDEWIDGETS = @MAKEKDEWIDGETS@
|
||||
MCOPIDL = @MCOPIDL@
|
||||
MEINPROC = @MEINPROC@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
MOC = @MOC@
|
||||
MSGFMT = @MSGFMT@
|
||||
NOOPT_CFLAGS = @NOOPT_CFLAGS@
|
||||
NOOPT_CXXFLAGS = @NOOPT_CXXFLAGS@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PERL = @PERL@
|
||||
PKG_CONFIG = @PKG_CONFIG@
|
||||
PS_COMMAND = @PS_COMMAND@
|
||||
QTE_NORTTI = @QTE_NORTTI@
|
||||
QT_INCLUDES = @QT_INCLUDES@
|
||||
QT_LDFLAGS = @QT_LDFLAGS@
|
||||
RANLIB = @RANLIB@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
TOPSUBDIRS = @TOPSUBDIRS@
|
||||
UIC = @UIC@
|
||||
UIC_TR = @UIC_TR@
|
||||
USER_INCLUDES = @USER_INCLUDES@
|
||||
USER_LDFLAGS = @USER_LDFLAGS@
|
||||
USE_EXCEPTIONS = @USE_EXCEPTIONS@
|
||||
USE_RTTI = @USE_RTTI@
|
||||
USE_THREADS = @USE_THREADS@
|
||||
VERSION = @VERSION@
|
||||
WOVERLOADED_VIRTUAL = @WOVERLOADED_VIRTUAL@
|
||||
XGETTEXT = @XGETTEXT@
|
||||
XMKMF = @XMKMF@
|
||||
XMLLINT = @XMLLINT@
|
||||
X_EXTRA_LIBS = @X_EXTRA_LIBS@
|
||||
X_INCLUDES = @X_INCLUDES@
|
||||
X_LDFLAGS = @X_LDFLAGS@
|
||||
X_PRE_LIBS = @X_PRE_LIBS@
|
||||
X_RPATH = @X_RPATH@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
ac_ct_F77 = @ac_ct_F77@
|
||||
all_includes = @all_includes@
|
||||
all_libraries = @all_libraries@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build = @build@
|
||||
build_alias = @build_alias@
|
||||
build_cpu = @build_cpu@
|
||||
build_os = @build_os@
|
||||
build_vendor = @build_vendor@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host = @host@
|
||||
host_alias = @host_alias@
|
||||
host_cpu = @host_cpu@
|
||||
host_os = @host_os@
|
||||
host_vendor = @host_vendor@
|
||||
htmldir = $(kde_htmldir)/de/kdbg
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
kde_appsdir = @kde_appsdir@
|
||||
kde_bindir = @kde_bindir@
|
||||
kde_confdir = @kde_confdir@
|
||||
kde_datadir = @kde_datadir@
|
||||
kde_htmldir = @kde_htmldir@
|
||||
kde_icondir = @kde_icondir@
|
||||
kde_includes = @kde_includes@
|
||||
kde_kcfgdir = @kde_kcfgdir@
|
||||
kde_libraries = @kde_libraries@
|
||||
kde_libs_htmldir = @kde_libs_htmldir@
|
||||
kde_libs_prefix = @kde_libs_prefix@
|
||||
kde_locale = @kde_locale@
|
||||
kde_mimedir = @kde_mimedir@
|
||||
kde_moduledir = @kde_moduledir@
|
||||
kde_qtver = @kde_qtver@
|
||||
kde_servicesdir = @kde_servicesdir@
|
||||
kde_servicetypesdir = @kde_servicetypesdir@
|
||||
kde_sounddir = @kde_sounddir@
|
||||
kde_styledir = @kde_styledir@
|
||||
kde_templatesdir = @kde_templatesdir@
|
||||
kde_wallpaperdir = @kde_wallpaperdir@
|
||||
kde_widgetdir = @kde_widgetdir@
|
||||
kdeinitdir = @kdeinitdir@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
qt_includes = @qt_includes@
|
||||
qt_libraries = @qt_libraries@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target = @target@
|
||||
target_alias = @target_alias@
|
||||
target_cpu = @target_cpu@
|
||||
target_os = @target_os@
|
||||
target_vendor = @target_vendor@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
x_includes = @x_includes@
|
||||
x_libraries = @x_libraries@
|
||||
xdg_appsdir = @xdg_appsdir@
|
||||
xdg_directorydir = @xdg_directorydir@
|
||||
xdg_menudir = @xdg_menudir@
|
||||
html_DATA = \
|
||||
argspwdenv.html \
|
||||
breakptlist.html \
|
||||
globaloptions.html \
|
||||
howdoi.html \
|
||||
localvars.html \
|
||||
memory.html \
|
||||
pgmoutput.html \
|
||||
pgmsettings.html \
|
||||
registers.html \
|
||||
sourcecode.html \
|
||||
stack.html \
|
||||
threads.html \
|
||||
tips.html \
|
||||
watches.html \
|
||||
index.html
|
||||
|
||||
EXTRA_DIST = $(html_DATA)
|
||||
#>- all: all-am
|
||||
#>+ 1
|
||||
all: docs-am all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
#>- @for dep in $?; do \
|
||||
#>- case '$(am__configure_deps)' in \
|
||||
#>- *$$dep*) \
|
||||
#>- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
#>- && exit 0; \
|
||||
#>- exit 1;; \
|
||||
#>- esac; \
|
||||
#>- done; \
|
||||
#>- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kdbg/doc/de/Makefile'; \
|
||||
#>- cd $(top_srcdir) && \
|
||||
#>- $(AUTOMAKE) --gnu kdbg/doc/de/Makefile
|
||||
#>+ 12
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kdbg/doc/de/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu kdbg/doc/de/Makefile
|
||||
cd $(top_srcdir) && perl admin/am_edit -padmin kdbg/doc/de/Makefile.in
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
|
||||
clean-libtool:
|
||||
-rm -rf .libs _libs
|
||||
install-htmlDATA: $(html_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)"
|
||||
@list='$(html_DATA)'; for p in $$list; do \
|
||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
||||
f=$(am__strip_dir) \
|
||||
echo " $(htmlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||
$(htmlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
|
||||
done
|
||||
|
||||
uninstall-htmlDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(html_DATA)'; for p in $$list; do \
|
||||
f=$(am__strip_dir) \
|
||||
echo " rm -f '$(DESTDIR)$(htmldir)/$$f'"; \
|
||||
rm -f "$(DESTDIR)$(htmldir)/$$f"; \
|
||||
done
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
ctags: CTAGS
|
||||
CTAGS:
|
||||
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
|
||||
fi; \
|
||||
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(DATA)
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(htmldir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
#>- clean: clean-am
|
||||
#>+ 1
|
||||
clean: kde-rpo-clean clean-am
|
||||
|
||||
#>- clean-am: clean-generic clean-libtool mostlyclean-am
|
||||
#>+ 1
|
||||
clean-am: clean-bcheck clean-generic clean-libtool mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-data-local install-htmlDATA
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-htmlDATA uninstall-local
|
||||
|
||||
.MAKE: install-am install-strip
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
||||
distclean distclean-generic distclean-libtool distdir dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-data-local install-dvi \
|
||||
install-dvi-am install-exec install-exec-am install-html \
|
||||
install-html-am install-htmlDATA install-info install-info-am \
|
||||
install-man install-pdf install-pdf-am install-ps \
|
||||
install-ps-am install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-generic \
|
||||
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
||||
ps ps-am uninstall uninstall-am uninstall-htmlDATA \
|
||||
uninstall-local
|
||||
|
||||
|
||||
install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(htmldir)
|
||||
cd $(DESTDIR)$(htmldir) && ln -s -f ../../en/kdbg/types.html .
|
||||
|
||||
uninstall-local:
|
||||
-rm -f $(DESTDIR)$(htmldir)/types.html
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
|
||||
|
||||
#>+ 2
|
||||
KDE_DIST=stack.html memory.html index.html watches.html sourcecode.html howdoi.html pgmsettings.html globaloptions.html pgmoutput.html Makefile.in threads.html argspwdenv.html localvars.html registers.html breakptlist.html tips.html Makefile.am
|
||||
|
||||
#>+ 2
|
||||
docs-am:
|
||||
|
||||
#>+ 15
|
||||
force-reedit:
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu kdbg/doc/de/Makefile'; \
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu kdbg/doc/de/Makefile
|
||||
cd $(top_srcdir) && perl admin/am_edit -padmin kdbg/doc/de/Makefile.in
|
||||
|
||||
|
||||
#>+ 21
|
||||
clean-bcheck:
|
||||
rm -f *.bchecktest.cc *.bchecktest.cc.class a.out
|
||||
|
||||
bcheck: bcheck-am
|
||||
|
||||
bcheck-am:
|
||||
@for i in ; do \
|
||||
if test $(srcdir)/$$i -nt $$i.bchecktest.cc; then \
|
||||
echo "int main() {return 0;}" > $$i.bchecktest.cc ; \
|
||||
echo "#include \"$$i\"" >> $$i.bchecktest.cc ; \
|
||||
echo "$$i"; \
|
||||
if ! $(CXX) $(DEFS) -I. -I$(srcdir) -I$(top_builddir) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(KDE_CXXFLAGS) --dump-class-hierarchy -c $$i.bchecktest.cc; then \
|
||||
rm -f $$i.bchecktest.cc; exit 1; \
|
||||
fi ; \
|
||||
echo "" >> $$i.bchecktest.cc.class; \
|
||||
perl $(top_srcdir)/admin/bcheck.pl $$i.bchecktest.cc.class || { rm -f $$i.bchecktest.cc; exit 1; }; \
|
||||
rm -f a.out; \
|
||||
fi ; \
|
||||
done
|
||||
|
||||
|
||||
#>+ 3
|
||||
final:
|
||||
$(MAKE) all-am
|
||||
|
||||
#>+ 3
|
||||
final-install:
|
||||
$(MAKE) install-am
|
||||
|
||||
#>+ 3
|
||||
no-final:
|
||||
$(MAKE) all-am
|
||||
|
||||
#>+ 3
|
||||
no-final-install:
|
||||
$(MAKE) install-am
|
||||
|
||||
#>+ 3
|
||||
kde-rpo-clean:
|
||||
-rm -f *.rpo
|
||||
|
||||
#>+ 3
|
||||
nmcheck:
|
||||
nmcheck-am: nmcheck
|
@ -0,0 +1,50 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="GENERATOR" content="Mozilla/4.74 [en] (X11; U; Linux 2.2.16-SMP i686) [Netscape]">
|
||||
<meta name="Author" content="Johannes Sixt">
|
||||
<title>KDbg - Benutzerhandbuch - Argumente, Arbeitsverzeichnis, Umgebungsvariablen</title>
|
||||
</head>
|
||||
<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
|
||||
<a href="index.html">Inhalt</a>
|
||||
<h3>
|
||||
<a NAME="Environment"></a>Programmargumente, Arbeitsverzeichnis, Umgebungsvariablen
|
||||
setzen</h3>
|
||||
Mit <i>Ausführen|Argumente</i> öffnen Sie einen Dialog, in dem
|
||||
Sie Programmargumente, das Arbeitsverzeichnis sowie Umgebungsvariablen
|
||||
setzen können.
|
||||
<h3>
|
||||
Programmargumente</h3>
|
||||
In der obersten Eingabezeile können Sie die Programmargumente eingeben,
|
||||
die an das Programm übergeben werden sollen. Diese werden beim nächsten
|
||||
Programmstart verwendet.
|
||||
<h3>
|
||||
Arbeitsverzeichnis</h3>
|
||||
Im Eingabefeld darunter können Sie das Arbeitsverzeichnis angeben.
|
||||
Dieses wird sofort an gdb übergeben, sobald Sie <i>OK</i> drücken.
|
||||
Das Programm verwendet das neue Arbeitsverzeichnis allerdings erst beim
|
||||
nächsten Start.
|
||||
<p>Das Arbeitsverzeichnis gilt auch für gdb selbst! Das angegebene
|
||||
Arbeitsverzeichnis wird sofort an gdb weitergegeben, d.h. gdb wird die
|
||||
neue Einstellung verwenden, sobald Sie <i>OK</i> drücken. Das kann
|
||||
einen Einfluss darauf haben, ob gdb Quellcodedateien findet.
|
||||
<h3>
|
||||
Umgebungsvariablen</h3>
|
||||
Im Bereich für Umgebungsvariablen können Sie einen Ausdruck in
|
||||
der Form
|
||||
<tt>VARIABLE=Wert</tt> eingeben und dann <i>Ändern</i> klicken,
|
||||
um der Umgebungsvariablen <tt>VARIABLE</tt> einen <tt>Wert</tt> zuzuweisen.
|
||||
Um eine Variable zu entfernen, wählen Sie diese zuerst aus der Liste
|
||||
darunter aus und klicken dan <i>Löschen</i>. Um einen Wert zu ändern,
|
||||
geben Sie einfach den neuen Wert ein und klicken <i>Ändern</i>. Wenn
|
||||
Sie den Namen der Variable ändern und <i>Ändern</i> clicken,
|
||||
erzeugen Sie eine neue Variable! Die neuen Umgebungsvariablen werden erst
|
||||
beim nächsten Programmstart verwendet.
|
||||
<p>Wenn Sie glibc2 unter Linux verwenden, ist es sehr wichtig, dass Sie
|
||||
der Umgebungsvariablen <tt>LD_BIND_NOW</tt> den Wert <tt>1</tt> zuweisen.
|
||||
Wenn diese Variable nicht gesetzt ist, können solche Funktionen nicht
|
||||
betreten werden, die von der Bibliothek <tt>libc</tt> und anderen Shared
|
||||
Libraries importiert werden.
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1,82 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta name="GENERATOR" content="Mozilla/4.74 [en] (X11; U; Linux 2.2.16-SMP i686) [Netscape]">
|
||||
<meta name="Author" content="Johannes Sixt">
|
||||
<title>KDbg - Benutzerhandbuch - Haltepunkte</title> |