Bladeren bron

* gdbint moved

git-svn-id: trunk@9951 -
marco 17 jaren geleden
bovenliggende
commit
4589df16b0

+ 11 - 0
.gitattributes

@@ -3889,6 +3889,17 @@ packages/fv/src/unixsmsg.inc svneol=native#text/plain
 packages/fv/src/validate.pas svneol=native#text/plain
 packages/fv/src/views.pas svneol=native#text/plain
 packages/fv/src/w32smsg.inc svneol=native#text/plain
+packages/gdbint/Makefile svneol=native#text/plain
+packages/gdbint/Makefile.fpc svneol=native#text/plain
+packages/gdbint/fpmake.pp svneol=native#text/plain
+packages/gdbint/src/freadlin.pp svneol=native#text/x-pascal
+packages/gdbint/src/gdbcon.pp svneol=native#text/plain
+packages/gdbint/src/gdbint.pp svneol=native#text/plain
+packages/gdbint/src/gdbobjs.inc svneol=native#text/plain
+packages/gdbint/src/gdbver.pp svneol=native#text/plain
+packages/gdbint/src/gdbver_nogdb.inc svneol=native#text/x-pascal
+packages/gdbint/src/symify.pp svneol=native#text/plain
+packages/gdbint/src/testgdb.pp svneol=native#text/plain
 packages/hash/Makefile svneol=native#text/plain
 packages/hash/Makefile.fpc svneol=native#text/plain
 packages/hash/examples/md5.ref svneol=native#text/plain

+ 93 - 24
packages/Makefile

