2
0
Эх сурвалжийг харах

* postgres and sqlite moved

git-svn-id: trunk@9945 -
marco 17 жил өмнө
parent
commit
aba88e1f3c

+ 26 - 0
.gitattributes

@@ -4407,11 +4407,37 @@ 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/postgres/Makefile svneol=native#text/plain
+packages/postgres/Makefile.fpc svneol=native#text/plain
+packages/postgres/README svneol=native#text/plain
+packages/postgres/fpmake.pp svneol=native#text/plain
+packages/postgres/scripts/mkdb svneol=native#text/plain
+packages/postgres/scripts/rmdb svneol=native#text/plain
+packages/postgres/src/dllist.pp svneol=native#text/plain
+packages/postgres/src/dllistdyn.pp svneol=native#text/plain
+packages/postgres/src/dllisttypes.inc svneol=native#text/plain
+packages/postgres/src/postgres.pp svneol=native#text/plain
+packages/postgres/src/postgres3.pp svneol=native#text/plain
+packages/postgres/src/postgres3dyn.pp svneol=native#text/plain
+packages/postgres/src/postgres3types.inc svneol=native#text/plain
+packages/postgres/tests/testpg1.pp svneol=native#text/plain
+packages/postgres/tests/testpg2.pp 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/sqlite/Makefile.fpc svneol=native#text/plain
+packages/sqlite/fpmake.pp svneol=native#text/plain
+packages/sqlite/src/sqlite.pp svneol=native#text/plain
+packages/sqlite/src/sqlite3.inc svneol=native#text/plain
+packages/sqlite/src/sqlite3.pp svneol=native#text/plain
+packages/sqlite/src/sqlite3db.pas svneol=native#text/x-pascal
+packages/sqlite/src/sqlite3dyn.pp svneol=native#text/plain
+packages/sqlite/src/sqlitedb.pas svneol=native#text/plain
+packages/sqlite/tests/test.pas svneol=native#text/plain
+packages/sqlite/tests/testapiv3x.README svneol=native#text/plain
+packages/sqlite/tests/testapiv3x.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

+ 167 - 29
packages/Makefile

@@ -241,28 +241,28 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc  libc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite  libc
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -271,13 +271,13 @@ ifeq ($(FULL_TARGET),i386-netware)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  zlib
@@ -298,13 +298,13 @@ ifeq ($(FULL_TARGET),i386-symbian)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -313,7 +313,7 @@ ifeq ($(FULL_TARGET),m68k-atari)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -322,10 +322,10 @@ ifeq ($(FULL_TARGET),m68k-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -334,7 +334,7 @@ ifeq ($(FULL_TARGET),powerpc-macos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -343,34 +343,34 @@ ifeq ($(FULL_TARGET),powerpc-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -391,10 +391,10 @@ ifeq ($(FULL_TARGET),arm-symbian)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
+override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr  fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 override TARGET_DIRS+=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
@@ -1508,6 +1508,8 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_DBUS=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 TARGET_DIRS_LIBC=1
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
@@ -1559,6 +1561,8 @@ TARGET_DIRS_MYSQL=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 TARGET_DIRS_BASE=1
@@ -1610,6 +1614,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-beos)
 TARGET_DIRS_BASE=1
@@ -1660,6 +1666,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
 TARGET_DIRS_BASE=1
@@ -1689,6 +1697,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
 TARGET_DIRS_BASE=1
@@ -1761,6 +1771,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
 TARGET_DIRS_BASE=1
@@ -1811,6 +1823,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 TARGET_DIRS_BASE=1
@@ -1973,6 +1987,8 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_DBUS=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 TARGET_DIRS_BASE=1
@@ -2002,6 +2018,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
 TARGET_DIRS_BASE=1
@@ -2031,6 +2049,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
 TARGET_DIRS_BASE=1
@@ -2102,6 +2122,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
 TARGET_DIRS_BASE=1
@@ -2175,6 +2197,8 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_DBUS=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 TARGET_DIRS_BASE=1
@@ -2204,6 +2228,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
 TARGET_DIRS_BASE=1
@@ -2275,6 +2301,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
 TARGET_DIRS_BASE=1
@@ -2348,6 +2376,8 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_DBUS=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 TARGET_DIRS_BASE=1
@@ -2377,6 +2407,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
 TARGET_DIRS_BASE=1
@@ -2406,6 +2438,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
 TARGET_DIRS_BASE=1
@@ -2458,6 +2492,8 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_DBUS=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 TARGET_DIRS_BASE=1
@@ -2487,6 +2523,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
 TARGET_DIRS_BASE=1
@@ -2516,6 +2554,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 TARGET_DIRS_BASE=1
@@ -2545,6 +2585,8 @@ TARGET_DIRS_MYSQL=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 TARGET_DIRS_BASE=1
@@ -2597,6 +2639,8 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_DBUS=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
 TARGET_DIRS_BASE=1
@@ -2757,6 +2801,8 @@ TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_DBUS=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
 TARGET_DIRS_BASE=1
@@ -2786,6 +2832,8 @@ TARGET_DIRS_NCURSES=1
 TARGET_DIRS_ZLIB=1
 TARGET_DIRS_ORACLE=1
 TARGET_DIRS_ODBC=1
+TARGET_DIRS_POSTGRES=1
+TARGET_DIRS_SQLITE=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
 TARGET_DIRS_BASE=1
@@ -4068,6 +4116,96 @@ odbc:
 	$(MAKE) -C odbc all
 .PHONY: odbc_all odbc_debug odbc_smart odbc_release odbc_units odbc_examples odbc_shared odbc_install odbc_sourceinstall odbc_exampleinstall odbc_distinstall odbc_zipinstall odbc_zipsourceinstall odbc_zipexampleinstall odbc_zipdistinstall odbc_clean odbc_distclean odbc_cleanall odbc_info odbc_makefiles odbc
 endif
+ifdef TARGET_DIRS_POSTGRES
+postgres_all:
+	$(MAKE) -C postgres all
+postgres_debug:
+	$(MAKE) -C postgres debug
+postgres_smart:
+	$(MAKE) -C postgres smart
+postgres_release:
+	$(MAKE) -C postgres release
+postgres_units:
+	$(MAKE) -C postgres units
+postgres_examples:
+	$(MAKE) -C postgres examples
+postgres_shared:
+	$(MAKE) -C postgres shared
+postgres_install:
+	$(MAKE) -C postgres install
+postgres_sourceinstall:
+	$(MAKE) -C postgres sourceinstall
+postgres_exampleinstall:
+	$(MAKE) -C postgres exampleinstall
+postgres_distinstall:
+	$(MAKE) -C postgres distinstall
+postgres_zipinstall:
+	$(MAKE) -C postgres zipinstall
+postgres_zipsourceinstall:
+	$(MAKE) -C postgres zipsourceinstall
+postgres_zipexampleinstall:
+	$(MAKE) -C postgres zipexampleinstall
+postgres_zipdistinstall:
+	$(MAKE) -C postgres zipdistinstall
+postgres_clean:
+	$(MAKE) -C postgres clean
+postgres_distclean:
+	$(MAKE) -C postgres distclean
+postgres_cleanall:
+	$(MAKE) -C postgres cleanall
+postgres_info:
+	$(MAKE) -C postgres info
+postgres_makefiles:
+	$(MAKE) -C postgres makefiles
+postgres:
+	$(MAKE) -C postgres all
+.PHONY: postgres_all postgres_debug postgres_smart postgres_release postgres_units postgres_examples postgres_shared postgres_install postgres_sourceinstall postgres_exampleinstall postgres_distinstall postgres_zipinstall postgres_zipsourceinstall postgres_zipexampleinstall postgres_zipdistinstall postgres_clean postgres_distclean postgres_cleanall postgres_info postgres_makefiles postgres
+endif
+ifdef TARGET_DIRS_SQLITE
+sqlite_all:
+	$(MAKE) -C sqlite all
+sqlite_debug:
+	$(MAKE) -C sqlite debug
+sqlite_smart:
+	$(MAKE) -C sqlite smart
+sqlite_release:
+	$(MAKE) -C sqlite release
+sqlite_units:
+	$(MAKE) -C sqlite units
+sqlite_examples:
+	$(MAKE) -C sqlite examples
+sqlite_shared:
+	$(MAKE) -C sqlite shared
+sqlite_install:
+	$(MAKE) -C sqlite install
+sqlite_sourceinstall:
+	$(MAKE) -C sqlite sourceinstall
+sqlite_exampleinstall:
+	$(MAKE) -C sqlite exampleinstall
+sqlite_distinstall:
+	$(MAKE) -C sqlite distinstall
+sqlite_zipinstall:
+	$(MAKE) -C sqlite zipinstall
+sqlite_zipsourceinstall:
+	$(MAKE) -C sqlite zipsourceinstall
+sqlite_zipexampleinstall:
+	$(MAKE) -C sqlite zipexampleinstall
+sqlite_zipdistinstall:
+	$(MAKE) -C sqlite zipdistinstall
+sqlite_clean:
+	$(MAKE) -C sqlite clean
+sqlite_distclean:
+	$(MAKE) -C sqlite distclean
+sqlite_cleanall:
+	$(MAKE) -C sqlite cleanall
+sqlite_info:
+	$(MAKE) -C sqlite info
+sqlite_makefiles:
+	$(MAKE) -C sqlite makefiles
+sqlite:
+	$(MAKE) -C sqlite all
+.PHONY: sqlite_all sqlite_debug sqlite_smart sqlite_release sqlite_units sqlite_examples sqlite_shared sqlite_install sqlite_sourceinstall sqlite_exampleinstall sqlite_distinstall sqlite_zipinstall sqlite_zipsourceinstall sqlite_zipexampleinstall sqlite_zipdistinstall sqlite_clean sqlite_distclean sqlite_cleanall sqlite_info sqlite_makefiles sqlite
+endif
 ifdef TARGET_DIRS_LIBC
 libc_all:
 	$(MAKE) -C libc all
@@ -4293,11 +4431,11 @@ fcl-web_debug: fcl-db_debug fcl-xml_debug fcl-process_debug
 fcl-web_smart: fcl-db_smart fcl-xml_smart fcl-process_smart
 fcl-web_release: fcl-db_release fcl-xml_release fcl-process_release
 fcl-web_shared: fcl-db_shared fcl-xml_shared fcl-process_shared
-fcl-db_all: fcl-base_all mysql_all ibase_all oracle_all odbc_all
-fcl-db_debug: fcl-base_debug mysql_debug ibase_debug oracle_debug odbc_debug
-fcl-db_smart: fcl-base_smart mysql_smart ibase_smart oracle_smart odbc_smart
-fcl-db_release: fcl-base_release mysql_release ibase_release oracle_release odbc_release
-fcl-db_shared: fcl-base_shared mysql_shared ibase_shared oracle_shared odbc_shared
+fcl-db_all: fcl-base_all mysql_all ibase_all oracle_all odbc_all postgres_all sqlite_all
+fcl-db_debug: fcl-base_debug mysql_debug ibase_debug oracle_debug odbc_debug postgres_debug sqlite_debug
+fcl-db_smart: fcl-base_smart mysql_smart ibase_smart oracle_smart odbc_smart postgres_smart sqlite_smart
+fcl-db_release: fcl-base_release mysql_release ibase_release oracle_release odbc_release postgres_release sqlite_release
+fcl-db_shared: fcl-base_shared mysql_shared ibase_shared oracle_shared odbc_shared postgres_shared postgres_release
 fcl_all: fcl-base_all fcl-xml_all fcl-fpcunit_all fcl-db_all fcl-web_all fcl-registry_all fcl-passrc_all fcl-image_all fcl-net_all fcl-json_all
 fcl_debug: fcl-base_debug fcl-xml_debug fcl-fpcunit_debug fcl-db_debug fcl-web_debug fcl-registry_debug fcl-passrc_debug fcl-image_debug fcl-net_debug fcl-json_debug
 fcl_smart: fcl-base_smart fcl-xml_smart fcl-fpcunit_smart fcl-db_smart fcl-web_smart fcl-registry_smart fcl-passrc_smart fcl-image_smart fcl-net_smart fcl-json_smart

+ 13 - 13
packages/Makefile.fpc

@@ -5,14 +5,14 @@
 [target]
 dirs=base fv hash pasjpeg paszlib fpmkunit fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-xml fcl-fpcunit fcl-json extra fcl-process unzip regexpr
 dirs_linux_i386=libc 
-dirs_freebsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
-dirs_darwin=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
-dirs_solaris=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
-dirs_netbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
-dirs_openbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc
-dirs_linux=fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc
-dirs_win32=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc
-dirs_win64=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc
+dirs_freebsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
+dirs_darwin=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
+dirs_solaris=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
+dirs_netbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite
+dirs_openbsd=fcl-web fcl-async ibase mysql ncurses zlib oracle odbc  postgres sqlite
+dirs_linux=fcl-web fcl-async ibase mysql ncurses unzip zlib oracle dbus odbc postgres sqlite
+dirs_win32=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite
+dirs_win64=winunits-base winunits-jedi fcl-web ibase mysql zlib oracle odbc postgres sqlite
 dirs_wince=fcl-web ibase mysql
 dirs_os2=zlib
 dirs_emx=zlib
@@ -105,11 +105,11 @@ fcl-web_smart: fcl-db_smart fcl-xml_smart fcl-process_smart
 fcl-web_release: fcl-db_release fcl-xml_release fcl-process_release
 fcl-web_shared: fcl-db_shared fcl-xml_shared fcl-process_shared
 
-fcl-db_all: fcl-base_all mysql_all ibase_all oracle_all odbc_all
-fcl-db_debug: fcl-base_debug mysql_debug ibase_debug oracle_debug odbc_debug
-fcl-db_smart: fcl-base_smart mysql_smart ibase_smart oracle_smart odbc_smart
-fcl-db_release: fcl-base_release mysql_release ibase_release oracle_release odbc_release
-fcl-db_shared: fcl-base_shared mysql_shared ibase_shared oracle_shared odbc_shared
+fcl-db_all: fcl-base_all mysql_all ibase_all oracle_all odbc_all postgres_all sqlite_all
+fcl-db_debug: fcl-base_debug mysql_debug ibase_debug oracle_debug odbc_debug postgres_debug sqlite_debug
+fcl-db_smart: fcl-base_smart mysql_smart ibase_smart oracle_smart odbc_smart postgres_smart sqlite_smart
+fcl-db_release: fcl-base_release mysql_release ibase_release oracle_release odbc_release postgres_release sqlite_release
+fcl-db_shared: fcl-base_shared mysql_shared ibase_shared oracle_shared odbc_shared postgres_shared postgres_release
 
 fcl_all: fcl-base_all fcl-xml_all fcl-fpcunit_all fcl-db_all fcl-web_all fcl-registry_all fcl-passrc_all fcl-image_all fcl-net_all fcl-json_all
 fcl_debug: fcl-base_debug fcl-xml_debug fcl-fpcunit_debug fcl-db_debug fcl-web_debug fcl-registry_debug fcl-passrc_debug fcl-image_debug fcl-net_debug fcl-json_debug

+ 24 - 177
packages/base/Makefile

@@ -241,88 +241,79 @@ UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
 endif
 PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint      pthreads  imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=gdbint
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=gdbint   sqlite postgres  imagemagick httpd
+override TARGET_DIRS+=gdbint      imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=gdbint   postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=gdbint       pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_DIRS+=gdbint   postgres  sqlite pthreads imagemagick
+override TARGET_DIRS+=gdbint      pthreads imagemagick
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
+override TARGET_DIRS+=gdbint      imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
+override TARGET_DIRS+=gdbint      imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_DIRS+=sqlite postgres
+override TARGET_DIRS+=pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint      pthreads  imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=gdbint   postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=gdbint       pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
+override TARGET_DIRS+=gdbint      imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
+override TARGET_DIRS+=gdbint      imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint      pthreads  imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
+override TARGET_DIRS+=gdbint      imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint      pthreads  imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_DIRS+=gdbint   postgres   imagemagick httpd
+override TARGET_DIRS+=gdbint      imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint      pthreads  imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=gdbint   postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=gdbint       pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=sqlite postgres
+override TARGET_DIRS+=pthreads imagemagick httpd
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_DIRS+=sqlite postgres
+override TARGET_DIRS+=gdbint      pthreads  imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=gdbint   postgres   pthreads sqlite imagemagick  httpd
+override TARGET_DIRS+=gdbint      pthreads  imagemagick  httpd
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=postgres   sqlite pthreads imagemagick httpd
+override TARGET_DIRS+=pthreads imagemagick httpd
 endif
 override INSTALL_FPCPACKAGE=y
 override INSTALL_FPCSUBDIR=packages/base
@@ -1405,9 +1396,7 @@ fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
 fpc_makefiles: fpc_makefile fpc_makefile_dirs
 ifeq ($(FULL_TARGET),i386-linux)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
@@ -1416,176 +1405,124 @@ TARGET_DIRS_GDBINT=1
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 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-freebsd)
 TARGET_DIRS_GDBINT=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-beos)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-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-openbsd)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-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-wince)
-TARGET_DIRS_SQLITE=1
-TARGET_DIRS_POSTGRES=1
-endif
 ifeq ($(FULL_TARGET),m68k-linux)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
 TARGET_DIRS_GDBINT=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),m68k-netbsd)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-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-linux)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-TARGET_DIRS_POSTGRES=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
 TARGET_DIRS_GDBINT=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),x86_64-darwin)
-TARGET_DIRS_POSTGRES=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-TARGET_DIRS_SQLITE=1
-TARGET_DIRS_POSTGRES=1
-endif
 ifeq ($(FULL_TARGET),arm-linux)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
-ifeq ($(FULL_TARGET),arm-wince)
-TARGET_DIRS_SQLITE=1
-TARGET_DIRS_POSTGRES=1
-endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
 TARGET_DIRS_GDBINT=1
-TARGET_DIRS_POSTGRES=1
 TARGET_DIRS_PTHREADS=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-TARGET_DIRS_POSTGRES=1
-TARGET_DIRS_SQLITE=1
 TARGET_DIRS_PTHREADS=1
 TARGET_DIRS_IMAGEMAGICK=1
 TARGET_DIRS_HTTPD=1
@@ -1635,51 +1572,6 @@ gdbint:
 	$(MAKE) -C gdbint all
 .PHONY: gdbint_all gdbint_debug gdbint_smart gdbint_release gdbint_units gdbint_examples gdbint_shared gdbint_install gdbint_sourceinstall gdbint_exampleinstall gdbint_distinstall gdbint_zipinstall gdbint_zipsourceinstall gdbint_zipexampleinstall gdbint_zipdistinstall gdbint_clean gdbint_distclean gdbint_cleanall gdbint_info gdbint_makefiles gdbint
 endif
-ifdef TARGET_DIRS_POSTGRES
-postgres_all:
-	$(MAKE) -C postgres all
-postgres_debug:
-	$(MAKE) -C postgres debug
-postgres_smart:
-	$(MAKE) -C postgres smart
-postgres_release:
-	$(MAKE) -C postgres release
-postgres_units:
-	$(MAKE) -C postgres units
-postgres_examples:
-	$(MAKE) -C postgres examples
-postgres_shared:
-	$(MAKE) -C postgres shared
-postgres_install:
-	$(MAKE) -C postgres install
-postgres_sourceinstall:
-	$(MAKE) -C postgres sourceinstall
-postgres_exampleinstall:
-	$(MAKE) -C postgres exampleinstall
-postgres_distinstall:
-	$(MAKE) -C postgres distinstall
-postgres_zipinstall:
-	$(MAKE) -C postgres zipinstall
-postgres_zipsourceinstall:
-	$(MAKE) -C postgres zipsourceinstall
-postgres_zipexampleinstall:
-	$(MAKE) -C postgres zipexampleinstall
-postgres_zipdistinstall:
-	$(MAKE) -C postgres zipdistinstall
-postgres_clean:
-	$(MAKE) -C postgres clean
-postgres_distclean:
-	$(MAKE) -C postgres distclean
-postgres_cleanall:
-	$(MAKE) -C postgres cleanall
-postgres_info:
-	$(MAKE) -C postgres info
-postgres_makefiles:
-	$(MAKE) -C postgres makefiles
-postgres:
-	$(MAKE) -C postgres all
-.PHONY: postgres_all postgres_debug postgres_smart postgres_release postgres_units postgres_examples postgres_shared postgres_install postgres_sourceinstall postgres_exampleinstall postgres_distinstall postgres_zipinstall postgres_zipsourceinstall postgres_zipexampleinstall postgres_zipdistinstall postgres_clean postgres_distclean postgres_cleanall postgres_info postgres_makefiles postgres
-endif
 ifdef TARGET_DIRS_PTHREADS
 pthreads_all:
 	$(MAKE) -C pthreads all
@@ -1725,51 +1617,6 @@ pthreads:
 	$(MAKE) -C pthreads all
 .PHONY: pthreads_all pthreads_debug pthreads_smart pthreads_release pthreads_units pthreads_examples pthreads_shared pthreads_install pthreads_sourceinstall pthreads_exampleinstall pthreads_distinstall pthreads_zipinstall pthreads_zipsourceinstall pthreads_zipexampleinstall pthreads_zipdistinstall pthreads_clean pthreads_distclean pthreads_cleanall pthreads_info pthreads_makefiles pthreads
 endif
-ifdef TARGET_DIRS_SQLITE
-sqlite_all:
-	$(MAKE) -C sqlite all
-sqlite_debug:
-	$(MAKE) -C sqlite debug
-sqlite_smart:
-	$(MAKE) -C sqlite smart
-sqlite_release:
-	$(MAKE) -C sqlite release
-sqlite_units:
-	$(MAKE) -C sqlite units
-sqlite_examples:
-	$(MAKE) -C sqlite examples
-sqlite_shared:
-	$(MAKE) -C sqlite shared
-sqlite_install:
-	$(MAKE) -C sqlite install
-sqlite_sourceinstall:
-	$(MAKE) -C sqlite sourceinstall
-sqlite_exampleinstall:
-	$(MAKE) -C sqlite exampleinstall
-sqlite_distinstall:
-	$(MAKE) -C sqlite distinstall
-sqlite_zipinstall:
-	$(MAKE) -C sqlite zipinstall
-sqlite_zipsourceinstall:
-	$(MAKE) -C sqlite zipsourceinstall
-sqlite_zipexampleinstall:
-	$(MAKE) -C sqlite zipexampleinstall
-sqlite_zipdistinstall:
-	$(MAKE) -C sqlite zipdistinstall
-sqlite_clean:
-	$(MAKE) -C sqlite clean
-sqlite_distclean:
-	$(MAKE) -C sqlite distclean
-sqlite_cleanall:
-	$(MAKE) -C sqlite cleanall
-sqlite_info:
-	$(MAKE) -C sqlite info
-sqlite_makefiles:
-	$(MAKE) -C sqlite makefiles
-sqlite:
-	$(MAKE) -C sqlite all
-.PHONY: sqlite_all sqlite_debug sqlite_smart sqlite_release sqlite_units sqlite_examples sqlite_shared sqlite_install sqlite_sourceinstall sqlite_exampleinstall sqlite_distinstall sqlite_zipinstall sqlite_zipsourceinstall sqlite_zipexampleinstall sqlite_zipdistinstall sqlite_clean sqlite_distclean sqlite_cleanall sqlite_info sqlite_makefiles sqlite
-endif
 ifdef TARGET_DIRS_IMAGEMAGICK
 imagemagick_all:
 	$(MAKE) -C imagemagick all

+ 8 - 10
packages/base/Makefile.fpc

@@ -3,17 +3,15 @@
 #
 
 [target]
-dirs_linux=gdbint   postgres   pthreads sqlite imagemagick  httpd
-dirs_win32=gdbint   sqlite postgres  imagemagick httpd 
-dirs_win64=   sqlite postgres  
-dirs_wince= sqlite postgres
+dirs_linux=gdbint      pthreads  imagemagick  httpd
+dirs_win32=gdbint      imagemagick httpd 
 dirs_go32v2=gdbint
-dirs_netbsd=gdbint   postgres   imagemagick httpd
-dirs_openbsd=gdbint   postgres   imagemagick httpd
-dirs_beos=gdbint   postgres  sqlite pthreads imagemagick
-dirs_freebsd=gdbint   postgres   sqlite pthreads imagemagick httpd
-dirs_darwin=  postgres   sqlite pthreads imagemagick httpd
-dirs_solaris=  postgres   sqlite pthreads imagemagick httpd
+dirs_netbsd=gdbint      imagemagick httpd
+dirs_openbsd=gdbint      imagemagick httpd
+dirs_beos=gdbint      pthreads imagemagick
+dirs_freebsd=gdbint       pthreads imagemagick httpd
+dirs_darwin=      pthreads imagemagick httpd
+dirs_solaris=      pthreads imagemagick httpd
 
 
 [rules]

+ 2465 - 0
packages/postgres/Makefile

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

+ 31 - 0
packages/postgres/Makefile.fpc

@@ -0,0 +1,31 @@
+#
+#   Makefile.fpc for Postgres bindings
+#
+
+[package]
+name=postgres
+version=2.0.0
+
+[target]
+units=dllist dllistdyn postgres postgres3 postgres3dyn
+examples=testpg1 testpg2
+
+[require]
+libc=y
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[compiler]
+includedir=src
+sourcedir=src tests examples
+
+[shared]
+build=n
+
+[rules]
+.NOTPARALLEL:
+

