瀏覽代碼

+ Initial implementation

michael 22 年之前
父節點
當前提交
485cedd2d5

+ 1191 - 0
utils/debugsvr/console/Makefile

@@ -0,0 +1,1191 @@
+#
+# Don't edit, this file is generated by FPCMake Version 1.1 [2002/10/05]
+#
+default: all
+MAKEFILETARGETS=linux
+override PATH:=$(subst \,/,$(PATH))
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+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 cygwin,$(MACHTYPE)),)
+inCygWin=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),netbsd)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),openbsd)
+BSDhier=1
+endif
+ifdef inUnix
+BATCHEXT=.sh
+else
+ifdef inOS2
+BATCHEXT=.cmd
+else
+BATCHEXT=.bat
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifneq ($(findstring sh.exe,$(SHELL)),)
+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))
+FPC:=$(shell $(FPCPROG) -PB)
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=ppc386
+endif
+else
+override FPC=ppc386
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+ifndef FPC_VERSION
+FPC_VERSION:=$(shell $(FPC) -iV)
+endif
+export FPC FPC_VERSION
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+COMPILERINFO:=$(shell $(FPC) -iSP -iTP -iSO -iTO)
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 1,$(COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 2,$(COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 3,$(COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 4,$(COMPILERINFO))
+endif
+else
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(shell $(FPC) -iSP)
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(shell $(FPC) -iTP)
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(shell $(FPC) -iSO)
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(shell $(FPC) -iTO)
+endif
+endif
+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
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(OS_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(OS_TARGET), please run fpcmake first)
+endif
+endif
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE 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=c:/pp
+endif
+endif
+endif
+endif
+ifndef CROSSDIR
+CROSSDIR:=$(FPCDIR)/cross/$(FULL_TARGET)
+endif
+ifndef CROSSTARGETDIR
+CROSSTARGETDIR=$(CROSSDIR)/$(FULL_TARGET)
+endif
+ifdef CROSSCOMPILE
+UNITSDIR:=$(wildcard $(CROSSTARGETDIR)/units)
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+else
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override TARGET_PROGRAMS+=debugserver
+override TARGET_RSTS+=debugserver
+override INSTALL_FPCPACKAGE=y
+override COMPILER_UNITDIR+=..
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifeq ($(OS_TARGET),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),freebsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),netbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),openbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),sunos)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),qnx)
+UNIXINSTALLDIR=1
+endif
+else
+ifeq ($(OS_SOURCE),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),freebsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),netbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),openbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),sunos)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),qnx)
+UNIXINSTALLDIR=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXINSTALLDIR
+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 INSTALL_BASEDIR
+ifdef UNIXINSTALLDIR
+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 UNIXINSTALLDIR
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(OS_TARGET)
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+ifdef CROSSCOMPILE
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/units
+else
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(OS_TARGET)
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXINSTALLDIR
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXINSTALLDIR
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+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 UNIXINSTALLDIR
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+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 UNIXINSTALLDIR
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+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
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(FULL_SOURCE))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+STATICLIBPREFIX=libp
+RSTEXT=.rst
+FPCMADE=fpcmade
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+FPCMADE=fpcmade.v1
+PACKAGESUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+FPCMADE=fpcmade.dos
+ZIPSUFFIX=go32
+endif
+ifeq ($(OS_TARGET),linux)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.lnx
+ZIPSUFFIX=linux
+endif
+ifeq ($(OS_TARGET),freebsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.freebsd
+ZIPSUFFIX=freebsd
+endif
+ifeq ($(OS_TARGET),netbsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.netbsd
+ZIPSUFFIX=netbsd
+endif
+ifeq ($(OS_TARGET),openbsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.openbsd
+ZIPSUFFIX=openbsd
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.w32
+ZIPSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.os2
+ZIPSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.asm
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+FPCMADE=fpcmade.amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+FPCMADE=fpcmade.ata
+endif
+ifeq ($(OS_TARGET),beos)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.be
+ZIPSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.sun
+ZIPSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.qnx
+ZIPSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppn
+OEXT=.on
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+FPCMADE=fpcmade.nw
+ZIPSUFFIX=nw
+EXEEXT=.nlm
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+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=
+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=
+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=
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG=
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG=
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef ECHOREDIR
+ECHOREDIR:=$(subst /,$(PATHSEP),$(ECHO))
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -rfp
+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=
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE=
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG=
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG=
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=as
+LDNAME=ld
+ARNAME=ar
+RCNAME=rc
+ifeq ($(OS_TARGET),win32)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+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$(BATCHEXT)
+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=vI
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl 
+ifeq ($(OS_TARGET),linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/$(OS_TARGET)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/$(OS_TARGET)
+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
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+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
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+else
+FPCCPUOPT:=
+endif
+override FPCOPT+=-Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-OG2p3
+endif
+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 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 COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(OS_SOURCE),$(OS_TARGET))
+EXECPPAS:=@$(PPAS)
+endif
+endif
+.PHONY: fpc_exes
+ifdef TARGET_PROGRAMS
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+fpc_exes: $(EXEFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release
+$(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 .pp .rc .res
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.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)))
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES)))
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
+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$(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_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)))
+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)
+fpc_distclean: clean
+ifdef COMPILER_UNITTARGETDIR
+TARGETDIRCLEAN=fpc_clean
+endif
+fpc_cleanall: $(CLEANTARGET) $(TARGETDIRCLEAN)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+.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)
+	@$(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)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(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
+examples:
+shared:
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+zipdistinstall:
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif

+ 18 - 0
utils/debugsvr/console/Makefile.fpc

@@ -0,0 +1,18 @@
+#
+#   Makefile.fpc for debugserver - Console interface
+#
+
+[target]
+programs=debugserver
+rsts=debugserver
+
+[clean]
+
+[compiler]
+unitdir=..
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../..

+ 237 - 0
utils/debugsvr/console/debugserver.pp

@@ -0,0 +1,237 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    Console and system log version of debug server.
+    
+    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.
+
+ **********************************************************************}
+
+{$mode objfpc}
+{$h+}
+
+program debugserver;
+
+Uses 
+  msgintf,debugserverintf,linux,classes,sysutils,getopts,systemlog;
+
+resourcestring
+  SUnknownOption = 'Unknown option : %s';
+  SMessageFrom   = '%s [%s] : %s ';
+  
+Var
+  UseSyslog : Boolean;  
+  
+Const
+  LogLevel  : Integer = log_debug;
+  
+Procedure LogEvent(Const Event: TDebugEvent);
+
+Var
+  S : String;
+
+begin
+  With Event do
+    begin
+    S:=DateTimeToStr(TimeStamp)+' : '+Format(SMessageFrom,[MsgTypes[LogCode],Client.Peer,Event]);
+    If UseSysLog then
+      Syslog(LogLevel,Pchar(S),[])
+    else
+      Writeln(S);
+    end;  
+end;
+  
+Function GetFDS(Var AFDS : tfdset) : Integer;
+
+Var
+  I : Integer;
+  
+begin
+  Result:=0;
+  fd_zero(AFDS);
+  For I:=0 to FClients.Count-1 do
+    With TClient(FClients[i]) do
+      begin
+      If Handle>Result then
+        Result:=Handle;
+      fd_set(Handle,AFDS);
+      end;
+  Inc(Result);    
+end;
+
+Procedure StartReading;
+
+Var
+  ReadFDS  : tfdset;
+  I,maxfds : Integer;
+  TimeOut  : TTimeVal;
+
+begin
+  Repeat
+    maxfds:=GetFDS(ReadFDS);
+    TimeOut.sec:=0;
+    TimeOut.usec:=10000;
+    Maxfds:=Select(maxfds,@ReadFDS,Nil,Nil,@TimeOut);
+    If MaxFds>0 then
+      begin
+      For I:=FClients.Count-1 downto 0 do
+        If FD_IsSet(TClient(FClients[i]).Handle,ReadFDS) then
+          ReadMessage(TClient(FClients[i]).Handle);
+      end;
+    // Check for new connection.
+    CheckNewConnection;
+  Until (FClients.Count=0);
+end;
+
+procedure Wait;
+
+Var
+  TV,TR : TimeSpec;
+
+begin
+  tv.tv_sec:=1;
+  tv.tv_nsec:=0;
+  nanosleep(tv,tr);
+end;
+
+Procedure HandleConnections;
+
+begin
+  Repeat
+    If CheckNewConnection<>Nil then
+      StartReading
+    else  
+      Wait; 
+  Until quit;  
+end;
+
+Var
+  OldHUPHandler,
+  OldINTHandler,
+  OldQUITHandler,
+  OldTERMHandler : SigActionRec;
+
+Procedure HandleSig(Sig : Longint); Cdecl;
+
+Var
+  OH : SignalHandler;
+
+begin
+  Quit:=True;
+  Case Sig of
+    SIGHUP  : OH:=OldHUPHandler.handler.sh;
+    SIGTERM : OH:=OldTERMHandler.handler.sh;
+    SIGQUIT : OH:=OldQUITHandler.handler.sh;
+    SIGINT  : OH:=OldINTHandler.handler.sh;
+  else
+    OH:=Nil;
+  end;    
+  If (OH<>SignalHandler(SIG_DFL)) then
+    OH(Sig);  
+end;
+
+Procedure SetupSignals;
+  
+  Procedure SetupSig (Sig : Longint; Var OH : SigactionRec);
+  
+  Var
+    Act : SigActionRec;
+  begin
+    Act.handler.sh:=@HandleSig;
+    Act.sa_mask:=0;
+    Act.SA_FLAGS:=0;
+    Act.Sa_restorer:=Nil;
+    SigAction(Sig,@Act,@OH);
+    If LinuxError<>0 then
+      begin
+      Writeln(stderr,SErrFailedToSetSignalHandler);
+      Halt(1)
+      end;
+    end;
+begin
+  SetupSig(SIGTERM,OldTERMHandler);
+  SetupSig(SIGQUIT,OldQUITHandler);
+  SetupSig(SIGINT,OldINTHandler);
+  SetupSig(SIGHUP,OldHUPHandler);
+end;  
+
+Procedure Usage;
+
+begin
+  Writeln('Usage : debugserver [options]');
+  Writeln('where options is one of');
+  Writeln(' -h            this help');
+  Writeln(' -s socket     use unix socket');
+  Writeln(' -l            uses syslog instead of standard output');
+  Halt(1);
+end;
+
+Procedure ProcessOptions;
+
+Var
+  C : Char;
+  I : Integer;
+  
+begin
+  UseSyslog:=False;
+  Repeat
+    C:=getopt('hl::s:');
+    case c of
+      'h' : Usage;
+      's' : DebugSocket:=OptArg;
+      'l' : begin
+            UseSysLog:=True;
+            LogLevel:=StrToIntdef(OptArg,LogLevel);
+            end;
+      '?' : begin
+            Writeln(Format(SUnknownOption,[OptOpt]));
+            Usage;
+            end;
+    end;
+  Until (C=EndOfOptions);  
+  if OptInd<=ParamCount then
+    begin
+    For I:=OptInd to ParamCount do
+       Writeln(Format(SUnknownOption,[Paramstr(i)]));
+    Usage;   
+    end;   
+end;
+
+Procedure SetupSysLog;
+
+Var
+  Prefix : String;
+
+begin
+ prefix:=format('DebugServer[%d] ',[GetPID]);
+ OpenLog(pchar(prefix),LOG_NOWAIT,LOG_DEBUG);
+end;
+
+Procedure CloseSyslog;
+
+begin
+  CloseLog;
+end;
+
+begin
+  ProcessOptions;
+  SetupSignals;
+  If UseSysLog then
+    SetupSyslog;
+  OpenDebugServer;
+  DebugLogCallback:=@LogEvent;
+  Try
+    HandleConnections;
+  Finally  
+    CloseDebugServer;
+    If UseSyslog then
+      CloseSyslog;
+  end;
+end.