@@ -241,28 +241,28 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick  libc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint  libc
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -271,13 +271,13 @@ ifeq ($(FULL_TARGET),i386-netware)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
@@ -298,13 +298,13 @@ ifeq ($(FULL_TARGET),i386-symbian)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -313,7 +313,7 @@ ifeq ($(FULL_TARGET),m68k-atari)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -322,10 +322,10 @@ ifeq ($(FULL_TARGET),m68k-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -334,7 +334,7 @@ ifeq ($(FULL_TARGET),powerpc-macos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -343,34 +343,34 @@ ifeq ($(FULL_TARGET),powerpc-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -391,10 +391,10 @@ ifeq ($(FULL_TARGET),arm-symbian)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick gdbint
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -1512,6 +1512,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 TARGET_DIRS_LIBC=1
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
@@ -1566,6 +1567,7 @@ TARGET_DIRS_ODBC=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 TARGET_DIRS_BASE=1
@@ -1621,6 +1623,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 TARGET_DIRS_BASE=1
@@ -1675,6 +1678,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 TARGET_DIRS_BASE=1
@@ -1708,6 +1712,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 TARGET_DIRS_BASE=1
@@ -1784,6 +1789,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 TARGET_DIRS_BASE=1
@@ -1838,6 +1844,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 TARGET_DIRS_BASE=1
@@ -2004,6 +2011,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 TARGET_DIRS_BASE=1
@@ -2037,6 +2045,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 TARGET_DIRS_BASE=1
@@ -2070,6 +2079,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 TARGET_DIRS_BASE=1
@@ -2145,6 +2155,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 TARGET_DIRS_BASE=1
@@ -2222,6 +2233,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 TARGET_DIRS_BASE=1
@@ -2255,6 +2267,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 TARGET_DIRS_BASE=1
@@ -2330,6 +2343,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 TARGET_DIRS_BASE=1
@@ -2407,6 +2421,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 TARGET_DIRS_BASE=1
@@ -2440,6 +2455,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 TARGET_DIRS_BASE=1
@@ -2473,6 +2489,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 TARGET_DIRS_BASE=1
@@ -2529,6 +2546,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 TARGET_DIRS_BASE=1
@@ -2562,6 +2580,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 TARGET_DIRS_BASE=1
@@ -2595,6 +2614,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 TARGET_DIRS_BASE=1
@@ -2627,6 +2647,7 @@ TARGET_DIRS_ODBC=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 TARGET_DIRS_BASE=1
@@ -2683,6 +2704,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 TARGET_DIRS_BASE=1
@@ -2847,6 +2869,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 TARGET_DIRS_BASE=1
@@ -2880,6 +2903,7 @@ TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
+TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 TARGET_DIRS_BASE=1
@@ -4342,6 +4366,51 @@ imagemagick:
 	$(MAKE) -C imagemagick all
 .PHONY: imagemagick_all imagemagick_debug imagemagick_smart imagemagick_release imagemagick_units imagemagick_examples imagemagick_shared imagemagick_install imagemagick_sourceinstall imagemagick_exampleinstall imagemagick_distinstall imagemagick_zipinstall imagemagick_zipsourceinstall imagemagick_zipexampleinstall imagemagick_zipdistinstall imagemagick_clean imagemagick_distclean imagemagick_cleanall imagemagick_info imagemagick_makefiles imagemagick
 endif
+ifdef TARGET_DIRS_GDBINT
+gdbint_all:
+	$(MAKE) -C gdbint all
+gdbint_debug:
+	$(MAKE) -C gdbint debug
+gdbint_smart:
+	$(MAKE) -C gdbint smart
+gdbint_release:
+	$(MAKE) -C gdbint release
+gdbint_units:
+	$(MAKE) -C gdbint units
+gdbint_examples:
+	$(MAKE) -C gdbint examples
+gdbint_shared:
+	$(MAKE) -C gdbint shared
+gdbint_install:
+	$(MAKE) -C gdbint install
+gdbint_sourceinstall:
+	$(MAKE) -C gdbint sourceinstall
+gdbint_exampleinstall:
+	$(MAKE) -C gdbint exampleinstall
+gdbint_distinstall:
+	$(MAKE) -C gdbint distinstall
+gdbint_zipinstall:
+	$(MAKE) -C gdbint zipinstall
+gdbint_zipsourceinstall:
+	$(MAKE) -C gdbint zipsourceinstall
+gdbint_zipexampleinstall:
+	$(MAKE) -C gdbint zipexampleinstall
+gdbint_zipdistinstall:
+	$(MAKE) -C gdbint zipdistinstall
+gdbint_clean:
+	$(MAKE) -C gdbint clean
+gdbint_distclean:
+	$(MAKE) -C gdbint distclean
+gdbint_cleanall:
+	$(MAKE) -C gdbint cleanall
+gdbint_info:
+	$(MAKE) -C gdbint info
+gdbint_makefiles:
+	$(MAKE) -C gdbint makefiles
+gdbint:
+	$(MAKE) -C gdbint all
+.PHONY: gdbint_all gdbint_debug gdbint_smart gdbint_release gdbint_units gdbint_examples gdbint_shared gdbint_install gdbint_sourceinstall gdbint_exampleinstall gdbint_distinstall gdbint_zipinstall gdbint_zipsourceinstall gdbint_zipexampleinstall gdbint_zipdistinstall gdbint_clean gdbint_distclean gdbint_cleanall gdbint_info gdbint_makefiles gdbint
+endif
 ifdef TARGET_DIRS_LIBC
 libc_all:
 	$(MAKE) -C libc all

+ 16 - 8
packages/Makefile.fpc

@@ -5,14 +5,22 @@
 [target]
 dirs=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 dirs_linux_i386=libc  
-dirs_freebsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
-dirs_darwin=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
-dirs_solaris=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
-dirs_netbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick
-dirs_openbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite pthreads imagemagick
-dirs_linux=fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick
-dirs_win32=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick
-dirs_win64=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick 
+dirs_freebsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+               gdbint
+dirs_darwin=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+               gdbint
+dirs_solaris=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+               gdbint
+dirs_netbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
+               gdbint
+dirs_openbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite pthreads imagemagick \
+               gdbint
+dirs_linux=fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite pthreads imagemagick \
+               gdbint
+dirs_win32=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick \
+               gdbint
+dirs_win64=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite imagemagick \
+               gdbint 
 dirs_wince=fcl-web ibase mysql
 dirs_os2=zlib
 dirs_emx=zlib

+ 17 - 91
packages/base/Makefile

@@ -241,76 +241,70 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=gdbint          httpd
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_DIRS+=gdbint
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=gdbint       httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=gdbint         httpd
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_DIRS+=gdbint
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_DIRS+=gdbint       httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_DIRS+=gdbint       httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=gdbint          httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=gdbint         httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_DIRS+=gdbint       httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_DIRS+=gdbint       httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=gdbint          httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_DIRS+=gdbint       httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=gdbint          httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_DIRS+=gdbint       httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=gdbint          httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=gdbint         httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=gdbint          httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=gdbint          httpd
+override TARGET_DIRS+=httpd
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 override TARGET_DIRS+=httpd
@@ -1395,142 +1389,74 @@ fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIR
 fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
 fpc_makefiles: fpc_makefile fpc_makefile_dirs
 ifeq ($(FULL_TARGET),i386-linux)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-TARGET_DIRS_GDBINT=1
-endif
 ifeq ($(FULL_TARGET),i386-win32)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),i386-beos)
-TARGET_DIRS_GDBINT=1
-endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-TARGET_DIRS_GDBINT=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 TARGET_DIRS_HTTPD=1
 endif
-ifdef TARGET_DIRS_GDBINT
-gdbint_all:
-	$(MAKE) -C gdbint all
-gdbint_debug:
-	$(MAKE) -C gdbint debug
-gdbint_smart:
-	$(MAKE) -C gdbint smart
-gdbint_release:
-	$(MAKE) -C gdbint release
-gdbint_units:
-	$(MAKE) -C gdbint units
-gdbint_examples:
-	$(MAKE) -C gdbint examples
-gdbint_shared:
-	$(MAKE) -C gdbint shared
-gdbint_install:
-	$(MAKE) -C gdbint install
-gdbint_sourceinstall:
-	$(MAKE) -C gdbint sourceinstall
-gdbint_exampleinstall:
-	$(MAKE) -C gdbint exampleinstall
-gdbint_distinstall:
-	$(MAKE) -C gdbint distinstall
-gdbint_zipinstall:
-	$(MAKE) -C gdbint zipinstall
-gdbint_zipsourceinstall:
-	$(MAKE) -C gdbint zipsourceinstall
-gdbint_zipexampleinstall:
-	$(MAKE) -C gdbint zipexampleinstall
-gdbint_zipdistinstall:
-	$(MAKE) -C gdbint zipdistinstall
-gdbint_clean:
-	$(MAKE) -C gdbint clean
-gdbint_distclean:
-	$(MAKE) -C gdbint distclean
-gdbint_cleanall:
-	$(MAKE) -C gdbint cleanall
-gdbint_info:
-	$(MAKE) -C gdbint info
-gdbint_makefiles:
-	$(MAKE) -C gdbint makefiles
-gdbint:
-	$(MAKE) -C gdbint all
-.PHONY: gdbint_all gdbint_debug gdbint_smart gdbint_release gdbint_units gdbint_examples gdbint_shared gdbint_install gdbint_sourceinstall gdbint_exampleinstall gdbint_distinstall gdbint_zipinstall gdbint_zipsourceinstall gdbint_zipexampleinstall gdbint_zipdistinstall gdbint_clean gdbint_distclean gdbint_cleanall gdbint_info gdbint_makefiles gdbint
-endif
 ifdef TARGET_DIRS_HTTPD
 httpd_all:
 	$(MAKE) -C httpd all

+ 5 - 7
packages/base/Makefile.fpc

@@ -3,13 +3,11 @@
 #
 
 [target]
-dirs_linux=gdbint          httpd
-dirs_win32=gdbint       httpd 
-dirs_go32v2=gdbint
-dirs_netbsd=gdbint       httpd
-dirs_openbsd=gdbint       httpd
-dirs_beos=gdbint       
-dirs_freebsd=gdbint         httpd
+dirs_linux=          httpd
+dirs_win32=       httpd 
+dirs_netbsd=       httpd
+dirs_openbsd=       httpd
+dirs_freebsd=         httpd
 dirs_darwin=        httpd
 dirs_solaris=        httpd
 

+ 2862 - 0
packages/gdbint/Makefile

@@ -0,0 +1,2862 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/01/26]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override PACKAGE_NAME=gdbint
+override PACKAGE_VERSION=2.0.0
+ifdef inUnix
+CURRDIR=./
+else
+CURRDIR=
+endif
+ifdef GDBLIBDIR
+override LIBGDBFILE:=$(firstword $(wildcard $(addsuffix /libgdb.a,$(GDBLIBDIR))))
+endif
+ifeq ($(LIBGDBFILE),)
+override GDBLIBDIR=$(wildcard $(FPCDIR)/libgdb/$(OS_TARGET)/$(CPU_TARGET))
+ifeq ($(GDBLIBDIR),)
+override GDBLIBDIR=$(FPCDIR)/libgdb/$(OS_TARGET)
+endif
+override LIBGDBFILE:=$(firstword $(wildcard $(addsuffix /libgdb.a,$(GDBLIBDIR))))
+endif
+ifeq ($(LIBGDBFILE),)
+GDBFOUND=0
+else
+GDBFOUND=1
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_UNITS+=gdbint gdbcon
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_EXAMPLES+=testgdb symify
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_SOURCEDIR+=src tests
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_OBJECTDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_LIBRARYDIR+=$(GDBLIBDIR)
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+ifeq ($(OS_SOURCE),linux)
+ifndef GCCLIBDIR
+ifeq ($(CPU_TARGET),i386)
+ifneq ($(findstring x86_64,$(shell uname -a)),)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifeq ($(CPU_TARGET),powerpc64)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m64 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifndef GCCLIBDIR
+CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(CROSSGCC),)
+GCCLIBDIR:=$(shell dirname `$(CROSSGCC) -print-libgcc-file-name`)
+endif
+endif
+ifndef OTHERLIBDIR
+OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
+endif
+endif
+ifdef inUnix
+ifeq ($(OS_SOURCE),netbsd)
+OTHERLIBDIR+=/usr/pkg/lib
+endif
+export GCCLIBDIR OTHERLIB
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl 
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(CPU_TARGET)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(CPU_TARGET)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef GCCLIBDIR
+override FPCOPT+=-Fl$(GCCLIBDIR)
+endif
+ifdef OTHERLIBDIR
+override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_units
+ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)
+override ALLTARGET+=fpc_units
+override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
+override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
+override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+endif
+fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_examples
+ifneq ($(TARGET_EXAMPLES),)
+HASEXAMPLES=1
+override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .lpr,$(TARGET_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES)))
+override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES))
+override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES)))
+override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+endif
+ifneq ($(TARGET_EXAMPLEDIRS),)
+HASEXAMPLES=1
+endif
+fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMPLEDIRS))
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+	$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+	$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+	@$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+	$(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(PACKAGE_NAME)
+endif
+endif
+ifndef FULLZIPNAME
+FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+	$(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+	$(MKDIR) $(DIST_DESTDIR)
+	$(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+	echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+	echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+	echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+	/bin/sh $(ZIPWRAPPER)
+else
+ifdef RUNBATCH
+	$(RUNBATCH) (ZIPWRAPPER)
+else
+	$(ZIPWRAPPER)
+endif
+endif
+	$(DEL) $(ZIPWRAPPER)
+else
+	$(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+	$(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples: fpc_examples
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall: fpc_distinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_zipdistinstall
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+CAN_RUN_GDBVER=1
+endif
+ifeq ($(FULL_SOURCE),i386-win32)
+ifeq ($(FULL_TARGET),i386-go32v2)
+CAN_RUN_GDBVER=1
+endif
+endif
+ifdef CAN_RUN_GDBVER
+ifeq ($(GDBFOUND),1)
+$(CURRDIR)getver$(EXEEXT) : gdbver.pp
+	$(COMPILER) -o$(CURRDIR)getver$(EXEEXT) gdbver.pp
+ifndef GOTGDBVER
+gdbint$(PPUEXT): $(CURRDIR)gdbver$(EXEEXT) gdbint.pp
+	$(MAKE) gdbint$(PPUEXT) GOTGDBVER=1
+else
+GDBVER:=GDB_V$(strip $(shell $(CURRDIR)gdbver$(EXEEXT) -n))
+gdbver.inc: gdbver$(EXEEXT)
+	./gdbver$(EXEEXT) -o gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+	@$(ECHO) Using GDB $(GDBVER)
+	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc gdbint.pp
+	$(DEL) gdbver$(EXEEXT) gdbver$(OEXT)
+endif
+else
+GDBVER=GDB_V606
+gdbver.inc:
+	$(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+	@$(ECHO) libgdb.a not found, using default GDB $(GDBVER)
+	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+endif
+else
+GDBVER=GDB_V606
+gdbver.inc:
+	$(CPPROG) gdbver_nogdb.inc gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+	@$(ECHO) Different target os or cpu, using default GDB $(GDBVER)
+	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc gdbint.pp
+endif
+gdbcon$(PPUEXT): gdbcon.pp gdbint$(PPUEXT)
+ifeq ($(OS_TARGET),go32v2)
+DBGCOM=dbgcom$(OEXT)
+else
+DBGCOM=
+endif
+ifdef $(COMPILEDBGCOM)
+$(DBGCOM): ../v4.16/dbgcom.c
+	gcc -c -DFPC -Dother_sel -gstabs -o dbgcom.o -I../v4.16 ../v4.16/dbgcom.c
+else
+$(DBGCOM):
+endif
+simple: $(DBGCOM)
+	-rm gdbint.ppu
+	ppc386 -dUSE_LIBGDB -fisrc -fusrc gdbint
+	ppc386 testgdb
+testgdb$(EXEEXT): testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+.PHONY: test
+test: examples
+clean: fpc_clean
+	$(DEL) src/gdbver$(EXEEXT) src/gdbver$(OEXT)
+distclean: fpc_distclean
+	$(DEL) src/gdbver.inc
+.NOTPARALLEL:

+ 153 - 0
packages/gdbint/Makefile.fpc

@@ -0,0 +1,153 @@
+#
+#   Makefile.fpc for Free Pascal GDB Interface
+#
+
+
+[package]
+name=gdbint
+version=2.0.0
+
+[target]
+units=gdbint gdbcon
+examples=testgdb symify
+
+[compiler]
+objectdir=$(GDBLIBDIR)
+librarydir=$(GDBLIBDIR)
+includedir=src
+sourcedir=src tests
+
+[require]
+libc=y
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+
+[prerules]
+# For unix be sure to use the locally created gdbver
+ifdef inUnix
+CURRDIR=./
+else
+CURRDIR=
+endif
+
+# Look for a valid GDBLIBDIR environment variable
+ifdef GDBLIBDIR
+override LIBGDBFILE:=$(firstword $(wildcard $(addsuffix /libgdb.a,$(GDBLIBDIR))))
+endif
+
+# Use default dirs if not available
+ifeq ($(LIBGDBFILE),)
+# Default locations <target>/<cpu> (linux) or <target> (win32,go32v2) only
+override GDBLIBDIR=$(wildcard $(FPCDIR)/libgdb/$(OS_TARGET)/$(CPU_TARGET))
+ifeq ($(GDBLIBDIR),)
+override GDBLIBDIR=$(FPCDIR)/libgdb/$(OS_TARGET)
+endif
+# Detect if libgdb.a is available
+override LIBGDBFILE:=$(firstword $(wildcard $(addsuffix /libgdb.a,$(GDBLIBDIR))))
+endif
+
+# Set GDBFOUND variable
+ifeq ($(LIBGDBFILE),)
+GDBFOUND=0
+else
+GDBFOUND=1
+endif
+
+
+[rules]
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+CAN_RUN_GDBVER=1
+endif
+
+ifeq ($(FULL_SOURCE),i386-win32)
+ifeq ($(FULL_TARGET),i386-go32v2)
+CAN_RUN_GDBVER=1
+endif
+endif
+
+
+ifdef CAN_RUN_GDBVER
+ifeq ($(GDBFOUND),1)
+# libgdb.a found
+
+$(CURRDIR)getver$(EXEEXT) : gdbver.pp
+	$(COMPILER) -o$(CURRDIR)getver$(EXEEXT) gdbver.pp
+
+ifndef GOTGDBVER
+# gdbver doesn't exists, build it first
+gdbint$(PPUEXT): $(CURRDIR)gdbver$(EXEEXT) gdbint.pp
+	$(MAKE) gdbint$(PPUEXT) GOTGDBVER=1
+else
+# gdbver exists
+GDBVER:=GDB_V$(strip $(shell $(CURRDIR)gdbver$(EXEEXT) -n))
+gdbver.inc: gdbver$(EXEEXT)
+        ./gdbver$(EXEEXT) -o gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+	@$(ECHO) Using GDB $(GDBVER)
+	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc gdbint.pp
+	$(DEL) gdbver$(EXEEXT) gdbver$(OEXT)
+endif
+
+else
+# libgdb.a not found, default to libgdb v6
+GDBVER=GDB_V606
+gdbver.inc:
+        $(CPPROG) src/gdbver_nogdb.inc src/gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+	@$(ECHO) libgdb.a not found, using default GDB $(GDBVER)
+	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc src/gdbint.pp
+endif
+
+else
+# Different OS_TARGET, default to libgdb v6
+GDBVER=GDB_V606
+gdbver.inc:
+        $(CPPROG) gdbver_nogdb.inc gdbver.inc
+gdbint$(PPUEXT): gdbint.pp gdbver.inc
+	@$(ECHO) Different target os or cpu, using default GDB $(GDBVER)
+	$(COMPILER) -d$(GDBVER) -Fisrc -Fusrc gdbint.pp
+endif
+
+gdbcon$(PPUEXT): gdbcon.pp gdbint$(PPUEXT)
+
+ifeq ($(OS_TARGET),go32v2)
+DBGCOM=dbgcom$(OEXT)
+else
+DBGCOM=
+endif
+
+ifdef $(COMPILEDBGCOM)
+# FPC conditionnal remove the file watching mecanism introduced
+# in v2.02 of dbgcom.c because it relies
+# on the fact that all files are opened via C lib calls
+# which is wrong for FPC !!
+$(DBGCOM): ../v4.16/dbgcom.c
+	gcc -c -DFPC -Dother_sel -gstabs -o dbgcom.o -I../v4.16 ../v4.16/dbgcom.c
+else
+$(DBGCOM):
+endif
+
+simple: $(DBGCOM)
+	-rm gdbint.ppu
+	ppc386 -dUSE_LIBGDB -fisrc -fusrc gdbint
+	ppc386 testgdb
+
+testgdb$(EXEEXT): testgdb.pp gdbint$(PPUEXT) gdbcon$(PPUEXT) $(DBGCOM)
+
+# Allow test for example
+.PHONY: test
+
+test: examples
+
+clean: fpc_clean
+	$(DEL) src/gdbver$(EXEEXT) src/gdbver$(OEXT)
+
+distclean: fpc_distclean
+	$(DEL) src/gdbver.inc
+
+.NOTPARALLEL:

+ 37 - 0
packages/gdbint/fpmake.pp

@@ -0,0 +1,37 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+  P : TPackage;
+  T : TTarget;
+begin
+  With Installer do
+    begin
+{$endif ALLPACKAGES}
+
+    P:=AddPackage('gdbint');
+{$ifdef ALLPACKAGES}
+    P.Directory:='gdbint';
+{$endif ALLPACKAGES}
+    P.Version:='2.0.0';
+    P.SourcePath.Add('src');
+
+    T:=P.Targets.AddUnit('gdbcon.pp');
+      with T.Dependencies do
+        begin
+          AddUnit('gdbint');
+        end;
+    T:=P.Targets.AddUnit('gdbint.pp');
+      with T.Dependencies do
+        begin
+          AddInclude('gdbver.inc');
+        end;
+
+{$ifndef ALLPACKAGES}
+    Run;
+    end;
+end.
+{$endif ALLPACKAGES}

+ 239 - 0
packages/gdbint/src/freadlin.pp

@@ -0,0 +1,239 @@
+unit freadlin;
+{**********************************************************************
+    Copyright (c) 2007 by Daniel Mantione
+
+    A fake read line library which allows us to use libgdb in the IDE
+    without linking the bloated and unused GNU readline library.
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{$calling cdecl}
+
+interface
+
+implementation
+
+uses ctypes;
+
+var rl_end:cint;public name 'rl_end';               {The number of characters in the readline buffer.}
+    rl_point:cint;public name 'rl_point';           {The cursor position in the readline buffer.}
+    rl_prompt:Pchar;public name 'rl_prompt';        {The prompt readline should use.}
+    rl_instream:pointer;public name 'rl_instream';  {The FILE* for input.}
+    rl_outstream:pointer;public name 'rl_outstream';{The FILE* for output.}
+    rl_terminal_name:pointer;public name 'rl_terminal_name'; {The terminal (set by TERM) readline thinks it is using.}
+    rl_prep_term_function:pointer;public name 'rl_prep_term_function'; {Procedure to initialize terminal.}
+    rl_getc_function:pointer;public name 'rl_getc_function'; {The function to get a char from input.}
+    rl_line_buffer:Pchar;public name 'rl_line_buffer'; {The buffer readline is currently reading into.}
+    rl_completer_word_break_characters:Pchar;public name 'rl_completer_word_break_characters';
+    rl_completer_quote_characters:Pchar;public name 'rl_completer_quote_characters';
+    rl_already_prompted:cint;public name 'rl_already_prompted';
+    readline_echoing_p:cint;public name 'readline_echoing_p';
+    rl_startup_hook:pointer;public name 'rl_startup_hook';
+    emacs_ctlx_keymap:pointer;public name 'emacs_ctlx_keymap';
+    rl_readline_name:Pchar;public name 'rl_readline_name';
+    rl_deprep_term_function:pointer;public name 'rl_deprep_term_function';
+    rl_redisplay_function:pointer;public name 'rl_redisplay_function';
+    rl_pre_input_hook:pointer;public name 'rl_pre_input_hook';
+    rl_completion_entry_function:pointer;public name 'rl_completion_entry_function';
+    rl_filename_completion_desired:cint;public name 'rl_filename_completion_desired';
+    rl_completion_display_matches_hook:pointer;public name 'rl_completion_display_matches_hook';
+    rl_completion_query_items:cint;public name 'rl_completion_query_items';
+    rl_ignore_completion_duplicates:cint;public name 'rl_ignore_completion_duplicates';
+    rl_print_completions_horizontally:cint;public name '_rl_print_completions_horizontally';
+
+function rl_initialize:cint;public;alias:'rl_initialize';
+
+{Should initialize readline and return 0 if successfull.}
+
+begin
+  runerror(254);
+end;
+
+function rl_reset_terminal(terminal:Pchar):cint;public;alias:'rl_reset_terminal';
+
+begin
+  {Called by gdb, do nothing.}
+end;
+
+function rl_tilde_expand(s:Pchar):Pchar;public;alias:'tilde_expand';
+
+begin
+  {Called by gdb, don't expand, return original string.}
+  rl_tilde_expand:=s;
+end;
+
+function rl_newline(count,key:cint):cint;public;alias:'rl_newline';
+
+begin
+  runerror(254);
+end;
+
+procedure rl_get_screen_size(var rows,cols:cint);public;alias:'rl_get_screen_size';
+
+begin
+  {Called by gdb. Fake a 80x25 screen.}
+  {Gdb can call using nil pointers.}
+  if @rows<>nil then
+    rows:=25;
+  if @cols<>nil then
+    cols:=80;
+end;
+
+procedure rl_set_screen_size(rows,cols:cint);public;alias:'rl_set_screen_size';
+
+begin
+  {Called by gdb, do nothing.}
+end;
+
+function rl_bind_key_in_map(key:cint;rl_command_func_t:pointer;map:pointer):cint;public;alias:'rl_bind_key_in_map';
+
+begin
+  runerror(254);
+end;
+
+procedure rl_set_keymap(keymap:pointer);public;alias:'rl_set_keymap';
+
+begin
+  runerror(254);
+end;
+
+function rl_get_keymap:pointer;public;alias:'rl_get_keymap';
+
+begin
+  runerror(254);
+end;
+
+function rl_make_bare_keymap:pointer;public;alias:'rl_make_bare_keymap';
+
+begin
+  runerror(254);
+end;
+
+function rl_add_defun(name:Pchar;rl_command_func_t:pointer;key:cint):cint;public;alias:'rl_add_defun';
+
+begin
+  {Called by gdb, do nothing.}
+end;
+
+function rl_insert(count,c:cint):cint;public;alias:'rl_insert';
+
+begin
+  runerror(254);
+end;
+
+function rl_kill_text(start,stop:cint):cint;public;alias:'rl_kill_text';
+
+begin
+  runerror(254);
+end;
+
+procedure rl_prep_terminal(meta_flag:cint);public;alias:'rl_prep_terminal';
+
+begin
+  runerror(254);
+end;
+
+procedure rl_deprep_terminal;public;alias:'rl_deprep_terminal';
+
+begin
+  runerror(254);
+end;
+
+procedure rl_callback_handler_install(prompt:Pchar;lhandler:pointer);public;alias:'rl_callback_handler_install';
+
+begin
+  runerror(254);
+end;
+
+procedure rl_callback_handler_remove;public;alias:'rl_callback_handler_remove';
+
+begin
+  runerror(254);
+end;
+
+function rl_filename_completion_function(text:Pchar;state:cint):Pchar;public;alias:'rl_filename_completion_function';
+
+begin
+  runerror(254);
+end;
+
+procedure rl_callback_read_char;public;alias:'rl_callback_read_char';
+
+begin
+  runerror(254);
+end;
+
+procedure rl_redisplay;public;alias:'rl_redisplay';
+
+begin
+  runerror(254);
+end;
+
+function rl_generic_bind(_type:cint;keyseq,data:Pchar;map:pointer):cint;public;alias:'rl_generic_bind';
+
+begin
+  runerror(254);
+end;
+
+function rl_get_previous_history(count,key:cint):cint;public;alias:'rl_get_previous_history';
+
+begin
+  runerror(254);
+end;
+
+function rl_read_key:cint;public;alias:'rl_read_key';
+
+begin
+  runerror(254);
+end;
+
+function rl_abort_internal:cint;public;alias:'_rl_abort_internal';
+
+begin
+  runerror(254);
+end;
+
+function readline(prompt:Pchar):Pchar;public;alias:'readline';
+
+begin
+  runerror(254);
+end;
+
+function rl_qsort_string_compare(s1,s2:Pchar):cint;public;alias:'_rl_qsort_string_compare';
+
+begin
+  runerror(254);
+end;
+
+begin
+  rl_end:=0;
+  rl_point:=0;
+  rl_prompt:=nil;
+  rl_instream:=nil;
+  rl_outstream:=nil;
+  rl_terminal_name:=nil;
+  rl_already_prompted:=0;
+  rl_completer_word_break_characters:=nil;
+  rl_completer_quote_characters:=nil;
+  rl_line_buffer:=nil;
+  rl_getc_function:=nil;
+  rl_prep_term_function:=nil;
+  rl_startup_hook:=nil;
+  readline_echoing_p:=0;
+  emacs_ctlx_keymap:=nil;
+  rl_readline_name:=nil;
+  rl_deprep_term_function:=nil;
+  rl_redisplay_function:=nil;
+  rl_completion_entry_function:=nil;
+  rl_filename_completion_desired:=0;
+  rl_completion_display_matches_hook:=nil;
+  rl_ignore_completion_duplicates:=0;
+  rl_print_completions_horizontally:=0;
+end.

+ 346 - 0
packages/gdbint/src/gdbcon.pp

@@ -0,0 +1,346 @@
+{
+    Copyright (c) 1998 by Peter Vreman
+
+    Lowlevel GDB interface which communicates directly with libgdb
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+unit GDBCon;
+interface
+
+uses
+  GDBInt;
+
+type
+  PGDBController=^TGDBController;
+  TGDBController=object(TGDBInterface)
+    progname,
+    progdir,
+    progargs   : pchar;
+    in_command,
+    init_count : longint;
+    constructor Init;
+    destructor  Done;
+    procedure CommandBegin(const s:string);virtual;
+    procedure Command(const s:string);
+    procedure CommandEnd(const s:string);virtual;
+    procedure Reset;virtual;
+    { tracing }
+    procedure StartTrace;
+    procedure Run;virtual;
+    procedure TraceStep;virtual;
+    procedure TraceNext;virtual;
+    procedure TraceStepI;virtual;
+    procedure TraceNextI;virtual;
+    procedure Continue;virtual;
+    { needed for dos because newlines are only #10 (PM) }
+    procedure WriteErrorBuf;
+    procedure WriteOutputBuf;
+    function  GetOutput : Pchar;
+    function  GetError : Pchar;
+    function  LoadFile(var fn:string):boolean;
+    procedure SetDir(const s : string);
+    procedure SetArgs(const s : string);
+    procedure ClearSymbols;
+  end;
+
+procedure UnixDir(var s : string);
+
+implementation
+
+uses
+{$ifdef win32}
+  windows,
+{$endif win32}
+  strings;
+
+{$ifdef win32}
+const
+  CygDrivePrefixKey1 = 'Software';
+  CygDrivePrefixKey2 = 'Cygnus Solutions';
+  CygDrivePrefixKey3 = 'Cygwin';
+  CygDrivePrefixKey4 = 'mounts v2';
+  CygDrivePrefixKey = 'cygdrive prefix';
+
+function CygDrivePrefix : string;
+var
+  i : longint;
+  length : dword;
+  Value : pchar;
+  _type : dword;
+  Key,NKey : HKey;
+begin
+  Length:=0;
+  Key:=HKEY_CURRENT_USER;
+  i := RegOpenKeyEx(Key, CygDrivePrefixKey1, 0, KEY_ENUMERATE_SUB_KEYS, @NKey);
+  if i=ERROR_SUCCESS then
+    begin
+      Key:=NKey;
+      i := RegOpenKeyEx(Key, CygDrivePrefixKey2, 0, KEY_ENUMERATE_SUB_KEYS, @NKey);
+    end;
+  if i=ERROR_SUCCESS then
+    begin
+      RegCloseKey(Key);
+      Key:=NKey;
+      i := RegOpenKeyEx(Key, CygDrivePrefixKey3, 0, KEY_ENUMERATE_SUB_KEYS, @NKey);
+    end;
+  if i=ERROR_SUCCESS then
+    begin
+      RegCloseKey(Key);
+      Key:=NKey;
+      i := RegOpenKeyEx(Key, CygDrivePrefixKey4, 0, KEY_ENUMERATE_SUB_KEYS, @NKey);
+    end;
+  if i=ERROR_SUCCESS then
+    begin
+      RegCloseKey(Key);
+      Key:=NKey;
+      i := RegQueryValueEx( Key, CygDrivePrefixKey, nil, @_type, nil, @length);
+    end;
+  if i<>ERROR_SUCCESS then
+    CygDrivePrefix:='/cygdrive'
+  else
+    Begin
+      GetMem(Value,Length);
+      i := RegQueryValueEx( Key, CygDrivePrefixKey, nil, @_type, LPByte(Value), @length);
+      if i<>ERROR_SUCCESS then
+        CygDrivePrefix:='/cygdrive'
+      else
+        CygDrivePrefix:=StrPas(Value);
+      FreeMem(Value,Length);
+    End;
+  if Key<>HKEY_CURRENT_USER then
+    RegCloseKey(Key);
+end;
+{$endif win32}
+
+procedure UnixDir(var s : string);
+var i : longint;
+begin
+  for i:=1 to length(s) do
+    if s[i]='\' then
+{$ifdef win32}
+  { Don't touch at '\ ' used to escapes spaces in windows file names PM }
+     if (i=length(s)) or (s[i+1]<>' ') then
+{$endif win32}
+      s[i]:='/';
+{$ifdef win32}
+{ for win32 we should convert e:\ into //e/ PM }
+  if (length(s)>2) and (s[2]=':') and (s[3]='/') then
+    s:=CygDrivePrefix+'/'+s[1]+copy(s,3,length(s));
+{$endif win32}
+end;
+
+constructor TGDBController.Init;
+begin
+  inherited init;
+end;
+
+
+destructor TGDBController.Done;
+begin
+  if assigned(progname) then
+    strdispose(progname);
+  if assigned(progdir) then
+    strdispose(progdir);
+  if assigned(progargs) then
+    strdispose(progargs);
+  inherited done;
+end;
+
+
+procedure TGDBController.Command(const s:string);
+begin
+  inc(in_command);
+  CommandBegin(s);
+  gdboutputbuf.reset;
+  gdberrorbuf.reset;
+  gdb_command(s);
+  {
+    What is that for ?? PM
+    I had to comment it because
+    it resets the debuggere after each command !!
+    Maybe it can happen on errors ??
+  if in_command<0 then
+   begin
+     in_command:=0;
+     inc(in_command);
+     Reset;
+     dec(in_command);
+   end; }
+  CommandEnd(s);
+  dec(in_command);
+end;
+
+procedure TGDBController.CommandBegin(const s:string);
+begin
+end;
+
+procedure TGDBController.CommandEnd(const s:string);
+begin
+end;
+
+function TGDBController.LoadFile(var fn:string):boolean;
+var
+  cmd : string;
+begin
+  getdir(0,cmd);
+  UnixDir(cmd);
+  cmd:='cd '+cmd;
+  Command(cmd);
+  GDB__Init;
+  UnixDir(fn);
+  if assigned(progname) then
+    strdispose(progname);
+  getmem(progname,length(fn)+1);
+  strpcopy(progname,fn);
+  if fn<>'' then
+    Command('file '+fn);
+  LoadFile:=true;
+end;
+
+procedure TGDBController.SetDir(const s : string);
+var
+  hs : string;
+begin
+  hs:=s;
+  UnixDir(hs);
+  if assigned(progdir) then
+    strdispose(progdir);
+  getmem(progdir,length(hs)+1);
+  strpcopy(progdir,hs);
+  command('cd '+hs);
+end;
+
+procedure TGDBController.SetArgs(const s : string);
+begin
+  if assigned(progargs) then
+    strdispose(progargs);
+  getmem(progargs,length(s)+1);
+  strpcopy(progargs,s);
+  command('set args '+s);
+end;
+
+procedure TGDBController.Reset;
+begin
+  call_reset:=false;
+{ DeleteBreakPoints(); }
+  if debuggee_started then
+   begin
+     reset_command:=true;
+     BreakSession;
+     Command('kill');
+     reset_command:=false;
+     debuggee_started:=false;
+   end;
+end;
+
+procedure TGDBController.StartTrace;
+begin
+  Command('tbreak PASCALMAIN');
+  Run;
+end;
+
+procedure TGDBController.Run;
+begin
+  Command('run');
+  inc(init_count);
+end;
+
+
+procedure TGDBController.TraceStep;
+begin
+  Command('step');
+end;
+
+
+procedure TGDBController.TraceNext;
+begin
+  Command('next');
+end;
+
+
+procedure TGDBController.TraceStepI;
+begin
+  Command('stepi');
+end;
+
+
+procedure TGDBController.TraceNextI;
+begin
+  Command('nexti');
+end;
+
+
+procedure TGDBController.Continue;
+begin
+  Command('continue');
+end;
+
+
+procedure TGDBController.ClearSymbols;
+begin
+  if debuggee_started then
+   Reset;
+  if init_count>0 then
+   Command('file');
+end;
+
+
+procedure BufWrite(Buf : pchar);
+  var p,pe : pchar;
+begin
+  p:=buf;
+  While assigned(p) do
+    begin
+       pe:=strscan(p,#10);
+       if pe<>nil then
+         pe^:=#0;
+       Writeln(p);
+       { restore for dispose }
+       if pe<>nil then
+         pe^:=#10;
+       if pe=nil then
+         p:=nil
+       else
+         begin
+           p:=pe;
+           inc(p);
+         end;
+    end;
+end;
+
+
+function  TGDBController.GetOutput : Pchar;
+begin
+  GetOutput:=gdboutputbuf.buf;
+end;
+
+function  TGDBController.GetError : Pchar;
+var p : pchar;
+begin
+  p:=gdberrorbuf.buf;
+  if (p^=#0) and got_error then
+    GetError:=pchar(longint(gdboutputbuf.buf)+gdboutputbuf.idx)
+  else
+    GetError:=p;
+end;
+
+procedure TGDBController.WriteErrorBuf;
+begin
+   BufWrite(gdberrorbuf.buf);
+end;
+
+
+procedure TGDBController.WriteOutputBuf;
+begin
+   BufWrite(gdboutputbuf.buf);
+end;
+
+
+end.

+ 2621 - 0
packages/gdbint/src/gdbint.pp

@@ -0,0 +1,2621 @@
+{
+    Copyright (c) 1998 by Peter Vreman
+
+    Lowlevel GDB interface which communicates directly with libgdb
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+unit GdbInt;
+
+{$i gdbver.inc}
+
+interface
+
+{$smartlink off}
+
+{.$define Verbose}
+{.$define DebugCommand}
+{$define NotImplemented}
+
+{ Is create_breakpoint_hook deprecated? }
+{ Seem not so for 6.1 }
+{$define GDB_HAS_DEPRECATED_CBPH}
+
+{ 6.1.x }
+{$ifdef GDB_V601}
+  {$info using gdb 6.1.x}
+  {$define GDB_V6}
+  {$define GDB_HAS_DB_COMMANDS}
+  {$undef GDB_HAS_DEPRECATED_CBPH}
+{$endif def GDB_V601}
+
+{ 6.2.x }
+{$ifdef GDB_V602}
+  {$info using gdb 6.2.x}
+  {$define GDB_V6}
+  {$define GDB_HAS_DB_COMMANDS}
+{$endif def GDB_V602}
+
+{ 6.3.x }
+{$ifdef GDB_V603}
+  {$info using gdb 6.3.x}
+  {$define GDB_V6}
+  {$define GDB_HAS_DB_COMMANDS}
+{$endif def GDB_V603}
+
+{ 6.4.x }
+{$ifdef GDB_V604}
+  {$info using gdb 6.4.x}
+  {$define GDB_V6}
+  {$define GDB_NEEDS_NO_ERROR_INIT}
+  {$define GDB_HAS_DB_COMMANDS}
+{$endif def GDB_V604}
+
+{ 6.5.x }
+{$ifdef GDB_V605}
+  {$info using gdb 6.5.x}
+  {$define GDB_V6}
+  {$define GDB_NEEDS_NO_ERROR_INIT}
+{$endif def GDB_V605}
+
+{ 6.6.x }
+{$ifdef GDB_V606}
+  {$info using gdb 6.6.x}
+  {$define GDB_V6}
+  {$define GDB_HAS_DB_COMMANDS}
+  {$define GDB_NEEDS_NO_ERROR_INIT}
+  {$define GDB_USES_EXPAT_LIB}
+  {$define GDB_HAS_DEBUG_FILE_DIRECTORY}
+{$endif def GDB_V605}
+
+{ 6.7.x }
+{$ifdef GDB_V607}
+  {$info using gdb 6.7.x}
+  {$define GDB_V6}
+  {$define GDB_HAS_DB_COMMANDS}
+  {$define GDB_NEEDS_NO_ERROR_INIT}
+  {$define GDB_USES_EXPAT_LIB}
+  {$define GDB_HAS_DEBUG_FILE_DIRECTORY}
+{$endif def GDB_V605}
+
+{$ifdef GDB_V6}
+  {$define GDB_HAS_SYSROOT}
+  {$define GDB_HAS_DB_COMMANDS}
+  {$define GDB_SYMTAB_HAS_MACROS}
+  {$define GDB_INIT_HAS_ARGV0}
+{$endif GDB_V6}
+
+{ GDB has a simulator for powerpc CPU
+  it is integrated into GDB by default }
+{$ifdef cpupowerpc}
+  {$define GDB_HAS_SIM}
+{$endif cpupowerpc}
+
+{$ifdef go32v2}
+  {$undef NotImplemented}
+  {$LINKLIB gdb}
+  {$ifdef GDB_HAS_SIM}
+    {$LINKLIB sim}
+  {$endif GDB_HAS_SIM}
+  {$LINKLIB bfd}
+  {$LINKLIB readline}
+  {$LINKLIB opcodes}
+  {$LINKLIB history}
+  {$LINKLIB iberty}
+  {$LINKLIB intl}
+  {$LINKLIB dbg}
+  {$LINKLIB c}
+{$endif go32v2}
+
+{$ifdef linux}
+  {$undef NotImplemented}
+  {$LINKLIB libgdb.a}
+  {$ifdef GDB_HAS_SIM}
+    {$LINKLIB libsim.a}
+  {$endif GDB_HAS_SIM}
+  {$LINKLIB libbfd.a}
+  {$LINKLIB libreadline.a}
+  {$LINKLIB libopcodes.a}
+  {$LINKLIB libhistory.a}
+  {$LINKLIB libiberty.a}
+  {$ifdef GDB_USES_EXPAT_LIB}
+    {$LINKLIB expat}
+  {$endif GDB_USES_EXPAT_LIB}
+  {$LINKLIB ncurses}
+  {$LINKLIB m}
+  {$LINKLIB dl}
+  {$LINKLIB c}
+  {$LINKLIB gcc}
+{$endif linux}
+
+{$ifdef freebsd}
+  {$ifdef FreeBSD5}  //5.4+ ?
+    {$linklib kvm}
+  {$endif}
+  {$undef NotImplemented}
+  {$LINKLIB gdb}
+  {$ifdef GDB_HAS_SIM}
+    {$LINKLIB sim}
+  {$endif GDB_HAS_SIM}
+  {$LINKLIB bfd}
+  {$LINKLIB readline}
+  {$LINKLIB opcodes}
+  {$LINKLIB history}
+  {$LINKLIB iberty}
+  {$LINKLIB ncurses}
+  {$LINKLIB m}
+  {$LINKLIB iberty}
+  {$LINKLIB intl}        { does not seem to exist on netbsd LINKLIB dl,
+                            but I use GDB CVS snapshots for the *BSDs}
+  {$ifdef GDB_USES_EXPAT_LIB}
+    {$LINKLIB expat}
+  {$endif GDB_USES_EXPAT_LIB}
+  {$LINKLIB c}
+  {$LINKLIB gcc}
+{$endif freebsd}
+
+{$ifdef netbsd}
+  {$undef NotImplemented}
+  {$LINKLIB gdb}
+  {$ifdef GDB_HAS_SIM}
+    {$LINKLIB sim}
+  {$endif GDB_HAS_SIM}
+  {$LINKLIB bfd}
+  {$LINKLIB readline}
+  {$LINKLIB opcodes}
+  {$LINKLIB history}
+  {$LINKLIB iberty}
+  {$LINKLIB ncurses}
+  {$LINKLIB m}
+  {$LINKLIB iberty}
+  {$LINKLIB intl}
+  {$ifdef GDB_USES_EXPAT_LIB}
+    {$LINKLIB expat}
+  {$endif GDB_USES_EXPAT_LIB}
+  { does not seem to exist on netbsd LINKLIB dl}
+  {$LINKLIB c}
+  {$LINKLIB gcc}
+{$endif netbsd}
+
+{$ifdef openbsd}
+  {$undef NotImplemented}
+  {$LINKLIB gdb}
+  {$ifdef GDB_HAS_SIM}
+    {$LINKLIB sim}
+  {$endif GDB_HAS_SIM}
+  {$LINKLIB bfd}
+  {$LINKLIB readline}
+  {$LINKLIB opcodes}
+  {$LINKLIB history}
+  {$LINKLIB iberty}
+  {$LINKLIB ncurses}
+  {$LINKLIB m}
+  {$LINKLIB iberty}
+  {$LINKLIB intl}
+  {$ifdef GDB_USES_EXPAT_LIB}
+    {$LINKLIB expat}
+  {$endif GDB_USES_EXPAT_LIB}
+  { does not seem to exist on netbsd LINKLIB dl}
+  {$LINKLIB c}
+  {$LINKLIB gcc}
+{$endif netbsd}
+
+{$ifdef win32}
+  {$undef NotImplemented}
+  {$LINKLIB libgdb.a}
+ {$ifdef GDB_HAS_SIM}
+  {$LINKLIB libsim.a}
+ {$endif GDB_HAS_SIM}
+  {$LINKLIB libbfd.a}
+  {$LINKLIB libreadline.a}
+  {$LINKLIB libopcodes.a}
+  {$LINKLIB libhistory.a}
+  {$LINKLIB libiberty.a}
+  {$LINKLIB libintl.a}
+  {$ifdef USE_MINGW_GDB}
+    {$LINKLIB libm.a}
+    {$LINKLIB libmoldname.a}
+    {$LINKLIB libgcc.a}
+    {$LINKLIB libws2_32.a}
+    {$LINKLIB libmingwex.a}
+    {$LINKLIB libmingw32.a}
+    {$LINKLIB libmsvcrt.a}
+  {$else not USE_MINGW_GDB}
+    {$LINKLIB libiconv.a}
+    {$LINKLIB libncurses.a}
+    {$ifdef GDB_USES_EXPAT_LIB}
+      {$LINKLIB expat}
+    {$endif GDB_USES_EXPAT_LIB}
+    {$LINKLIB gcc}
+    {$LINKLIB cygwin} { alias of libm.a and libc.a }
+  {$LINKLIB imagehlp}
+  {$endif not USE_MINGW_GDB}	
+  {$LINKLIB kernel32}
+  {$LINKLIB user32}
+{$endif win32}
+
+{$ifdef beos}
+  { still need some work... stollen from netbsd}
+  {$undef NotImplemented}
+  {$LINKLIB gdb}
+  {$ifdef GDB_HAS_SIM}
+    {$LINKLIB sim}
+  {$endif GDB_HAS_SIM}
+  {$LINKLIB bfd}
+  {$LINKLIB readline}
+  {$LINKLIB opcodes}
+  { $ LINKLIB history}
+  {$LINKLIB iberty}
+  {$LINKLIB ncurses}
+  { $ LINKLIB m} // include in libroot under BeOS
+  {$LINKLIB intl}
+  {$ifdef GDB_USES_EXPAT_LIB}
+    {$LINKLIB expat}
+  {$endif GDB_USES_EXPAT_LIB}
+  { does not seem to exist on netbsd LINKLIB dl}
+  { $ LINKLIB c} // This is libroot under BeOS, and always linked
+  {$LINKLIB debug}
+  {$LINKLIB gcc}
+{$endif beos}
+
+{$ifdef go32v2}
+  {$define supportexceptions}
+{$endif go32v2}
+{$ifdef unix}
+  {$define supportexceptions}
+{$endif unix}
+
+{$ifdef CROSSGDB}
+  { do we need something special if cross GDB? }
+{$endif CROSSGDB}
+
+{$ifdef NotImplemented}
+  {$fatal This OS is not yet supported !!!}
+{$endif NotImplemented}
+
+{$packrecords C}
+
+type
+  psyminfo=^tsyminfo;
+  tsyminfo=record
+    address  : ptrint;
+    fname    : pchar;
+    line     : longint;
+    funcname : pchar;
+    offset   : ptrint;
+  end;
+
+  tframeentry = object
+    file_name : pchar;
+    function_name : pchar;
+    args : pchar;
+    line_number : longint;
+    address : ptrint;
+    level : longint;
+    constructor init;
+    destructor done;
+    procedure reset;
+    procedure clear;
+  end;
+  pframeentry=^tframeentry;
+  ppframeentry=^pframeentry;
+
+{ needed for handles }
+{not anymore I textrec.inc}
+
+const
+ k=1;
+
+type
+{$if defined(CPUSPARC) and defined(LINUX)}
+  CORE_ADDR = qword;
+{$else}
+  CORE_ADDR = ptrint; { might be target dependent PM }
+{$endif}
+  streamtype = (afile,astring);
+  C_FILE     = ptrint; { at least under DJGPP }
+  P_C_FILE   = ^C_FILE;
+
+type
+
+  pui_file = ^ui_file;
+
+  ui_file_flush_ftype = procedure(stream : pui_file);cdecl;
+  ui_file_write_ftype = procedure(stream : pui_file;buf : pchar;len : longint);cdecl;
+  ui_file_fputs_ftype = procedure(buf : pchar; stream : pui_file);cdecl;
+  ui_file_delete_ftype = procedure(stream : pui_file);cdecl;
+  ui_file_isatty_ftype = function(stream : pui_file) : longbool;cdecl;
+  ui_file_rewind_ftype = procedure(stream : pui_file);cdecl;
+  ui_file_put_method_ftype = procedure(var _object; buffer : pchar;length_buffer : longint);cdecl;
+  ui_file_put_ftype = procedure(stream : pui_file;method : ui_file_put_method_ftype;var context);cdecl;
+  {$ifdef GDB_V6}
+  ui_file_read_ftype = function (stream : pui_file; buffer : pchar; len : longint):longint;cdecl;
+  {$endif}
+
+  ui_file = record
+      magic : plongint;
+      to_flush  : ui_file_flush_ftype;
+      to_write  : ui_file_write_ftype;
+      to_fputs  : ui_file_fputs_ftype;
+      {$ifdef GDB_V6}
+      to_read   : ui_file_read_ftype;
+      {$endif}
+      to_delete : ui_file_delete_ftype;
+      to_isatty : ui_file_isatty_ftype;
+      to_rewind : ui_file_rewind_ftype;
+      to_put    : ui_file_put_ftype;
+      to_data   : pointer;
+    end;
+
+  { used to delete stdio_ui_file  gdb_stdout and gdb_stderr }
+  procedure ui_file_delete(stream : pui_file);cdecl;external;
+
+  { used to recreate gdb_stdout and gdb_stderr as memory streams }
+  function mem_fileopen : pui_file;cdecl;external;
+
+  { used to change the write procvar to ours }
+
+  procedure set_ui_file_write(stream : pui_file;write : ui_file_write_ftype);cdecl;external;
+
+
+  type
+
+  (* struct ptid
+  {
+    /* Process id */
+    int pid;
+
+    /* Lightweight process id */
+    long lwp;
+
+    /* Thread id */
+    long tid;
+  }; *)
+   pinferior_ptid = ^tinferior_ptid;
+   tinferior_ptid = record
+      pid : longint{C int};
+      lwp : ptrint{ C long};
+      tid : ptrint{ C long};
+     end;
+
+{$ifdef win32}
+
+type
+  { from sys/reent.h
+    real structure is bigger but only std.. are wanted here PM }
+  REENT = record
+    err : longint;
+    stdin,stdout,stderr : P_C_FILE;
+  end;
+  PREENT = ^REENT;
+
+var _impure_ptr : PREENT;cvar;external;
+
+{$endif win32}
+
+
+type
+  tgdbbuffer=object
+    buf   : pchar;
+    size,
+    idx   : longint;
+    gdb_file  : pui_file;
+    constructor Init;
+    destructor  Done;
+    procedure Reset;
+    procedure Resize(nsize : longint);
+    procedure Append(p:pchar);
+    procedure lappend(p:pchar;len : longint);
+  end;
+
+  pgdbinterface=^tgdbinterface;
+  tgdbinterface=object
+    gdberrorbuf,
+    gdboutputbuf  : tgdbbuffer;
+    got_error,
+    reset_command,
+    call_reset,
+    signaled,
+    Debuggee_started : boolean;
+    { frames and frame info while recording a frame }
+    frames        : ppframeentry;
+    frame_size,
+    frame_count   : longint;
+    record_frames,
+    frame_begin_seen : boolean;
+    frame_level,
+    command_level,
+    stop_breakpoint_number,
+    current_address,
+    current_line_number,
+    signal_start,
+    signal_end,
+    signal_name_start,
+    signal_name_end,
+    error_start,
+    error_end,
+    function_start,
+    function_end,
+    args_start,
+    args_end,
+    file_start,
+    file_end,
+    line_start,
+    line_end : longint;
+    signal_name,
+    signal_string : pchar;
+    current_pc      : CORE_ADDR;
+    { breakpoint }
+    last_breakpoint_number,
+    last_breakpoint_address,
+    last_breakpoint_line : longint;
+    last_breakpoint_file : pchar;
+    invalid_breakpoint_line : boolean;
+    { init }
+    constructor init;
+    destructor  done;
+    { Lowlevel }
+    function  error:boolean;
+    function  error_num:longint;
+    procedure gdb_command(const s:string);
+    procedure gdb__init;
+    procedure gdb_done;
+    procedure resize_frames;
+    function  add_frameentry:pframeentry;
+    function  get_frameentry(level : longint):pframeentry;
+    function  get_current_frame : ptrint;
+    function  set_current_frame(level : longint) : boolean;
+    procedure clear_frames;
+    { Highlevel }
+    user_screen_shown,
+    switch_to_user     : boolean;
+    procedure GetAddrSyminfo(addr:ptrint;var si:tsyminfo);
+    procedure SelectSourceline(fn:pchar;line:longint);
+    procedure StartSession;
+    procedure BreakSession;
+    procedure EndSession(code:longint);
+    procedure DebuggerScreen;
+    procedure UserScreen;
+    { Hooks }
+    procedure DoSelectSourceline(const fn:string;line:longint);virtual;
+    procedure DoStartSession;virtual;
+    procedure DoBreakSession;virtual;
+    procedure DoEndSession(code:longint);virtual;
+    procedure DoUserSignal;virtual;
+    procedure DoDebuggerScreen;virtual;
+    procedure DoUserScreen;virtual;
+    function  AllowQuit : boolean;virtual;
+  end;
+
+
+const
+  use_gdb_file : boolean = false;
+
+var
+  curr_gdb : pgdbinterface;
+  gdb_file : text;
+  inferior_ptid : tinferior_ptid;cvar;external;
+
+function  GDBVersion : string;
+function  inferior_pid : longint;
+
+{$ifdef GDB_V6}
+type
+  ui_out = pointer;
+var
+  uiout : ui_out;cvar;external;
+function cli_out_new (stream : pui_file):ui_out;cdecl;external;
+{$endif}
+
+{$ifdef go32v2}
+  { needed to be sure %fs contains the DOS memory selector
+    used in Mem[] code PM }
+  procedure reload_fs;
+{$endif go32v2}
+
+
+
+implementation
+
+uses
+{$ifdef win32}
+  {$ifdef USE_MINGW_GDB}
+  {$else not USE_MINGW_GDB}
+    initc,
+  {$endif not USE_MINGW_GDB}
+{$endif win32}
+{$ifdef unix}
+  baseunix,
+{$endif}
+{$ifdef go32v2}
+  go32,
+  dpmiexcp,
+  initc,
+{$endif}
+  strings;
+
+{*****************************************************************************
+                          Types used by libgdb.a
+*****************************************************************************}
+
+{$ifdef go32v2}
+type
+  jmp_buf = dpmi_jmp_buf;
+  pjmp_buf = pdpmi_jmp_buf;
+
+  function setjmp(var rec : jmp_buf) : longint;cdecl;external;
+
+  procedure longjmp(var rec : jmp_buf;return_value : longint);cdecl;external;
+
+  procedure reload_fs;assembler;
+  asm
+     movw  dosmemselector,%ax
+     movw  %ax,%fs
+  end['EAX'];
+
+{$endif}
+{$ifdef win32}
+type
+  jmp_buf = record
+  case byte of
+    0 :
+    { greatest value found in cygwin machine/setjmp.h for i386 }
+    (unknown_field : array [1..13] of longint;);
+    1 :
+    (eax,ebx,ecx,edx : longint;
+    esi,edi,ebp,esp,eip : longint;);
+  end;
+
+  pjmp_buf = ^jmp_buf;
+{$ifdef USE_MINGW_GDB}
+  { for obscure reasons, longjmp and _setjmp are defined in mingw32 libmsvcrt.a }
+  function _setjmp(var rec : jmp_buf) : longint; cdecl; external;
+  procedure longjmp(var rec : jmp_buf;return_value : longint); cdecl; external;
+  function setjmp(var rec : jmp_buf) : longint;
+    begin
+	  setjmp:=_setjmp(rec);
+	end;
+{$else not USE_MINGW_GDB}
+  function setjmp(var rec : jmp_buf) : longint;cdecl;external;
+
+  procedure longjmp(var rec : jmp_buf;return_value : longint);cdecl;external;
+{$endif not USE_MINGW_GDB}
+
+{$ifndef supportexceptions}
+type
+  { I don't think FPC would accept that
+    the funcvar return type is the funcvar type itself ! PM }
+  SignalHandler   = Procedure(Sig : LongInt);cdecl;
+  function signal(sig : longint;new_signal : SignalHandler) : SignalHandler;cdecl;external;
+
+{define supportexceptions not yet working }
+{$endif now exceptions are supported for win32}
+{$endif win32}
+
+  type
+     pCORE_ADDR = ^CORE_ADDR;
+     pblock = ^block;
+
+     tlanguage = (language_unknown,language_auto,language_c,
+       language_cplus,language_java,language_chill,
+       language_fortran,language_m2,language_asm,
+       language_scm,language_pascal,language_objc);
+
+     bptype = (bp_breakpoint,bp_hardware_breakpoint,
+       bp_until,bp_finish,bp_watchpoint,bp_hardware_watchpoint,
+       bp_read_watchpoint,bp_access_watchpoint,
+       bp_longjmp,bp_longjmp_resume,bp_step_resume,
+       bp_through_sigtramp,bp_watchpoint_scope,
+       bp_call_dummy,bp_shlib_event);
+
+     tenable = (disabled,enabled,shlib_disabled);
+
+     bpdisp = (del,del_at_next_stop,disable,donttouch);
+
+{$PACKRECORDS 4}
+     pbreakpoint = ^breakpoint;
+     breakpoint = record
+          next : pbreakpoint;
+          typ : bptype;
+          enable : tenable;
+          disposition : bpdisp;
+          number : longint;
+          address : CORE_ADDR;
+          line_number : longint;
+          source_file : pchar;
+          silent : byte;
+          ignore_count : longint;
+          shadow_contents : array[0..15] of char;
+          inserted : char;
+          duplicate : char;
+          commands : pointer; {^command_line}
+          frame : CORE_ADDR;
+          cond : pointer; {^expression}
+          addr_string : ^char;
+          language : tlanguage;
+          input_radix : longint;
+          cond_string : ^char;
+          exp_string : ^char;
+          exp : pointer; {^expression}
+          exp_valid_block : pblock; {^block;}
+          val : pointer; {value_ptr;}
+          val_chain : pointer; {value_ptr;}
+          related_breakpoint : pbreakpoint;
+          watchpoint_frame : CORE_ADDR;
+          thread : longint;
+          hit_count : longint;
+          section : pointer; {^asection}
+       end;
+
+     tfreecode=(free_nothing,free_contents,free_linetable);
+
+     psymtab = ^symtab;
+     symtab = record
+          next : psymtab;
+          blockvector : pointer; {^blockvector;}
+          linetable : pointer; {^linetable;}
+          block_line_section : longint;
+          primary : longint;
+          {$ifdef GDB_SYMTAB_HAS_MACROS}
+            { new field added in the middle :( }
+          macro_table : pointer;
+          {$endif GDB_SYMTAB_HAS_MACROS}
+          filename : pchar;
+          dirname : pchar;
+          free_code : tfreecode;
+          free_ptr : pchar;
+          nlines : longint;
+          line_charpos : ^longint;
+          language : tlanguage;
+          Debugformat : pchar;
+          version : pchar;
+          fullname : pchar;
+          objfile : pointer; {^objfile;}
+       end;
+
+     psymtab_and_line = ^symtab_and_line;
+     symtab_and_line = record
+          symtab : psymtab;
+          section : pointer; {^asection;}
+          line : longint;
+          pc : CORE_ADDR;
+          _end : CORE_ADDR;
+       end;
+
+     symtabs_and_lines = record
+          sals : ^symtab_and_line;
+          nelts : longint;
+       end;
+
+    psymbol = ^symbol;
+    pminimal_symbol = ^minimal_symbol;
+
+    general_symbol_info = record
+  (* Name of the symbol.  This is a required field.  Storage for the name is
+     allocated on the psymbol_obstack or symbol_obstack for the associated
+     objfile. *)
+
+      _name : pchar;
+
+  (* Value of the symbol.  Which member of this union to use, and what
+     it means, depends on what kind of symbol this is and its
+     SYMBOL_CLASS.  See comments there for more details.  All of these
+     are in host byte order (though what they point to might be in
+     target byte order, e.g. LOC_CONST_BYTES).  *)
+     value : record
+       case integer of
+      (* The fact that this is a long not a LONGEST mainly limits the
+         range of a LOC_CONST.  Since LOC_CONST_BYTES exists, I'm not
+         sure that is a big deal.  *)
+       0 : (ivalue : longint;);
+
+       1 : (block  : pblock;);
+
+       2 : (bytes  : pchar;);
+
+       3 : (address : CORE_ADDR;);
+
+      (* for opaque typedef struct chain *)
+
+       4 : (chain : psymbol;);
+      end;
+
+  (* Since one and only one language can apply, wrap the language specific
+     information inside a union. *)
+
+   (* union
+    {
+      struct cplus_specific      /* For C++ */
+                                /*  and Java */
+        {
+          char *demangled_name;
+        } cplus_specific;
+      struct chill_specific      /* For Chill */
+        {
+          char *demangled_name;
+        } chill_specific;
+    } language_specific; *)
+     demangled_name : pchar;
+
+  (* Record the source code language that applies to this symbol.
+     This is used to select one of the fields from the language specific
+     union above. *)
+
+    language : tlanguage;
+
+  (* Which section is this symbol in?  This is an index into
+     section_offsets for this objfile.  Negative means that the symbol
+     does not get relocated relative to a section.
+     Disclaimer: currently this is just used for xcoff, so don't
+     expect all symbol-reading code to set it correctly (the ELF code
+     also tries to set it correctly).  *)
+
+    section : word;
+
+  (* The bfd section associated with this symbol. *)
+
+    bfd_section : pointer {^asection};
+  end; { of general_symbol_info record declaration }
+
+  tminimal_symbol_type =
+    (
+      mst_unknown := 0,         (* Unknown type, the default *)
+      mst_text,                 (* Generally executable instructions *)
+      mst_data,                 (* Generally initialized data *)
+      mst_bss,                  (* Generally uninitialized data *)
+      mst_abs,                  (* Generally absolute (nonrelocatable) *)
+      (* GDB uses mst_solib_trampoline for the start address of a shared
+         library trampoline entry.  Breakpoints for shared library functions
+         are put there if the shared library is not yet loaded.
+         After the shared library is loaded, lookup_minimal_symbol will
+         prefer the minimal symbol from the shared library (usually
+         a mst_text symbol) over the mst_solib_trampoline symbol, and the
+         breakpoints will be moved to their true address in the shared
+         library via breakpoint_re_set.  *)
+      mst_solib_trampoline,     (* Shared library trampoline code *)
+      (* For the mst_file* types, the names are only guaranteed to be unique
+         within a given .o file.  *)
+      mst_file_text,            (* Static version of mst_text *)
+      mst_file_data,            (* Static version of mst_data *)
+      mst_file_bss              (* Static version of mst_bss *)
+    );
+
+  namespace_enum = (
+  (* UNDEF_NAMESPACE is used when a namespace has not been discovered or
+     none of the following apply.  This usually indicates an error either
+     in the symbol information or in gdb's handling of symbols. *)
+  UNDEF_NAMESPACE,
+
+  (* VAR_NAMESPACE is the usual namespace.  In C, this contains variables,
+     function names, typedef names and enum type values. *)
+  VAR_NAMESPACE,
+
+  (* STRUCT_NAMESPACE is used in C to hold struct, union and enum type names.
+     Thus, if `struct foo' is used in a C program, it produces a symbol named
+     `foo' in the STRUCT_NAMESPACE. *)
+  STRUCT_NAMESPACE,
+
+  (* LABEL_NAMESPACE may be used for names of labels (for gotos);
+     currently it is not used and labels are not recorded at all.  *)
+  LABEL_NAMESPACE,
+
+  (* Searching namespaces. These overlap with VAR_NAMESPACE, providing
+     some granularity with the search_symbols function. *)
+  (* Everything in VAR_NAMESPACE minus FUNCTIONS_-, TYPES_-, and
+     METHODS_NAMESPACE *)
+  VARIABLES_NAMESPACE,
+
+  (* All functions -- for some reason not methods, though. *)
+  FUNCTIONS_NAMESPACE,
+
+  (* All defined types *)
+  TYPES_NAMESPACE,
+
+  (* All class methods -- why is this separated out? *)
+  METHODS_NAMESPACE
+
+  );
+  address_class = (
+  (* Not used; catches errors *)
+  LOC_UNDEF,
+
+  (* Value is constant int SYMBOL_VALUE, host byteorder *)
+  LOC_CONST,
+
+  (* Value is at fixed address SYMBOL_VALUE_ADDRESS *)
+  LOC_STATIC,
+
+  (* Value is in register.  SYMBOL_VALUE is the register number.  *)
+  LOC_REGISTER,
+
+  (* It's an argument; the value is at SYMBOL_VALUE offset in arglist.  *)
+  LOC_ARG,
+
+  (* Value address is at SYMBOL_VALUE offset in arglist.  *)
+  LOC_REF_ARG,
+
+  (* Value is in register number SYMBOL_VALUE.  Just like LOC_REGISTER
+     except this is an argument.  Probably the cleaner way to handle
+     this would be to separate address_class (which would include
+     separate ARG and LOCAL to deal with FRAME_ARGS_ADDRESS versus
+     FRAME_LOCALS_ADDRESS), and an is_argument flag.
+
+     For some symbol formats (stabs, for some compilers at least),
+     the compiler generates two symbols, an argument and a register.
+     In some cases we combine them to a single LOC_REGPARM in symbol
+     reading, but currently not for all cases (e.g. it's passed on the
+     stack and then loaded into a register).  *)
+  LOC_REGPARM,
+
+  (* Value is in specified register.  Just like LOC_REGPARM except the
+     register holds the address of the argument instead of the argument
+     itself. This is currently used for the passing of structs and unions
+     on sparc and hppa.  It is also used for call by reference where the
+     address is in a register, at least by mipsread.c.  *)
+  LOC_REGPARM_ADDR,
+
+  (* Value is a local variable at SYMBOL_VALUE offset in stack frame.  *)
+  LOC_LOCAL,
+
+  (* Value not used; definition in SYMBOL_TYPE.  Symbols in the namespace
+     STRUCT_NAMESPACE all have this class.  *)
+  LOC_TYPEDEF,
+
+  (* Value is address SYMBOL_VALUE_ADDRESS in the code *)
+  LOC_LABEL,
+
+  (* In a symbol table, value is SYMBOL_BLOCK_VALUE of a `struct block'.
+     In a partial symbol table, SYMBOL_VALUE_ADDRESS is the start address
+     of the block.  Function names have this class. *)
+  LOC_BLOCK,
+
+  (* Value is a constant byte-sequence pointed to by SYMBOL_VALUE_BYTES, in
+     target byte order.  *)
+  LOC_CONST_BYTES,
+
+  (* Value is arg at SYMBOL_VALUE offset in stack frame. Differs from
+     LOC_LOCAL in that symbol is an argument; differs from LOC_ARG in
+     that we find it in the frame (FRAME_LOCALS_ADDRESS), not in the
+     arglist (FRAME_ARGS_ADDRESS).  Added for i960, which passes args
+     in regs then copies to frame.  *)
+  LOC_LOCAL_ARG,
+
+  (* Value is at SYMBOL_VALUE offset from the current value of
+     register number SYMBOL_BASEREG.  This exists mainly for the same
+     things that LOC_LOCAL and LOC_ARG do; but we need to do this
+     instead because on 88k DWARF gives us the offset from the
+     frame/stack pointer, rather than the offset from the "canonical
+     frame address" used by COFF, stabs, etc., and we don't know how
+     to convert between these until we start examining prologues.
+
+     Note that LOC_BASEREG is much less general than a DWARF expression.
+     We don't need the generality (at least not yet), and storing a general
+     DWARF expression would presumably take up more space than the existing
+     scheme.  *)
+  LOC_BASEREG,
+
+  (* Same as LOC_BASEREG but it is an argument.  *)
+  LOC_BASEREG_ARG,
+
+  (* Value is at fixed address, but the address of the variable has
+     to be determined from the minimal symbol table whenever the
+     variable is referenced.
+     This happens if debugging information for a global symbol is
+     emitted and the corresponding minimal symbol is defined
+     in another object file or runtime common storage.
+     The linker might even remove the minimal symbol if the global
+     symbol is never referenced, in which case the symbol remains
+     unresolved.  *)
+  LOC_UNRESOLVED,
+
+  (* Value is at a thread-specific location calculated by a
+     target-specific method. *)
+  LOC_THREAD_LOCAL_STATIC,
+
+  (* The variable does not actually exist in the program.
+     The value is ignored.  *)
+  LOC_OPTIMIZED_OUT,
+
+  (* The variable is static, but actually lives at * (address).
+   * I.e. do an extra indirection to get to it.
+   * This is used on HP-UX to get at globals that are allocated
+   * in shared libraries, where references from images other
+   * than the one where the global was allocated are done
+   * with a level of indirection.
+   *)
+  LOC_INDIRECT
+  );
+
+   minimal_symbol = record
+  (* The general symbol info required for all types of symbols.
+     The SYMBOL_VALUE_ADDRESS contains the address that this symbol
+     corresponds to.  *)
+    ginfo : general_symbol_info;
+
+  (* The info field is available for caching machine-specific information
+     so it doesn't have to rederive the info constantly (over a serial line).
+     It is initialized to zero and stays that way until target-dependent code
+     sets it.  Storage for any data pointed to by this field should be allo-
+     cated on the symbol_obstack for the associated objfile.
+     The type would be "void *" except for reasons of compatibility with older
+     compilers.  This field is optional.
+
+     Currently, the AMD 29000 tdep.c uses it to remember things it has decoded
+     from the instructions in the function header, and the MIPS-16 code uses
+     it to identify 16-bit procedures.  *)
+
+    info : pchar;
+
+{$ifdef SOFUN_ADDRESS_MAYBE_MISSING}
+  (* Which source file is this symbol in?  Only relevant for mst_file_*.  *)
+    filename : pchar;
+{$endif}
+
+  (* Classification types for this symbol.  These should be taken as "advisory
+     only", since if gdb can't easily figure out a classification it simply
+     selects mst_unknown.  It may also have to guess when it can't figure out
+     which is a better match between two types (mst_data versus mst_bss) for
+     example.  Since the minimal symbol info is sometimes derived from the
+     BFD library's view of a file, we need to live with what information bfd
+     supplies. *)
+
+    minimal_symbol_type : tminimal_symbol_type;
+  end{ of minimal_symbol};
+
+  block = record
+  (* Addresses in the executable code that are in this block.  *)
+  startaddr,
+  endaddr : CORE_ADDR ;
+
+  (* The symbol that names this block, if the block is the body of a
+     function; otherwise, zero.  *)
+  _function : psymbol;
+
+  (* The `struct block' for the containing block, or 0 if none.
+     The superblock of a top-level local block (i.e. a function in the
+     case of C) is the STATIC_BLOCK.  The superblock of the
+     STATIC_BLOCK is the GLOBAL_BLOCK.  *)
+
+  superblock : pblock;
+
+  (* Version of GCC used to compile the function corresponding
+     to this block, or 0 if not compiled with GCC.  When possible,
+     GCC should be compatible with the native compiler, or if that
+     is not feasible, the differences should be fixed during symbol
+     reading.  As of 16 Apr 93, this flag is never used to distinguish
+     between gcc2 and the native compiler.
+
+     If there is no function corresponding to this block, this meaning
+     of this flag is undefined.  *)
+
+  gcc_compile_flag : byte;
+
+  (* Number of local symbols.  *)
+  nsyms : longint;
+
+  (* The symbols.  If some of them are arguments, then they must be
+     in the order in which we would like to print them.  *)
+  sym : array [0..0] of psymbol;
+  end { of block definition };
+
+  symbol = record
+  (* The general symbol info required for all types of symbols. *)
+    ginfo : general_symbol_info;
+
+  (* Data type of value *)
+    _type : pointer{ptype};
+
+  (* Name space code.  *)
+  namespace : namespace_enum;
+
+  (* Address class *)
+
+  aclass : address_class;
+
+  (* Line number of definition.  FIXME:  Should we really make the assumption
+     that nobody will try to debug files longer than 64K lines?  What about
+     machine generated programs? *)
+
+  line : word;
+
+  (* Some symbols require an additional value to be recorded on a per-
+     symbol basis.  Stash those values here. *)
+
+  (*union
+    {
+      /* Used by LOC_BASEREG and LOC_BASEREG_ARG.  */
+      short basereg;
+    } *)
+  aux_value_base_reg : word;
+
+  (* Link to a list of aliases for this symbol.
+     Only a "primary/main symbol may have aliases.  *)
+  aliases : pointer{palias_list};
+
+  (* List of ranges where this symbol is active.  This is only
+     used by alias symbols at the current time.  *)
+  ranges : pointer{prange_list};
+  end;
+
+     target_signal = (TARGET_SIGNAL_FIRST := 0,
+       TARGET_SIGNAL_HUP := 1,TARGET_SIGNAL_INT := 2,
+       TARGET_SIGNAL_QUIT := 3,TARGET_SIGNAL_ILL := 4,
+       TARGET_SIGNAL_TRAP := 5,TARGET_SIGNAL_ABRT := 6,
+       TARGET_SIGNAL_EMT := 7,TARGET_SIGNAL_FPE := 8,
+       TARGET_SIGNAL_KILL := 9,TARGET_SIGNAL_BUS := 10,
+       TARGET_SIGNAL_SEGV := 11,TARGET_SIGNAL_SYS := 12,
+       TARGET_SIGNAL_PIPE := 13,TARGET_SIGNAL_ALRM := 14,
+       TARGET_SIGNAL_TERM := 15,TARGET_SIGNAL_URG := 16,
+       TARGET_SIGNAL_STOP := 17,TARGET_SIGNAL_TSTP := 18,
+       TARGET_SIGNAL_CONT := 19,TARGET_SIGNAL_CHLD := 20,
+       TARGET_SIGNAL_TTIN := 21,TARGET_SIGNAL_TTOU := 22,
+       TARGET_SIGNAL_IO := 23,TARGET_SIGNAL_XCPU := 24,
+       TARGET_SIGNAL_XFSZ := 25,TARGET_SIGNAL_VTALRM := 26,
+       TARGET_SIGNAL_PROF := 27,TARGET_SIGNAL_WINCH := 28,
+       TARGET_SIGNAL_LOST := 29,TARGET_SIGNAL_USR1 := 30,
+       TARGET_SIGNAL_USR2 := 31,TARGET_SIGNAL_PWR := 32,
+       TARGET_SIGNAL_POLL := 33,TARGET_SIGNAL_WIND := 34,
+       TARGET_SIGNAL_PHONE := 35,TARGET_SIGNAL_WAITING := 36,
+       TARGET_SIGNAL_LWP := 37,TARGET_SIGNAL_DANGER := 38,
+       TARGET_SIGNAL_GRANT := 39,TARGET_SIGNAL_RETRACT := 40,
+       TARGET_SIGNAL_MSG := 41,TARGET_SIGNAL_SOUND := 42,
+       TARGET_SIGNAL_SAK := 43,TARGET_SIGNAL_PRIO := 44,
+       TARGET_SIGNAL_REALTIME_33 := 45,TARGET_SIGNAL_REALTIME_34 := 46,
+       TARGET_SIGNAL_REALTIME_35 := 47,TARGET_SIGNAL_REALTIME_36 := 48,
+       TARGET_SIGNAL_REALTIME_37 := 49,TARGET_SIGNAL_REALTIME_38 := 50,
+       TARGET_SIGNAL_REALTIME_39 := 51,TARGET_SIGNAL_REALTIME_40 := 52,
+       TARGET_SIGNAL_REALTIME_41 := 53,TARGET_SIGNAL_REALTIME_42 := 54,
+       TARGET_SIGNAL_REALTIME_43 := 55,TARGET_SIGNAL_REALTIME_44 := 56,
+       TARGET_SIGNAL_REALTIME_45 := 57,TARGET_SIGNAL_REALTIME_46 := 58,
+       TARGET_SIGNAL_REALTIME_47 := 59,TARGET_SIGNAL_REALTIME_48 := 60,
+       TARGET_SIGNAL_REALTIME_49 := 61,TARGET_SIGNAL_REALTIME_50 := 62,
+       TARGET_SIGNAL_REALTIME_51 := 63,TARGET_SIGNAL_REALTIME_52 := 64,
+       TARGET_SIGNAL_REALTIME_53 := 65,TARGET_SIGNAL_REALTIME_54 := 66,
+       TARGET_SIGNAL_REALTIME_55 := 67,TARGET_SIGNAL_REALTIME_56 := 68,
+       TARGET_SIGNAL_REALTIME_57 := 69,TARGET_SIGNAL_REALTIME_58 := 70,
+       TARGET_SIGNAL_REALTIME_59 := 71,TARGET_SIGNAL_REALTIME_60 := 72,
+       TARGET_SIGNAL_REALTIME_61 := 73,TARGET_SIGNAL_REALTIME_62 := 74,
+       TARGET_SIGNAL_REALTIME_63 := 75,TARGET_SIGNAL_UNKNOWN,
+       TARGET_SIGNAL_DEFAULT,TARGET_SIGNAL_LAST
+       );
+
+     strata = (dummy_stratum,file_stratum,core_stratum,download_stratum,process_stratum);
+
+     ptarget_ops = ^target_ops;
+     target_ops = record
+          to_shortname : pchar;
+          to_longname : pchar;
+          to_doc : pchar;
+          to_open : procedure (_para1:pchar; _para2:longint);
+          to_close : procedure (_para1:longint);
+          to_attach : procedure (_para1:pchar; _para2:longint);
+          to_detach : procedure (_para1:pchar; _para2:longint);
+          to_resume : procedure (_para1:longint; _para2:longint; _para3:target_signal);
+          to_wait : pointer; {function (_para1:longint; _para2:ptarget_waitstatus):longint;}
+          to_fetch_registers : procedure (_para1:longint);
+          to_store_registers : procedure (_para1:longint);
+          to_prepare_to_store : procedure ;
+          to_xfer_memory : function (memaddr:CORE_ADDR; myaddr:pchar; len:longint; write:longint; target:ptarget_ops):longint;
+          to_files_info : procedure (_para1:ptarget_ops);
+          to_insert_breakpoint : function (_para1:CORE_ADDR; _para2:pchar):longint;
+          to_remove_breakpoint : function (_para1:CORE_ADDR; _para2:pchar):longint;
+          to_terminal_init : procedure ;
+          to_terminal_inferior : procedure ;
+          to_terminal_ours_for_output : procedure ;
+          to_terminal_ours : procedure ;
+          to_terminal_info : procedure (_para1:pchar; _para2:longint);
+          to_kill : procedure ;
+          to_load : procedure (_para1:pchar; _para2:longint);
+          to_lookup_symbol : function (_para1:pchar; _para2:pCORE_ADDR):longint;
+          to_create_inferior : procedure (_para1:pchar; _para2:pchar; _para3:ppchar);
+          to_mourn_inferior : procedure ;
+          to_can_run : function :longint;
+          to_notice_signals : procedure (pid:longint);
+          to_thread_alive : function (pid:longint):longint;
+          to_stop : procedure ;
+          to_stratum : strata;
+          DONT_USE : pointer;
+          to_has_all_memory : longint;
+          to_has_memory : longint;
+          to_has_stack : longint;
+          to_has_registers : longint;
+          to_has_execution : longint;
+          to_sections : pointer; {^section_table}
+          to_sections_end : pointer; {^section_table}
+          to_magic : longint;
+       end;
+
+{$PACKRECORDS NORMAL}
+
+{*****************************************************************************
+                   Define external calls to libgdb.a
+*****************************************************************************}
+
+var
+{ external variables }
+  error_return : jmp_buf;cvar;public;
+  quit_return  : jmp_buf;cvar;public;
+  {$ifdef GDB_HAS_DEPRECATED_CBPH}
+  deprecated_create_breakpoint_hook : pointer;cvar;external;
+  {$else}
+  create_breakpoint_hook : pointer;cvar;external;
+  {$endif}
+  current_target : target_ops;cvar;external;
+  stop_pc      : CORE_ADDR;cvar;external;
+  { Only used from GDB 5.01 but doesn't hurst otherwise }
+  interpreter_p : pchar;cvar;public;
+
+{ we need also to declare some vars }
+  watchdog      : longint;cvar;external;
+  gdb_error     : longint;cvar;public;
+  display_time  : longbool;cvar;public;
+  display_space : longbool;cvar;public;
+
+{ Whether this is the command line version or not }
+  tui_version : longint;cvar;public;
+
+{ Whether xdb commands will be handled }
+{$ifdef GDB_HAS_DB_COMMANDS}
+  xdb_commands : longint;cvar;public;
+
+{ Whether dbx commands will be handled }
+  dbx_commands : longint;cvar;public;
+{$endif GDB_HAS_DB_COMMANDS}
+
+var
+  gdb_stdout : pui_file;cvar;public;
+  gdb_stderr : pui_file;cvar;public;
+  gdb_stdlog : pui_file;cvar;public;
+  gdb_stdtarg : pui_file;cvar;public;
+  event_loop_p : longint;cvar;public;
+{$ifdef GDB_V6}
+(* target IO streams *)
+  gdb_stdtargin : pui_file;cvar;public;
+  gdb_stdtargerr : pui_file;cvar;public;
+{$endif}
+
+{ used for gdb_stdout and gdb_stderr }
+function  xmalloc(size : longint) : pointer;cdecl;external;
+function  find_pc_line(i:CORE_ADDR;l:longint):symtab_and_line;cdecl;external;
+function  find_pc_function(i:CORE_ADDR):psymbol;cdecl;external;
+function  lookup_minimal_symbol_by_pc(i : CORE_ADDR):pminimal_symbol;cdecl;external;
+{$ifdef GDB_INIT_HAS_ARGV0}
+procedure gdb_init(argv0 : pchar);cdecl;external;
+{$else not GDB_INIT_HAS_ARGV0}
+procedure gdb_init;cdecl;external;
+{$endif not GDB_INIT_HAS_ARGV0}
+procedure execute_command(p:pchar;i:longint);cdecl;external;
+procedure target_kill;cdecl;external;
+procedure target_close(i:longint);cdecl;external;
+
+
+{*****************************************************************************
+                                 Helpers
+*****************************************************************************}
+
+procedure Debug(const s:string);
+begin
+  if use_gdb_file then
+    Writeln(gdb_file,s)
+  else
+    Writeln(s);
+end;
+
+
+{*****************************************************************************
+                               TFrameEntry
+*****************************************************************************}
+
+constructor tframeentry.init;
+begin
+  Reset;
+end;
+
+destructor tframeentry.done;
+begin
+  Clear;
+end;
+
+procedure tframeentry.reset;
+begin
+  file_name:=nil;
+  function_name:=nil;
+  args:=nil;
+  line_number:=0;
+  address:=0;
+end;
+
+procedure tframeentry.clear;
+begin
+  if assigned(file_name) then
+   strdispose(file_name);
+  if assigned(function_name) then
+   strdispose(function_name);
+  if assigned(args) then
+   strdispose(args);
+  reset;
+end;
+
+
+{*****************************************************************************
+                                 tgdbbuffer
+*****************************************************************************}
+
+const
+  blocksize=2048;
+
+constructor tgdbbuffer.init;
+begin
+  Buf:=nil;
+  gdb_file:=nil;
+  Size:=0;
+  Resize(blocksize);
+  Reset;
+end;
+
+
+destructor tgdbbuffer.done;
+begin
+  if assigned(buf) then
+    freemem(buf,size);
+end;
+
+
+
+procedure tgdbbuffer.reset;
+begin
+  idx:=0;
+  Buf[0]:=#0;
+end;
+
+
+procedure tgdbbuffer.append(p:pchar);
+var
+  len : longint;
+begin
+  if not assigned(p) then
+   exit;
+  len:=Strlen(p);
+  if len+1+idx>size then
+   Resize(len+1+idx);
+  Move(p^,buf[idx],len);
+  inc(idx,len);
+  buf[idx]:=#0;
+end;
+
+
+procedure tgdbbuffer.lappend(p:pchar;len : longint);
+begin
+  if not assigned(p) then
+   exit;
+  if len+idx+1>size then
+   Resize(len+idx+1);
+  Move(p^,buf[idx],len);
+  inc(idx,len);
+  buf[idx]:=#0;
+end;
+
+
+procedure tgdbbuffer.resize(nsize : longint);
+var
+  np    : pchar;
+begin
+  nsize:=((nsize+blocksize-1) div blocksize)*blocksize;
+  getmem(np,nsize);
+  if assigned(buf) then
+    begin
+       move(buf^,np^,size);
+       freemem(buf,size);
+    end;
+  buf:=np;
+  size:=nsize;
+end;
+
+
+{*****************************************************************************
+                         Hook calls from libgdb.a
+*****************************************************************************}
+
+{$ifdef go32v2}
+procedure gdbpas_prev_exception_handler;cdecl;public;
+begin
+end;
+{$endif go32v2}
+
+procedure init_proc;cdecl;public;
+begin
+end;
+
+
+procedure annotate_signalled;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|signalled|');
+{$endif}
+end;
+
+
+procedure annotate_signal_name;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|signal_name|');
+{$endif}
+  with curr_gdb^ do
+   signal_name_start:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_signal_name_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|signal_name_end|');
+{$endif}
+  with curr_gdb^ do
+   signal_name_end:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_signal_string;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|signal_string|');
+{$endif}
+  with curr_gdb^ do
+   signal_start:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_signal_string_end;cdecl;public;
+var
+  c : char;
+begin
+{$ifdef Verbose}
+  Debug('|signal_string_end|');
+{$endif}
+  with curr_gdb^ do
+   begin
+     signal_end:=gdboutputbuf.idx;
+     c:=gdboutputbuf.buf[signal_end];
+     gdboutputbuf.buf[signal_end]:=#0;
+     if assigned(signal_string) then
+       strdispose(signal_string);
+     signal_string:=strnew(gdboutputbuf.buf+signal_start);
+     gdboutputbuf.buf[signal_end]:=c;
+     c:=gdboutputbuf.buf[signal_name_end];
+     gdboutputbuf.buf[signal_name_end]:=#0;
+     if assigned(signal_name) then
+       strdispose(signal_name);
+     signal_name:=strnew(gdboutputbuf.buf+signal_name_start);
+     gdboutputbuf.buf[signal_name_end]:=c;
+     if (user_screen_shown) then
+       begin
+         DebuggerScreen;
+         DoUserSignal;
+         UserScreen;
+       end
+     else
+       DoUserSignal;
+     call_reset:=true;
+     signaled:=false;
+   end;
+end;
+
+
+procedure annotate_signal;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|signal|');
+{$endif}
+  with curr_gdb^ do
+   signaled:=true;
+end;
+
+
+procedure annotate_exited(exitstatus:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|exited|');
+{$endif}
+{#ifdef __DJGPP__
+ /* this is very important. The exit code of a djgpp program
+   disables interrupts and after this there is no other interrupt
+   called, which enables interrupts with the iret. */
+  __dpmi_get_and_enable_virtual_interrupt_state();
+#endif }
+{$ifdef go32v2}
+   {$asmmode att}
+     asm
+        movw $0x901,%ax
+        int  $0x31
+     end;
+   {$asmmode default}
+   reload_fs;
+{$endif def go32v2}
+
+  curr_gdb^.DebuggerScreen;
+{  DeleteBreakPoints; }
+  curr_gdb^.EndSession(exitstatus);
+end;
+
+
+procedure annotate_error;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|error|');
+{$endif}
+end;
+
+
+procedure annotate_error_begin;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|error begin|');
+{$endif}
+  with curr_gdb^ do
+   begin
+     error_start:=gdboutputbuf.idx+strlen(gdboutputbuf.buf);
+     got_error:=true;
+   end;
+{$ifdef Verbose}
+  Debug('|end of error begin|');
+{$endif}
+end;
+
+
+procedure annotate_starting;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|starting|');
+{$endif}
+{$ifdef go32v2}
+     reload_fs;
+{$endif go32v2}
+  curr_gdb^.UserScreen;
+end;
+
+
+procedure annotate_stopped;cdecl;public;
+var
+  sym : symtab_and_line;
+  fname : pchar;
+begin
+{$ifdef Verbose}
+  Debug('|stopped|');
+{$endif}
+  with curr_gdb^ do
+   begin
+{$ifdef go32v2}
+     reload_fs;
+{$endif go32v2}
+     DebuggerScreen;
+     current_pc:=stop_pc;
+     Debuggee_started:=inferior_pid<>0;
+     if not Debuggee_started then exit;
+     if reset_command then exit;
+      sym:=find_pc_line(stop_pc,0);
+     if assigned(sym.symtab) then
+      fname:=sym.symtab^.filename
+     else
+      fname:=nil;
+     SelectSourceLine(fname,sym.line);
+   end;
+end;
+
+
+function inferior_pid : longint;
+begin
+  inferior_pid:=inferior_ptid.pid;
+end;
+
+
+procedure proc_remove_foreign(pid:longint);cdecl;public;
+begin
+end;
+
+
+procedure breakpoints_changed;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|breakpoints_changed|');
+{$endif}
+end;
+
+
+procedure annotate_ignore_count_change;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|annotate_ignore_count_change()|');
+{$endif}
+end;
+
+
+procedure annotate_breakpoint(num:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|breakpoint(%d)|');
+{$endif}
+  With Curr_gdb^ do
+    stop_breakpoint_number:=num;
+end;
+
+
+procedure annotate_watchpoint(num:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|watchpoint(%d)|');
+{$endif}
+  With Curr_gdb^ do
+    stop_breakpoint_number:=num;
+end;
+
+procedure annotate_catchpoint(num:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|catchpoint(%d)|');
+{$endif}
+  With Curr_gdb^ do
+    stop_breakpoint_number:=num;
+end;
+
+
+procedure annotate_breakpoints_headers;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|breakpoints_headers|');
+{$endif}
+end;
+
+
+procedure annotate_breakpoints_table;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|breakpoints_table|');
+{$endif}
+end;
+
+
+procedure annotate_record;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|record|');
+{$endif}
+end;
+
+
+procedure annotate_breakpoints_table_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|breakpoints_table_end|');
+{$endif}
+end;
+
+
+procedure annotate_frames_invalid;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frames_invalid|');
+{$endif}
+end;
+
+
+procedure annotate_frame_begin(level:longint;pc:CORE_ADDR);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_begin(%d,%ld)|');
+{$endif}
+  with curr_gdb^ do
+   begin
+     frame_begin_seen:=true;
+     frame_level:=level;
+     current_address:=pc;
+     current_line_number:=-1;
+     function_start:=-1;
+     function_end:=-1;
+     args_start:=-1;
+     args_end:=-1;
+     file_start:=-1;
+     file_end:=-1;
+     line_start:=-1;
+     line_end:=-1;
+   end;
+end;
+
+
+procedure annotate_frame_address;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_address|');
+{$endif}
+end;
+
+
+procedure annotate_frame_address_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_address_end|');
+{$endif}
+end;
+
+procedure annotate_frame_function_name;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_function_name|');
+{$endif}
+  with curr_gdb^ do
+   function_start:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_args;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_args|');
+{$endif}
+  with curr_gdb^ do
+   begin
+     function_end:=gdboutputbuf.idx;
+     args_start:=gdboutputbuf.idx;
+   end;
+end;
+
+procedure annotate_frame_source_begin;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_source_begin|');
+{$endif}
+  with curr_gdb^ do
+   args_end:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_source_file;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_source_file|');
+{$endif}
+  with curr_gdb^ do
+   file_start:=gdboutputbuf.idx;
+end;
+
+procedure annotate_frame_source_file_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_source_file_end|');
+{$endif}
+  with curr_gdb^ do
+   file_end:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_source_line;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_source_line|');
+{$endif}
+  with curr_gdb^ do
+   line_start:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_source_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_source_end|');
+{$endif}
+  with curr_gdb^ do
+   line_end:=gdboutputbuf.idx;
+end;
+
+
+procedure annotate_frame_where;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|frame_where|');
+{$endif}
+end;
+
+
+procedure annotate_frame_end;cdecl;public;
+var
+  fe : pframeentry;
+  c  : char;
+  err : integer;
+begin
+{$ifdef Verbose}
+  Debug('|frame_end|');
+{$endif}
+  with curr_gdb^ do
+   begin
+     if (not record_frames) or (not frame_begin_seen) then
+      exit;
+     { This can happen, when the function has no Debugging information }
+     if (args_start >= 0) and (args_end < 0) then
+      args_end:=gdboutputbuf.idx;
+     frame_begin_seen:=false;
+     fe:=get_frameentry(frame_level);
+     fe^.address:=current_address;
+     fe^.level:=frame_level;
+     if (function_start>=0) then
+      begin
+        c:=gdboutputbuf.buf[function_end];
+        gdboutputbuf.buf[function_end]:=#0;
+        fe^.function_name:=strnew(gdboutputbuf.buf+function_start);
+        gdboutputbuf.buf[function_end]:=c;
+      end;
+     if (file_start>=0)  then
+      begin
+        c:=gdboutputbuf.buf[file_end];
+        gdboutputbuf.buf[file_end]:=#0;
+        fe^.file_name:=strnew(gdboutputbuf.buf+file_start);
+        gdboutputbuf.buf[file_end]:=c;
+      end;
+     if (args_start>=0) then
+      begin
+        {$warning FIXME}  {sometimes the ide crashes here because ars_end is 0, AD}
+        if args_end > 0 then
+        begin
+          if (gdboutputbuf.buf[args_end-1]=#10) then
+           dec(args_end);
+          c:=gdboutputbuf.buf[args_end];
+          gdboutputbuf.buf[args_end]:=#0;
+          fe^.args:=strnew(gdboutputbuf.buf+args_start);
+          gdboutputbuf.buf[args_end]:=c;
+        end;
+      end;
+     if (line_start>=0) then
+      begin
+        c:=gdboutputbuf.buf[line_end];
+        gdboutputbuf.buf[line_end]:=#0;
+{     sscanf(gdb_output_buffer+line_start,'%d',&fe^.line_number); }
+        val(strpas(pchar(@gdboutputbuf.buf[line_start])),fe^.line_number,err);
+        gdboutputbuf.buf[line_end]:=c;
+      end;
+   end;
+end;
+
+
+procedure annotate_quit;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|quit|');
+{$endif}
+end;
+
+
+procedure annotate_arg_begin;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|arg_begin|');
+{$endif}
+end;
+
+
+procedure annotate_arg_name_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|arg_name_end|');
+{$endif}
+end;
+
+
+procedure annotate_arg_value(typ:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|arg_value|');
+{$endif}
+end;
+
+
+procedure annotate_arg_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|arg_end|');
+{$endif}
+end;
+
+procedure annotate_source(filename:pchar;line,character,mid:longint;pc:CORE_ADDR);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|source|');
+{$endif}
+end;
+
+
+procedure annotate_function_call;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|function_call|');
+{$endif}
+end;
+
+
+procedure annotate_signal_handler_caller;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|signal_handler_caller|');
+{$endif}
+end;
+
+
+procedure annotate_array_section_begin(index:longint;elttype:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|array_section_begin()|');
+{$endif}
+end;
+
+
+procedure annotate_elt_rep(repcount:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|elt_rep()|');
+{$endif}
+end;
+
+procedure annotate_elt_rep_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|elt_rep_end|');
+{$endif}
+end;
+
+
+procedure annotate_elt;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|elt|');
+{$endif}
+end;
+
+
+procedure annotate_array_section_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|array_section_end|');
+{$endif}
+end;
+
+procedure annotate_display_begin;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|display_begin|');
+{$endif}
+end;
+
+
+procedure annotate_display_number_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|display_number_end|');
+{$endif}
+end;
+
+
+procedure annotate_display_format;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|display_format|');
+{$endif}
+end;
+
+procedure annotate_display_expression;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|display_expression|');
+{$endif}
+end;
+
+
+procedure annotate_display_expression_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|display_expression_end|');
+{$endif}
+end;
+
+
+procedure annotate_display_value;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|display_value|');
+{$endif}
+end;
+
+
+procedure annotate_display_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('|display_end|');
+{$endif}
+end;
+
+
+procedure annotate_field (num:longint);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_field(%d)');
+{$endif}
+end;
+
+
+procedure annotate_field_begin(typ:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_field_begin\n');
+{$endif}
+end;
+
+
+procedure annotate_field_name_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_field_name_end\n');
+{$endif}
+end;
+
+
+procedure annotate_field_value;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_field_value\n');
+{$endif}
+end;
+
+
+procedure annotate_field_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_field_end\n');
+{$endif}
+end;
+
+
+procedure annotate_value_history_begin (histindex:longint;typ:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_value_history_begin(%d)\n');
+{$endif}
+end;
+
+
+procedure annotate_value_begin (typ:pointer);cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_value_begin\n');
+{$endif}
+end;
+
+
+procedure annotate_value_history_value;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_value_history_value\n');
+{$endif}
+end;
+
+
+procedure annotate_value_history_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_value_history_end\n');
+{$endif}
+end;
+
+
+procedure annotate_value_end;cdecl;public;
+begin
+{$ifdef Verbose}
+  Debug('a_value_end\n');
+{$endif}
+end;
+
+
+procedure _initialize_annotate;cdecl;public;
+begin
+end;
+
+
+procedure gdbint_ui_file_write(stream : pui_file; p : pchar; len : longint);cdecl;
+begin
+  if assigned(curr_gdb) then
+   with curr_gdb^ do
+    if stream = gdb_stderr then
+       gdberrorbuf.lappend(p,len)
+    else if stream = gdb_stdout then
+       gdboutputbuf.lappend(p,len)
+    else
+      begin
+       gdberrorbuf.append('Unknown gdb ui_file');
+       gdberrorbuf.lappend(p,len);
+      end;
+end;
+
+
+procedure CreateBreakPointHook(var b:breakpoint);cdecl;
+var
+  sym : symtab_and_line;
+
+{ this procedure is only here to avoid the problems
+  with different version of gcc having different stack
+  handling:
+  on older versions find_pc_line uses just "ret"
+  while on newer gcc version "ret $4" is used
+  if this call is within the CreateBreakPointHook function
+  it changes %esp and thus the registers are
+  not restored correctly PM }
+  procedure get_pc_line;
+    begin
+      sym:=find_pc_line(b.address,0);
+    end;
+begin
+  get_pc_line;
+  with curr_gdb^ do
+   begin
+     last_breakpoint_number:=b.number;
+     { function breakpoints have zero as file and as line !!
+       but they are valid !! }
+     invalid_breakpoint_line:=(b.line_number<>sym.line) and (b.line_number<>0);
+     last_breakpoint_address:=b.address;
+     last_breakpoint_line:=sym.line;
+     if assigned(sym.symtab) then
+      last_breakpoint_file:=sym.symtab^.filename
+     else
+      last_breakpoint_file:=nil;
+   end;
+end;
+
+
+{*****************************************************************************
+                                 tgdbinterface
+*****************************************************************************}
+
+constructor tgdbinterface.init;
+begin
+  gdboutputbuf.init;
+  gdberrorbuf.init;
+  record_frames:=true;
+
+  { This must be placed before gdb__init is called
+    as gdb_init might issue output PM }
+  curr_gdb:=@self;
+  gdb__init;
+  command_level:=0;
+{ set output mode for GDB }
+{ only these values disable filtering
+  DONT CHANGE THEM !!! PM }
+  gdb_command('set width 0xffffffff');
+  gdb_command('set height 0xffffffff');
+{ other standard commands used for fpc debugging }
+  gdb_command('set print demangle off');
+  gdb_command('set gnutarget auto');
+  gdb_command('set language auto');
+  gdb_command('set print vtbl on');
+  gdb_command('set print object on');
+  gdb_command('set print null-stop');
+end;
+
+
+destructor tgdbinterface.done;
+begin
+  clear_frames;
+  gdb_done;
+  gdboutputbuf.done;
+  gdberrorbuf.done;
+end;
+
+
+procedure tgdbinterface.gdb__init;
+begin
+  gdboutputbuf.reset;
+  gdberrorbuf.reset;
+  {$ifdef GDB_HAS_DEPRECATED_CBPH}
+  deprecated_create_breakpoint_hook:=@CreateBreakPointHook;
+  {$else}
+  create_breakpoint_hook:=@CreateBreakPointHook;
+  {$endif}
+  signal_string:=nil;
+  signal_name:=nil;
+end;
+
+
+
+procedure tgdbinterface.gdb_done;
+begin
+  if debuggee_started then
+    begin
+      current_target.to_kill;
+      current_target.to_close(1);
+    end;
+  {$ifdef GDB_HAS_DEPRECATED_CBPH}
+  deprecated_create_breakpoint_hook:=nil;
+  {$else}
+  create_breakpoint_hook:=nil;
+  {$endif}
+end;
+
+
+function tgdbinterface.error:boolean;
+begin
+  error:=got_error;
+end;
+
+function tgdbinterface.error_num:longint;
+begin
+  error_num:=gdb_error;
+end;
+
+var
+   top_level_val : longint;
+
+function catch_errors(func : pointer; command : pchar; from_tty,mask : longint) : longint;cdecl;external;
+
+function gdbint_execute_command(command : pchar; from_tty,mask : longint) : longint;cdecl;
+begin
+  gdbint_execute_command:=1;
+  execute_command(command,from_tty);
+  gdbint_execute_command:=0;
+end;
+
+{$ifdef cpui386}
+type
+  tfpustate = word;
+
+const
+  MaskAllExceptions = $ff;
+{$else}
+type
+  tfpustate = longint;
+const
+  MaskAllExceptions = 0;
+{$endif}
+
+procedure SaveFPUState(var control :TFPUState);
+begin
+{$ifdef cpui386}
+  asm
+    movl control, %edi
+    fstcw (%edi)
+  end;
+{$else}
+  control:=0;
+{$endif}
+end;
+
+procedure SetFPUState(control : TFPUState);
+begin
+{$ifdef cpui386}
+  asm
+    fnclex
+    fldcw control
+  end;
+{$else}
+{$endif}
+end;
+
+function MaskAllFPUExceptions(control : TFPUState) : TFPUState;
+begin
+{$ifdef cpui386}
+  MaskAllFPUExceptions := control or MaskAllExceptions;
+{$endif}
+end;
+
+procedure tgdbinterface.gdb_command(const s:string);
+var
+  command          : array[0..256] of char;
+  prev_stop_breakpoint_number,
+  mask : longint;
+  s2 : string;
+  old_quit_return,
+  old_error_return : jmp_buf;
+  control : TFPUState;
+begin
+  inc(command_level);
+  SaveFPUState(control);
+  SetFPUState(MaskAllFPUExceptions(control));
+  move(s[1],command,length(s));
+  command[length(s)]:=#0;
+  old_quit_return:=quit_return;
+  old_error_return:=error_return;
+  gdb_error:=0;
+  got_error:=false;
+  if command_level=1 then
+    prev_stop_breakpoint_number:=0
+  else
+    prev_stop_breakpoint_number:=stop_breakpoint_number;
+
+  stop_breakpoint_number:=0;
+  { Trap quit commands }
+  s2:=s;
+  while (length(s2)>0) and ((s2[1]=' ') or (s2[1]=#9)) do
+    s2:=copy(s2,2,255);
+  if (length(s2)>0) and
+     (UpCase(s2[1])='Q') and
+     ((length(s2)=1) or
+      (s2[2]=' ') or
+      ((UpCase(s2[2])='U') and
+      ((length(s2)=2) or
+       (s2[3]=' ') or
+       ((UpCase(s2[3])='I') and
+        ((length(s2)=3) or
+         (s2[4]=' ') or
+         ((UpCase(s2[4])='T') and
+          ((length(s2)=4) or
+           (s2[5]=' ')
+     ))))))) then
+    begin
+      if not AllowQuit then
+        exit;
+    end;
+{$ifdef DebugCommand}
+  Debug('start of handle_gdb_command ('+s+')');
+{$endif}
+  top_level_val:=setjmp(error_return);
+  if top_level_val=0 then
+   begin
+     quit_return:=error_return;
+     mask:=longint($ffffffff);
+     catch_errors(@gdbint_execute_command,@command,0,mask);
+{$ifdef go32v2}
+     reload_fs;
+{$endif go32v2}
+   end
+  else
+{$ifdef Verbose}
+    Debug('error longjmp in handle_gdb_command ('+s+')');
+{$endif}
+   ;
+{$ifdef DebugCommand}
+  Debug('end of handle_gdb_command ('+s+')');
+{$endif}
+  quit_return:=old_quit_return;
+  error_return:=old_error_return;
+  dec(command_level);
+  stop_breakpoint_number:=prev_stop_breakpoint_number;
+  SetFPUState(control);
+end;
+
+
+procedure tgdbinterface.resize_frames;
+var
+  i : longint;
+  new_frames : ppframeentry;
+begin
+  if (frame_count>=frame_size) then
+   begin
+     getmem(new_frames,sizeof(pointer)*(frame_count+1));
+     for i:=0 to frame_size-1 do
+       new_frames[i]:=frames[i];
+     if assigned(frames) then
+       freemem(frames,sizeof(pointer)*frame_size);
+     frames:=new_frames;
+     frame_size:=frame_count+1;
+     for i:=frame_count to frame_size-1 do
+      frames[i]:=new(pframeentry,init);
+  end;
+end;
+
+
+function tgdbinterface.add_frameentry:pframeentry;
+begin
+  resize_frames;
+  add_frameentry:=frames[frame_count];
+  inc(frame_count);
+end;
+
+function tgdbinterface.get_frameentry(level : longint) : pframeentry;
+begin
+  { only climb values one by one PM }
+  if level>=frame_count then
+    resize_frames;
+  get_frameentry:=frames[level];
+  frames[level]^.clear;
+  if level>=frame_count then
+    inc(frame_count);
+end;
+
+
+procedure tgdbinterface.clear_frames;
+var
+  i : longint;
+begin
+  for i:=0 to frame_size-1 do
+   dispose(frames[i],done);
+  freemem(frames,sizeof(pointer)*Frame_size);
+  frame_count:=0;
+  frame_size:=0;
+end;
+
+function tgdbinterface.get_current_frame : ptrint;
+begin
+  record_frames:=false;
+  gdb_command('f');
+  get_current_frame:=frame_level;
+  record_frames:=true;
+end;
+
+function tgdbinterface.set_current_frame(level : longint) : boolean;
+var
+  s : string;
+begin
+  record_frames:=false;
+  str(level,s);
+  gdb_command('f '+s);
+  if level=frame_level then
+    set_current_frame:=true
+  else
+    set_current_frame:=false;
+  record_frames:=true;
+end;
+
+
+{*****************************************************************************
+                      Highlevel tgdbinterface
+*****************************************************************************}
+
+procedure tgdbinterface.GetAddrSyminfo(addr:ptrint;var si:tsyminfo);
+var
+  sym : symtab_and_line;
+  symbol : psymbol;
+begin
+  sym:=find_pc_line(addr,1);
+  fillchar(si,sizeof(tsyminfo),0);
+  si.address:=addr;
+  si.offset:=addr-sym.pc;
+  if assigned(sym.symtab) then
+   si.fname:=sym.symtab^.filename
+  else
+   si.fname:=nil;
+  si.line:=sym.line;
+  symbol:=find_pc_function(addr);
+  if assigned(symbol) then
+   si.funcname:=symbol^.ginfo._name
+  else
+   si.funcname:=nil;
+end;
+
+
+procedure tgdbinterface.SelectSourceLine(fn:pchar;line:longint);
+begin
+  if assigned(fn) then
+   DoSelectSourceLine(StrPas(fn),line)
+  else
+   DoSelectSourceLine('',line);
+end;
+
+
+procedure tgdbinterface.StartSession;
+begin
+  DoStartSession;
+end;
+
+
+procedure tgdbinterface.BreakSession;
+begin
+  DoBreakSession;
+end;
+
+
+procedure tgdbinterface.EndSession(code:longint);
+begin
+  Debuggee_started:=false;
+  inferior_ptid.pid:=0;
+  DoEndSession(code);
+  if assigned(signal_name) then
+    strdispose(signal_name);
+  signal_name:=nil;
+  if assigned(signal_string) then
+    strdispose(signal_string);
+  signal_string:=nil;
+end;
+
+
+procedure tgdbinterface.DebuggerScreen;
+begin
+{$ifdef Verbose}
+  Debug('|DebuggerScreen|');
+{$endif}
+  if user_screen_shown then
+   DoDebuggerScreen;
+  user_screen_shown:=false;
+end;
+
+
+procedure tgdbinterface.UserScreen;
+begin
+{$ifdef Verbose}
+  Debug('|UserScreen|');
+{$endif}
+  if switch_to_user then
+   begin
+     if (not user_screen_shown) then
+      DoUserScreen;
+     user_screen_shown:=true;
+   end;
+end;
+
+
+
+{---------------------------------------
+          Default Hooks
+---------------------------------------}
+
+procedure tgdbinterface.DoSelectSourceLine(const fn:string;line:longint);
+{$ifdef Verbose}
+var
+  s : string;
+{$endif}
+begin
+{$ifdef Verbose}
+  Str(line,S);
+  Debug('|SelectSource '+fn+':'+s+'|');
+{$endif}
+end;
+
+procedure tgdbinterface.DoStartSession;
+begin
+end;
+
+procedure tgdbinterface.DoBreakSession;
+begin
+end;
+
+procedure tgdbinterface.DoEndSession(code:longint);
+begin
+end;
+
+procedure tgdbinterface.DoUserSignal;
+begin
+end;
+
+procedure tgdbinterface.DoDebuggerScreen;
+begin
+end;
+
+procedure tgdbinterface.DoUserScreen;
+begin
+end;
+
+function  tgdbinterface.AllowQuit : boolean;
+begin
+  AllowQuit:=true;
+end;
+
+var
+  version : array[0..0] of char;cvar;external;
+
+{$ifndef GDB_NEEDS_NO_ERROR_INIT}
+{ doesn't seem to exist anymore. Seems to work fine without }
+procedure error_init;cdecl;external;
+{$endif GDB_NEEDS_NO_ERROR_INIT}
+
+function  GDBVersion : string;
+begin
+  GDBVersion:='GDB '+StrPas(version);
+end;
+
+
+const next_exit : pointer = nil;
+procedure DoneLibGDB;
+begin
+  exitproc:=next_exit;
+end;
+
+{$ifdef go32v2}
+var
+  c_environ : ppchar;external name '_environ';
+  c_argc : longint;external name '___crt0_argc';
+  c_argv : ppchar;external name '___crt0_argv';
+{$endif def go32v2}
+
+procedure InitLibGDB;
+{$ifdef supportexceptions}
+var
+  OldSigInt : SignalHandler;
+{$endif supportexceptions}
+{$ifdef GDB_INIT_HAS_ARGV0}
+var
+  argv0 : pchar;
+{$endif not GDB_INIT_HAS_ARGV0}
+begin
+{$ifdef go32v2}
+  c_environ:=system.envp;
+  c_argc:=system.argc;
+  c_argv:=system.argv;
+{$endif def go32v2}
+{$ifdef supportexceptions}
+{$ifdef go32v2}
+  OldSigInt:=Signal(SIGINT,SignalHandler(@SIG_DFL));
+{$else}
+  {$ifdef Unix}
+    OldSigInt:=fpSignal(SIGINT,SignalHandler(SIG_DFL));
+  {$else}
+    OldSigInt:=Signal(SIGINT,SignalHandler(SIG_DFL));
+  {$endif}
+{$endif}
+{$endif supportexceptions}
+
+  if assigned(gdb_stderr) then
+    ui_file_delete(gdb_stderr);
+  if assigned(gdb_stdout) then
+    ui_file_delete(gdb_stdout);
+  gdb_stderr:=mem_fileopen;
+  gdb_stdout:=mem_fileopen;
+  gdb_stdlog:=gdb_stderr;
+  gdb_stdtarg:=gdb_stderr;
+  set_ui_file_write(gdb_stdout,@gdbint_ui_file_write);
+  set_ui_file_write(gdb_stderr,@gdbint_ui_file_write);
+{$ifndef GDB_NEEDS_NO_ERROR_INIT}
+  error_init;
+{$endif GDB_NEEDS_NO_ERROR_INIT}
+{$ifdef GDB_V6}
+//  gdb_stdtargin := gdb_stdin;
+  gdb_stdtargerr := gdb_stderr;
+{$endif}
+
+  next_exit:=exitproc;
+  exitproc:=@DoneLibGDB;
+{$ifdef GDB_V6}
+  uiout := cli_out_new (gdb_stdout);
+{$endif}
+{$ifdef GDB_INIT_HAS_ARGV0}
+  getmem(argv0,length(paramstr(0))+1);
+  strpcopy(argv0,paramstr(0));
+  gdb_init(argv0);
+  freemem(argv0,length(paramstr(0))+1);
+{$else not GDB_INIT_HAS_ARGV0}
+  gdb_init;
+{$endif not GDB_INIT_HAS_ARGV0}
+{$ifdef supportexceptions}
+  {$ifdef unix}
+    fpsignal(SIGINT,OldSigInt);
+  {$else}
+    Signal(SIGINT,OldSigInt);
+  {$endif}
+{$endif supportexceptions}
+  if setjmp(error_return)=0 then
+    begin
+       quit_return:=error_return;
+       exit;
+    end
+  else
+    begin
+{$ifdef Verbose}
+       Debug('|LongJump to Init|');
+{$endif}
+{$ifdef go32v2}
+       RunError(99);
+{$endif def go32v2}
+    end;
+  WatchDog:=0;
+end;
+
+{$ifdef GDB_HAS_SYSROOT}
+var gdb_sysroot  : pchar; cvar;public;
+    gdb_sysrootc : char;
+    return_child_result : longbool;cvar;public;
+    return_child_result_value : longint;cvar;public;
+    batch_silent : longbool;cvar;public;
+{$endif}
+{$ifdef GDB_HAS_DEBUG_FILE_DIRECTORY}
+var
+  debug_file_directory : pchar; cvar; external;
+{$endif GDB_HAS_DEBUG_FILE_DIRECTORY}
+
+begin
+{$ifdef GDB_HAS_SYSROOT}
+  gdb_sysrootc := #0;
+  gdb_sysroot := @gdb_sysrootc;
+{$endif}
+{$ifdef GDB_HAS_DEBUG_FILE_DIRECTORY}
+  debug_file_directory := '/usr/local/lib';
+{$endif GDB_HAS_DEBUG_FILE_DIRECTORY}
+  gdb_stderr:=nil;
+  gdb_stdout:=nil;
+  InitLibGDB;
+end.

+ 182 - 0
packages/gdbint/src/gdbobjs.inc

@@ -0,0 +1,182 @@
+{
+    Copyright (c) 1999 by Pierre Muller
+
+    direct GDB objects linking for debug info
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+
+{ gdb-version/gdb directory must be in objects path }
+{ use ifdef or ifndef GDB_V416 to change objects needed for
+  different gdb versions }
+
+{$L infcmd.o}
+{$L symtab.o}
+{$L top.o}
+{$L target.o}
+{$L utils.o}
+{$L breakpoi.o}
+{$L corefile.o}
+{$L symfile.o}
+{$L ../libibert/concat.o}
+{$L environ.o}
+{$L eval.o}
+{$L infrun.o}
+{$L blockfra.o}
+{$L findvar.o}
+{$L printcmd.o}
+{$L i386-tde.o}
+{$L minsyms.o}
+{$L stack.o}
+{$L gdbtypes.o}
+{$L valops.o}
+{$L values.o}
+{$L valprint.o}
+{$L language.o}
+{$L source.o}
+{$L i387-tde.o}
+{$L command.o}
+{$L objfiles.o}
+{$L demangle.o}
+{$L ../libibert/cplus-de.o}
+{$L gnu-rege.o}
+{$L c-typepr.o}
+{$L typeprin.o}
+{$L init.o}
+{$L parse.o}
+{$L serial.o}
+{$L ../libibert/getrunti.o}
+{$L ../readline/complete.o}
+{$L ../readline/readline.o}
+{$L ../readline/history.o}
+{$L ../gdb/version.o}
+{$L inflow.o}
+{$L ../readline/tilde.o}
+{$L ../readline/bind.o}
+{$L mem-brea.o}
+{$L ../libibert/strsigna.o}
+{$L ../bfd/bfd.o}
+{$L ../libibert/vasprint.o}
+{$L ch-lang.o}
+{$ifdef GDB_V416}
+{$L go32targ.o}
+{$else}
+{$L go32-nat.o}
+{$endif}
+{$L thread.o}
+{$L valarith.o}
+{$L expprint.o}
+{$L exec.o}
+{$L ../bfd/corefile.o}
+{$L ../libibert/obstack.o}
+{$L ../bfd/section.o}
+{$L complain.o}
+{$L ../libibert/argv.o}
+{$L ../bfd/opncls.o}
+{$L ../bfd/format.o}
+{$L bcache.o}
+{$L symmisc.o}
+{$L f-lang.o}
+{$L f-valpri.o}
+{$L cp-valpr.o}
+{$L ../opcodes/dis-buf.o}
+{$L ../opcodes/i386-dis.o}
+{$L scm-lang.o}
+{$L ../libibert/basename.o}
+{$L ../libibert/floatfor.o}
+{$L copying.o}
+{$L ser-go32.o}
+{$L remote.o}
+{$L dcache.o}
+{$L remote-u.o}
+{$L buildsym.o}
+{$L maint.o}
+{$L dbxread.o}
+{$L coffread.o}
+{$L elfread.o}
+{$L mipsread.o}
+{$L stabsrea.o}
+{$L c-lang.o}
+{$L m2-lang.o}
+{$L nlmread.o}
+{$L mdebugre.o}
+{$L os9kread.o}
+{$L p-lang.o}
+{$L p-valpri.o}
+{$L ../readline/display.o}
+{$L ../readline/keymaps.o}
+{$L ../readline/rltty.o}
+{$L ../readline/vi_mode.o}
+{$L ../readline/funmap.o}
+{$L ../readline/parens.o}
+{$L ../bfd/cache.o}
+{$L ch-exp.o}
+{$L ch-typep.o}
+{$L ch-valpr.o}
+{$L ../bfd/libbfd.o}
+{$L ../bfd/archures.o}
+{$L ../bfd/targets.o}
+{$L ../bfd/binary.o}
+{$L f-exp_ta.o}
+{$L f-typepr.o}
+{$L c-valpri.o}
+{$L scm-exp.o}
+{$L c-exp_ta.o}
+{$L scm-valp.o}
+{$L dwarfrea.o}
+{$L m2-exp_t.o}
+{$L m2-typep.o}
+{$L m2-valpr.o}
+{$L p-exp_ta.o}
+{$L p-typepr.o}
+{$L ../readline/isearch.o}
+{$L ../readline/search.o}
+{$L ../bfd/cpu-i386.o}
+{$L ../bfd/coff-go3.o}
+{$L ../bfd/srec.o}
+{$L ../bfd/tekhex.o}
+{$L ../bfd/ihex.o}
+{$L ../bfd/syms.o}
+{$L ../bfd/archive.o}
+{$L ../bfd/reloc.o}
+{$L ../bfd/linker.o}
+{$L ../bfd/coffgen.o}
+{$L ../bfd/cofflink.o}
+{$L ../libibert/hex.o}
+{$L ../bfd/hash.o}
+{$L ../bfd/stabs.o}
+{$ifdef GDB_V418}
+{$L ../readline/histexpa.o}
+{$L ../readline/histfile.o}
+{$L gdbarch.o}
+{$L tracepoi.o}
+{$L ax-gdb.o}
+{$L jv-lang.o}
+{$L ../readline/input.o}
+{$L ../readline/util.o}
+{$L ../readline/terminal.o}
+{$L ../readline/undo.o}
+{$L ../readline/macro.o}
+{$L ../readline/shell.o}
+{$L ../readline/nls.o}
+{$L ../readline/kill.o}
+{$L ../libibert/xstrerro.o}
+{$L ../libibert/objalloc.o}
+{$L dwarf2re.o}
+{$L ../bfd/coff-stg.o}
+{$L ../bfd/i386aout.o}
+{$L ../libibert/fnmatch.o}
+{$L ../readline/histsear.o}
+{$L ax-gener.o}
+{$L jv-exp_t.o}
+{$L jv-typep.o}
+{$L jv-valpr.o}
+{$L ../bfd/aout32.o}
+{$L ../bfd/stab-sym.o}
+{$endif GDB_V418}

+ 104 - 0
packages/gdbint/src/gdbver.pp

@@ -0,0 +1,104 @@
+{
+
+  Program to detect the version of libgdb that will be
+  used for linking
+}
+program find_gdb_version;
+
+{$R-}
+
+{$ifdef unix}
+  {$Linklib c}
+{$endif}
+
+{$LINKLIB libgdb.a}
+
+uses
+  strings;
+
+const
+  { This variable should be change with change in GDB CVS PM }
+  Current_cvs_version : longint = 503;
+  Max_version_length = 255;
+
+const
+  output_file:string='';
+
+var
+  version : array[0..0] of char;cvar;external;
+  gdbversion : pchar;
+  subver_str : string;
+  i, version_number,
+  subversion_number : longint;
+  subsubversion_number : longint;
+  error : word;
+  only_ver : boolean;
+  o : text;
+
+begin
+  only_ver:=(Paramcount>0) and (ParamStr(1)='-n');
+  if (paramcount>=2) and (paramstr(1)='-o') then
+    begin
+      only_ver:=true;
+      output_file:=paramstr(2);
+    end;
+  getmem(gdbversion,Max_version_length+1);
+  strlcopy(gdbversion,@version,Max_version_length);
+  gdbversion[Max_version_length]:=#0;
+  if (gdbversion[0] in ['4','5','6','7','8','9']) and (gdbversion[1]='.') then
+    begin
+      if not only_ver then
+        Writeln('GDB version is ',pchar(@version));
+      version_number:=ord(gdbversion[0])-ord('0');
+      i:=2;
+      subver_str:='';
+      while gdbversion[i] in ['0'..'9'] do
+        begin
+          subver_str:=subver_str+gdbversion[i];
+          inc(i);
+        end;
+      val(subver_str,subversion_number,error);
+      inc(i);
+      subver_str:='';
+      while gdbversion[i] in ['0'..'9'] do
+        begin
+          subver_str:=subver_str+gdbversion[i];
+          inc(i);
+        end;
+      if subver_str<>'' then
+        val(subver_str,subsubversion_number,error);
+      { 5.02.90 is a pretest of 5.03.. PM }
+      if subsubversion_number>=90 then
+        inc(subversion_number);
+      if (error=0) and (subversion_number>=0) and
+         (subversion_number<=99) then
+        version_number:=version_number*100+subversion_number;
+    end
+  else if (gdbversion[0]='2') and (gdbversion[1]='0') and
+          (gdbversion[2] in ['0'..'9']) and (gdbversion[3] in ['0'..'9']) then
+    begin
+      { CVS version from 2000 to 2099,
+        assume current_cvs_version  PM }
+      version_number:=Current_cvs_version;
+    end
+  else
+    begin
+      if not only_ver then
+        Writeln('Unsupported GDB version');
+      version_number:=0;
+    end;
+  freemem(gdbversion);
+  if output_file<>'' then
+    begin
+      assign(o,output_file);
+      rewrite(o);
+      writeln(o,'{$define GDB_V',version_number,'}');
+      close(o);
+    end
+  else
+    begin
+      if only_ver then
+        Write(version_number);
+      Halt(version_number);
+    end;
+end.

+ 1 - 0
packages/gdbint/src/gdbver_nogdb.inc

@@ -0,0 +1 @@
+{$define GDB_V606}

+ 77 - 0
packages/gdbint/src/symify.pp

@@ -0,0 +1,77 @@
+{
+    Copyright (c) 1998 by Peter Vreman
+
+    Translate backtrace addresses into file and line info
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+program symify;
+uses GDBInt;
+
+var
+  gdb : tgdbinterface;
+
+
+procedure processlog(const fn:string);
+var
+  t    : text;
+  hs,s : string;
+  code : word;
+  i,
+  addr : longint;
+  sym  : tsyminfo;
+begin
+  assign(t,fn);
+  {$I-}
+   reset(t);
+  {$I+}
+  if ioresult<>0 then
+   exit;
+  while not eof(t) do
+   begin
+     readln(t,s);
+     i:=pos('0x',s);
+     if i=3 then
+      begin
+        hs:='$'+Copy(s,5,8);
+        Val(hs,addr,code);
+        if code=0 then
+         begin
+           gdb.GetAddrSymInfo(addr,sym);
+           Write(Copy(s,1,12));
+           if assigned(sym.funcname) then
+             write(' in ',sym.funcname,'+',sym.offset);
+           if assigned(sym.fname) then
+             writeln(' ',sym.fname,':',sym.line)
+           else
+             writeln;
+         end
+        else
+         writeln(s);
+      end
+     else
+      writeln(s);
+   end;
+  close(t);
+end;
+
+
+begin
+  if paramcount<2 then
+   begin
+     writeln('usage: symify <log> <file>');
+     halt(1);
+   end;
+  gdb.init;
+  writeln('loading ',paramstr(2));
+  gdb.gdb_command('file '+paramstr(2));
+  writeln('parsing ',paramstr(1));
+  processlog(paramstr(1));
+  gdb.done;
+end.

+ 55 - 0
packages/gdbint/src/testgdb.pp

@@ -0,0 +1,55 @@
+{
+    Copyright (c) 1998 by Peter Vreman
+
+    Small example program to the GDB
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+program testgdb;
+uses gdbcon;
+var
+  last,s,parafile : string;
+  gdb : tgdbcontroller;
+begin
+  gdb.init;
+  if paramcount=1 then
+    parafile:=paramstr(1)
+  else
+    parafile:='test';
+  gdb.loadfile(parafile);
+  Writeln('Welcome to the pascal GDB...');
+  Writeln('Type "q" to exit...');
+  last:='';
+  repeat
+    write('>');
+    readln(s);
+    if (s='a') then
+     gdb.starttrace
+    else
+     if (s='s') then
+      gdb.tracestep
+    else
+     if (s='n') then
+      gdb.tracenext
+    else
+     if (s='q') then
+      break
+    else
+     begin
+       if s='' then
+         s:=last;
+       GDB.Command(s);
+       GDB.WriteErrorBuf;
+       GDB.WriteOutputBuf;
+       last:=s;
+     end;
+  until false;
+  gdb.done;
+  Writeln('End of pascal GDB...');
+end.