+ 21 - 0
packages/postgres/README

@@ -0,0 +1,21 @@
+This is the PostGresSQL interface of Free Pascal.
+
+It has been tested with versions 6.2.xxx and 6.3.xxx of PostGreSQL.
+You need at least compiler version 0.99.8 to compile this.
+
+To Compile
+- You must know where the PostGreSQL libraries (libpq) are.
+- You must set the variable OLD in the makefile to 'yes', if your
+  postgresql version is 6.2.xxx or earlier.
+
+Both these things must be set in the Makefile. After that a simple 'make'
+and 'make install' should compile and install everything.
+
+You can test with 'make test', but this supposes that there is a 'testdb'
+database available. If not, you must run
+  mkdb databasename
+  testdb databasename
+  rmdb databasename
+manually. You need create permission on the database for this to work.
+
+Michael.

+ 54 - 0
packages/postgres/fpmake.pp

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

+ 26 - 0
packages/postgres/scripts/mkdb

@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+# Script to create a table 'email' and to fill it with data.
+# The script accepts an optional argument : 
+# A database to connect to. (default 'testdb')
+echo -n "Creating and filling table email in database ${1-testdb}..."
+psql ${1-testdb} << EOF >/dev/null 2>&1
+create table email ( 
+id int4,
+name text,
+email text);
+insert into email values (1,'Michael Van Canneyt','[email protected]');
+insert into email values (2,'Florian Klaempfl','[email protected]');
+insert into email values (3,'Carl-Eric Codere','[email protected]');
+insert into email values (4,'Daniel Mantione','[email protected]');
+insert into email values (5,'Pierre Muller','[email protected]');
+insert into email values (6,'Jonas Maebe','[email protected]');
+insert into email values (7,'Peter Vreman','[email protected]');
+insert into email values (8,'Gerry Dubois','[email protected]');
+EOF
+if [ ! $? = 0 ]; then
+  echo "Failed."
+else
+  echo "Done."
+fi
+# Ready

+ 16 - 0
packages/postgres/scripts/rmdb

@@ -0,0 +1,16 @@
+#!/bin/sh
+#
+# Small script to remove the demo database again.
+# This script accepts 1 (optional) argument : 
+# a database you can connect to. Default is 'testdb'
+# 
+echo -n "Removing table email from db ${1-testdb}..." 
+psql ${1-testdb} << EOF >/dev/null 2>&1
+drop table email;
+EOF
+if [ ! $? = 0 ]; then
+  echo "Failed."
+else
+  echo "Done."
+fi
+# Ready

+ 34 - 0
packages/postgres/src/dllist.pp

@@ -0,0 +1,34 @@
+unit dllist;
+
+interface
+
+{$linklib pq}
+
+{$i dllisttypes.inc}
+
+function  DLNewList:PDllist;cdecl; external;
+procedure DLFreeList(_para1:PDllist);cdecl; external;
+function  DLNewElem(val : pointer) :PDlelem;cdecl;external;
+procedure DLFreeElem(_para1:PDlelem);cdecl; external;
+function  DLGetHead(_para1:PDllist):PDlelem;cdecl; external;
+function  DLGetTail(_para1:PDllist):PDlelem;cdecl; external;
+function  DLRemTail(l:PDllist):PDlelem;cdecl; external;
+function  DLGetPred(_para1:PDlelem):PDlelem;cdecl; external;
+function  DLGetSucc(_para1:PDlelem):PDlelem;cdecl; external;
+procedure DLRemove(_para1:PDlelem);cdecl; external;
+procedure DLAddHead(list:PDllist; node:PDlelem);cdecl; external;
+procedure DLAddTail(list:PDllist; node:PDlelem);cdecl; external;
+function  DLRemHead(list:PDllist):PDlelem;cdecl; external;
+
+{ Macro translated }
+Function  DLE_VAL(elem : PDlelem) : pointer;
+
+implementation
+
+// This function is also defined in DllistDyn!
+Function DLE_VAL(elem : PDlelem) : pointer;
+begin
+  DLE_VAL:=elem^.dle_val
+end;
+
+end.

+ 101 - 0
packages/postgres/src/dllistdyn.pp

@@ -0,0 +1,101 @@
+{
+  Call InitialiseDllist before using any of the calls, and call ReleaseDllist
+  when finished.
+}
+
+unit DllistDyn;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  dynlibs, SysUtils;
+
+{$PACKRECORDS C}
+
+{$IFDEF Unix}
+  const
+    pqlib = 'libpq.so';
+{$ENDIF}
+{$IFDEF Windows}
+  const
+    pqlib = 'libpq.dll';
+{$ENDIF}
+
+{$i dllisttypes.inc}
+
+var
+  DLNewList : function : PDllist;cdecl;
+  DLFreeList : procedure (_para1:PDllist);cdecl;
+  DLNewElem : function (val : pointer) :PDlelem;cdecl;
+  DLFreeElem : procedure (_para1:PDlelem);cdecl;
+  DLGetHead : function (_para1:PDllist):PDlelem;cdecl;
+  DLGetTail : function (_para1:PDllist):PDlelem;cdecl;
+  DLRemTail : function (l:PDllist):PDlelem;cdecl;
+  DLGetPred : function (_para1:PDlelem):PDlelem;cdecl;
+  DLGetSucc : function (_para1:PDlelem):PDlelem;cdecl;
+  DLRemove : procedure (_para1:PDlelem);cdecl;
+  DLAddHead : procedure (list:PDllist; node:PDlelem);cdecl;
+  DLAddTail : procedure (list:PDllist; node:PDlelem);cdecl;
+  DLRemHead : function (list:PDllist):PDlelem;cdecl;
+
+{ Macro translated }
+Function  DLE_VAL(elem : PDlelem) : pointer;
+
+Procedure InitialiseDllist;
+Procedure ReleaseDllist;
+
+var DllistLibraryHandle : TLibHandle;
+
+implementation
+
+var RefCount : integer;
+
+Procedure InitialiseDllist;
+
+begin
+  inc(RefCount);
+  if RefCount = 1 then
+    begin
+    DllistLibraryHandle := loadlibrary(pqlib);
+    if DllistLibraryHandle = nilhandle then
+      begin
+      RefCount := 0;
+      Raise EInOutError.Create('Can not load PosgreSQL client. Is it installed? ('+pqlib+')');
+      end;
+
+    pointer(DLNewList) := GetProcedureAddress(DllistLibraryHandle,'DLNewList');
+    pointer(DLFreeList) := GetProcedureAddress(DllistLibraryHandle,'DLFreeList');
+    pointer( DLNewElem) := GetProcedureAddress(DllistLibraryHandle,' DLNewElem');
+    pointer(DLFreeElem) := GetProcedureAddress(DllistLibraryHandle,'DLFreeElem');
+    pointer( DLGetHead) := GetProcedureAddress(DllistLibraryHandle,' DLGetHead');
+    pointer( DLGetTail) := GetProcedureAddress(DllistLibraryHandle,' DLGetTail');
+    pointer( DLRemTail) := GetProcedureAddress(DllistLibraryHandle,' DLRemTail');
+    pointer( DLGetPred) := GetProcedureAddress(DllistLibraryHandle,' DLGetPred');
+    pointer( DLGetSucc) := GetProcedureAddress(DllistLibraryHandle,' DLGetSucc');
+    pointer(DLRemove) := GetProcedureAddress(DllistLibraryHandle,'DLRemove');
+    pointer(DLAddHead) := GetProcedureAddress(DllistLibraryHandle,'DLAddHead');
+    pointer(DLAddTail) := GetProcedureAddress(DllistLibraryHandle,'DLAddTail');
+    pointer( DLRemHead) := GetProcedureAddress(DllistLibraryHandle,' DLRemHead');
+    end;
+end;
+
+Procedure ReleaseDllist;
+
+begin
+  if RefCount > 0 then dec(RefCount);
+  if RefCount = 0 then
+    begin
+    if not UnloadLibrary(DllistLibraryHandle) then inc(RefCount);
+    end;
+end;
+
+// This function is also defined in Dllist!
+Function DLE_VAL(elem : PDlelem) : pointer;
+begin
+  DLE_VAL:=elem^.dle_val
+end;
+
+
+end.

+ 32 - 0
packages/postgres/src/dllisttypes.inc

@@ -0,0 +1,32 @@
+{
+  Contains the types needed for dllist
+}
+
+{ Pointers to basic pascal types, inserted by h2pas conversion program.}
+Type
+  PCardinal = ^Cardinal;
+  PReal     = ^Real;
+  PDouble   = ^Double;
+
+{ next element }
+{ previous element }
+{ value of the element }
+{ what list this element is in }
+
+type
+   { Pointer types }
+   PDllist= ^TDllist;
+   PDlelem= ^TDlelem;
+
+   TDlelem = record
+        dle_next : PDlelem;
+        dle_prev : PDlElem;
+        dle_val : pointer;
+        dle_list : PDllist;
+     end;
+
+   TDllist = record
+        dll_head : PDlelem;
+        dll_tail : PDlelem;
+     end;
+

+ 267 - 0
packages/postgres/src/postgres.pp