+ 1203 - 0
utils/debugsvr/gtk/Makefile

@@ -0,0 +1,1203 @@
+#
+# Don't edit, this file is generated by FPCMake Version 1.1 [2002/10/05]
+#
+default: all
+MAKEFILETARGETS=linux
+override PATH:=$(subst \,/,$(PATH))
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+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 cygwin,$(MACHTYPE)),)
+inCygWin=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),netbsd)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),openbsd)
+BSDhier=1
+endif
+ifdef inUnix
+BATCHEXT=.sh
+else
+ifdef inOS2
+BATCHEXT=.cmd
+else
+BATCHEXT=.bat
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifneq ($(findstring sh.exe,$(SHELL)),)
+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))
+FPC:=$(shell $(FPCPROG) -PB)
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=ppc386
+endif
+else
+override FPC=ppc386
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+ifndef FPC_VERSION
+FPC_VERSION:=$(shell $(FPC) -iV)
+endif
+export FPC FPC_VERSION
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+COMPILERINFO:=$(shell $(FPC) -iSP -iTP -iSO -iTO)
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 1,$(COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 2,$(COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 3,$(COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 4,$(COMPILERINFO))
+endif
+else
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(shell $(FPC) -iSP)
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(shell $(FPC) -iTP)
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(shell $(FPC) -iSO)
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(shell $(FPC) -iTO)
+endif
+endif
+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
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(OS_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(OS_TARGET), please run fpcmake first)
+endif
+endif
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE 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=c:/pp
+endif
+endif
+endif
+endif
+ifndef CROSSDIR
+CROSSDIR:=$(FPCDIR)/cross/$(FULL_TARGET)
+endif
+ifndef CROSSTARGETDIR
+CROSSTARGETDIR=$(CROSSDIR)/$(FULL_TARGET)
+endif
+ifdef CROSSCOMPILE
+UNITSDIR:=$(wildcard $(CROSSTARGETDIR)/units)
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+else
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override TARGET_PROGRAMS+=debugserver
+override TARGET_UNITS+=frmabout frmmain bitmapdata
+override TARGET_RSTS+=frmabout frmmain
+override INSTALL_FPCPACKAGE=y
+override COMPILER_UNITDIR+=..
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifeq ($(OS_TARGET),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),freebsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),netbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),openbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),sunos)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),qnx)
+UNIXINSTALLDIR=1
+endif
+else
+ifeq ($(OS_SOURCE),linux)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),freebsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),netbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_SOURCE),openbsd)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),sunos)
+UNIXINSTALLDIR=1
+endif
+ifeq ($(OS_TARGET),qnx)
+UNIXINSTALLDIR=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXINSTALLDIR
+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 INSTALL_BASEDIR
+ifdef UNIXINSTALLDIR
+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 UNIXINSTALLDIR
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(OS_TARGET)
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+ifdef CROSSCOMPILE
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/units
+else
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(OS_TARGET)
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXINSTALLDIR
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXINSTALLDIR
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+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 UNIXINSTALLDIR
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+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 UNIXINSTALLDIR
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+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
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(FULL_SOURCE))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+STATICLIBPREFIX=libp
+RSTEXT=.rst
+FPCMADE=fpcmade
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+FPCMADE=fpcmade.v1
+PACKAGESUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+FPCMADE=fpcmade.dos
+ZIPSUFFIX=go32
+endif
+ifeq ($(OS_TARGET),linux)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.lnx
+ZIPSUFFIX=linux
+endif
+ifeq ($(OS_TARGET),freebsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.freebsd
+ZIPSUFFIX=freebsd
+endif
+ifeq ($(OS_TARGET),netbsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.netbsd
+ZIPSUFFIX=netbsd
+endif
+ifeq ($(OS_TARGET),openbsd)
+EXEEXT=
+HASSHAREDLIB=1
+FPCMADE=fpcmade.openbsd
+ZIPSUFFIX=openbsd
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.w32
+ZIPSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+FPCMADE=fpcmade.os2
+ZIPSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.asm
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+FPCMADE=fpcmade.amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+FPCMADE=fpcmade.ata
+endif
+ifeq ($(OS_TARGET),beos)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.be
+ZIPSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.sun
+ZIPSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+FPCMADE=fpcmade.qnx
+ZIPSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppn
+OEXT=.on
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+FPCMADE=fpcmade.nw
+ZIPSUFFIX=nw
+EXEEXT=.nlm
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+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=
+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=
+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=
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG=
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG=
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef ECHOREDIR
+ECHOREDIR:=$(subst /,$(PATHSEP),$(ECHO))
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -rfp
+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=
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE=
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG=
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG=
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=as
+LDNAME=ld
+ARNAME=ar
+RCNAME=rc
+ifeq ($(OS_TARGET),win32)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+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$(BATCHEXT)
+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=vI
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl 
+ifeq ($(OS_TARGET),linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/$(OS_TARGET)/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/$(OS_TARGET)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/$(OS_TARGET)
+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
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+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
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+else
+FPCCPUOPT:=
+endif
+override FPCOPT+=-Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-OG2p3
+endif
+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 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 COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(OS_SOURCE),$(OS_TARGET))
+EXECPPAS:=@$(PPAS)
+endif
+endif
+.PHONY: fpc_units
+ifdef TARGET_UNITS
+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: $(UNITPPUFILES)
+.PHONY: fpc_exes
+ifdef TARGET_PROGRAMS
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+fpc_exes: $(EXEFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release
+$(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 .pp .rc .res
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.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)))
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES)))
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
+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$(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_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)))
+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)
+fpc_distclean: clean
+ifdef COMPILER_UNITTARGETDIR
+TARGETDIRCLEAN=fpc_clean
+endif
+fpc_cleanall: $(CLEANTARGET) $(TARGETDIRCLEAN)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+.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)
+	@$(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)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(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
+examples:
+shared:
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall:
+zipinstall:
+zipsourceinstall:
+zipexampleinstall:
+zipdistinstall:
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+debugserver$(EXEEXT): frmabout$(PPUEXT) frmmain$(PPUEXT) bitmapdata$(PPUEXT) debugserver.pp
+	$(COMPILER) debugserver.pp

+ 23 - 0
utils/debugsvr/gtk/Makefile.fpc

@@ -0,0 +1,23 @@
+#
+#   Makefile.fpc for debugserver - GTK interface
+#
+
+[target]
+units=frmabout frmmain bitmapdata
+programs=debugserver
+rsts=frmabout frmmain
+
+[clean]
+
+[compiler]
+unitdir=..
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../../..
+
+[rules]
+debugserver$(EXEEXT): frmabout$(PPUEXT) frmmain$(PPUEXT) bitmapdata$(PPUEXT) debugserver.pp
+	$(COMPILER) debugserver.pp

+ 374 - 0
utils/debugsvr/gtk/bitmapdata.pp

@@ -0,0 +1,374 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    Bitmaps for toolbar buttons.
+    
+    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.
+
+ **********************************************************************}
+
+{$mode objfpc}
+{$h+}
+Unit bitmapdata;
+
+Interface
+
+  uses fpgtk,SysUtils;
+
+Const
+  BitmapFileNames : Array[1..10] of AnsiString = (
+  'clear',
+  'pause',
+  'run',
+  'close',
+  'save',
+  'connect',
+  'disconnect',
+  'info',
+  'warning',
+  'error'
+  );
+
+{ Auto bitmap data }
+  BitmapDataclear : Array[0..30-6] of AnsiString = ( // clear.xpm 
+    '16 16 8 1',
+    '  c black',
+    '. c #830000',
+    'X c red',
+    'o c #838100',
+    'O c #ff8100',
+    '+ c #ffd200',
+    '@ c yellow',
+    '# c white',
+    { pixels }
+    '############## @',
+    '############# @@',
+    '### ######## @@@',
+    '########### @@@O',
+    '#### ##### @ @+o',
+    '######### @ @ o ',
+    '##  # ## X @ o #',
+    '#  # ## XXX o ##',
+    '#  ### XXXX. ###',
+    '#### # XXX. ####',
+    '##  # # X. #####',
+    '#  ##  #  ######',
+    '  ###  #########',
+    '  ##   ## ######',
+    '        ### ####',
+    '#    #   #######'
+  ); 
+ 
+  BitmapDatapause : Array[0..33-6] of AnsiString = ( // pause.xpm 
+    '16 16 11 1',
+    '  c black',
+    '. c #7b7d7b',
+    'X c #008100',
+    'o c #00ba00',
+    'O c green',
+    '+ c #ee7dee',
+    '@ c #bdbebd',
+    '# c #eeb6ee',
+    '$ c #ffbeff',
+    '% c #fff6ff',
+    '& c white',
+    { pixels }
+    '&&&&&     &&&&&&',
+    '&&&  &&&@%  &&&&',
+    '&& &%.   .%$ &&&',
+    '& &% &O&O& %@ &&',
+    '& % &     & % &&',
+    ' &.&  &&O  &.% &',
+    ' & O &OOoO O @ &',
+    ' & & OOOOX & . &',
+    ' $ O OoOoX O . &',
+    ' %.&  OXX  &.+ &',
+    '& % &     & # &&',
+    '& @% &O&O& +. &&',
+    '&& @%.   .#. &&&',
+    '&&&  %@..+  &&&&',
+    '&&&&&     &&&&&&',
+    '&&&&&&&&&&&&&&&&'
+  ); 
+ 
+  BitmapDatarun : Array[0..32-6] of AnsiString = ( // run.xpm 
+    '16 16 10 1',
+    '  c black',
+    '. c #7b7d7b',
+    'X c #008100',
+    'o c #00ba00',
+    'O c #ee7dee',
+    '+ c #bdbebd',
+    '@ c #eeb6ee',
+    '# c #ffbeff',
+    '$ c #fff6ff',
+    '% c white',
+    { pixels }
+    '%%%%%     %%%%%%',
+    '%%%  %%%+$  %%%%',
+    '%% %$.   .$# %%%',
+    '% %$       $+ %%',
+    '% $         $ %%',
+    ' %.   +$X   .$ %',
+    ' %   +oXoX   + %',
+    ' %   XXXXX   . %',
+    ' #   XoXoX   . %',
+    ' $.   XXX   .O %',
+    '% $         @ %%',
+    '% +$       O. %%',
+    '%% +$.   .@. %%%',
+    '%%%  $+..O  %%%%',
+    '%%%%%     %%%%%%',
+    '%%%%%%%%%%%%%%%%'
+  ); 
+ 
+  BitmapDataclose : Array[0..29-6] of AnsiString = ( // close.xpm 
+    '16 16 7 1',
+    '  c black',
+    '. c #7b7d7b',
+    'X c #8b7d8b',
+    'o c #8b858b',
+    'O c #bdbebd',
+    '+ c #cdc6cd',
+    '@ c white',
+    { pixels }
+    '@@@@@     @@@@@@',
+    '@@@@@ ... @@@@@@',
+    '@@           @@@',
+    '@@ @O+OX...X @@@',
+    '@@           @@@',
+    '@@@ . . . . @@@@',
+    '@@@ @ + o o @@@@',
+    '@@  @ O O .  @@@',
+    '@ @ @ + o o @ @@',
+    '@@@ @ O O . @@@@',
+    '@@@ @ + o o @@@@',
+    '@@@ @ O O . @@@@',
+    '@@@ @ + o o @@@@',
+    '@@@ @ O O . @@@@',
+    '@@@ @.o.o.o @@@@',
+    '@@@         @@@@'
+  ); 
+ 
+  BitmapDatasave : Array[0..30-6] of AnsiString = ( // save.xpm 
+    '16 16 8 1',
+    '  c black',
+    '. c #7b7d7b',
+    'X c blue',
+    'o c red',
+    'O c #bdbebd',
+    '+ c #ffbeff',
+    '@ c #ffceff',
+    '# c white',
+    { pixels }
+    '      ##########',
+    ' ####  #ooooo###',
+    ' # +# # ##@ooo##',
+    ' #### ## ##ooo##',
+    ' #  #     #ooo##',
+    ' ########ooooooo',
+    ' #    # # ooooo#',
+    ' ######## #ooo##',
+    ' #  #  O XXXoXX ',
+    ' ####### ###### ',
+    ' ####### ###### ',
+    '                ',
+    '########        ',
+    '########  O#O#  ',
+    '########  # #O  ',
+    '########  . ..  '
+  ); 
+ 
+  BitmapDataconnect : Array[0..28-6] of AnsiString = ( // connect.xpm 
+    '16 16 6 1',
+    '  c black',
+    '. c #7b7d7b',
+    'X c none',
+    'o c yellow',
+    'O c #bdbebd',
+    '+ c white',
+    { pixels }
+    'XXXXXXXoXXXXXXXX',
+    'XXXXXXXoXXXXXXXX',
+    'XXoXXoooooXXoXXX',
+    'XXXoooooooooXXXX',
+    'XXXooo   oooXXXX',
+    'XXooo +o+ oooXXX',
+    'XXoo +o+o+ ooXXX',
+    'oooo o+.+o ooooX',
+    'XXoo +o.o+ ooXXX',
+    'XXooo +.+ oooXXX',
+    'XXXooo + oooXXXX',
+    'XXXooo o oooXXXX',
+    'XXoXXo   oXXoXXX',
+    'XXXXXX O XXXXXXX',
+    'XXXXXX   XXXXXXX',
+    'XXXXXXX XXXXXXXX'
+  ); 
+ 
+  BitmapDatadisconnect : Array[0..27-6] of AnsiString = ( // disconnect.xpm 
+    '16 16 5 1',
+    '  c black',
+    '. c #7b7d7b',
+    'X c none',
+    'o c #bdbebd',
+    'O c white',
+    { pixels }
+    'XXXXXXXXXXXXXXXX',
+    'XXXXXXXXXXXXXXXX',
+    'XXXXXXXXXXXXXXXX',
+    'XXXXXXXXXXXXXXXX',
+    'XXXXXX   XXXXXXX',
+    'XXXXX OOO XXXXXX',
+    'XXXX OOOOO XXXXX',
+    'XXXX OO.OO XXXXX',
+    'XXXX OO.OO XXXXX',
+    'XXXXX O.O XXXXXX',
+    'XXXXXX O XXXXXXX',
+    'XXXXXX O XXXXXXX',
+    'XXXXXX   XXXXXXX',
+    'XXXXXX o XXXXXXX',
+    'XXXXXX   XXXXXXX',
+    'XXXXXXX XXXXXXXX'
+  ); 
+ 
+  BitmapDatainfo : Array[0..31-6] of AnsiString = ( // info.xpm 
+    '16 16 9 1',
+    '  c black',
+    '. c #000083',
+    'X c #080083',
+    'o c #0800c5',
+    'O c blue',
+    '+ c #0800ff',
+    '@ c #cdc2ff',
+    '# c #ffc2ff',
+    '$ c white',
+    { pixels }
+    '$$$$$$$$$$$$$$$$',
+    '$$$$$+.X.+.$$$$$',
+    '$$$.+@$#$@$  $$$',
+    '$$.$@$@OO$@$o $$',
+    '$$+@$#$.O#$@$ +$',
+    '$+@$@$@$@$@$@+ $',
+    '$.$#$@+OO@$#$@ $',
+    '$X@$@$@+O$@$@$ $',
+    '$.+@$#$.O#$@$O $',
+    '$$.$@$OOOO@$o .$',
+    '$$$ +@$#$@$O .+$',
+    '$$$$  o$@+  .X$$',
+    '$$$$$$  $ +.$$$$',
+    '$$$$$$$ @ .$$$$$',
+    '$$$$$$$$  +$$$$$',
+    '$$$$$$$$$$$$$$$$'
+  ); 
+ 
+  BitmapDatawarning : Array[0..30-6] of AnsiString = ( // warning.xpm 
+    '16 16 8 1',
+    '  c black',
+    '. c #080000',
+    'X c #000083',
+    'o c #0800ff',
+    'O c #cdc200',
+    '+ c #ffc200',
+    '@ c yellow',
+    '# c white',
+    { pixels }
+    '################',
+    '#######.  ######',
+    '######.+@ o#####',
+    '#####.O@O@ #####',
+    '##### @ @+ X####',
+    '#### @   @O ####',
+    '####.O   O@ o###',
+    '###.O@   @O@ ###',
+    '##.O@+. .+@O X##',
+    '## @O@O O@O@O ##',
+    '# @+@O@+@O@+@ o#',
+    '#.O@O@X X@O@O@ #',
+    '# @O@+@O@+@O@+ #',
+    '##            X#',
+    '###XoXoXoXoXoXo#',
+    '################'
+  ); 
+ 
+  BitmapDataerror : Array[0..33-6] of AnsiString = ( // error.xpm 
+    '16 16 11 1',
+    '  c black',
+    '. c #000083',
+    'X c #080083',
+    'o c #0000c5',
+    'O c #0800c5',
+    '+ c blue',
+    '@ c #0800ff',
+    '# c #c50000',
+    '$ c red',
+    '% c #cdc2ff',
+    '& c white',
+    { pixels }
+    '&&&&&&&&&&&&&&&&',
+    '&&&&&@    &&&&&&',
+    '&&&. #$$$# .&&&&',
+    '&&.$#$#$#$#$.&&&',
+    '&& #@+$#$+@# .&&',
+    '&@#$O&O$O&O$# &&',
+    '& $$$o&+&o$$$ @&',
+    '& #$#$O&%$#$# .&',
+    '& $#$+&%&+$#$ @&',
+    '& #$O&O$O&O$# .&',
+    '&& $@o$$$o&$ .@&',
+    '&&.$#$#$#$#$ X&&',
+    '&&&. $$#$$  @+&&',
+    '&&&&.     .XO&&&',
+    '&&&&&&@.@.@&&&&&',
+    '&&&&&&&&&&&&&&&&'
+  ); 
+  
+Function PixmapFromFile (FN : String) :TFPGtkPixmap;
+
+Implementation
+ 
+Function PixmapFromFile (FN : String) :TFPGtkPixmap;
+
+Var 
+  I : integer;
+
+begin
+  Result:=TFPGtkPixmap.CReate;
+  If FileExists ('bitmaps'+directoryseparator+FN+'.xpm') then
+    Result.LoadFromFile('bitmaps'+directoryseparator+FN+'.xpm')
+  else
+    begin
+    I:=10;
+    While (I>0) and (FN<>BitmapFileNames[i]) do
+      Dec(i);
+    With Result do 
+      Case I of 
+        1  : LoadFromArray(BitmapDataclear);
+        2  : LoadFromArray(BitmapDatapause);
+        3  : LoadFromArray(BitmapDatarun);
+        4  : LoadFromArray(BitmapDataclose);
+        5  : LoadFromArray(BitmapDatasave);
+        6  : LoadFromArray(BitmapDataconnect);
+        7  : LoadFromArray(BitmapDatadisconnect);
+        8  : LoadFromArray(BitmapDatainfo);
+        9  : LoadFromArray(BitmapDatawarning);
+        10 : LoadFromArray(BitmapDataerror);
+      end;
+    end;    
+end;
+
+end.
+
+{
+  $Log$
+  Revision 1.1  2003-01-02 14:36:25  michael
+  + Initial implementation
+
+}

