summaryrefslogtreecommitdiff
path: root/packages/regexpr
diff options
context:
space:
mode:
authormarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-01-26 16:57:00 +0000
committermarco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2>2008-01-26 16:57:00 +0000
commit5367a5928b552116ad4cfb13416737141d5406fc (patch)
tree603eb8fab30ee6ed72e2ca505d76a40c5122869c /packages/regexpr
parent58fcedcd42b0851bfcfc484ad80025cce3768917 (diff)
downloadfpc-5367a5928b552116ad4cfb13416737141d5406fc.tar.gz
* regexpr moved
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@9943 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/regexpr')
-rw-r--r--packages/regexpr/Makefile2585
-rw-r--r--packages/regexpr/Makefile.fpc28
-rw-r--r--packages/regexpr/fpmake.pp28
-rw-r--r--packages/regexpr/src/regexpr.pp1207
-rw-r--r--packages/regexpr/tests/testreg1.pp877
5 files changed, 4725 insertions, 0 deletions
diff --git a/packages/regexpr/Makefile b/packages/regexpr/Makefile
new file mode 100644
index 0000000000..ac8052fba1
--- /dev/null
+++ b/packages/regexpr/Makefile
@@ -0,0 +1,2585 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2008/01/26]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override PACKAGE_NAME=regexpr
+override PACKAGE_VERSION=2.0.0
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_UNITS+=regexpr
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_EXAMPLES+=testreg1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_EXAMPLES+=testreg1
+endif
+override INSTALL_FPCPACKAGE=y
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_OPTIONS+=-S2
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_SOURCEDIR+=src tests examples
+endif
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(CPU_TARGET)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(CPU_TARGET)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_units
+ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)
+override ALLTARGET+=fpc_units
+override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
+override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
+override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+endif
+fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_examples
+ifneq ($(TARGET_EXAMPLES),)
+HASEXAMPLES=1
+override EXAMPLESOURCEFILES:=$(wildcard $(addsuffix .pp,$(TARGET_EXAMPLES)) $(addsuffix .pas,$(TARGET_EXAMPLES)) $(addsuffix .lpr,$(TARGET_EXAMPLES)) $(addsuffix .dpr,$(TARGET_EXAMPLES)))
+override EXAMPLEFILES:=$(addsuffix $(EXEEXT),$(TARGET_EXAMPLES))
+override EXAMPLEOFILES:=$(addsuffix $(OEXT),$(TARGET_EXAMPLES)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES))) $(addprefix $(IMPORTLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_EXAMPLES)))
+override CLEANEXEFILES+=$(EXAMPLEFILES) $(EXAMPLEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_EXAMPLES))
+endif
+endif
+ifneq ($(TARGET_EXAMPLEDIRS),)
+HASEXAMPLES=1
+endif
+fpc_examples: all $(EXAMPLEFILES) $(addsuffix _all,$(TARGET_EXAMPLEDIRS))
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+ @$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+ $(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+ $(MAKE) all DEBUG=1
+fpc_release:
+ $(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+ $(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+ $(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(PPUEXT): %.pas
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.pp
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.pas
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.lpr
+ $(COMPILER) $<
+ $(EXECPPAS)
+%$(EXEEXT): %.dpr
+ $(COMPILER) $<
+ $(EXECPPAS)
+%.res: %.rc
+ windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+ $(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+ $(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+ @$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+ $(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+ $(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+ -$(UPXPROG) $(INSTALLEXEFILES)
+endif
+ $(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+ $(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+ $(MKDIR) $(INSTALL_UNITDIR)
+ $(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+ $(MKDIR) $(INSTALL_UNITDIR)
+ $(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+ $(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+ $(MKDIR) $(INSTALL_LIBDIR)
+ $(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+ ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+ $(MKDIR) $(INSTALL_DATADIR)
+ $(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+ $(MKDIR) $(INSTALL_SOURCEDIR)
+ $(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+ $(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+ $(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+ $(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(PACKAGE_NAME)
+endif
+endif
+ifndef FULLZIPNAME
+FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+ $(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+ $(MKDIR) $(DIST_DESTDIR)
+ $(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+ $(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+ echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+ echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+ echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+ /bin/sh $(ZIPWRAPPER)
+else
+ifdef RUNBATCH
+ $(RUNBATCH) (ZIPWRAPPER)
+else
+ $(ZIPWRAPPER)
+endif
+endif
+ $(DEL) $(ZIPWRAPPER)
+else
+ $(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+ $(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+ $(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+ $(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+ $(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+ -$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+ -$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+ -$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+ -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+ -$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+ -$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+ -$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ -$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+ -$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+ -$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+ -$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+ -$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+ -$(DELTREE) units
+ -$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+ -$(DEL) *.o *.ppu *.a
+endif
+ -$(DELTREE) *$(SMARTEXT)
+ -$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+ -$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+ -$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+ -$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+ @$(ECHO)
+ @$(ECHO) == Package info ==
+ @$(ECHO) Package Name..... $(PACKAGE_NAME)
+ @$(ECHO) Package Version.. $(PACKAGE_VERSION)
+ @$(ECHO)
+ @$(ECHO) == Configuration info ==
+ @$(ECHO)
+ @$(ECHO) FPC.......... $(FPC)
+ @$(ECHO) FPC Version.. $(FPC_VERSION)
+ @$(ECHO) Source CPU... $(CPU_SOURCE)
+ @$(ECHO) Target CPU... $(CPU_TARGET)
+ @$(ECHO) Source OS.... $(OS_SOURCE)
+ @$(ECHO) Target OS.... $(OS_TARGET)
+ @$(ECHO) Full Source.. $(FULL_SOURCE)
+ @$(ECHO) Full Target.. $(FULL_TARGET)
+ @$(ECHO) SourceSuffix. $(SOURCESUFFIX)
+ @$(ECHO) TargetSuffix. $(TARGETSUFFIX)
+ @$(ECHO)
+ @$(ECHO) == Directory info ==
+ @$(ECHO)
+ @$(ECHO) Required pkgs... $(REQUIRE_PACKAGES)
+ @$(ECHO)
+ @$(ECHO) Basedir......... $(BASEDIR)
+ @$(ECHO) FPCDir.......... $(FPCDIR)
+ @$(ECHO) CrossBinDir..... $(CROSSBINDIR)
+ @$(ECHO) UnitsDir........ $(UNITSDIR)
+ @$(ECHO) PackagesDir..... $(PACKAGESDIR)
+ @$(ECHO)
+ @$(ECHO) GCC library..... $(GCCLIBDIR)
+ @$(ECHO) Other library... $(OTHERLIBDIR)
+ @$(ECHO)
+ @$(ECHO) == Tools info ==
+ @$(ECHO)
+ @$(ECHO) As........ $(AS)
+ @$(ECHO) Ld........ $(LD)
+ @$(ECHO) Ar........ $(AR)
+ @$(ECHO) Rc........ $(RC)
+ @$(ECHO)
+ @$(ECHO) Mv........ $(MVPROG)
+ @$(ECHO) Cp........ $(CPPROG)
+ @$(ECHO) Rm........ $(RMPROG)
+ @$(ECHO) GInstall.. $(GINSTALL)
+ @$(ECHO) Echo...... $(ECHO)
+ @$(ECHO) Shell..... $(SHELL)
+ @$(ECHO) Date...... $(DATE)
+ @$(ECHO) FPCMake... $(FPCMAKE)
+ @$(ECHO) PPUMove... $(PPUMOVE)
+ @$(ECHO) Upx....... $(UPXPROG)
+ @$(ECHO) Zip....... $(ZIPPROG)
+ @$(ECHO)
+ @$(ECHO) == Object info ==
+ @$(ECHO)
+ @$(ECHO) Target Loaders........ $(TARGET_LOADERS)
+ @$(ECHO) Target Units.......... $(TARGET_UNITS)
+ @$(ECHO) Target Implicit Units. $(TARGET_IMPLICITUNITS)
+ @$(ECHO) Target Programs....... $(TARGET_PROGRAMS)
+ @$(ECHO) Target Dirs........... $(TARGET_DIRS)
+ @$(ECHO) Target Examples....... $(TARGET_EXAMPLES)
+ @$(ECHO) Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+ @$(ECHO)
+ @$(ECHO) Clean Units......... $(CLEAN_UNITS)
+ @$(ECHO) Clean Files......... $(CLEAN_FILES)
+ @$(ECHO)
+ @$(ECHO) Install Units....... $(INSTALL_UNITS)
+ @$(ECHO) Install Files....... $(INSTALL_FILES)
+ @$(ECHO)
+ @$(ECHO) == Install info ==
+ @$(ECHO)
+ @$(ECHO) DateStr.............. $(DATESTR)
+ @$(ECHO) ZipName.............. $(ZIPNAME)
+ @$(ECHO) ZipPrefix............ $(ZIPPREFIX)
+ @$(ECHO) ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+ @$(ECHO) ZipSuffix............ $(ZIPSUFFIX)
+ @$(ECHO) FullZipName.......... $(FULLZIPNAME)
+ @$(ECHO) Install FPC Package.. $(INSTALL_FPCPACKAGE)
+ @$(ECHO)
+ @$(ECHO) Install base dir..... $(INSTALL_BASEDIR)
+ @$(ECHO) Install binary dir... $(INSTALL_BINDIR)
+ @$(ECHO) Install library dir.. $(INSTALL_LIBDIR)
+ @$(ECHO) Install units dir.... $(INSTALL_UNITDIR)
+ @$(ECHO) Install source dir... $(INSTALL_SOURCEDIR)
+ @$(ECHO) Install doc dir...... $(INSTALL_DOCDIR)
+ @$(ECHO) Install example dir.. $(INSTALL_EXAMPLEDIR)
+ @$(ECHO) Install data dir..... $(INSTALL_DATADIR)
+ @$(ECHO)
+ @$(ECHO) Dist destination dir. $(DIST_DESTDIR)
+ @$(ECHO) Dist zip name........ $(DIST_ZIPNAME)
+ @$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+ fpc_makefile_dirs
+fpc_makefile:
+ $(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+ $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+ $(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples: fpc_examples
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall: fpc_distinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_zipdistinstall
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:
diff --git a/packages/regexpr/Makefile.fpc b/packages/regexpr/Makefile.fpc
new file mode 100644
index 0000000000..8472282c66
--- /dev/null
+++ b/packages/regexpr/Makefile.fpc
@@ -0,0 +1,28 @@
+#
+# Makefile.fpc for RegExpr
+#
+
+[package]
+name=regexpr
+version=2.0.0
+
+[target]
+units=regexpr
+examples=testreg1
+
+[compiler]
+options=-S2
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[compiler]
+includedir=src
+sourcedir=src tests examples
+
+[rules]
+.NOTPARALLEL:
+
diff --git a/packages/regexpr/fpmake.pp b/packages/regexpr/fpmake.pp
new file mode 100644
index 0000000000..d2ba31db66
--- /dev/null
+++ b/packages/regexpr/fpmake.pp
@@ -0,0 +1,28 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+ P : TPackage;
+ T : TTarget;
+begin
+ With Installer do
+ begin
+{$endif ALLPACKAGES}
+
+ P:=AddPackage('regexpr');
+{$ifdef ALLPACKAGES}
+ P.Directory:='regexpr';
+{$endif ALLPACKAGES}
+ P.Version:='2.0.0';
+ P.SourcePath.Add('src');
+
+ T:=P.Targets.AddUnit('regexpr.pp');
+
+{$ifndef ALLPACKAGES}
+ Run;
+ end;
+end.
+{$endif ALLPACKAGES}
diff --git a/packages/regexpr/src/regexpr.pp b/packages/regexpr/src/regexpr.pp
new file mode 100644
index 0000000000..9dd7ea14bf
--- /dev/null
+++ b/packages/regexpr/src/regexpr.pp
@@ -0,0 +1,1207 @@
+{ $DEFINE DEBUG}
+
+{
+ This unit implements basic regular expression support
+
+ This file is part of the Free Pascal run time library.
+ Copyright (c) 2000-2006 by Florian Klaempfland Carl Eric Codere
+
+ 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.
+
+ **********************************************************************}
+{.$ define DEBUG}
+
+(*
+ - newline handling (uses all known formats of ASCII, #10,#13,#13#10 and #$85
+
+ TODO:
+ - correct backtracking, for example in (...)*
+ - full | support (currently requires to put all items with | operator
+ between parenthesis (in a group) to take care over order priority.
+ Therefore the following would work: (foo)|(nofoo) but not
+ foo|nofoo
+ - getting substrings and using substrings with \1 etc.
+ - do we treat several multiline characters in a row as a single
+ newline character for $ and ^?
+*)
+
+{$IFDEF FPC}
+{$mode objfpc}
+{$ENDIF}
+
+{** @abstract(Regular expression unit)
+
+ This unit implements a basic regular expression parser that mostly conforms
+ to the POSIX extended-regular expression syntax. It also supports standard
+ escape characters for patterns (as defined in PERL).
+}
+unit regexpr;
+
+ interface
+
+ { the following declarions are only in the interface because }
+ { some procedures return pregexprentry but programs which }
+ { use this unit shouldn't access this data structures }
+ type
+ tcharset = set of char;
+ tregexprentrytype = (ret_charset,ret_or,
+ ret_illegalend,ret_backtrace,ret_startline,
+ ret_endline,ret_pattern);
+
+ pregexprentry = ^tregexprentry;
+ tregexprentry = record
+ next,nextdestroy : pregexprentry;
+ case typ : tregexprentrytype of
+ ret_charset : (chars : tcharset; elsepath : pregexprentry);
+ {** This is a complete pattern path ()+ , ()* or ()?, n,m }
+ ret_pattern: (pattern: pregexprentry; minoccurs: integer; maxoccurs: integer; alternative : pregexprentry);
+ end;
+
+ tregexprflag = (
+ ref_singleline,
+ {** This indicates that a start of line is either the
+ start of the pattern or a linebreak. }
+ ref_multiline,
+ {** The match will be done in a case-insensitive way
+ according to US-ASCII character set. }
+ ref_caseinsensitive);
+ tregexprflags = set of tregexprflag;
+
+ TRegExprEngine = record
+ Data : pregexprentry;
+ DestroyList : pregexprentry;
+ Flags : TRegExprFlags;
+ end;
+
+ const
+ cs_allchars : tcharset = [#0..#255];
+ cs_wordchars : tcharset = ['A'..'Z','a'..'z','_','0'..'9'];
+ cs_newline : tcharset = [#10];
+ cs_digits : tcharset = ['0'..'9'];
+ cs_whitespace : tcharset = [' ',#9];
+
+ var
+ { these are initilized in the init section of the unit }
+ cs_nonwordchars : tcharset;
+ cs_nondigits : tcharset;
+ cs_nonwhitespace : tcharset;
+
+ { the following procedures can be used by units basing }
+ { on the regexpr unit }
+
+ {** From a regular expression, compile an encoded version of the regular expression.
+
+ @param(regexpr Regular expression to compile)
+ @param(flags Flags relating to the type of parsing that will occur)
+ @param(RegExprEngine The actual encoded version of the regular expression)
+ @returns(true if success, otherwise syntax error in compiling regular expression)
+ }
+ function GenerateRegExprEngine(regexpr : pchar;flags : tregexprflags;var RegExprEngine: TRegExprEngine): boolean;
+
+{$IFDEF FPC}
+ {** Backward compatibility routine }
+ function GenerateRegExprEngine(regexpr : pchar;flags : tregexprflags): TREGExprEngine;
+{$ENDIF}
+
+ {** Frees all up resources used for the encoded regular expression }
+ procedure DestroyRegExprEngine(var regexpr : TRegExprEngine);
+
+ {** @abstract(Matches a regular expression)
+
+ @param(RegExprEngine The actual compiled regular expression to match against)
+ @param(p The text to search for for a match)
+ @param(index zero-based index to the start of the match -1 if no match in p)
+ @param(len length of the match)
+ @returns(true if there was a match, otherwise false)
+ }
+ function RegExprPos(RegExprEngine : TRegExprEngine;p : pchar;var index,len : longint) : boolean;
+
+ function RegExprReplaceAll(RegExprEngine : TRegExprEngine;const src,newstr : ansistring;var dest : ansistring) : sizeint;
+
+ { This function Escape known regex chars and place the result on Return. If something went wrong the
+ function will return false. }
+ function RegExprEscapeStr (const S : string) : string;
+
+ implementation
+
+{$ifdef DEBUG}
+ procedure writecharset(c : tcharset);
+
+ var
+ b : byte;
+
+ begin
+ for b:=20 to 255 do
+ if chr(b) in c then
+ write(chr(b));
+ writeln;
+ end;
+
+
+ const
+
+ typ2str : array[tregexprentrytype] of string =
+ (
+ 'ret_charset',
+ 'ret_or',
+ 'ret_illegalend',
+ 'ret_backtrace',
+ 'ret_startline',
+ 'ret_endline',
+ 'ret_pattern'
+ );
+
+
+ { Dumps all the next elements of a tree }
+ procedure dumptree(space: string; regentry: pregexprentry);
+ begin
+ while assigned(regentry) do
+ begin
+ WriteLn(space+'------- Node Type ',typ2str[regentry^.typ]);
+ if (regentry^.typ = ret_charset) then
+ WriteCharSet(regentry^.chars);
+ { dump embedded pattern information }
+ if regentry^.typ = ret_pattern then
+ begin
+ dumptree(space+#9,regentry^.pattern);
+ WriteLn(space+#9,' --- Alternative nodes ');
+ if assigned(regentry^.alternative) then
+ dumptree(space+#9#9,regentry^.alternative);
+ end;
+ if regentry^.typ = ret_startline then
+ dumptree(space+#9,regentry^.pattern);
+ regentry:=regentry^.next;
+ end;
+ end;
+{$endif DEBUG}
+
+
+ {** Determines the length of a pattern, including sub-patterns.
+
+ It goes through the nodes and returns the pattern length
+ between the two, using minOccurs as required.
+
+ Called recursively.
+ }
+ function patlength(hp1: pregexprentry): integer;
+ var
+ count: integer;
+ hp: pregexprentry;
+ begin
+ count:=0;
+ if hp1^.typ=ret_pattern then
+ hp:=hp1^.pattern
+ else
+ hp:=hp1;
+ { now go through all chars and get the length
+ does not currently take care of embedded patterns
+ }
+ while assigned(hp) do
+ begin
+ if hp^.typ = ret_pattern then
+ begin
+ inc(count,patlength(hp));
+ end
+ else
+ if hp^.typ = ret_charset then
+ inc(count);
+ hp:=hp^.next;
+ end;
+ if hp1^.typ=ret_pattern then
+ begin
+ count:=hp1^.minOccurs*count;
+ end;
+ patlength:=count;
+ end;
+
+ function GenerateRegExprEngine(regexpr : pchar;flags : tregexprflags; var RegExprEngine:TRegExprEngine) : boolean;
+
+ var
+ first : pregexprentry;
+
+ procedure doregister(p : pregexprentry);
+
+ begin
+ p^.nextdestroy:=first;
+ first:=p;
+ end;
+
+ var
+ currentpos : pchar;
+ error : boolean;
+
+ procedure readchars(var chars: tcharset);
+
+ var
+ c1 : char;
+
+ begin
+ chars:=[];
+ case currentpos^ of
+ #0:
+ exit;
+ '.':
+ begin
+ inc(currentpos);
+ chars:=cs_allchars-cs_newline;
+ end;
+ '\':
+ begin
+ inc(currentpos);
+ case currentpos^ of
+ #0:
+ begin
+ error:=true;
+ exit;
+ end;
+ 't':
+ begin
+ inc(currentpos);
+ chars:=[#9];
+ end;
+ 'n':
+ begin
+ inc(currentpos);
+ chars:=[#10];
+ end;
+ 'r':
+ begin
+ inc(currentpos);
+ chars:=[#13];
+ end;
+ 'd':
+ begin
+ inc(currentpos);
+ chars:=cs_digits;
+ end;
+ 'D':
+ begin
+ inc(currentpos);
+ chars:=cs_nondigits;
+ end;
+ 's':
+ begin
+ inc(currentpos);
+ chars:=cs_whitespace;
+ end;
+ 'S':
+ begin
+ inc(currentpos);
+ chars:=cs_nonwhitespace;
+ end;
+ 'w':
+ begin
+ inc(currentpos);
+ chars:=cs_wordchars;
+ end;
+ 'W':
+ begin
+ inc(currentpos);
+ chars:=cs_nonwordchars;
+ end;
+ 'f' :
+ begin
+ inc(currentpos);
+ chars:= [#12];
+ end;
+ 'a' :
+ begin
+ inc(currentpos);
+ chars:= [#7];
+ end;
+ else
+ begin { Some basic escaping...}
+ chars := [currentpos^];
+ inc (currentpos);
+ {error:=true;
+ exit;}
+ end;
+ end;
+ end;
+ else
+ begin
+ if ref_caseinsensitive in flags then
+ c1:=upcase(currentpos^)
+ else
+ c1:=currentpos^;
+
+ inc(currentpos);
+ if currentpos^='-' then
+ begin
+ inc(currentpos);
+ if currentpos^=#0 then
+ begin
+ error:=true;
+ exit;
+ end;
+ if ref_caseinsensitive in flags then
+ chars:=[c1..upcase(currentpos^)]
+ else
+ chars:=[c1..currentpos^];
+ inc(currentpos);
+ end
+ else
+ chars:=[c1];
+ end;
+ end;
+ end;
+
+
+ procedure readcharset(var charset: tcharset);
+
+ var
+ chars: tcharset;
+ begin
+ charset:=[];
+ case currentpos^ of
+ #0:
+ exit;
+ '[':
+ begin
+ inc(currentpos);
+ while currentpos^<>']' do
+ begin
+ if currentpos^='^' then
+ begin
+ inc(currentpos);
+ readchars(chars);
+ charset:=charset+(cs_allchars-chars);
+ end
+ else
+ begin
+ readchars(chars);
+ charset:=charset+chars;
+ end;
+ if error or (currentpos^=#0) then
+ begin
+ error:=true;
+ exit;
+ end;
+ end;
+ inc(currentpos);
+ end;
+ '^':
+ begin
+ inc(currentpos);
+ readchars(chars);
+ charset:=cs_allchars-chars;
+ end;
+ else
+ begin
+ readchars(chars);
+ charset:=chars;
+ end;
+ end;
+ end;
+
+
+ (* takes care of parsing the {n}, {n,} and {n,m} regular expression
+ elements. In case of error, sets error to true and returns false,
+ otherwise returns true and set minoccurs and maxoccurs accordingly
+ (-1 if not present). *)
+ function parseoccurences(var currentpos: pchar; var minoccurs,maxoccurs: integer): boolean;
+ var
+ minOccursString: string;
+ maxOccursString: string;
+ begin
+ parseoccurences:=false;
+ minOccurs:=-1;
+ maxOccurs:=-1;
+ inc(currentpos);
+ minOccursString:='';
+ if currentPos^ = #0 then
+ begin
+ error:=true;
+ exit;
+ end;
+ while (currentpos^<>#0) and (currentpos^ in ['0'..'9']) do
+ begin
+ minOccursString:=minOccursString+currentPos^;
+ inc(currentpos);
+ end;
+ if length(minOccursString) = 0 then
+ begin
+ error:=true;
+ exit;
+ end;
+ Val(minOccursString,minOccurs);
+ { possible cases here: commad or end bracket }
+ if currentpos^= '}' then
+ begin
+ inc(currentpos);
+ maxOccurs:=minOccurs;
+ parseoccurences:=true;
+ exit;
+ end;
+ if currentpos^= ',' then
+ begin
+ maxOccursString:='';
+ inc(currentpos);
+ while (currentpos^<>#0) and (currentpos^ in ['0'..'9']) do
+ begin
+ maxOccursString:=maxOccursString+currentPos^;
+ inc(currentpos);
+ end;
+ if currentpos^= '}' then
+ begin
+ { If the length of the string is zero, then there is
+ no upper bound. }
+ if length(maxOccursString) > 0 then
+ Val(maxOccursString,maxOccurs)
+ else
+ maxOccurs:=high(integer);
+ inc(currentpos);
+ parseoccurences:=true;
+ exit;
+ end;
+ end;
+ error:=true;
+ end;
+
+
+ function parseregexpr(next,elsepath : pregexprentry) : pregexprentry;
+
+ var
+ hp : pregexprentry;
+ minOccurs,maxOccurs: integer;
+ hp3: pregexprentry;
+ cs : tcharset;
+ chaining : ^pregexprentry;
+
+ begin
+ chaining:=nil;
+ parseregexpr:=nil;
+ elsepath:=nil;
+ if error then
+ exit;
+ { this dummy allows us to redirect the elsepath later }
+{ new(ep);
+ doregister(ep);
+ ep^.typ:=ret_charset;
+ ep^.chars:=[];
+ ep^.elsepath:=elsepath;
+ elsepath:=ep;}
+ while true do
+ begin
+ if error then
+ exit;
+ case currentpos^ of
+ '(':
+ begin
+ inc(currentpos);
+ hp:=parseregexpr(nil,nil);
+ { Special characters after the bracket }
+ if error then
+ exit;
+ if currentpos^<>')' then
+ begin
+ error:=true;
+ exit;
+ end;
+ inc(currentpos);
+ case currentpos^ of
+ '*':
+ begin
+ inc(currentpos);
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_pattern;
+ hp3^.alternative:=nil;
+ hp3^.pattern:=hp;
+ hp3^.elsepath:=elsepath;
+ hp3^.minoccurs:=0;
+ hp3^.maxoccurs:=high(integer);
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+ end;
+ '+':
+ begin
+ inc(currentpos);
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_pattern;
+ hp3^.alternative:=nil;
+ hp3^.pattern:=hp;
+ hp3^.elsepath:=elsepath;
+ hp3^.minoccurs:=1;
+ hp3^.maxoccurs:=high(integer);
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+ end;
+
+ '?':
+ begin
+ inc(currentpos);
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_pattern;
+ hp3^.alternative:=nil;
+ hp3^.pattern:=hp;
+ hp3^.elsepath:=elsepath;
+ hp3^.minoccurs:=0;
+ hp3^.maxoccurs:=1;
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+ end;
+ '{':
+ begin
+ if not parseOccurences(currentPos,minOccurs,maxOccurs) then
+ exit;
+ inc(currentpos);
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_pattern;
+ hp3^.alternative:=nil;
+ hp3^.pattern:=hp;
+ hp3^.elsepath:=elsepath;
+ hp3^.minoccurs:=minOccurs;
+ hp3^.maxoccurs:=maxOccurs;
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+ end;
+ else
+ begin
+ { go to end of this list - always the
+ last next used }
+(*
+ hp3:=hp;
+ while assigned(hp3^.next) do
+ begin
+ hp3:=hp3^.next;
+ end;
+ if assigned(chaining) then
+ chaining^:=hp
+ else
+ parseregexpr:=hp;
+ chaining:=@hp3^.next;*)
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_pattern;
+ hp3^.alternative:=nil;
+ hp3^.pattern:=hp;
+ hp3^.elsepath:=elsepath;
+ hp3^.minoccurs:=1;
+ hp3^.maxoccurs:=1;
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+
+ end;
+ end;
+ end;
+{ This is only partially implemented currently, as the terms before
+ the | character must be grouped together with parenthesis, which
+ is also compatible with other regular expressions.
+}
+ '|':
+ begin
+{$ifdef DEBUG}
+ writeln('Creating or entry');
+{$endif DEBUG}
+ if (not assigned (hp3)) then
+ begin
+ error:=true;
+ exit;
+ end;
+ if (hp3^.typ <> ret_pattern) then
+ begin
+ error:=true;
+ exit;
+ end;
+ while currentpos^='|' do
+ begin
+ inc(currentpos);
+ if currentpos^=#0 then
+ begin
+ error:=true;
+ exit;
+ end;
+ { always put the longest pattern first, so
+ swap the trees as necessary.
+ }
+ hp := parseregexpr (next, elsepath);
+ if patlength(hp) > patlength(hp3^.pattern) then
+ begin
+ hp3^.alternative:=hp3^.pattern;
+ hp3^.pattern:=hp;
+ end
+ else
+ hp3^.alternative:=hp;
+ end;
+ end;
+ ')':
+ exit;
+ '^':
+ begin
+ inc(currentpos);
+ hp:=parseregexpr(nil,nil);
+ { Special characters after the bracket }
+ if error then
+ exit;
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_startline;
+ hp3^.pattern:=hp;
+ hp3^.elsepath:=elsepath;
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+ end;
+ '$':
+ begin
+ inc(currentpos);
+ new(hp);
+ doregister(hp);
+ hp^.typ:=ret_endline;
+ hp^.elsepath:=elsepath;
+ hp^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp
+ else
+ parseregexpr:=hp;
+ chaining:=@hp^.next;
+ end;
+ #0:
+ exit;
+ else
+ begin
+ readcharset(cs);
+ if error then
+ exit;
+ case currentpos^ of
+ '*':
+ begin
+ inc(currentpos);
+ new(hp);
+ doregister(hp);
+ hp^.typ:=ret_charset;
+ hp^.chars:=cs;
+ hp^.elsepath:=nil;
+ hp^.next:=nil;
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_pattern;
+ hp3^.alternative:=nil;
+ hp3^.pattern:=hp;
+ hp3^.elsepath:=elsepath;
+ hp3^.minoccurs:=0;
+ hp3^.maxoccurs:=high(integer);
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+ end;
+ '+':
+ begin
+ inc(currentpos);
+ new(hp);
+ doregister(hp);
+ hp^.typ:=ret_charset;
+ hp^.chars:=cs;
+ hp^.elsepath:=nil;
+ hp^.next:=nil;
+
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_pattern;
+ hp3^.alternative:=nil;
+ hp3^.pattern:=hp;
+ hp3^.elsepath:=elsepath;
+ hp3^.minoccurs:=1;
+ hp3^.maxoccurs:=high(integer);
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+ end;
+ '?':
+ begin
+ inc(currentpos);
+ new(hp);
+ doregister(hp);
+ hp^.typ:=ret_charset;
+ hp^.chars:=cs;
+ hp^.elsepath:=nil;
+ hp^.next:=nil;
+
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_pattern;
+ hp3^.pattern:=hp;
+ hp3^.alternative:=nil;
+ hp3^.elsepath:=elsepath;
+ hp3^.minoccurs:=0;
+ hp3^.maxoccurs:=1;
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+ end;
+ '{':
+ begin
+ if not parseOccurences(currentPos,minOccurs,maxOccurs) then
+ exit;
+ new(hp);
+ doregister(hp);
+ hp^.typ:=ret_charset;
+ hp^.chars:=cs;
+ hp^.elsepath:=nil;
+ hp^.next:=nil;
+
+ new(hp3);
+ doregister(hp3);
+ hp3^.typ:=ret_pattern;
+ hp3^.alternative:=nil;
+ hp3^.pattern:=hp;
+ hp3^.elsepath:=elsepath;
+ hp3^.minoccurs:=minOccurs;
+ hp3^.maxoccurs:=maxOccurs;
+ hp3^.next:=nil;
+ if assigned(chaining) then
+ chaining^:=hp3
+ else
+ parseregexpr:=hp3;
+ chaining:=@hp3^.next;
+
+ end;
+ else
+ { Normal character }
+ begin
+ new(hp);
+ doregister(hp);
+ hp^.typ:=ret_charset;
+ hp^.chars:=cs;
+ hp^.elsepath:=elsepath;
+ hp^.next:=next;
+ if assigned(chaining) then
+ chaining^:=hp
+ else
+ parseregexpr:=hp;
+ chaining:=@hp^.next;
+ continue;
+ end;
+ { This was a pattern }
+ end; { END CASE }
+ end;
+ end;
+ end;
+ end;
+
+ var
+ endp : pregexprentry;
+
+ begin
+ GenerateRegExprEngine:=false;
+ RegExprEngine.Data:=nil;
+ RegExprEngine.DestroyList:=nil;
+ if regexpr=nil then
+ exit;
+ first:=nil;
+ if (ref_singleline in flags) and (ref_multiline in flags) then
+ exit;
+ currentpos:=regexpr;
+ GenerateRegExprEngine:=true;
+ error:=false;
+ new(endp);
+ doregister(endp);
+ endp^.typ:=ret_illegalend;
+ RegExprEngine.flags:=flags;
+ RegExprEngine.Data:=parseregexpr(nil,endp);
+{$IFDEF DEBUG}
+ writeln('========== Generating tree ============');
+ dumptree('',RegExprEngine.Data);
+{$ENDIF}
+ RegExprEngine.DestroyList:=first;
+ if error or (currentpos^<>#0) then
+ begin
+ GenerateRegExprEngine:=false;
+ DestroyRegExprEngine(RegExprEngine);
+ end;
+ end;
+
+
+{$IFDEF FPC}
+ function GenerateRegExprEngine(regexpr : pchar;flags : tregexprflags): TREGExprEngine;
+ var
+ r: TRegExprEngine;
+ begin
+ GenerateRegExprEngine(regexpr,flags,r);
+ GenerateRegExprEngine:=r;
+ end;
+{$ENDIF}
+
+ procedure DestroyRegExprEngine(var regexpr : TRegExprEngine);
+
+ var
+ hp : pregexprentry;
+
+ begin
+ hp:=regexpr.DestroyList;
+ while assigned(hp) do
+ begin
+ regexpr.DestroyList:=hp^.nextdestroy;
+ dispose(hp);
+ hp:=regexpr.DestroyList;
+ end;
+ regexpr.Data:=nil;
+ regexpr.DestroyList:=nil;
+ end;
+
+ function RegExprPos(regexprengine : TRegExprEngine;p : pchar;var index,len : longint) : boolean;
+
+ var
+ lastpos : pchar;
+ firstpos: pchar;
+
+ { Does the actual search of the data - return true if the term was found }
+ function dosearch(regexprentry : pregexprentry;pos : pchar) : boolean;
+ var
+ found: boolean;
+ checkvalue: boolean;
+ savedpos: pchar;
+ counter: word;
+
+ begin
+ dosearch:=false;
+ while true do
+ begin
+ {$IFDEF Debug}
+ writeln('Entering ',typ2str[regexprentry^.typ]);
+ writeln('Pattern length ',patlength(regexprentry));
+ {$ENDIF Debug}
+ case regexprentry^.typ of
+ ret_endline:
+ begin
+ { automatically a match! }
+ if pos^ = #0 then
+ begin
+ dosearch:=true;
+ exit;
+ end;
+ if ref_multiline in regexprengine.flags then
+ begin
+ { Supports DOS/Commodore/UNIX/IBM Mainframe line formats }
+ { avoid reading invalid memory also }
+ if (pos^=#13) and ((pos+1)^=#10) then
+ begin
+ regexprentry:=regexprentry^.next;
+ end
+ else
+ if (pos^=#$85) or (pos^=#10) or ((pos^=#13) and ((pos-1) >= firstpos) and ((pos-1)^ <> #10)) then
+ begin
+ regexprentry:=regexprentry^.next;
+ end
+ else
+ begin
+ dosearch:=false;
+ exit;
+ end;
+ end
+ else
+ exit;
+ end;
+ ret_pattern:
+ begin
+ found:=false;
+ { Take care of occurences here }
+ savedpos:=pos;
+ counter:=0;
+ repeat
+ found:=dosearch(regexprentry^.pattern,pos);
+ if not found then
+ break;
+ pos:=lastpos;
+ inc(counter);
+ until (not found) or (counter >= regexprentry^.maxoccurs) or (pos^= #0);
+
+ if counter = 0 then
+ begin
+ { If there was no occurence and the minimum occurence is > 0 then
+ problem.
+ }
+ if (regexprentry^.minoccurs > 0) then
+ begin
+ dosearch:=false;
+ { verify alternative path as required }
+ if assigned(regexprentry^.alternative) then
+ begin
+ dosearch:=dosearch(regexprentry^.alternative,savedpos);
+ exit;
+ end;
+ exit;
+ end;
+ dosearch:=true;
+ lastpos:=savedpos;
+ end
+ else
+ { found }
+ begin
+ { Possible choices :
+ - found and (counter >= minOccurences) and (counter =< maxOccurences) = true
+ - found and (counter < minOccurences) or (counter > maxOccurences) = false
+ }
+ if (counter < regexprentry^.minoccurs) or (counter > regexprentry^.maxoccurs) then
+ begin
+ dosearch:=false;
+ exit;
+ end;
+ dosearch:=true;
+ { if all matches were found, and the current position
+ points to zero (processed all characters) }
+ if pos^=#0 then
+ begin
+ dosearch:=true;
+ exit;
+ end;
+ end;
+ { If we are that means the matches were valid, go to next element to match
+ }
+ regexprentry:=regexprentry^.next;
+ if (counter = 0) and not assigned(regexprentry) then
+ exit;
+ end;
+ ret_startline:
+ begin
+ checkvalue:=pos=firstpos;
+ if ref_multiline in regexprengine.flags then
+ begin
+ { Supports DOS/Commodore/UNIX/IBM Mainframe line formats }
+ { avoid reading invalid memory also }
+ if
+ (
+ ((pos-1) >= firstpos) and ((pos-1)^=#$85)
+ )
+ or
+ (
+ ((pos-1) >= firstpos) and ((pos-1)^=#10)
+ )
+ or
+ (
+ ((pos-1) >= firstpos) and ((pos-1)^=#13) and
+ ((pos)^ <> #10)
+ )
+ then
+ begin
+ checkvalue:=true;
+ end;
+ end;
+ if checkvalue then
+ begin
+ dosearch:=dosearch(regexprentry^.pattern,pos);
+ regexprentry:=regexprentry^.next;
+ if not dosearch then
+ exit;
+ pos:=lastpos;
+ end
+ else
+ begin
+ dosearch:=false;
+ exit;
+ end;
+ end;
+ ret_charset:
+ begin
+ if (pos^ in regexprentry^.chars) or
+ ((ref_caseinsensitive in regexprengine.flags) and
+ (upcase(pos^) in regexprentry^.chars)) then
+ begin
+{$ifdef DEBUG}
+ writeln('Found matching: ',pos^);
+{$endif DEBUG}
+ regexprentry:=regexprentry^.next;
+ inc(pos);
+ end
+ else
+ begin
+{$ifdef DEBUG}
+ writeln('Found unmatching: ',pos^);
+{$endif DEBUG}
+ exit;
+ end;
+ end;
+ ret_backtrace:
+ begin
+{$ifdef DEBUG}
+ writeln('Starting backtrace');
+{$endif DEBUG}
+ if dosearch(regexprentry^.next,pos) then
+ begin
+ dosearch:=true;
+ exit;
+ end
+ else if dosearch(regexprentry^.elsepath,pos) then
+ begin
+ dosearch:=true;
+ exit;
+ end
+ else
+ exit;
+ end;
+ end;
+ lastpos:=pos;
+ if regexprentry=nil then
+ begin
+ dosearch:=true;
+ exit;
+ end;
+ if regexprentry^.typ=ret_illegalend then
+ exit;
+ { end of string, and we were expecting an end of string }
+ if (pos^=#0) and (regexprentry^.typ = ret_endline) and
+ (not assigned(regexprentry^.next)) then
+ begin
+ dosearch:=true;
+ exit;
+ end;
+ if pos^=#0 then
+ exit;
+ end;
+ end;
+
+ begin
+ RegExprPos:=false;
+ index:=0;
+ len:=0;
+ firstpos:=p;
+ if regexprengine.Data=nil then
+ exit;
+ while p^<>#0 do
+ begin
+ if dosearch(regexprengine.Data,p) then
+ begin
+ len:=lastpos-p;
+ RegExprPos:=true;
+ exit;
+ end
+ else
+ begin
+ inc(p);
+ inc(index);
+ end;
+ end;
+ index:=-1;
+ end;
+
+
+ function RegExprReplaceAll(RegExprEngine : TRegExprEngine;const src,newstr : ansistring;var dest : ansistring) : sizeint;
+ var
+ index,len : longint;
+ pos,lastpos : pchar;
+ first : boolean;
+ oldlength : PtrInt;
+ begin
+ pos:=pchar(src);
+ lastpos:=nil;
+ first:=true;
+ Result:=0;
+ { estimate some length }
+ SetLength(dest,length(src)+((length(src) div 10)*length(newstr)));
+ while RegExprPos(RegExprEngine,pos,index,len) do
+ begin
+ inc(pos,index);
+ if (lastpos = nil) or (pos>lastpos) then
+ begin
+ if lastpos = nil then lastpos := pchar(src);
+ { copy skipped part }
+
+ { because we cheat with SetLength a SetLength(...,0) isn't what we want
+ so we've to trick at the first SetLength call
+ }
+ if first then
+ begin
+ SetLength(dest,(pos-lastpos));
+ { cast dest here because it is already unified }
+ move(lastpos^,char(dest[1]),pos-lastpos);
+ end
+ else
+ begin
+ oldlength:=Length(dest);
+ SetLength(dest,oldlength+(pos-lastpos));
+ move(lastpos^,char(dest[oldlength+1]),pos-lastpos);
+ end;
+ first:=false;
+ end;
+ { found }
+ inc(Result);
+ dest:=dest+newstr;
+ inc(pos,len);
+ lastpos:=pos;
+ end;
+ { copy remainder }
+ len:=strlen(pos);
+ if first then
+ begin
+ SetLength(dest,len);
+ move(pos^,char(dest[length(dest)+1]),len);
+ end
+ else
+ begin
+ oldlength:=Length(dest);
+ SetLength(dest,oldlength+len);
+ move(pos^,char(dest[oldlength+1]),len);
+ end
+ end;
+
+
+ function RegExprEscapeStr (const S : string) : string;
+ var
+ i, len : integer;
+ s1: string;
+ begin
+ RegExprEscapeStr:= '';
+ s1:='';
+ if (S = '') then
+ exit;
+
+ len := Length (S);
+
+ for i := 1 to len do
+ begin
+ if (S [i] in ['(','|', '.', '*', '?', '^', '$', '-', '[', '{', '}', ']', ')', '\']) then
+ begin
+ s1 := s1 + '\';
+ end;
+
+ s1 := s1 + S[i];
+ end;
+ RegExprEscapeStr:=s1;
+ end;
+
+begin
+ cs_nonwordchars:=cs_allchars-cs_wordchars;
+ cs_nondigits:=cs_allchars-cs_digits;
+ cs_nonwhitespace:=cs_allchars-cs_whitespace;
+end.
diff --git a/packages/regexpr/tests/testreg1.pp b/packages/regexpr/tests/testreg1.pp
new file mode 100644
index 0000000000..ff06360ddb
--- /dev/null
+++ b/packages/regexpr/tests/testreg1.pp
@@ -0,0 +1,877 @@
+{$IFDEF FPC}
+{$MODE OBJFPC}
+{$ENDIF}
+program testreg1;
+uses
+ regexpr;
+
+var
+ r : tregexprengine;
+ index,len : longint;
+ S : String;
+ Dest : AnsiString;
+
+procedure do_error(i : longint);
+
+ begin
+ writeln('error near ',i,' index: ',index,' len: ',len);
+ halt(1);
+ end;
+
+var
+ initok: boolean;
+begin
+ writeln('*** Testing unit regexpr ***');
+
+ writeln('*** Searching tests ***');
+ { basic tests }
+
+ initok:=GenerateRegExprEngine('.*',[],r);
+ if not initok then
+ do_error(90);
+ if not(RegExprPos(r,'CXXXX',index,len)) or
+ (index<>0) or (len<>5) then
+ do_error(91);
+ DestroyregExprEngine(r);
+
+ { java package name }
+ initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
+ if not initok then
+ do_error(92);
+ if not(RegExprPos(r,'CXXXX',index,len)) or
+ (index<>0) or (len<>5) then
+ do_error(92);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
+ if not initok then
+ do_error(92);
+ if not(RegExprPos(r,'CXXXX.A',index,len)) or
+ (index<>0) or (len<>7) then
+ do_error(92);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
+ if not initok then
+ do_error(92);
+ if not(RegExprPos(r,'CXXXX.A9Package',index,len)) or
+ (index<>0) or (len<>15) then
+ do_error(92);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
+ if not initok then
+ do_error(92);
+ if not(RegExprPos(r,'1CXXXX.A9Package',index,len)) or
+ (index<>1) or (len<>15) then
+ do_error(92);
+ DestroyregExprEngine(r);
+
+ { singleline }
+
+ initok:=GenerateRegExprEngine('^TEST1',[],r);
+ if not initok then
+ do_error(101);
+ if (RegExprPos(r,'THISISATEST1TEST1THIS',index,len)) then
+ do_error(101);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[],r);
+ if not initok then
+ do_error(102);
+ if (RegExprPos(r,'THISISATEST1ANOTHER',index,len)) then
+ do_error(102);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[],r);
+ if not initok then
+ do_error(103);
+ if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
+ (index<>0) or (len<>12) then
+ do_error(103);
+ DestroyregExprEngine(r);
+
+ { multiline }
+
+ { UNIX Newline }
+ initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
+ if not initok then
+ do_error(120);
+ if not(RegExprPos(r,'THISISATEST1'#10'TEST12',index,len)) or
+ (index<>13) or (len<>5) then
+ do_error(120);
+ DestroyregExprEngine(r);
+
+ { Apple Newline }
+ initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
+ if not initok then
+ do_error(121);
+ if not(RegExprPos(r,'THISISATEST1'#13'TEST12',index,len)) or
+ (index<>13) or (len<>5) then
+ do_error(121);
+ DestroyregExprEngine(r);
+
+ { DOS Newline }
+ initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
+ if not initok then
+ do_error(122);
+ if not(RegExprPos(r,'THISISATEST1'#13#10'TEST12',index,len)) or
+ (index<>14) or (len<>5) then
+ do_error(122);
+ DestroyregExprEngine(r);
+
+ { IBM Mainframe Newline }
+ initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
+ if not initok then
+ do_error(123);
+ if not(RegExprPos(r,'THISISATEST1'#$85'TEST12',index,len)) or
+ (index<>13) or (len<>5) then
+ do_error(123);
+ DestroyregExprEngine(r);
+
+ { Some weird cases }
+ initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
+ if not initok then
+ do_error(124);
+ if not(RegExprPos(r,#13#10#13#10'TEST12',index,len)) or
+ (index<>4) or (len<>5) then
+ do_error(124);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
+ if not initok then
+ do_error(125);
+ if RegExprPos(r,#13#10#13#10'F',index,len) then
+ do_error(125);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[ref_multiline],r);
+ if not initok then
+ do_error(102);
+ if (RegExprPos(r,'THISISATEST1ANOTHER',index,len)) then
+ do_error(102);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[],r);
+ if not initok then
+ do_error(103);
+ if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
+ (index<>0) or (len<>12) then
+ do_error(103);
+ DestroyregExprEngine(r);
+
+ { END OF LINE CASES }
+ initok:=GenerateRegExprEngine('TEST1$',[],r);
+ if not initok then
+ do_error(101);
+ if (RegExprPos(r,'THISISATEST1TEST1THIS',index,len)) then
+ do_error(101);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[],r);
+ if not initok then
+ do_error(102);
+ if not(RegExprPos(r,'!TEST1ANOTHER',index,len)) or
+ (index<>1) or (len<>12) then
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[],r);
+ if not initok then
+ do_error(102);
+ if not(RegExprPos(r,'!TEST1ANOTHERFOOBARTEST1ANOTHER',index,len)) or
+ (index<>19) or (len<>12) then
+ DestroyregExprEngine(r);
+
+ { UNIX Newline }
+ initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
+ if not initok then
+ do_error(120);
+ if not(RegExprPos(r,'THISISATEST1'#10'TEST12',index,len)) or
+ (index<>7) or (len<>5) then
+ do_error(120);
+ DestroyregExprEngine(r);
+
+ { Apple Newline }
+ initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
+ if not initok then
+ do_error(121);
+ if not(RegExprPos(r,'THISISATEST1'#13'TEST12',index,len)) or
+ (index<>7) or (len<>5) then
+ do_error(121);
+ DestroyregExprEngine(r);
+
+ { DOS Newline }
+ initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
+ if not initok then
+ do_error(122);
+ if not(RegExprPos(r,'THISISATEST1'#13#10'TEST12',index,len)) or
+ (index<>7) or (len<>5) then
+ do_error(122);
+ DestroyregExprEngine(r);
+
+ { IBM Mainframe Newline }
+ initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
+ if not initok then
+ do_error(123);
+ if not(RegExprPos(r,'THISISATEST1'#$85'TEST12',index,len)) or
+ (index<>7) or (len<>5) then
+ do_error(123);
+ DestroyregExprEngine(r);
+
+ { Some weird cases }
+ initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
+ if not initok then
+ do_error(124);
+ if not(RegExprPos(r,#13#10#13#10'TEST1'#13#10,index,len)) or
+ (index<>4) or (len<>5) then
+ do_error(124);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
+ if not initok then
+ do_error(125);
+ if RegExprPos(r,#13#10#13#10'F'#13#10#13#10,index,len) then
+ do_error(125);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[ref_multiline],r);
+ if not initok then
+ do_error(102);
+ if (RegExprPos(r,'THISISATEST1ANOTHERFOO',index,len)) then
+ do_error(102);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[],r);
+ if not initok then
+ do_error(103);
+ if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
+ (index<>0) or (len<>12) then
+ do_error(103);
+ DestroyregExprEngine(r);
+
+ { start and end of string handling }
+ initok:=GenerateRegExprEngine('^TEST1(ANOTHER)$',[],r);
+ if not initok then
+ do_error(103);
+ if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
+ (index<>0) or (len<>12) then
+ do_error(103);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('^TEST1(ANOTHER)$',[],r);
+ if not initok then
+ do_error(103);
+ if RegExprPos(r,'FOOTEST1ANOTHER',index,len) then
+ do_error(103);
+ DestroyregExprEngine(r);
+
+
+ (* {n,} tests *)
+ initok:=GenerateRegExprEngine('(AZ){0,}',[],r);
+ if not initok then
+ do_error(700);
+ if not(RegExprPos(r,'C',index,len)) or
+ (index<>0) or (len<>0) then
+ do_error(700);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('(AZ){0,}',[],r);
+ if not initok then
+ do_error(701);
+ if not(RegExprPos(r,'AZ',index,len)) or
+ (index<>0) or (len<>2) then
+ do_error(701);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('(AZ){0,}',[],r);
+ if not initok then
+ do_error(702);
+ if not(RegExprPos(r,'AZAZ',index,len)) or
+ (index<>0) or (len<>4) then
+ do_error(702);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('Cat(AZ){0,}',[],r);
+ if not initok then
+ do_error(703);
+ if not(RegExprPos(r,'CatAZAZ',index,len)) or
+ (index<>0) or (len<>7) then
+ do_error(703);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('C(AZ){3,}',[],r);
+ if not initok then
+ do_error(704);
+ if (RegExprPos(r,'AZAZAZ',index,len)) then
+ do_error(704);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('Cat(AZ){3,}',[],r);
+ if not initok then
+ do_error(705);
+ if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
+ (index<>1) or (len<>9) then
+ do_error(705);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('CatAZ{0,}',[],r);
+ if not initok then
+ do_error(706);
+ if RegExprPos(r,'BCatDAZZZBCD',index,len) then
+ do_error(706);
+ DestroyregExprEngine(r);
+
+ (* {n} tests *)
+ initok:=GenerateRegExprEngine('Cat(AZ){3}',[],r);
+ if not initok then
+ do_error(715);
+ if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
+ (index<>1) or (len<>9) then
+ do_error(715);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('CatAz{5}',[],r);
+ if not initok then
+ do_error(716);
+ if not(RegExprPos(r,'BCatAzzzzzDABCD',index,len)) or
+ (index<>1) or (len<>9) then
+ do_error(716);
+
+ initok:=GenerateRegExprEngine('CatAz{5}',[],r);
+ if not initok then
+ do_error(717);
+ if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
+ do_error(717);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('CatAz{0}',[],r);
+ if not initok then
+ do_error(718);
+ if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
+ do_error(718);
+ DestroyregExprEngine(r);
+
+ (* {n,m} tests *)
+ initok:=GenerateRegExprEngine('Cat(AZ){1,3}',[],r);
+ if not initok then
+ do_error(725);
+ if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
+ (index<>1) or (len<>9) then
+ do_error(725);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('CatAz{1,5}',[],r);
+ if not initok then
+ do_error(726);
+ if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
+ (index<>1) or (len<>9) then
+ do_error(726);
+
+ initok:=GenerateRegExprEngine('CatAz{1,1}',[],r);
+ if not initok then
+ do_error(727);
+ if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
+ (index<>1) or (len<>5) then
+ do_error(727);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('CatAz{3,4}',[],r);
+ if not initok then
+ do_error(728);
+ if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
+ (index<>1) or (len<>8) then
+ do_error(728);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('CatAz{0,0}',[],r);
+ if not initok then
+ do_error(729);
+ if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
+ do_error(729);
+ DestroyregExprEngine(r);
+
+
+ { ()* tests }
+ initok:=GenerateRegExprEngine('(AZ)*',[],r);
+ if not initok then
+ do_error(800);
+ if not(RegExprPos(r,'C',index,len)) or
+ (index<>0) or (len<>0) then
+ do_error(800);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('(AZ)*',[],r);
+ if not initok then
+ do_error(801);
+ if not(RegExprPos(r,'AZ',index,len)) or
+ (index<>0) or (len<>2) then
+ do_error(801);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('(AZ)*',[],r);
+ if not initok then
+ do_error(802);
+ if not(RegExprPos(r,'AZAZ',index,len)) or
+ (index<>0) or (len<>4) then
+ do_error(802);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
+ if not initok then
+ do_error(803);
+ if not(RegExprPos(r,'CatAZAZ',index,len)) or
+ (index<>0) or (len<>7) then
+ do_error(803);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('C(AZ)*',[],r);
+ if not initok then
+ do_error(804);
+ if (RegExprPos(r,'AZAZ',index,len)) then
+ do_error(804);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
+ if not initok then
+ do_error(805);
+ if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
+ (index<>1) or (len<>7) then
+ do_error(805);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
+ if not initok then
+ do_error(806);
+ if not(RegExprPos(r,'BCatDABCD',index,len)) or
+ (index<>1) or (len<>3) then
+ do_error(806);
+ DestroyregExprEngine(r);
+
+
+ { ()+ tests }
+ initok:=GenerateRegExprEngine('(AZ)+',[],r);
+ if not initok then
+ do_error(850);
+ if (RegExprPos(r,'C',index,len)) then
+ do_error(850);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('(AZ)+',[],r);
+ if not initok then
+ do_error(851);
+ if not(RegExprPos(r,'AZ',index,len)) or
+ (index<>0) or (len<>2) then
+ do_error(851);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('(AZ)+',[],r);
+ if not initok then
+ do_error(852);
+ if not(RegExprPos(r,'AZAZ',index,len)) or
+ (index<>0) or (len<>4) then
+ do_error(852);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('Cat(AZ)+',[],r);
+ if not initok then
+ do_error(853);
+ if not(RegExprPos(r,'CatAZAZ',index,len)) or
+ (index<>0) or (len<>7) then
+ do_error(853);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('C(AZ)+',[],r);
+ if not initok then
+ do_error(854);
+ if (RegExprPos(r,'AZAZ',index,len)) then
+ do_error(854);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('Cat(AZ)+',[],r);
+ if not initok then
+ do_error(855);
+ if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
+ (index<>1) or (len<>7) then
+ do_error(855);
+ DestroyregExprEngine(r);
+
+ { ()? tests }
+
+ initok:=GenerateRegExprEngine('(AZ)?',[],r);
+ if not initok then
+ do_error(900);
+ if not(RegExprPos(r,'C',index,len)) or
+ (index<>0) or (len<>0) then
+ do_error(900);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('(AZ)?',[],r);
+ if not initok then
+ do_error(901);
+ if not(RegExprPos(r,'AZ',index,len)) or
+ (index<>0) or (len<>2) then
+ do_error(901);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('(AZ)?',[],r);
+ if not initok then
+ do_error(902);
+ if not(RegExprPos(r,'AZAZ',index,len)) or
+ (index<>0) or (len<>2) then
+ do_error(902);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('Cat(AZ)?',[],r);
+ if not(RegExprPos(r,'CatAZAZ',index,len)) or
+ (index<>0) or (len<>5) then
+ do_error(903);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('C(AZ)?',[],r);
+ if (RegExprPos(r,'AZAZ',index,len)) then
+ do_error(904);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('Cat(AZ)?',[],r);
+ if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
+ (index<>1) or (len<>5) then
+ do_error(905);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('Cat(AZ)?',[],r);
+ if not(RegExprPos(r,'BCatDABCD',index,len)) or
+ (index<>1) or (len<>3) then
+ do_error(906);
+ DestroyregExprEngine(r);
+
+
+ { Character classes tests }
+
+ GenerateRegExprEngine('[A-Z]',[],r);
+ if not(RegExprPos(r,'234578923457823659GHJK38',index,len)) or
+ (index<>18) or (len<>1) then
+ do_error(1000);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('[A-Z]*',[],r);
+ if not(RegExprPos(r,'2345ARTZU38',index,len)) or
+ (index<>0) or (len<>0) then
+ do_error(1002);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('[A-Z]+',[],r);
+ if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
+ (index<>18) or (len<>5) then
+ do_error(1003);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('[A-Z][A-Z]*',[],r);
+ if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
+ (index<>18) or (len<>5) then
+ do_error(1004);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('[A-Z][A-Z]?',[],r);
+ if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
+ (index<>18) or (len<>2) then
+ do_error(1005);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('[^\d]+',[],r);
+ if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
+ (index<>18) or (len<>5) then
+ do_error(1006);
+ DestroyregExprEngine(r);
+
+ { test chaining }
+
+ GenerateRegExprEngine('[A-Z][A-Z]?[A-Z]',[],r);
+ if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
+ (index<>18) or (len<>3) then
+ do_error(1007);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('[A-Z][A-Z]*[0-9]',[],r);
+ if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
+ (index<>18) or (len<>6) then
+ do_error(1008);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('[A-Z]+[0-9]',[],r);
+ if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
+ (index<>18) or (len<>6) then
+ do_error(1009);
+ DestroyregExprEngine(r);
+
+ { case insensitive: }
+
+ GenerateRegExprEngine('[A-Z]',[ref_caseinsensitive],r);
+ if not(RegExprPos(r,'234578923457823659a38',index,len)) or
+ (index<>18) or (len<>1) then
+ do_error(1100);
+ DestroyregExprEngine(r);
+
+ { case insensitive: }
+ GenerateRegExprEngine('[a-z]',[ref_caseinsensitive],r);
+ if not(RegExprPos(r,'234578923457823659A38',index,len)) or
+ (index<>18) or (len<>1) then
+ do_error(1101);
+ DestroyregExprEngine(r);
+
+ { with parenthsis }
+ GenerateRegExprEngine('(foo)1234',[],r);
+ if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
+ (index<>7) or (len<>7) then
+ do_error(1200);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('(((foo)))1234',[],r);
+ if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
+ (index<>7) or (len<>7) then
+ do_error(1201);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('(foo)(1234)',[],r);
+ if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
+ (index<>7) or (len<>7) then
+ do_error(1202);
+ DestroyregExprEngine(r);
+
+ { test real backtracking }
+
+(* r:=GenerateRegExprEngine('nofoo|foo',[]);
+ if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
+ (index<>7) or (len<>3) then
+ do_error(1300);
+ DestroyregExprEngine(r);*)
+
+ GenerateRegExprEngine('abc\(123\)$',[],r);
+ if not (RegExprPos(r,'1234 abc(123)', index, len)) or
+ (index <> 5) or (len <> 8) then
+ do_error (1400);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('^\t$',[ref_singleline],r);
+ if not (RegExprPos(r,#9, index, len)) or
+ (index <> 0) or (len <> 1) then
+ do_error (1401);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('^\n$',[ref_singleline],r);
+ if not (RegExprPos(r,#10, index, len)) or
+ (index <> 0) or (len <> 1) then
+ do_error (1402);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('^\f$',[ref_singleline],r);
+ if not (RegExprPos(r,#12, index, len)) or
+ (index <> 0) or (len <> 1) then
+ do_error (1403);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('^\r$',[ref_singleline],r);
+ if not (RegExprPos(r,#13, index, len)) or
+ (index <> 0) or (len <> 1) then
+ do_error (1404);
+ DestroyregExprEngine(r);
+
+ GenerateRegExprEngine('^\a$',[ref_singleline],r);
+ if not (RegExprPos(r,#7, index, len)) or
+ (index <> 0) or (len <> 1) then
+ do_error (1405);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('^(([^:/?#]+):)',[],r);
+ if not (RegExprPos(r,'http:',index, len)) or
+ (index <> 0) or (len <> 5) then
+ do_error (1406);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('^(([^:/?#]+):)?(//([^/?#]*))?',[],r);
+ if not initok then
+ do_error(1407);
+ if not (RegExprPos(r,'http://www.myurl.com',index, len)) or
+ (index <> 0) or (len <> 20) then
+ do_error (1407);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?',[],r);
+ if not initok then
+ do_error(1408);
+ if not (RegExprPos(r,'http://www.myurl.com',index, len)) or
+ (index <> 0) or (len <> 20) then
+ do_error (1408);
+
+
+ writeln('*** Escaping tests ***');
+ s := '^Hello World \. [a-z] \D { } |() ?a*.*\\ 1 $';
+ if RegExprEscapeStr(s)<>'\^Hello World \\\. \[a\-z\] \\D \{ \} \|\(\) \?a\*\.\*\\\\ 1 \$' then
+ do_error(1450);
+
+ writeln('*** More search tests ***');
+
+ initok:=GenerateRegExprEngine('((nofoo)|(foo))1234',[],r);
+ if not initok then
+ do_error(1501);
+ if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
+ (index<>7) or (len<>9) then
+ do_error(1501);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('((nofoo)|(foo)|(anotherbar))1234',[],r);
+ if not initok then
+ do_error(1502);
+ if not(RegExprPos(r,'anotherbar1234XXXX',index,len)) or
+ (index<>0) or (len<>14) then
+ do_error(1502);
+ DestroyregExprEngine(r);
+
+
+ initok:=GenerateRegExprEngine('((nofoo)|(foo)|(anotherfoo))1234',[],r);
+ if not initok then
+ do_error(1503);
+ if not(RegExprPos(r,'1234 anotherfoo1234XXXX',index,len)) or
+ (index<>7) or (len<>14) then
+ do_error(1503);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('(nofoo1234)|(foo1234)',[],r);
+ if not initok then
+ do_error(1504);
+ if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
+ (index<>7) or (len<>7) then
+ do_error(1504);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('((foo)|(nofoo))1234',[],r);
+ if not initok then
+ do_error(1505);
+ if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
+ (index<>7) or (len<>9) then
+ do_error(1505);
+ DestroyregExprEngine(r);
+
+{
+ initok:=GenerateRegExprEngine('\.localhost$',[],r);
+ if not initok then
+ do_error(1506);
+ if not(RegExprPos(r,'exsample.localhost',index,len)) or
+ (index<>8) or (len<>10) then
+ do_error(1506);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('[^e]\.localhost$',[],r);
+ if not initok then
+ do_error(1507);
+ if RegExprPos(r,'exsample.localhost',index,len) then
+ do_error(1507);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('.*[^e]\.localhost$',[],r);
+ if not initok then
+ do_error(1508);
+ if RegExprPos(r,'exsample.localhost',index,len) then
+ do_error(1508);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('x.*[^e]\.localhost$',[],r);
+ if not initok then
+ do_error(1509);
+ if RegExprPos(r,'exsample.localhost',index,len) then
+ do_error(1509);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('(nofoo|foo)1234',[],r);
+ if not initok then
+ do_error(1500);
+ if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
+ (index<>8) or (len<>9) then
+ do_error(1500);
+ DestroyregExprEngine(r);
+
+ r:=GenerateRegExprEngine('(nofoo|foo|anotherfoo)1234',[]);
+ if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
+ (index<>8) or (len<>9) then
+ do_error(1009);
+ DestroyregExprEngine(r);
+
+ r:=GenerateRegExprEngine('nofoo1234|foo1234',[]);
+ if (r.data=nil) or not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
+ (index<>7) or (len<>7) then
+ do_error(1010);
+ DestroyregExprEngine(r);
+ }
+
+ { *************************************************************************
+ replacement tests
+ ************************************************************************* }
+ writeln('*** Replacement tests ***');
+
+ initok:=GenerateRegExprEngine('fa',[],r);
+ if not initok then
+ do_error(2000);
+ if (RegExprReplaceAll(r,'asdfasdf','',Dest)<>1) or
+ (Dest<>'asdsdf') then
+ do_error(2001);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('fa',[],r);
+ if not initok then
+ do_error(2002);
+ if (RegExprReplaceAll(r,'fa','',Dest)<>1) or
+ (Dest<>'') then
+ do_error(2003);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('fa',[],r);
+ if not initok then
+ do_error(2004);
+ if RegExprReplaceAll(r,'','',Dest)<>0then
+ do_error(2005);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('fa',[],r);
+ if not initok then
+ do_error(2006);
+ if (RegExprReplaceAll(r,'asdfafaasd','',Dest)<>2) or
+ (Dest<>'asdasd') then
+ do_error(2007);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('fa',[],r);
+ if not initok then
+ do_error(2008);
+ if (RegExprReplaceAll(r,'asdfafaasdasdfafaasd','',Dest)<>4) or
+ (Dest<>'asdasdasdasd') then
+ do_error(2009);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('fa',[],r);
+ if not initok then
+ do_error(2000);
+ if (RegExprReplaceAll(r,'fasdfasdf','',Dest)<>2) or
+ (Dest<>'sdsdf') then
+ do_error(2010);
+ DestroyregExprEngine(r);
+
+ initok:=GenerateRegExprEngine('fa',[],r);
+ if not initok then
+ do_error(2011);
+ if (RegExprReplaceAll(r,'fasdfafaasdasdfafaasd','',Dest)<>5) or
+ (Dest<>'sdasdasdasd') then
+ do_error(2012);
+ DestroyregExprEngine(r);
+
+ writeln('*** Testing unit regexpr was successful ***');
+end.