From 61b4de1083c3ea6b1fb09d25b486bcb6485fa54e Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 2 Jan 2003 14:44:29 +0000 Subject: [PATCH] + Initial implementation --- utils/debugsvr/Makefile | 1296 +++++++++++++++++++++++++++++ utils/debugsvr/Makefile.fpc | 27 + utils/debugsvr/dbugintf.pp | 290 +++++++ utils/debugsvr/debugserverintf.pp | 388 +++++++++ utils/debugsvr/msgintf.pp | 51 ++ utils/debugsvr/speeddebug.pp | 39 + utils/debugsvr/testdebug.pp | 37 + 7 files changed, 2128 insertions(+) create mode 100644 utils/debugsvr/Makefile create mode 100644 utils/debugsvr/Makefile.fpc create mode 100644 utils/debugsvr/dbugintf.pp create mode 100644 utils/debugsvr/debugserverintf.pp create mode 100644 utils/debugsvr/msgintf.pp create mode 100644 utils/debugsvr/speeddebug.pp create mode 100644 utils/debugsvr/testdebug.pp diff --git a/utils/debugsvr/Makefile b/utils/debugsvr/Makefile new file mode 100644 index 0000000000..33fc13d2de --- /dev/null +++ b/utils/debugsvr/Makefile @@ -0,0 +1,1296 @@ +# +# 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_DIRS+=gtk console +override TARGET_UNITS+=msgintf debugserverintf dbugintf +override TARGET_RSTS+=debugserverintf dbugintf +override TARGET_EXAMPLES+=testdebug speeddebug +override INSTALL_FPCPACKAGE=y +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) +ifdef TARGET_RSTS +override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS)) +override CLEANRSTFILES+=$(RSTFILES) +endif +.PHONY: fpc_examples +ifdef TARGET_EXAMPLES +HASEXAMPLES=1 +override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES))) +override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES)) +override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) +override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES) +ifeq ($(OS_TARGET),os2) +override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES)) +endif +endif +ifdef TARGET_EXAMPLEDIRS +HASEXAMPLES=1 +endif +fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMPLEDIRS)) +.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 +TARGET_DIRS_GTK=1 +TARGET_DIRS_CONSOLE=1 +ifdef TARGET_DIRS_GTK +gtk_all: + $(MAKE) -C gtk all +gtk_debug: + $(MAKE) -C gtk debug +gtk_smart: + $(MAKE) -C gtk smart +gtk_release: + $(MAKE) -C gtk release +gtk_examples: + $(MAKE) -C gtk examples +gtk_shared: + $(MAKE) -C gtk shared +gtk_install: + $(MAKE) -C gtk install +gtk_sourceinstall: + $(MAKE) -C gtk sourceinstall +gtk_exampleinstall: + $(MAKE) -C gtk exampleinstall +gtk_distinstall: + $(MAKE) -C gtk distinstall +gtk_zipinstall: + $(MAKE) -C gtk zipinstall +gtk_zipsourceinstall: + $(MAKE) -C gtk zipsourceinstall +gtk_zipexampleinstall: + $(MAKE) -C gtk zipexampleinstall +gtk_zipdistinstall: + $(MAKE) -C gtk zipdistinstall +gtk_clean: + $(MAKE) -C gtk clean +gtk_distclean: + $(MAKE) -C gtk distclean +gtk_cleanall: + $(MAKE) -C gtk cleanall +gtk_info: + $(MAKE) -C gtk info +gtk_makefiles: + $(MAKE) -C gtk makefiles +gtk: + $(MAKE) -C gtk all +.PHONY: gtk_all gtk_debug gtk_smart gtk_release gtk_examples gtk_shared gtk_install gtk_sourceinstall gtk_exampleinstall gtk_distinstall gtk_zipinstall gtk_zipsourceinstall gtk_zipexampleinstall gtk_zipdistinstall gtk_clean gtk_distclean gtk_cleanall gtk_info gtk_makefiles gtk +endif +ifdef TARGET_DIRS_CONSOLE +console_all: + $(MAKE) -C console all +console_debug: + $(MAKE) -C console debug +console_smart: + $(MAKE) -C console smart +console_release: + $(MAKE) -C console release +console_examples: + $(MAKE) -C console examples +console_shared: + $(MAKE) -C console shared +console_install: + $(MAKE) -C console install +console_sourceinstall: + $(MAKE) -C console sourceinstall +console_exampleinstall: + $(MAKE) -C console exampleinstall +console_distinstall: + $(MAKE) -C console distinstall +console_zipinstall: + $(MAKE) -C console zipinstall +console_zipsourceinstall: + $(MAKE) -C console zipsourceinstall +console_zipexampleinstall: + $(MAKE) -C console zipexampleinstall +console_zipdistinstall: + $(MAKE) -C console zipdistinstall +console_clean: + $(MAKE) -C console clean +console_distclean: + $(MAKE) -C console distclean +console_cleanall: + $(MAKE) -C console cleanall +console_info: + $(MAKE) -C console info +console_makefiles: + $(MAKE) -C console makefiles +console: + $(MAKE) -C console all +.PHONY: console_all console_debug console_smart console_release console_examples console_shared console_install console_sourceinstall console_exampleinstall console_distinstall console_zipinstall console_zipsourceinstall console_zipexampleinstall console_zipdistinstall console_clean console_distclean console_cleanall console_info console_makefiles console +endif +all: fpc_all $(addsuffix _all,$(TARGET_DIRS)) +debug: fpc_debug +smart: fpc_smart +release: fpc_release +examples: fpc_examples $(addsuffix _examples,$(TARGET_DIRS)) +shared: $(addsuffix _shared,$(TARGET_DIRS)) +install: fpc_install $(addsuffix _install,$(TARGET_DIRS)) +sourceinstall: fpc_sourceinstall $(addsuffix _sourceinstall,$(TARGET_DIRS)) +exampleinstall: fpc_exampleinstall $(addsuffix _exampleinstall,$(TARGET_DIRS)) +distinstall: $(addsuffix _distinstall,$(TARGET_DIRS)) +zipinstall: $(addsuffix _zipinstall,$(TARGET_DIRS)) +zipsourceinstall: $(addsuffix _zipsourceinstall,$(TARGET_DIRS)) +zipexampleinstall: $(addsuffix _zipexampleinstall,$(TARGET_DIRS)) +zipdistinstall: $(addsuffix _zipdistinstall,$(TARGET_DIRS)) +clean: fpc_clean $(addsuffix _clean,$(TARGET_DIRS)) +distclean: fpc_distclean $(addsuffix _distclean,$(TARGET_DIRS)) +cleanall: fpc_cleanall $(addsuffix _cleanall,$(TARGET_DIRS)) +info: fpc_info +makefiles: fpc_makefiles $(addsuffix _makefiles,$(TARGET_DIRS)) +.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 +debugserverintf$(PPUEXT): msgintf$(PPUEXT) debugserverintf.pp + $(COMPILER) debugserverintf$(PASEXT) +dbugintf$(PPUEXT): msgintf$(PPUEXT) dbugintf.pp + $(COMPILER) dbugintf.pp diff --git a/utils/debugsvr/Makefile.fpc b/utils/debugsvr/Makefile.fpc new file mode 100644 index 0000000000..3da2dbebe5 --- /dev/null +++ b/utils/debugsvr/Makefile.fpc @@ -0,0 +1,27 @@ +# +# Makefile.fpc for debugserver +# + +[target] +units=msgintf debugserverintf dbugintf +dirs=gtk console +examples=testdebug speeddebug +rsts=debugserverintf dbugintf + +[clean] + +[compiler] + +[install] +fpcpackage=y + +[default] +fpcdir=../.. + + +[rules] +debugserverintf$(PPUEXT): msgintf$(PPUEXT) debugserverintf.pp + $(COMPILER) debugserverintf$(PASEXT) + +dbugintf$(PPUEXT): msgintf$(PPUEXT) dbugintf.pp + $(COMPILER) dbugintf.pp diff --git a/utils/debugsvr/dbugintf.pp b/utils/debugsvr/dbugintf.pp new file mode 100644 index 0000000000..173d778f78 --- /dev/null +++ b/utils/debugsvr/dbugintf.pp @@ -0,0 +1,290 @@ +{ + $Id$ + This file is part of the Free Pascal run time library. + Copyright (c) 2003 by the Free Pascal development team + + User interface 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. + + **********************************************************************} +{$ifdef fpc} +{$mode objfpc} +{$h+} +{$endif} +unit dbugintf; + + +interface + +uses +{$ifdef fpc} + linux, +{$else} + Libc, +{$endif} + msgintf, + classes, + ssockets; + +Type + TDebugLevel = (dlInformation,dlWarning,dlError); + +{$ifdef fpc} + pid_t = longint; +{$endif} + +procedure SendBoolean(const Identifier: string; const Value: Boolean); +procedure SendDateTime(const Identifier: string; const Value: TDateTime); +procedure SendDebugEx(const Msg: string; MType: TDebugLevel); +procedure SendDebug(const Msg: string); +procedure SendInteger(const Identifier: string; const Value: Integer); +procedure SendMethodEnter(const MethodName: string); +procedure SendMethodExit(const MethodName: string); +procedure SendSeparator; +procedure SendDebugFmt(const Msg: string; const Args: array of const); +procedure SendDebugFmtEx(const Msg: string; const Args: array of const; MType: TDebugLevel); + +{ low-level routines } + +procedure SendDebugMessage(Const Msg : TDebugMessage); +function CreateDebugStream : TStream; +function StartDebugServer : pid_t; +Procedure InitDebugStream; + +Const + SendError : String = ''; + +ResourceString + SProcessID = 'Process %d: %s'; + SEntering = '> Entering '; + SExiting = '< Exiting '; + SSeparator = '>-=-=-=-=-=-=-=-=-=-=-=-=-=-=-<'; + +implementation + +Uses SysUtils,process; +// UnixProcessUtils; + +Const + DmtInformation = lctInformation; + DmtWarning = lctWarning; + DmtError = lctError; + ErrorLevel : Array[TDebugLevel] of integer + = (dmtInformation,dmtWarning,dmtError); + +Const + DebugStream : TStream = nil; + +Procedure WriteMessage(S : TStream; Const Msg : TDebugMessage); + +Var + MsgSize : Integer; + +begin + S.WriteBuffer(Msg.MsgType,SizeOf(Integer)); + S.WriteBuffer(Msg.MsgTimeStamp,SizeOf(TDateTime)); + MsgSize:=Length(Msg.Msg); + S.WriteBuffer(MsgSize,SizeOf(Integer)); + S.WriteBuffer(Msg.msg[1],MsgSize); +end; + +procedure SendDebugMessage(Const Msg : TDebugMessage); + +begin + try + If DebugStream=Nil then + begin + InitDebugStream; + end; + WriteMessage(debugStream,Msg); + except + On E : Exception do + SendError:=E.Message; + end; +end; + +procedure SendBoolean(const Identifier: string; const Value: Boolean); + +Const + Booleans : Array[Boolean] of string = ('False','True'); + +begin + SendDebugFmt('%s = %s',[Identifier,Booleans[value]]); +end; + +procedure SendDateTime(const Identifier: string; const Value: TDateTime); + +begin + SendDebugFmt('%s = %s',[Identifier,DateTimeToStr(Value)]); +end; + +procedure SendDebugEx(const Msg: string; MType: TDebugLevel); + +Var + Mesg : TDebugMessage; + +begin + Mesg.MsgTimeStamp:=Now; + Mesg.MsgType:=ErrorLevel[MTYpe]; + Mesg.Msg:=Msg; + SendDebugMessage(Mesg); +end; + +procedure SendDebug(const Msg: string); + +Var + Mesg : TDebugMessage; +begin + Mesg.MsgTimeStamp:=Now; + Mesg.MsgType:=dmtInformation; + Mesg.Msg:=Msg; + SendDebugMessage(Mesg); +end; + +procedure SendInteger(const Identifier: string; const Value: Integer); + +begin + SendDebugFmt('%s = %d',[identifier,Value]); +end; + +procedure SendMethodEnter(const MethodName: string); + +begin + SendDebug(SEntering+MethodName); +end; + +procedure SendMethodExit(const MethodName: string); + +begin + SendDebug(SExiting+MethodName); +end; + +procedure SendSeparator; + +begin + SendDebug(SSeparator); +end; + +procedure SendDebugFmt(const Msg: string; const Args: array of const); + +Var + Mesg : TDebugMessage; + +begin + Mesg.MsgTimeStamp:=Now; + Mesg.MsgType:=dmtInformation; + Mesg.Msg:=Format(Msg,Args); + SendDebugMessage(Mesg); +end; + +procedure SendDebugFmtEx(const Msg: string; const Args: array of const; MType: TDebugLevel); + +Var + Mesg : TDebugMessage; + +begin + Mesg.MsgTimeStamp:=Now; + Mesg.MsgType:=ErrorLevel[mType]; + Mesg.Msg:=Format(Msg,Args); + SendDebugMessage(Mesg); +end; + +function StartDebugServer : pid_t; + +begin + With TProcess.Create(Nil) do + Try + CommandLine:='debugserver'; + Execute; + Finally + Free; + end; +end; + +function CreateUnixDebugStream(SocketFile : String) : TStream; + +{$ifdef fpc} +Var + tv,tr : timespec; +{$endif} + +begin + If Not FileExists(DebugSocket) then + begin + StartDebugServer; +{$ifndef fpc} + sleep(1000); +{$else} + tv.tv_sec:=1; + tv.tv_nsec:=0; + nanosleep(tv,tr); +{$endif} + end; +{$ifdef fpc} + Result:=TUnixSocket.Create(SocketFile); +{$else} + Result:=TUnixSocket.CreateFromFile(SocketFile); +{$endif} +end; + +Function CreateInetDebugStream (HostName : String; Port : Word) : TStream; + +begin + Result:=TInetSocket.Create(HostName,Port); +end; + + +function CreateDebugStream : TStream; + +Var + Msg : TDebugMessage; + +begin + Case DebugConnection of + dcUnix : Result:=CreateUnixDebugStream(DebugSocket); + dcInet : Result:=CreateInetDebugStream(DebugHostName,DebugPort); + end; + Msg.MsgType:=lctIdentify; + Msg.MsgTimeStamp:=Now; + Msg.Msg:=Format(SProcessID,[getPID,ExtractFileName(Paramstr(0))]); + WriteMessage(REsult,Msg); +end; + +procedure FreeDebugStream; + +Var i : Integer; + +begin + If (DebugStream<>Nil) then + try + i:=-1; + DebugStream.WriteBuffer(I,SizeOf(I)); + DebugStream.Free; + except + end; +end; + +Procedure InitDebugStream; + +begin + debugstream:=CreateDebugStream; +end; + +Initialization + +Finalization + FreeDebugStream; +end. + +{ + $Log$ + Revision 1.1 2003-01-02 14:44:29 michael + + Initial implementation + +} diff --git a/utils/debugsvr/debugserverintf.pp b/utils/debugsvr/debugserverintf.pp new file mode 100644 index 0000000000..ca7b76d861 --- /dev/null +++ b/utils/debugsvr/debugserverintf.pp @@ -0,0 +1,388 @@ +{ + $Id$ + This file is part of the Free Pascal run time library. + Copyright (c) 2003 by the Free Pascal development team + + Interface 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 debugserverintf; + +Interface + +Uses + msgintf,linux,classes,sockets,sysutils; + +Const + MsgTypes : Array[-1..3] of string = + ('Disconnect','Information','Warning','Error','Identify'); + + +Type + Thandle = Longint; // Abstraction for easier porting. + + TClient = Class(TObject) + Handle : THandle; + Peer : ShortString; + Data : Pointer; + end; + + TDebugEvent = Record + Client : TClient; + LogCode : Integer; + TimeStamp : TDateTime; + Event : String; + end; + +Var + FClients : TList; + Accepting : Boolean; + Quit : Boolean; + DebugLogCallback : Procedure (Const Event : TDebugEvent); + DebugObjLogCallBack : Procedure (Const Event : TDebugEvent) of Object; + CloseConnectionCallBack : Procedure (Client : TClient); + CloseObjConnectionCallBack : Procedure (Client : TClient) of Object; + + +Procedure OpenDebugServer; +Procedure CloseDebugServer; +Function ClientFromHandle (AHandle : THandle) : TClient; +Procedure ReadMessage(Handle : THandle); +Procedure ReadMessageEvent(Handle : THandle; Var Event : TDebugEvent); +Function CheckNewConnection : TClient; +procedure CloseConnection(Client : TClient); +Procedure CloseClientHandle(Handle : THandle); + +ResourceString + SClientLog = 'Client log %d'; + SEvent = 'Event'; + SMessage = 'Message'; + SStopAccepting = 'Stop accepting new connections'; + SStartAccepting = 'Start accepting new connections'; + SErrSocketFailed = 'Creation of socket failed: %s'; + SErrBindFailed = 'Binding of socket failed: %s'; + SErrListenFailed = 'Listening on port #%d failed: %s'; + SErrAcceptFailed = 'Could not accept a client connection: %d'; + SClosingConnection = 'Closing connection.'; + SErrFailedToSetSignalHandler = 'Failed to set signal handler.'; + SPeerAt = 'Peer at %d'; + + +Implementation + +Function ClientFromHandle (AHandle : THandle) : TClient; + +Var + I : Longint; + +begin + Result:=Nil; + I:=0; + With FClients do + While (I0 do + begin + C:=TClient(Items[Count-1]); + FileClose(C.Handle); + C.Free; + Delete(Count-1); + end; + FileClose(FSocket); + DeleteFile(DebugSocket); + end; +end; + +{ --------------------------------------------------------------------- + Communications handling: Inet Socket setup + ---------------------------------------------------------------------} + +Procedure SetupInetSocket(Aport : Word); + +var + Flags,AddrLen : Integer; + FInetAddr : TInetSockAddr; + FFileName : String; + Quit : Boolean; + +begin + FSocket:=Socket(AF_INET,SOCK_STREAM,0); + If FSocket<0 Then + Raise Exception.Create(SErrSocketFailed); + Flags:=FCntl(FSocket,F_GETFL); + Flags:=Flags or Open_NONBLOCK; + FCntl(FSocket,F_SETFL,Flags); + FInetAddr.Family := AF_INET; + Writeln('Using port : ',APort); + FInetAddr.Port := Swap(APort); + FInetAddr.Addr := 0; + If Not Bind(FSocket,FInetAddr,SizeOf(FInetAddr)) then + Raise Exception.CreateFmt(SErrBindFailed,[FFileName]); + If Not (Listen(FSocket,5)) then + Raise Exception.CreateFmt(SErrListenFailed,[FSocket]); +end; + +Procedure DestroyInetSocket; + +Var + C : TClient; + +begin + If Assigned(FClients) then + begin + With FClients do + While Count>0 do + begin + C:=TClient(Items[Count-1]); + FileClose(C.Handle); + C.Free; + Delete(Count-1); + end; + FileClose(FSocket); + end; +end; + +{ --------------------------------------------------------------------- + Communications handling: Public interface + ---------------------------------------------------------------------} + + +Procedure OpenDebugServer; + +begin + Case DebugConnection of + dcUnix : SetupUnixSocket; + dcInet : SetupInetSocket(DebugPort); + end; + FClients:=TList.Create; + Accepting:=True; +end; + +Procedure CloseDebugServer; + +begin + Accepting:=False; + Case DebugConnection of + dcUnix : DestroyUnixSocket; + dcInet : DestroyInetSocket; + end; + FClients.Free; + FClients:=Nil; +end; + + +{ --------------------------------------------------------------------- + Communications handling: Connection handling + ---------------------------------------------------------------------} + +Function GetNewConnection : THandle; + +Var + ClientAddr: TUnixSockAddr; + L : Integer; + +begin + If Accepting then + begin + L:=SizeOf(ClientAddr); + Result:=Accept(FSocket,ClientAddr,L); + If (Result<0) Then + if (Errno<>SYS_EWOULDBLOCK) then + Raise Exception.CreateFmt(SErrAcceptFailed,[FSocket]) + else + Result:=-1 +{$ifdef debug} + else + Writeln('New connection detected at ',Result) +{$endif debug} + end + else + Result:=-1; +end; + +Function CheckNewConnection : TClient; + +Var + NC : THandle; + +begin + NC:=GetNewConnection; + If (NC=-1) then + Result:=Nil + else + begin + Result:=TClient.Create; + Result.Handle:=NC; +{$ifdef debug} + Writeln('Added new client', nc, ' at : ',FClients.Add(Result)); +{$else} + FClients.Add(Result); +{$endif debug} + end; +end; + +Procedure CloseClientHandle(Handle : THandle); + +begin + ShutDown(Handle,2); + FileClose(Handle); +end; + +Procedure CloseConnection(Client : TClient); + +Var + I : longint; + C : TClient; + +begin + If Assigned(Client) then + begin + If Assigned(CloseConnectionCallBack) then + CloseConnectionCallBack(Client); + If Assigned(CloseObjConnectionCallBack) then + CloseObjConnectionCallBack(Client); + CloseClientHandle(Client.Handle); + FClients.Remove(Client); + Client.Free; + end; +end; + +{ --------------------------------------------------------------------- + Message handling + ---------------------------------------------------------------------} + +Function MsgToEvent(AHandle: THandle; ALogCode : Integer; ATimeStamp : TDateTime; AEvent : String) : TDebugEvent; + +begin + With Result do + begin + Client:=ClientFromHandle(AHandle); + If (Client<>Nil) then + begin + If (ALogCode=lctIdentify) then + Client.Peer:=AEvent; + end; + LogCode:=ALogCode; + TimeStamp:=ATimeStamp; + Event:=AEvent; + end; +end; + +Procedure LogEvent(Event : TDebugEvent); + +begin + if Assigned(DebugLogCallback) then + DebugLogCallBack(Event); + If Assigned(DebugObjLogCallBack) then + DebugObjLogCallBack(Event); +end; + +Procedure ReadMessageEvent(Handle : THandle; Var Event : TDebugEvent); + +Var + FDebugMessage : TDebugMessage; + msgSize : Integer; + +begin + Try + With FDebugMessage do + begin + // Select reports read ready when closed, so check for this. + If (FileRead(Handle,msgType,SizeOf(Integer))=0) or (MsgType=-1) then + begin + event:=MsgToEvent(Handle,lctStop,Now,SClosingConnection); + If Assigned(Event.Client) then + CloseConnection(Event.Client) + else + CloseClientHandle(Handle); + end + else + begin + FileRead(Handle,msgTimeStamp,sizeof(TDateTime)); + FileRead(Handle,MsgSize,SizeOf(Integer)); + SetLength(Msg,MsgSize); + FileRead(Handle,Msg[1],MsgSize); + Event:=MsgToEvent(Handle,msgType,msgTimeStamp,Msg); + end + end; + except + On E : Exception do + Event:=MsgToEvent(Handle,lctError,Now,E.Message); + end; +end; + +Procedure ReadMessage(Handle : THandle); + +Var + Event : TDebugEvent; + +begin + ReadMessageEvent(Handle,Event); + LogEvent(Event); +end; + +end. + +{ + $Log$ + Revision 1.1 2003-01-02 14:44:29 michael + + Initial implementation + +} diff --git a/utils/debugsvr/msgintf.pp b/utils/debugsvr/msgintf.pp new file mode 100644 index 0000000000..5721a9ecc5 --- /dev/null +++ b/utils/debugsvr/msgintf.pp @@ -0,0 +1,51 @@ +{ + $Id$ + This file is part of the Free Pascal run time library. + Copyright (c) 2003 by the Free Pascal development team + + Debugclient/server interface definition. + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + **********************************************************************} +unit msgintf; + +interface + +Type + TDebugConnection = (dcUnix,dcInet); + +Const + DebugSocket : String = '/tmp/debugserver'; + DebugHostName : String = 'localhost'; + DebugPort : Word = 4321; + DebugConnection : TDebugConnection = dcunix; + + lctStop = -1; + lctInformation = 0; + lctWarning = 1; + lctError = 2; + lctIdentify = 3; + +Type + TDebugMessage = Record + MsgType : Integer; + MsgTimeStamp : TDateTime; + Msg : String; + end; + +implementation + +end. + +{ + $Log$ + Revision 1.1 2003-01-02 14:44:29 michael + + Initial implementation + +} diff --git a/utils/debugsvr/speeddebug.pp b/utils/debugsvr/speeddebug.pp new file mode 100644 index 0000000000..2be8f736a5 --- /dev/null +++ b/utils/debugsvr/speeddebug.pp @@ -0,0 +1,39 @@ +{ + $Id$ + This file is part of the Free Pascal run time library. + Copyright (c) 2003 by the Free Pascal development team + + speed test 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+} +program testdebug; + +uses dbugintf,sysutils; + +Var + i : integer; + S : String; + +begin + For I:=1 to 10000 do + begin + S:=Format('Message no %d',[i]); + SendDebugEx(S,TDebugLevel(I mod 3)); + end; +end. + +{ + $Log$ + Revision 1.1 2003-01-02 14:44:29 michael + + Initial implementation + +} diff --git a/utils/debugsvr/testdebug.pp b/utils/debugsvr/testdebug.pp new file mode 100644 index 0000000000..2d4ee880b1 --- /dev/null +++ b/utils/debugsvr/testdebug.pp @@ -0,0 +1,37 @@ +{ + $Id$ + This file is part of the Free Pascal run time library. + Copyright (c) 2003 by the Free Pascal development team + + Interactive test for 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. + + **********************************************************************} +program testdebug; + +uses dbugintf; + +Var + S : String; + +begin + Repeat + Writeln('Enter message to send to debug server (STOP exits): '); + Write('> '); + Readln(S); + SendDebugEx(S,dlError); + Until (S='STOP'); +end. + +{ + $Log$ + Revision 1.1 2003-01-02 14:44:29 michael + + Initial implementation + +} \ No newline at end of file