+ 30 - 0
utils/debugsvr/gtk/bitmaps/clear.xpm

@@ -0,0 +1,30 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 8 1",
+"  c black",
+". c #830000",
+"X c red",
+"o c #838100",
+"O c #ff8100",
+"+ c #ffd200",
+"@ c yellow",
+"# c white",
+/* pixels */
+"############## @",
+"############# @@",
+"### ######## @@@",
+"########### @@@O",
+"#### ##### @ @+o",
+"######### @ @ o ",
+"##  # ## X @ o #",
+"#  # ## XXX o ##",
+"#  ### XXXX. ###",
+"#### # XXX. ####",
+"##  # # X. #####",
+"#  ##  #  ######",
+"  ###  #########",
+"  ##   ## ######",
+"        ### ####",
+"#    #   #######"
+};

+ 29 - 0
utils/debugsvr/gtk/bitmaps/close.xpm

@@ -0,0 +1,29 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 7 1",
+"  c black",
+". c #7b7d7b",
+"X c #8b7d8b",
+"o c #8b858b",
+"O c #bdbebd",
+"+ c #cdc6cd",
+"@ c white",
+/* pixels */
+"@@@@@     @@@@@@",
+"@@@@@ ... @@@@@@",
+"@@           @@@",
+"@@ @O+OX...X @@@",
+"@@           @@@",
+"@@@ . . . . @@@@",
+"@@@ @ + o o @@@@",
+"@@  @ O O .  @@@",
+"@ @ @ + o o @ @@",
+"@@@ @ O O . @@@@",
+"@@@ @ + o o @@@@",
+"@@@ @ O O . @@@@",
+"@@@ @ + o o @@@@",
+"@@@ @ O O . @@@@",
+"@@@ @.o.o.o @@@@",
+"@@@         @@@@"
+};

