Răsfoiți Sursa

* regexpr moved

git-svn-id: trunk@9943 -
marco 17 ani în urmă
părinte
comite
3f3b95f792

+ 5 - 0
.gitattributes

@@ -4413,6 +4413,11 @@ packages/paszlib/src/zipper.pp svneol=native#text/plain
 packages/paszlib/src/ziputils.pas svneol=native#text/plain
 packages/paszlib/src/zstream.pp svneol=native#text/plain
 packages/paszlib/src/zuncompr.pas svneol=native#text/plain
+packages/regexpr/Makefile svneol=native#text/plain
+packages/regexpr/Makefile.fpc svneol=native#text/plain
+packages/regexpr/fpmake.pp svneol=native#text/plain
+packages/regexpr/src/regexpr.pp svneol=native#text/plain
+packages/regexpr/tests/testreg1.pp svneol=native#text/plain
 packages/unzip/Makefile.fpc svneol=native#text/plain
 packages/unzip/fpmake.pp svneol=native#text/plain
 packages/unzip/src/unzip.pp svneol=native#text/plain

+ 151 - 53
packages/Makefile

@@ -241,163 +241,163 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc  libc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc  libc
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  zlib
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  zlib
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  zlib
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  zlib
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web ibase mysql
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web ibase mysql
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web ibase mysql
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web ibase mysql
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCSUBDIR=packages
@@ -1497,6 +1497,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -1528,6 +1529,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 TARGET_DIRS_BASE=1
@@ -1548,6 +1550,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_WINUNITS-BASE=1
 TARGET_DIRS_WINUNITS-JEDI=1
 TARGET_DIRS_FCL-WEB=1
@@ -1576,6 +1579,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_ZLIB=1
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
@@ -1597,6 +1601,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -1625,6 +1630,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 TARGET_DIRS_BASE=1
@@ -1645,6 +1651,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -1673,6 +1680,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -1701,6 +1709,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),i386-netware)
 TARGET_DIRS_BASE=1
@@ -1721,6 +1730,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_ZLIB=1
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
@@ -1742,6 +1752,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -1770,6 +1781,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 TARGET_DIRS_BASE=1
@@ -1790,6 +1802,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -1818,6 +1831,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_ZLIB=1
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
@@ -1839,6 +1853,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
 TARGET_DIRS_BASE=1
@@ -1859,6 +1874,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_ZLIB=1
 endif
 ifeq ($(FULL_TARGET),i386-wince)
@@ -1880,6 +1896,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_IBASE=1
 TARGET_DIRS_MYSQL=1
@@ -1903,6 +1920,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
 TARGET_DIRS_BASE=1
@@ -1923,6 +1941,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
 TARGET_DIRS_BASE=1
@@ -1943,6 +1962,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -1973,6 +1993,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2001,6 +2022,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2029,6 +2051,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
 TARGET_DIRS_BASE=1
@@ -2049,6 +2072,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 TARGET_DIRS_BASE=1
@@ -2069,6 +2093,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2097,6 +2122,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
 TARGET_DIRS_BASE=1
@@ -2117,6 +2143,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 TARGET_DIRS_BASE=1
@@ -2137,6 +2164,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2167,6 +2195,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2195,6 +2224,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
 TARGET_DIRS_BASE=1
@@ -2215,6 +2245,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
 TARGET_DIRS_BASE=1
@@ -2235,6 +2266,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2263,6 +2295,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
 TARGET_DIRS_BASE=1
@@ -2283,6 +2316,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
 TARGET_DIRS_BASE=1
@@ -2303,6 +2337,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2333,6 +2368,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2361,6 +2397,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2389,6 +2426,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 TARGET_DIRS_BASE=1
@@ -2409,6 +2447,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2439,6 +2478,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2467,6 +2507,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2495,6 +2536,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_WINUNITS-BASE=1
 TARGET_DIRS_WINUNITS-JEDI=1
 TARGET_DIRS_FCL-WEB=1
@@ -2523,6 +2565,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),arm-linux)
 TARGET_DIRS_BASE=1
@@ -2543,6 +2586,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2573,6 +2617,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),arm-wince)
 TARGET_DIRS_BASE=1
@@ -2593,6 +2638,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_IBASE=1
 TARGET_DIRS_MYSQL=1
@@ -2616,6 +2662,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),arm-nds)
 TARGET_DIRS_BASE=1
@@ -2636,6 +2683,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
 TARGET_DIRS_BASE=1
@@ -2656,6 +2704,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
 TARGET_DIRS_BASE=1
@@ -2676,6 +2725,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 TARGET_DIRS_BASE=1
@@ -2696,6 +2746,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2726,6 +2777,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_FCL-WEB=1
 TARGET_DIRS_FCL-ASYNC=1
 TARGET_DIRS_IBASE=1
