summaryrefslogtreecommitdiff
path: root/packages/fcl-web
diff options
context:
space:
mode:
authorflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2011-04-10 19:20:48 +0000
committerflorian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2>2011-04-10 19:20:48 +0000
commit160cc1e115eeb75638dce6effdd16b2bc810ddb4 (patch)
treeb791a95695a7cf674e61a6153139c6f9c6c491fa /packages/fcl-web
parent3843727e74b31bbf2a34e7e3b89ee422269f770e (diff)
parent413a6aa6469e6c297780217a27ca91363c637944 (diff)
downloadfpc-avr.tar.gz
* rebase to trunk@17295avr
git-svn-id: http://svn.freepascal.org/svn/fpc/branches/avr@17296 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-web')
-rw-r--r--packages/fcl-web/Makefile2438
-rw-r--r--packages/fcl-web/Makefile.fpc48
-rw-r--r--packages/fcl-web/Makefile.org30
-rw-r--r--packages/fcl-web/examples/combined/combined.html20
-rw-r--r--packages/fcl-web/examples/combined/combined.icobin0 -> 137040 bytes
-rw-r--r--packages/fcl-web/examples/combined/combined.ini4
-rw-r--r--packages/fcl-web/examples/combined/combined.lpi116
-rw-r--r--packages/fcl-web/examples/combined/combined.lpr15
-rw-r--r--packages/fcl-web/examples/combined/combined.resbin0 -> 138128 bytes
-rw-r--r--packages/fcl-web/examples/combined/combined.sql11
-rw-r--r--packages/fcl-web/examples/combined/login.js105
-rw-r--r--packages/fcl-web/examples/combined/login.pngbin0 -> 13618 bytes
-rw-r--r--packages/fcl-web/examples/combined/users.html18
-rw-r--r--packages/fcl-web/examples/combined/users.js108
-rw-r--r--packages/fcl-web/examples/combined/users.sql15
-rw-r--r--packages/fcl-web/examples/combined/wmlogin.lfm76
-rw-r--r--packages/fcl-web/examples/combined/wmlogin.pp129
-rw-r--r--packages/fcl-web/examples/combined/wmusers.lfm94
-rw-r--r--packages/fcl-web/examples/combined/wmusers.lrs35
-rw-r--r--packages/fcl-web/examples/combined/wmusers.pp145
-rw-r--r--packages/fcl-web/fpmake.pp2
-rw-r--r--packages/fcl-web/src/base/custfcgi.pp330
-rw-r--r--packages/fcl-web/src/base/custweb.pp1
-rw-r--r--packages/fcl-web/src/base/fphtml.pp197
-rw-r--r--packages/fcl-web/src/base/webpage.pp114
-rw-r--r--packages/fcl-web/src/base/websession.pp1
-rw-r--r--packages/fcl-web/src/jsonrpc/fpextdirect.pp1
-rw-r--r--packages/fcl-web/src/jsonrpc/fpjsonrpc.pp6
-rw-r--r--packages/fcl-web/src/webdata/extjsjson.pp29
-rw-r--r--packages/fcl-web/src/webdata/fpwebdata.pp21
-rw-r--r--packages/fcl-web/src/webdata/sqldbwebdata.pp27
31 files changed, 1897 insertions, 2239 deletions
diff --git a/packages/fcl-web/Makefile b/packages/fcl-web/Makefile
index f634824cce..7761608145 100644
--- a/packages/fcl-web/Makefile
+++ b/packages/fcl-web/Makefile
@@ -1,8 +1,8 @@
#
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/09/29]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2011/04/05]
#
default: all
-MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku 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 i386-nativent i386-iphonesim 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-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku 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 i386-nativent i386-iphonesim 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 powerpc-wii sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
BSDs = freebsd netbsd openbsd darwin
UNIXs = linux $(BSDs) solaris qnx haiku
LIMIT83fs = go32v2 os2 emx watcom
@@ -266,379 +266,17 @@ endif
PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
override PACKAGE_NAME=fcl-web
override PACKAGE_VERSION=2.5.1
-ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),i386-iphonesim)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
+ifeq ($(FPMAKE_BIN_CLEAN),)
+FPMAKE_BIN_CLEAN=$(ECHO)
endif
-ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
+ifdef OS_TARGET
+FPC_TARGETOPT+=--os=$(OS_TARGET)
endif
-ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_DIRS+=src/base src/webdata src/jsonrpc
-endif
-override INSTALL_FPCPACKAGE=y
-ifeq ($(FULL_TARGET),i386-linux)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-nativent)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),i386-iphonesim)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),x86_64-solaris)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),arm-nds)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),arm-embedded)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-override COMPILER_OPTIONS+=-S2h
-endif
-ifeq ($(FULL_TARGET),mipsel-linux)
-override COMPILER_OPTIONS+=-S2h
+ifdef CPU_TARGET
+FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
endif
+LOCALFPMAKE=.$(PATHSEP)fpmake$(EXEEXT)
ifdef REQUIRE_UNITSDIR
override UNITSDIR+=$(REQUIRE_UNITSDIR)
endif
@@ -835,37 +473,6 @@ 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
@@ -1016,6 +623,11 @@ ifeq ($(OS_TARGET),NativeNT)
SHAREDLIBEXT=.dll
SHORTSUFFIX=nativent
endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+endif
else
ifeq ($(OS_TARGET),go32v1)
PPUEXT=.pp1
@@ -1440,1180 +1052,524 @@ else
TAROPT=vz
TAREXT=.tar.gz
endif
-override REQUIRE_PACKAGES=fcl-base fcl-xml fcl-db fcl-json fcl-net fcl-process
+override REQUIRE_PACKAGES=rtl fpmkunit
ifeq ($(FULL_TARGET),i386-linux)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-go32v2)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-win32)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-os2)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-freebsd)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-beos)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-haiku)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-netbsd)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-solaris)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-qnx)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-netware)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-openbsd)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-wdosx)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-darwin)
-REQUIRE_PACKAGES_UNIVINT=1
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-emx)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-watcom)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-netwlibc)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-wince)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-embedded)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-symbian)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-nativent)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),i386-iphonesim)
-REQUIRE_PACKAGES_UNIVINT=1
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),m68k-linux)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),m68k-freebsd)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),m68k-netbsd)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),m68k-amiga)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),m68k-atari)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),m68k-openbsd)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),m68k-palmos)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),m68k-embedded)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc-linux)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc-netbsd)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc-amiga)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc-macos)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc-darwin)
-REQUIRE_PACKAGES_UNIVINT=1
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc-morphos)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc-embedded)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),sparc-linux)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),sparc-netbsd)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),sparc-solaris)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),sparc-embedded)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),x86_64-linux)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),x86_64-freebsd)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),x86_64-solaris)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),x86_64-darwin)
-REQUIRE_PACKAGES_UNIVINT=1
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),x86_64-win64)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),x86_64-embedded)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),arm-linux)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),arm-palmos)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),arm-darwin)
-REQUIRE_PACKAGES_UNIVINT=1
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),arm-wince)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),arm-gba)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),arm-nds)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),arm-embedded)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),arm-symbian)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc64-linux)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc64-darwin)
-REQUIRE_PACKAGES_UNIVINT=1
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),powerpc64-embedded)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),avr-embedded)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),armeb-linux)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),armeb-embedded)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
ifeq ($(FULL_TARGET),mipsel-linux)
-REQUIRE_PACKAGES_FCL-BASE=1
-REQUIRE_PACKAGES_ICONVENC=1
-REQUIRE_PACKAGES_FCL-XML=1
-REQUIRE_PACKAGES_FCL-DB=1
-REQUIRE_PACKAGES_FCL-JSON=1
-REQUIRE_PACKAGES_FCL-PASSRC=1
-REQUIRE_PACKAGES_FCL-ASYNC=1
-REQUIRE_PACKAGES_FCL-NET=1
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_PASZLIB=1
REQUIRE_PACKAGES_FCL-PROCESS=1
-REQUIRE_PACKAGES_IBASE=1
-REQUIRE_PACKAGES_POSTGRES=1
-REQUIRE_PACKAGES_MYSQL=1
-REQUIRE_PACKAGES_ODBC=1
-REQUIRE_PACKAGES_ORACLE=1
-REQUIRE_PACKAGES_SQLITE=1
-REQUIRE_PACKAGES_PXLIB=1
-REQUIRE_PACKAGES_HTTPD22=1
-REQUIRE_PACKAGES_FASTCGI=1
-endif
-ifdef REQUIRE_PACKAGES_FCL-BASE
-PACKAGEDIR_FCL-BASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_FCL-BASE),)
-ifneq ($(wildcard $(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)),)
-UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)/units/$(TARGETSUFFIX)
-else
-UNITDIR_FCL-BASE=$(PACKAGEDIR_FCL-BASE)
+REQUIRE_PACKAGES_FPMKUNIT=1
endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_FCL-BASE)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_FCL-BASE) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-BASE)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_FCL-BASE=
-UNITDIR_FCL-BASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-base/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_FCL-BASE),)
-UNITDIR_FCL-BASE:=$(firstword $(UNITDIR_FCL-BASE))
-else
-UNITDIR_FCL-BASE=
-endif
-endif
-ifdef UNITDIR_FCL-BASE
-override COMPILER_UNITDIR+=$(UNITDIR_FCL-BASE)
-endif
-endif
-ifdef REQUIRE_PACKAGES_ICONVENC
-PACKAGEDIR_ICONVENC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /iconvenc/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_ICONVENC),)
-ifneq ($(wildcard $(PACKAGEDIR_ICONVENC)/units/$(TARGETSUFFIX)),)
-UNITDIR_ICONVENC=$(PACKAGEDIR_ICONVENC)/units/$(TARGETSUFFIX)
-else
-UNITDIR_ICONVENC=$(PACKAGEDIR_ICONVENC)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_ICONVENC)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_ICONVENC) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_ICONVENC)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_ICONVENC=
-UNITDIR_ICONVENC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /iconvenc/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_ICONVENC),)
-UNITDIR_ICONVENC:=$(firstword $(UNITDIR_ICONVENC))
-else
-UNITDIR_ICONVENC=
-endif
-endif
-ifdef UNITDIR_ICONVENC
-override COMPILER_UNITDIR+=$(UNITDIR_ICONVENC)
-endif
-endif
-ifdef REQUIRE_PACKAGES_FCL-XML
-PACKAGEDIR_FCL-XML:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_FCL-XML),)
-ifneq ($(wildcard $(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)),)
-UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)/units/$(TARGETSUFFIX)
-else
-UNITDIR_FCL-XML=$(PACKAGEDIR_FCL-XML)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_FCL-XML)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_FCL-XML) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-XML)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_FCL-XML=
-UNITDIR_FCL-XML:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-xml/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_FCL-XML),)
-UNITDIR_FCL-XML:=$(firstword $(UNITDIR_FCL-XML))
-else
-UNITDIR_FCL-XML=
-endif
-endif
-ifdef UNITDIR_FCL-XML
-override COMPILER_UNITDIR+=$(UNITDIR_FCL-XML)
-endif
-endif
-ifdef REQUIRE_PACKAGES_FCL-DB
-PACKAGEDIR_FCL-DB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-db/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_FCL-DB),)
-ifneq ($(wildcard $(PACKAGEDIR_FCL-DB)/units/$(TARGETSUFFIX)),)
-UNITDIR_FCL-DB=$(PACKAGEDIR_FCL-DB)/units/$(TARGETSUFFIX)
-else
-UNITDIR_FCL-DB=$(PACKAGEDIR_FCL-DB)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_FCL-DB)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_FCL-DB) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-DB)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_FCL-DB=
-UNITDIR_FCL-DB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-db/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_FCL-DB),)
-UNITDIR_FCL-DB:=$(firstword $(UNITDIR_FCL-DB))
+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_FCL-DB=
-endif
-endif
-ifdef UNITDIR_FCL-DB
-override COMPILER_UNITDIR+=$(UNITDIR_FCL-DB)
-endif
-endif
-ifdef REQUIRE_PACKAGES_FCL-JSON
-PACKAGEDIR_FCL-JSON:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-json/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_FCL-JSON),)
-ifneq ($(wildcard $(PACKAGEDIR_FCL-JSON)/units/$(TARGETSUFFIX)),)
-UNITDIR_FCL-JSON=$(PACKAGEDIR_FCL-JSON)/units/$(TARGETSUFFIX)
-else
-UNITDIR_FCL-JSON=$(PACKAGEDIR_FCL-JSON)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
endif
ifdef CHECKDEPEND
-$(PACKAGEDIR_FCL-JSON)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_FCL-JSON) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-JSON)/$(FPCMADE)
+$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_RTL)/$(OS_TARGET) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE)
endif
else
-PACKAGEDIR_FCL-JSON=
-UNITDIR_FCL-JSON:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-json/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_FCL-JSON),)
-UNITDIR_FCL-JSON:=$(firstword $(UNITDIR_FCL-JSON))
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
else
-UNITDIR_FCL-JSON=
+UNITDIR_RTL=
endif
endif
-ifdef UNITDIR_FCL-JSON
-override COMPILER_UNITDIR+=$(UNITDIR_FCL-JSON)
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
endif
endif
-ifdef REQUIRE_PACKAGES_FCL-PASSRC
-PACKAGEDIR_FCL-PASSRC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-passrc/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_FCL-PASSRC),)
-ifneq ($(wildcard $(PACKAGEDIR_FCL-PASSRC)/units/$(TARGETSUFFIX)),)
-UNITDIR_FCL-PASSRC=$(PACKAGEDIR_FCL-PASSRC)/units/$(TARGETSUFFIX)
+ifdef REQUIRE_PACKAGES_HASH
+PACKAGEDIR_HASH:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /hash/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_HASH),)
+ifneq ($(wildcard $(PACKAGEDIR_HASH)/units/$(TARGETSUFFIX)),)
+UNITDIR_HASH=$(PACKAGEDIR_HASH)/units/$(TARGETSUFFIX)
else
-UNITDIR_FCL-PASSRC=$(PACKAGEDIR_FCL-PASSRC)
+UNITDIR_HASH=$(PACKAGEDIR_HASH)
endif
ifdef CHECKDEPEND
-$(PACKAGEDIR_FCL-PASSRC)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_FCL-PASSRC) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-PASSRC)/$(FPCMADE)
+$(PACKAGEDIR_HASH)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_HASH) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_HASH)/$(FPCMADE)
endif
else
-PACKAGEDIR_FCL-PASSRC=
-UNITDIR_FCL-PASSRC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-passrc/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_FCL-PASSRC),)
-UNITDIR_FCL-PASSRC:=$(firstword $(UNITDIR_FCL-PASSRC))
+PACKAGEDIR_HASH=
+UNITDIR_HASH:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /hash/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_HASH),)
+UNITDIR_HASH:=$(firstword $(UNITDIR_HASH))
else
-UNITDIR_FCL-PASSRC=
+UNITDIR_HASH=
endif
endif
-ifdef UNITDIR_FCL-PASSRC
-override COMPILER_UNITDIR+=$(UNITDIR_FCL-PASSRC)
+ifdef UNITDIR_HASH
+override COMPILER_UNITDIR+=$(UNITDIR_HASH)
endif
endif
-ifdef REQUIRE_PACKAGES_FCL-ASYNC
-PACKAGEDIR_FCL-ASYNC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-async/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_FCL-ASYNC),)
-ifneq ($(wildcard $(PACKAGEDIR_FCL-ASYNC)/units/$(TARGETSUFFIX)),)
-UNITDIR_FCL-ASYNC=$(PACKAGEDIR_FCL-ASYNC)/units/$(TARGETSUFFIX)
+ifdef REQUIRE_PACKAGES_PASZLIB
+PACKAGEDIR_PASZLIB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /paszlib/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_PASZLIB),)
+ifneq ($(wildcard $(PACKAGEDIR_PASZLIB)/units/$(TARGETSUFFIX)),)
+UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)/units/$(TARGETSUFFIX)
else
-UNITDIR_FCL-ASYNC=$(PACKAGEDIR_FCL-ASYNC)
+UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)
endif
ifdef CHECKDEPEND
-$(PACKAGEDIR_FCL-ASYNC)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_FCL-ASYNC) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-ASYNC)/$(FPCMADE)
+$(PACKAGEDIR_PASZLIB)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_PASZLIB) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_PASZLIB)/$(FPCMADE)
endif
else
-PACKAGEDIR_FCL-ASYNC=
-UNITDIR_FCL-ASYNC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-async/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_FCL-ASYNC),)
-UNITDIR_FCL-ASYNC:=$(firstword $(UNITDIR_FCL-ASYNC))
+PACKAGEDIR_PASZLIB=
+UNITDIR_PASZLIB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /paszlib/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_PASZLIB),)
+UNITDIR_PASZLIB:=$(firstword $(UNITDIR_PASZLIB))
else
-UNITDIR_FCL-ASYNC=
+UNITDIR_PASZLIB=
endif
endif
-ifdef UNITDIR_FCL-ASYNC
-override COMPILER_UNITDIR+=$(UNITDIR_FCL-ASYNC)
-endif
-endif
-ifdef REQUIRE_PACKAGES_FCL-NET
-PACKAGEDIR_FCL-NET:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-net/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_FCL-NET),)
-ifneq ($(wildcard $(PACKAGEDIR_FCL-NET)/units/$(TARGETSUFFIX)),)
-UNITDIR_FCL-NET=$(PACKAGEDIR_FCL-NET)/units/$(TARGETSUFFIX)
-else
-UNITDIR_FCL-NET=$(PACKAGEDIR_FCL-NET)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_FCL-NET)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_FCL-NET) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-NET)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_FCL-NET=
-UNITDIR_FCL-NET:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-net/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_FCL-NET),)
-UNITDIR_FCL-NET:=$(firstword $(UNITDIR_FCL-NET))
-else
-UNITDIR_FCL-NET=
-endif
-endif
-ifdef UNITDIR_FCL-NET
-override COMPILER_UNITDIR+=$(UNITDIR_FCL-NET)
+ifdef UNITDIR_PASZLIB
+override COMPILER_UNITDIR+=$(UNITDIR_PASZLIB)
endif
endif
ifdef REQUIRE_PACKAGES_FCL-PROCESS
@@ -2642,264 +1598,30 @@ ifdef UNITDIR_FCL-PROCESS
override COMPILER_UNITDIR+=$(UNITDIR_FCL-PROCESS)
endif
endif
-ifdef REQUIRE_PACKAGES_IBASE
-PACKAGEDIR_IBASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /ibase/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_IBASE),)
-ifneq ($(wildcard $(PACKAGEDIR_IBASE)/units/$(TARGETSUFFIX)),)
-UNITDIR_IBASE=$(PACKAGEDIR_IBASE)/units/$(TARGETSUFFIX)
-else
-UNITDIR_IBASE=$(PACKAGEDIR_IBASE)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_IBASE)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_IBASE) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_IBASE)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_IBASE=
-UNITDIR_IBASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /ibase/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_IBASE),)
-UNITDIR_IBASE:=$(firstword $(UNITDIR_IBASE))
-else
-UNITDIR_IBASE=
-endif
-endif
-ifdef UNITDIR_IBASE
-override COMPILER_UNITDIR+=$(UNITDIR_IBASE)
-endif
-endif
-ifdef REQUIRE_PACKAGES_POSTGRES
-PACKAGEDIR_POSTGRES:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /postgres/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_POSTGRES),)
-ifneq ($(wildcard $(PACKAGEDIR_POSTGRES)/units/$(TARGETSUFFIX)),)
-UNITDIR_POSTGRES=$(PACKAGEDIR_POSTGRES)/units/$(TARGETSUFFIX)
-else
-UNITDIR_POSTGRES=$(PACKAGEDIR_POSTGRES)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_POSTGRES)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_POSTGRES) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_POSTGRES)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_POSTGRES=
-UNITDIR_POSTGRES:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /postgres/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_POSTGRES),)
-UNITDIR_POSTGRES:=$(firstword $(UNITDIR_POSTGRES))
-else
-UNITDIR_POSTGRES=
-endif
-endif
-ifdef UNITDIR_POSTGRES
-override COMPILER_UNITDIR+=$(UNITDIR_POSTGRES)
-endif
-endif
-ifdef REQUIRE_PACKAGES_MYSQL
-PACKAGEDIR_MYSQL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /mysql/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_MYSQL),)
-ifneq ($(wildcard $(PACKAGEDIR_MYSQL)/units/$(TARGETSUFFIX)),)
-UNITDIR_MYSQL=$(PACKAGEDIR_MYSQL)/units/$(TARGETSUFFIX)
-else
-UNITDIR_MYSQL=$(PACKAGEDIR_MYSQL)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_MYSQL)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_MYSQL) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_MYSQL)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_MYSQL=
-UNITDIR_MYSQL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /mysql/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_MYSQL),)
-UNITDIR_MYSQL:=$(firstword $(UNITDIR_MYSQL))
-else
-UNITDIR_MYSQL=
-endif
-endif
-ifdef UNITDIR_MYSQL
-override COMPILER_UNITDIR+=$(UNITDIR_MYSQL)
-endif
-endif
-ifdef REQUIRE_PACKAGES_ODBC
-PACKAGEDIR_ODBC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /odbc/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_ODBC),)
-ifneq ($(wildcard $(PACKAGEDIR_ODBC)/units/$(TARGETSUFFIX)),)
-UNITDIR_ODBC=$(PACKAGEDIR_ODBC)/units/$(TARGETSUFFIX)
-else
-UNITDIR_ODBC=$(PACKAGEDIR_ODBC)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_ODBC)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_ODBC) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_ODBC)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_ODBC=
-UNITDIR_ODBC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /odbc/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_ODBC),)
-UNITDIR_ODBC:=$(firstword $(UNITDIR_ODBC))
-else
-UNITDIR_ODBC=
-endif
-endif
-ifdef UNITDIR_ODBC
-override COMPILER_UNITDIR+=$(UNITDIR_ODBC)
-endif
-endif
-ifdef REQUIRE_PACKAGES_ORACLE
-PACKAGEDIR_ORACLE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /oracle/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_ORACLE),)
-ifneq ($(wildcard $(PACKAGEDIR_ORACLE)/units/$(TARGETSUFFIX)),)
-UNITDIR_ORACLE=$(PACKAGEDIR_ORACLE)/units/$(TARGETSUFFIX)
-else
-UNITDIR_ORACLE=$(PACKAGEDIR_ORACLE)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_ORACLE)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_ORACLE) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_ORACLE)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_ORACLE=
-UNITDIR_ORACLE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /oracle/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_ORACLE),)
-UNITDIR_ORACLE:=$(firstword $(UNITDIR_ORACLE))
-else
-UNITDIR_ORACLE=
-endif
-endif
-ifdef UNITDIR_ORACLE
-override COMPILER_UNITDIR+=$(UNITDIR_ORACLE)
-endif
-endif
-ifdef REQUIRE_PACKAGES_SQLITE
-PACKAGEDIR_SQLITE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /sqlite/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_SQLITE),)
-ifneq ($(wildcard $(PACKAGEDIR_SQLITE)/units/$(TARGETSUFFIX)),)
-UNITDIR_SQLITE=$(PACKAGEDIR_SQLITE)/units/$(TARGETSUFFIX)
-else
-UNITDIR_SQLITE=$(PACKAGEDIR_SQLITE)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_SQLITE)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_SQLITE) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_SQLITE)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_SQLITE=
-UNITDIR_SQLITE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /sqlite/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_SQLITE),)
-UNITDIR_SQLITE:=$(firstword $(UNITDIR_SQLITE))
-else
-UNITDIR_SQLITE=
-endif
-endif
-ifdef UNITDIR_SQLITE
-override COMPILER_UNITDIR+=$(UNITDIR_SQLITE)
-endif
-endif
-ifdef REQUIRE_PACKAGES_PXLIB
-PACKAGEDIR_PXLIB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /pxlib/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_PXLIB),)
-ifneq ($(wildcard $(PACKAGEDIR_PXLIB)/units/$(TARGETSUFFIX)),)
-UNITDIR_PXLIB=$(PACKAGEDIR_PXLIB)/units/$(TARGETSUFFIX)
+ifdef REQUIRE_PACKAGES_FPMKUNIT
+PACKAGEDIR_FPMKUNIT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FPMKUNIT),)
+ifneq ($(wildcard $(PACKAGEDIR_FPMKUNIT)/units/$(TARGETSUFFIX)),)
+UNITDIR_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units/$(TARGETSUFFIX)
else
-UNITDIR_PXLIB=$(PACKAGEDIR_PXLIB)
+UNITDIR_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)
endif
ifdef CHECKDEPEND
-$(PACKAGEDIR_PXLIB)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_PXLIB) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_PXLIB)/$(FPCMADE)
+$(PACKAGEDIR_FPMKUNIT)/$(FPCMADE):
+ $(MAKE) -C $(PACKAGEDIR_FPMKUNIT) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FPMKUNIT)/$(FPCMADE)
endif
else
-PACKAGEDIR_PXLIB=
-UNITDIR_PXLIB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /pxlib/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_PXLIB),)
-UNITDIR_PXLIB:=$(firstword $(UNITDIR_PXLIB))
+PACKAGEDIR_FPMKUNIT=
+UNITDIR_FPMKUNIT:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FPMKUNIT),)
+UNITDIR_FPMKUNIT:=$(firstword $(UNITDIR_FPMKUNIT))
else
-UNITDIR_PXLIB=
+UNITDIR_FPMKUNIT=
endif
endif
-ifdef UNITDIR_PXLIB
-override COMPILER_UNITDIR+=$(UNITDIR_PXLIB)
-endif
-endif
-ifdef REQUIRE_PACKAGES_HTTPD22
-PACKAGEDIR_HTTPD22:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /httpd22/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_HTTPD22),)
-ifneq ($(wildcard $(PACKAGEDIR_HTTPD22)/units/$(TARGETSUFFIX)),)
-UNITDIR_HTTPD22=$(PACKAGEDIR_HTTPD22)/units/$(TARGETSUFFIX)
-else
-UNITDIR_HTTPD22=$(PACKAGEDIR_HTTPD22)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_HTTPD22)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_HTTPD22) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_HTTPD22)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_HTTPD22=
-UNITDIR_HTTPD22:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /httpd22/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_HTTPD22),)
-UNITDIR_HTTPD22:=$(firstword $(UNITDIR_HTTPD22))
-else
-UNITDIR_HTTPD22=
-endif
-endif
-ifdef UNITDIR_HTTPD22
-override COMPILER_UNITDIR+=$(UNITDIR_HTTPD22)
-endif
-endif
-ifdef REQUIRE_PACKAGES_FASTCGI
-PACKAGEDIR_FASTCGI:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fastcgi/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_FASTCGI),)
-ifneq ($(wildcard $(PACKAGEDIR_FASTCGI)/units/$(TARGETSUFFIX)),)
-UNITDIR_FASTCGI=$(PACKAGEDIR_FASTCGI)/units/$(TARGETSUFFIX)
-else
-UNITDIR_FASTCGI=$(PACKAGEDIR_FASTCGI)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_FASTCGI)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_FASTCGI) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_FASTCGI)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_FASTCGI=
-UNITDIR_FASTCGI:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fastcgi/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_FASTCGI),)
-UNITDIR_FASTCGI:=$(firstword $(UNITDIR_FASTCGI))
-else
-UNITDIR_FASTCGI=
-endif
-endif
-ifdef UNITDIR_FASTCGI
-override COMPILER_UNITDIR+=$(UNITDIR_FASTCGI)
-endif
-endif
-ifdef REQUIRE_PACKAGES_UNIVINT
-PACKAGEDIR_UNIVINT:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /univint/Makefile.fpc,$(PACKAGESDIR))))))
-ifneq ($(PACKAGEDIR_UNIVINT),)
-ifneq ($(wildcard $(PACKAGEDIR_UNIVINT)/units/$(TARGETSUFFIX)),)
-UNITDIR_UNIVINT=$(PACKAGEDIR_UNIVINT)/units/$(TARGETSUFFIX)
-else
-UNITDIR_UNIVINT=$(PACKAGEDIR_UNIVINT)
-endif
-ifdef CHECKDEPEND
-$(PACKAGEDIR_UNIVINT)/$(FPCMADE):
- $(MAKE) -C $(PACKAGEDIR_UNIVINT) $(FPCMADE)
-override ALLDEPENDENCIES+=$(PACKAGEDIR_UNIVINT)/$(FPCMADE)
-endif
-else
-PACKAGEDIR_UNIVINT=
-UNITDIR_UNIVINT:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /univint/Package.fpc,$(UNITSDIR)))))
-ifneq ($(UNITDIR_UNIVINT),)
-UNITDIR_UNIVINT:=$(firstword $(UNITDIR_UNIVINT))
-else
-UNITDIR_UNIVINT=
-endif
-endif
-ifdef UNITDIR_UNIVINT
-override COMPILER_UNITDIR+=$(UNITDIR_UNIVINT)
+ifdef UNITDIR_FPMKUNIT
+override COMPILER_UNITDIR+=$(UNITDIR_FPMKUNIT)
endif
endif
ifndef NOCPUDEF
@@ -3021,12 +1743,6 @@ 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
@@ -3400,473 +2116,37 @@ 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
-ifeq ($(FULL_TARGET),i386-linux)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-go32v2)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-win32)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-os2)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-freebsd)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-beos)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-haiku)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-netbsd)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-solaris)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-qnx)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-netware)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-openbsd)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-wdosx)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-darwin)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-emx)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-watcom)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-netwlibc)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-wince)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-embedded)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-symbian)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-nativent)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),i386-iphonesim)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-linux)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-freebsd)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-netbsd)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-amiga)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-atari)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-openbsd)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-palmos)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),m68k-embedded)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-linux)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-netbsd)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-amiga)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-macos)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-darwin)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-morphos)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc-embedded)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-linux)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-netbsd)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-solaris)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),sparc-embedded)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-linux)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-freebsd)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-solaris)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-darwin)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-win64)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),x86_64-embedded)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),arm-linux)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),arm-palmos)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),arm-darwin)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),arm-wince)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),arm-gba)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),arm-nds)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),arm-embedded)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),arm-symbian)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc64-linux)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc64-darwin)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),powerpc64-embedded)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),avr-embedded)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),armeb-linux)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),armeb-embedded)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifeq ($(FULL_TARGET),mipsel-linux)
-TARGET_DIRS_SRC/BASE=1
-TARGET_DIRS_SRC/WEBDATA=1
-TARGET_DIRS_SRC/JSONRPC=1
-endif
-ifdef TARGET_DIRS_SRC/BASE
-src/base_all:
- $(MAKE) -C src/base all
-src/base_debug:
- $(MAKE) -C src/base debug
-src/base_smart:
- $(MAKE) -C src/base smart
-src/base_release:
- $(MAKE) -C src/base release
-src/base_units:
- $(MAKE) -C src/base units
-src/base_examples:
- $(MAKE) -C src/base examples
-src/base_shared:
- $(MAKE) -C src/base shared
-src/base_install:
- $(MAKE) -C src/base install
-src/base_sourceinstall:
- $(MAKE) -C src/base sourceinstall
-src/base_exampleinstall:
- $(MAKE) -C src/base exampleinstall
-src/base_distinstall:
- $(MAKE) -C src/base distinstall
-src/base_zipinstall:
- $(MAKE) -C src/base zipinstall
-src/base_zipsourceinstall:
- $(MAKE) -C src/base zipsourceinstall
-src/base_zipexampleinstall:
- $(MAKE) -C src/base zipexampleinstall
-src/base_zipdistinstall:
- $(MAKE) -C src/base zipdistinstall
-src/base_clean:
- $(MAKE) -C src/base clean
-src/base_distclean:
- $(MAKE) -C src/base distclean
-src/base_cleanall:
- $(MAKE) -C src/base cleanall
-src/base_info:
- $(MAKE) -C src/base info
-src/base_makefiles:
- $(MAKE) -C src/base makefiles
-src/base:
- $(MAKE) -C src/base all
-.PHONY: src/base_all src/base_debug src/base_smart src/base_release src/base_units src/base_examples src/base_shared src/base_install src/base_sourceinstall src/base_exampleinstall src/base_distinstall src/base_zipinstall src/base_zipsourceinstall src/base_zipexampleinstall src/base_zipdistinstall src/base_clean src/base_distclean src/base_cleanall src/base_info src/base_makefiles src/base
-endif
-ifdef TARGET_DIRS_SRC/WEBDATA
-src/webdata_all:
- $(MAKE) -C src/webdata all
-src/webdata_debug:
- $(MAKE) -C src/webdata debug
-src/webdata_smart:
- $(MAKE) -C src/webdata smart
-src/webdata_release:
- $(MAKE) -C src/webdata release
-src/webdata_units:
- $(MAKE) -C src/webdata units
-src/webdata_examples:
- $(MAKE) -C src/webdata examples
-src/webdata_shared:
- $(MAKE) -C src/webdata shared
-src/webdata_install:
- $(MAKE) -C src/webdata install
-src/webdata_sourceinstall:
- $(MAKE) -C src/webdata sourceinstall
-src/webdata_exampleinstall:
- $(MAKE) -C src/webdata exampleinstall
-src/webdata_distinstall:
- $(MAKE) -C src/webdata distinstall
-src/webdata_zipinstall:
- $(MAKE) -C src/webdata zipinstall
-src/webdata_zipsourceinstall:
- $(MAKE) -C src/webdata zipsourceinstall
-src/webdata_zipexampleinstall:
- $(MAKE) -C src/webdata zipexampleinstall
-src/webdata_zipdistinstall:
- $(MAKE) -C src/webdata zipdistinstall
-src/webdata_clean:
- $(MAKE) -C src/webdata clean
-src/webdata_distclean:
- $(MAKE) -C src/webdata distclean
-src/webdata_cleanall:
- $(MAKE) -C src/webdata cleanall
-src/webdata_info:
- $(MAKE) -C src/webdata info
-src/webdata_makefiles:
- $(MAKE) -C src/webdata makefiles
-src/webdata:
- $(MAKE) -C src/webdata all
-.PHONY: src/webdata_all src/webdata_debug src/webdata_smart src/webdata_release src/webdata_units src/webdata_examples src/webdata_shared src/webdata_install src/webdata_sourceinstall src/webdata_exampleinstall src/webdata_distinstall src/webdata_zipinstall src/webdata_zipsourceinstall src/webdata_zipexampleinstall src/webdata_zipdistinstall src/webdata_clean src/webdata_distclean src/webdata_cleanall src/webdata_info src/webdata_makefiles src/webdata
-endif
-ifdef TARGET_DIRS_SRC/JSONRPC
-src/jsonrpc_all:
- $(MAKE) -C src/jsonrpc all
-src/jsonrpc_debug:
- $(MAKE) -C src/jsonrpc debug
-src/jsonrpc_smart:
- $(MAKE) -C src/jsonrpc smart
-src/jsonrpc_release:
- $(MAKE) -C src/jsonrpc release
-src/jsonrpc_units:
- $(MAKE) -C src/jsonrpc units
-src/jsonrpc_examples:
- $(MAKE) -C src/jsonrpc examples
-src/jsonrpc_shared:
- $(MAKE) -C src/jsonrpc shared
-src/jsonrpc_install:
- $(MAKE) -C src/jsonrpc install
-src/jsonrpc_sourceinstall:
- $(MAKE) -C src/jsonrpc sourceinstall
-src/jsonrpc_exampleinstall:
- $(MAKE) -C src/jsonrpc exampleinstall
-src/jsonrpc_distinstall:
- $(MAKE) -C src/jsonrpc distinstall
-src/jsonrpc_zipinstall:
- $(MAKE) -C src/jsonrpc zipinstall
-src/jsonrpc_zipsourceinstall:
- $(MAKE) -C src/jsonrpc zipsourceinstall
-src/jsonrpc_zipexampleinstall:
- $(MAKE) -C src/jsonrpc zipexampleinstall
-src/jsonrpc_zipdistinstall:
- $(MAKE) -C src/jsonrpc zipdistinstall
-src/jsonrpc_clean:
- $(MAKE) -C src/jsonrpc clean
-src/jsonrpc_distclean:
- $(MAKE) -C src/jsonrpc distclean
-src/jsonrpc_cleanall:
- $(MAKE) -C src/jsonrpc cleanall
-src/jsonrpc_info:
- $(MAKE) -C src/jsonrpc info
-src/jsonrpc_makefiles:
- $(MAKE) -C src/jsonrpc makefiles
-src/jsonrpc:
- $(MAKE) -C src/jsonrpc all
-.PHONY: src/jsonrpc_all src/jsonrpc_debug src/jsonrpc_smart src/jsonrpc_release src/jsonrpc_units src/jsonrpc_examples src/jsonrpc_shared src/jsonrpc_install src/jsonrpc_sourceinstall src/jsonrpc_exampleinstall src/jsonrpc_distinstall src/jsonrpc_zipinstall src/jsonrpc_zipsourceinstall src/jsonrpc_zipexampleinstall src/jsonrpc_zipdistinstall src/jsonrpc_clean src/jsonrpc_distclean src/jsonrpc_cleanall src/jsonrpc_info src/jsonrpc_makefiles src/jsonrpc
-endif
-all: $(addsuffix _all,$(TARGET_DIRS))
-debug: $(addsuffix _debug,$(TARGET_DIRS))
-smart: $(addsuffix _smart,$(TARGET_DIRS))
-release: $(addsuffix _release,$(TARGET_DIRS))
-units: $(addsuffix _units,$(TARGET_DIRS))
-examples: $(addsuffix _examples,$(TARGET_DIRS))
-shared: $(addsuffix _shared,$(TARGET_DIRS))
-install: fpc_install $(addsuffix _install,$(TARGET_DIRS))
+units:
+examples:
+shared:
sourceinstall: fpc_sourceinstall
-exampleinstall: fpc_exampleinstall $(addsuffix _exampleinstall,$(TARGET_DIRS))
+exampleinstall: fpc_exampleinstall
distinstall: fpc_distinstall
zipinstall: fpc_zipinstall
zipsourceinstall: fpc_zipsourceinstall
-zipexampleinstall: fpc_zipexampleinstall $(addsuffix _zipexampleinstall,$(TARGET_DIRS))
+zipexampleinstall: fpc_zipexampleinstall
zipdistinstall: fpc_zipdistinstall
+distclean:
+cleanall:
info: fpc_info
makefiles: fpc_makefiles
-.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall info makefiles
+.PHONY: units examples shared sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall distclean cleanall info makefiles
ifneq ($(wildcard fpcmake.loc),)
include fpcmake.loc
endif
-.NOTPARALLEL:
-distclean: $(addsuffix _distclean,$(TARGET_DIRS)) fpc_distclean
-clean: $(addsuffix _clean,$(TARGET_DIRS)) fpc_clean
-cleanall: $(addsuffix _cleanall,$(TARGET_DIRS)) fpc_cleanall
+$(COMPILER_UNITTARGETDIR):
+ $(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+fpmake: $(COMPILER_UNITTARGETDIR) fpmake.pp
+ $(FPC) fpmake.pp $(FPCOPT)
+all: fpmake
+ $(LOCALFPMAKE) build --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC)
+smart: fpmake
+ $(LOCALFPMAKE) build --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -o "-XX -CX"
+release: fpmake
+ $(LOCALFPMAKE) build --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -o "-dRELEASE"
+debug: fpmake
+ $(LOCALFPMAKE) build --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -o "-dDEBUG"
+clean:
+ $(FPMAKE_BIN_CLEAN) clean --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC)
+install: fpmake
+ $(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_PREFIX)
diff --git a/packages/fcl-web/Makefile.fpc b/packages/fcl-web/Makefile.fpc
index 8325fa92ad..d99a1e9fc2 100644
--- a/packages/fcl-web/Makefile.fpc
+++ b/packages/fcl-web/Makefile.fpc
@@ -6,25 +6,43 @@
name=fcl-web
version=2.5.1
-[target]
-dirs=src/base src/webdata src/jsonrpc
-
[require]
-packages=fcl-base fcl-xml fcl-db fcl-json fcl-net fcl-process
-
-[compiler]
-options=-S2h
-
-[install]
-fpcpackage=y
+packages=rtl fpmkunit
[default]
fpcdir=../..
-[rules]
-.NOTPARALLEL:
-distclean: $(addsuffix _distclean,$(TARGET_DIRS)) fpc_distclean
-clean: $(addsuffix _clean,$(TARGET_DIRS)) fpc_clean
-cleanall: $(addsuffix _cleanall,$(TARGET_DIRS)) fpc_cleanall
+[prerules]
+# If no fpmake exists and clean is called, do not try to build fpmake, it will
+# most often fail because the dependencies are cleared. So simply skip the
+# clean by replacing the command with 'echo'
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
+ifeq ($(FPMAKE_BIN_CLEAN),)
+FPMAKE_BIN_CLEAN=$(ECHO)
+endif
+ifdef OS_TARGET
+FPC_TARGETOPT+=--os=$(OS_TARGET)
+endif
+ifdef CPU_TARGET
+FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
+endif
+LOCALFPMAKE=.$(PATHSEP)fpmake$(EXEEXT)
+[rules]
+$(COMPILER_UNITTARGETDIR):
+ $(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+fpmake: $(COMPILER_UNITTARGETDIR) fpmake.pp
+ $(FPC) fpmake.pp $(FPCOPT)
+all: fpmake
+ $(LOCALFPMAKE) build --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC)
+smart: fpmake
+ $(LOCALFPMAKE) build --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -o "-XX -CX"
+release: fpmake
+ $(LOCALFPMAKE) build --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -o "-dRELEASE"
+debug: fpmake
+ $(LOCALFPMAKE) build --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) -o "-dDEBUG"
+clean:
+ $(FPMAKE_BIN_CLEAN) clean --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC)
+install: fpmake
+ $(LOCALFPMAKE) install --localunitdir=../.. --globalunitdir=.. $(FPC_TARGETOPT) $(addprefix -o ,$(FPCOPT)) --compiler=$(FPC) --prefix=$(INSTALL_PREFIX)
diff --git a/packages/fcl-web/Makefile.org b/packages/fcl-web/Makefile.org
new file mode 100644
index 0000000000..8325fa92ad
--- /dev/null
+++ b/packages/fcl-web/Makefile.org
@@ -0,0 +1,30 @@
+#
+# Makefile.fpc for TDataSet for FCL
+#
+
+[package]
+name=fcl-web
+version=2.5.1
+
+[target]
+dirs=src/base src/webdata src/jsonrpc
+
+[require]
+packages=fcl-base fcl-xml fcl-db fcl-json fcl-net fcl-process
+
+[compiler]
+options=-S2h
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[rules]
+.NOTPARALLEL:
+distclean: $(addsuffix _distclean,$(TARGET_DIRS)) fpc_distclean
+clean: $(addsuffix _clean,$(TARGET_DIRS)) fpc_clean
+cleanall: $(addsuffix _cleanall,$(TARGET_DIRS)) fpc_cleanall
+
+
diff --git a/packages/fcl-web/examples/combined/combined.html b/packages/fcl-web/examples/combined/combined.html
new file mode 100644
index 0000000000..377a592a90
--- /dev/null
+++ b/packages/fcl-web/examples/combined/combined.html
@@ -0,0 +1,20 @@
+<html>
+<head>
+<title>ExtJS application demo</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="combined.cgi/Login/API"></script>
+<script src="login.js"></script>
+<script>
+Ext.onReady(function() {
+ // API is registered under FPWeb by default.
+ Ext.Direct.addProvider(FPWeb);
+ fpWeb.login=new fpWeb.LoginForm({});
+ fpWeb.login.show();
+});
+</script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/combined/combined.ico b/packages/fcl-web/examples/combined/combined.ico
new file mode 100644
index 0000000000..0341321b5d
--- /dev/null
+++ b/packages/fcl-web/examples/combined/combined.ico
Binary files differ
diff --git a/packages/fcl-web/examples/combined/combined.ini b/packages/fcl-web/examples/combined/combined.ini
new file mode 100644
index 0000000000..4220bcf27d
--- /dev/null
+++ b/packages/fcl-web/examples/combined/combined.ini
@@ -0,0 +1,4 @@
+[Database]
+Path=/home/firebird/combined.fb
+UserName=WISASOFT
+Password=SysteemD
diff --git a/packages/fcl-web/examples/combined/combined.lpi b/packages/fcl-web/examples/combined/combined.lpi
new file mode 100644
index 0000000000..beb1bbc61e
--- /dev/null
+++ b/packages/fcl-web/examples/combined/combined.lpi
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>
+<CONFIG>
+ <ProjectOptions>
+ <Version Value="9"/>
+ <General>
+ <Flags>
+ <SaveOnlyProjectUnits Value="True"/>
+ <MainUnitHasCreateFormStatements Value="False"/>
+ <Runnable Value="False"/>
+ </Flags>
+ <SessionStorage Value="InProjectDir"/>
+ <MainUnit Value="0"/>
+ <Title Value="Combined RPC/Webdata example"/>
+ <ResourceType Value="res"/>
+ <UseXPManifest Value="True"/>
+ <Icon Value="0"/>
+ </General>
+ <i18n>
+ <EnableI18N LFM="False"/>
+ </i18n>
+ <VersionInfo>
+ <StringTable ProductVersion=""/>
+ </VersionInfo>
+ <BuildModes Count="1">
+ <Item1 Name="Default" Default="True"/>
+ </BuildModes>
+ <PublishOptions>
+ <Version Value="2"/>
+ <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
+ <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/>
+ </PublishOptions>
+ <RunParams>
+ <local>
+ <FormatVersion Value="1"/>
+ <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
+ </local>
+ </RunParams>
+ <RequiredPackages Count="5">
+ <Item1>
+ <PackageName Value="SQLDBLaz"/>
+ <MinVersion Major="1" Release="1" Valid="True"/>
+ </Item1>
+ <Item2>
+ <PackageName Value="lazwebextra"/>
+ <MinVersion Minor="9" Valid="True"/>
+ </Item2>
+ <Item3>
+ <PackageName Value="WebLaz"/>
+ </Item3>
+ <Item4>
+ <PackageName Value="LCL"/>
+ </Item4>
+ <Item5>
+ <PackageName Value="FCL"/>
+ </Item5>
+ </RequiredPackages>
+ <Units Count="5">
+ <Unit0>
+ <Filename Value="combined.lpr"/>
+ <IsPartOfProject Value="True"/>
+ <UnitName Value="combined"/>
+ </Unit0>
+ <Unit1>
+ <Filename Value="wmlogin.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="SessionManagement"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmlogin"/>
+ </Unit1>
+ <Unit2>
+ <Filename Value="wmusers.pp"/>
+ <IsPartOfProject Value="True"/>
+ <ComponentName Value="CombinedModule"/>
+ <HasResources Value="True"/>
+ <ResourceBaseClass Value="DataModule"/>
+ <UnitName Value="wmusers"/>
+ </Unit2>
+ <Unit3>
+ <Filename Value="login.js"/>
+ <IsPartOfProject Value="True"/>
+ </Unit3>
+ <Unit4>
+ <Filename Value="users.js"/>
+ <IsPartOfProject Value="True"/>
+ </Unit4>
+ </Units>
+ </ProjectOptions>
+ <CompilerOptions>
+ <Version Value="10"/>
+ <Target>
+ <Filename Value="combined.cgi"/>
+ </Target>
+ <SearchPaths>
+ <IncludeFiles Value="$(ProjOutDir)"/>
+ </SearchPaths>
+ <Other>
+ <CompilerMessages>
+ <UseMsgFile Value="True"/>
+ </CompilerMessages>
+ <CompilerPath Value="$(CompPath)"/>
+ </Other>
+ </CompilerOptions>
+ <Debugging>
+ <Exceptions Count="3">
+ <Item1>
+ <Name Value="EAbort"/>
+ </Item1>
+ <Item2>
+ <Name Value="ECodetoolError"/>
+ </Item2>
+ <Item3>
+ <Name Value="EFOpenError"/>
+ </Item3>
+ </Exceptions>
+ </Debugging>
+</CONFIG>
diff --git a/packages/fcl-web/examples/combined/combined.lpr b/packages/fcl-web/examples/combined/combined.lpr
new file mode 100644
index 0000000000..a1450e60c6
--- /dev/null
+++ b/packages/fcl-web/examples/combined/combined.lpr
@@ -0,0 +1,15 @@
+program combined;
+
+{$mode objfpc}{$H+}
+
+uses
+ fpCGI, wmusers, httpdefs, websession,wmlogin;
+
+{$R *.res}
+
+begin
+ Application.Title:='Combined RPC/Webdata example';
+ Application.Initialize;
+ Application.Run;
+end.
+
diff --git a/packages/fcl-web/examples/combined/combined.res b/packages/fcl-web/examples/combined/combined.res
new file mode 100644
index 0000000000..7c6cf3e4be
--- /dev/null
+++ b/packages/fcl-web/examples/combined/combined.res
Binary files differ
diff --git a/packages/fcl-web/examples/combined/combined.sql b/packages/fcl-web/examples/combined/combined.sql
new file mode 100644
index 0000000000..e5b4c595aa
--- /dev/null
+++ b/packages/fcl-web/examples/combined/combined.sql
@@ -0,0 +1,11 @@
+CREATE TABLE USERS (
+ U_ID BIGINT NOT NULL,
+ U_LOGIN VARCHAR(40) NOT NULL,
+ U_NAME VARCHAR(30) NOT NULL,
+ U_EMAIL VARCHAR(100),
+ U_PASSWORD VARCHAR(100) NOT NULL,
+ CONSTRAINT PK_FPCUSERS PRIMARY KEY (U_ID),
+ CONSTRAINT U_USERNAME UNIQUE (U_LOGIN)
+);
+
+ \ No newline at end of file
diff --git a/packages/fcl-web/examples/combined/login.js b/packages/fcl-web/examples/combined/login.js
new file mode 100644
index 0000000000..8d78375d30
--- /dev/null
+++ b/packages/fcl-web/examples/combined/login.js
@@ -0,0 +1,105 @@
+Ext.ns("fpWeb");
+fpWeb.LoginForm = Ext.extend (Ext.Window, {
+ /* Control references */
+ blogin : null,
+ eusername : null,
+ epassword : null,
+ plock : null,
+ fform : null,
+ /* Callbacks */
+ OnLogin : function (Provider,Response) {
+ if (!Ext.isEmpty(Response.error)) {
+ Ext.Msg.show({
+ title : 'Login failed',
+ msg : 'An error occurred during login: '+Response.error.message+'. Please try again.',
+ icon : Ext.Msg.ERROR,
+ buttons : Ext.Msg.OK
+ });
+ } else if (Response.result > 0) {
+ // here code to switch to data editing
+ window.location='users.html';
+/*
+ Ext.Msg.show({
+ title : 'Login OK',
+ msg : 'Your username/pasword was accepted. We will now proceed to the editing form',
+ icon : Ext.Msg.ERROR,
+ buttons : Ext.Msg.OK
+ });
+*/
+ } else {
+ Ext.Msg.show({
+ title : 'Login failed',
+ msg : 'Your username/pasword is incorrect. Please try again.',
+ icon : Ext.Msg.ERROR,
+ buttons : Ext.Msg.OK
+ });
+ }
+ },
+ loginbuttonclick : function (sender) {
+ SessionManagement.Login(this.eusername.getValue(), this.epassword.getValue(),this.OnLogin.createDelegate(this));
+ },
+ focususer : function () {
+ this.eusername.focus();
+ },
+ /* Build the actual form */
+ constructor : function (config) {
+ this.eusername = new Ext.form.TextField({
+ name:"user",
+ fieldLabel:"Login",
+ inputType:"text"
+ });
+ this.epassword = new Ext.form.TextField({
+ name:"pass",
+ fieldLabel:"Password",
+ inputType:"password"
+ });
+ this.blogin = new Ext.Button({
+ text:"Login",
+ handler : this.loginbuttonclick,
+ scope : this
+ });
+ this.fform = new Ext.form.FormPanel({
+ width: 350,
+ labelWidth:150,
+ border:false,
+ xtype: "form",
+ buttonAlign: "right",
+ bodyStyle: "padding: 10px 15px",
+ defaultType: "textfield",
+ defaults: {width: 150},
+ items: [this.eusername,this.epassword],
+ buttons:[this.blogin],
+ keys: {key: Ext.EventObject.ENTER,
+ handler: function(){
+ this.blogin.focus();
+ },
+ scope: this
+ }
+ });
+ this.plock = new Ext.Panel({
+ border:false,
+ html:"<img src='login.png' width=114 height=128/>",
+ width:114,
+ height:128
+ });
+ Ext.apply(config, {
+ title: "Login",
+ width: 500,
+ height: 200,
+ plain: true,
+ layout: "hbox",
+ defaultButton: this.eusername,
+ layoutConfig: {
+ align : "middle",
+ pack: "center"
+ },
+ closable: false,
+ listeners: {
+ 'show' : { fn: this.focususer.createDelegate(this) }
+ },
+ items: [ this.fform, this.plock ]
+ });
+ fpWeb.LoginForm.superclass.constructor.call(this,config);
+ } /* constructor*/
+});
+
diff --git a/packages/fcl-web/examples/combined/login.png b/packages/fcl-web/examples/combined/login.png
new file mode 100644
index 0000000000..e1a2633df2
--- /dev/null
+++ b/packages/fcl-web/examples/combined/login.png
Binary files differ
diff --git a/packages/fcl-web/examples/combined/users.html b/packages/fcl-web/examples/combined/users.html
new file mode 100644
index 0000000000..ea47d6f45d
--- /dev/null
+++ b/packages/fcl-web/examples/combined/users.html
@@ -0,0 +1,18 @@
+<html>
+<head>
+<title>Edit users in database</title>
+<link rel="stylesheet" type="text/css" href="/ext/resources/css/ext-all.css"/>
+<script src="/ext/adapter/ext/ext-base.js"></script>
+<script src="/ext/ext-all-debug.js"></script>
+<script src="combined.cgi/Login/API"></script>
+<script src="users.js"></script>
+<script>
+Ext.onReady(function() {
+ // API is registered under FPWeb by default.
+ Ext.Direct.addProvider(FPWeb);
+});
+</script>
+</head>
+<body>
+</body>
+</html> \ No newline at end of file
diff --git a/packages/fcl-web/examples/combined/users.js b/packages/fcl-web/examples/combined/users.js
new file mode 100644
index 0000000000..063c2dca6f
--- /dev/null
+++ b/packages/fcl-web/examples/combined/users.js
@@ -0,0 +1,108 @@
+Ext.ns('fpWeb');
+
+fpWeb.ShowPage = function () {
+ var myproxy = new Ext.data.HttpProxy ( {
+ api : {
+ read: "combined.cgi/Provider/Users/Read/",
+ update: "combined.cgi/Provider/Users/Update/",
+ create: "combined.cgi/Provider/Users/Insert/",
+ destroy: "combined.cgi/Provider/Users/Delete/"
+ }
+ });
+ var myreader = new Ext.data.JsonReader ({
+ root: "rows",
+ successProperty : 'success',
+ idProperty: "U_ID",
+ messageProperty: 'message', // Must be specified here
+ fields: ["U_ID","U_LOGIN","U_NAME","U_EMAIL", "U_PASSWORD"]
+ });
+ var mywriter = new Ext.data.JsonWriter({
+ encode: true,
+ writeAllFields: true,
+ idProperty: "U_ID"
+ });
+ var data = new Ext.data.Store({
+ proxy: myproxy,
+ reader: myreader,
+ writer: mywriter,
+ autoSave: false,
+ idProperty: "U_ID",
+ });
+ // Listen to errors.
+ data.addListener('exception', function(proxy, type, action, options, res) {
+ if (type === 'remote') {
+ Ext.Msg.show({
+ title: 'REMOTE EXCEPTION',
+ msg: res.message,
+ icon: Ext.MessageBox.ERROR,
+ buttons: Ext.Msg.OK
+ });
+ }
+ });
+ data.load({ params:{start: 0, limit: 30}});
+ var grid = new Ext.grid.EditorGridPanel({
+ renderTo: Ext.getBody(),
+ frame: true,
+ title: "Known users",
+ height: 600,
+ width: 800,
+ store: data,
+ columns: [
+ {header: 'ID', dataIndex: "U_ID", sortable: true, hidden: true},
+ {header: 'Login', dataIndex: "U_LOGIN", sortable: true, editor: new Ext.form.TextField({allowBlank: false})},
+ {header: 'Name', dataIndex: "U_NAME", sortable: true, editor: new Ext.form.TextField({allowBlank: false}), width : 200},
+ {header: 'Email', dataIndex: "U_EMAIL", sortable: true, editor: new Ext.form.TextField({allowBlank: false}), width : 200},
+ {header: 'Password', dataIndex: "U_PASSWORD", sortable: true, editor: new Ext.form.TextField()},
+ ],
+ bbar: new Ext.PagingToolbar({
+ pageSize: 30,
+ store: data,
+ displayInfo: true
+ }),
+ tbar : [{
+ text: 'Add',
+ iconCls: 'icon-add',
+ handler: function(btn, ev) {
+ var u = new grid.store.recordType();
+ grid.stopEditing();
+ grid.store.insert(0, u);
+ grid.startEditing(0, 1);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Delete',
+ iconCls: 'icon-delete',
+ handler: function(btn, ev) {
+ var index = grid.getSelectionModel().getSelectedCell();
+ if (!index) {
+ return false;
+ }
+ var rec = grid.store.getAt(index[0]);
+ grid.store.remove(rec);
+ },
+ scope: grid
+ }, '-', {
+ text: 'Save',
+ iconCls: 'icon-save',
+ handler: function(btn, ev) {
+ grid.store.save();
+ },
+ scope: grid
+ },'->', {
+ text: 'Log out',
+ iconCls: 'logout',
+ handler: function () {
+ SessionManagement.Logout(function (provider,response) {
+ if (response.result=='Bye') {
+ window.location='combined.html';
+ }
+ });
+ }
+ }
+ ]
+ // F.ContentToStream(M);
+
+ });
+ grid.show();
+}
+Ext.onReady(fpWeb.ShowPage);
diff --git a/packages/fcl-web/examples/combined/users.sql b/packages/fcl-web/examples/combined/users.sql
new file mode 100644
index 0000000000..daec6fb64d
--- /dev/null
+++ b/packages/fcl-web/examples/combined/users.sql
@@ -0,0 +1,15 @@
+CREATE TABLE USERS (
+U_ID BIGINT Not Null ,
+U_LOGIN VARCHAR(40) Not Null,
+U_NAME VARCHAR(30) Not Null,
+U_EMAIL VARCHAR(100),
+U_PASSWORD VARCHAR(100) Not Null,
+CONSTRAINT PK_FPCUSERS Primary key (U_ID),
+CONSTRAINT U_USERNAME Unique key (U_LOGIN)
+);
+
+COMMIT;
+
+CREATE GENERATOR GEN_USERS;
+
+COMMIT;
diff --git a/packages/fcl-web/examples/combined/wmlogin.lfm b/packages/fcl-web/examples/combined/wmlogin.lfm
new file mode 100644
index 0000000000..e41c9d2bc0
--- /dev/null
+++ b/packages/fcl-web/examples/combined/wmlogin.lfm
@@ -0,0 +1,76 @@
+object SessionManagement: TSessionManagement
+ OnCreate = DataModuleCreate
+ OldCreateOrder = False
+ DispatchOptions = [jdoSearchRegistry, jdoSearchOwner, jdoJSONRPC1, jdoJSONRPC2, jdoNotifications]
+ APIPath = 'API'
+ RouterPath = 'router'
+ Height = 200
+ HorizontalOffset = 582
+ VerticalOffset = 455
+ Width = 295
+ object Login: TJSONRPCHandler
+ OnExecute = LoginExecute
+ Options = []
+ ParamDefs = <
+ item
+ Name = 'UserName'
+ end
+ item
+ Name = 'Password'
+ end>
+ left = 24
+ top = 24
+ end
+ object IBConnection1: TIBConnection
+ Connected = False
+ LoginPrompt = False
+ KeepConnection = False
+ Transaction = SQLTransaction1
+ LogEvents = []
+ left = 24
+ top = 117
+ end
+ object SQLTransaction1: TSQLTransaction
+ Active = False
+ Action = caNone
+ Database = IBConnection1
+ left = 26
+ top = 72
+ end
+ object QAuthenticate: TSQLQuery
+ AutoCalcFields = False
+ Database = IBConnection1
+ Transaction = SQLTransaction1
+ ReadOnly = False
+ SQL.Strings = (
+ 'SELECT'
+ ' U_ID, U_NAME'
+ 'From'
+ ' USERS'
+ 'WHERE'
+ ' (U_LOGIN = :LOGIN)'
+ ' AND (U_PASSWORD=:PASSWORD);'
+ ''
+ )
+ Params = <
+ item
+ DataType = ftUnknown
+ Name = 'LOGIN'
+ ParamType = ptUnknown
+ end
+ item
+ DataType = ftUnknown
+ Name = 'PASSWORD'
+ ParamType = ptUnknown
+ end>
+ left = 128
+ top = 117
+ end
+ object Logout: TJSONRPCHandler
+ OnExecute = LogoutExecute
+ Options = []
+ ParamDefs = <>
+ left = 120
+ top = 16
+ end
+end
diff --git a/packages/fcl-web/examples/combined/wmlogin.pp b/packages/fcl-web/examples/combined/wmlogin.pp
new file mode 100644
index 0000000000..671dedcd27
--- /dev/null
+++ b/packages/fcl-web/examples/combined/wmlogin.pp
@@ -0,0 +1,129 @@
+unit wmlogin;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, HTTPDefs, websession, fpHTTP, fpWeb, fpjsonrpc,
+ fpjson, IBConnection, sqldb, webjsonrpc, fpextdirect, sqldbwebdata;
+
+type
+
+ { TSessionManagement }
+
+ TSessionManagement = class(TExtDirectModule)
+ IBConnection1: TIBConnection;
+ Logout: TJSONRPCHandler;
+ Login: TJSONRPCHandler;
+ SessionManagement: TJSONRPCHandler;
+ QAuthenticate: TSQLQuery;
+ SQLTransaction1: TSQLTransaction;
+ procedure DataModuleCreate(Sender: TObject);
+ procedure LoginExecute(Sender: TObject; const Params: TJSONData;
+ out Res: TJSONData);
+ procedure LogoutExecute(Sender: TObject; const Params: TJSONData;
+ out Res: TJSONData);
+ private
+ function AuthenticateUser(AUsername, APassword: String): Integer;
+ procedure DoOnNewSession(Sender: TObject);
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ SessionManagement: TSessionManagement;
+
+implementation
+
+uses inifiles;
+
+{$R *.lfm}
+
+{ TSessionManagement }
+
+function TSessionManagement.AuthenticateUser(AUsername,APassword : String) : Integer;
+
+begin
+ With QAuthenticate do
+ begin
+ ParamByName('Login').AsString:=AUserName;
+ ParamByName('Password').AsString:=APassword;
+ Open;
+ try
+ if (EOF and BOF) then
+ Result:=-1
+ else
+ begin
+ Result:=FieldByName('U_ID').AsInteger;
+ Session.Variables['UserName']:=FieldByName('U_NAME').AsString;
+ end;
+ Session.Variables['UserID']:=IntToStr(Result);
+ finally
+ Close;
+ end;
+ end;
+end;
+
+procedure TSessionManagement.LoginExecute(Sender: TObject;
+ const Params: TJSONData; out Res: TJSONData);
+
+Var
+ A : TJSONArray ;
+ AUserName,APassword : String;
+begin
+ A:=Params as TJSONArray;
+ AUserName:=A.Strings[0];
+ APassword:=A.Strings[1];
+ Res:=TJSONIntegerNumber.Create(AuthenticateUser(AUsername,APassword));
+end;
+
+procedure TSessionManagement.LogoutExecute(Sender: TObject;
+ const Params: TJSONData; out Res: TJSONData);
+begin
+ // To be sure
+ Session.Variables['UserID']:='-1';
+ Session.Terminate;
+ // A result must always be sent back.
+ Res:=TJSONString.Create('Bye');
+end;
+
+procedure TSessionManagement.DoOnNewSession(Sender : TObject);
+
+begin
+ // The cookies must all originate from the same path, otherwise the 2 datamodules will use a different session.
+ (Sender as TFPWebSession).SessionCookiePath:='/';
+end;
+
+procedure TSessionManagement.DataModuleCreate(Sender: TObject);
+Var
+ FN : String;
+ Ini : TMemIniFile;
+
+begin
+ // The following 2 statements are needed because the 2 properties are (currently) not published.
+ OnNewSession:=@DoOnNewSession;
+ CreateSession:=True;
+ FN:=ChangeFileExt(Paramstr(0),'.ini');
+ If FileExists(FN) then
+ begin
+ Ini:=TMemIniFile.Create(FN);
+ try
+ With IBConnection1 do
+ begin
+ DatabaseName:=Ini.ReadString('Database','Path',DatabaseName);
+ UserName:=Ini.ReadString('Database','UserName',UserName);
+ Password:=Ini.ReadString('Database','Password',Password);
+ end;
+ finally
+ Ini.Free;
+ end;
+ end;
+ IBConnection1.Connected:=True;
+end;
+
+initialization
+ RegisterHTTPModule('Login', TSessionManagement);
+end.
+
diff --git a/packages/fcl-web/examples/combined/wmusers.lfm b/packages/fcl-web/examples/combined/wmusers.lfm
new file mode 100644
index 0000000000..15f6dcad02
--- /dev/null
+++ b/packages/fcl-web/examples/combined/wmusers.lfm
@@ -0,0 +1,94 @@
+object CombinedModule: TCombinedModule
+ OnCreate = DataModuleCreate
+ OldCreateOrder = False
+ InputAdaptor = ProviderInputAdaptor
+ ContentProducer = ProviderFormatter
+ OnGetContentProducer = DataModuleGetContentProducer
+ OnGetInputAdaptor = DataModuleGetInputAdaptor
+ OnNewSession = DataModuleNewSession
+ Height = 300
+ HorizontalOffset = 635
+ VerticalOffset = 230
+ Width = 400
+ object ProviderFormatter: TExtJSJSONDataFormatter
+ AllowPageSize = False
+ BeforeDataToJSON = ProviderFormatterBeforeDataToJSON
+ BeforeUpdate = ProviderFormatterBeforeUpdate
+ BeforeInsert = ProviderFormatterBeforeInsert
+ BeforeDelete = ProviderFormatterBeforeDelete
+ left = 272
+ top = 72
+ end
+ object Users: TSQLDBWebDataProvider
+ SelectSQL.Strings = (
+ 'SELECT FIRST :limit SKIP :start U_ID, U_NAME, U_LOGIN, U_PASSWORD, U_EMAIL FROM USERS'
+ )
+ UpdateSQL.Strings = (
+ 'UPDATE USERS SET'
+ ' U_NAME=:U_NAME,'
+ ' U_LOGIN=:U_LOGIN,'
+ ' U_EMAIL=:U_EMAIL,'
+ ' U_PASSWORD=:U_PASSWORD'
+ 'WHERE'
+ ' (U_ID=:U_ID)'
+ )
+ DeleteSQL.Strings = (
+ 'DELETE FROM USERS WHERE (U_ID=:ID)'
+ )
+ InsertSQL.Strings = (
+ 'INSERT INTO USERS'
+ '(U_ID, U_LOGIN, U_NAME, U_EMAIL, U_PASSWORD)'
+ 'VALUES'
+ '(:U_ID, :U_LOGIN, :U_NAME, :U_EMAIL, :U_PASSWORD)'
+ )
+ Connection = IBConnection1
+ IDFieldName = 'U_ID'
+ OnGetNewID = UsersGetNewID
+ Options = []
+ Params = <
+ item
+ DataType = ftUnknown
+ Name = 'limit'
+ ParamType = ptUnknown
+ end
+ item
+ DataType = ftUnknown
+ Name = 'start'
+ ParamType = ptUnknown
+ end>
+ left = 32
+ top = 72
+ end
+ object IBConnection1: TIBConnection
+ Connected = False
+ LoginPrompt = False
+ KeepConnection = False
+ Transaction = SQLTransaction1
+ LogEvents = []
+ left = 32
+ top = 16
+ end
+ object QGetID: TSQLQuery
+ AutoCalcFields = False
+ Database = IBConnection1
+ Transaction = SQLTransaction1
+ ReadOnly = False
+ SQL.Strings = (
+ 'SELECT GEN_ID(GEN_USERS,1) AS THEID FROM RDB$DATABASE'
+ )
+ Params = <>
+ left = 32
+ top = 128
+ end
+ object SQLTransaction1: TSQLTransaction
+ Active = False
+ Action = caNone
+ Database = IBConnection1
+ left = 144
+ top = 16
+ end
+ object ProviderInputAdaptor: TExtJSJSonWebdataInputAdaptor
+ left = 272
+ top = 16
+ end
+end
diff --git a/packages/fcl-web/examples/combined/wmusers.lrs b/packages/fcl-web/examples/combined/wmusers.lrs
new file mode 100644
index 0000000000..7d7cb7082d
--- /dev/null
+++ b/packages/fcl-web/examples/combined/wmusers.lrs
@@ -0,0 +1,35 @@
+{ This is an automatically generated lazarus resource file }
+
+LazarusResources.Add('TCombinedModule','FORMDATA',[
+ 'TPF0'#15'TCombinedModule'#14'CombinedModule'#8'OnCreate'#7#16'DataModuleCrea'
+ +'te'#14'OldCreateOrder'#8#12'InputAdaptor'#7#20'ProviderInputAdaptor'#15'Con'
+ +'tentProducer'#7#17'ProviderFormatter'#20'OnGetContentProducer'#7#28'DataMod'
+ +'uleGetContentProducer'#17'OnGetInputAdaptor'#7#25'DataModuleGetInputAdaptor'
+ +#12'OnNewSession'#7#20'DataModuleNewSession'#6'Height'#3','#1#16'HorizontalO'
+ +'ffset'#3'{'#2#14'VerticalOffset'#3#230#0#5'Width'#3#144#1#0#23'TExtJSJSONDa'
+ +'taFormatter'#17'ProviderFormatter'#13'AllowPageSize'#8#16'BeforeDataToJSON'
+ +#7'!ProviderFormatterBeforeDataToJSON'#12'BeforeUpdate'#7#29'ProviderFormatt'
+ +'erBeforeUpdate'#12'BeforeInsert'#7#29'ProviderFormatterBeforeInsert'#12'Bef'
+ +'oreDelete'#7#29'ProviderFormatterBeforeDelete'#4'left'#3#16#1#3'top'#2'H'#0
+ +#0#21'TSQLDBWebDataProvider'#5'Users'#17'SelectSQL.Strings'#1#6'USELECT FIRS'
+ +'T :limit SKIP :start U_ID, U_NAME, U_LOGIN, U_PASSWORD, U_EMAIL FROM USERS'
+ +#0#17'UpdateSQL.Strings'#1#6#16'UPDATE USERS SET'#6#17' U_NAME=:U_NAME,'#6
+ +#19' U_LOGIN=:U_LOGIN,'#6#19' U_EMAIL=:U_EMAIL,'#6#24' U_PASSWORD=:U_PASS'
+ +'WORD'#6#5'WHERE'#6#14' (U_ID=:U_ID)'#0#17'DeleteSQL.Strings'#1#6'"DELETE F'
+ +'ROM USERS WHERE (U_ID=:ID)'#0#17'InsertSQL.Strings'#1#6#17'INSERT INTO USER'
+ +'S'#6',(U_ID, U_LOGIN, U_NAME, U_EMAIL, U_PASSWORD)'#6#6'VALUES'#6'1(:U_ID, '
+ +':U_LOGIN, :U_NAME, :U_EMAIL, :U_PASSWORD)'#0#10'Connection'#7#13'IBConnecti'
+ +'on1'#11'IDFieldName'#6#4'U_ID'#10'OnGetNewID'#7#13'UsersGetNewID'#7'Options'
+ +#11#0#6'Params'#14#1#8'DataType'#7#9'ftUnknown'#4'Name'#6#5'limit'#9'ParamTy'
+ +'pe'#7#9'ptUnknown'#0#1#8'DataType'#7#9'ftUnknown'#4'Name'#6#5'start'#9'Para'
+ +'mType'#7#9'ptUnknown'#0#0#4'left'#2' '#3'top'#2'H'#0#0#13'TIBConnection'#13
+ +'IBConnection1'#9'Connected'#8#11'LoginPrompt'#8#14'KeepConnection'#8#11'Tra'
+ +'nsaction'#7#15'SQLTransaction1'#9'LogEvents'#11#0#4'left'#2' '#3'top'#2#16#0
+ +#0#9'TSQLQuery'#6'QGetID'#14'AutoCalcFields'#8#8'Database'#7#13'IBConnection'
+ +'1'#11'Transaction'#7#15'SQLTransaction1'#8'ReadOnly'#8#11'SQL.Strings'#1#6
+ +'6SELECT GEN_ID(GEN_USERS,1) AS THEID FROM RDB$DATABASE'#0#6'Params'#14#0#4
+ +'left'#2' '#3'top'#3#128#0#0#0#15'TSQLTransaction'#15'SQLTransaction1'#6'Act'
+ +'ive'#8#6'Action'#7#6'caNone'#8'Database'#7#13'IBConnection1'#4'left'#3#144#0
+ +#3'top'#2#16#0#0#29'TExtJSJSonWebdataInputAdaptor'#20'ProviderInputAdaptor'#4
+ +'left'#3#16#1#3'top'#2#16#0#0#0
+]);
diff --git a/packages/fcl-web/examples/combined/wmusers.pp b/packages/fcl-web/examples/combined/wmusers.pp
new file mode 100644
index 0000000000..752b03af52
--- /dev/null
+++ b/packages/fcl-web/examples/combined/wmusers.pp
@@ -0,0 +1,145 @@
+unit wmusers;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+ Classes, SysUtils, FileUtil, LResources, HTTPDefs, websession, fpHTTP, fpWeb,
+ IBConnection, sqldb, fpwebdata, fpjson, extjsjson, extjsxml, sqldbwebdata;
+
+type
+
+ { TCombinedModule }
+
+ TCombinedModule = class(TFPWebProviderDataModule)
+ ProviderFormatter: TExtJSJSONDataFormatter;
+ ProviderInputAdaptor: TExtJSJSonWebdataInputAdaptor;
+ IBConnection1: TIBConnection;
+ Users: TSQLDBWebDataProvider;
+ QGetID: TSQLQuery;
+ SQLTransaction1: TSQLTransaction;
+ procedure DataModuleNewSession(Sender: TObject);
+ procedure ProviderFormatterBeforeDataToJSON(Sender: TObject;
+ AObject: TJSONObject);
+ procedure ProviderFormatterBeforeDelete(Sender: TObject);
+ procedure ProviderFormatterBeforeInsert(Sender: TObject);
+ procedure ProviderFormatterBeforeUpdate(Sender: TObject);
+ procedure UsersGetNewID(Sender: TObject; out AID: String);
+ procedure DataModuleCreate(Sender: TObject);
+ procedure DataModuleGetContentProducer(Sender: TObject;
+ var AContentProducer: TCustomHTTPDataContentProducer);
+ procedure DataModuleGetInputAdaptor(Sender: TObject;
+ var AInputAdaptor: TCustomWebdataInputAdaptor);
+ private
+ procedure CheckLoggedIn;
+ { private declarations }
+ public
+ { public declarations }
+ end;
+
+var
+ CombinedModule: TCombinedModule;
+
+implementation
+
+uses inifiles;
+
+{ TCombinedModule }
+
+procedure TCombinedModule.DataModuleGetContentProducer(
+ Sender: TObject; var AContentProducer: TCustomHTTPDataContentProducer);
+begin
+end;
+
+procedure TCombinedModule.DataModuleCreate(Sender: TObject);
+
+Var
+ FN : String;
+ Ini : TMemIniFile;
+
+begin
+ // Not yet published.
+ CreateSession:=True;
+ FN:=ChangeFileExt(Paramstr(0),'.ini');
+ If FileExists(FN) then
+ begin
+ Ini:=TMemIniFile.Create(FN);
+ try
+ With IBConnection1 do
+ begin
+ DatabaseName:=Ini.ReadString('Database','Path',DatabaseName);
+ UserName:=Ini.ReadString('Database','UserName',UserName);
+ Password:=Ini.ReadString('Database','Password',Password);
+ end;
+ finally
+ Ini.Free;
+ end;
+ end;
+ IBConnection1.Connected:=True;
+end;
+
+procedure TCombinedModule.UsersGetNewID(Sender: TObject; out
+ AID: String);
+begin
+ With QGetID Do
+ begin
+ Close;
+ Open;
+ try
+ if (EOF and BOF) then
+ Raise Exception.Create('No ID generated');
+ AID:=Fields[0].AsString;
+ finally
+ Close;
+ end;
+ end;
+end;
+
+procedure TCombinedModule.CheckLoggedIn;
+
+begin
+ If StrToIntDef(Session.Variables['UserID'],-1)=-1 then
+ Raise Exception.Create('You must be logged in to see or modify data');
+end;
+procedure TCombinedModule.ProviderFormatterBeforeDataToJSON(
+ Sender: TObject; AObject: TJSONObject);
+begin
+ CheckLoggedIn;
+end;
+
+procedure TCombinedModule.DataModuleNewSession(Sender: TObject);
+begin
+ // The cookies must all originate from the same path, otherwise the 2 datamodules will use a different session.
+ (Sender as TFPWebSession).SessionCookiePath:='/';
+end;
+
+procedure TCombinedModule.ProviderFormatterBeforeDelete(
+ Sender: TObject);
+begin
+ CheckLoggedIn;
+end;
+
+procedure TCombinedModule.ProviderFormatterBeforeInsert(
+ Sender: TObject);
+begin
+ CheckLoggedIn;
+end;
+
+procedure TCombinedModule.ProviderFormatterBeforeUpdate(
+ Sender: TObject);
+begin
+ CheckLoggedIn;
+end;
+
+procedure TCombinedModule.DataModuleGetInputAdaptor(Sender: TObject;
+ var AInputAdaptor: TCustomWebdataInputAdaptor);
+begin
+end;
+
+initialization
+ {$I wmusers.lrs}
+
+ RegisterHTTPModule('Provider', TCombinedModule);
+end.
+
diff --git a/packages/fcl-web/fpmake.pp b/packages/fcl-web/fpmake.pp
index 6920f54124..7d3de265ed 100644
--- a/packages/fcl-web/fpmake.pp
+++ b/packages/fcl-web/fpmake.pp
@@ -25,6 +25,8 @@ begin
P.Dependencies.Add('fcl-process');
P.Dependencies.Add('fastcgi');
P.Dependencies.Add('httpd22');
+ // (Temporary) indirect dependencies, not detected by fpcmake:
+ P.Dependencies.Add('univint',[MacOSX]);
P.Author := 'FreePascal development team';
P.License := 'LGPL with modification, ';
diff --git a/packages/fcl-web/src/base/custfcgi.pp b/packages/fcl-web/src/base/custfcgi.pp
index 65660994fd..4be71d53f1 100644
--- a/packages/fcl-web/src/base/custfcgi.pp
+++ b/packages/fcl-web/src/base/custfcgi.pp
@@ -21,7 +21,13 @@ unit custfcgi;
Interface
uses
- Classes,SysUtils, httpdefs,custweb, custcgi, fastcgi;
+ Classes,SysUtils, httpdefs,
+{$ifdef unix}
+ BaseUnix, TermIO,
+{$else}
+ winsock2,
+{$endif}
+ Sockets, custweb, custcgi, fastcgi;
Type
{ TFCGIRequest }
@@ -29,7 +35,8 @@ Type
TFCGIRequest = Class;
TFCGIResponse = Class;
- TProtocolOption = (poNoPadding,poStripContentLength, poFailonUnknownRecord );
+ TProtocolOption = (poNoPadding,poStripContentLength, poFailonUnknownRecord,
+ poReuseAddress, poUseSelect );
TProtocolOptions = Set of TProtocolOption;
TUnknownRecordEvent = Procedure (ARequest : TFCGIRequest; AFCGIRecord: PFCGI_Header) Of Object;
@@ -60,9 +67,7 @@ Type
TFCGIResponse = Class(TCGIResponse)
private
- FNoPadding: Boolean;
FPO: TProtoColOptions;
- FStripCL: Boolean;
procedure Write_FCGIRecord(ARecord : PFCGI_Header);
Protected
Procedure DoSendHeaders(Headers : TStrings); override;
@@ -75,6 +80,8 @@ Type
Response : TFCgiResponse;
end;
+ { TFCgiHandler }
+
TFCgiHandler = class(TWebHandler)
Private
FOnUnknownRecord: TUnknownRecordEvent;
@@ -84,10 +91,14 @@ Type
FHandle : THandle;
Socket: longint;
FAddress: string;
+ FTimeOut,
FPort: integer;
function Read_FCGIRecord : PFCGI_Header;
+ function DataAvailable : Boolean;
protected
- function WaitForRequest(out ARequest : TRequest; out AResponse : TResponse) : boolean; override;
+ function ProcessRecord(AFCGI_Record: PFCGI_Header; out ARequest: TRequest; out AResponse: TResponse): boolean; virtual;
+ procedure SetupSocket(var IAddress: TInetSockAddr; var AddressLength: tsocklen); virtual;
+ function WaitForRequest(out ARequest : TRequest; out AResponse : TResponse) : boolean; override;
procedure EndRequest(ARequest : TRequest;AResponse : TResponse); override;
Public
constructor Create(AOwner: TComponent); override;
@@ -96,6 +107,7 @@ Type
property Address: string read FAddress write FAddress;
Property ProtocolOptions : TProtoColOptions Read FPO Write FPO;
Property OnUnknownRecord : TUnknownRecordEvent Read FOnUnknownRecord Write FOnUnknownRecord;
+ Property TimeOut : Integer Read FTimeOut Write FTimeOut;
end;
{ TCustomFCgiApplication }
@@ -126,14 +138,16 @@ ResourceString
SListenFailed = 'Failed to listen to port %d. Socket Error: %d';
SErrReadingSocket = 'Failed to read data from socket. Error: %d';
SErrReadingHeader = 'Failed to read FastCGI header. Read only %d bytes';
+ SErrWritingSocket = 'Failed to write data to socket. Error: %d';
Implementation
-uses
{$ifdef CGIDEBUG}
- dbugintf,
+uses
+ dbugintf;
{$endif}
- Sockets;
+
+
{$undef nosignal}
@@ -315,9 +329,13 @@ begin
P:=PByte(Arecord);
Repeat
BytesWritten := sockets.fpsend(TFCGIRequest(Request).Handle, P, BytesToWrite, NoSignalAttr);
+ If (BytesWritten<0) then
+ begin
+ // TODO : Better checking for closed connection, EINTR
+ Raise HTTPError.CreateFmt(SErrWritingSocket,[BytesWritten]);
+ end;
Inc(P,BytesWritten);
Dec(BytesToWrite,BytesWritten);
-// Assert(BytesWritten=BytesToWrite);
until (BytesToWrite=0) or (BytesWritten=0);
end;
@@ -346,15 +364,18 @@ begin
pl := 8-(cl mod 8);
ARespRecord:=nil;
Getmem(ARespRecord,8+cl+pl);
- FillChar(ARespRecord^,8+cl+pl,0);
- ARespRecord^.header.version:=FCGI_VERSION_1;
- ARespRecord^.header.reqtype:=FCGI_STDOUT;
- ARespRecord^.header.paddingLength:=pl;
- ARespRecord^.header.contentLength:=NtoBE(cl);
- ARespRecord^.header.requestId:=NToBE(TFCGIRequest(Request).RequestID);
- move(str[1],ARespRecord^.ContentData,cl);
- Write_FCGIRecord(PFCGI_Header(ARespRecord));
- Freemem(ARespRecord);
+ try
+ FillChar(ARespRecord^,8+cl+pl,0);
+ ARespRecord^.header.version:=FCGI_VERSION_1;
+ ARespRecord^.header.reqtype:=FCGI_STDOUT;
+ ARespRecord^.header.paddingLength:=pl;
+ ARespRecord^.header.contentLength:=NtoBE(cl);
+ ARespRecord^.header.requestId:=NToBE(TFCGIRequest(Request).RequestID);
+ move(str[1],ARespRecord^.ContentData,cl);
+ Write_FCGIRecord(PFCGI_Header(ARespRecord));
+ finally
+ Freemem(ARespRecord);
+ end;
end;
procedure TFCGIResponse.DoSendContent;
@@ -392,14 +413,17 @@ begin
pl := 8-(cl mod 8);
ARespRecord:=Nil;
Getmem(ARespRecord,8+cl+pl);
- ARespRecord^.header.version:=FCGI_VERSION_1;
- ARespRecord^.header.reqtype:=FCGI_STDOUT;
- ARespRecord^.header.paddingLength:=pl;
- ARespRecord^.header.contentLength:=NtoBE(cl);
- ARespRecord^.header.requestId:=NToBE(TFCGIRequest(Request).RequestID);
- move(Str[BS+1],ARespRecord^.ContentData,cl);
- Write_FCGIRecord(PFCGI_Header(ARespRecord));
- Freemem(ARespRecord);
+ try
+ ARespRecord^.header.version:=FCGI_VERSION_1;
+ ARespRecord^.header.reqtype:=FCGI_STDOUT;
+ ARespRecord^.header.paddingLength:=pl;
+ ARespRecord^.header.contentLength:=NtoBE(cl);
+ ARespRecord^.header.requestId:=NToBE(TFCGIRequest(Request).RequestID);
+ move(Str[BS+1],ARespRecord^.ContentData,cl);
+ Write_FCGIRecord(PFCGI_Header(ARespRecord));
+ finally
+ Freemem(ARespRecord);
+ end;
Inc(BS,cl);
Until (BS=L);
FillChar(EndRequest,SizeOf(FCGI_EndRequestRecord),0);
@@ -420,6 +444,7 @@ begin
FRequestsAvail:=5;
SetLength(FRequestsArray,FRequestsAvail);
FHandle := THandle(-1);
+ FTimeOut:=50;
end;
destructor TFCgiHandler.Destroy;
@@ -452,6 +477,30 @@ begin
end;
function TFCgiHandler.Read_FCGIRecord : PFCGI_Header;
+{ $DEFINE DUMPRECORD}
+{$IFDEF DUMPRECORD}
+ Procedure DumpFCGIRecord (Var Header :FCGI_Header; ContentLength : word; PaddingLength : byte; ResRecord : Pointer);
+
+ Var
+ s : string;
+ I : Integer;
+
+ begin
+ Writeln('Dumping record ', Sizeof(Header),',',Contentlength,',',PaddingLength);
+ For I:=0 to Sizeof(Header)+ContentLength+PaddingLength-1 do
+ begin
+ Write(Format('%:3d ',[PByte(ResRecord)[i]]));
+ If PByte(ResRecord)[i]>30 then
+ S:=S+char(PByte(ResRecord)[i]);
+ if (I mod 16) = 0 then
+ begin
+ writeln(' ',S);
+ S:='';
+ end;
+ end;
+ Writeln(' ',S)
+ end;
+{$ENDIF DUMPRECORD}
function ReadBytes(ReadBuf: Pointer; ByteAmount : Word) : Integer;
@@ -477,12 +526,11 @@ function TFCgiHandler.Read_FCGIRecord : PFCGI_Header;
end;
var Header : FCGI_Header;
- {I,}BytesRead : integer;
+ BytesRead : integer;
ContentLength : word;
PaddingLength : byte;
ResRecord : pointer;
ReadBuf : pointer;
- s : string;
begin
@@ -490,119 +538,183 @@ begin
ResRecord:=Nil;
ReadBuf:=@Header;
BytesRead:=ReadBytes(ReadBuf,Sizeof(Header));
- If (BytesRead<>Sizeof(Header)) then
+ If (BytesRead=0) then
+ Exit // Connection closed gracefully.
+ // TODO : if connection closed gracefully, the request should no longer be handled.
+ // Need to discard request/response
+ else If (BytesRead<>Sizeof(Header)) then
Raise HTTPError.CreateFmt(SErrReadingHeader,[BytesRead]);
ContentLength:=BetoN(Header.contentLength);
PaddingLength:=Header.paddingLength;
Getmem(ResRecord,BytesRead+ContentLength+PaddingLength);
- PFCGI_Header(ResRecord)^:=Header;
- ReadBuf:=ResRecord+BytesRead;
- BytesRead:=ReadBytes(ReadBuf,ContentLength);
- ReadBuf:=ReadBuf+BytesRead;
- BytesRead:=ReadBytes(ReadBuf,PaddingLength);
- Result := ResRecord;
-{
- Writeln('Dumping record ', Sizeof(Header),',',Contentlength,',',PaddingLength);
- For I:=0 to Sizeof(Header)+ContentLength+PaddingLength-1 do
+ try
+ PFCGI_Header(ResRecord)^:=Header;
+ ReadBuf:=ResRecord+BytesRead;
+ BytesRead:=ReadBytes(ReadBuf,ContentLength);
+ If (BytesRead=0) and (ContentLength>0) then
+ begin
+ FreeMem(resRecord);
+ Exit // Connection closed gracefully.
+ // TODO : properly handle connection close
+ end;
+ ReadBuf:=ReadBuf+BytesRead;
+ BytesRead:=ReadBytes(ReadBuf,PaddingLength);
+ If (BytesRead=0) and (PaddingLength>0) then
+ begin
+ FreeMem(resRecord);
+ Exit // Connection closed gracefully.
+ // TODO : properly handle connection close
+ end;
+ Result := ResRecord;
+ except
+ FreeMem(resRecord);
+ Raise;
+ end;
+end;
+
+procedure TFCgiHandler.SetupSocket(var IAddress : TInetSockAddr; Var AddressLength : tsocklen);
+
+begin
+ AddressLength:=Sizeof(IAddress);
+ Socket := fpsocket(AF_INET,SOCK_STREAM,0);
+ if Socket=-1 then
+ raise EFPWebError.CreateFmt(SNoSocket,[socketerror]);
+ IAddress.sin_family:=AF_INET;
+ IAddress.sin_port:=htons(Port);
+ if FAddress<>'' then
+ Iaddress.sin_addr := StrToHostAddr(FAddress)
+ else
+ IAddress.sin_addr.s_addr:=0;
+ {$IFDEF Unix}
+ // remedy socket port locking on Posix platforms
+ If (poReuseAddress in ProtocolOptions) then
+ fpSetSockOpt(Socket, SOL_SOCKET, SO_REUSEADDR, @IAddress, SizeOf(IAddress));
+ {$ENDIF}
+ if fpbind(Socket,@IAddress,AddressLength)=-1 then
+ begin
+ CloseSocket(socket);
+ Socket:=0;
+ Terminate;
+ raise Exception.CreateFmt(SBindFailed,[port,socketerror]);
+ end;
+ if fplisten(Socket,1)=-1 then
begin
- Write(Format('%:3d ',[PByte(ResRecord)[i]]));
- If PByte(ResRecord)[i]>30 then
- S:=S+char(PByte(ResRecord)[i]);
- if (I mod 16) = 0 then
- begin
- writeln(' ',S);
- S:='';
- end;
+ CloseSocket(socket);
+ Socket:=0;
+ Terminate;
+ raise Exception.CreateFmt(SListenFailed,[port,socketerror]);
+ end;
+end;
+
+{$ifdef unix}
+function TFCgiHandler.DataAvailable: Boolean;
+
+var
+ FDS: TFDSet;
+ TimeV: TTimeVal;
+
+begin
+ fpFD_Zero(FDS);
+ fpFD_Set(FHandle, FDS);
+ TimeV.tv_usec := (Timeout mod 1000) * 1000;
+ TimeV.tv_sec := Timeout div 1000;
+ Result := fpSelect(FHandle + 1, @FDS, @FDS, @FDS, @TimeV) > 0;
+end;
+{$else}
+function TFCgiHandler.DataAvailable: Boolean;
+
+var
+ FDS: TFDSet;
+ TimeV: TTimeVal;
+
+begin
+ FD_Zero(FDS);
+ FD_Set(FHandle, FDS);
+ TimeV.tv_usec := (Timeout mod 1000) * 1000;
+ TimeV.tv_sec := Timeout div 1000;
+ Result := Select(FHandle + 1, @FDS, @FDS, @FDS, @TimeV) <> 0;
+end;
+{$endif}
+
+function TFCgiHandler.ProcessRecord(AFCGI_Record : PFCGI_Header; out ARequest: TRequest; out AResponse: TResponse): boolean;
+
+var
+ ARequestID : word;
+ ATempRequest : TFCGIRequest;
+begin
+ Result:=False;
+ ARequestID:=BEtoN(AFCGI_Record^.requestID);
+ if AFCGI_Record^.reqtype = FCGI_BEGIN_REQUEST then
+ begin
+ if ARequestID>FRequestsAvail then
+ begin
+ inc(FRequestsAvail,10);
+ SetLength(FRequestsArray,FRequestsAvail);
+ end;
+ assert(not assigned(FRequestsArray[ARequestID].Request));
+ assert(not assigned(FRequestsArray[ARequestID].Response));
+ ATempRequest:=TFCGIRequest.Create;
+ ATempRequest.RequestID:=ARequestID;
+ ATempRequest.Handle:=FHandle;
+ ATempRequest.ProtocolOptions:=Self.Protocoloptions;
+ ATempRequest.OnUnknownRecord:=Self.OnUnknownRecord;
+ FRequestsArray[ARequestID].Request := ATempRequest;
+ end;
+ if (ARequestID>FRequestsAvail) then
+ begin
+ // TODO : ARequestID can be invalid. What to do ?
+ // in each case not try to access the array with requests.
+ end
+ else if FRequestsArray[ARequestID].Request.ProcessFCGIRecord(AFCGI_Record) then
+ begin
+ ARequest:=FRequestsArray[ARequestID].Request;
+ FRequestsArray[ARequestID].Response := TFCGIResponse.Create(ARequest);
+ FRequestsArray[ARequestID].Response.ProtocolOptions:=Self.ProtocolOptions;
+ AResponse:=FRequestsArray[ARequestID].Response;
+ Result := True;
end;
- Writeln(' ',S)
-}
end;
function TFCgiHandler.WaitForRequest(out ARequest: TRequest; out AResponse: TResponse): boolean;
+
var
IAddress : TInetSockAddr;
AddressLength : tsocklen;
- ARequestID : word;
AFCGI_Record : PFCGI_Header;
- ATempRequest : TFCGIRequest;
begin
Result := False;
- AddressLength:=Sizeof(IAddress);
-
if Socket=0 then
- begin
if Port<>0 then
- begin
- Socket := fpsocket(AF_INET,SOCK_STREAM,0);
- if Socket=-1 then
- raise EFPWebError.CreateFmt(SNoSocket,[socketerror]);
- IAddress.sin_family:=AF_INET;
- IAddress.sin_port:=htons(Port);
- if FAddress<>'' then
- Iaddress.sin_addr := StrToHostAddr(FAddress)
- else
- IAddress.sin_addr.s_addr:=0;
- if fpbind(Socket,@IAddress,AddressLength)=-1 then
- begin
- CloseSocket(socket);
- Socket:=0;
- raise Exception.CreateFmt(SBindFailed,[port,socketerror]);
- end;
- if fplisten(Socket,1)=-1 then
- begin
- CloseSocket(socket);
- Socket:=0;
- raise Exception.CreateFmt(SListenFailed,[port,socketerror]);
- end;
- end
+ SetupSocket(IAddress,AddressLength)
else
Socket:=StdInputHandle;
- end;
-
if FHandle=THandle(-1) then
begin
FHandle:=fpaccept(Socket,psockaddr(@IAddress),@AddressLength);
if FHandle=THandle(-1) then
+ begin
+ Terminate;
raise Exception.CreateFmt(SNoInputHandle,[socketerror]);
+ end;
end;
-
repeat
- AFCGI_Record:=Read_FCGIRecord;
- if assigned(AFCGI_Record) then
+ If (poUseSelect in ProtocolOptions) then
+ begin
+ While Not DataAvailable do
+ If (OnIdle<>Nil) then
+ OnIdle(Self);
+ end;
+ AFCGI_Record:=Read_FCGIRecord;
+
+ if assigned(AFCGI_Record) then
try
- ARequestID:=BEtoN(AFCGI_Record^.requestID);
- if AFCGI_Record^.reqtype = FCGI_BEGIN_REQUEST then
- begin
- if ARequestID>FRequestsAvail then
- begin
- inc(FRequestsAvail,10);
- SetLength(FRequestsArray,FRequestsAvail);
- end;
- assert(not assigned(FRequestsArray[ARequestID].Request));
- assert(not assigned(FRequestsArray[ARequestID].Response));
-
- ATempRequest:=TFCGIRequest.Create;
- ATempRequest.RequestID:=ARequestID;
- ATempRequest.Handle:=FHandle;
- ATempRequest.ProtocolOptions:=Self.Protocoloptions;
- ATempRequest.OnUnknownRecord:=Self.OnUnknownRecord;
- FRequestsArray[ARequestID].Request := ATempRequest;
- end;
- if FRequestsArray[ARequestID].Request.ProcessFCGIRecord(AFCGI_Record) then
- begin
- ARequest:=FRequestsArray[ARequestID].Request;
- FRequestsArray[ARequestID].Response := TFCGIResponse.Create(ARequest);
- FRequestsArray[ARequestID].Response.ProtocolOptions:=Self.ProtocolOptions;
- AResponse:=FRequestsArray[ARequestID].Response;
- Result := True;
- Break;
- end;
+ Result:=ProcessRecord(AFCGI_Record,ARequest,AResponse);
Finally
FreeMem(AFCGI_Record);
AFCGI_Record:=Nil;
end;
- until (1<>1);
+ until Result;
end;
{ TCustomFCgiApplication }
diff --git a/packages/fcl-web/src/base/custweb.pp b/packages/fcl-web/src/base/custweb.pp
index 20b35f60f8..f0820619dd 100644
--- a/packages/fcl-web/src/base/custweb.pp
+++ b/packages/fcl-web/src/base/custweb.pp
@@ -557,6 +557,7 @@ end;
constructor TCustomWebApplication.Create(AOwner: TComponent);
begin
+ Inherited Create(AOwner);
FWebHandler := InitializeWebHandler;
FWebHandler.FOnTerminate:=@DoOnTerminate;
end;
diff --git a/packages/fcl-web/src/base/fphtml.pp b/packages/fcl-web/src/base/fphtml.pp
index 6c5bdb96d5..a6645732c1 100644
--- a/packages/fcl-web/src/base/fphtml.pp
+++ b/packages/fcl-web/src/base/fphtml.pp
@@ -42,15 +42,18 @@ type
TWebController = class;
THTMLContentProducer = class;
+ TJavaType = (jtOther, jtClientSideEvent);
+
TJavaScriptStack = class(TObject)
private
+ FJavaType: TJavaType;
FMessageBoxHandler: TMessageBoxHandler;
FScript: TStrings;
FWebController: TWebController;
protected
function GetWebController: TWebController;
public
- constructor Create(const AWebController: TWebController); virtual;
+ constructor Create(const AWebController: TWebController; const AJavaType: TJavaType); virtual;
destructor Destroy; override;
procedure AddScriptLine(ALine: String); virtual;
procedure MessageBox(AText: String; Buttons: TWebButtons; Loaded: string = ''); virtual;
@@ -61,6 +64,7 @@ type
function ScriptIsEmpty: Boolean; virtual;
function GetScript: String; virtual;
property WebController: TWebController read GetWebController;
+ property JavaType: TJavaType read FJavaType;
end;
{ TContainerStylesheet }
@@ -85,6 +89,35 @@ type
property Items[Index: integer]: TContainerStylesheet read GetItem write SetItem;
end;
+ { TJavaVariable }
+
+ TJavaVariable = class(TCollectionItem)
+ private
+ FBelongsTo: string;
+ FGetValueFunc: string;
+ FID: string;
+ FIDSuffix: string;
+ FName: string;
+ public
+ property BelongsTo: string read FBelongsTo write FBelongsTo;
+ property GetValueFunc: string read FGetValueFunc write FGetValueFunc;
+ property Name: string read FName write FName;
+ property ID: string read FID write FID;
+ property IDSuffix: string read FIDSuffix write FIDSuffix;
+ end;
+
+ { TJavaVariables }
+
+ TJavaVariables = class(TCollection)
+ private
+ function GetItem(Index: integer): TJavaVariable;
+ procedure SetItem(Index: integer; const AValue: TJavaVariable);
+ public
+ function Add: TJavaVariable;
+ property Items[Index: integer]: TJavaVariable read GetItem write SetItem;
+ end;
+
+
{ TWebController }
TWebController = class(TComponent)
@@ -94,9 +127,13 @@ type
FMessageBoxHandler: TMessageBoxHandler;
FScriptName: string;
FScriptStack: TFPObjectList;
+ FIterationIDs: array of string;
+ FJavaVariables: TJavaVariables;
procedure SetBaseURL(const AValue: string);
procedure SetScriptName(const AValue: string);
protected
+ function GetJavaVariables: TJavaVariables;
+ function GetJavaVariablesCount: integer;
function GetScriptFileReferences: TStringList; virtual; abstract;
function GetCurrentJavaScriptStack: TJavaScriptStack; virtual;
function GetStyleSheetReferences: TContainerStylesheets; virtual; abstract;
@@ -107,8 +144,8 @@ type
destructor Destroy; override;
procedure AddScriptFileReference(AScriptFile: String); virtual; abstract;
procedure AddStylesheetReference(Ahref, Amedia: String); virtual; abstract;
- function CreateNewJavascriptStack: TJavaScriptStack; virtual; abstract;
- function InitializeJavaScriptStack: TJavaScriptStack;
+ function CreateNewJavascriptStack(AJavaType: TJavaType): TJavaScriptStack; virtual; abstract;
+ function InitializeJavaScriptStack(AJavaType: TJavaType): TJavaScriptStack;
procedure FreeJavascriptStack; virtual;
function HasJavascriptStack: boolean; virtual; abstract;
function GetUrl(ParamNames, ParamValues, KeepParams: array of string; Action: string = ''): string; virtual; abstract;
@@ -117,12 +154,20 @@ type
procedure CleanupShowRequest; virtual;
procedure CleanupAfterRequest; virtual;
procedure BeforeGenerateHead; virtual;
+ function AddJavaVariable(AName, ABelongsTo, AGetValueFunc, AID, AIDSuffix: string): TJavaVariable;
procedure BindJavascriptCallstackToElement(AComponent: TComponent; AnElement: THtmlCustomElement; AnEvent: string); virtual; abstract;
function MessageBox(AText: String; Buttons: TWebButtons; ALoaded: string = ''): string; virtual;
function DefaultMessageBoxHandler(Sender: TObject; AText: String; Buttons: TWebButtons; ALoaded: string = ''): string; virtual; abstract;
function CreateNewScript: TStringList; virtual; abstract;
function AddrelativeLinkPrefix(AnURL: string): string;
procedure FreeScript(var AScript: TStringList); virtual; abstract;
+ procedure ShowRegisteredScript(ScriptID: integer); virtual; abstract;
+
+ function IncrementIterationLevel: integer; virtual;
+ procedure SetIterationIDSuffix(AIterationLevel: integer; IDSuffix: string); virtual;
+ function GetIterationIDSuffix: string; virtual;
+ procedure DecrementIterationLevel; virtual;
+
property ScriptFileReferences: TStringList read GetScriptFileReferences;
property StyleSheetReferences: TContainerStylesheets read GetStyleSheetReferences;
property Scripts: TFPObjectList read GetScripts;
@@ -190,6 +235,7 @@ type
FDocument: THTMLDocument;
FElement: THTMLCustomElement;
FWriter: THTMLWriter;
+ FIDSuffix: string;
procedure SetDocument(const AValue: THTMLDocument);
procedure SetWriter(const AValue: THTMLWriter);
private
@@ -201,6 +247,8 @@ type
procedure SetParent(const AValue: TComponent);
Protected
function CreateWriter (Doc : THTMLDocument) : THTMLWriter; virtual;
+ function GetIDSuffix: string; virtual;
+ procedure SetIDSuffix(const AValue: string); virtual;
protected
// Methods for streaming
FAcceptChildsAtDesignTime: boolean;
@@ -211,6 +259,7 @@ type
procedure AddEvent(var Events: TEventRecords; AServerEventID: integer; AServerEvent: THandleAjaxEvent; AJavaEventName: string; AcsCallBack: TCSAjaxEvent); virtual;
procedure DoOnEventCS(AnEvent: TEventRecord; AJavascriptStack: TJavaScriptStack; var Handled: boolean); virtual;
procedure SetupEvents(AHtmlElement: THtmlCustomElement); virtual;
+ function GetWebPage: TDataModule;
function GetWebController(const ExceptIfNotAvailable: boolean = true): TWebController;
property ContentProducerList: TFPList read GetContentProducerList;
public
@@ -221,6 +270,7 @@ type
property ParentElement : THTMLCustomElement read FElement write FElement;
property Writer : THTMLWriter read FWriter write SetWriter;
Property HTMLDocument : THTMLDocument read FDocument write SetDocument;
+ Property IDSuffix : string read GetIDSuffix write SetIDSuffix;
public
// for streaming
constructor Create(AOwner: TComponent); override;
@@ -480,6 +530,23 @@ resourcestring
SErrRequestNotHandled = 'Web request was not handled by actions.';
SErrNoContentProduced = 'The content producer "%s" didn''t produce any content.';
+{ TJavaVariables }
+
+function TJavaVariables.GetItem(Index: integer): TJavaVariable;
+begin
+ result := TJavaVariable(Inherited GetItem(Index));
+end;
+
+procedure TJavaVariables.SetItem(Index: integer; const AValue: TJavaVariable);
+begin
+ inherited SetItem(Index, AValue);
+end;
+
+function TJavaVariables.Add: TJavaVariable;
+begin
+ result := inherited Add as TJavaVariable;
+end;
+
{ TcontainerStylesheets }
function TcontainerStylesheets.GetItem(Index: integer): TContainerStylesheet;
@@ -505,10 +572,11 @@ begin
result := FWebController;
end;
-constructor TJavaScriptStack.Create(const AWebController: TWebController);
+constructor TJavaScriptStack.Create(const AWebController: TWebController; const AJavaType: TJavaType);
begin
FWebController := AWebController;
FScript := TStringList.Create;
+ FJavaType := AJavaType;
end;
destructor TJavaScriptStack.Destroy;
@@ -591,6 +659,16 @@ begin
Result:=THTMLContentProducer(ContentProducerList[Index]);
end;
+function THTMLContentProducer.GetIDSuffix: string;
+begin
+ result := FIDSuffix;
+end;
+
+procedure THTMLContentProducer.SetIDSuffix(const AValue: string);
+begin
+ FIDSuffix := AValue;
+end;
+
function THTMLContentProducer.GetContentProducerList: TFPList;
begin
if not assigned(FChilds) then
@@ -679,7 +757,7 @@ begin
wc := GetWebController(false);
if assigned(wc) then
begin
- AJSClass := wc.InitializeJavaScriptStack;
+ AJSClass := wc.InitializeJavaScriptStack(jtClientSideEvent);
try
for i := 0 to high(Events) do
begin
@@ -702,24 +780,44 @@ begin
end;
end;
+function THTMLContentProducer.GetWebPage: TDataModule;
+var
+ aowner: TComponent;
+begin
+ result := nil;
+ aowner := Owner;
+ while assigned(aowner) do
+ begin
+ if aowner.InheritsFrom(TWebPage) then
+ begin
+ result := TWebPage(aowner);
+ break;
+ end;
+ aowner:=aowner.Owner;
+ end;
+end;
+
function THTMLContentProducer.GetWebController(const ExceptIfNotAvailable: boolean): TWebController;
-var i : integer;
+var
+ i : integer;
+ wp: TWebPage;
begin
result := nil;
- if assigned(owner) then
+ wp := TWebPage(GetWebPage);
+ if assigned(wp) then
begin
- if (owner is TWebPage) and TWebPage(owner).HasWebController then
+ if wp.HasWebController then
begin
- result := TWebPage(owner).WebController;
+ result := wp.WebController;
exit;
- end
- else //if (owner is TDataModule) then
+ end;
+ end
+ else if assigned(Owner) then //if (owner is TDataModule) then
+ begin
+ for i := 0 to owner.ComponentCount-1 do if owner.Components[i] is TWebController then
begin
- for i := 0 to owner.ComponentCount-1 do if owner.Components[i] is TWebController then
- begin
- result := TWebController(Owner.Components[i]);
- Exit;
- end;
+ result := TWebController(Owner.Components[i]);
+ Exit;
end;
end;
if ExceptIfNotAvailable then
@@ -1199,7 +1297,7 @@ begin
FSendXMLAnswer:=true;
FResponse:=AResponse;
FWebController := AWebController;
- FJavascriptCallStack:=FWebController.InitializeJavaScriptStack;
+ FJavascriptCallStack:=FWebController.InitializeJavaScriptStack(jtOther);
end;
destructor TAjaxResponse.Destroy;
@@ -1248,6 +1346,21 @@ end;
{ TWebController }
+function TWebController.GetJavaVariables: TJavaVariables;
+begin
+ if not assigned(FJavaVariables) then
+ FJavaVariables := TJavaVariables.Create(TJavaVariable);
+ Result := FJavaVariables;
+end;
+
+function TWebController.GetJavaVariablesCount: integer;
+begin
+ if assigned(FJavaVariables) then
+ result := FJavaVariables.Count
+ else
+ result := 0;
+end;
+
procedure TWebController.SetBaseURL(const AValue: string);
begin
if FBaseURL=AValue then exit;
@@ -1262,7 +1375,10 @@ end;
function TWebController.GetCurrentJavaScriptStack: TJavaScriptStack;
begin
- result := TJavaScriptStack(FScriptStack.Items[FScriptStack.Count-1]);
+ if FScriptStack.Count>0 then
+ result := TJavaScriptStack(FScriptStack.Items[FScriptStack.Count-1])
+ else
+ result := nil;
end;
procedure TWebController.InitializeAjaxRequest;
@@ -1290,6 +1406,16 @@ begin
// do nothing
end;
+function TWebController.AddJavaVariable(AName, ABelongsTo, AGetValueFunc, AID, AIDSuffix: string): TJavaVariable;
+begin
+ result := GetJavaVariables.Add;
+ result.BelongsTo := ABelongsTo;
+ result.GetValueFunc := AGetValueFunc;
+ result.Name := AName;
+ result.IDSuffix := AIDSuffix;
+ result.ID := AID;
+end;
+
function TWebController.MessageBox(AText: String; Buttons: TWebButtons; ALoaded: string = ''): string;
begin
if assigned(MessageBoxHandler) then
@@ -1308,6 +1434,36 @@ begin
result := AnURL;
end;
+function TWebController.IncrementIterationLevel: integer;
+begin
+ result := Length(FIterationIDs)+1;
+ SetLength(FIterationIDs,Result);
+end;
+
+procedure TWebController.SetIterationIDSuffix(AIterationLevel: integer; IDSuffix: string);
+begin
+ FIterationIDs[AIterationLevel-1]:=IDSuffix;
+end;
+
+function TWebController.GetIterationIDSuffix: string;
+var
+ i: integer;
+begin
+ result := '';
+ for i := 0 to length(FIterationIDs)-1 do
+ result := result + '_' + FIterationIDs[i];
+end;
+
+procedure TWebController.DecrementIterationLevel;
+var
+ i: integer;
+begin
+ i := length(FIterationIDs);
+ if i=0 then
+ raise Exception.Create('DecrementIterationLevel can not be called more times then IncrementIterationLevel');
+ SetLength(FIterationIDs,i-1);
+end;
+
function TWebController.GetRequest: TRequest;
begin
if assigned(Owner) and (owner is TWebPage) then
@@ -1329,12 +1485,13 @@ begin
if (Owner is TWebPage) and (TWebPage(Owner).WebController=self) then
TWebPage(Owner).WebController := nil;
FScriptStack.Free;
+ if assigned(FJavaVariables) then FJavaVariables.Free;
inherited Destroy;
end;
-function TWebController.InitializeJavaScriptStack: TJavaScriptStack;
+function TWebController.InitializeJavaScriptStack(AJavaType: TJavaType): TJavaScriptStack;
begin
- result := CreateNewJavascriptStack;
+ result := CreateNewJavascriptStack(AJavaType);
FScriptStack.Add(result);
end;
diff --git a/packages/fcl-web/src/base/webpage.pp b/packages/fcl-web/src/base/webpage.pp
index 21911f1e29..c644c57bf8 100644
--- a/packages/fcl-web/src/base/webpage.pp
+++ b/packages/fcl-web/src/base/webpage.pp
@@ -31,6 +31,13 @@ type
property Designer: IWebPageDesigner read GetDesigner write SetDesigner;
end;
+ IHTMLIterationGroup = interface(IUnknown)
+ ['{95575CB6-7D96-4F72-AF72-D2EAF0BECE71}']
+ procedure SetIDSuffix(const AHTMLContentProducer: THTMLContentProducer);
+ procedure SetAjaxIterationID(AValue: String);
+ end;
+
+
{ TStandardWebController }
TStandardWebController = class(TWebController)
@@ -45,13 +52,14 @@ type
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
- function CreateNewJavascriptStack: TJavaScriptStack; override;
+ function CreateNewJavascriptStack(AJavaType: TJavaType): TJavaScriptStack; override;
function GetUrl(ParamNames, ParamValues, KeepParams: array of string; Action: string = ''): string; override;
procedure BindJavascriptCallstackToElement(AComponent: TComponent; AnElement: THtmlCustomElement; AnEvent: string); override;
procedure AddScriptFileReference(AScriptFile: String); override;
procedure AddStylesheetReference(Ahref, Amedia: String); override;
function DefaultMessageBoxHandler(Sender: TObject; AText: String; Buttons: TWebButtons; ALoaded: string = ''): string; override;
function CreateNewScript: TStringList; override;
+ procedure ShowRegisteredScript(ScriptID: integer); override;
procedure FreeScript(var AScript: TStringList); override;
end;
@@ -114,9 +122,22 @@ type
property BaseURL: string read FBaseURL write FBaseURL;
end;
+ function RegisterScript(AScript: string) : integer;
+
implementation
-uses rtlconsts, typinfo, XMLWrite;
+uses rtlconsts, typinfo, XMLWrite, strutils;
+
+var RegisteredScriptList : TStrings;
+
+function RegisterScript(AScript: string) : integer;
+begin
+ if not Assigned(RegisteredScriptList) then
+ begin
+ RegisteredScriptList := TStringList.Create;
+ end;
+ result := RegisteredScriptList.Add(AScript);
+end;
{ TWebPage }
@@ -184,6 +205,40 @@ var Handled: boolean;
CompName: string;
AComponent: TComponent;
AnAjaxResponse: TAjaxResponse;
+ i: integer;
+ ASuffixID: string;
+ AIterationGroup: IHTMLIterationGroup;
+ AIterComp: TComponent;
+ wc: TWebController;
+ Iterationlevel: integer;
+
+ procedure SetIdSuffixes(AComp: THTMLContentProducer);
+ var
+ i: integer;
+ s: string;
+ begin
+ if assigned(AComp.parent) and (acomp.parent is THTMLContentProducer) then
+ SetIdSuffixes(THTMLContentProducer(AComp.parent));
+ if supports(AComp,IHTMLIterationGroup,AIterationGroup) then
+ begin
+ if assigned(FWebController) then
+ begin
+ iterationlevel := FWebController.IncrementIterationLevel;
+ assert(length(ASuffixID)>0);
+ i := PosEx('_',ASuffixID,2);
+ if i > 0 then
+ s := copy(ASuffixID,2,i-2)
+ else
+ s := copy(ASuffixID,2,length(ASuffixID)-1);
+
+ acomp.IDSuffix := s;
+ AIterationGroup.SetAjaxIterationID(s);
+ FWebController.SetIterationIDSuffix(iterationlevel,s);
+ acomp.ForeachContentProducer(@AIterationGroup.SetIDSuffix,true);
+ ASuffixID := copy(ASuffixID,i,length(ASuffixID)-i+1);
+ end;
+ end;
+ end;
begin
SetRequest(ARequest);
FWebModule := AWebModule;
@@ -203,9 +258,28 @@ begin
begin
CompName := Request.QueryFields.Values['AjaxID'];
if CompName='' then CompName := Request.GetNextPathInfo;
- AComponent := FindComponent(CompName);
+
+ i := pos('$',CompName);
+ AComponent:=self;
+ while (i > 0) and (assigned(AComponent)) do
+ begin
+ AComponent := FindComponent(copy(CompName,1,i-1));
+ CompName := copy(compname,i+1,length(compname)-i);
+ i := pos('$',CompName);
+ end;
+ if assigned(AComponent) then
+ AComponent := AComponent.FindComponent(CompName);
+
if assigned(AComponent) and (AComponent is THTMLContentProducer) then
+ begin
+ // Handle the SuffixID, search for iteration-groups and set their iteration-id-values
+ ASuffixID := ARequest.QueryFields.Values['IterationID'];
+ if ASuffixID<>'' then
+ begin
+ SetIdSuffixes(THTMLContentProducer(AComponent));
+ end;
THTMLContentProducer(AComponent).HandleAjaxRequest(ARequest, AnAjaxResponse);
+ end;
end;
DoAfterAjaxRequest(ARequest, AnAjaxResponse);
except on E: Exception do
@@ -346,8 +420,13 @@ end;
function TWebPage.IsAjaxCall: boolean;
var s : string;
begin
- s := Request.HTTPXRequestedWith;
- result := sametext(s,'XmlHttpRequest');
+ if assigned(request) then
+ begin
+ s := Request.HTTPXRequestedWith;
+ result := sametext(s,'XmlHttpRequest');
+ end
+ else
+ result := false;
end;
{ TStandardWebController }
@@ -378,6 +457,22 @@ begin
GetScripts.Add(result);
end;
+procedure TStandardWebController.ShowRegisteredScript(ScriptID: integer);
+var
+ i: Integer;
+ s: string;
+begin
+ s := '// ' + inttostr(ScriptID);
+ for i := 0 to GetScripts.Count -1 do
+ if tstrings(GetScripts.Items[i]).Strings[0]=s then
+ Exit;
+ with CreateNewScript do
+ begin
+ Append(s);
+ Append(RegisteredScriptList.Strings[ScriptID]);
+ end;
+end;
+
procedure TStandardWebController.FreeScript(var AScript: TStringList);
begin
with GetScripts do
@@ -431,9 +526,9 @@ begin
inherited Destroy;
end;
-function TStandardWebController.CreateNewJavascriptStack: TJavaScriptStack;
+function TStandardWebController.CreateNewJavascriptStack(AJavaType: TJavaType): TJavaScriptStack;
begin
- Result:=TJavaScriptStack.Create(self);
+ Result:=TJavaScriptStack.Create(self, AJavaType);
end;
function TStandardWebController.GetUrl(ParamNames, ParamValues,
@@ -542,5 +637,10 @@ begin
end;
end;
+initialization
+ RegisteredScriptList := nil;
+finalization
+ if assigned(RegisteredScriptList) then
+ RegisteredScriptList.Free;
end.
diff --git a/packages/fcl-web/src/base/websession.pp b/packages/fcl-web/src/base/websession.pp
index e4bb54c2cd..4a607db441 100644
--- a/packages/fcl-web/src/base/websession.pp
+++ b/packages/fcl-web/src/base/websession.pp
@@ -332,6 +332,7 @@ begin
begin
{$ifdef cgidebug}SendDebug('Getting default session');{$endif}
FSession:=GetDefaultSession;
+ FSession.FreeNotification(Self);
end;
Result:=FSession
end;
diff --git a/packages/fcl-web/src/jsonrpc/fpextdirect.pp b/packages/fcl-web/src/jsonrpc/fpextdirect.pp
index 645042ed26..c8fde13c81 100644
--- a/packages/fcl-web/src/jsonrpc/fpextdirect.pp
+++ b/packages/fcl-web/src/jsonrpc/fpextdirect.pp
@@ -130,6 +130,7 @@ Type
Property DispatchOptions;
Property APIPath;
Property RouterPath;
+ Property CreateSession;
Property NameSpace;
end;
diff --git a/packages/fcl-web/src/jsonrpc/fpjsonrpc.pp b/packages/fcl-web/src/jsonrpc/fpjsonrpc.pp
index 8bb8676813..6fe9ba9d50 100644
--- a/packages/fcl-web/src/jsonrpc/fpjsonrpc.pp
+++ b/packages/fcl-web/src/jsonrpc/fpjsonrpc.pp
@@ -357,6 +357,10 @@ resourcestring
implementation
+{$IFDEF WMDEBUG}
+uses dbugintf;
+{$ENDIF}
+
function CreateJSONErrorObject(Const AMessage : String; Const ACode : Integer) : TJSONObject;
begin
@@ -1014,7 +1018,7 @@ Var
begin
Result:=Nil;
- {$ifdef wmdebug}SendDebug(Format('Creating instance for %s',[Self.ProviderName]));{$endif}
+ {$ifdef wmdebug}SendDebug(Format('Creating instance for %s',[Self.HandlerMethodName]));{$endif}
If Assigned(FDataModuleClass) then
begin
{$ifdef wmdebug}SendDebug(Format('Creating datamodule from class %d ',[Ord(Assigned(FDataModuleClass))]));{$endif}
diff --git a/packages/fcl-web/src/webdata/extjsjson.pp b/packages/fcl-web/src/webdata/extjsjson.pp
index 447a223580..01595bdc74 100644
--- a/packages/fcl-web/src/webdata/extjsjson.pp
+++ b/packages/fcl-web/src/webdata/extjsjson.pp
@@ -28,6 +28,8 @@ type
{ TExtJSJSONDataFormatter }
TJSONObjectEvent = Procedure(Sender : TObject; AObject : TJSONObject) of Object;
TJSONExceptionObjectEvent = Procedure(Sender : TObject; E : Exception; AResponse : TJSONObject) of Object;
+ TJSONObjectAllowRowEvent = Procedure(Sender : TObject; Dataset : TDataset; Var Allow : Boolean) of Object;
+ TJSONObjectAllowEvent = Procedure(Sender : TObject; AObject : TJSONObject; Var Allow : Boolean) of Object;
TExtJSJSONDataFormatter = Class(TExtJSDataFormatter)
private
@@ -37,13 +39,18 @@ type
FAfterRowToJSON: TJSONObjectEvent;
FAfterUpdate: TJSONObjectEvent;
FBeforeDataToJSON: TJSONObjectEvent;
+ FBeforeDelete: TNotifyEvent;
+ FBeforeInsert: TNotifyEvent;
FBeforeRowToJSON: TJSONObjectEvent;
+ FBeforeUpdate: TNotifyEvent;
+ FOnAllowRow: TJSONObjectAllowRowEvent;
FOnErrorResponse: TJSONExceptionObjectEvent;
FOnMetaDataToJSON: TJSONObjectEvent;
FBatchResult : TJSONArray;
Function AddIdToBatch : TJSONObject;
procedure SendSuccess(ResponseContent: TStream; AddIDValue : Boolean = False);
protected
+ function AllowRow(ADataset : TDataset) : Boolean; virtual;
Procedure StartBatch(ResponseContent : TStream); override;
Procedure NextBatchItem(ResponseContent : TStream); override;
Procedure EndBatch(ResponseContent : TStream); override;
@@ -77,12 +84,18 @@ type
Property BeforeDataToJSON : TJSONObjectEvent Read FBeforeDataToJSON Write FBeforeDataToJSON;
// Called when an exception is caught and formatted.
Property OnErrorResponse : TJSONExceptionObjectEvent Read FOnErrorResponse Write FOnErrorResponse;
+ // Called to decide whether a record is sent to the client;
+ Property OnAllowRow : TJSONObjectAllowRowEvent Read FOnAllowRow Write FOnAllowRow;
// After a record was succesfully updated
Property AfterUpdate : TJSONObjectEvent Read FAfterUpdate Write FAfterUpdate;
// After a record was succesfully inserted.
Property AfterInsert : TJSONObjectEvent Read FAfterInsert Write FAfterInsert;
// After a record was succesfully inserted.
Property AfterDelete : TJSONObjectEvent Read FAfterDelete Write FAfterDelete;
+ // From TCustomHTTPDataContentProducer
+ Property BeforeUpdate;
+ Property BeforeInsert;
+ Property BeforeDelete;
end;
implementation
@@ -337,9 +350,12 @@ begin
ACount:=PageSize;
While (not DS.EOF) and ((PageSize=0) or (ACount>0)) do
begin
- Inc(RCount);
- Dec(ACount);
- Rows.Add(RowToJSON);
+ If AllowRow(DS) then
+ begin
+ Inc(RCount);
+ Dec(ACount);
+ Rows.Add(RowToJSON);
+ end;
DS.Next;
end;
If (PageSize>0) then
@@ -411,6 +427,13 @@ begin
end;
end;
+function TExtJSJSONDataFormatter.AllowRow(ADataset: TDataset): Boolean;
+begin
+ Result:=True;
+ If Assigned(FOnAllowRow) then
+ FOnAllowRow(Self,Dataset,Result);
+end;
+
procedure TExtJSJSONDataFormatter.StartBatch(ResponseContent: TStream);
begin
If Assigned(FBatchResult) then
diff --git a/packages/fcl-web/src/webdata/fpwebdata.pp b/packages/fcl-web/src/webdata/fpwebdata.pp
index ea47199a9a..68c3591e61 100644
--- a/packages/fcl-web/src/webdata/fpwebdata.pp
+++ b/packages/fcl-web/src/webdata/fpwebdata.pp
@@ -132,6 +132,9 @@ type
TCustomHTTPDataContentProducer = Class(THTTPContentProducer)
Private
FAllowPageSize: Boolean;
+ FBeforeDelete: TNotifyEvent;
+ FBeforeInsert: TNotifyEvent;
+ FBeforeUpdate: TNotifyEvent;
FDataProvider: TFPCustomWebDataProvider;
FMetadata: Boolean;
FOnTranscode: TOnTranscodeEvent;
@@ -159,6 +162,12 @@ type
Procedure DoExceptionToStream(E : Exception; ResponseContent : TStream); virtual; abstract;
procedure Notification(AComponent: TComponent; Operation: TOperation);override;
Property Dataset: TDataset Read GetDataSet;
+ // Before a record is about to be updated
+ Property BeforeUpdate : TNotifyEvent Read FBeforeUpdate Write FBeforeUpdate;
+ // Before a record is about to be inserted
+ Property BeforeInsert : TNotifyEvent Read FBeforeInsert Write FBeforeInsert;
+ // Before a record is about to be deleted
+ Property BeforeDelete : TNotifyEvent Read FBeforeDelete Write FBeforeDelete;
Public
Constructor Create(AOwner : TComponent); override;
Property Adaptor : TCustomWebDataInputAdaptor Read FAdaptor Write SetAdaptor;
@@ -464,6 +473,7 @@ type
TFPWebProviderDataModule = Class(TFPCustomWebProviderDataModule)
Published
+ Property CreateSession;
Property InputAdaptor;
Property ContentProducer;
Property UseProviderManager;
@@ -975,17 +985,23 @@ end;
procedure TCustomHTTPDataContentProducer.DoUpdateRecord(ResponseContent: TStream);
begin
{$ifdef wmdebug}SendDebug('DoUpdateRecord: Updating record');{$endif}
+ If Assigned(FBeforeUpdate) then
+ FBeforeUpdate(Self);
Provider.Update;
{$ifdef wmdebug}SendDebug('DoUpdateRecord: Updated record');{$endif}
end;
procedure TCustomHTTPDataContentProducer.DoInsertRecord(ResponseContent: TStream);
begin
+ If Assigned(FBeforeInsert) then
+ FBeforeInsert(Self);
Provider.Insert;
end;
procedure TCustomHTTPDataContentProducer.DoDeleteRecord(ResponseContent: TStream);
begin
+ If Assigned(FBeforeDelete) then
+ FBeforeDelete(Self);
Provider.Delete;
end;
@@ -1663,6 +1679,7 @@ begin
Exit;
end;
end;
+ P:=Nil;
C:=FindComponent(AProviderName);
{$ifdef wmdebug}SendDebug(Format('Searching provider "%s" 1 : %d ',[AProvidername,Ord(Assigned(C))]));{$endif}
If (C<>Nil) and (C is TFPCustomWebDataProvider) then
@@ -1675,7 +1692,9 @@ begin
begin
{$ifdef wmdebug}SendDebug(Format('Found providerdef "%s" 1 : %d ',[AProvidername,Ord(Assigned(C))]));{$endif}
P:=WebDataProviderManager.GetProvider(ADef,Self,AContainer);
- end;
+ end
+ else
+ P:=Nil;
end;
{$ifdef wmdebug}SendDebug(Format('Searching provider "%s" 2 : %d ',[AProvidername,Ord(Assigned(C))]));{$endif}
Result:=P;
diff --git a/packages/fcl-web/src/webdata/sqldbwebdata.pp b/packages/fcl-web/src/webdata/sqldbwebdata.pp
index 33b1d7f8e1..28b5356045 100644
--- a/packages/fcl-web/src/webdata/sqldbwebdata.pp
+++ b/packages/fcl-web/src/webdata/sqldbwebdata.pp
@@ -17,6 +17,7 @@ Type
TCustomSQLDBWebDataProvider = Class(TFPCustomWebDataProvider)
private
FIDFieldName: String;
+ FONGetDataset: TNotifyEvent;
FOnGetNewID: TNewIDEvent;
FOnGetParamValue: TGetParamValueEvent;
FParams: TParams;
@@ -44,6 +45,7 @@ Type
Procedure DoApplyParams; override;
Function SQLQuery : TSQLQuery;
Function GetDataset : TDataset; override;
+ Function DoGetNewID : String; virtual;
Function GetNewID : String;
Function IDFieldValue : String; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
@@ -55,6 +57,7 @@ Type
Property OnGetNewID : TNewIDEvent Read FOnGetNewID Write FOnGetNewID;
property OnGetParameterType : TGetParamTypeEvent Read FOnGetParamType Write FOnGetParamType;
property OnGetParameterValue : TGetParamValueEvent Read FOnGetParamValue Write FOnGetParamValue;
+ Property OnGetDataset : TNotifyEvent Read FONGetDataset Write FOnGetDataset;
Property Params : TParams Read FParams Write SetParams;
Public
Constructor Create(AOwner : TComponent); override;
@@ -72,6 +75,7 @@ Type
Property OnGetNewID;
property OnGetParameterType;
property OnGetParameterValue;
+ Property OnGetDataset;
Property Options;
Property Params;
end;
@@ -273,7 +277,12 @@ Var
begin
ft:=GetParamtype(P,AValue);
- If ft<>ftUnknown then
+ If (AValue='') and (not (ft in [ftString,ftFixedChar,ftWideString,ftFixedWideChar])) then
+ begin
+ P.Clear;
+ exit;
+ end;
+ If (ft<>ftUnknown) then
begin
try
case ft of
@@ -358,7 +367,10 @@ begin
if not B then
begin
If (P.Name=IDFieldName) and DoNewID then
- SetTypedParam(P,GetNewID)
+ begin
+ GetNewID;
+ SetTypedParam(P,FLastNewID)
+ end
else If Adaptor.TryFieldValue(P.Name,S) then
SetTypedParam(P,S)
else If Adaptor.TryParamValue(P.Name,S) then
@@ -385,6 +397,8 @@ end;
function TCustomSQLDBWebDataProvider.GetDataset: TDataset;
begin
{$ifdef wmdebug}SendDebug('Get dataset: checking dataset');{$endif}
+ If Assigned(FonGetDataset) then
+ FOnGetDataset(Self);
CheckDataset;
FLastNewID:='';
Result:=FQuery;
@@ -394,12 +408,17 @@ begin
{$ifdef wmdebug}SendDebug('Get dataset: done');{$endif}
end;
-function TCustomSQLDBWebDataProvider.GetNewID: String;
-
+function TCustomSQLDBWebDataProvider.DoGetNewID: String;
begin
If Not Assigned(FOnGetNewID) then
Raise EFPHTTPError.CreateFmt(SErrNoNewIDEvent,[Self.Name]);
FOnGetNewID(Self,Result);
+end;
+
+function TCustomSQLDBWebDataProvider.GetNewID: String;
+
+begin
+ Result:=DoGetNewID;
FLastNewID:=Result;
end;