+ 28 - 0
utils/debugsvr/gtk/bitmaps/connect.xpm

@@ -0,0 +1,28 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 6 1",
+"  c black",
+". c #7b7d7b",
+"X c none",
+"o c yellow",
+"O c #bdbebd",
+"+ c white",
+/* pixels */
+"XXXXXXXoXXXXXXXX",
+"XXXXXXXoXXXXXXXX",
+"XXoXXoooooXXoXXX",
+"XXXoooooooooXXXX",
+"XXXooo   oooXXXX",
+"XXooo +o+ oooXXX",
+"XXoo +o+o+ ooXXX",
+"oooo o+.+o ooooX",
+"XXoo +o.o+ ooXXX",
+"XXooo +.+ oooXXX",
+"XXXooo + oooXXXX",
+"XXXooo o oooXXXX",
+"XXoXXo   oXXoXXX",
+"XXXXXX O XXXXXXX",
+"XXXXXX   XXXXXXX",
+"XXXXXXX XXXXXXXX"
+};

+ 27 - 0
utils/debugsvr/gtk/bitmaps/disconnect.xpm

@@ -0,0 +1,27 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 5 1",
+"  c black",
+". c #7b7d7b",
+"X c none",
+"o c #bdbebd",
+"O c white",
+/* pixels */
+"XXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXX",
+"XXXXXXXXXXXXXXXX",
+"XXXXXX   XXXXXXX",
+"XXXXX OOO XXXXXX",
+"XXXX OOOOO XXXXX",
+"XXXX OO.OO XXXXX",
+"XXXX OO.OO XXXXX",
+"XXXXX O.O XXXXXX",
+"XXXXXX O XXXXXXX",
+"XXXXXX O XXXXXXX",
+"XXXXXX   XXXXXXX",
+"XXXXXX o XXXXXXX",
+"XXXXXX   XXXXXXX",
+"XXXXXXX XXXXXXXX"
+};

+ 33 - 0
utils/debugsvr/gtk/bitmaps/error.xpm

@@ -0,0 +1,33 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 11 1",
+"  c black",
+". c #000083",
+"X c #080083",
+"o c #0000c5",
+"O c #0800c5",
+"+ c blue",
+"@ c #0800ff",
+"# c #c50000",
+"$ c red",
+"% c #cdc2ff",
+"& c white",
+/* pixels */
+"&&&&&&&&&&&&&&&&",
+"&&&&&@    &&&&&&",
+"&&&. #$$$# .&&&&",
+"&&.$#$#$#$#$.&&&",
+"&& #@+$#$+@# .&&",
+"&@#$O&O$O&O$# &&",
+"& $$$o&+&o$$$ @&",
+"& #$#$O&%$#$# .&",
+"& $#$+&%&+$#$ @&",
+"& #$O&O$O&O$# .&",
+"&& $@o$$$o&$ .@&",
+"&&.$#$#$#$#$ X&&",
+"&&&. $$#$$  @+&&",
+"&&&&.     .XO&&&",
+"&&&&&&@.@.@&&&&&",
+"&&&&&&&&&&&&&&&&"
+};