@@ -2754,6 +2806,7 @@ TARGET_DIRS_FCL-JSON=1
 TARGET_DIRS_EXTRA=1
 TARGET_DIRS_FCL-PROCESS=1
 TARGET_DIRS_UNZIP=1
+TARGET_DIRS_REGEXPR=1
 endif
 ifdef TARGET_DIRS_BASE
 base_all:
@@ -3565,6 +3618,51 @@ unzip:
 	$(MAKE) -C unzip all
 .PHONY: unzip_all unzip_debug unzip_smart unzip_release unzip_units unzip_examples unzip_shared unzip_install unzip_sourceinstall unzip_exampleinstall unzip_distinstall unzip_zipinstall unzip_zipsourceinstall unzip_zipexampleinstall unzip_zipdistinstall unzip_clean unzip_distclean unzip_cleanall unzip_info unzip_makefiles unzip
 endif
+ifdef TARGET_DIRS_REGEXPR
+regexpr_all:
+	$(MAKE) -C regexpr all
+regexpr_debug:
+	$(MAKE) -C regexpr debug
+regexpr_smart:
+	$(MAKE) -C regexpr smart
+regexpr_release:
+	$(MAKE) -C regexpr release
+regexpr_units:
+	$(MAKE) -C regexpr units
+regexpr_examples:
+	$(MAKE) -C regexpr examples
+regexpr_shared:
+	$(MAKE) -C regexpr shared
+regexpr_install:
+	$(MAKE) -C regexpr install
+regexpr_sourceinstall:
+	$(MAKE) -C regexpr sourceinstall
+regexpr_exampleinstall:
+	$(MAKE) -C regexpr exampleinstall
+regexpr_distinstall:
+	$(MAKE) -C regexpr distinstall
+regexpr_zipinstall:
+	$(MAKE) -C regexpr zipinstall
+regexpr_zipsourceinstall:
+	$(MAKE) -C regexpr zipsourceinstall
+regexpr_zipexampleinstall:
+	$(MAKE) -C regexpr zipexampleinstall
+regexpr_zipdistinstall:
+	$(MAKE) -C regexpr zipdistinstall
+regexpr_clean:
+	$(MAKE) -C regexpr clean
+regexpr_distclean:
+	$(MAKE) -C regexpr distclean
+regexpr_cleanall:
+	$(MAKE) -C regexpr cleanall
+regexpr_info:
+	$(MAKE) -C regexpr info
+regexpr_makefiles:
+	$(MAKE) -C regexpr makefiles
+regexpr:
+	$(MAKE) -C regexpr all
+.PHONY: regexpr_all regexpr_debug regexpr_smart regexpr_release regexpr_units regexpr_examples regexpr_shared regexpr_install regexpr_sourceinstall regexpr_exampleinstall regexpr_distinstall regexpr_zipinstall regexpr_zipsourceinstall regexpr_zipexampleinstall regexpr_zipdistinstall regexpr_clean regexpr_distclean regexpr_cleanall regexpr_info regexpr_makefiles regexpr
+endif
 ifdef TARGET_DIRS_FCL-WEB
 fcl-web_all:
 	$(MAKE) -C fcl-web all

+ 1 - 1
packages/Makefile.fpc

@@ -3,7 +3,7 @@
 #
 
 [target]
-dirs=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip
+dirs=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 dirs_linux_i386=libc 
 dirs_freebsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
 dirs_darwin=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc

+ 28 - 251
packages/base/Makefile

@@ -241,163 +241,88 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=regexpr  gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_DIRS+=regexpr  gdbint
+override TARGET_DIRS+=gdbint
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=regexpr  gdbint   sqlite postgres  imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=gdbint   sqlite postgres  imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=regexpr  gdbint   postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=gdbint   postgres   sqlite pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_DIRS+=regexpr  gdbint   postgres  sqlite pthreads imagemagick
+override TARGET_DIRS+=gdbint   postgres  sqlite pthreads imagemagick
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_DIRS+=regexpr  gdbint   postgres   imagemagick httpd
+override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_DIRS+=regexpr  postgres   sqlite pthreads imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_DIRS+=regexpr  gdbint   postgres   imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=regexpr  postgres   sqlite pthreads imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_DIRS+=regexpr  sqlite postgres
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=sqlite postgres
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=regexpr  gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=regexpr  gdbint   postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=gdbint   postgres   sqlite pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_DIRS+=regexpr  gdbint   postgres   imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_DIRS+=regexpr  gdbint   postgres   imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=regexpr  gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_DIRS+=regexpr  gdbint   postgres   imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_DIRS+=regexpr  postgres   sqlite pthreads imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=regexpr  gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_DIRS+=regexpr  gdbint   postgres   imagemagick httpd
+override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_DIRS+=regexpr  postgres   sqlite pthreads imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=regexpr  gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=regexpr  gdbint   postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=gdbint   postgres   sqlite pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_DIRS+=regexpr  postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=regexpr  sqlite postgres
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=sqlite postgres
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=regexpr  gdbint   postgres   pthreads sqlite imagemagick  httpd
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_DIRS+=regexpr  sqlite postgres
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_DIRS+=regexpr
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=sqlite postgres
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=regexpr  gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=regexpr  postgres   sqlite pthreads imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_DIRS+=regexpr
+override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
 endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCSUBDIR=packages/base
