diff options
| author | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2011-04-10 19:20:48 +0000 |
|---|---|---|
| committer | florian <florian@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2011-04-10 19:20:48 +0000 |
| commit | 160cc1e115eeb75638dce6effdd16b2bc810ddb4 (patch) | |
| tree | b791a95695a7cf674e61a6153139c6f9c6c491fa /packages/fcl-web | |
| parent | 3843727e74b31bbf2a34e7e3b89ee422269f770e (diff) | |
| parent | 413a6aa6469e6c297780217a27ca91363c637944 (diff) | |
| download | fpc-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')
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 Binary files differnew file mode 100644 index 0000000000..0341321b5d --- /dev/null +++ b/packages/fcl-web/examples/combined/combined.ico 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 Binary files differnew file mode 100644 index 0000000000..7c6cf3e4be --- /dev/null +++ b/packages/fcl-web/examples/combined/combined.res 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 Binary files differnew file mode 100644 index 0000000000..e1a2633df2 --- /dev/null +++ b/packages/fcl-web/examples/combined/login.png 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; |