+ 31 - 0
utils/debugsvr/gtk/bitmaps/info.xpm

@@ -0,0 +1,31 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 9 1",
+"  c black",
+". c #000083",
+"X c #080083",
+"o c #0800c5",
+"O c blue",
+"+ c #0800ff",
+"@ c #cdc2ff",
+"# c #ffc2ff",
+"$ c white",
+/* pixels */
+"$$$$$$$$$$$$$$$$",
+"$$$$$+.X.+.$$$$$",
+"$$$.+@$#$@$  $$$",
+"$$.$@$@OO$@$o $$",
+"$$+@$#$.O#$@$ +$",
+"$+@$@$@$@$@$@+ $",
+"$.$#$@+OO@$#$@ $",
+"$X@$@$@+O$@$@$ $",
+"$.+@$#$.O#$@$O $",
+"$$.$@$OOOO@$o .$",
+"$$$ +@$#$@$O .+$",
+"$$$$  o$@+  .X$$",
+"$$$$$$  $ +.$$$$",
+"$$$$$$$ @ .$$$$$",
+"$$$$$$$$  +$$$$$",
+"$$$$$$$$$$$$$$$$"
+};

+ 33 - 0
utils/debugsvr/gtk/bitmaps/pause.xpm

@@ -0,0 +1,33 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 11 1",
+"  c black",
+". c #7b7d7b",
+"X c #008100",
+"o c #00ba00",
+"O c green",
+"+ c #ee7dee",
+"@ c #bdbebd",
+"# c #eeb6ee",
+"$ c #ffbeff",
+"% c #fff6ff",
+"& c white",
+/* pixels */
+"&&&&&     &&&&&&",
+"&&&  &&&@%  &&&&",
+"&& &%.   .%$ &&&",
+"& &% &O&O& %@ &&",
+"& % &     & % &&",
+" &.&  &&O  &.% &",
+" & O &OOoO O @ &",
+" & & OOOOX & . &",
+" $ O OoOoX O . &",
+" %.&  OXX  &.+ &",
+"& % &     & # &&",
+"& @% &O&O& +. &&",
+"&& @%.   .#. &&&",
+"&&&  %@..+  &&&&",
+"&&&&&     &&&&&&",
+"&&&&&&&&&&&&&&&&"
+};

+ 32 - 0
utils/debugsvr/gtk/bitmaps/run.xpm

@@ -0,0 +1,32 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 10 1",
+"  c black",
+". c #7b7d7b",
+"X c #008100",
+"o c #00ba00",
+"O c #ee7dee",
+"+ c #bdbebd",
+"@ c #eeb6ee",
+"# c #ffbeff",
+"$ c #fff6ff",
+"% c white",
+/* pixels */
+"%%%%%     %%%%%%",
+"%%%  %%%+$  %%%%",
+"%% %$.   .$# %%%",
+"% %$       $+ %%",
+"% $         $ %%",
+" %.   +$X   .$ %",
+" %   +oXoX   + %",
+" %   XXXXX   . %",
+" #   XoXoX   . %",
+" $.   XXX   .O %",
+"% $         @ %%",
+"% +$       O. %%",
+"%% +$.   .@. %%%",
+"%%%  $+..O  %%%%",
+"%%%%%     %%%%%%",
+"%%%%%%%%%%%%%%%%"
+};

+ 30 - 0
utils/debugsvr/gtk/bitmaps/save.xpm

@@ -0,0 +1,30 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 8 1",
+"  c black",
+". c #7b7d7b",
+"X c blue",
+"o c red",
+"O c #bdbebd",
+"+ c #ffbeff",
+"@ c #ffceff",
+"# c white",
+/* pixels */
+"      ##########",
+" ####  #ooooo###",
+" # +# # ##@ooo##",
+" #### ## ##ooo##",
+" #  #     #ooo##",
+" ########ooooooo",
+" #    # # ooooo#",
+" ######## #ooo##",
+" #  #  O XXXoXX ",
+" ####### ###### ",
+" ####### ###### ",
+"                ",
+"########        ",
+"########  O#O#  ",
+"########  # #O  ",
+"########  . ..  "
+};

+ 30 - 0
utils/debugsvr/gtk/bitmaps/warning.xpm

@@ -0,0 +1,30 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 8 1",
+"  c black",
+". c #080000",
+"X c #000083",
+"o c #0800ff",
+"O c #cdc200",
+"+ c #ffc200",
+"@ c yellow",
+"# c white",
+/* pixels */
+"################",
+"#######.  ######",
+"######.+@ o#####",
+"#####.O@O@ #####",
+"##### @ @+ X####",
+"#### @   @O ####",
+"####.O   O@ o###",
+"###.O@   @O@ ###",
+"##.O@+. .+@O X##",
+"## @O@O O@O@O ##",
+"# @+@O@+@O@+@ o#",
+"#.O@O@X X@O@O@ #",
+"# @O@+@O@+@O@+ #",
+"##            X#",
+"###XoXoXoXoXoXo#",
+"################"
+};

+ 26 - 0
utils/debugsvr/gtk/bitmaps/xpmtopp

@@ -0,0 +1,26 @@
+#!/bin/tcsh
+echo "{ Auto bitmap data }" >bitmaps.pp
+echo "Const" > bitmapaddr.pp
+echo "  BitmapFileData : Array[1..$#] of PAnsiString = (" > bitmapaddr.pp
+echo "Const" > filenames.pp
+echo "  BitmapFileNames : Array[1..$#] of AnsiString = (" > filenames.pp
+foreach f ($*)
+  setenv fn `basename $f .xpm`
+  setenv fl `cat $f | wc -l`
+  echo lentgth is $fl
+  echo "  '${fn}'," >>filenames.pp
+  echo "  BitmapData$fn : Array[0..${fl}-5] of AnsiString = ( // $f " >> bitmaps.pp
+  cat $f | sed 1,3d | sed \$d | tr \" \' | sed "s/^/    /" \
+  | sed -e 's+/\*+{+g' -e 's+\*/+}+g' >>bitmaps.pp
+  echo "  ); " >> bitmaps.pp
+  echo " " >> bitmaps.pp
+  echo "    @BitmapData${fn}," >> bitmapaddr.pp 
+end;
+echo "  );" >> filenames.pp
+echo "" >> filenames.pp
+echo "  );" >> bitmapaddr.pp
+echo "" >> bitmapaddr.pp
+
+cat filenames.pp bitmaps.pp bitmapaddr.pp >out.pp
+
+

+ 28 - 0
utils/debugsvr/gtk/debugserver.pp

@@ -0,0 +1,28 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    Program source for GTK debug server.
+    
+    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 debugserver;
+{$mode objfpc}
+{$H+}
+{ $apptype gui}
+
+uses fpgtk,fpglib,fpgtkext,frmmain;
+
+begin
+  application := TFPgtkApplication.Create;
+  application.MainWindow := TMainForm.Create;
+  application.Run;
+  application.Free;
+end.

+ 108 - 0
utils/debugsvr/gtk/frmabout.pp

@@ -0,0 +1,108 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    About form for debug server
+    
+    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.
+
+ **********************************************************************}
+{$mode objfpc}
+{$h+}
+
+unit frmabout;
+
+interface
+
+uses fpgtk,gtk,classes,sysutils;
+
+Type
+  TAboutForm = Class (TFPGtkWindow)
+    FAboutText : TFPGtkLabel;
+    FSeparator : TFPGtkHSeparator;
+    FVBox : TFPgtkVBox;
+    FOK,
+    FCancel : TFPGtkButton;
+    FButtonBox: TFPgtkHBox;
+    Constructor Create;
+    Procedure CreateWindow;
+    Function GetListen : String;
+  end;
+  
+Implementation
+
+uses msgintf;
+
+Resourcestring
+  SAbout1     = 'Free Pascal debug server.';
+  SAbout2     = '(c) 2003, Michael Van Canneyt';
+  SAbout3     = 'Server listening on : %s';
+  SUnixSocket = 'Unix socket "%s"';
+  SInetPort   = 'TCP/IP port %d';
+  SUnknown    = 'Unknown';
+  SOK         = 'OK';
+  SCancel     = 'Cancel';
+  
+Constructor TAboutForm.Create;
+
+begin
+  Inherited Create(GTK_WINDOW_DIALOG);
+  CreateWindow;
+end;
+
+Function TAboutForm.GetListen : String;
+
+begin
+  Case debugconnection of
+    dcUnix : Result:=Format(SUnixSocket,[DebugSocket]);
+    dcInet : Result:=Format(SInetPort,[DebugPort]);
+  else
+    Result:=SUnknown;
+  end;    
+end;
+
+Procedure TAboutForm.CreateWindow;
+
+Var 
+  S : String;
+  
+
+begin
+  FVBox:=TFPGtkVBox.Create;
+  FVBox.Spacing:=4;
+  FVBox.Border:=8;
+  Add(FVBox);
+  // About text
+  S:=SAbout1+LineEnding+SAbout2;
+  S:=S+LineEnding+Format(SABout3,[GetListen]);
+  FAboutText:=TFPgtkLabel.Create(S);
+  // button area
+  FOK:=TFpGtkButton.CreateWithLabel(SOK);
+  FOK.ConnectClicked(@CloseWithResult,IntToPointer(drOK));
+  FCancel:=TFPgtkButton.CreateWithLabel(SCancel);
+  FCancel.ConnectCLicked(@CloseWithResult,IntToPointer(drCancel));
+  FSeparator:=TFPgtkHSeparator.Create;
+  FButtonBox:=TfpGtkHBox.Create;
+  FButtonBox.Spacing:=4;
+  FButtonBox.PackEnd(FOK,false,false,4);
+  FButtonBox.PackEnd(FCancel,false,false,4);
+  // Add to window
+  FVBox.PackStart(FAboutText,True,True,0);
+  FVBox.PackStart(FSeparator,False,False,4);
+  FVBox.PackStart(FButtonBox,false,false,0);
+end;
+
+end.  
+
+{
+  $Log$
+  Revision 1.1  2003-01-02 14:36:25  michael
+  + Initial implementation
+
+}