@@ -0,0 +1,267 @@
+unit postgres;
+
+interface
+
+uses dllist;
+
+{$linklib pq}
+{$linklib c}
+
+{ Not always needed. If you have problems linking, try to add this  }
+{ $linklib crypt}
+
+{ $include "libpq/pqcomm.h"}
+
+
+Type
+   Oid = cardinal;
+   MsgType = Cardinal;
+   PLongint = ^Longint;
+   TSockAddr = Array [1..112] of byte; { Testded using C version sizeof() }
+
+Const
+   NAMEDATALEN = 32;
+   OIDNAMELEN = 36;
+
+Type
+   TFILE = Longint;
+   PFIle = ^TFILE;
+
+type
+   TConnStatusType = (CONNECTION_OK,CONNECTION_BAD);
+   PConnStatusType= ^TConnStatusType;
+
+   TExecStatusType = (PGRES_EMPTY_QUERY,PGRES_COMMAND_OK,PGRES_TUPLES_OK,
+     PGRES_COPY_OUT,
+     PGRES_COPY_IN,
+     PGRES_BAD_RESPONSE,
+     PGRES_NONFATAL_ERROR,
+     PGRES_FATAL_ERROR
+     );
+   PExecStatusType= ^TExecStatusType;
+{
+        extern const char  pgresStatus[];
+}
+
+const
+   ERROR_MSG_LENGTH = 4096;
+   COMMAND_LENGTH = 20;
+   REMARK_LENGTH = 80;
+   PORTAL_NAME_LENGTH = 16;
+
+type
+   TPQArgBlock = record
+        len : longint;
+        isint : longint;
+        u : record
+            case longint of
+               0 : ( ptr:Plongint );
+               1 : ( integer:longint );
+          end;
+     end;
+   PPQArgBlock= ^TPQArgBlock;
+
+   TPGresAttDesc = record
+        name : Pchar;
+        adtid : Oid;
+        adtsize : integer;
+     end;
+   PPGresAttDesc= ^TPGresAttDesc;
+   PPPGresAttDesc= ^PPGresAttDesc;
+
+const
+   NULL_LEN = -1;
+
+type
+   TPGresAttValue = record
+        len : longint;
+        value : Pchar;
+     end;
+   PPGresAttValue= ^TPGresAttValue;
+   PPPGresAttValue= ^PPGresAttValue;
+
+   TPGnotify = record
+        relname : array[0..(NAMEDATALEN)-1] of char;
+        be_pid : longint;
+     end;
+   PPGnotify= ^TPGnotify;
+
+   TPGlobjfuncs = record
+        fn_lo_open : Oid;
+        fn_lo_close : Oid;
+        fn_lo_creat : Oid;
+        fn_lo_unlink : Oid;
+        fn_lo_lseek : Oid;
+        fn_lo_tell : Oid;
+        fn_lo_read : Oid;
+        fn_lo_write : Oid;
+     end;
+   PPGlobjfuncs= ^TPGlobjfuncs;
+
+   TPGconn = record
+        pghost : Pchar;
+        pgtty : Pchar;
+        pgport : Pchar;
+        pgoptions : Pchar;
+        dbName : Pchar;
+        status : TConnStatusType;
+        errorMessage : array[0..(ERROR_MSG_LENGTH)-1] of char;
+        Pfin : PFILE;
+        Pfout : PFILE;
+        Pfdebug : PFILE;
+        sock : longint;
+        laddr : TSockAddr;
+        raddr : TSockAddr;
+        salt : array[0..(2)-1] of char;
+        asyncNotifyWaiting : longint;
+        notifyList : PDllist;
+        pguser : Pchar;
+        pgpass : Pchar;
+        lobjfuncs : PPGlobjfuncs;
+     end;
+   PPGconn= ^TPGconn;
+
+const
+   CMDSTATUS_LEN = 40;
+
+type
+   TPGresult = record
+        ntups : longint;
+        numAttributes : longint;
+        attDescs : PPGresAttDesc;
+        tuples : PPPGresAttValue;
+        tupArrSize : longint;
+        resultStatus : TExecStatusType;
+        cmdStatus : array[0..(CMDSTATUS_LEN)-1] of char;
+        binary : longint;
+        conn : PPGconn;
+     end;
+   PPGresult= ^TPGresult;
+
+   pqbool = char;
+
+   TPQprintopt = record
+        header : pqbool;
+        align : pqbool;
+        standard : pqbool;
+        html3 : pqbool;
+        expanded : pqbool;
+        pager : pqbool;
+        fieldSep : Pchar;
+        tableOpt : Pchar;
+        caption : Pchar;
+     end;
+   PPQprintopt= ^TPQprintopt;
+
+
+   TPQconninfoOption = Record
+      keyword   : pchar;
+      environ   : pchar;
+      compiled  : pchar;
+      val       : pchar;
+      Thelabel  : pchar;
+      dispchar  : pchar;
+      dispsize  : longint;
+   end;
+   PPQconninfoOption = ^TPQconninfoOption;
+
+const
+   MAX_MESSAGE_LEN = 8193;
+   BYTELEN = 8;
+   MAX_FIELDS = 512;
+   DefaultHost     : pchar = 'localhost';
+   DefaultTty      : pchar = '';
+   DefaultOption   : pchar = '';
+   DefaultAuthtype : pchar = '';
+   DefaultPassword : pchar = '';
+
+type
+   TTUPLE = pointer;
+   PTUPLE = ^TTUPLE;
+
+
+  function  PQconnectdb(conninfo:Pchar):PPGconn;cdecl; external;
+  function  PQconndefaults:PPQconninfoOption;cdecl; external;
+  function  PQsetdbLogin(pghost,pgport,pgoptions,pgtty,dbName,login,pwd : pchar):PPGConn;cdecl;external;
+  procedure PQfinish(conn:PPGconn);cdecl; external;
+  procedure PQreset(conn:PPGconn);cdecl; external;
+  function  PQdb(conn:PPGconn):Pchar;cdecl; external;
+  function  PQuser(conn:PPGconn):Pchar;cdecl; external;
+  function  PQhost(conn:PPGconn):Pchar;cdecl; external;
+  function  PQoptions(conn:PPGconn):Pchar;cdecl; external;
+  function  PQport(conn:PPGconn):Pchar;cdecl; external;
+  function  PQtty(conn:PPGconn):Pchar;cdecl; external;
+  function  PQstatus(conn:PPGconn):TConnStatusType;cdecl; external;
+  function  PQerrorMessage(conn:PPGconn):Pchar;cdecl; external;
+  procedure PQtrace(conn:PPGconn; debug_port:PFILE);cdecl; external;
+  procedure PQuntrace(conn:PPGconn);cdecl; external;
+  function  PQexec(conn:PPGconn; query:Pchar):PPGresult;cdecl; external;
+  function  PQgetline(conn:PPGconn; str:Pchar; len:longint):longint;cdecl; external;
+  function  PQendcopy(conn:PPGconn):longint;cdecl; external;
+  function PQputline(conn:PPGconn; str:Pchar) : longint;cdecl; external;
+  function  PQresultStatus(res:PPGresult):TExecStatusType;cdecl; external;
+  function  PQntuples(res:PPGresult):longint;cdecl; external;
+  function  PQnfields(res:PPGresult):longint;cdecl; external;
+  function  PQfname(res:PPGresult; field_num:longint):Pchar;cdecl; external;
+  function  PQfnumber(res:PPGresult; field_name:Pchar):longint;cdecl; external;
+  function  PQftype(res:PPGresult; field_num:longint):Oid;cdecl; external;
+  function  PQfsize(res:PPGresult; field_num:longint):integer;cdecl; external;
+  function  PQcmdStatus(res:PPGresult):Pchar;cdecl; external;
+  function  PQgetvalue(res:PPGresult; tup_num:longint; field_num:longint):Pchar;cdecl; external;
+  function  PQgetlength(res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl; external;
+  function  PQgetisnull(res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl; external;
+  procedure PQclear(res:PPGresult);cdecl; external;
+  procedure PQdisplayTuples(res:PPGresult; fp:PFILE; fillAlign:longint; fieldSep:Pchar; printHeader:longint; quiet:longint);cdecl; external;
+  procedure PQprintTuples(res:PPGresult; fout:PFILE; printAttName:longint; terseOutput:longint; width:longint);cdecl; external;
+  procedure PQprint(fout:PFILE; res:PPGresult; ps:PPQprintOpt);cdecl; external;
+  function  PQnotifies(conn:PPGconn):PPGnotify;cdecl; external;
+  function  PQfn(conn:PPGconn; fnid:longint; result_buf:Plongint; result_len:Plongint; result_is_int:longint; args:PPQArgBlock; nargs:longint):PPGresult;cdecl; external;
+  function  fe_getauthsvc(PQerrormsg:Pchar):MsgType;cdecl; external;
+  procedure fe_setauthsvc(name:Pchar; PQerrormsg:Pchar);cdecl; external;
+  function  fe_getauthname(PQerrormsg:Pchar):Pchar;cdecl; external;
+  function  pqGets(s:Pchar; maxlen:longint; stream:PFILE; debug:PFILE):longint;cdecl; external;
+  function  pqGetnchar(s:Pchar; maxlen:longint; stream:PFILE; debug:PFILE):longint;cdecl; external;
+  function  pqPutnchar(s:Pchar; maxlen:longint; stream:PFILE; debug:PFILE):longint;cdecl; external;
+  function  pqPuts(s:Pchar; stream:PFILE; debug:PFILE):longint;cdecl; external;
+  function  pqGetc(stream:PFILE; debug:PFILE):longint;cdecl; external;
+  function  pqGetInt(result:Plongint; bytes:longint; stream:PFILE; debug:PFILE):longint;cdecl; external;
+  function  pqPutInt(n:longint; bytes:longint; stream:PFILE; debug:PFILE):longint;cdecl; external;
+  procedure pqFlush(stream:PFILE; debug:PFILE);cdecl; external;
+  function  PQoidStatus(res : PPGresult) : pchar;cdecl;external;
+  function  PQcmdTuples(res : PPGresult) : pchar;cdecl;external;
+  function  lo_open(conn:PPGconn; lobjId:Oid; mode:longint):longint; cdecl; external;
+  function  lo_close(conn:PPGconn; fd:longint):longint; cdecl; external;
+  function  lo_read(conn:PPGconn; fd:longint; buf:Pchar; len:longint):longint; cdecl; external;
+  function  lo_write(conn:PPGconn; fd:longint; buf:Pchar; len:longint):longint; cdecl; external;
+  function  lo_lseek(conn:PPGconn; fd:longint; offset:longint; whence:longint):longint; cdecl; external;
+  function  lo_creat(conn:PPGconn; mode:longint):Oid;cdecl;external;
+  function  lo_tell(conn:PPGconn; fd:longint):longint; cdecl; external;
+  function  lo_unlink(conn:PPGconn; lobjId:Oid):longint; cdecl; external;
+  function  lo_import(conn:PPGconn; filename:Pchar):Oid;cdecl;external;
+  function  lo_export(conn:PPGconn; lobjId:Oid; filename:Pchar):longint; cdecl; external;
+
+{$ifdef PGSQL6_2_1}
+  Function  PQsetdb(pghost,pgport,pgoptions,pgtty,dbName : pchar):PPGConn; cdecl;external;
+{$else}
+  function PQsetdb(pghost,pgport,pgoptions,pgtty,dbName : pchar):PPGConn;
+{$endif}
+
+implementation
+
+
+
+{ Define helper functions }
+
+{
+  In version 6.2.xxx, PGsetdb is a function in libpq.
+  in version 6.3.xxx, PGsetdb is a macro, pointing to setdblogin !!
+}
+
+{$ifndef PGSQL6_2_1}
+function PQsetdb(pghost,pgport,pgoptions,pgtty,dbName : pchar):PPGConn;
+begin
+ PQsetdb:=PQsetdbLogin(pghost,pgport,pgoptions,pgtty,dbName,nil,nil);
+end;
+{$endif}
+
+end.

+ 322 - 0
packages/postgres/src/postgres3.pp

@@ -0,0 +1,322 @@
+{ This unit contains the definitions for structures and externs for
+  functions used by frontend postgres applications. It is based on
+  Postgresql's libpq-fe.h.
+
+  It is for postgreSQL version 7.4 and higher with support for the v3.0
+  connection-protocol
+}
+unit postgres3;
+
+interface
+
+uses dllist;
+
+{$PACKRECORDS C}
+
+const
+   External_library='pq';
+
+{$i postgres3types.inc}
+
+
+  { ----------------
+   * Exported functions of libpq
+   * ----------------
+    }
+  { === in fe-connect.c ===  }
+  { make a new client connection to the backend  }
+  { Asynchronous (non-blocking)  }
+(* Const before type ignored *)
+
+  function PQconnectStart(conninfo:Pchar):PPGconn;cdecl;external External_library name 'PQconnectStart';
+
+  function PQconnectPoll(conn:PPGconn):PostgresPollingStatusType;cdecl;external External_library name 'PQconnectPoll';
+
+  { Synchronous (blocking)  }
+(* Const before type ignored *)
+  function PQconnectdb(conninfo:Pchar):PPGconn;cdecl;external External_library name 'PQconnectdb';
+
+  function PQsetdbLogin(pghost:Pchar; pgport:Pchar; pgoptions:Pchar; pgtty:Pchar; dbName:Pchar;
+             login:Pchar; pwd:Pchar):PPGconn;cdecl;external External_library name 'PQsetdbLogin';
+
+  { was #define dname(params) para_def_expr }
+  { argument types are unknown }
+  { return type might be wrong }
+  function PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME : pchar) : ppgconn;
+
+  { close the current connection and free the PGconn data structure  }
+  procedure PQfinish(conn:PPGconn);cdecl;external External_library name 'PQfinish';
+
+  { get info about connection options known to PQconnectdb  }
+  function PQconndefaults:PPQconninfoOption;cdecl;external External_library name 'PQconndefaults';
+
+  { free the data structure returned by PQconndefaults()  }
+  procedure PQconninfoFree(connOptions:PPQconninfoOption);cdecl;external External_library name 'PQconninfoFree';
+
+  {
+   * close the current connection and restablish a new one with the same
+   * parameters
+    }
+  { Asynchronous (non-blocking)  }
+  function PQresetStart(conn:PPGconn):longint;cdecl;external External_library name 'PQresetStart';
+
+  function PQresetPoll(conn:PPGconn):PostgresPollingStatusType;cdecl;external External_library name 'PQresetPoll';
+
+  { Synchronous (blocking)  }
+  procedure PQreset(conn:PPGconn);cdecl;external External_library name 'PQreset';
+
+  { issue a cancel request  }
+  function PQrequestCancel(conn:PPGconn):longint;cdecl;external External_library name 'PQrequestCancel';
+
+  { Accessor functions for PGconn objects  }
+  function PQdb(conn:PPGconn):Pchar;cdecl;external External_library name 'PQdb';
+
+  function PQuser(conn:PPGconn):Pchar;cdecl;external External_library name 'PQuser';
+
+  function PQpass(conn:PPGconn):Pchar;cdecl;external External_library name 'PQpass';
+
+  function PQhost(conn:PPGconn):Pchar;cdecl;external External_library name 'PQhost';
+
+  function PQport(conn:PPGconn):Pchar;cdecl;external External_library name 'PQport';
+
+  function PQtty(conn:PPGconn):Pchar;cdecl;external External_library name 'PQtty';
+
+  function PQoptions(conn:PPGconn):Pchar;cdecl;external External_library name 'PQoptions';
+
+  function PQstatus(conn:PPGconn):TConnStatusType;cdecl;external External_library name 'PQstatus';
+
+  function PQtransactionStatus(conn:PPGconn):PGTransactionStatusType;cdecl;external External_library name 'PQtransactionStatus';
+
+  function PQparameterStatus(conn:PPGconn; paramName:Pchar):Pchar;cdecl;external External_library name 'PQparameterStatus';
+
+  function PQprotocolVersion(conn:PPGconn):longint;cdecl;external External_library name 'PQprotocolVersion';
+
+  function PQerrorMessage(conn:PPGconn):Pchar;cdecl;external External_library name 'PQerrorMessage';
+
+  function PQsocket(conn:PPGconn):longint;cdecl;external External_library name 'PQsocket';
+
+  function PQbackendPID(conn:PPGconn):longint;cdecl;external External_library name 'PQbackendPID';
+
+  function PQclientEncoding(conn:PPGconn):longint;cdecl;external External_library name 'PQclientEncoding';
+
+  function PQsetClientEncoding(conn:PPGconn; encoding:Pchar):longint;cdecl;external External_library name 'PQsetClientEncoding';
+
+{$ifdef USE_SSL}
+  { Get the SSL structure associated with a connection  }
+  function PQgetssl(conn:PPGconn):PSSL;cdecl;external External_library name 'PQgetssl';
+{$endif}
+
+  { Set verbosity for PQerrorMessage and PQresultErrorMessage  }
+  function PQsetErrorVerbosity(conn:PPGconn; verbosity:PGVerbosity):PGVerbosity;cdecl;external External_library name 'PQsetErrorVerbosity';
+  { Enable/disable tracing  }
+  procedure PQtrace(conn:PPGconn; debug_port:PFILE);cdecl;external External_library name 'PQtrace';
+  procedure PQuntrace(conn:PPGconn);cdecl;external External_library name 'PQuntrace';
+  { Override default notice handling routines  }
+  function PQsetNoticeReceiver(conn:PPGconn; proc:PQnoticeReceiver; arg:pointer):PQnoticeReceiver;cdecl;external External_library name 'PQsetNoticeReceiver';
+  function PQsetNoticeProcessor(conn:PPGconn; proc:PQnoticeProcessor; arg:pointer):PQnoticeProcessor;cdecl;external External_library name 'PQsetNoticeProcessor';
+
+  { === in fe-exec.c ===  }
+  { Simple synchronous query  }
+  function PQexec(conn:PPGconn; query:Pchar):PPGresult;cdecl;external External_library name 'PQexec';
+  function PQexecParams(conn:PPGconn; command:Pchar; nParams:longint; paramTypes:POid; paramValues:PPchar;
+             paramLengths:Plongint; paramFormats:Plongint; resultFormat:longint):PPGresult;cdecl;external External_library name 'PQexecParams';
+
+  function PQexecPrepared(conn:PPGconn; stmtName:Pchar; nParams:longint; paramValues:PPchar; paramLengths:Plongint;
+             paramFormats:Plongint; resultFormat:longint):PPGresult;cdecl;external External_library name 'PQexecPrepared';
+
+  { Interface for multiple-result or asynchronous queries  }
+  function PQsendQuery(conn:PPGconn; query:Pchar):longint;cdecl;external External_library name 'PQsendQuery';
+
+  function PQsendQueryParams(conn:PPGconn; command:Pchar; nParams:longint; paramTypes:POid; paramValues:PPchar;
+             paramLengths:Plongint; paramFormats:Plongint; resultFormat:longint):longint;cdecl;external External_library name 'PQsendQueryParams';
+
+  function PQsendQueryPrepared(conn:PPGconn; stmtName:Pchar; nParams:longint; paramValues:PPchar; paramLengths:Plongint;
+             paramFormats:Plongint; resultFormat:longint):longint;cdecl;external External_library name 'PQsendQueryPrepared';
+
+  function PQgetResult(conn:PPGconn):PPGresult;cdecl;external External_library name 'PQgetResult';
+
+  { Routines for managing an asynchronous query  }
+  function PQisBusy(conn:PPGconn):longint;cdecl;external External_library name 'PQisBusy';
+
+  function PQconsumeInput(conn:PPGconn):longint;cdecl;external External_library name 'PQconsumeInput';
+
+  { LISTEN/NOTIFY support  }
+  function PQnotifies(conn:PPGconn):PPGnotify;cdecl;external External_library name 'PQnotifies';
+
+  { Routines for copy in/out  }
+  function PQputCopyData(conn:PPGconn; buffer:Pchar; nbytes:longint):longint;cdecl;external External_library name 'PQputCopyData';
+
+  function PQputCopyEnd(conn:PPGconn; errormsg:Pchar):longint;cdecl;external External_library name 'PQputCopyEnd';
+
+  function PQgetCopyData(conn:PPGconn; buffer:PPchar; async:longint):longint;cdecl;external External_library name 'PQgetCopyData';
+
+  { Deprecated routines for copy in/out  }
+  function PQgetline(conn:PPGconn; _string:Pchar; length:longint):longint;cdecl;external External_library name 'PQgetline';
+
+  function PQputline(conn:PPGconn; _string:Pchar):longint;cdecl;external External_library name 'PQputline';
+
+  function PQgetlineAsync(conn:PPGconn; buffer:Pchar; bufsize:longint):longint;cdecl;external External_library name 'PQgetlineAsync';
+
+  function PQputnbytes(conn:PPGconn; buffer:Pchar; nbytes:longint):longint;cdecl;external External_library name 'PQputnbytes';
+
+  function PQendcopy(conn:PPGconn):longint;cdecl;external External_library name 'PQendcopy';
+
+  { Set blocking/nonblocking connection to the backend  }
+  function PQsetnonblocking(conn:PPGconn; arg:longint):longint;cdecl;external External_library name 'PQsetnonblocking';
+
+  function PQisnonblocking(conn:PPGconn):longint;cdecl;external External_library name 'PQisnonblocking';
+
+  { Force the write buffer to be written (or at least try)  }
+  function PQflush(conn:PPGconn):longint;cdecl;external External_library name 'PQflush';
+
+  {
+   * "Fast path" interface --- not really recommended for application
+   * use
+    }
+  function PQfn(conn:PPGconn; fnid:longint; result_buf:Plongint; result_len:Plongint; result_is_int:longint;
+             args:PPQArgBlock; nargs:longint):PPGresult;cdecl;external External_library name 'PQfn';
+
+  { Accessor functions for PGresult objects  }
+  function PQresultStatus(res:PPGresult):TExecStatusType;cdecl;external External_library name 'PQresultStatus';
+
+  function PQresStatus(status:TExecStatusType):Pchar;cdecl;external External_library name 'PQresStatus';
+  function PQresultErrorMessage(res:PPGresult):Pchar;cdecl;external External_library name 'PQresultErrorMessage';
+
+  function PQresultErrorField(res:PPGresult; fieldcode:longint):Pchar;cdecl;external External_library name 'PQresultErrorField';
+
+  function PQntuples(res:PPGresult):longint;cdecl;external External_library name 'PQntuples';
+
+  function PQnfields(res:PPGresult):longint;cdecl;external External_library name 'PQnfields';
+
+  function PQbinaryTuples(res:PPGresult):longint;cdecl;external External_library name 'PQbinaryTuples';
+
+  function PQfname(res:PPGresult; field_num:longint):Pchar;cdecl;external External_library name 'PQfname';
+
+  function PQfnumber(res:PPGresult; field_name:Pchar):longint;cdecl;external External_library name 'PQfnumber';
+
+  function PQftable(res:PPGresult; field_num:longint):Oid;cdecl;external External_library name 'PQftable';
+
+  function PQftablecol(res:PPGresult; field_num:longint):longint;cdecl;external External_library name 'PQftablecol';
+
+  function PQfformat(res:PPGresult; field_num:longint):longint;cdecl;external External_library name 'PQfformat';
+
+  function PQftype(res:PPGresult; field_num:longint):Oid;cdecl;external External_library name 'PQftype';
+
+  function PQfsize(res:PPGresult; field_num:longint):longint;cdecl;external External_library name 'PQfsize';
+
+  function PQfmod(res:PPGresult; field_num:longint):longint;cdecl;external External_library name 'PQfmod';
+
+  function PQcmdStatus(res:PPGresult):Pchar;cdecl;external External_library name 'PQcmdStatus';
+
+  function PQoidStatus(res:PPGresult):Pchar;cdecl;external External_library name 'PQoidStatus';
+
+  { old and ugly  }
+  function PQoidValue(res:PPGresult):Oid;cdecl;external External_library name 'PQoidValue';
+
+  { new and improved  }
+  function PQcmdTuples(res:PPGresult):Pchar;cdecl;external External_library name 'PQcmdTuples';
+  function PQgetvalue(res:PPGresult; tup_num:longint; field_num:longint):Pchar;cdecl;external External_library name 'PQgetvalue';
+
+  function PQgetlength(res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl;external External_library name 'PQgetlength';
+
+  function PQgetisnull(res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl;external External_library name 'PQgetisnull';
+
+  { Delete a PGresult  }
+  procedure PQclear(res:PPGresult);cdecl;external External_library name 'PQclear';
+
+  { For freeing other alloc'd results, such as PGnotify structs  }
+  procedure PQfreemem(ptr:pointer);cdecl;external External_library name 'PQfreemem';
+
+  { Exists for backward compatibility.  bjm 2003-03-24  }
+  { was #define dname(params) para_def_expr }
+  { argument types are unknown }
+  { return type might be wrong }
+//  function PQfreeNotify(ptr : longint) : longint;
+
+  {
+   * Make an empty PGresult with given status (some apps find this
+   * useful). If conn is not NULL and status indicates an error, the
+   * conn's errorMessage is copied.
+    }
+  function PQmakeEmptyPGresult(conn:PPGconn; status:TExecStatusType):PPGresult;cdecl;external External_library name 'PQmakeEmptyPGresult';
+
+  { Quoting strings before inclusion in queries.  }
+  function PQescapeString(till:Pchar; from:Pchar; length:size_t):size_t;cdecl;external External_library name 'PQescapeString';
+  function PQescapeBytea(bintext:Pbyte; binlen:size_t; bytealen:Psize_t):Pbyte;cdecl;external External_library name 'PQescapeBytea';
+  function PQunescapeBytea(strtext:Pbyte; retbuflen:Psize_t):Pbyte;cdecl;external External_library name 'PQunescapeBytea';
+
+  { === in fe-print.c ===  }
+  { output stream  }
+  procedure PQprint(fout:PFILE; res:PPGresult; ps:PPQprintOpt);cdecl;external External_library name 'PQprint';
+
+  { option structure  }
+  {
+   * really old printing routines
+    }
+  { where to send the output  }
+  { pad the fields with spaces  }
+  { field separator  }
+  { display headers?  }
+  procedure PQdisplayTuples(res:PPGresult; fp:PFILE; fillAlign:longint; fieldSep:Pchar; printHeader:longint;
+              quiet:longint);cdecl;external External_library name 'PQdisplayTuples';
+
+(* Const before type ignored *)
+  { output stream  }
+  { print attribute names  }
+  { delimiter bars  }
+  procedure PQprintTuples(res:PPGresult; fout:PFILE; printAttName:longint; terseOutput:longint; width:longint);cdecl;external External_library name 'PQprintTuples';
+
+  { width of column, if 0, use variable
+                                                                 * width  }
+  { === in fe-lobj.c ===  }
+  { Large-object access routines  }
+  function lo_open(conn:PPGconn; lobjId:Oid; mode:longint):longint;cdecl;external External_library name 'lo_open';
+
+  function lo_close(conn:PPGconn; fd:longint):longint;cdecl;external External_library name 'lo_close';
+
+  function lo_read(conn:PPGconn; fd:longint; buf:Pchar; len:size_t):longint;cdecl;external External_library name 'lo_read';
+
+  function lo_write(conn:PPGconn; fd:longint; buf:Pchar; len:size_t):longint;cdecl;external External_library name 'lo_write';
+
+  function lo_lseek(conn:PPGconn; fd:longint; offset:longint; whence:longint):longint;cdecl;external External_library name 'lo_lseek';
+
+  function lo_creat(conn:PPGconn; mode:longint):Oid;cdecl;external External_library name 'lo_creat';
+
+  function lo_tell(conn:PPGconn; fd:longint):longint;cdecl;external External_library name 'lo_tell';
+
+  function lo_unlink(conn:PPGconn; lobjId:Oid):longint;cdecl;external External_library name 'lo_unlink';
+
+  function lo_import(conn:PPGconn; filename:Pchar):Oid;cdecl;external External_library name 'lo_import';
+
+  function lo_export(conn:PPGconn; lobjId:Oid; filename:Pchar):longint;cdecl;external External_library name 'lo_export';
+
+  { === in fe-misc.c ===  }
+  { Determine length of multibyte encoded char at *s  }
+  function PQmblen(s:Pbyte; encoding:longint):longint;cdecl;external External_library name 'PQmblen';
+
+  { Get encoding id from environment variable PGCLIENTENCODING  }
+  function PQenv2encoding:longint;cdecl;external External_library name 'PQenv2encoding';
+
+implementation
+
+  { was #define dname(params) para_def_expr }
+  { argument types are unknown }
+  { return type might be wrong }
+
+// This function is also defined in postgres3dyn!
+
+  function PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME : pchar) : ppgconn;
+    begin
+       PQsetdb:=PQsetdbLogin(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME,'','');
+    end;
+
+  { was #define dname(params) para_def_expr }
+  { argument types are unknown }
+  { return type might be wrong }
+{  function PQfreeNotify(ptr : longint) : longint;
+    begin
+       PQfreeNotify:=PQfreemem(ptr);
+    end;}
+
+
+end.

+ 358 - 0
packages/postgres/src/postgres3dyn.pp

@@ -0,0 +1,358 @@
+{
+  Contains the Postgres protocol 3 functions calls
+
+  Call InitialisePostgres3 before using any of the calls, and call ReleasePostgres3
+  when finished.
+}
+
+unit postgres3dyn;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  dynlibs, SysUtils, dllistdyn;
+
+{$IFDEF Unix}
+  const
+    pqlib = 'libpq.so';
+{$ENDIF}
+{$IFDEF Win32}
+  const
+    pqlib = 'libpq.dll';
+{$ENDIF}
+
+
+{$PACKRECORDS C}
+
+{$i postgres3types.inc}
+
+var
+{ ----------------
+* Exported functions of libpq
+* ----------------
+}
+{ ===   in fe-connect.c ===  }
+{ make a new client connection to the backend  }
+{ Asynchronous (non-blocking)  }
+(* Const before type ignored *)
+  PQconnectStart : function (conninfo:Pchar):PPGconn;cdecl;
+  PQconnectPoll : function (conn:PPGconn):PostgresPollingStatusType;cdecl;
+{ Synchronous (blocking)  }
+(* Const before type ignored *)
+  PQconnectdb : function (conninfo:Pchar):PPGconn;cdecl;
+  PQsetdbLogin : function (pghost:Pchar; pgport:Pchar; pgoptions:Pchar; pgtty:Pchar; dbName:Pchar;login:Pchar; pwd:Pchar):PPGconn;cdecl;
+{ was #define dname(params) para_def_expr }
+{ argument types are unknown }
+{ return type might be wrong }
+{ close the current connection and free the PGconn data structure  }
+  PQfinish : procedure (conn:PPGconn);cdecl;
+{ get info about connection options known to PQconnectdb  }
+  PQconndefaults : function : PPQconninfoOption;cdecl;
+{ free the data structure returned by PQconndefaults()  }
+  PQconninfoFree : procedure (connOptions:PPQconninfoOption);cdecl;
+{
+* close the current connection and restablish a new one with the same
+* parameters
+}
+{ Asynchronous (non-blocking)  }
+  PQresetStart : function (conn:PPGconn):longint;cdecl;
+  PQresetPoll : function (conn:PPGconn):PostgresPollingStatusType;cdecl;
+{ Synchronous (blocking)  }
+  PQreset : procedure (conn:PPGconn);cdecl;
+{ issue a cancel request  }
+  PQrequestCancel : function (conn:PPGconn):longint;cdecl;
+{ Accessor functions for PGconn objects  }
+  PQdb : function (conn:PPGconn):Pchar;cdecl;
+  PQuser : function (conn:PPGconn):Pchar;cdecl;
+  PQpass : function (conn:PPGconn):Pchar;cdecl;
+  PQhost : function (conn:PPGconn):Pchar;cdecl;
+  PQport : function (conn:PPGconn):Pchar;cdecl;
+  PQtty : function (conn:PPGconn):Pchar;cdecl;
+  PQoptions : function (conn:PPGconn):Pchar;cdecl;
+  PQstatus : function (conn:PPGconn):TConnStatusType;cdecl;
+  PQtransactionStatus : function (conn:PPGconn):PGTransactionStatusType;cdecl;
+  PQparameterStatus : function (conn:PPGconn; paramName:Pchar):Pchar;cdecl;
+  PQprotocolVersion : function (conn:PPGconn):longint;cdecl;
+  PQerrorMessage : function (conn:PPGconn):Pchar;cdecl;
+  PQsocket : function (conn:PPGconn):longint;cdecl;
+  PQbackendPID : function (conn:PPGconn):longint;cdecl;
+  PQclientEncoding : function (conn:PPGconn):longint;cdecl;
+  PQsetClientEncoding : function (conn:PPGconn; encoding:Pchar):longint;cdecl;
+{$ifdef USE_SSL}
+{ Get the SSL structure associated with a connection  }
+  PQgetssl : function (conn:PPGconn):PSSL;cdecl;
+{$endif}
+{ Set verbosity for PQerrorMessage and PQresultErrorMessage  }
+  PQsetErrorVerbosity : function (conn:PPGconn; verbosity:PGVerbosity):PGVerbosity;cdecl;
+{ Enable/disable tracing  }
+  PQtrace : procedure (conn:PPGconn; debug_port:PFILE);cdecl;
+  PQuntrace : procedure (conn:PPGconn);cdecl;
+{ Override default notice handling routines  }
+  PQsetNoticeReceiver : function (conn:PPGconn; proc:PQnoticeReceiver; arg:pointer):PQnoticeReceiver;cdecl;
+  PQsetNoticeProcessor : function (conn:PPGconn; proc:PQnoticeProcessor; arg:pointer):PQnoticeProcessor;cdecl;
+{ === in fe-exec.c ===  }
+{ Simple synchronous query  }
+  PQexec : function (conn:PPGconn; query:Pchar):PPGresult;cdecl;
+  PQexecParams : function (conn:PPGconn; command:Pchar; nParams:longint; paramTypes:POid; paramValues:PPchar;paramLengths:Plongint; paramFormats:Plongint; resultFormat:longint):PPGresult;cdecl;
+  PQexecPrepared : function (conn:PPGconn; stmtName:Pchar; nParams:longint; paramValues:PPchar; paramLengths:Plongint;paramFormats:Plongint; resultFormat:longint):PPGresult;cdecl;
+  PQPrepare : function (conn:PPGconn; stmtName:Pchar; query:Pchar; nParams:longint; paramTypes:POid):PPGresult;cdecl;
+{ Interface for multiple-result or asynchronous queries  }
+  PQsendQuery : function (conn:PPGconn; query:Pchar):longint;cdecl;
+  PQsendQueryParams : function (conn:PPGconn; command:Pchar; nParams:longint; paramTypes:POid; paramValues:PPchar;paramLengths:Plongint; paramFormats:Plongint; resultFormat:longint):longint;cdecl;
+  PQsendQueryPrepared : function (conn:PPGconn; stmtName:Pchar; nParams:longint; paramValues:PPchar; paramLengths:Plongint;paramFormats:Plongint; resultFormat:longint):longint;cdecl;
+  PQgetResult : function (conn:PPGconn):PPGresult;cdecl;
+{ Routines for managing an asynchronous query  }
+  PQisBusy : function (conn:PPGconn):longint;cdecl;
+  PQconsumeInput : function (conn:PPGconn):longint;cdecl;
+{ LISTEN/NOTIFY support  }
+  PQnotifies : function (conn:PPGconn):PPGnotify;cdecl;
+{ Routines for copy in/out  }
+  PQputCopyData : function (conn:PPGconn; buffer:Pchar; nbytes:longint):longint;cdecl;
+  PQputCopyEnd : function (conn:PPGconn; errormsg:Pchar):longint;cdecl;
+  PQgetCopyData : function (conn:PPGconn; buffer:PPchar; async:longint):longint;cdecl;
+{ Deprecated routines for copy in/out  }
+  PQgetline : function (conn:PPGconn; _string:Pchar; length:longint):longint;cdecl;
+  PQputline : function (conn:PPGconn; _string:Pchar):longint;cdecl;
+  PQgetlineAsync : function (conn:PPGconn; buffer:Pchar; bufsize:longint):longint;cdecl;
+  PQputnbytes : function (conn:PPGconn; buffer:Pchar; nbytes:longint):longint;cdecl;
+  PQendcopy : function (conn:PPGconn):longint;cdecl;
+{ Set blocking/nonblocking connection to the backend  }
+  PQsetnonblocking : function (conn:PPGconn; arg:longint):longint;cdecl;
+  PQisnonblocking : function (conn:PPGconn):longint;cdecl;
+{ Force the write buffer to be written (or at least try)  }
+  PQflush : function (conn:PPGconn):longint;cdecl;
+{
+* "Fast path" interface --- not really recommended for application
+* use
+}
+  PQfn : function (conn:PPGconn; fnid:longint; result_buf:Plongint; result_len:Plongint; result_is_int:longint;args:PPQArgBlock; nargs:longint):PPGresult;cdecl;
+{ Accessor functions for PGresult objects  }
+  PQresultStatus : function (res:PPGresult):TExecStatusType;cdecl;
+  PQresStatus : function (status:TExecStatusType):Pchar;cdecl;
+  PQresultErrorMessage : function (res:PPGresult):Pchar;cdecl;
+  PQresultErrorField : function (res:PPGresult; fieldcode:longint):Pchar;cdecl;
+  PQntuples : function (res:PPGresult):longint;cdecl;
+  PQnfields : function (res:PPGresult):longint;cdecl;
+  PQbinaryTuples : function (res:PPGresult):longint;cdecl;
+  PQfname : function (res:PPGresult; field_num:longint):Pchar;cdecl;
+  PQfnumber : function (res:PPGresult; field_name:Pchar):longint;cdecl;
+  PQftable : function (res:PPGresult; field_num:longint):Oid;cdecl;
+  PQftablecol : function (res:PPGresult; field_num:longint):longint;cdecl;
+  PQfformat : function (res:PPGresult; field_num:longint):longint;cdecl;
+  PQftype : function (res:PPGresult; field_num:longint):Oid;cdecl;
+  PQfsize : function (res:PPGresult; field_num:longint):longint;cdecl;
+  PQfmod : function (res:PPGresult; field_num:longint):longint;cdecl;
+  PQcmdStatus : function (res:PPGresult):Pchar;cdecl;
+  PQoidStatus : function (res:PPGresult):Pchar;cdecl;
+{ old and ugly  }
+  PQoidValue : function (res:PPGresult):Oid;cdecl;
+{ new and improved  }
+  PQcmdTuples : function (res:PPGresult):Pchar;cdecl;
+  PQgetvalue : function (res:PPGresult; tup_num:longint; field_num:longint):Pchar;cdecl;
+  PQgetlength : function (res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl;
+  PQgetisnull : function (res:PPGresult; tup_num:longint; field_num:longint):longint;cdecl;
+{ Delete a PGresult  }
+  PQclear : procedure (res:PPGresult);cdecl;
+{ For freeing other alloc'd results, such as PGnotify structs  }
+  PQfreemem : procedure (ptr:pointer);cdecl;
+{ Exists for backward compatibility.  bjm 2003-03-24  }
+{ was #define dname(params) para_def_expr }
+{ argument types are unknown }
+{ return type might be wrong }
+//  function PQfreeNotify(ptr : longint) : longint;
+{
+* Make an empty PGresult with given status (some apps find this
+* useful). If conn is not NULL and status indicates an error, the
+* conn's errorMessage is copied.
+}
+  PQmakeEmptyPGresult : function (conn:PPGconn; status:TExecStatusType):PPGresult;cdecl;
+{ Quoting strings before inclusion in queries.  }
+  PQescapeString : function (till:Pchar; from:Pchar; length:size_t):size_t;cdecl;
+  PQescapeBytea : function (bintext:Pbyte; binlen:size_t; bytealen:Psize_t):Pbyte;cdecl;
+  PQunescapeBytea : function (strtext:Pbyte; retbuflen:Psize_t):Pbyte;cdecl;
+{ === in fe-print.c ===  }
+{ output stream  }
+  PQprint : procedure (fout:PFILE; res:PPGresult; ps:PPQprintOpt);cdecl;
+{ option structure  }
+{
+* really old printing routines
+}
+{ where to send the output  }
+{ pad the fields with spaces  }
+{ field separator  }
+{ display headers?  }
+  PQdisplayTuples : procedure (res:PPGresult; fp:PFILE; fillAlign:longint; fieldSep:Pchar; printHeader:longint;quiet:longint);cdecl;
+(* Const before type ignored *)
+{ output stream  }
+{ print attribute names  }
+{ delimiter bars  }
+  PQprintTuples : procedure (res:PPGresult; fout:PFILE; printAttName:longint; terseOutput:longint; width:longint);cdecl;
+{ width of column, if 0, use variable
+* width  }
+{ === in fe-lobj.c ===  }
+{ Large-object access routines  }
+  lo_open : function (conn:PPGconn; lobjId:Oid; mode:longint):longint;cdecl;
+  lo_close : function (conn:PPGconn; fd:longint):longint;cdecl;
+  lo_read : function (conn:PPGconn; fd:longint; buf:Pchar; len:size_t):longint;cdecl;
+  lo_write : function (conn:PPGconn; fd:longint; buf:Pchar; len:size_t):longint;cdecl;
+  lo_lseek : function (conn:PPGconn; fd:longint; offset:longint; whence:longint):longint;cdecl;
+  lo_creat : function (conn:PPGconn; mode:longint):Oid;cdecl;
+  lo_tell : function (conn:PPGconn; fd:longint):longint;cdecl;
+  lo_unlink : function (conn:PPGconn; lobjId:Oid):longint;cdecl;
+  lo_import : function (conn:PPGconn; filename:Pchar):Oid;cdecl;
+  lo_export : function (conn:PPGconn; lobjId:Oid; filename:Pchar):longint;cdecl;
+{ === in fe-misc.c ===  }
+{ Determine length of multibyte encoded char at *s  }
+  PQmblen : function (s:Pbyte; encoding:longint):longint;cdecl;
+{ Get encoding id from environment variable PGCLIENTENCODING  }
+  PQenv2encoding: function :longint;cdecl;
+
+Procedure InitialisePostgres3;
+Procedure ReleasePostgres3;
+
+var Postgres3LibraryHandle : TLibHandle;
+
+implementation
+
+var RefCount : integer;
+
+Procedure InitialisePostgres3;
+
+begin
+  inc(RefCount);
+  if RefCount = 1 then
+    begin
+    Postgres3LibraryHandle := loadlibrary(pqlib);
+    if Postgres3LibraryHandle = nilhandle then
+      begin
+      RefCount := 0;
+      Raise EInOutError.Create('Can not load PosgreSQL client. Is it installed? ('+pqlib+')');
+      end;
+
+    pointer(PQconnectStart) := GetProcedureAddress(Postgres3LibraryHandle,'PQconnectStart');
+    pointer(PQconnectPoll) := GetProcedureAddress(Postgres3LibraryHandle,'PQconnectPoll');
+    pointer(PQconnectdb) := GetProcedureAddress(Postgres3LibraryHandle,'PQconnectdb');
+    pointer(PQsetdbLogin) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetdbLogin');
+    pointer(PQfinish) := GetProcedureAddress(Postgres3LibraryHandle,'PQfinish');
+    pointer(PQconndefaults) := GetProcedureAddress(Postgres3LibraryHandle,'PQconndefaults');
+    pointer(PQconninfoFree) := GetProcedureAddress(Postgres3LibraryHandle,'PQconninfoFree');
+    pointer(PQresetStart) := GetProcedureAddress(Postgres3LibraryHandle,'PQresetStart');
+    pointer(PQresetPoll) := GetProcedureAddress(Postgres3LibraryHandle,'PQresetPoll');
+    pointer(PQreset) := GetProcedureAddress(Postgres3LibraryHandle,'PQreset');
+    pointer(PQrequestCancel) := GetProcedureAddress(Postgres3LibraryHandle,'PQrequestCancel');
+    pointer(PQdb) := GetProcedureAddress(Postgres3LibraryHandle,'PQdb');
+    pointer(PQuser) := GetProcedureAddress(Postgres3LibraryHandle,'PQuser');
+    pointer(PQpass) := GetProcedureAddress(Postgres3LibraryHandle,'PQpass');
+    pointer(PQhost) := GetProcedureAddress(Postgres3LibraryHandle,'PQhost');
+    pointer(PQport) := GetProcedureAddress(Postgres3LibraryHandle,'PQport');
+    pointer(PQtty) := GetProcedureAddress(Postgres3LibraryHandle,'PQtty');
+    pointer(PQoptions) := GetProcedureAddress(Postgres3LibraryHandle,'PQoptions');
+    pointer(PQstatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQstatus');
+    pointer(PQtransactionStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQtransactionStatus');
+    pointer(PQparameterStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQparameterStatus');
+    pointer(PQprotocolVersion) := GetProcedureAddress(Postgres3LibraryHandle,'PQprotocolVersion');
+    pointer(PQerrorMessage) := GetProcedureAddress(Postgres3LibraryHandle,'PQerrorMessage');
+    pointer(PQsocket) := GetProcedureAddress(Postgres3LibraryHandle,'PQsocket');
+    pointer(PQbackendPID) := GetProcedureAddress(Postgres3LibraryHandle,'PQbackendPID');
+    pointer(PQclientEncoding) := GetProcedureAddress(Postgres3LibraryHandle,'PQclientEncoding');
+    pointer(PQsetClientEncoding) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetClientEncoding');
+{$ifdef USE_SSL}
+    pointer(PQgetssl) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetssl');
+{$endif}
+    pointer(PQsetErrorVerbosity) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetErrorVerbosity');
+    pointer(PQtrace) := GetProcedureAddress(Postgres3LibraryHandle,'PQtrace');
+    pointer(PQuntrace) := GetProcedureAddress(Postgres3LibraryHandle,'PQuntrace');
+    pointer(PQsetNoticeReceiver) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetNoticeReceiver');
+    pointer(PQsetNoticeProcessor) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetNoticeProcessor');
+    pointer(PQexec) := GetProcedureAddress(Postgres3LibraryHandle,'PQexec');
+    pointer(PQexecParams) := GetProcedureAddress(Postgres3LibraryHandle,'PQexecParams');
+    pointer(PQexecPrepared) := GetProcedureAddress(Postgres3LibraryHandle,'PQexecPrepared');
+    pointer(PQPrepare) := GetProcedureAddress(Postgres3LibraryHandle,'PQPrepare');
+    pointer(PQsendQuery) := GetProcedureAddress(Postgres3LibraryHandle,'PQsendQuery');
+    pointer(PQsendQueryParams) := GetProcedureAddress(Postgres3LibraryHandle,'PQsendQueryParams');
+    pointer(PQsendQueryPrepared) := GetProcedureAddress(Postgres3LibraryHandle,'PQsendQueryPrepared');
+    pointer(PQgetResult) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetResult');
+    pointer(PQisBusy) := GetProcedureAddress(Postgres3LibraryHandle,'PQisBusy');
+    pointer(PQconsumeInput) := GetProcedureAddress(Postgres3LibraryHandle,'PQconsumeInput');
+    pointer(PQnotifies) := GetProcedureAddress(Postgres3LibraryHandle,'PQnotifies');
+    pointer(PQputCopyData) := GetProcedureAddress(Postgres3LibraryHandle,'PQputCopyData');
+    pointer(PQputCopyEnd) := GetProcedureAddress(Postgres3LibraryHandle,'PQputCopyEnd');
+    pointer(PQgetCopyData) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetCopyData');
+    pointer(PQgetline) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetline');
+    pointer(PQputline) := GetProcedureAddress(Postgres3LibraryHandle,'PQputline');
+    pointer(PQgetlineAsync) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetlineAsync');
+    pointer(PQputnbytes) := GetProcedureAddress(Postgres3LibraryHandle,'PQputnbytes');
+    pointer(PQendcopy) := GetProcedureAddress(Postgres3LibraryHandle,'PQendcopy');
+    pointer(PQsetnonblocking) := GetProcedureAddress(Postgres3LibraryHandle,'PQsetnonblocking');
+    pointer(PQisnonblocking) := GetProcedureAddress(Postgres3LibraryHandle,'PQisnonblocking');
+    pointer(PQflush) := GetProcedureAddress(Postgres3LibraryHandle,'PQflush');
+    pointer(PQfn) := GetProcedureAddress(Postgres3LibraryHandle,'PQfn');
+    pointer(PQresultStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQresultStatus');
+    pointer(PQresStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQresStatus');
+    pointer(PQresultErrorMessage) := GetProcedureAddress(Postgres3LibraryHandle,'PQresultErrorMessage');
+    pointer(PQresultErrorField) := GetProcedureAddress(Postgres3LibraryHandle,'PQresultErrorField');
+    pointer(PQntuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQntuples');
+    pointer(PQnfields) := GetProcedureAddress(Postgres3LibraryHandle,'PQnfields');
+    pointer(PQbinaryTuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQbinaryTuples');
+    pointer(PQfname) := GetProcedureAddress(Postgres3LibraryHandle,'PQfname');
+    pointer(PQfnumber) := GetProcedureAddress(Postgres3LibraryHandle,'PQfnumber');
+    pointer(PQftable) := GetProcedureAddress(Postgres3LibraryHandle,'PQftable');
+    pointer(PQftablecol) := GetProcedureAddress(Postgres3LibraryHandle,'PQftablecol');
+    pointer(PQfformat) := GetProcedureAddress(Postgres3LibraryHandle,'PQfformat');
+    pointer(PQftype) := GetProcedureAddress(Postgres3LibraryHandle,'PQftype');
+    pointer(PQfsize) := GetProcedureAddress(Postgres3LibraryHandle,'PQfsize');
+    pointer(PQfmod) := GetProcedureAddress(Postgres3LibraryHandle,'PQfmod');
+    pointer(PQcmdStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQcmdStatus');
+    pointer(PQoidStatus) := GetProcedureAddress(Postgres3LibraryHandle,'PQoidStatus');
+    pointer(PQoidValue) := GetProcedureAddress(Postgres3LibraryHandle,'PQoidValue');
+    pointer(PQcmdTuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQcmdTuples');
+    pointer(PQgetvalue) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetvalue');
+    pointer(PQgetlength) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetlength');
+    pointer(PQgetisnull) := GetProcedureAddress(Postgres3LibraryHandle,'PQgetisnull');
+    pointer(PQclear) := GetProcedureAddress(Postgres3LibraryHandle,'PQclear');
+    pointer(PQfreemem) := GetProcedureAddress(Postgres3LibraryHandle,'PQfreemem');
+    pointer(PQmakeEmptyPGresult) := GetProcedureAddress(Postgres3LibraryHandle,'PQmakeEmptyPGresult');
+    pointer(PQescapeString) := GetProcedureAddress(Postgres3LibraryHandle,'PQescapeString');
+    pointer(PQescapeBytea) := GetProcedureAddress(Postgres3LibraryHandle,'PQescapeBytea');
+    pointer(PQunescapeBytea) := GetProcedureAddress(Postgres3LibraryHandle,'PQunescapeBytea');
+    pointer(PQprint) := GetProcedureAddress(Postgres3LibraryHandle,'PQprint');
+    pointer(PQdisplayTuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQdisplayTuples');
+    pointer(PQprintTuples) := GetProcedureAddress(Postgres3LibraryHandle,'PQprintTuples');
+    pointer(lo_open) := GetProcedureAddress(Postgres3LibraryHandle,'lo_open');
+    pointer(lo_close) := GetProcedureAddress(Postgres3LibraryHandle,'lo_close');
+    pointer(lo_read) := GetProcedureAddress(Postgres3LibraryHandle,'lo_read');
+    pointer(lo_write) := GetProcedureAddress(Postgres3LibraryHandle,'lo_write');
+    pointer(lo_lseek) := GetProcedureAddress(Postgres3LibraryHandle,'lo_lseek');
+    pointer(lo_creat) := GetProcedureAddress(Postgres3LibraryHandle,'lo_creat');
+    pointer(lo_tell) := GetProcedureAddress(Postgres3LibraryHandle,'lo_tell');
+    pointer(lo_unlink) := GetProcedureAddress(Postgres3LibraryHandle,'lo_unlink');
+    pointer(lo_import) := GetProcedureAddress(Postgres3LibraryHandle,'lo_import');
+    pointer(lo_export) := GetProcedureAddress(Postgres3LibraryHandle,'lo_export');
+    pointer(PQmblen) := GetProcedureAddress(Postgres3LibraryHandle,'PQmblen');
+    pointer(PQenv2encoding) := GetProcedureAddress(Postgres3LibraryHandle,'PQenv2encoding');
+
+    InitialiseDllist;
+    end;
+end;
+
+Procedure ReleasePostgres3;
+
+begin
+  if RefCount > 0 then dec(RefCount);
+  if RefCount = 0 then
+    begin
+    if not UnloadLibrary(Postgres3LibraryHandle) then inc(RefCount);
+    ReleaseDllist;
+    end;
+end;
+
+// This function is also defined in postgres3!
+function PQsetdb(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME : pchar) : ppgconn;
+begin
+   PQsetdb:=PQsetdbLogin(M_PGHOST,M_PGPORT,M_PGOPT,M_PGTTY,M_DBNAME,'','');
+end;
+
+
+end.

+ 178 - 0
packages/postgres/src/postgres3types.inc

@@ -0,0 +1,178 @@
+{
+  Contains the types needed for use with Postgres protocol v3
+}
+
+Type
+  size_t    = sizeint;
+  psize_t   = ^size_t;
+  TFILE     = Longint;
+  PFIle     = ^TFILE;
+  POid      = ^Oid;
+  Oid       = dword;
+
+const
+   ERROR_MSG_LENGTH = 4096;
+   CMDSTATUS_LEN = 40;
+
+Type
+  TSockAddr = Array [1..112] of byte;
+  TPGresAttDesc = record
+       name : Pchar;
+       adtid : Oid;
+       adtsize : integer;
+    end;
+  PPGresAttDesc= ^TPGresAttDesc;
+  PPPGresAttDesc= ^PPGresAttDesc;
+  TPGresAttValue = record
+       len : longint;
+       value : Pchar;
+    end;
+  PPGresAttValue= ^TPGresAttValue;
+  PPPGresAttValue= ^PPGresAttValue;
+
+  PExecStatusType = ^TExecStatusType;
+  TExecStatusType = (PGRES_EMPTY_QUERY := 0,PGRES_COMMAND_OK,
+       PGRES_TUPLES_OK,PGRES_COPY_OUT,PGRES_COPY_IN,
+       PGRES_BAD_RESPONSE,PGRES_NONFATAL_ERROR,
+       PGRES_FATAL_ERROR);
+
+
+  TPGlobjfuncs = record
+        fn_lo_open   : Oid;
+        fn_lo_close  : Oid;
+        fn_lo_creat  : Oid;
+        fn_lo_unlink : Oid;
+        fn_lo_lseek  : Oid;
+        fn_lo_tell   : Oid;
+        fn_lo_read   : Oid;
+        fn_lo_write  : Oid;
+    end;
+  PPGlobjfuncs= ^TPGlobjfuncs;
+
+  PConnStatusType = ^TConnStatusType;
+  TConnStatusType = (CONNECTION_OK,CONNECTION_BAD,CONNECTION_STARTED,
+       CONNECTION_MADE,CONNECTION_AWAITING_RESPONSE,
+       CONNECTION_AUTH_OK,CONNECTION_SETENV,
+       CONNECTION_SSL_STARTUP,CONNECTION_NEEDED);
+
+   TPGconn = record
+        pghost : Pchar;
+        pgtty : Pchar;
+        pgport : Pchar;
+        pgoptions : Pchar;
+        dbName : Pchar;
+        status : TConnStatusType;
+        errorMessage : array[0..(ERROR_MSG_LENGTH)-1] of char;
+        Pfin : PFILE;
+        Pfout : PFILE;
+        Pfdebug : PFILE;
+        sock : longint;
+        laddr : TSockAddr;
+        raddr : TSockAddr;
+        salt : array[0..(2)-1] of char;
+        asyncNotifyWaiting : longint;
+        notifyList : PDllist;
+        pguser : Pchar;
+        pgpass : Pchar;
+        lobjfuncs : PPGlobjfuncs;
+    end;
+  PPGconn= ^TPGconn;
+
+  TPGresult = record
+        ntups : longint;
+        numAttributes : longint;
+        attDescs : PPGresAttDesc;
+        tuples : PPPGresAttValue;
+        tupArrSize : longint;
+        resultStatus : TExecStatusType;
+        cmdStatus : array[0..(CMDSTATUS_LEN)-1] of char;
+        binary : longint;
+        conn : PPGconn;
+    end;
+  PPGresult= ^TPGresult;
+
+
+
+
+
+  PPostgresPollingStatusType = ^PostgresPollingStatusType;
+  PostgresPollingStatusType = (PGRES_POLLING_FAILED := 0,PGRES_POLLING_READING,
+       PGRES_POLLING_WRITING,PGRES_POLLING_OK,
+       PGRES_POLLING_ACTIVE);
+
+
+  PPGTransactionStatusType = ^PGTransactionStatusType;
+  PGTransactionStatusType = (PQTRANS_IDLE,PQTRANS_ACTIVE,PQTRANS_INTRANS,
+       PQTRANS_INERROR,PQTRANS_UNKNOWN);
+
+  PPGVerbosity = ^PGVerbosity;
+  PGVerbosity = (PQERRORS_TERSE,PQERRORS_DEFAULT,PQERRORS_VERBOSE);
+
+  PpgNotify = ^pgNotify;
+  pgNotify = record
+          relname : Pchar;
+          be_pid : longint;
+          extra : Pchar;
+    end;
+
+{ Function types for notice-handling callbacks  }
+  PQnoticeReceiver = procedure (arg:pointer; res:PPGresult);cdecl;
+  PQnoticeProcessor = procedure (arg:pointer; message:Pchar);cdecl;
+{ Print options for PQprint()  }
+  Ppqbool = ^pqbool;
+  pqbool = char;
+
+  P_PQprintOpt = ^_PQprintOpt;
+  _PQprintOpt = record
+          header : pqbool;
+          align : pqbool;
+          standard : pqbool;
+          html3 : pqbool;
+          expanded : pqbool;
+          pager : pqbool;
+          fieldSep : Pchar;
+          tableOpt : Pchar;
+          caption : Pchar;
+          fieldName : ^Pchar;
+    end;
+  PQprintOpt = _PQprintOpt;
+  PPQprintOpt = ^PQprintOpt;
+
+  { ----------------
+   * Structure for the conninfo parameter definitions returned by PQconndefaults
+   *
+   * All fields except "val" point at static strings which must not be altered.
+   * "val" is either NULL or a malloc'd current-value string.  PQconninfoFree()
+   * will release both the val strings and the PQconninfoOption array itself.
+   * ----------------
+    }
+
+     P_PQconninfoOption = ^_PQconninfoOption;
+     _PQconninfoOption = record
+          keyword : Pchar;
+          envvar : Pchar;
+          compiled : Pchar;
+          val : Pchar;
+          _label : Pchar;
+          dispchar : Pchar;
+          dispsize : longint;
+       end;
+     PQconninfoOption = _PQconninfoOption;
+     PPQconninfoOption = ^PQconninfoOption;
+  { ----------------
+   * PQArgBlock -- structure for PQfn() arguments
+   * ----------------
+    }
+  { can't use void (dec compiler barfs)   }
+
+     PPQArgBlock = ^PQArgBlock;
+     PQArgBlock = record
+          len : longint;
+          isint : longint;
+          u : record
+              case longint of
+                 0 : ( ptr : Plongint );
+                 1 : ( integer : longint );
+              end;
+       end;
+

+ 105 - 0
packages/postgres/tests/testpg1.pp

@@ -0,0 +1,105 @@
+Program testpg;
+
+{ Demo program to test pascal connection with postgres database }
+{ Translated from the testlibpq example program of PostGreSQL   }
+
+Uses postgres,strings;
+
+
+Procedure exit_nicely(Conn : PPGconn);
+
+begin
+  PQfinish(conn);
+  halt(1);
+end;
+
+
+Var
+  pghost,pgport,pgoptions,pgtty,dbname : Pchar;
+  nFields,i,j : longint;
+  conn : PPGConn;
+  res : PPGresult;
+
+begin
+  pghost := NiL;        { host name of the backend server }
+  pgport := NiL;        { port of the backend server }
+  pgoptions := NiL;     { special options to start up the backend server }
+  pgtty := NiL;         { debugging tty for the backend server }
+  dbName := 'template1';
+
+  { make a connection to the database }
+  conn := PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
+
+  { check to see that the backend connection was successfully made }
+  if (PQstatus(conn) = CONNECTION_BAD) then
+    begin
+    Writeln (stderr, 'Connection to database ',dbname,' failed.');
+    Writeln (stderr, PQerrorMessage(conn));
+    exit_nicely(conn);
+    end;
+
+
+  { start a transaction block }
+  res := PQexec(conn, 'BEGIN');
+  if (PQresultStatus(res) <> PGRES_COMMAND_OK) then
+    begin
+    Writeln (stderr, 'BEGIN command failed');
+    PQclear(res);
+    exit_nicely(conn);
+    end;
+
+  {
+   * should PQclear PGresult whenever it is no longer needed to avoid
+   * memory leaks
+   }
+  PQclear(res);
+
+  {
+   * fetch instances from the pg_database, the system catalog of
+   * databases
+   }
+  res := PQexec(conn, 'DECLARE myportal CURSOR FOR select * from pg_database');
+  if (PQresultStatus(res) <> PGRES_COMMAND_OK) then
+    begin
+    Writeln (stderr, 'DECLARE CURSOR command failed');
+    PQclear(res);
+    exit_nicely(conn);
+    end;
+  PQclear(res);
+
+  res := PQexec(conn, 'FETCH ALL in myportal');
+  if (PQresultStatus(res) <> PGRES_TUPLES_OK) then
+    begin
+    Writeln (stderr, 'FETCH ALL command didn''t return tuples properly');
+    PQclear(res);
+    exit_nicely(conn);
+    end;
+
+  { first, print out the attribute names }
+  nFields := PQnfields(res);
+  for i := 0 to nFields-1 do
+    Write (PQfname(res, i),space (15-strlen(PQfname(res, i))) );
+  writeln;
+  writeln;
+
+  { next, print out the instances }
+  for i := 0 to PQntuples(res)-1 do
+    begin
+    for j := 0 to nFields-1 do
+      write(PQgetvalue(res, i, j),space (15-strlen(PQgetvalue(res, i,j))));
+    writeln;
+    end;
+
+  PQclear(res);
+
+  { close the portal }
+  res := PQexec(conn, 'CLOSE myportal');
+  PQclear(res);
+
+  { end the transaction }
+  res := PQexec(conn, 'END');
+  PQclear(res);
+
+  { close the connection to the database and cleanup }
+  PQfinish(conn);
+end.

+ 78 - 0
packages/postgres/tests/testpg2.pp

@@ -0,0 +1,78 @@
+Program testpg;
+
+{ Demo program to test pascal connection with postgres database }
+{ Translated from the testlibpq example program of PostGreSQL   }
+
+Uses postgres,strings;
+
+
+Procedure exit_nicely(Conn : PPGconn);
+
+begin
+  PQfinish(conn);
+  halt(1);
+end;
+
+
+Var
+  pghost,pgport,pgoptions,pgtty,dbname : Pchar;
+  nFields,i : longint;
+  conn : PPGConn;
+  res : PPGresult;
+  dummy : string;
+
+begin
+  pghost := NiL;        { host name of the backend server }
+  pgport := NiL;        { port of the backend server }
+  pgoptions := NiL;     { special options to start up the backend server }
+  pgtty := NiL;         { debugging tty for the backend server }
+  if paramcount=1 then
+    begin
+    dummy:=paramstr(1)+#0;
+    dbname:=@dummy[1];
+    end
+  else
+    dbName := 'testdb';
+
+  { make a connection to the database }
+  conn := PQsetdb(pghost, pgport, pgoptions, pgtty, dbName);
+
+  { check to see that the backend connection was successfully made }
+  if (PQstatus(conn) = CONNECTION_BAD) then
+    begin
+    Writeln (stderr, 'Connection to database ',dbname,' failed.');
+    Writeln (stderr, PQerrorMessage(conn));
+    exit_nicely(conn);
+    end;
+
+  res := PQexec(conn, 'select * from email');
+  if (PQresultStatus(res) <> PGRES_TUPLES_OK) then
+    begin
+    Writeln (stderr, 'select command failed.');
+    PQclear(res);
+    exit_nicely(conn);
+    end;
+
+
+  { first, print out the attribute names }
+  nFields := PQnfields(res);
+  Write ('|',PQfname(res, 0),space (4-strlen(PQfname(res, 0))) );
+  Write ('|',PQfname(res, 1),space (20-strlen(PQfname(res, 1))) );
+  Write ('|',PQfname(res, 2),space (40-strlen(PQfname(res, 2))) );
+  writeln ('|');
+  writeln ('+----+--------------------+----------------------------------------+');
+
+  { next, print out the instances }
+  for i := 0 to PQntuples(res)-1 do
+    begin
+    write('|',PQgetvalue(res, i, 0),space (4-strlen(PQgetvalue(res, i,0))));
+    write('|',PQgetvalue(res, i, 1),space (20-strlen(PQgetvalue(res, i,1))));
+    write('|',PQgetvalue(res, i, 2),space (40-strlen(PQgetvalue(res, i,2))));
+    writeln ('|');
+    end;
+
+  PQclear(res);
+
+  { close the connection to the database and cleanup }
+  PQfinish(conn);
+end.

+ 29 - 0
packages/sqlite/Makefile.fpc

@@ -0,0 +1,29 @@
+#
+#   Makefile.fpc for sqlite implementation
+#
+
+[package]
+name=sqlite
+version=2.0.0
+
+[target]
+units=sqlite sqlite3 sqlite3dyn sqlitedb sqlite3db
+
+[require]
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[compiler]
+includedir=src
+sourcedir=src tests examples
+
+[shared]
+build=n
+
+[rules]
+.NOTPARALLEL:
+

+ 49 - 0
packages/sqlite/fpmake.pp

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

+ 162 - 0
packages/sqlite/src/sqlite.pp

@@ -0,0 +1,162 @@
+{$mode objfpc}
+
+{$ifdef bsd}
+  {$linklib c}
+{$endif}
+
+unit sqlite;
+
+interface
+
+{
+  Automatically converted by H2Pas 0.99.15 from sqlite.h
+  The following command line parameters were used:
+    -S
+    -D
+    -p
+    -l
+    sqlite
+    sqlite.h
+}
+
+{$PACKRECORDS C}
+
+const
+  External_library='sqlite';
+ 
+  SQLITE_ISO8859 = 1;//?
+  
+  //sqlite_exec and sqlite_step return values
+  SQLITE_OK         = 0;
+  SQLITE_ERROR      = 1;
+  SQLITE_INTERNAL   = 2;
+  SQLITE_PERM       = 3;
+  SQLITE_ABORT      = 4;
+  SQLITE_BUSY       = 5;
+  SQLITE_LOCKED     = 6;
+  SQLITE_NOMEM      = 7;
+  SQLITE_READONLY   = 8;
+  SQLITE_INTERRUPT  = 9;
+  SQLITE_IOERR      = 10;
+  SQLITE_CORRUPT    = 11;
+  SQLITE_NOTFOUND   = 12;
+  SQLITE_FULL       = 13;
+  SQLITE_CANTOPEN   = 14;
+  SQLITE_PROTOCOL   = 15;
+  SQLITE_EMPTY      = 16;
+  SQLITE_SCHEMA     = 17;
+  SQLITE_TOOBIG     = 18;
+  SQLITE_CONSTRAINT = 19;
+  SQLITE_MISMATCH   = 20;
+  SQLITE_MISUSE     = 21;
+  SQLITE_NOLFS      = 22;
+  SQLITE_AUTH       = 23;
+  SQLITE_FORMAT     = 24;
+  SQLITE_RANGE      = 25;
+  SQLITE_ROW        = 100;
+  SQLITE_DONE       = 101;
+
+  // values used in sqlite_set_authorizer to define what operations authorize
+  SQLITE_COPY                = 0;
+  SQLITE_CREATE_INDEX        = 1;
+  SQLITE_CREATE_TABLE        = 2;
+  SQLITE_CREATE_TEMP_INDEX   = 3;
+  SQLITE_CREATE_TEMP_TABLE   = 4;
+  SQLITE_CREATE_TEMP_TRIGGER = 5;
+  SQLITE_CREATE_TEMP_VIEW    = 6;
+  SQLITE_CREATE_TRIGGER      = 7;
+  SQLITE_CREATE_VIEW         = 8;
+  SQLITE_DELETE              = 9;
+  SQLITE_DROP_INDEX          = 10;
+  SQLITE_DROP_TABLE          = 11;
+  SQLITE_DROP_TEMP_INDEX     = 12;
+  SQLITE_DROP_TEMP_TABLE     = 13;
+  SQLITE_DROP_TEMP_TRIGGER   = 14;
+  SQLITE_DROP_TEMP_VIEW      = 15;
+  SQLITE_DROP_TRIGGER        = 16;
+  SQLITE_DROP_VIEW           = 17;
+  SQLITE_INSERT              = 18;
+  SQLITE_PRAGMA              = 19;
+  SQLITE_READ                = 20;
+  SQLITE_SELECT              = 21;
+  SQLITE_TRANSACTION         = 22;
+  SQLITE_UPDATE              =  23;
+  
+  //Return values of the authorizer function
+  SQLITE_DENY                = 1;
+  SQLITE_IGNORE              = 2;
+
+  SQLITE_NUMERIC = -1;
+  SQLITE_TEXT    = -2;
+  SQLITE_ARGS    = -3;
+
+Type
+  PPPchar   = ^ppchar;
+  Psqlite = Pointer;
+  Psqlite_vm = Pointer;
+  PPsqlite_vm = ^Psqlite_vm;
+  Psqlite_func = Pointer;
+
+  // Procedural types used in functions.
+
+  sqlite_callback = function (_para1:pointer; _para2:longint; _para3:PPchar; _para4:PPchar):longint;cdecl;
+  sqlite_trace_func = procedure (_para1:pointer; _para2:Pchar);cdecl;
+  sqlite_create_func = procedure (_para1:Psqlite_func; _para2:longint; _para3:PPchar);cdecl;
+  sqlite_handler = function (_para1:pointer; _para2:Pchar; _para3:longint):longint;cdecl;
+  sqlite_step_func = procedure (_para1:Psqlite_func; _para2:longint; _para3:PPchar);cdecl;
+  sqlite_finalize_func = procedure (_para1:Psqlite_func);cdecl;
+  sqlite_authorize_func = function (_para1:pointer; _para2:longint; _para3, _para4,_para5,_para6:Pchar):longint;cdecl;
+
+  function sqlite_create_function(_para1:Psqlite; zName:Pchar; nArg:longint; xFunc:sqlite_create_func; pUserData:pointer):longint;cdecl;external External_library name 'sqlite_create_function';
+  function sqlite_open(filename:Pchar; mode:longint; errmsg:PPchar):Psqlite;cdecl;external External_library name 'sqlite_open';
+  procedure sqlite_close(_para1:Psqlite);cdecl;external External_library name 'sqlite_close';
+  function sqlite_exec(_para1:Psqlite; sql:Pchar; _para3:sqlite_callback; _para4:pointer; errmsg:PPchar):longint;cdecl;external External_library name 'sqlite_exec';
+  function sqlite_last_insert_rowid(_para1:Psqlite):longint;cdecl;external External_library name 'sqlite_last_insert_rowid';
+  function sqlite_changes(_para1:Psqlite):longint;cdecl;external External_library name 'sqlite_changes';
+  function sqlite_error_string(_para1:longint):Pchar;cdecl;external External_library name 'sqlite_error_string';
+  procedure do_sqlite_interrupt(_para1:Psqlite);cdecl;external External_library name 'sqlite_interrupt';
+  function sqlite_complete(sql:Pchar):longint;cdecl;external External_library name 'sqlite_complete';
+  procedure sqlite_busy_handler(_para1:Psqlite; _para2:sqlite_handler; _para3:pointer);cdecl;external External_library name 'sqlite_busy_handler';
+  procedure sqlite_busy_timeout(_para1:Psqlite; ms:longint);cdecl;external External_library name 'sqlite_busy_timeout';
+  function sqlite_get_table(_para1:Psqlite; sql:Pchar; resultp:PPPchar; nrow:Plongint; ncolumn:Plongint;
+             errmsg:PPchar):longint;cdecl;external External_library name 'sqlite_get_table';
+  procedure sqlite_free_table(result:PPchar);cdecl;external External_library name 'sqlite_free_table';
+  function sqlite_exec_printf(_para1:Psqlite; sqlFormat:Pchar; _para3:sqlite_callback; _para4:pointer; errmsg:PPchar;
+             args:array of const):longint;cdecl;external External_library name 'sqlite_exec_printf';
+  function sqlite_exec_printf(_para1:Psqlite; sqlFormat:Pchar; _para3:sqlite_callback; _para4:pointer; errmsg:PPchar):longint;cdecl;varargs;external External_library name 'sqlite_exec_printf';
+  function sqlite_exec_vprintf(_para1:Psqlite; sqlFormat:Pchar; _para3:sqlite_callback; _para4:pointer; errmsg:PPchar;
+             ap:array of const):longint;cdecl;external External_library name 'sqlite_exec_vprintf';
+  function sqlite_get_table_printf(_para1:Psqlite; sqlFormat:Pchar; resultp:PPPchar; nrow:Plongint; ncolumn:Plongint;
+             errmsg:PPchar; args:array of const):longint;cdecl;external External_library name 'sqlite_get_table_printf';
+  function sqlite_get_table_printf(_para1:Psqlite; sqlFormat:Pchar; resultp:PPPchar; nrow:Plongint; ncolumn:Plongint;
+             errmsg:PPchar):longint;cdecl;varargs;external External_library name 'sqlite_get_table_printf';
+  function sqlite_get_table_vprintf(_para1:Psqlite; sqlFormat:Pchar; resultp:PPPchar; nrow:Plongint; ncolumn:Plongint;
+             errmsg:PPchar; ap:array of const):longint;cdecl;external External_library name 'sqlite_get_table_vprintf';
+  function sqlite_mprintf(_para1:Pchar; args:array of const):Pchar;cdecl;external External_library name 'sqlite_mprintf';
+  function sqlite_mprintf(_para1:Pchar):Pchar;cdecl;varargs;external External_library name 'sqlite_mprintf';
+  procedure sqlite_freemem(p:pointer);cdecl;external External_library name 'sqlite_freemem';
+  function sqlite_libversion:Pchar;cdecl;external External_library name 'sqlite_libversion';
+  function sqlite_libencoding:Pchar;cdecl;external External_library name 'sqlite_libencoding';
+  function sqlite_create_aggregate(_para1:Psqlite; zName:Pchar; nArg:longint; xStep:sqlite_step_func ; xFinalize:sqlite_finalize_func;
+             pUserData:pointer):longint;cdecl;external External_library name 'sqlite_create_aggregate';
+  function sqlite_function_type(db:Psqlite; zName:Pchar; datatype:longint):longint;cdecl;external External_library name 'sqlite_function_type';
+  function sqlite_set_result_string(_para1:Psqlite_func; _para2:Pchar; _para3:longint):Pchar;cdecl;external External_library name 'sqlite_set_result_string';
+  procedure sqlite_set_result_int(_para1:Psqlite_func; _para2:longint);cdecl;external External_library name 'sqlite_set_result_int';
+  procedure sqlite_set_result_double(_para1:Psqlite_func; _para2:double);cdecl;external External_library name 'sqlite_set_result_double';
+  procedure sqlite_set_result_error(_para1:Psqlite_func; _para2:Pchar; _para3:longint);cdecl;external External_library name 'sqlite_set_result_error';
+  function sqlite_user_data(_para1:Psqlite_func):pointer;cdecl;external External_library name 'sqlite_user_data';
+  function sqlite_aggregate_context(_para1:Psqlite_func; nBytes:longint):pointer;cdecl;external External_library name 'sqlite_aggregate_context';
+  function sqlite_aggregate_count(_para1:Psqlite_func):longint;cdecl;external External_library name 'sqlite_aggregate_count';
+  function sqlite_set_authorizer(_para1:Psqlite; xAuth:sqlite_authorize_func ; pUserData:pointer):longint;cdecl;external External_library name 'sqlite_set_authorizer';
+  function sqlite_trace(_para1:Psqlite; xTrace:sqlite_trace_func; _para3:pointer):pointer;cdecl;external External_library name 'sqlite_trace';
+  function sqlite_compile(db:Psqlite; zSql:Pchar; pzTail:PPchar; ppVm:PPsqlite_vm; pzErrmsg:PPchar):longint;cdecl;external External_library name 'sqlite_compile';
+  function sqlite_step(pVm:Psqlite_vm; pN:Plongint; pazValue:PPPchar; pazColName:PPPchar):longint;cdecl;external External_library name 'sqlite_step';
+  function sqlite_finalize(_para1:Psqlite_vm; pzErrMsg:PPchar):longint;cdecl;external External_library name 'sqlite_finalize';
+  
+  //Use functions instead of external variables to retrieve version and encoding info
+  function sqlite_version: PChar external External_library name 'sqlite_libversion';
+  function sqlite_encoding: PChar external External_library name 'sqlite_libencoding';
+  
+implementation
+
+end.

+ 576 - 0
packages/sqlite/src/sqlite3.inc

@@ -0,0 +1,576 @@
+{$mode objfpc}
+
+{$ifdef BSD}
+  {$linklib c}
+  {$linklib pthread}
+{$endif}
+
+interface
+
+{$ifdef LOAD_DYNAMICALLY}
+uses 
+  SysUtils, DynLibs;
+{$endif}
+
+{
+  Automatically converted by H2Pas 0.99.16 from sqlite3.h
+  The following command line parameters were used:
+    -D
+    -c
+    sqlite3.h
+
+  Manual corrections made by Luiz Américo - 2005
+}
+
+{$PACKRECORDS C}
+
+const
+{$IFDEF WINDOWS}
+  Sqlite3Lib = 'sqlite3.dll';
+{$else}
+  Sqlite3Lib = 'libsqlite3.so';
+{$endif}
+
+  SQLITE_INTEGER = 1;   
+  SQLITE_FLOAT = 2;   
+{ #define SQLITE_TEXT  3  // See below  }
+  SQLITE_BLOB = 4;   
+  SQLITE_NULL = 5;   
+  SQLITE_TEXT = 3;   
+  SQLITE3_TEXT = 3;   
+  SQLITE_UTF8 = 1;       
+  SQLITE_UTF16LE = 2;       
+  SQLITE_UTF16BE = 3;       
+{ Use native byte order  }
+  SQLITE_UTF16 = 4;       
+{ sqlite3_create_function only  }
+  SQLITE_ANY = 5;  
+   
+   //sqlite_exec return values
+  SQLITE_OK = 0;   
+  SQLITE_ERROR = 1;{ SQL error or missing database  }
+  SQLITE_INTERNAL = 2;{ An internal logic error in SQLite  }
+  SQLITE_PERM = 3;   { Access permission denied  }
+  SQLITE_ABORT = 4; { Callback routine requested an abort  }
+  SQLITE_BUSY = 5;  { The database file is locked  }
+  SQLITE_LOCKED = 6;{ A table in the database is locked  }
+  SQLITE_NOMEM = 7; { A malloc() failed  }
+  SQLITE_READONLY = 8;{ Attempt to write a readonly database  }
+  SQLITE_INTERRUPT = 9;{ Operation terminated by sqlite3_interrupt() }
+  SQLITE_IOERR = 10;   { Some kind of disk I/O error occurred  }
+  SQLITE_CORRUPT = 11;   { The database disk image is malformed  }
+  SQLITE_NOTFOUND = 12;   { (Internal Only) Table or record not found  }
+  SQLITE_FULL = 13;   { Insertion failed because database is full  }
+  SQLITE_CANTOPEN = 14;   { Unable to open the database file  }
+  SQLITE_PROTOCOL = 15;   { Database lock protocol error  }
+  SQLITE_EMPTY = 16;   { Database is empty  }
+  SQLITE_SCHEMA = 17;   { The database schema changed  }
+  SQLITE_TOOBIG = 18;   { Too much data for one row of a table  }
+  SQLITE_CONSTRAINT = 19;   { Abort due to contraint violation  }
+  SQLITE_MISMATCH = 20;   { Data type mismatch  }
+  SQLITE_MISUSE = 21;   { Library used incorrectly  }
+  SQLITE_NOLFS = 22;   { Uses OS features not supported on host  }
+  SQLITE_AUTH = 23;   { Authorization denied  }
+  SQLITE_FORMAT = 24;   { Auxiliary database format error  }
+  SQLITE_RANGE = 25;   { 2nd parameter to sqlite3_bind out of range  }
+  SQLITE_NOTADB = 26;   { File opened that is not a database file  }
+  SQLITE_ROW = 100;   { sqlite3_step() has another row ready  }
+  SQLITE_DONE = 101;   { sqlite3_step() has finished executing  }
+
+   SQLITE_COPY = 0;   
+   SQLITE_CREATE_INDEX = 1;   
+   SQLITE_CREATE_TABLE = 2;   
+   SQLITE_CREATE_TEMP_INDEX = 3;   
+   SQLITE_CREATE_TEMP_TABLE = 4;   
+   SQLITE_CREATE_TEMP_TRIGGER = 5;   
+   SQLITE_CREATE_TEMP_VIEW = 6;   
+   SQLITE_CREATE_TRIGGER = 7;   
+   SQLITE_CREATE_VIEW = 8;   
+   SQLITE_DELETE = 9;   
+   SQLITE_DROP_INDEX = 10;   
+   SQLITE_DROP_TABLE = 11;   
+   SQLITE_DROP_TEMP_INDEX = 12;   
+   SQLITE_DROP_TEMP_TABLE = 13;   
+   SQLITE_DROP_TEMP_TRIGGER = 14;   
+   SQLITE_DROP_TEMP_VIEW = 15;   
+   SQLITE_DROP_TRIGGER = 16;   
+   SQLITE_DROP_VIEW = 17;   
+   SQLITE_INSERT = 18;   
+   SQLITE_PRAGMA = 19;   
+   SQLITE_READ = 20;   
+   SQLITE_SELECT = 21;   
+   SQLITE_TRANSACTION = 22;   
+   SQLITE_UPDATE = 23;   
+   SQLITE_ATTACH = 24;   
+   SQLITE_DETACH = 25;   
+   SQLITE_ALTER_TABLE = 26;   
+   SQLITE_REINDEX = 27;   
+
+  SQLITE_DENY = 1;   
+  SQLITE_IGNORE = 2;   
+
+// Original from sqlite3.h: 
+//#define SQLITE_STATIC      ((void(*)(void *))0)
+//#define SQLITE_TRANSIENT   ((void(*)(void *))-1)
+Const
+  SQLITE_STATIC    =  0;
+  SQLITE_TRANSIENT =  -1;
+
+type
+  sqlite_int64 = int64;
+  sqlite_uint64 = qword;
+  PPPChar = ^PPChar;
+  Psqlite3  = Pointer;
+  PPSqlite3 = ^PSqlite3;
+  Psqlite3_context  = Pointer;
+  Psqlite3_stmt  = Pointer;
+  PPsqlite3_stmt = ^Psqlite3_stmt;
+  Psqlite3_value  = Pointer;
+  PPsqlite3_value  = ^Psqlite3_value;
+
+//Callback function types
+//Notice that most functions were named using as prefix the function name that uses them,
+//rather than describing their functions  
+
+  sqlite3_callback = function (_para1:pointer; _para2:longint; _para3:PPchar; _para4:PPchar):longint;cdecl;
+  busy_handler_func = function (_para1:pointer; _para2:longint):longint;cdecl;
+  sqlite3_set_authorizer_func = function (_para1:pointer; _para2:longint; _para3:Pchar; _para4:Pchar; _para5:Pchar; _para6:Pchar):longint;cdecl;
+  sqlite3_trace_func = procedure (_para1:pointer; _para2:Pchar);cdecl;
+  sqlite3_progress_handler_func = function (_para1:pointer):longint;cdecl;
+  sqlite3_commit_hook_func = function (_para1:pointer):longint;cdecl;
+  bind_destructor_func = procedure (_para1:pointer);cdecl;
+  create_function_step_func = procedure (_para1:Psqlite3_context; _para2:longint; _para3:PPsqlite3_value);cdecl;
+  create_function_func_func = procedure (_para1:Psqlite3_context; _para2:longint; _para3:PPsqlite3_value);cdecl;
+  create_function_final_func = procedure (_para1:Psqlite3_context);cdecl;
+  sqlite3_set_auxdata_func = procedure (_para1:pointer);cdecl;
+  sqlite3_result_func = procedure (_para1:pointer);cdecl;
+  sqlite3_create_collation_func = function (_para1:pointer; _para2:longint; _para3:pointer; _para4:longint; _para5:pointer):longint;cdecl;
+  sqlite3_collation_needed_func = procedure (_para1:pointer; _para2:Psqlite3; eTextRep:longint; _para4:Pchar);cdecl;
+
+{$ifndef win32}
+var
+  //This is not working under windows. Any clues?
+  sqlite3_temp_directory : Pchar;cvar; external;
+{$endif}
+
+{$IFNDEF LOAD_DYNAMICALLY}
+
+function sqlite3_close(_para1:Psqlite3):longint;cdecl; external Sqlite3Lib name 'sqlite3_close';
+function sqlite3_exec(_para1:Psqlite3; sql:Pchar; _para3:sqlite3_callback; _para4:pointer; errmsg:PPchar):longint;cdecl; external Sqlite3Lib name 'sqlite3_exec';
+function sqlite3_last_insert_rowid(_para1:Psqlite3):sqlite_int64;cdecl; external Sqlite3Lib name 'sqlite3_last_insert_rowid';
+function sqlite3_changes(_para1:Psqlite3):longint;cdecl; external Sqlite3Lib name 'sqlite3_changes';
+function sqlite3_total_changes(_para1:Psqlite3):longint;cdecl; external Sqlite3Lib name 'sqlite3_total_changes';
+procedure sqlite3_interrupt(_para1:Psqlite3);cdecl; external Sqlite3Lib name 'sqlite3_interrupt';
+function sqlite3_complete(sql:Pchar):longint;cdecl; external Sqlite3Lib name 'sqlite3_complete';
+function sqlite3_complete16(sql:pointer):longint;cdecl; external Sqlite3Lib name 'sqlite3_complete16';
+function sqlite3_busy_handler(_para1:Psqlite3; _para2:busy_handler_func; _para3:pointer):longint;cdecl; external Sqlite3Lib name 'sqlite3_busy_handler';
+function sqlite3_busy_timeout(_para1:Psqlite3; ms:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_busy_timeout';
+function sqlite3_get_table(_para1:Psqlite3; sql:Pchar; resultp:PPPchar; nrow:Plongint; ncolumn:Plongint; errmsg:PPchar):longint;cdecl; external Sqlite3Lib name 'sqlite3_get_table';
+procedure sqlite3_free_table(result:PPchar);cdecl; external Sqlite3Lib name 'sqlite3_free_table';
+// Todo: see how translate sqlite3_mprintf, sqlite3_vmprintf, sqlite3_snprintf
+// function sqlite3_mprintf(_para1:Pchar; args:array of const):Pchar;cdecl; external Sqlite3Lib name 'sqlite3_mprintf';
+function sqlite3_mprintf(_para1:Pchar):Pchar;cdecl; external Sqlite3Lib name 'sqlite3_mprintf';
+//function sqlite3_vmprintf(_para1:Pchar; _para2:va_list):Pchar;cdecl; external Sqlite3Lib name 'sqlite3_vmprintf';
+procedure sqlite3_free(z:Pchar);cdecl; external Sqlite3Lib name 'sqlite3_free';
+//function sqlite3_snprintf(_para1:longint; _para2:Pchar; _para3:Pchar; args:array of const):Pchar;cdecl; external Sqlite3Lib name 'sqlite3_snprintf';
+function sqlite3_snprintf(_para1:longint; _para2:Pchar; _para3:Pchar):Pchar;cdecl; external Sqlite3Lib name 'sqlite3_snprintf';
+function sqlite3_set_authorizer(_para1:Psqlite3; xAuth:sqlite3_set_authorizer_func; pUserData:pointer):longint;cdecl; external Sqlite3Lib name 'sqlite3_set_authorizer';
+function sqlite3_trace(_para1:Psqlite3; xTrace:sqlite3_trace_func; _para3:pointer):pointer;cdecl; external Sqlite3Lib name 'sqlite3_trace';
+procedure sqlite3_progress_handler(_para1:Psqlite3; _para2:longint; _para3:sqlite3_progress_handler_func; _para4:pointer);cdecl; external Sqlite3Lib name 'sqlite3_progress_handler';
+function sqlite3_commit_hook(_para1:Psqlite3; _para2:sqlite3_commit_hook_func; _para3:pointer):pointer;cdecl; external Sqlite3Lib name 'sqlite3_commit_hook';
+function sqlite3_open(filename:Pchar; ppDb:PPsqlite3):longint;cdecl; external Sqlite3Lib name 'sqlite3_open';
+function sqlite3_open16(filename:pointer; ppDb:PPsqlite3):longint;cdecl; external Sqlite3Lib name 'sqlite3_open16';
+function sqlite3_errcode(db:Psqlite3):longint;cdecl; external Sqlite3Lib name 'sqlite3_errcode';
+function sqlite3_errmsg(_para1:Psqlite3):Pchar;cdecl; external Sqlite3Lib name 'sqlite3_errmsg';
+function sqlite3_errmsg16(_para1:Psqlite3):pointer;cdecl; external Sqlite3Lib name 'sqlite3_errmsg16';
+function sqlite3_prepare(db:Psqlite3; zSql:Pchar; nBytes:longint; ppStmt:PPsqlite3_stmt; pzTail:PPchar):longint;cdecl; external Sqlite3Lib name 'sqlite3_prepare';
+function sqlite3_prepare16(db:Psqlite3; zSql:pointer; nBytes:longint; ppStmt:PPsqlite3_stmt; pzTail:Ppointer):longint;cdecl; external Sqlite3Lib name 'sqlite3_prepare16';
+function sqlite3_bind_blob(_para1:Psqlite3_stmt; _para2:longint; _para3:pointer; n:longint; _para5:bind_destructor_func):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_blob';
+function sqlite3_bind_double(_para1:Psqlite3_stmt; _para2:longint; _para3:double):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_double';
+function sqlite3_bind_int(_para1:Psqlite3_stmt; _para2:longint; _para3:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_int';
+function sqlite3_bind_int64(_para1:Psqlite3_stmt; _para2:longint; _para3:sqlite_int64):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_int64';
+function sqlite3_bind_null(_para1:Psqlite3_stmt; _para2:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_null';
+function sqlite3_bind_text(_para1:Psqlite3_stmt; _para2:longint; _para3:Pchar; n:longint; _para5:bind_destructor_func):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_text';
+function sqlite3_bind_text16(_para1:Psqlite3_stmt; _para2:longint; _para3:pointer; _para4:longint; _para5:bind_destructor_func):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_text16';
+//function sqlite3_bind_value(_para1:Psqlite3_stmt; _para2:longint; _para3:Psqlite3_value):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_value';
+//These overloaded functions were introduced to allow the use of SQLITE_STATIC and SQLITE_TRANSIENT
+//It's the c world man ;-)
+function sqlite3_bind_blob(_para1:Psqlite3_stmt; _para2:longint; _para3:pointer; n:longint; _para5:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_blob';
+function sqlite3_bind_text(_para1:Psqlite3_stmt; _para2:longint; _para3:Pchar; n:longint; _para5:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_text';
+function sqlite3_bind_text16(_para1:Psqlite3_stmt; _para2:longint; _para3:pointer; _para4:longint; _para5:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_text16';
+
+function sqlite3_bind_parameter_count(_para1:Psqlite3_stmt):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_parameter_count';
+function sqlite3_bind_parameter_name(_para1:Psqlite3_stmt; _para2:longint):Pchar;cdecl; external Sqlite3Lib name 'sqlite3_bind_parameter_name';
+function sqlite3_bind_parameter_index(_para1:Psqlite3_stmt; zName:Pchar):longint;cdecl; external Sqlite3Lib name 'sqlite3_bind_parameter_index';
+//function sqlite3_clear_bindings(_para1:Psqlite3_stmt):longint;cdecl; external Sqlite3Lib name 'sqlite3_clear_bindings';
+function sqlite3_column_count(pStmt:Psqlite3_stmt):longint;cdecl; external Sqlite3Lib name 'sqlite3_column_count';
+function sqlite3_column_name(_para1:Psqlite3_stmt; _para2:longint):Pchar;cdecl; external Sqlite3Lib name 'sqlite3_column_name';
+function sqlite3_column_name16(_para1:Psqlite3_stmt; _para2:longint):pointer;cdecl; external Sqlite3Lib name 'sqlite3_column_name16';
+function sqlite3_column_decltype(_para1:Psqlite3_stmt; i:longint):Pchar;cdecl; external Sqlite3Lib name 'sqlite3_column_decltype';
+function sqlite3_column_decltype16(_para1:Psqlite3_stmt; _para2:longint):pointer;cdecl; external Sqlite3Lib name 'sqlite3_column_decltype16';
+function sqlite3_step(_para1:Psqlite3_stmt):longint;cdecl; external Sqlite3Lib name 'sqlite3_step';
+function sqlite3_data_count(pStmt:Psqlite3_stmt):longint;cdecl; external Sqlite3Lib name 'sqlite3_data_count';
+function sqlite3_column_blob(_para1:Psqlite3_stmt; iCol:longint):pointer;cdecl; external Sqlite3Lib name 'sqlite3_column_blob';
+function sqlite3_column_bytes(_para1:Psqlite3_stmt; iCol:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_column_bytes';
+function sqlite3_column_bytes16(_para1:Psqlite3_stmt; iCol:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_column_bytes16';
+function sqlite3_column_double(_para1:Psqlite3_stmt; iCol:longint):double;cdecl; external Sqlite3Lib name 'sqlite3_column_double';
+function sqlite3_column_int(_para1:Psqlite3_stmt; iCol:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_column_int';
+function sqlite3_column_int64(_para1:Psqlite3_stmt; iCol:longint):sqlite_int64;cdecl; external Sqlite3Lib name 'sqlite3_column_int64';
+function sqlite3_column_text(_para1:Psqlite3_stmt; iCol:longint):PChar;cdecl; external Sqlite3Lib name 'sqlite3_column_text';
+function sqlite3_column_text16(_para1:Psqlite3_stmt; iCol:longint):pointer;cdecl; external Sqlite3Lib name 'sqlite3_column_text16';
+function sqlite3_column_type(_para1:Psqlite3_stmt; iCol:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_column_type';
+function sqlite3_finalize(pStmt:Psqlite3_stmt):longint;cdecl; external Sqlite3Lib name 'sqlite3_finalize';
+function sqlite3_reset(pStmt:Psqlite3_stmt):longint;cdecl; external Sqlite3Lib name 'sqlite3_reset';
+function sqlite3_create_function(_para1:Psqlite3; zFunctionName:Pchar; nArg:longint; eTextRep:longint; _para5:pointer;        xFunc:create_function_func_func; xStep:create_function_step_func; xFinal:create_function_final_func):longint;cdecl; external Sqlite3Lib name 'sqlite3_create_function';
+function sqlite3_create_function16(_para1:Psqlite3; zFunctionName:pointer; nArg:longint; eTextRep:longint; _para5:pointer;            xFunc:create_function_func_func; xStep:create_function_step_func; xFinal:create_function_final_func):longint;cdecl; external Sqlite3Lib name 'sqlite3_create_function16';
+function sqlite3_aggregate_count(_para1:Psqlite3_context):longint;cdecl; external Sqlite3Lib name 'sqlite3_aggregate_count';
+function sqlite3_value_blob(_para1:Psqlite3_value):pointer;cdecl; external Sqlite3Lib name 'sqlite3_value_blob';
+function sqlite3_value_bytes(_para1:Psqlite3_value):longint;cdecl; external Sqlite3Lib name 'sqlite3_value_bytes';
+function sqlite3_value_bytes16(_para1:Psqlite3_value):longint;cdecl; external Sqlite3Lib name 'sqlite3_value_bytes16';
+function sqlite3_value_double(_para1:Psqlite3_value):double;cdecl; external Sqlite3Lib name 'sqlite3_value_double';
+function sqlite3_value_int(_para1:Psqlite3_value):longint;cdecl; external Sqlite3Lib name 'sqlite3_value_int';
+function sqlite3_value_int64(_para1:Psqlite3_value):sqlite_int64;cdecl; external Sqlite3Lib name 'sqlite3_value_int64';
+function sqlite3_value_text(_para1:Psqlite3_value):PChar;cdecl; external Sqlite3Lib name 'sqlite3_value_text';
+function sqlite3_value_text16(_para1:Psqlite3_value):pointer;cdecl; external Sqlite3Lib name 'sqlite3_value_text16';
+function sqlite3_value_text16le(_para1:Psqlite3_value):pointer;cdecl; external Sqlite3Lib name 'sqlite3_value_text16le';
+function sqlite3_value_text16be(_para1:Psqlite3_value):pointer;cdecl; external Sqlite3Lib name 'sqlite3_value_text16be';
+function sqlite3_value_type(_para1:Psqlite3_value):longint;cdecl; external Sqlite3Lib name 'sqlite3_value_type';
+function sqlite3_aggregate_context(_para1:Psqlite3_context; nBytes:longint):pointer;cdecl; external Sqlite3Lib name 'sqlite3_aggregate_context';
+function sqlite3_user_data(_para1:Psqlite3_context):pointer;cdecl; external Sqlite3Lib name 'sqlite3_user_data';
+function sqlite3_get_auxdata(_para1:Psqlite3_context; _para2:longint):pointer;cdecl; external Sqlite3Lib name 'sqlite3_get_auxdata';
+procedure sqlite3_set_auxdata(_para1:Psqlite3_context; _para2:longint; _para3:pointer; _para4:sqlite3_set_auxdata_func);cdecl; external Sqlite3Lib name 'sqlite3_set_auxdata';
+procedure sqlite3_result_blob(_para1:Psqlite3_context; _para2:pointer; _para3:longint; _para4:sqlite3_result_func);cdecl; external Sqlite3Lib name 'sqlite3_result_blob';
+procedure sqlite3_result_double(_para1:Psqlite3_context; _para2:double);cdecl; external Sqlite3Lib name 'sqlite3_result_double';
+procedure sqlite3_result_error(_para1:Psqlite3_context; _para2:Pchar; _para3:longint);cdecl; external Sqlite3Lib name 'sqlite3_result_error';
+procedure sqlite3_result_error16(_para1:Psqlite3_context; _para2:pointer; _para3:longint);cdecl; external Sqlite3Lib name 'sqlite3_result_error16';
+procedure sqlite3_result_int(_para1:Psqlite3_context; _para2:longint);cdecl; external Sqlite3Lib name 'sqlite3_result_int';
+procedure sqlite3_result_int64(_para1:Psqlite3_context; _para2:sqlite_int64);cdecl; external Sqlite3Lib name 'sqlite3_result_int64';
+procedure sqlite3_result_null(_para1:Psqlite3_context);cdecl; external Sqlite3Lib name 'sqlite3_result_null';
+procedure sqlite3_result_text(_para1:Psqlite3_context; _para2:Pchar; _para3:longint; _para4:sqlite3_result_func);cdecl; external Sqlite3Lib name 'sqlite3_result_text';
+procedure sqlite3_result_text16(_para1:Psqlite3_context; _para2:pointer; _para3:longint; _para4:sqlite3_result_func);cdecl; external Sqlite3Lib name 'sqlite3_result_text16';
+procedure sqlite3_result_text16le(_para1:Psqlite3_context; _para2:pointer; _para3:longint; _para4:sqlite3_result_func);cdecl; external Sqlite3Lib name 'sqlite3_result_text16le';
+procedure sqlite3_result_text16be(_para1:Psqlite3_context; _para2:pointer; _para3:longint; _para4:sqlite3_result_func);cdecl; external Sqlite3Lib name 'sqlite3_result_text16be';
+procedure sqlite3_result_value(_para1:Psqlite3_context; _para2:Psqlite3_value);cdecl; external Sqlite3Lib name 'sqlite3_result_value';     
+function sqlite3_create_collation(_para1:Psqlite3; zName:Pchar; eTextRep:longint; _para4:pointer; xCompare:sqlite3_create_collation_func):longint;cdecl; external Sqlite3Lib name 'sqlite3_create_collation';
+function sqlite3_create_collation16(_para1:Psqlite3; zName:Pchar; eTextRep:longint; _para4:pointer; xCompare:sqlite3_create_collation_func):longint;cdecl; external Sqlite3Lib name 'sqlite3_create_collation16';
+function sqlite3_collation_needed(_para1:Psqlite3; _para2:pointer; _para3:sqlite3_collation_needed_func):longint;cdecl; external Sqlite3Lib name 'sqlite3_collation_needed';
+function sqlite3_collation_needed16(_para1:Psqlite3; _para2:pointer; _para3:sqlite3_collation_needed_func):longint;cdecl; external Sqlite3Lib name 'sqlite3_collation_needed16';
+function sqlite3_libversion:PChar;cdecl; external Sqlite3Lib name 'sqlite3_libversion';
+//Alias for allowing better code portability (win32 is not working with external variables) 
+function sqlite3_version:PChar;cdecl; external Sqlite3Lib name 'sqlite3_libversion';
+
+// Not published functions
+function sqlite3_libversion_number:longint;cdecl; external Sqlite3Lib name 'sqlite3_libversion_number';
+//function sqlite3_key(db:Psqlite3; pKey:pointer; nKey:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_key';
+//function sqlite3_rekey(db:Psqlite3; pKey:pointer; nKey:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_rekey';
+//function sqlite3_sleep(_para1:longint):longint;cdecl; external Sqlite3Lib name 'sqlite3_sleep';
+//function sqlite3_expired(_para1:Psqlite3_stmt):longint;cdecl; external Sqlite3Lib name 'sqlite3_expired';
+//function sqlite3_global_recover:longint;cdecl; external Sqlite3Lib name 'sqlite3_global_recover';
+
+{$ELSE LOAD_DYNAMICALLY}
+
+Var
+  sqlite3_close : function (_para1:Psqlite3):longint;cdecl;
+  sqlite3_exec : function (_para1:Psqlite3; sql:Pchar; _para3:sqlite3_callback; _para4:pointer; errmsg:PPchar):longint;cdecl;
+  sqlite3_last_insert_rowid : function (_para1:Psqlite3):sqlite_int64;cdecl;
+  sqlite3_changes : function (_para1:Psqlite3):longint;cdecl;
+  sqlite3_total_changes : function (_para1:Psqlite3):longint;cdecl;
+  sqlite3_interrupt : procedure (_para1:Psqlite3);cdecl;
+  sqlite3_complete : function (sql:Pchar):longint;cdecl;
+  sqlite3_complete16 : function (sql:pointer):longint;cdecl;
+  sqlite3_busy_handler : function (_para1:Psqlite3; _para2:busy_handler_func; _para3:pointer):longint;cdecl;
+  sqlite3_busy_timeout : function (_para1:Psqlite3; ms:longint):longint;cdecl;
+  sqlite3_get_table : function (_para1:Psqlite3; sql:Pchar; resultp:PPPchar; nrow:Plongint; ncolumn:Plongint; errmsg:PPchar):longint;cdecl;
+  sqlite3_free_table : procedure (result:PPchar);cdecl;
+// Todo: see how translate sqlite3_mprintf, sqlite3_vmprintf, sqlite3_snprintf
+//   sqlite3_mprintf : function (_para1:Pchar; args:array of const):Pchar;cdecl;
+  sqlite3_mprintf : function (_para1:Pchar):Pchar;cdecl;
+//  sqlite3_vmprintf : function (_para1:Pchar; _para2:va_list):Pchar;cdecl;
+  sqlite3_free : procedure (z:Pchar);cdecl;
+//  sqlite3_snprintf : function (_para1:longint; _para2:Pchar; _para3:Pchar; args:array of const):Pchar;cdecl;
+  sqlite3_snprintf : function (_para1:longint; _para2:Pchar; _para3:Pchar):Pchar;cdecl;
+  sqlite3_set_authorizer : function (_para1:Psqlite3; xAuth:sqlite3_set_authorizer_func; pUserData:pointer):longint;cdecl;
+  sqlite3_trace : function (_para1:Psqlite3; xTrace:sqlite3_trace_func; _para3:pointer):pointer;cdecl;
+  sqlite3_progress_handler : procedure (_para1:Psqlite3; _para2:longint; _para3:sqlite3_progress_handler_func; _para4:pointer);cdecl;
+  sqlite3_commit_hook : function (_para1:Psqlite3; _para2:sqlite3_commit_hook_func; _para3:pointer):pointer;cdecl;
+  sqlite3_open : function (filename:Pchar; ppDb:PPsqlite3):longint;cdecl;
+  sqlite3_open16 : function (filename:pointer; ppDb:PPsqlite3):longint;cdecl;
+  sqlite3_errcode : function (db:Psqlite3):longint;cdecl;
+  sqlite3_errmsg : function (_para1:Psqlite3):Pchar;cdecl;
+  sqlite3_errmsg16 : function (_para1:Psqlite3):pointer;cdecl;
+  sqlite3_prepare : function (db:Psqlite3; zSql:Pchar; nBytes:longint; ppStmt:PPsqlite3_stmt; pzTail:PPchar):longint;cdecl;
+  sqlite3_prepare16 : function (db:Psqlite3; zSql:pointer; nBytes:longint; ppStmt:PPsqlite3_stmt; pzTail:Ppointer):longint;cdecl;
+  sqlite3_bind_blob : function (_para1:Psqlite3_stmt; _para2:longint; _para3:pointer; n:longint; _para5:bind_destructor_func):longint;cdecl;
+  sqlite3_bind_double : function (_para1:Psqlite3_stmt; _para2:longint; _para3:double):longint;cdecl;
+  sqlite3_bind_int : function (_para1:Psqlite3_stmt; _para2:longint; _para3:longint):longint;cdecl;
+  sqlite3_bind_int64 : function (_para1:Psqlite3_stmt; _para2:longint; _para3:sqlite_int64):longint;cdecl;
+  sqlite3_bind_null : function (_para1:Psqlite3_stmt; _para2:longint):longint;cdecl;
+  sqlite3_bind_text : function (_para1:Psqlite3_stmt; _para2:longint; _para3:Pchar; n:longint; _para5:bind_destructor_func):longint;cdecl;
+  sqlite3_bind_text16 : function (_para1:Psqlite3_stmt; _para2:longint; _para3:pointer; _para4:longint; _para5:bind_destructor_func):longint;cdecl;
+//  sqlite3_bind_value : function (_para1:Psqlite3_stmt; _para2:longint; _para3:Psqlite3_value):longint;cdecl;
+//These overloaded functions were introduced to allow the use of SQLITE_STATIC and SQLITE_TRANSIENT
+//It's the c world man ;-)
+  sqlite3_bind_blob1 : function (_para1:Psqlite3_stmt; _para2:longint; _para3:pointer; n:longint; _para5:longint):longint;cdecl;
+  sqlite3_bind_text1 : function (_para1:Psqlite3_stmt; _para2:longint; _para3:Pchar; n:longint; _para5:longint):longint;cdecl;
+  sqlite3_bind_text161 : function (_para1:Psqlite3_stmt; _para2:longint; _para3:pointer; _para4:longint; _para5:longint):longint;cdecl;
+
+  sqlite3_bind_parameter_count : function (_para1:Psqlite3_stmt):longint;cdecl;
+  sqlite3_bind_parameter_name : function (_para1:Psqlite3_stmt; _para2:longint):Pchar;cdecl;
+  sqlite3_bind_parameter_index : function (_para1:Psqlite3_stmt; zName:Pchar):longint;cdecl;
+//  sqlite3_clear_bindings : function (_para1:Psqlite3_stmt):longint;cdecl;
+  sqlite3_column_count : function (pStmt:Psqlite3_stmt):longint;cdecl;
+  sqlite3_column_name : function (_para1:Psqlite3_stmt; _para2:longint):Pchar;cdecl;
+  sqlite3_column_name16 : function (_para1:Psqlite3_stmt; _para2:longint):pointer;cdecl;
+  sqlite3_column_decltype : function (_para1:Psqlite3_stmt; i:longint):Pchar;cdecl;
+  sqlite3_column_decltype16 : function (_para1:Psqlite3_stmt; _para2:longint):pointer;cdecl;
+  sqlite3_step : function (_para1:Psqlite3_stmt):longint;cdecl;
+  sqlite3_data_count : function (pStmt:Psqlite3_stmt):longint;cdecl;
+  sqlite3_column_blob : function (_para1:Psqlite3_stmt; iCol:longint):pointer;cdecl;
+  sqlite3_column_bytes : function (_para1:Psqlite3_stmt; iCol:longint):longint;cdecl;
+  sqlite3_column_bytes16 : function (_para1:Psqlite3_stmt; iCol:longint):longint;cdecl;
+  sqlite3_column_double : function (_para1:Psqlite3_stmt; iCol:longint):double;cdecl;
+  sqlite3_column_int : function (_para1:Psqlite3_stmt; iCol:longint):longint;cdecl;
+  sqlite3_column_int64 : function (_para1:Psqlite3_stmt; iCol:longint):sqlite_int64;cdecl;
+  sqlite3_column_text : function (_para1:Psqlite3_stmt; iCol:longint):PChar;cdecl;
+  sqlite3_column_text16 : function (_para1:Psqlite3_stmt; iCol:longint):pointer;cdecl;
+  sqlite3_column_type : function (_para1:Psqlite3_stmt; iCol:longint):longint;cdecl;
+  sqlite3_finalize : function (pStmt:Psqlite3_stmt):longint;cdecl;
+  sqlite3_reset : function (pStmt:Psqlite3_stmt):longint;cdecl;
+  sqlite3_create_function : function (_para1:Psqlite3; zFunctionName:Pchar; nArg:longint; eTextRep:longint; _para5:pointer;        xFunc:create_function_func_func; xStep:create_function_step_func; xFinal:create_function_final_func):longint;cdecl;
+  sqlite3_create_function16 : function (_para1:Psqlite3; zFunctionName:pointer; nArg:longint; eTextRep:longint; _para5:pointer;            xFunc:create_function_func_func; xStep:create_function_step_func; xFinal:create_function_final_func):longint;cdecl;
+  sqlite3_aggregate_count : function (_para1:Psqlite3_context):longint;cdecl;
+  sqlite3_value_blob : function (_para1:Psqlite3_value):pointer;cdecl;
+  sqlite3_value_bytes : function (_para1:Psqlite3_value):longint;cdecl;
+  sqlite3_value_bytes16 : function (_para1:Psqlite3_value):longint;cdecl;
+  sqlite3_value_double : function (_para1:Psqlite3_value):double;cdecl;
+  sqlite3_value_int : function (_para1:Psqlite3_value):longint;cdecl;
+  sqlite3_value_int64 : function (_para1:Psqlite3_value):sqlite_int64;cdecl;
+  sqlite3_value_text : function (_para1:Psqlite3_value):PChar;cdecl;
+  sqlite3_value_text16 : function (_para1:Psqlite3_value):pointer;cdecl;
+  sqlite3_value_text16le : function (_para1:Psqlite3_value):pointer;cdecl;
+  sqlite3_value_text16be : function (_para1:Psqlite3_value):pointer;cdecl;
+  sqlite3_value_type : function (_para1:Psqlite3_value):longint;cdecl;
+  sqlite3_aggregate_context : function (_para1:Psqlite3_context; nBytes:longint):pointer;cdecl;
+  sqlite3_user_data : function (_para1:Psqlite3_context):pointer;cdecl;
+  sqlite3_get_auxdata : function (_para1:Psqlite3_context; _para2:longint):pointer;cdecl;
+  sqlite3_set_auxdata : procedure (_para1:Psqlite3_context; _para2:longint; _para3:pointer; _para4:sqlite3_set_auxdata_func);cdecl;
+  sqlite3_result_blob : procedure (_para1:Psqlite3_context; _para2:pointer; _para3:longint; _para4:sqlite3_result_func);cdecl;
+  sqlite3_result_double : procedure (_para1:Psqlite3_context; _para2:double);cdecl;
+  sqlite3_result_error : procedure (_para1:Psqlite3_context; _para2:Pchar; _para3:longint);cdecl;
+  sqlite3_result_error16 : procedure (_para1:Psqlite3_context; _para2:pointer; _para3:longint);cdecl;
+  sqlite3_result_int : procedure (_para1:Psqlite3_context; _para2:longint);cdecl;
+  sqlite3_result_int64 : procedure (_para1:Psqlite3_context; _para2:sqlite_int64);cdecl;
+  sqlite3_result_null : procedure (_para1:Psqlite3_context);cdecl;
+  sqlite3_result_text : procedure (_para1:Psqlite3_context; _para2:Pchar; _para3:longint; _para4:sqlite3_result_func);cdecl;
+  sqlite3_result_text16 : procedure (_para1:Psqlite3_context; _para2:pointer; _para3:longint; _para4:sqlite3_result_func);cdecl;
+  sqlite3_result_text16le : procedure (_para1:Psqlite3_context; _para2:pointer; _para3:longint; _para4:sqlite3_result_func);cdecl;
+  sqlite3_result_text16be : procedure (_para1:Psqlite3_context; _para2:pointer; _para3:longint; _para4:sqlite3_result_func);cdecl;
+  sqlite3_result_value : procedure (_para1:Psqlite3_context; _para2:Psqlite3_value);cdecl;     
+  sqlite3_create_collation : function (_para1:Psqlite3; zName:Pchar; eTextRep:longint; _para4:pointer; xCompare:sqlite3_create_collation_func):longint;cdecl;
+  sqlite3_create_collation16 : function (_para1:Psqlite3; zName:Pchar; eTextRep:longint; _para4:pointer; xCompare:sqlite3_create_collation_func):longint;cdecl;
+  sqlite3_collation_needed : function (_para1:Psqlite3; _para2:pointer; _para3:sqlite3_collation_needed_func):longint;cdecl;
+  sqlite3_collation_needed16 : function (_para1:Psqlite3; _para2:pointer; _para3:sqlite3_collation_needed_func):longint;cdecl;
+  sqlite3_libversion: function : PChar;cdecl;
+//Alias for allowing better code portability (win32 is not working with external variables) 
+  sqlite3_version: function: PChar;cdecl;
+
+// Not published functions
+  sqlite3_libversion_number : Function :longint;cdecl;
+//  sqlite3_key : function (db:Psqlite3; pKey:pointer; nKey:longint):longint;cdecl;
+//  sqlite3_rekey : function (db:Psqlite3; pKey:pointer; nKey:longint):longint;cdecl;
+//  sqlite3_sleep : function (_para1:longint):longint;cdecl;
+//  sqlite3_expired : function (_para1:Psqlite3_stmt):longint;cdecl;
+//function sqlite3_global_recover:longint;cdecl;
+
+Procedure InitialiseSQLite;
+Procedure InitialiseSQLite(LibraryName : String);
+Procedure ReleaseSQLite;
+
+var 
+  SQLiteLibraryHandle : TLibHandle;
+  DefaultLibrary : String = Sqlite3Lib;
+
+{$ENDIF LOAD_DYNAMICALLY}
+
+implementation
+
+{$IFDEF LOAD_DYNAMICALLY}
+
+ResourceString
+  SErrLoadFailed     = 'Can not load SQLite client library "%s". Check your installation.';
+  SErrAlreadyLoaded  = 'SQLIte interface already initialized from library %s.';
+
+Procedure LoadAddresses(LibHandle : TLibHandle);
+
+begin
+  pointer(sqlite3_close) := GetProcedureAddress(LibHandle,'sqlite3_close');
+  pointer(sqlite3_exec) := GetProcedureAddress(LibHandle,'sqlite3_exec');
+  pointer(sqlite3_last_insert_rowid) := GetProcedureAddress(LibHandle,'sqlite3_last_insert_rowid');
+  pointer(sqlite3_changes) := GetProcedureAddress(LibHandle,'sqlite3_changes');
+  pointer(sqlite3_total_changes) := GetProcedureAddress(LibHandle,'sqlite3_total_changes');
+  pointer(sqlite3_interrupt) := GetProcedureAddress(LibHandle,'sqlite3_interrupt');
+  pointer(sqlite3_complete) := GetProcedureAddress(LibHandle,'sqlite3_complete');
+  pointer(sqlite3_complete16) := GetProcedureAddress(LibHandle,'sqlite3_complete16');
+  pointer(sqlite3_busy_handler) := GetProcedureAddress(LibHandle,'sqlite3_busy_handler');
+  pointer(sqlite3_busy_timeout) := GetProcedureAddress(LibHandle,'sqlite3_busy_timeout');
+  pointer(sqlite3_get_table) := GetProcedureAddress(LibHandle,'sqlite3_get_table');
+  pointer(sqlite3_free_table) := GetProcedureAddress(LibHandle,'sqlite3_free_table');
+// Todo: see how translate sqlite3_mprintf, sqlite3_vmprintf, sqlite3_snprintf
+//   pointer(sqlite3_mprintf) := GetProcedureAddress(LibHandle,'sqlite3_mprintf');
+  pointer(sqlite3_mprintf) := GetProcedureAddress(LibHandle,'sqlite3_mprintf');
+//  pointer(sqlite3_vmprintf) := GetProcedureAddress(LibHandle,'sqlite3_vmprintf');
+  pointer(sqlite3_free) := GetProcedureAddress(LibHandle,'sqlite3_free');
+//  pointer(sqlite3_snprintf) := GetProcedureAddress(LibHandle,'sqlite3_snprintf');
+  pointer(sqlite3_snprintf) := GetProcedureAddress(LibHandle,'sqlite3_snprintf');
+  pointer(sqlite3_set_authorizer) := GetProcedureAddress(LibHandle,'sqlite3_set_authorizer');
+  pointer(sqlite3_trace) := GetProcedureAddress(LibHandle,'sqlite3_trace');
+  pointer(sqlite3_progress_handler) := GetProcedureAddress(LibHandle,'sqlite3_progress_handler');
+  pointer(sqlite3_commit_hook) := GetProcedureAddress(LibHandle,'sqlite3_commit_hook');
+  pointer(sqlite3_open) := GetProcedureAddress(LibHandle,'sqlite3_open');
+  pointer(sqlite3_open16) := GetProcedureAddress(LibHandle,'sqlite3_open16');
+  pointer(sqlite3_errcode) := GetProcedureAddress(LibHandle,'sqlite3_errcode');
+  pointer(sqlite3_errmsg) := GetProcedureAddress(LibHandle,'sqlite3_errmsg');
+  pointer(sqlite3_errmsg16) := GetProcedureAddress(LibHandle,'sqlite3_errmsg16');
+  pointer(sqlite3_prepare) := GetProcedureAddress(LibHandle,'sqlite3_prepare');
+  pointer(sqlite3_prepare16) := GetProcedureAddress(LibHandle,'sqlite3_prepare16');
+  pointer(sqlite3_bind_blob) := GetProcedureAddress(LibHandle,'sqlite3_bind_blob');
+  pointer(sqlite3_bind_double) := GetProcedureAddress(LibHandle,'sqlite3_bind_double');
+  pointer(sqlite3_bind_int) := GetProcedureAddress(LibHandle,'sqlite3_bind_int');
+  pointer(sqlite3_bind_int64) := GetProcedureAddress(LibHandle,'sqlite3_bind_int64');
+  pointer(sqlite3_bind_null) := GetProcedureAddress(LibHandle,'sqlite3_bind_null');
+  pointer(sqlite3_bind_text) := GetProcedureAddress(LibHandle,'sqlite3_bind_text');
+  pointer(sqlite3_bind_text16) := GetProcedureAddress(LibHandle,'sqlite3_bind_text16');
+//  pointer(sqlite3_bind_value) := GetProcedureAddress(LibHandle,'sqlite3_bind_value');
+//These overloaded functions were introduced to allow the use of SQLITE_STATIC and SQLITE_TRANSIENT
+//It's the c world man ;-)
+  pointer(sqlite3_bind_blob1) := GetProcedureAddress(LibHandle,'sqlite3_bind_blob');
+  pointer(sqlite3_bind_text1) := GetProcedureAddress(LibHandle,'sqlite3_bind_text');
+  pointer(sqlite3_bind_text161) := GetProcedureAddress(LibHandle,'sqlite3_bind_text16');
+
+  pointer(sqlite3_bind_parameter_count) := GetProcedureAddress(LibHandle,'sqlite3_bind_parameter_count');
+  pointer(sqlite3_bind_parameter_name) := GetProcedureAddress(LibHandle,'sqlite3_bind_parameter_name');
+  pointer(sqlite3_bind_parameter_index) := GetProcedureAddress(LibHandle,'sqlite3_bind_parameter_index');
+//  pointer(sqlite3_clear_bindings) := GetProcedureAddress(LibHandle,'sqlite3_clear_bindings');
+  pointer(sqlite3_column_count) := GetProcedureAddress(LibHandle,'sqlite3_column_count');
+  pointer(sqlite3_column_name) := GetProcedureAddress(LibHandle,'sqlite3_column_name');
+  pointer(sqlite3_column_name16) := GetProcedureAddress(LibHandle,'sqlite3_column_name16');
+  pointer(sqlite3_column_decltype) := GetProcedureAddress(LibHandle,'sqlite3_column_decltype');
+  pointer(sqlite3_column_decltype16) := GetProcedureAddress(LibHandle,'sqlite3_column_decltype16');
+  pointer(sqlite3_step) := GetProcedureAddress(LibHandle,'sqlite3_step');
+  pointer(sqlite3_data_count) := GetProcedureAddress(LibHandle,'sqlite3_data_count');
+  pointer(sqlite3_column_blob) := GetProcedureAddress(LibHandle,'sqlite3_column_blob');
+  pointer(sqlite3_column_bytes) := GetProcedureAddress(LibHandle,'sqlite3_column_bytes');
+  pointer(sqlite3_column_bytes16) := GetProcedureAddress(LibHandle,'sqlite3_column_bytes16');
+  pointer(sqlite3_column_double) := GetProcedureAddress(LibHandle,'sqlite3_column_double');
+  pointer(sqlite3_column_int) := GetProcedureAddress(LibHandle,'sqlite3_column_int');
+  pointer(sqlite3_column_int64) := GetProcedureAddress(LibHandle,'sqlite3_column_int64');
+  pointer(sqlite3_column_text) := GetProcedureAddress(LibHandle,'sqlite3_column_text');
+  pointer(sqlite3_column_text16) := GetProcedureAddress(LibHandle,'sqlite3_column_text16');
+  pointer(sqlite3_column_type) := GetProcedureAddress(LibHandle,'sqlite3_column_type');
+  pointer(sqlite3_finalize) := GetProcedureAddress(LibHandle,'sqlite3_finalize');
+  pointer(sqlite3_reset) := GetProcedureAddress(LibHandle,'sqlite3_reset');
+  pointer(sqlite3_create_function) := GetProcedureAddress(LibHandle,'sqlite3_create_function');
+  pointer(sqlite3_create_function16) := GetProcedureAddress(LibHandle,'sqlite3_create_function16');
+  pointer(sqlite3_aggregate_count) := GetProcedureAddress(LibHandle,'sqlite3_aggregate_count');
+  pointer(sqlite3_value_blob) := GetProcedureAddress(LibHandle,'sqlite3_value_blob');
+  pointer(sqlite3_value_bytes) := GetProcedureAddress(LibHandle,'sqlite3_value_bytes');
+  pointer(sqlite3_value_bytes16) := GetProcedureAddress(LibHandle,'sqlite3_value_bytes16');
+  pointer(sqlite3_value_double) := GetProcedureAddress(LibHandle,'sqlite3_value_double');
+  pointer(sqlite3_value_int) := GetProcedureAddress(LibHandle,'sqlite3_value_int');
+  pointer(sqlite3_value_int64) := GetProcedureAddress(LibHandle,'sqlite3_value_int64');
+  pointer(sqlite3_value_text) := GetProcedureAddress(LibHandle,'sqlite3_value_text');
+  pointer(sqlite3_value_text16) := GetProcedureAddress(LibHandle,'sqlite3_value_text16');
+  pointer(sqlite3_value_text16le) := GetProcedureAddress(LibHandle,'sqlite3_value_text16le');
+  pointer(sqlite3_value_text16be) := GetProcedureAddress(LibHandle,'sqlite3_value_text16be');
+  pointer(sqlite3_value_type) := GetProcedureAddress(LibHandle,'sqlite3_value_type');
+  pointer(sqlite3_aggregate_context) := GetProcedureAddress(LibHandle,'sqlite3_aggregate_context');
+  pointer(sqlite3_user_data) := GetProcedureAddress(LibHandle,'sqlite3_user_data');
+  pointer(sqlite3_get_auxdata) := GetProcedureAddress(LibHandle,'sqlite3_get_auxdata');
+  pointer(sqlite3_set_auxdata) := GetProcedureAddress(LibHandle,'sqlite3_set_auxdata');
+  pointer(sqlite3_result_blob) := GetProcedureAddress(LibHandle,'sqlite3_result_blob');
+  pointer(sqlite3_result_double) := GetProcedureAddress(LibHandle,'sqlite3_result_double');
+  pointer(sqlite3_result_error) := GetProcedureAddress(LibHandle,'sqlite3_result_error');
+  pointer(sqlite3_result_error16) := GetProcedureAddress(LibHandle,'sqlite3_result_error16');
+  pointer(sqlite3_result_int) := GetProcedureAddress(LibHandle,'sqlite3_result_int');
+  pointer(sqlite3_result_int64) := GetProcedureAddress(LibHandle,'sqlite3_result_int64');
+  pointer(sqlite3_result_null) := GetProcedureAddress(LibHandle,'sqlite3_result_null');
+  pointer(sqlite3_result_text) := GetProcedureAddress(LibHandle,'sqlite3_result_text');
+  pointer(sqlite3_result_text16) := GetProcedureAddress(LibHandle,'sqlite3_result_text16');
+  pointer(sqlite3_result_text16le) := GetProcedureAddress(LibHandle,'sqlite3_result_text16le');
+  pointer(sqlite3_result_text16be) := GetProcedureAddress(LibHandle,'sqlite3_result_text16be');
+  pointer(sqlite3_result_value) := GetProcedureAddress(LibHandle,'sqlite3_result_value');
+  pointer(sqlite3_create_collation) := GetProcedureAddress(LibHandle,'sqlite3_create_collation');
+  pointer(sqlite3_create_collation16) := GetProcedureAddress(LibHandle,'sqlite3_create_collation16');
+  pointer(sqlite3_collation_needed) := GetProcedureAddress(LibHandle,'sqlite3_collation_needed');
+  pointer(sqlite3_collation_needed16) := GetProcedureAddress(LibHandle,'sqlite3_collation_needed16');
+  pointer(sqlite3_libversion):=GetProcedureAddress(LibHandle,'sqlite3_libversion');
+//Alias for allowing better code portability (win32 is not working with external variables) 
+  pointer(sqlite3_version):=GetProcedureAddress(LibHandle,'sqlite3_libversion');
+
+// Not published functions
+  pointer(sqlite3_libversion_number):=GetProcedureAddress(LibHandle,'sqlite3_libversion_number');
+//  pointer(sqlite3_key) := GetProcedureAddress(LibHandle,'sqlite3_key');
+//  pointer(sqlite3_rekey) := GetProcedureAddress(LibHandle,'sqlite3_rekey');
+//  pointer(sqlite3_sleep) := GetProcedureAddress(LibHandle,'sqlite3_sleep');
+//  pointer(sqlite3_expired) := GetProcedureAddress(LibHandle,'sqlite3_expired');
+// function sqlite3_global_recover:longint;cdecl;
+end;
+        
+var
+  RefCount : integer;
+  LoadedLibrary : String;
+            
+
+Function TryInitialiseSqlite(Const LibraryName : String) : Boolean;
+            
+begin
+  Result:=False;
+  if (RefCount=0) then
+    begin
+    SQLiteLibraryHandle:=LoadLibrary(LibraryName);
+    Result:=(SQLiteLibraryHandle<>nilhandle);
+    If not Result then
+      Exit;
+    inc(RefCount);
+    LoadedLibrary:=LibraryName;
+    LoadAddresses(SQLiteLibraryHandle);
+    end
+  else
+    begin
+    If (LoadedLibrary<>LibraryName) then
+      Raise EInoutError.CreateFmt(SErrAlreadyLoaded,[LoadedLibrary]);
+    inc(RefCount);
+    Result:=True;
+    end;
+end;
+
+Procedure InitialiseSQLite;
+
+begin
+  InitialiseSQLite(DefaultLibrary);
+end;
+
+
+Procedure InitialiseSQLite(LibraryName : String);
+
+begin
+  If Not TryInitialiseSQLIte(LibraryName) then
+    Raise EInOutError.CreateFmt(SErrLoadFailed,[LibraryName]);
+end;
+
+Procedure ReleaseSQLITE;
+
+begin
+  if RefCount>1 then
+    Dec(RefCount)
+  else if UnloadLibrary(SQLITELibraryHandle) then
+    begin
+    Dec(RefCount);
+    SQLITELibraryHandle := NilHandle;
+    LoadedLibrary:='';
+    end;
+end;
+
+{$ENDIF}
+
+end.

+ 5 - 0
packages/sqlite/src/sqlite3.pp

@@ -0,0 +1,5 @@
+unit sqlite3;
+
+{$i sqlite3.inc}
+
+end.

+ 494 - 0
packages/sqlite/src/sqlite3db.pas

@@ -0,0 +1,494 @@
+{$mode objfpc}
+{$h+}
+{*************************************************************
+SQLite3 Object Oriented handle
+O. Rinaudo - 2005 - [email protected]
+G. Marcou  - 2007 - [email protected]
+*************************************************************}
+
+unit SQLite3db;
+
+interface
+
+uses  Classes,strings,sqlite3;
+{*************************************************************}
+{*************************************************************}
+type
+   TSQLiteExecCallback = function(Sender: pointer; Columns: Integer; ColumnValues: ppchar; ColumnNames: ppchar): integer of object; cdecl;
+   TSQLiteBusyCallback = function(Sender: TObject; BusyCount: integer): longint of object; cdecl;
+   TOnData = Procedure(Sender: TObject; Columns: Integer; ColumnNames, ColumnValues: String)  of object;
+   TOnBusy = Procedure(Sender: TObject; BusyCount: integer; var Cancel: Boolean) of object;
+   TOnQueryComplete = Procedure(Sender: TObject) of object;
+
+   TSQLite = class(TObject)
+{*************************************************************}
+{*************************************************************}   
+   private
+   fPSQlite: PPsqlite3;
+   fSQLite:Psqlite3;
+   fMsg: String;
+   fIsOpen: Boolean;
+   fBusy: Boolean;
+   fError: longint;
+   fVersion: String;
+   fEncoding: String;
+   fTable: TStrings;
+   fLstName: TStringList;
+   fLstVal: TStringList;
+   fOnData: TOnData;
+   fOnBusy: TOnBusy;
+   fOnQueryComplete: TOnQueryComplete;
+   fBusyTimeout: longint;
+   fPMsg: PChar;
+   fChangeCount: longint;
+   fNb_Champ :  Integer;
+   fList_FieldName : TStringList;
+   fList_Field : TList;
+   procedure SetBusyTimeout(Timeout: integer);
+{*************************************************************}
+{*************************************************************}   
+   public
+   constructor Create(DBFileName: String);
+   destructor Destroy; override;
+   function Query(Sql: String; Table: TStrings ): boolean;
+   function ErrorMessage(ErrNo: Integer): string;
+   function IsComplete(Sql: String): boolean;
+   function LastInsertRow: integer;
+   function Cancel: boolean;
+   function DatabaseDetails(Table: TStrings): boolean;
+   property LastErrorMessage: string read fMsg;
+   property LastError: longint read fError;
+   property Version: String read fVersion;
+   property Encoding: String read fEncoding;
+   property OnData: TOnData read fOnData write fOnData;
+   property OnBusy: TOnBusy read fOnBusy write fOnBusy;
+   property OnQueryComplete: TOnQueryComplete read fOnQueryComplete write fOnQueryComplete;
+   property BusyTimeout: longint read fBusyTimeout write SetBusyTimeout;
+   property ChangeCount: longint read fChangeCount;
+   property List_FieldName: TStringList read fList_FieldName write fList_FieldName;
+   property List_Field: TList read fList_Field write fList_Field;
+   property Nb_Champ: integer read fNb_Champ write fNb_Champ;
+ procedure SQLOnData(Sender: TObject; Columns: Integer; ColumnNames, ColumnValues: String);
+
+ end;
+function Pas2SQLStr(const PasString: string): string;
+function SQL2PasStr(const SQLString: string): string;
+function QuoteStr(const s: string; QuoteChar: Char ): string;
+function UnQuoteStr(const s: string; QuoteChar: Char ): string;
+procedure ValueList(const ColumnNames, ColumnValues: String; NameValuePairs: TStrings);
+{*************************************************************}
+{*************************************************************}
+implementation
+Const
+   DblQuote: Char      = '"';
+   SngQuote: Char      = #39;
+   DblSngQuote: String = #39#39;
+   Crlf: String	       = #13#10;
+   Tab: Char	       = #9;
+var
+   MsgNoError : String;
+{*************************************************************}
+{*************************************************************}
+function QuoteStr(const s: string; QuoteChar: Char ): string;
+{*************************************************************
+SQlite3 enclosing string with quotes
+G. Marcou
+*************************************************************}
+begin
+   Result := Concat(QuoteChar, s, QuoteChar);
+end;
+{*************************************************************}
+function UnQuoteStr(const s: string; QuoteChar: Char ): string;
+{*************************************************************
+SQlite3 Remove enclosing quotes from string
+G. Marcou
+*************************************************************}
+begin
+   Result := s;
+   if length(Result) > 1 then
+   begin
+      if Result[1] = QuoteChar then
+	 Delete(Result, 1, 1);
+      if Result[Length(Result)] = QuoteChar then
+	 Delete(Result, Length(Result), 1);
+   end;
+end;
+{*************************************************************}
+function Pas2SQLStr(const PasString: string): string;
+{*************************************************************
+SQlite3 SQL string are use double quotes, Pascal string use
+single quote.
+G. Marcou
+*************************************************************}
+var
+   n : integer;
+begin
+   Result := SQL2PasStr(PasString);
+   n := Length(Result);
+   while n > 0 do
+   begin
+      if Result[n] = SngQuote then
+	 Insert(SngQuote, Result, n);
+      dec(n);
+   end;
+   Result := QuoteStr(Result,SngQuote);
+end;
+{*************************************************************}
+function SQL2PasStr(const SQLString: string): string;
+{*************************************************************
+SQlite3 SQL string are use double quotes, Pascal string use
+single quote.
+G. Marcou
+*************************************************************}
+var
+   p : integer;
+begin
+   Result := SQLString;
+   p := pos(DblSngQuote, Result);
+   while p > 0 do
+   begin
+      Delete(Result, p, 1);
+      p := pos(DblSngQuote, Result);
+   end;
+   Result := UnQuoteStr(Result,SngQuote);
+end;
+{*************************************************************}
+procedure ValueList(const ColumnNames, ColumnValues : String;
+NameValuePairs					    : TStrings);
+{*************************************************************
+SQlite3 build (name=value) pair list
+G. Marcou
+*************************************************************}
+var
+   n		     : integer;
+   lstName, lstValue : TStringList;
+begin		     
+   if NameValuePairs <> nil then
+   begin
+      lstName := TStringList.Create;
+      lstValue := TStringList.Create;
+      lstName.CommaText := ColumnNames;
+      lstValue.CommaText := ColumnValues;
+      NameValuePairs.Clear;
+      if lstName.Count = LstValue.Count then
+	 if lstName.Count > 0 then
+	    for n := 0 to lstName.Count - 1 do
+	       NameValuePairs.Append(Concat(lstName.Strings[n], '=', lstValue.Strings[n]));
+      lstValue.Free;
+      lstName.Free;
+   end;
+end;
+{*************************************************************}
+{function SystemErrorMsg(ErrNo: Integer ): String;
+var
+  buf: PChar;
+  size: Integer;
+  MsgLen: Integer;
+begin}
+{  size := 256;
+  GetMem(buf, size);
+  If ErrNo = - 1 then
+    ErrNo := GetLastError;
+  MsgLen := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, ErrNo, 0, buf, size, nil);
+  if MsgLen = 0 then
+    Result := 'ERROR'
+  else
+    Result := buf;}
+{end;}
+{*************************************************************}
+function BusyCallback(Sender : pointer;
+BusyCount		     : integer): longint; cdecl;
+{*************************************************************
+SQlite3 busy callback 
+G. Marcou
+*************************************************************}
+var
+  bCancel: Boolean;
+begin
+  Result := -1;
+  with TObject(Sender) as TSQLite do
+  begin
+    if Assigned(fOnBusy) then
+    begin
+      bCancel := False;
+      fOnBusy(Tobject(Sender), BusyCount, bCancel);
+      if bCancel then
+        Result := 0;
+    end;
+  end;
+end;
+{*************************************************************}
+function ExecCallback(Sender : Pointer;
+Columns			     : Integer;
+ColumnValues		     : PPChar;
+ColumnNames		     : PPchar): integer; cdecl;
+{*************************************************************
+SQlite3 Build table and data from callback
+G. Marcou
+*************************************************************}
+var
+   PVal, PName : ^PChar;
+   n	       : integer;
+   sVal, sName : String;
+begin
+   Result := 0;
+   with TObject(Sender) as TSQLite do
+   begin
+      if (Assigned(fOnData) or Assigned(fTable)) then
+      begin
+	 fLstName.Clear;
+	 fLstVal.Clear;
+	 if Columns > 0 then
+	 begin
+	    PName := ColumnNames;
+	    PVal := ColumnValues;
+	    for n := 0 to Columns - 1 do
+	    begin
+	       fLstName.Append(PName^);
+	       fLstVal.Append(PVal^);
+	       inc(PName);
+	       inc(PVal);
+	    end;
+	 end;
+	 sVal := fLstVal.CommaText;
+	 sName := fLstName.CommaText;
+	 if Assigned(fOnData) then
+	    fOnData(TObject(Sender), Columns, sName, sVal);
+	 if Assigned(fTable) then
+	 begin
+	    if fTable.Count = 0 then
+	       fTable.Append(sName);
+	    fTable.Append(sVal);
+	 end;
+      end;
+   end;
+end;
+{*************************************************************}
+procedure TSQLite.SQLOnData(Sender : TObject;
+Columns				   : Integer;
+ColumnNames, ColumnValues	   : String);
+{*************************************************************
+SQlite3 Fill up field list names and field list values
+G. Marcou
+*************************************************************}
+Var
+   InterS,val : String;
+   Field      : TStringList;
+   {************************************************}
+   function Pos1(a: String ; s : char) : integer;
+   var i,j : Integer;
+   begin
+      j:=-1;
+      for i:=1 to length(a) Do
+      begin
+	 if a[i] = s then
+	 begin
+	    j:=i;
+	    break;
+	 end;
+      end;
+      result:=j;
+   end; { Pos1 }
+   {*************************************************}
+begin
+   If Nb_Champ = -1 Then
+   Begin {Put the fields name in List_FieldName}
+      Nb_Champ:=Columns;
+      InterS:=ColumnNames;
+      While (Pos1(InterS,',') > 0)  do
+      begin
+	 val:=copy(InterS,1,Pos1(InterS,',')-1);
+	 InterS:=copy(InterS,Pos1(InterS,',')+1,length(InterS));
+	 List_FieldName.add(val);
+      end;
+      if length(InterS) > 0 then List_FieldName.add(InterS);
+   end;
+   {Put the list of TStringList of value}
+   Field :=TStringList.Create;
+        InterS:=ColumnValues;
+   While (Pos1(InterS,',') > 0)  do
+   begin
+      val:=copy(InterS,1,Pos1(InterS,',')-1);
+      InterS:=copy(InterS,Pos1(InterS,',')+1,length(InterS));
+      Field.add(val);
+   end;
+   if length(InterS) > 0 then Field.add(InterS);
+   List_Field.add(Field);
+end;
+{*************************************************************}
+constructor TSQLite.Create(DBFileName: String);
+{*************************************************************
+SQlite3 constructor
+G. Marcou
+*************************************************************}
+var
+   name	  : pchar;
+begin	  
+   inherited Create;
+   List_FieldName := TStringList.Create;
+   List_Field := TList.Create;
+   fError := SQLITE_ERROR;
+   fIsOpen := False;
+   fLstName := TStringList.Create;
+   fLstVal := TStringList.Create;
+   fOnData := nil;
+   fOnBusy := nil;
+   fOnQueryComplete := nil;
+   fChangeCount := 0;
+   name:=StrAlloc (length(DBFileName)+1);
+   strpcopy(name,DBFileName);
+   OnData:=@SQLOnData;
+   writeln('Try to open');
+   sqlite3_open(name,@fSQLite);
+   writeln('Open success');
+   sqlite3_free(fPMsg);
+   writeln('Free memory');
+   if fSQLite <> nil then
+   begin
+      //fVersion := String(SQLite_Version);
+      //fEncoding := SQLite_Encoding;
+      fIsOpen := True;
+      fError := SQLITE_OK;
+   end;
+   fMsg := sqlite3_errmsg(fSQLite);
+end;
+{*************************************************************}
+destructor TSQLite.Destroy;
+{*************************************************************
+SQLite3 destructor
+G. Marcou
+*************************************************************}
+begin
+   if fIsOpen then
+      fError:=sqlite3_close(fSQLite);
+   fIsOpen := False;
+   fLstName.Free;
+   fLstVal.Free;
+   fSQLite := nil;
+   fOnData := nil;
+   fOnBusy := nil;
+   fOnQueryComplete := nil;
+   fLstName := nil;
+   fLstVal := nil;
+   List_FieldName.destroy;
+   List_Field.destroy;
+   inherited Destroy;
+end;
+{*************************************************************}
+function TSQLite.Query(Sql: String; Table: TStrings ): boolean;
+{*************************************************************
+SQLite3 query the database
+G. Marcou
+*************************************************************}
+//var
+//  fPMsg: PChar;
+//var Psql : pchar;
+begin
+   fError := SQLITE_ERROR;
+   if fIsOpen then
+   begin
+      fPMsg := nil;
+      fBusy := True;
+      fTable := Table;
+      if fTable <> nil then
+	 fTable.Clear;
+      List_FieldName.clear;
+      List_Field.clear;
+      Nb_Champ:=-1;
+      fError := sqlite3_exec(fSQLite, PChar(sql), @ExecCallback, Self, @fPMsg);
+      sqlite3_free(fPMsg);
+      fChangeCount := sqlite3_changes(fSQLite);
+      fTable := nil;
+      fBusy := False;
+      if Assigned(fOnQueryComplete) then
+	 fOnQueryComplete(Self);
+   end;
+   fMsg := ErrorMessage(fError);
+   Result := (fError = SQLITE_OK);
+end;
+{*************************************************************}
+function TSQLite.Cancel: boolean;
+{*************************************************************
+SQLite3 interrupt database
+G. Marcou
+*************************************************************}
+begin
+   Result := False;
+   if fBusy and fIsOpen then
+   begin
+      sqlite3_interrupt(fSQLite);
+      fBusy := false;
+      Result := True;
+   end;
+end;
+{*************************************************************}
+procedure TSQLite.SetBusyTimeout(Timeout: Integer);
+{*************************************************************
+SQLite3 busy timeout
+G. Marcou
+*************************************************************}
+begin
+   fBusyTimeout := Timeout;
+   if fIsOpen then
+   begin
+      fError:=sqlite3_busy_timeout(fSQLite, fBusyTimeout);
+      if fBusyTimeout > 0 then
+	 sqlite3_busy_handler(fSQLite, @BusyCallback, Self)
+      else
+	 sqlite3_busy_handler(fSQLite, nil, nil);
+   end;
+end;
+{*************************************************************}
+function TSQLite.LastInsertRow: longint;
+{*************************************************************
+SQLite3 Get ID of the last inserted row
+G. Marcou
+*************************************************************}
+begin
+  if fIsOpen then
+    Result := sqlite3_last_insert_rowid(fSQLite)
+  else
+    Result := -1;
+end;
+{*************************************************************}
+function TSQLite.ErrorMessage(ErrNo: Integer): string;
+{*************************************************************
+SQLite3 Return comprehensive error message
+G. Marcou
+*************************************************************}
+begin
+  if ErrNo = 0 then
+    Result := MsgNoError
+  else
+    Result := sqlite3_errmsg(fSQLite);
+end;
+{*************************************************************}
+function TSQLite.IsComplete(Sql: String): boolean;
+{*************************************************************
+SQLite3 Return true when complete
+G. Marcou
+*************************************************************}
+var Psql : pchar;
+begin
+   Psql:=StrAlloc (length(Sql)+1);
+   strpcopy(Psql,Sql);
+//   Writeln('Testing: ',psql);
+   Result := sqlite3_complete(Psql)<>0;
+   strdispose(Psql);
+end;
+{*************************************************************}
+function TSQLite.DatabaseDetails(Table: TStrings): boolean;
+{*************************************************************
+SQLite3 Query the database
+G. Marcou
+*************************************************************}
+begin
+  Result := Query('SELECT * FROM SQLITE_MASTER;', Table);
+end;
+{*************************************************************}
+{*************************************************************}
+initialization
+
+finalization
+
+end.

+ 7 - 0
packages/sqlite/src/sqlite3dyn.pp

@@ -0,0 +1,7 @@
+unit sqlite3dyn;
+
+{$DEFINE LOAD_DYNAMICALLY}
+
+{$i sqlite3.inc}
+
+end.

+ 410 - 0
packages/sqlite/src/sqlitedb.pas

@@ -0,0 +1,410 @@
+{$mode objfpc}
+{$h+}
+
+unit SQLitedb;
+
+interface
+
+uses  Classes,strings,sqlite;
+
+type
+  TSQLiteExecCallback = function(Sender: pointer; Columns: Integer; ColumnValues: ppchar; ColumnNames: ppchar): integer of object; cdecl;
+  TSQLiteBusyCallback = function(Sender: TObject; ObjectName: PChar; BusyCount: integer): integer of object; cdecl;
+  TOnData = Procedure(Sender: TObject; Columns: Integer; ColumnNames, ColumnValues: String)  of object;
+  TOnBusy = Procedure(Sender: TObject; ObjectName: String; BusyCount: integer; var Cancel: Boolean) of object;
+  TOnQueryComplete = Procedure(Sender: TObject) of object;
+
+  TSQLite = class(TObject)
+  private
+    fSQLite: Pointer;
+    fMsg: String;
+    fIsOpen: Boolean;
+    fBusy: Boolean;
+    fError: Integer;
+    fVersion: String;
+    fEncoding: String;
+    fTable: TStrings;
+    fLstName: TStringList;
+    fLstVal: TStringList;
+    fOnData: TOnData;
+    fOnBusy: TOnBusy;
+    fOnQueryComplete: TOnQueryComplete;
+    fBusyTimeout: integer;
+    fPMsg: PChar;
+    fChangeCount: integer;
+        fNb_Champ :  Integer;
+        fList_FieldName : TStringList;
+        fList_Field : TList;
+    procedure SetBusyTimeout(Timeout: integer);
+  public
+    constructor Create(DBFileName: String);
+    destructor Destroy; override;
+    function Query(Sql: String; Table: TStrings ): boolean;
+    function ErrorMessage(ErrNo: Integer): string;
+    function IsComplete(Sql: String): boolean;
+    function LastInsertRow: integer;
+    function Cancel: boolean;
+    function DatabaseDetails(Table: TStrings): boolean;
+    property LastErrorMessage: string read fMsg;
+    property LastError: Integer read fError;
+    property Version: String read fVersion;
+    property Encoding: String read fEncoding;
+    property OnData: TOnData read fOnData write fOnData;
+    property OnBusy: TOnBusy read fOnBusy write fOnBusy;
+    property OnQueryComplete: TOnQueryComplete read fOnQueryComplete write fOnQueryComplete;
+    property BusyTimeout: Integer read fBusyTimeout write SetBusyTimeout;
+    property ChangeCount: Integer read fChangeCount;
+    property List_FieldName: TStringList read fList_FieldName write fList_FieldName;
+    property List_Field: TList read fList_Field write fList_Field;
+    property Nb_Champ: integer read fNb_Champ write fNb_Champ;
+
+  procedure SQLOnData(Sender: TObject; Columns: Integer; ColumnNames, ColumnValues: String);
+
+  end;
+  function Pas2SQLStr(const PasString: string): string;
+  function SQL2PasStr(const SQLString: string): string;
+  function QuoteStr(const s: string; QuoteChar: Char ): string;
+  function UnQuoteStr(const s: string; QuoteChar: Char ): string;
+  procedure ValueList(const ColumnNames, ColumnValues: String; NameValuePairs: TStrings);
+
+implementation
+
+Const
+  DblQuote: Char    = '"';
+  SngQuote: Char    = #39;
+  Crlf: String      = #13#10;
+  Tab: Char         = #9;
+
+var
+  MsgNoError: String;
+
+function QuoteStr(const s: string; QuoteChar: Char ): string;
+begin
+  Result := Concat(QuoteChar, s, QuoteChar);
+end;
+
+function UnQuoteStr(const s: string; QuoteChar: Char ): string;
+begin
+  Result := s;
+  if length(Result) > 1 then
+  begin
+    if Result[1] = QuoteChar then
+      Delete(Result, 1, 1);
+    if Result[Length(Result)] = QuoteChar then
+      Delete(Result, Length(Result), 1);
+  end;
+end;
+
+function Pas2SQLStr(const PasString: string): string;
+var
+  n: integer;
+begin
+  Result := SQL2PasStr(PasString);
+  n := Length(Result);
+  while n > 0 do
+  begin
+    if Result[n] = SngQuote then
+      Insert(SngQuote, Result, n);
+    dec(n);
+  end;
+  Result := QuoteStr(Result,#39);
+end;
+
+function SQL2PasStr(const SQLString: string): string;
+const
+  DblSngQuote: String = #39#39;
+var
+  p: integer;
+begin
+  Result := SQLString;
+  p := pos(DblSngQuote, Result);
+  while p > 0 do
+  begin
+    Delete(Result, p, 1);
+    p := pos(DblSngQuote, Result);
+  end;
+  Result := UnQuoteStr(Result,#39);
+end;
+
+procedure ValueList(const ColumnNames, ColumnValues: String; NameValuePairs: TStrings);
+var
+  n: integer;
+  lstName, lstValue: TStringList;
+begin
+  if NameValuePairs <> nil then
+  begin
+    lstName := TStringList.Create;
+    lstValue := TStringList.Create;
+    lstName.CommaText := ColumnNames;
+    lstValue.CommaText := ColumnValues;
+    NameValuePairs.Clear;
+    if lstName.Count = LstValue.Count then
+      if lstName.Count > 0 then
+        for n := 0 to lstName.Count - 1 do
+          NameValuePairs.Append(Concat(lstName.Strings[n], '=', lstValue.Strings[n]));
+    lstValue.Free;
+    lstName.Free;
+  end;
+end;
+
+
+
+function SystemErrorMsg(ErrNo: Integer ): String;
+var
+  buf: PChar;
+  size: Integer;
+  MsgLen: Integer;
+begin
+{  size := 256;
+  GetMem(buf, size);
+  If ErrNo = - 1 then
+    ErrNo := GetLastError;
+  MsgLen := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, ErrNo, 0, buf, size, nil);
+  if MsgLen = 0 then
+    Result := 'ERROR'
+  else
+    Result := buf;}
+end;
+
+function BusyCallback(Sender: pointer; ObjectName: PChar; BusyCount: integer): integer; cdecl;
+var
+  sObjName: String;
+  bCancel: Boolean;
+begin
+  Result := -1;
+  with TObject(Sender) as TSQLite do
+  begin
+    if Assigned(fOnBusy) then
+    begin
+      bCancel := False;
+      sObjName := ObjectName;
+      fOnBusy(Tobject(Sender), sObjName, BusyCount, bCancel);
+      if bCancel then
+        Result := 0;
+    end;
+  end;
+end;
+
+function ExecCallback(Sender: Pointer; Columns: Integer; ColumnValues: PPChar; ColumnNames: PPchar): integer; cdecl;
+var
+  PVal, PName: ^PChar;
+  n: integer;
+  sVal, sName: String;
+begin
+  Result := 0;
+  with TObject(Sender) as TSQLite do
+  begin
+    if (Assigned(fOnData) or Assigned(fTable)) then
+    begin
+      fLstName.Clear;
+      fLstVal.Clear;
+      if Columns > 0 then
+      begin
+        PName := ColumnNames;
+        PVal := ColumnValues;
+        for n := 0 to Columns - 1 do
+        begin
+          fLstName.Append(PName^);
+          fLstVal.Append(PVal^);
+          inc(PName);
+          inc(PVal);
+        end;
+      end;
+      sVal := fLstVal.CommaText;
+      sName := fLstName.CommaText;
+      if Assigned(fOnData) then
+        fOnData(TObject(Sender), Columns, sName, sVal);
+      if Assigned(fTable) then
+      begin
+        if fTable.Count = 0 then
+          fTable.Append(sName);
+        fTable.Append(sVal);
+      end;
+    end;
+  end;
+end;
+
+
+procedure TSQLite.SQLOnData(Sender: TObject; Columns: Integer; ColumnNames, ColumnValues: String);
+Var i : Integer;
+          InterS,val : String;
+          Field : TStringList;
+
+          function Pos1(a: String ; s : char) : integer;
+          var i,j : Integer;
+
+          begin
+          j:=-1;
+                for i:=1 to length(a) Do
+                begin
+                        if a[i] = s then
+                        begin
+                                j:=i;
+                                break;
+                        end;
+                end;
+                result:=j;
+          end;
+begin
+        If Nb_Champ = -1 Then
+        Begin // Put the fields name in List_FieldName
+                Nb_Champ:=Columns;
+                InterS:=ColumnNames;
+                While (Pos1(InterS,',') > 0)  do
+                begin
+                        val:=copy(InterS,1,Pos1(InterS,',')-1);
+                        InterS:=copy(InterS,Pos1(InterS,',')+1,length(InterS));
+                        List_FieldName.add(val);
+                end;
+                if length(InterS) > 0 then List_FieldName.add(InterS);
+        end;
+        // Put the list of TStringList of value
+        Field :=TStringList.Create;
+        InterS:=ColumnValues;
+        While (Pos1(InterS,',') > 0)  do
+        begin
+                val:=copy(InterS,1,Pos1(InterS,',')-1);
+                InterS:=copy(InterS,Pos1(InterS,',')+1,length(InterS));
+                Field.add(val);
+        end;
+        if length(InterS) > 0 then Field.add(InterS);
+        List_Field.add(Field);
+end;
+
+constructor TSQLite.Create(DBFileName: String);
+var
+  fPMsg1: PChar;
+  name : pchar;
+begin
+  inherited Create;
+  List_FieldName := TStringList.Create;
+  List_Field := TList.Create;
+  fError := SQLITE_ERROR;
+  fIsOpen := False;
+  fLstName := TStringList.Create;
+  fLstVal := TStringList.Create;
+  fOnData := nil;
+  fOnBusy := nil;
+  fOnQueryComplete := nil;
+  fChangeCount := 0;
+   name:=StrAlloc (length(DBFileName)+1);
+   strpcopy(name,DBFileName);
+   OnData:=@SQLOnData;
+    fSQLite := SQLite_Open(name, 1, @fPMsg);
+    SQLite_FreeMem(fPMsg);
+    if fSQLite <> nil then
+    begin
+      //fVersion := String(SQLite_Version);
+      //fEncoding := SQLite_Encoding;
+      fIsOpen := True;
+      fError := SQLITE_OK;
+    end;
+  fMsg := ErrorMessage(fError);
+end;
+
+destructor TSQLite.Destroy;
+begin
+  if fIsOpen then
+    SQLite_Close(fSQLite);
+  fIsOpen := False;
+  fLstName.Free;
+  fLstVal.Free;
+  fSQLite := nil;
+  fOnData := nil;
+  fOnBusy := nil;
+  fOnQueryComplete := nil;
+  fLstName := nil;
+  fLstVal := nil;
+  List_FieldName.destroy;
+  List_Field.destroy;
+  inherited Destroy;
+end;
+
+function TSQLite.Query(Sql: String; Table: TStrings ): boolean;
+//var
+//  fPMsg: PChar;
+//var Psql : pchar;
+begin
+  fError := SQLITE_ERROR;
+  if fIsOpen then
+  begin
+    fPMsg := nil;
+    fBusy := True;
+    fTable := Table;
+    if fTable <> nil then
+      fTable.Clear;
+   List_FieldName.clear;
+   List_Field.clear;
+   Nb_Champ:=-1;
+    fError := SQLite_Exec(fSQLite, PChar(sql), @ExecCallback, Self, @fPMsg);
+    SQLite_FreeMem(fPMsg);
+    fChangeCount := SQLite_Changes(fSQLite);
+    fTable := nil;
+    fBusy := False;
+    if Assigned(fOnQueryComplete) then
+      fOnQueryComplete(Self);
+  end;
+  fMsg := ErrorMessage(fError);
+  Result := (fError = SQLITE_OK);
+end;
+
+function TSQLite.Cancel: boolean;
+begin
+  Result := False;
+  if fBusy and fIsOpen then
+  begin
+    do_SQLite_interrupt(fSQLite);
+    fBusy := false;
+    Result := True;
+  end;
+end;
+
+procedure TSQLite.SetBusyTimeout(Timeout: Integer);
+begin
+  fBusyTimeout := Timeout;
+  if fIsOpen then
+  begin
+    SQLite_Busy_Timeout(fSQLite, fBusyTimeout);
+    if fBusyTimeout > 0 then
+      SQLite_Busy_Handler(fSQLite, @BusyCallback, Self)
+    else
+      SQLite_Busy_Handler(fSQLite, nil, nil);
+  end;
+end;
+
+function TSQLite.LastInsertRow: integer;
+begin
+  if fIsOpen then
+    Result := SQLite_Last_Insert_RowID(fSQLite)
+  else
+    Result := -1;
+end;
+
+function TSQLite.ErrorMessage(ErrNo: Integer): string;
+begin
+  if ErrNo = 0 then
+    Result := MsgNoError
+  else
+    Result := SQLite_Error_String(ErrNo);
+end;
+
+function TSQLite.IsComplete(Sql: String): boolean;
+var Psql : pchar;
+begin
+  Psql:=StrAlloc (length(Sql)+1);
+  strpcopy(Psql,Sql);
+  Writeln('Testing: ',psql);
+  Result := SQLite_Complete(Psql)<>0;
+  strdispose(Psql);
+end;
+
+function TSQLite.DatabaseDetails(Table: TStrings): boolean;
+begin
+  Result := Query('SELECT * FROM SQLITE_MASTER;', Table);
+end;
+
+initialization
+
+finalization
+
+end.

+ 52 - 0
packages/sqlite/tests/test.pas

@@ -0,0 +1,52 @@
+program test;
+
+uses sqlite,sqlitedb, strings,classes;
+
+var
+  MySQL: TSQLite;
+  SQL: String;
+  i, j: Integer;
+  a: TStringList;
+begin
+  Writeln('Creating class');
+  MySQL := TSQLite.Create('test.db');
+  MySQL.BusyTimeout := 1000;
+
+ // writeln(MySQL.Version);
+  Writeln('Creating table');
+  SQL := 'CREATE TABLE Test(No int, Nom varchar(32),Prenom varchar(32));';
+  MySQL.Query(sql, nil);
+  SQL := 'INSERT INTO Test VALUES(1,''Coursiere'', ''Olivier'');';
+  if MySQL.IsComplete(sql) then
+    begin
+    Writeln('Inserting first row');
+    MySQL.Query(sql, nil);
+    end;
+  SQL := 'INSERT INTO Test VALUES(2,''Jourde'', ''Eric'');';
+  if MySQL.IsComplete(sql) then
+    begin
+    Writeln('Inserting second row') ;
+    MySQL.Query(sql, nil);
+    end;
+  Writeln('Selecting rows') ;
+
+  SQL := 'SELECT * FROM Test;';
+  MySQL.Query(sql, nil);
+  writeln('Fields Names -------------------');
+  for i:=0 to MySQL.List_FieldName.count-1 do
+    writeln(i,' -> ',MySQL.List_FieldName.Strings[i]);
+  writeln('Fields -------------------');
+  for i:=0 to MySQL.List_Field.count-1 do
+      begin
+        a:=TStringList(MySQL.List_Field.items[i]);
+        write(i,' -> ');
+        for j:=0 to a.count-1 do
+          write(a.Strings[j],'  ');
+        writeln('');
+      end;
+
+// Uncomment to remove table again.
+//  SQL := 'DROP TABLE Test;';
+//  MySQL.Query(sql, nil);
+  MySQL.Free;
+end.

+ 44 - 0
packages/sqlite/tests/testapiv3x.README

@@ -0,0 +1,44 @@
+Testing SQLite v3
+
+This prog is a simple direct api call
+sample for sqlite v3x.
+
+I.install
+1°)win32
+
+sqlite3.dll should be in default path or current dir
+and can be downloaded from here : 
+ http://www.sqlite.org/
+
+
+2°)wince-arm
+
+.sqlite3.dll should be in default path or current dir
+and wince version can be downloaded from here :
+ http://sourceforge.net/projects/sqlite-wince
+this is a source only release need evc++4
+also pre-compiled libraries for arm-wince are
+on  ftp://ftp.freepascal.org/pub/fpc/contrib/arm-wince-sqlite322.zip
+..shell/console is required on target system
+more info here : http://www.freepascal.org/wiki/index.php/WinCE_port
+...sqlite unit is not build automaticaly for arm-wince target
+add it in the path or build it manually
+
+II.tests
+
+2005/09/19 :
+ wince-arm : 
+  testapvv3x have been tested with v3.2.2
+  compiled fpc2.1.1 today svn rep
+  command line for cross-compiling from XP:
+   fpc.exe -a -dNORMAL -Twince -Parm -XParm-wince-pe- -FDd:\binutils\win32-arm-pe -FE. -va testapiv3x.pp >test-arm-wince.log
+
+ win32 :
+  testapvv3x have been tested with v3.2.4
+  compiled fpc2.1.1 today svn rep under lazarus
+
+
+
+Regards
+olivier
[email protected]

+ 83 - 0
packages/sqlite/tests/testapiv3x.pp

@@ -0,0 +1,83 @@
+program testapiv3x;
+
+{$APPTYPE CONSOLE}
+{$MODE DELPHI}
+
+uses sqlite3, sysutils;
+
+const
+ DBFILE='dbtest.db';
+
+var
+ rc       : Integer;
+ db       : PPsqlite3;
+ sql      : string;
+ pzErrMsg : PChar;
+ 
+function MyCallback(_para1:pointer; plArgc:longint; argv:PPchar; argcol:PPchar):longint; cdecl;
+var i: Integer;
+    PVal, PName: ^PChar;
+begin
+ PVal:=argv;
+ PName:=argcol;
+ for i:=0 to plArgc-1 do begin
+  writeln(Format('%s = ''%s'''#13, [PName^, PVal^]));
+  inc(PVal);
+  inc(PName);
+ end;
+ writeln(#13);
+ Result:=0;
+end;
+
+begin
+  writeln(Format('SQLite version : %d',[sqlite3_libversion_number]));
+  rc := sqlite3_open(PChar(DBFILE), @db);
+  try
+   if rc<>SQLITE_OK then begin
+    writeln(Format('Can''t open database: %s',[DBFILE]));
+   end;
+
+   sql:= 'DROP TABLE Test;';
+   rc:=sqlite3_exec(db, PChar(sql), @MyCallback, nil, @pzErrMsg);
+   if( rc<>SQLITE_OK )
+   then writeln(Format('SQL error: %s', [pzErrMsg^]));
+
+   sql:='CREATE TABLE Test(No integer, name varchar(32),shortname varchar(32), age integer);';
+   rc:=sqlite3_exec(db, PChar(sql), @MyCallback, nil, @pzErrMsg);
+   if( rc<>SQLITE_OK )
+   then writeln(Format('SQL error: %s', [pzErrMsg^]));
+   
+   sql:='INSERT INTO Test VALUES(1,''hi'', ''by'', -1);';
+   rc:=sqlite3_exec(db, PChar(sql), @MyCallback, nil, @pzErrMsg);
+   Writeln('Inserting row');
+   if( rc<>SQLITE_OK )
+   then writeln(Format('SQL error: %s', [pzErrMsg^]));
+
+   SQL := 'INSERT INTO Test VALUES(2,''dualcore'', ''runwell'',-1);';
+   rc:=sqlite3_exec(db, PChar(sql), @MyCallback, nil, @pzErrMsg);
+   Writeln('Inserting row') ;
+   if( rc<>SQLITE_OK )
+   then writeln(Format('SQL error: %s', [pzErrMsg^]));
+
+   SQL := 'INSERT INTO Test VALUES(3,''Hello'', ''World'',NULL);';
+   rc:=sqlite3_exec(db, PChar(sql), @MyCallback, nil, @pzErrMsg);
+   Writeln('Inserting row') ;
+   if( rc<>SQLITE_OK )
+   then writeln(Format('SQL error: %s', [pzErrMsg^]));
+
+   SQL := 'INSERT INTO Test VALUES(4,''just a little'', ''test'',-1);';
+   rc:=sqlite3_exec(db, PChar(sql), @MyCallback, nil, @pzErrMsg);
+   Writeln('Inserting row') ;
+   if( rc<>SQLITE_OK )
+   then writeln(Format('SQL error: %s', [pzErrMsg^]));
+
+   SQL := 'select * from Test;';
+   rc:=sqlite3_exec(db, PChar(sql), @MyCallback, nil, @pzErrMsg);
+   if( rc<>SQLITE_OK )
+   then writeln(Format('SQL error: %s', [pzErrMsg^]));
+  finally sqlite3_close(db); end;
+
+  sleep(5000);
+end.
+
+