@@ -1479,7 +1404,6 @@ fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIR
 fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
 fpc_makefiles: fpc_makefile fpc_makefile_dirs
 ifeq ($(FULL_TARGET),i386-linux)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
@@ -1488,22 +1412,16 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),i386-os2)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
@@ -1512,7 +1430,6 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
@@ -1520,66 +1437,36 @@ TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),i386-qnx)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),i386-darwin)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),i386-emx)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),i386-wince)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_POSTGRES=1
 endif
-ifeq ($(FULL_TARGET),i386-embedded)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),m68k-linux)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
@@ -1588,7 +1475,6 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
@@ -1597,33 +1483,18 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
@@ -1632,34 +1503,19 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),sparc-linux)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
@@ -1668,25 +1524,19 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
@@ -1695,7 +1545,6 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
@@ -1704,7 +1553,6 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
@@ -1712,15 +1560,10 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_POSTGRES=1
 endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),arm-linux)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
@@ -1728,28 +1571,11 @@ TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),arm-palmos)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),arm-wince)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_POSTGRES=1
 endif
-ifeq ($(FULL_TARGET),arm-gba)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),arm-nds)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),arm-embedded)
-TARGET_DIRS_REGEXPR=1
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-TARGET_DIRS_REGEXPR=1
-endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_GDBINT=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
@@ -1758,61 +1584,12 @@ TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-TARGET_DIRS_REGEXPR=1
 TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-TARGET_DIRS_REGEXPR=1
-endif
-ifdef TARGET_DIRS_REGEXPR
-regexpr_all:
-	$(MAKE) -C regexpr all
-regexpr_debug:
-	$(MAKE) -C regexpr debug
-regexpr_smart:
-	$(MAKE) -C regexpr smart
-regexpr_release:
-	$(MAKE) -C regexpr release
-regexpr_units:
-	$(MAKE) -C regexpr units
-regexpr_examples:
-	$(MAKE) -C regexpr examples
-regexpr_shared:
-	$(MAKE) -C regexpr shared
-regexpr_install:
-	$(MAKE) -C regexpr install
-regexpr_sourceinstall:
-	$(MAKE) -C regexpr sourceinstall
-regexpr_exampleinstall:
-	$(MAKE) -C regexpr exampleinstall
-regexpr_distinstall:
-	$(MAKE) -C regexpr distinstall
-regexpr_zipinstall:
-	$(MAKE) -C regexpr zipinstall
-regexpr_zipsourceinstall:
-	$(MAKE) -C regexpr zipsourceinstall
-regexpr_zipexampleinstall:
-	$(MAKE) -C regexpr zipexampleinstall
-regexpr_zipdistinstall:
-	$(MAKE) -C regexpr zipdistinstall
-regexpr_clean:
-	$(MAKE) -C regexpr clean
-regexpr_distclean:
-	$(MAKE) -C regexpr distclean
-regexpr_cleanall:
-	$(MAKE) -C regexpr cleanall
-regexpr_info:
-	$(MAKE) -C regexpr info
-regexpr_makefiles:
-	$(MAKE) -C regexpr makefiles
-regexpr:
-	$(MAKE) -C regexpr all
-.PHONY: regexpr_all regexpr_debug regexpr_smart regexpr_release regexpr_units regexpr_examples regexpr_shared regexpr_install regexpr_sourceinstall regexpr_exampleinstall regexpr_distinstall regexpr_zipinstall regexpr_zipsourceinstall regexpr_zipexampleinstall regexpr_zipdistinstall regexpr_clean regexpr_distclean regexpr_cleanall regexpr_info regexpr_makefiles regexpr
-endif
 ifdef TARGET_DIRS_GDBINT
 gdbint_all:
 	$(MAKE) -C gdbint all

+ 0 - 1
packages/base/Makefile.fpc

@@ -3,7 +3,6 @@
 #
 
 [target]
-dirs=regexpr
 dirs_linux=gdbint   postgres   pthreads sqlite imagemagick  httpd
 dirs_win32=gdbint   sqlite postgres  imagemagick httpd 
 dirs_win64=   sqlite postgres  

+ 2585 - 0
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:

+ 28 - 0
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:
+

+ 28 - 0
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}

+ 1207 - 0
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.

+ 877 - 0
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.