+ 753 - 0
utils/debugsvr/gtk/frmmain.pp

@@ -0,0 +1,753 @@
+{
+    $Id$
+    This file is part of the Free Pascal run time library.
+    Copyright (c) 2003 by the Free Pascal development team
+
+    Main form of GTK debugserver
+    
+    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.
+
+ **********************************************************************}
+{$mode objfpc}
+{$h+}
+
+unit frmmain;
+
+Interface
+
+uses 
+  fpgtk,fpgtkext,glib,gtk,gdk,debugserverintf,sysutils,msgintf,classes,inifiles;
+ 
+Type 
+  TClientCList = Class(TFPGtkScrollClist)
+  Protected 
+    FTabLabel : TFPgtkLabel;
+    FClient : TClient;
+  Public   
+    Constructor Create (AClient : TClient);
+    Property Client : TClient Read FClient Write FClient;  
+    Property TabLabel : TFPgtkLabel Read FTabLabel Write FTabLabel;
+  end;  
+
+  TMainForm = Class (TFPGtkWindow)
+  Private
+    // 'real' Variables
+    FCreating,
+    FPaused,
+    FInsertNew,
+    FCloseOnDisconnect,
+    FLoadSinglePage,
+    FSinglePage : Boolean;
+    FIdleHandle : gint;
+    FMsgImages : Array[-1..3] of PgdkPixmap;
+    FMsgMasks : Array[-1..3] of Pgdkbitmap;
+    // Widgets
+    FVBox : TFPGtkVBox;
+    FMainMenu : TFpGtkMenuBar;
+    FFile,     // File menu
+    FFileClear,
+    FFileSave,
+    FFileExit,
+    FFileClose,
+    FOptions,
+    FHelp,     // Help menu
+    FHelpAbout : TFPGtkMenuItem;
+    FOptionsInsertNew,
+    FOptionsSinglePage,
+    FOptionsCloseOnDisconnect,
+    FFilePause : TFPGtkCheckMenuItem;
+    FConnectImage,
+    FDisconnectImage,
+    FInfoImage,
+    FWarningImage,
+    FErrorImage,
+    FClearImage,
+    FSaveImage,
+    FCloseImage,
+    FPauseImage,
+    FRunImage,
+    FRunButtonImage : TFPGtkPixmap;
+    FMainToolbar : TFPGtkToolbar;
+    FToolbarFrame : TFPGtkFrame;
+    FPages : TfpGTKNotebook;
+    FList  : TClientCList;
+    FRunButton : TFPgtkButton;
+    FRunImages : Array[Boolean] of PgdkPixmap;
+    FRunMasks : Array[Boolean] of Pgdkbitmap;
+  Public 
+    // General 
+    Constructor Create;  
+    Procedure CreateWindow;
+    Procedure LoadSettings;
+    Procedure SaveSettings;
+    Function  SettingsFilename : String;
+    Procedure SetupDebugServer;
+    Procedure ShutdownDebugServer;
+    // List/Client management
+    Procedure SaveToFile(C : TClientCList; FN : String); 
+    Function  NewList(Client : TClient) : TClientCList;
+    Function  GetList(Client : TClient) : TClientClist;
+    Procedure HaveData(Handle : Gint);
+    Procedure AddEventToList(Event : TDebugEvent);
+    Function  CheckForNewClient : TClient;
+    Function  CurrentList : TClientCList;
+    Function  GetClientPageIndex(Client : TClient) : Integer;
+    Procedure ConnectionClosed(C : TCLient);
+    Procedure SetRunButtonBitmaps;
+    Function  GetFileName(ATitle : String) : String;
+    Procedure DialogSetFilename(Sender : TFPGtkWindow;Data : Pointer; Action : Integer;Initiator : TFPGtkObject);
+    // User callbacks
+    Procedure FileClearClick(Sender : TFPGtkObject; Data : Pointer);
+    Procedure FileSaveClick(Sender : TFPGtkObject; Data : Pointer);
+    Procedure FileCopyClick(Sender : TFPGtkObject; Data : Pointer);
+    Procedure FilePauseClick(Sender : TFPGtkObject; Data : Pointer);
+    Procedure FileCloseClick(Sender : TFPGtkObject; Data : Pointer);
+    Procedure FileExitClick(Sender : TFPGtkObject; Data : Pointer);
+    Procedure OptionsClick(Sender : TFPGtkObject; Data : Pointer);
+    Procedure HelpAboutClick(Sender : TFPGtkObject; Data : Pointer);
+    Function  OnDeleteEvent(Sender:TFPgtkWidget; Event:PGdkEvent; data:pointer): boolean;
+  end;
+  
+  
+Implementation  
+
+uses frmabout,bitmapdata;
+ 
+ResourceString
+  SCaption        = 'FPC Debug server';
+
+  SMenuFile       = '_File';
+  SMenuFileClear  = 'Clea_r';
+  SMenuFileSave   = '_Save';
+  SMenuFileCopy   = '_Copy';
+  SMenuFilePause  = '_Pause';
+  SMenuFileClose  = 'C_lose';
+  SMenuFileExit   = 'E_xit';
+  SMenuOptions    = '_Options';
+  SMenuOptionsInsertNew         = '_New messages first';
+  SMenuOptionsSinglePage        = '_All clients on 1 page';
+  SMenuOptionsCloseOnDisconnect = '_Close client on disconnect';
+  SMenuHelp       = '_Help';
+  SMenuHelpAbout  = '_About';
+ 
+  SHintFileClear  = 'Clear current list';
+  SHintFileSave   = 'Save current list to disk';
+  SHintFilePause  = 'Discard new messages';
+  SHintFileClose  = 'Close current list';
+
+  SNewClient      = 'New client';
+  SMessageFrom    = '[%s] : %s';
+  SSaveFileTitle  = 'Save list to file:';
+  SNeedsRestart   = 'Restart debugserver for this option to take effect.';
+  
+Const
+  SKeyParameters        = 'Parameters';
+  SKeySinglePage        = 'SinglePage';
+  SKeyCloseOnDisconnect = 'CloseOnDisconnect';
+  SkeyInsertNew         = 'InsertNewMessages';
+  SConfigFile           = 'debugserver.cnf'; 
+
+  DefaultSinglePage     = True;
+  DefaultCloseOnConnect = False;
+  DefaultInsertNew      = True;
+  
+Const
+  DefaultTooltips = True;
+  DefaultToolBarStyle = GTK_TOOLBAR_ICONS;
+  DefaultToolbarRelief = GTK_RELIEF_NONE;
+        
+
+{ ---------------------------------------------------------------------
+    TClientCList
+  ---------------------------------------------------------------------}
+
+Constructor TClientCList.Create(Aclient : TClient);
+
+begin
+  Inherited Create(3);
+  FClient:=AClient;
+  Clist.ShowTitles;
+  CList.PassiveTitles;
+  Clist.ColumnTitle[0]:='*';
+  Clist.ColumnTitle[1]:='Time';
+  Clist.ColumnTitle[2]:='Message';
+  CLIST.SetColumnWidth(0,20);
+  CList.SetColumnResizeable(0,False);
+  CLIST.SetColumnWidth(1,120);
+end;
+
+{ ---------------------------------------------------------------------
+    MainForm - General
+  ---------------------------------------------------------------------}
+
+// Cludge to go around TFPgtkBin.Child not being public...
+
+Type 
+  TMyBin = Class(TFPgtkBin)
+  Public
+    Property Child; 
+  end;
+        
+Procedure TMainForm.CreateWindow;
+
+Var
+  V : TFPGtkHBox;
+  FAccelGroup: Integer;
+    
+begin
+  
+  { File Menu }
+  Title:=SCaption;
+  FAccelGroup:=AccelGroupNew;
+  FFileClear := NewMenuItem(SMenuFileClear  ,'','',MakeAccelKeyDef(Self,FaccelGroup,GDK_L,[amcontrol]),@FileClearClick,Nil);
+  FFileSave  := NewMenuItem(SMenuFileSave   ,'','',MakeAccelKeyDef(Self,FaccelGroup,GDK_S,[amcontrol]),@FileSaveClick,Nil);
+  FFilePause := NewCheckMenuItem(SMenuFilePause  ,'','',MakeAccelKeyDef(Self,FaccelGroup,GDK_P,[amcontrol]),@FilePauseClick,Nil);
+  If Not FSinglePage then
+    FFileClose := NewMenuItem(SMenuFileClose ,'','',MakeAccelKeyDef(Self,FaccelGroup,GDK_W,[amcontrol]),@FileCloseClick,Nil);
+  FFileExit  := NewMenuItem(SMenuFileExit   ,'','',MakeAccelKeyDef(Self,FaccelGroup,GDK_Q,[amcontrol]),@FileExitClick,Nil);
+  If FSinglePage then
+    FFile  := NewSubMenu(SMenuFile,'','',[FFileClear,FFileSave,FFilePause,NewLine,FFileExit])
+  else
+    FFile  := NewSubMenu(SMenuFile,'','',[FFileClear,FFileSave,FFilePause,FFileClose,NewLine,FFileExit]);
+
+  { Options menu }
+
+  FOptionsInsertNew := NewCheckMenuItem(SMenuOptionsInsertNew,'','', @OptionsClick,@FInsertNew);
+  FOptionsInsertNew.Active:=FInsertNew;
+  FOptionsSinglePage := NewCheckMenuItem(SMenuOptionsSinglePage,'','', @OptionsClick,@FLoadSinglePage);
+  FOptionsSinglePage.Active:=FSinglePage;
+  FOptionsCloseOnDisconnect := NewCheckMenuItem(SMenuOptionsCloseOnDisconnect,'','', @OptionsClick,@FCloseOnDisconnect);
+  FOptionsCloseOnDisconnect.active:=FCloseOnDisconnect;
+  FOptions := NewSubMenu(SMenuOptions,'','',[FOptionsInsertNew,FOptionsSinglePage,FOptionsCloseOnDisconnect]);
+  
+  { Help Menu }
+  
+  FHelpAbout:=NewMenuItem(SMenuHelpAbout ,'','',@HelpAboutClick,Nil);
+  FHelp := NewSubMenu(SMenuHelp,'','',[FHelpAbout]);
+  
+  { Menu bar }
+  
+  FMainMenu:=NewMenuBar([FFile,FOptions,FHelp]);
+  
+  { Toolbar images }
+  
+  FClearImage:=PixmapFromFile('clear');
+  FPauseImage:=PixmapFromFile('pause');
+  FRunImage:=PixmapFromFile('run');
+  FCloseImage:=PixMapFromFile('close');
+  FSaveImage:=PixmapFromFile('save');
+  FRunButtonImage:=TFPGtkPixmap.Create;
+  FRunImages[False]:=FPauseImage.PixMap;
+  FRunMasks[False]:=FPauseImage.Mask;
+  FRunImages[True]:=FRunImage.PixMap;
+  FRunMasks[True]:=FRunImage.Mask;
+  SetRunButtonBitmaps;
+  
+  { Message images }
+
+  FConnectImage:=PixMapFromFile('connect');
+  FDisConnectImage:=PixMapFromFile('disconnect');
+  FinfoImage:=PixmapFromFile('info');
+  FWarningImage:=PixmapFromFile('warning');
+  FErrorImage:=PixmapFromFile('error');
+
+  { Save references for quick lookup}
+  
+  FMsgImages[-1]:=FDisconnectImage.PixMap;
+  FMsgImages[0]:=FinfoImage.PixMap;
+  FMsgImages[1]:=FWarningImage.PixMap;
+  FMsgImages[2]:=FErrorImage.PixMap;
+  FMsgImages[3]:=FConnectImage.PixMap;
+  FMsgMasks[-1]:=FDisconnectImage.Mask;
+  FMsgMasks[0]:=FinfoImage.Mask;
+  FMsgMasks[1]:=FWarningImage.Mask;
+  FMsgMasks[2]:=FErrorImage.Mask;
+  FMsgMasks[3]:=FConnectImage.Mask;
+  
+  { Toolbar }
+  
+  FMainToolBar:=TFPGtkToolbar.Create;
+  With FMainToolbar do
+    begin
+    Style:=DefaultToolbarStyle;
+    ButtonRelief:=DefaultToolbarRelief;
+    EnableTooltips:=DefaultTooltips;
+    AppendItem(SMenuFileClear,SHintFileClear,'',FClearImage,@FileClearClick,Nil);
+    AppendItem(SMenuFileSave,SHintFileSave,'',FSaveImage,@FileSaveClick,Nil);
+    FRunButton:=AppendItem(SMenuFilePause,SHintFilePause,'',FRunButtonImage,@FilePauseClick,Nil) as TFPgtkButton;
+    AppendItem(SMenuFileClose,SHintFileClose,'',FCloseImage,@FileCloseClick,Nil);
+    end;
+
+  { place left aligned on frame }  
+  V:=TFPGtkHBox.Create;
+  V.PackStart(FMainToolbar,False,False,2);
+  FToolbarFrame:=TFPGtkFrame.Create;
+  FtoolbarFrame.Add(V);
+    
+  { For Pages }
+
+//  FPages:=TFPGtkNoteBook.Create;
+  If FSinglePage then
+    FList:=NewList(Nil)
+  else
+    FPages:=TFPGtkNoteBook.Create;
+  { Place on form }
+  FVBox:=TFPGTKVBox.create;
+  FVBox.PackStart(FMainMenu,false, true, 0);
+  FVBox.PackStart(FToolBarFrame,false, true, 0);
+  If FSinglePage then
+    FVBox.PackStart(FList,true, true, 0)
+  else  
+    FVBox.PackStart(FPages,true, true, 0);
+  Self.add(FVBox);
+  Setusize(640,480);
+  ConnectDeleteEvent(@OnDeleteEvent,Nil);
+end;                   
+
+Constructor TMainForm.Create;  
+
+begin
+  Inherited Create(gtk_window_dialog);
+  LoadSettings;
+  FSinglePage:=FLoadSinglePage;
+  FPaused:=False;
+  FCreating:=True;
+  Try
+    CreateWindow;
+  Finally  
+    FCreating:=False;
+  end;  
+  SetUpDebugServer;
+end;
+
+Procedure TMainForm.SetRunButtonBitmaps;
+
+begin
+  FRunButtonImage.SetPixMap(FRunImages[FPaused],FRunMasks[FPaused]);
+end;
+
+Function TMainForm.SettingsFileName : String;
+
+Var
+  Home : String;
+
+begin
+  Home:=GetEnvironmentVariable('HOME');
+  If (Home<>'') then
+    Result:=IncludeTrailingBackslash(Home)+'.'+SConfigFile
+  else  
+    Result:=SConfigFile;
+end;
+
+Procedure TMainForm.LoadSettings;
+
+begin
+  With TIniFile.Create(SettingsFileName) do
+    Try
+      FLoadSinglePage:=ReadBool(SKeyParameters,SkeySinglePage,DefaultSinglePage);
+      FCloseOnDisconnect:=ReadBool(SKeyParameters,SkeyCloseOnDisconnect,DefaultCloseOnConnect);
+      FInsertNew:=ReadBool(SKeyParameters,SKeyInsertNew,DefaultInsertNew);
+    finally
+      Free;
+    end;
+end;
+
+Procedure TMainForm.SaveSettings;
+
+begin
+  With TIniFile.Create(SettingsFileName) do
+    Try
+      WriteBool(SKeyParameters,SkeySinglePage,FLoadSinglePage);
+      WriteBool(SKeyParameters,SkeyCloseOnDisconnect,FCloseOnDisconnect);
+      WriteBool(SKeyParameters,SKeyInsertNew,FinsertNew);
+      UpdateFile;
+    finally
+      Free;
+    end;
+end;
+
+{ ---------------------------------------------------------------------
+    Event handling.
+  ---------------------------------------------------------------------}
+
+// GTK idle callback, to check for new connections during idle time.
+
+function GtkIdle (Data:pointer) : gint; Cdecl;
+
+begin
+  With (TObject(Data) as TMainForm) do
+    CheckForNewClient;
+end;
+
+// When input appears on one of the handles, we come here through the gtk
+// input watch.
+
+Procedure GtkHaveInput (Data : GPointer; Source : gint; Condition : TGDKInputCondition);cdecl;
+
+begin
+  With (TObject(Data) as TMainForm) do
+    HaveData(Source);
+end;
+
+// Real methods.
+
+Procedure TMainForm.SetupDebugServer;
+
+begin
+  OpenDebugServer;
+  FIdleHandle:=gtk_idle_add(@GtkIdle,Self);
+  CloseObjConnectionCallBack:[email protected];
+end;
+
+Procedure TMainForm.ShutdownDebugServer;
+
+begin
+  CloseObjConnectionCallBack:=Nil;
+  gtk_idle_remove(FIdleHandle);
+  CloseDebugServer;
+end;
+
+
+// tell gdk not to watch this handle any more.
+// Clean up of the associated page happens in log event.
+
+Procedure TMainForm.ConnectionClosed(C : TCLient);
+
+begin
+  gdk_input_remove(gint(C.Data));
+end;
+
+// We get here when data is present on socket.
+
+Procedure TMainForm.HaveData(Handle : Gint);
+
+Var
+  Event : TDebugEvent;
+
+begin
+  ReadMessageEvent(Handle,Event);
+  AddEventToList(Event);
+end;
+
+// Check if a new client has reported ?
+
+Function TMainForm.CheckForNewClient : TClient;
+
+Var
+  IHandle : gint;
+  L : TClientCList;
+  
+begin
+//  Writeln('Checking new client');
+  Result:=CheckNewConnection;
+  If Result<>Nil then
+    begin
+    If Not FSinglePage then
+      begin
+      L:=NewList(Result);
+      FPages.AppendPage(L,L.TabLabel);
+      FPages.Page:=L;
+      // Force draw.
+      Fpages.Draw(Nil);
+      L.ShowNow;
+      L.Draw(Nil);
+      L.Clist.draw(Nil);
+      end;
+    IHandle:=gdk_input_add(Result.Handle,GDK_INPUT_READ,@GtkHaveInput,self);
+    Result.Data:=Pointer(IHandle);
+    end;  
+end;
+
+// Add event data to the appropriate list.
+
+Procedure TMainForm.AddEventToList(Event : TDebugEvent);
+ 
+Const
+  MsgTypeStrings : Array[-1..3] of String = ('*','?','!','!','.');
+   
+Var
+  T,D,S : String;
+  L : TClientCList;
+  TL : TFPgtkWidget;
+  SL : TStringList;
+  Index : Integer;
+    
+begin
+  With Event do
+    begin
+    T:=MsgTypeStrings[LogCode];
+    D:=DateTimeToStr(TimeStamp);
+    If FSinglePage or (logcode<>lctIdentify) then
+      S:=Format(SMessageFrom,[Client.Peer,Event])
+    else
+      S:=Event;  
+    L:=Nil;   
+    If Assigned(Client) then
+      L:=GetList(Client);
+    If L=Nil then
+      Writeln('No list found for event ',s)
+    else
+      begin
+      If (LogCode=lctIdentify) then
+        If Not FSinglePage then 
+          L.TabLabel.Text:=Event;
+      If Not FPaused then    
+        begin
+        If FInsertNew then
+          begin
+          Index:=0;
+          L.CList.Prepend([T,D,S]);
+          end
+        else  
+          Index:=L.CList.Append([T,D,S]);
+        L.Clist.SetPixMap(Index,0,FMsgImages[logCode],FmsgMasks[LogCode]);
+        end;
+      If LogCode=lctStop then
+        begin
+        L.Client:=Nil; // New clients MAY have the same addresspointer as existing;
+        If (Not FSinglePage) and FCloseOnDisconnect then
+          L.Free;
+        end;
+      end;
+    end;
+  CheckForNewClient;  
+end;
+
+// Create new list.
+
+Function  TMainForm.NewList(Client : TClient) : TClientCList;
+
+begin
+  Result:=TClientCList.Create(Client);
+  If Client<>Nil then
+    Result.TabLabel:=TfpGtkLabel.Create(SNewClient);  
+end;
+
+// Get page index on which messages for client are shown.
+// Only call when FSinglePage is not true
+
+Function TMainForm.GetClientPageIndex(Client : TClient) : Integer;
+
+Var 
+  P : TFPgtkWidget;
+ 
+begin
+  With FPages,Children do
+    begin
+    Result:=Count-1;
+    While Result>=0 do
+      begin
+      P:=GetChildOnPage(Result);
+      if Not(P is TClientClist) or
+         (TClientClist(P).Client<>Client) Then
+         Dec(Result)
+      end
+    end;
+end;
+
+// Get list on which messages for client are shown.
+// Only call when FSinglePage is not true
+
+Function  TMainForm.GetList(Client : TClient) : TClientCList;
+
+Var
+  I : Integer;
+  P : TFPgtkWidget;
+
+begin
+  If FSinglePage then 
+    Result:=FList
+  else
+    begin
+    With FPages,Children do
+      For I:=0 to Count-1 do
+        begin
+        P:=GetChildOnPage(i);
+        if P is TClientClist then
+          If TClientClist(P).Client=Client Then
+            begin
+            Result:=TClientClist(P);
+            exit
+            end;
+       end;     
+    end;  
+end;
+
+// Return current list.
+
+Function  TMainForm.CurrentList : TClientClist;
+
+begin
+  If FSinglePage then 
+    Result:=FList
+  else
+    Result:=FPages.Page as TClientCList;
+end;
+
+// Write list contents to file.
+
+Procedure TMainForm.SaveToFile(C : TClientCList; FN : String); 
+
+Var
+  F : System.text;
+  I,J : Integer;
+  S,T : String;
+  P : PGdkPixmap;
+  M : PGdkBitmap;
+  
+begin
+  Assign(F,FN);
+  rewrite(F);
+  Try
+    With C.Clist do
+      For I:=0 To count-1 do
+        begin
+        GetPixmap(I,0,P,M);
+        For J:=-1 to 3 do
+          If (FMsgImages[J]=P) then
+            T:=MsgTypes[J];
+        S:=T+' '+CellText[i,1]+' '+Celltext[I,2];
+        Writeln(F,S);
+        end;
+  finally
+    System.Close(f);
+  end;        
+end;
+ 
+                                              
+{ ---------------------------------------------------------------------
+    Callbacks for user events.
+  ---------------------------------------------------------------------}
+  
+
+Procedure TMainForm.FileClearClick(Sender : TFPGtkObject; Data : Pointer);
+
+Var
+  L:TClientClist;
+  
+begin
+  L:=CurrentList;
+  If L<>Nil then
+    L.Clist.Clear;  
+end;
+
+Procedure TMainForm.DialogSetFilename(Sender : TFPGtkWindow;Data : Pointer; Action : Integer;Initiator : TFPGtkObject);
+
+type
+  PString = ^AnsiString;
+  
+begin
+  PString(Data)^:=(Sender as TFPgtkFileSelection).Filename;
+end;
+
+Function TMainForm.GetFileName(ATitle : String) : String;
+ 
+var
+  FS : TFPgtkFileSelection;
+    
+begin
+  FS := TFPgtkFileSelection.Create (gtk_window_dialog);
+  Result:='';
+  with FS do
+    begin
+    Title:=ATitle;
+    OKButton.ConnectClicked (@(CloseWithResult), inttopointer(drOk));
+    CancelButton.ConnectClicked (@(CloseWindow), nil);
+    if Not execute (nil, @Result, @DialogSetFilename) = drOk then
+       Result:='';
+    end;
+end;
+    
+Procedure TMainForm.FileSaveClick(Sender : TFPGtkObject; Data : Pointer);
+
+Var
+  L:TClientClist;
+  FN : String;
+  
+begin
+  L:=CurrentList;
+  If L<>Nil then
+    begin
+    FN:=GetFileName(SSaveFileTitle);
+    If (FN<>'') then
+      SaveToFile(L,Fn);
+    end;
+end;
+
+Procedure TMainForm.FileCopyClick(Sender : TFPGtkObject; Data : Pointer);
+
+// not used for the moment; need to figure out a way to do this.
+
+begin
+end;
+
+Procedure TMainForm.FilePauseClick(Sender : TFPGtkObject; Data : Pointer);
+
+begin
+  If (Sender<>FFilePause) then
+    With FFilePause do
+      Active:=Not Active;
+  FPaused:=FFilePause.Active;
+  SetRunButtonBitmaps;
+end;
+
+Procedure TMainForm.FileCloseClick(Sender : TFPGtkObject; Data : Pointer);
+
+Var
+  L : TClientCList;
+
+begin
+  L:=CurrentList;
+  If (L<>Nil) and (L.Client=Nil) then
+    L.Free;
+end;
+
+Procedure TMainForm.FileExitClick(Sender : TFPGtkObject; Data : Pointer);
+
+begin
+  ShutdownDebugServer;
+  Close;
+end;
+
+Procedure TMainForm.OptionsClick(Sender : TFPGtkObject; Data : Pointer);
+
+Type
+  PBoolean = ^boolean;
+  
+begin
+  If not FCreating then
+    begin
+    PBoolean(data)^:=Not PBoolean(data)^;
+    SaveSettings;
+    If (@FLoadSinglePage=Data) then
+      ShowMessage(SCaption,SNeedsRestart);
+    end;  
+end;
+
+Procedure TMainForm.HelpAboutClick(Sender : TFPGtkObject; Data : Pointer);
+
+begin
+  With TAboutForm.Create do
+    Execute(Nil,Nil,Nil);
+end;
+
+Function TMainForm.OnDeleteEvent(Sender:TFPgtkWidget; Event:PGdkEvent; data:pointer): boolean;
+
+begin
+  ShutdownDebugServer;
+  Result:=True;
+end;
+
+end.
+
+{
+  $Log$
+  Revision 1.1  2003-01-02 14:36:25  michael
+  + Initial implementation
+
+}