فهرست منبع

* libcups interface unit included in FPC, resolves #32729

git-svn-id: trunk@37619 -
florian 7 سال پیش
والد
کامیت
4b8dcd676c
7فایلهای تغییر یافته به همراه4046 افزوده شده و 0 حذف شده
  1. 4 0
      .gitattributes
  2. 1 0
      packages/fpmake_add.inc
  3. 6 0
      packages/fpmake_proc.inc
  4. 2498 0
      packages/libcups/Makefile
  5. 102 0
      packages/libcups/Makefile.fpc
  6. 44 0
      packages/libcups/fpmake.pp
  7. 1391 0
      packages/libcups/src/cupsdyn.pp

+ 4 - 0
.gitattributes

@@ -5180,6 +5180,10 @@ packages/libc/src/wordexph.inc svneol=native#text/plain
 packages/libc/src/wordsizeh.inc svneol=native#text/plain
 packages/libc/src/xlocaleh.inc svneol=native#text/plain
 packages/libc/src/xopen_limh.inc svneol=native#text/plain
+packages/libcups/Makefile svneol=native#text/plain
+packages/libcups/Makefile.fpc svneol=native#text/plain
+packages/libcups/fpmake.pp svneol=native#text/plain
+packages/libcups/src/cupsdyn.pp svneol=native#text/pascal
 packages/libcurl/Makefile svneol=native#text/plain
 packages/libcurl/Makefile.fpc svneol=native#text/plain
 packages/libcurl/Makefile.fpc.fpcmake svneol=native#text/plain

+ 1 - 0
packages/fpmake_add.inc

@@ -60,6 +60,7 @@
   add_ldap(ADirectory+IncludeTrailingPathDelimiter('ldap'));
   add_libc(ADirectory+IncludeTrailingPathDelimiter('libc'));
   add_libcurl(ADirectory+IncludeTrailingPathDelimiter('libcurl'));
+  add_libcups(ADirectory+IncludeTrailingPathDelimiter('libcups'));
   add_libffi(ADirectory+IncludeTrailingPathDelimiter('libffi'));
   add_libmicrohttpd(ADirectory+IncludeTrailingPathDelimiter('libmicrohttpd'));
   add_libgbafpc(ADirectory+IncludeTrailingPathDelimiter('libgbafpc'));

+ 6 - 0
packages/fpmake_proc.inc

@@ -350,6 +350,12 @@ begin
 {$include libcurl/fpmake.pp}
 end;
 
+procedure add_libcups(const ADirectory: string);
+begin
+  with Installer do
+{$include libcups/fpmake.pp}
+end;
+
 procedure add_libffi(const ADirectory: string);
 begin
   with Installer do

+ 2498 - 0
packages/libcups/Makefile

@@ -0,0 +1,2498 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2017-09-21 rev 37286]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-netbsd m68k-amiga m68k-atari m68k-palmos m68k-macos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-aros x86_64-dragonfly arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android arm-aros powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin wasm-wasm sparc64-linux
+BSDs = freebsd netbsd openbsd darwin dragonfly
+UNIXs = linux $(BSDs) solaris qnx haiku aix
+LIMIT83fs = go32v2 os2 emx watcom msdos win16
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+else
+ifeq ($(strip $(wildcard $(FPC))),)
+FPC:=$(firstword $(FPCPROG))
+endif
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+ifeq ($(SUBARCH),)
+$(error When compiling for arm-embedded, a sub-architecture (e.g. SUBARCH=armv4t or SUBARCH=armv7m) must be defined)
+endif
+override FPCOPT+=-Cp$(SUBARCH)
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+ifeq ($(SUBARCH),)
+$(error When compiling for avr-embedded, a sub-architecture (e.g. SUBARCH=avr25 or SUBARCH=avr35) must be defined)
+endif
+override FPCOPT+=-Cp$(SUBARCH)
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+ifeq ($(SUBARCH),)
+$(error When compiling for mipsel-embedded, a sub-architecture (e.g. SUBARCH=pic32mx) must be defined)
+endif
+override FPCOPT+=-Cp$(SUBARCH)
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+ifneq ($(findstring $(OS_TARGET),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+endif
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+ifndef CROSSCOMPILE
+BUILDFULLNATIVE=1
+export BUILDFULLNATIVE
+endif
+ifdef BUILDFULLNATIVE
+BUILDNATIVE=1
+export BUILDNATIVE
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+ifeq ($(OS_SOURCE),darwin)
+DARWIN2DARWIN=1
+endif
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+ifneq ($(OS_TARGET),msdos)
+ifndef DARWIN2DARWIN
+ifneq ($(CPU_TARGET),jvm)
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+ifeq ($(OS_TARGET),android)
+ifeq ($(CPU_TARGET),arm)
+BINUTILSPREFIX=arm-linux-androideabi-
+else
+ifeq ($(CPU_TARGET),i386)
+BINUTILSPREFIX=i686-linux-android-
+else
+ifeq ($(CPU_TARGET),mipsel)
+BINUTILSPREFIX=mipsel-linux-android-
+endif
+endif
+endif
+endif
+endif
+endif
+else
+BINUTILSPREFIX=$(OS_TARGET)-
+endif
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages)
+ifndef FPCFPMAKE
+ifdef CROSSCOMPILE
+ifeq ($(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR)))),)
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+FPCFPMAKE:=$(shell $(FPCPROG) -PB)
+ifeq ($(strip $(wildcard $(FPCFPMAKE))),)
+FPCFPMAKE:=$(firstword $(FPCPROG))
+endif
+else
+override FPCFPMAKE=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+else
+FPCFPMAKE=$(strip $(wildcard $(addsuffix /compiler/ppc$(SRCEXEEXT),$(FPCDIR))))
+FPMAKE_SKIP_CONFIG=-n
+export FPCFPMAKE
+export FPMAKE_SKIP_CONFIG
+endif
+else
+FPMAKE_SKIP_CONFIG=-n
+FPCFPMAKE=$(FPC)
+endif
+endif
+override PACKAGE_NAME=libcurl
+override PACKAGE_VERSION=3.1.1
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
+ifdef OS_TARGET
+FPC_TARGETOPT+=--os=$(OS_TARGET)
+endif
+ifdef CPU_TARGET
+FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
+endif
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
+override INSTALL_FPCPACKAGE=y
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+EXEDBGEXT=.dbg
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
+endif
+ifneq ($(CPU_TARGET),jvm)
+ifeq ($(OS_TARGET),android)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),dragonfly)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=df
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),aros)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=aros
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),haiku)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=hai
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
+endif
+ifneq ($(findstring $(OS_TARGET),darwin iphonesim),)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+EXEDBGEXT=.dSYM
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+ifeq ($(OS_TARGET),NativeNT)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=nativent
+endif
+ifeq ($(OS_TARGET),wii)
+EXEEXT=.dol
+SHAREDLIBEXT=.so
+SHORTSUFFIX=wii
+endif
+ifeq ($(OS_TARGET),aix)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=aix
+endif
+ifeq ($(OS_TARGET),java)
+OEXT=.class
+ASMEXT=.j
+SHAREDLIBEXT=.jar
+SHORTSUFFIX=java
+endif
+ifeq ($(CPU_TARGET),jvm)
+ifeq ($(OS_TARGET),android)
+OEXT=.class
+ASMEXT=.j
+SHAREDLIBEXT=.jar
+SHORTSUFFIX=android
+endif
+endif
+ifeq ($(OS_TARGET),msdos)
+STATICLIBPREFIX=
+STATICLIBEXT=.a
+SHORTSUFFIX=d16
+endif
+ifeq ($(OS_TARGET),embedded)
+ifeq ($(CPU_TARGET),i8086)
+STATICLIBPREFIX=
+STATICLIBEXT=.a
+else
+EXEEXT=.bin
+endif
+SHORTSUFFIX=emb
+endif
+ifeq ($(OS_TARGET),win16)
+STATICLIBPREFIX=
+STATICLIBEXT=.a
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w16
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+NASMNAME=$(BINUTILSPREFIX)nasm
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+ifndef NASMPROG
+ifdef CROSSBINDIR
+NASMPROG=$(CROSSBINDIR)/$(NASMNAME)$(SRCEXEEXT)
+else
+NASMPROG=$(NASMNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+NASM=$(NASMPROG)
+ifdef inUnix
+PPAS=./ppas$(SRCBATCHEXT)
+else
+PPAS=ppas$(SRCBATCHEXT)
+endif
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl fpmkunit
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-nativent)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-iphonesim)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i386-aros)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-macos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-wii)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc-aix)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-iphonesim)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-aros)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),x86_64-dragonfly)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),arm-aros)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-aix)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),mips-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),mipsel-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),mipsel-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),jvm-java)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),jvm-android)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i8086-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i8086-msdos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),i8086-win16)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),aarch64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),aarch64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),wasm-wasm)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifeq ($(FULL_TARGET),sparc64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL-PROCESS=1
+REQUIRE_PACKAGES_HASH=1
+REQUIRE_PACKAGES_LIBTAR=1
+REQUIRE_PACKAGES_FPMKUNIT=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL=$(PACKAGEDIR_RTL)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_RTL=$(PACKAGEDIR_RTL)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_RTL=$(PACKAGEDIR_RTL)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL)/$(OS_TARGET) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+ifdef UNITDIR_FPMAKE_RTL
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_RTL)
+endif
+endif
+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_PASZLIB=$(PACKAGEDIR_PASZLIB)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_PASZLIB)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_PASZLIB=$(PACKAGEDIR_PASZLIB)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_PASZLIB)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_PASZLIB=$(PACKAGEDIR_PASZLIB)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_PASZLIB=$(PACKAGEDIR_PASZLIB)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_PASZLIB)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_PASZLIB) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_PASZLIB)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_PASZLIB=
+UNITDIR_PASZLIB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /paszlib/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_PASZLIB),)
+UNITDIR_PASZLIB:=$(firstword $(UNITDIR_PASZLIB))
+else
+UNITDIR_PASZLIB=
+endif
+endif
+ifdef UNITDIR_PASZLIB
+override COMPILER_UNITDIR+=$(UNITDIR_PASZLIB)
+endif
+ifdef UNITDIR_FPMAKE_PASZLIB
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_PASZLIB)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL-PROCESS
+PACKAGEDIR_FCL-PROCESS:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl-process/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL-PROCESS),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL-PROCESS)/units/$(TARGETSUFFIX)),)
+UNITDIR_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)/units/$(TARGETSUFFIX)
+else
+UNITDIR_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_FCL-PROCESS)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_FCL-PROCESS)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_FCL-PROCESS=$(PACKAGEDIR_FCL-PROCESS)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL-PROCESS)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL-PROCESS) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL-PROCESS)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL-PROCESS=
+UNITDIR_FCL-PROCESS:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl-process/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL-PROCESS),)
+UNITDIR_FCL-PROCESS:=$(firstword $(UNITDIR_FCL-PROCESS))
+else
+UNITDIR_FCL-PROCESS=
+endif
+endif
+ifdef UNITDIR_FCL-PROCESS
+override COMPILER_UNITDIR+=$(UNITDIR_FCL-PROCESS)
+endif
+ifdef UNITDIR_FPMAKE_FCL-PROCESS
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_FCL-PROCESS)
+endif
+endif
+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_HASH=$(PACKAGEDIR_HASH)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_HASH)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_HASH=$(PACKAGEDIR_HASH)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_HASH)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_HASH=$(PACKAGEDIR_HASH)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_HASH=$(PACKAGEDIR_HASH)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_HASH)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_HASH) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_HASH)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_HASH=
+UNITDIR_HASH:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /hash/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_HASH),)
+UNITDIR_HASH:=$(firstword $(UNITDIR_HASH))
+else
+UNITDIR_HASH=
+endif
+endif
+ifdef UNITDIR_HASH
+override COMPILER_UNITDIR+=$(UNITDIR_HASH)
+endif
+ifdef UNITDIR_FPMAKE_HASH
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_HASH)
+endif
+endif
+ifdef REQUIRE_PACKAGES_LIBTAR
+PACKAGEDIR_LIBTAR:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libtar/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBTAR),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBTAR)/units/$(TARGETSUFFIX)),)
+UNITDIR_LIBTAR=$(PACKAGEDIR_LIBTAR)/units/$(TARGETSUFFIX)
+else
+UNITDIR_LIBTAR=$(PACKAGEDIR_LIBTAR)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_LIBTAR)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBTAR=$(PACKAGEDIR_LIBTAR)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_LIBTAR)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_LIBTAR=$(PACKAGEDIR_LIBTAR)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_LIBTAR=$(PACKAGEDIR_LIBTAR)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBTAR)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBTAR) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBTAR)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBTAR=
+UNITDIR_LIBTAR:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libtar/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBTAR),)
+UNITDIR_LIBTAR:=$(firstword $(UNITDIR_LIBTAR))
+else
+UNITDIR_LIBTAR=
+endif
+endif
+ifdef UNITDIR_LIBTAR
+override COMPILER_UNITDIR+=$(UNITDIR_LIBTAR)
+endif
+ifdef UNITDIR_FPMAKE_LIBTAR
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_LIBTAR)
+endif
+endif
+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_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)
+endif
+ifneq ($(wildcard $(PACKAGEDIR_FPMKUNIT)/units/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units/$(SOURCESUFFIX)
+else
+ifneq ($(wildcard $(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX)),)
+UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)/units_bs/$(SOURCESUFFIX)
+else
+UNITDIR_FPMAKE_FPMKUNIT=$(PACKAGEDIR_FPMKUNIT)
+endif
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FPMKUNIT)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FPMKUNIT) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FPMKUNIT)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FPMKUNIT=
+UNITDIR_FPMKUNIT:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fpmkunit/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FPMKUNIT),)
+UNITDIR_FPMKUNIT:=$(firstword $(UNITDIR_FPMKUNIT))
+else
+UNITDIR_FPMKUNIT=
+endif
+endif
+ifdef UNITDIR_FPMKUNIT
+override COMPILER_UNITDIR+=$(UNITDIR_FPMKUNIT)
+endif
+ifdef UNITDIR_FPMAKE_FPMKUNIT
+override COMPILER_FPMAKE_UNITDIR+=$(UNITDIR_FPMAKE_FPMKUNIT)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+override FPCMAKEOPT+=-FD$(NEW_BINUTILS_PATH)
+override FPMAKE_BUILD_OPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifndef CROSSCOMPILE
+ifneq ($(BINUTILSPREFIX),)
+override FPCMAKEOPT+=-XP$(BINUTILSPREFIX)
+override FPMAKE_BUILD_OPT+=-XP$(BINUTILSPREFIX)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+endif
+ifneq ($(findstring $(OS_TARGET),dragonfly freebsd openbsd netbsd linux solaris),)
+ifneq ($(findstring $(CPU_TARGET),x86_64 mips mipsel),)
+override FPCOPT+=-Cg
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPMAKEBUILDOPT
+override FPMAKE_BUILD_OPT+=$(FPMAKEBUILDOPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(strip $(FPC) $(FPCOPT))
+ifneq (,$(findstring -sh ,$(COMPILER)))
+UseEXECPPAS=1
+endif
+ifneq (,$(findstring -s ,$(COMPILER)))
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+UseEXECPPAS=1
+endif
+endif
+ifneq ($(UseEXECPPAS),1)
+EXECPPAS=
+else
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+ifneq ($(IMPORTLIBPREFIX)-$(STATICLIBEXT),$(STATICLIBPREFIX)-$(STATICLIBEXT))
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+else
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+endif
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(EXAMPLEINSTALLTARGET) $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(PACKAGE_NAME)
+endif
+endif
+ifndef FULLZIPNAME
+FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) c$(TAROPT)f $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+	$(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+	$(MKDIR) $(DIST_DESTDIR)
+	$(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+	echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+	echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+	echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+	/bin/sh $(ZIPWRAPPER)
+else
+ifdef RUNBATCH
+	$(RUNBATCH) $(ZIPWRAPPER)
+else
+	$(ZIPWRAPPER)
+endif
+endif
+	$(DEL) $(ZIPWRAPPER)
+else
+	$(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+	$(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+override CLEANEXEDBGFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEDBGFILES))
+endif
+ifdef CLEAN_PROGRAMS
+override CLEANEXEFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEEXT), $(CLEAN_PROGRAMS)))
+override CLEANEXEDBGFILES+=$(addprefix $(TARGETDIRPREFIX),$(addsuffix $(EXEDBGEXT), $(CLEAN_PROGRAMS)))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANEXEDBGFILES
+	-$(DELTREE) $(CLEANEXEDBGFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+ifdef LOCALFPMAKEBIN
+	-$(DEL) $(LOCALFPMAKEBIN)
+	-$(DEL) $(FPMAKEBINOBJ)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)  FPC fpmake... $(FPCFPMAKE)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+units:
+examples:
+shared:
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+zipexampleinstall: fpc_zipexampleinstall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: units examples shared sourceinstall exampleinstall zipexampleinstall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+override FPCOPT:=$(filter-out -FU%,$(FPCOPT))
+override FPCOPT:=$(filter-out -FE%,$(FPCOPT))
+override FPCOPT:=$(filter-out $(addprefix -Fu,$(COMPILER_UNITDIR)),$(FPCOPT))# Compose general fpmake-parameters
+ifdef FPMAKEOPT
+FPMAKE_OPT+=$(FPMAKEOPT)
+endif
+FPMAKE_OPT+=--localunitdir=../..
+FPMAKE_OPT+=--globalunitdir=..
+FPMAKE_OPT+=$(FPC_TARGETOPT)
+FPMAKE_OPT+=$(addprefix -o ,$(FPCOPT))
+FPMAKE_OPT+=--compiler=$(FPC)
+FPMAKE_OPT+=-bu
+.NOTPARALLEL:
+fpmake$(SRCEXEEXT): fpmake.pp
+	$(FPCFPMAKE) fpmake.pp $(FPMAKE_SKIP_CONFIG) $(addprefix -Fu,$(COMPILER_FPMAKE_UNITDIR)) $(FPCMAKEOPT) $(OPT)
+all:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) compile $(FPMAKE_OPT)
+smart:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -XX -o -CX
+release:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -dRELEASE
+debug:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -dDEBUG
+ifeq ($(FPMAKE_BIN_CLEAN),)
+clean:
+else
+clean:
+	$(FPMAKE_BIN_CLEAN) clean $(FPMAKE_OPT)
+endif
+ifeq ($(FPMAKE_BIN_CLEAN),)
+distclean:	$(addsuffix _distclean,$(TARGET_DIRS)) fpc_cleanall
+else
+distclean:
+ifdef inUnix
+	{ $(FPMAKE_BIN_CLEAN) distclean $(FPMAKE_OPT); if [ $$? != "0" ]; then { echo Something wrong with fpmake exectable. Remove the executable and call make recursively to recover.; $(DEL) $(FPMAKE_BIN_CLEAN); $(MAKE) fpc_cleanall; }; fi;  }
+else
+	$(FPMAKE_BIN_CLEAN) distclean $(FPMAKE_OPT)
+endif
+	-$(DEL) $(LOCALFPMAKE)
+endif
+cleanall: distclean
+install:	fpmake$(SRCEXEEXT)
+ifdef UNIXHier
+	$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR)
+else
+	$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_BASEDIR) --baseinstalldir=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR)
+endif
+distinstall:	fpmake$(SRCEXEEXT)
+ifdef UNIXHier
+	$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR) -ie -fsp 0
+else
+	$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_BASEDIR) --baseinstalldir=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR) -ie -fsp 0
+endif
+zipinstall:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) zipinstall $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX)
+zipdistinstall:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) zipinstall $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX) -ie -fsp 0
+zipsourceinstall:	fpmake$(SRCEXEEXT)
+ifdef UNIXHier
+	$(LOCALFPMAKE) archive $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX) --prefix=share/src/fpc-\$$\(PACKAGEVERSION\)/$(INSTALL_FPCSUBDIR)/\$$\(PACKAGEDIRECTORY\)
+else
+	$(LOCALFPMAKE) archive $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX) --prefix=source\\$(INSTALL_FPCSUBDIR)\\\$$\(PACKAGEDIRECTORY\)
+endif

+ 102 - 0
packages/libcups/Makefile.fpc

@@ -0,0 +1,102 @@
+#
+#   Makefile.fpc for running fpmake
+#
+
+[package]
+name=libcups
+version=3.1.1
+
+[require]
+packages=rtl fpmkunit
+
+[install]
+fpcpackage=y
+
+[default]
+fpcdir=../..
+
+[prerules]
+FPMAKE_BIN_CLEAN=$(wildcard ./fpmake$(SRCEXEEXT))
+ifdef OS_TARGET
+FPC_TARGETOPT+=--os=$(OS_TARGET)
+endif
+ifdef CPU_TARGET
+FPC_TARGETOPT+=--cpu=$(CPU_TARGET)
+endif
+LOCALFPMAKE=./fpmake$(SRCEXEEXT)
+
+[rules]
+# Do not pass the Makefile's unit and binary target locations. Fpmake uses it's own.
+override FPCOPT:=$(filter-out -FU%,$(FPCOPT))
+override FPCOPT:=$(filter-out -FE%,$(FPCOPT))
+# Do not pass the package-unitdirectories. Fpmake adds those and this way they don't apear in the .fpm
+override FPCOPT:=$(filter-out $(addprefix -Fu,$(COMPILER_UNITDIR)),$(FPCOPT))# Compose general fpmake-parameters
+# Compose general fpmake-parameters
+ifdef FPMAKEOPT
+FPMAKE_OPT+=$(FPMAKEOPT)
+endif
+FPMAKE_OPT+=--localunitdir=../..
+FPMAKE_OPT+=--globalunitdir=..
+FPMAKE_OPT+=$(FPC_TARGETOPT)
+FPMAKE_OPT+=$(addprefix -o ,$(FPCOPT))
+FPMAKE_OPT+=--compiler=$(FPC)
+FPMAKE_OPT+=-bu
+.NOTPARALLEL:
+
+fpmake$(SRCEXEEXT): fpmake.pp
+	$(FPCFPMAKE) fpmake.pp $(FPMAKE_SKIP_CONFIG) $(addprefix -Fu,$(COMPILER_FPMAKE_UNITDIR)) $(FPCMAKEOPT) $(OPT)
+all:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) compile $(FPMAKE_OPT)
+smart:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -XX -o -CX
+release:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -dRELEASE
+debug:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) compile $(FPMAKE_OPT) -o -dDEBUG
+# If no fpmake exists and (dist)clean is called, do not try to build fpmake, it will
+# most often fail because the dependencies are cleared.
+# In case of a clean, simply do nothing
+ifeq ($(FPMAKE_BIN_CLEAN),)
+clean:
+else
+clean:
+	$(FPMAKE_BIN_CLEAN) clean $(FPMAKE_OPT)
+endif
+# In case of a distclean, perform an 'old'-style distclean. This to avoid problems
+# when the package is compiled using fpcmake prior to running this clean using fpmake
+ifeq ($(FPMAKE_BIN_CLEAN),)
+distclean:	$(addsuffix _distclean,$(TARGET_DIRS)) fpc_cleanall
+else
+distclean:
+ifdef inUnix
+        { $(FPMAKE_BIN_CLEAN) distclean $(FPMAKE_OPT); if [ $$? != "0" ]; then { echo Something wrong with fpmake exectable. Remove the executable and call make recursively to recover.; $(DEL) $(FPMAKE_BIN_CLEAN); $(MAKE) fpc_cleanall; }; fi;  }
+else
+        $(FPMAKE_BIN_CLEAN) distclean $(FPMAKE_OPT)
+endif
+	-$(DEL) $(LOCALFPMAKE)
+endif
+cleanall: distclean
+install:	fpmake$(SRCEXEEXT)
+ifdef UNIXHier
+	$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR)
+else
+	$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_BASEDIR) --baseinstalldir=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR)
+endif
+# distinstall also installs the example-sources and omits the location of the source-
+# files from the fpunits.cfg files.
+distinstall:	fpmake$(SRCEXEEXT)
+ifdef UNIXHier
+	$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_PREFIX) --baseinstalldir=$(INSTALL_LIBDIR)/fpc/$(FPC_VERSION) --unitinstalldir=$(INSTALL_UNITDIR) -ie -fsp 0
+else
+	$(LOCALFPMAKE) install $(FPMAKE_OPT) --prefix=$(INSTALL_BASEDIR) --baseinstalldir=$(INSTALL_BASEDIR) --unitinstalldir=$(INSTALL_UNITDIR) -ie -fsp 0
+endif
+zipinstall:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) zipinstall $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX)
+zipdistinstall:	fpmake$(SRCEXEEXT)
+	$(LOCALFPMAKE) zipinstall $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX) -ie -fsp 0
+zipsourceinstall:	fpmake$(SRCEXEEXT)
+ifdef UNIXHier
+	$(LOCALFPMAKE) archive $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX) --prefix=share/src/fpc-\$$\(PACKAGEVERSION\)/$(INSTALL_FPCSUBDIR)/\$$\(PACKAGEDIRECTORY\)
+else
+	$(LOCALFPMAKE) archive $(FPMAKE_OPT) --zipprefix=$(DIST_DESTDIR)/$(ZIPPREFIX) --prefix=source\\$(INSTALL_FPCSUBDIR)\\\$$\(PACKAGEDIRECTORY\)
+endif

+ 44 - 0
packages/libcups/fpmake.pp

@@ -0,0 +1,44 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+  P : TPackage;
+  T : TTarget;
+begin
+  With Installer do
+    begin
+{$endif ALLPACKAGES}
+
+    P:=AddPackage('libcups');
+{$ifdef ALLPACKAGES}
+    P.Directory:=ADirectory;
+{$endif ALLPACKAGES}
+    P.Version:='3.1.1';
+
+    P.Author := 'Header: Olivier GUILBAUD';
+    P.License := 'Header: LGPL with modi ';
+    P.HomepageURL := 'www.freepascal.org';
+    P.OSes := [beos,haiku,freebsd,darwin,iphonesim,solaris,netbsd,openbsd,linux,aix,dragonfly];
+    P.Email := '';
+    P.Description := 'This package provides an interface with Common UNIX Printing System.';
+    P.NeedLibC:= false;  // true for headers that indirectly link to libc?
+    
+    P.Dependencies.Add('rtl-extra');
+    
+    P.SourcePath.Add('src');
+
+    T:=P.Targets.AddUnit('cupsdyn.pp');
+
+    P.ExamplePath.Add('examples');
+//    P.Targets.AddExampleProgram('testcups.pp');
+//    P.Sources.AddExampleFiles('examples/*',P.Directory,false,'.');
+
+
+{$ifndef ALLPACKAGES}
+    Run;
+    end;
+end.
+{$endif ALLPACKAGES}

+ 1391 - 0
packages/libcups/src/cupsdyn.pp

@@ -0,0 +1,1391 @@
+{
+ *****************************************************************************
+  This file is part of the Printer4Lazarus package
+
+  See the file COPYING.modifiedLGPL.txt, included in this distribution,
+  for details about the license.
+ *****************************************************************************
+
+  Author: Olivier GUILBAUD
+
+  Abstract:
+    This code provide an interface with Common UNIX Printing System (CUPS).
+    it is based on cups.h version 1.47
+    This code is tested with the 1.1.19 of CUPS
+    
+  link:
+    http://www.cups.org
+    http://localhost:631/spm.html (for documentation)
+    
+  See : /usr/share/doc/cups/licence.txt
+  
+  Required
+    CUPS 1.1.19 or more
+    libCUPS
+    
+  History
+   sept 14 2003 - Create
+   nov  04 2003 - First release
+   mars 08 2005 - Dynamique link lib by Jesus Reyes (big thanks)
+                - Some modifications for work with Mdk 10.1
+------------------------------------------------------------------------------}
+unit cupsdyn;
+
+{$mode objfpc}{$H+}
+{.$define UseLibC}
+interface
+
+
+uses
+  Classes, SysUtils, dynlibs,
+  {$ifdef UseLibC}
+  {$IFDEF darwin}
+  miniCupsLibc
+  {$ELSE}
+  Libc
+  {$ENDIF}
+  {$else}
+  baseunix, unix, sockets
+  {$endif}
+  ;
+
+{$PACKRECORDS C}
+
+{.$LINKLIB ssl}
+{.$LINKLIB crypto}
+{.$LINKLIB nsl}
+
+{$ifndef UseLibC}
+type
+  sockaddr_in = TSockAddr;
+  pfd_set = PFDSet;
+  PFILE = pointer;
+{$endif}
+
+//
+//
+// CUPS_language types & consts
+//
+//
+type
+  //Message Indices
+  cups_msg_t=(
+    CUPS_MSG_OK,
+    CUPS_MSG_CANCEL,
+    CUPS_MSG_HELP,
+    CUPS_MSG_QUIT,
+    CUPS_MSG_CLOSE,
+    CUPS_MSG_YES,
+    CUPS_MSG_NO,
+    CUPS_MSG_ON,
+    CUPS_MSG_OFF,
+    CUPS_MSG_SAVE,
+    CUPS_MSG_DISCARD,
+    CUPS_MSG_DEFAULT,
+    CUPS_MSG_OPTIONS,
+    CUPS_MSG_MORE_INFO,
+    CUPS_MSG_BLACK,
+    CUPS_MSG_COLOR,
+    CUPS_MSG_CYAN,
+    CUPS_MSG_MAGENTA,
+    CUPS_MSG_YELLOW,
+    CUPS_MSG_COPYRIGHT,
+    CUPS_MSG_GENERAL,
+    CUPS_MSG_PRINTER,
+    CUPS_MSG_IMAGE,
+    CUPS_MSG_HPGL2,
+    CUPS_MSG_EXTRA,
+    CUPS_MSG_DOCUMENT,
+    CUPS_MSG_OTHER,
+    CUPS_MSG_PRINT_PAGES,
+    CUPS_MSG_ENTIRE_DOCUMENT,
+    CUPS_MSG_PAGE_RANGE,
+    CUPS_MSG_REVERSE_ORDER,
+    CUPS_MSG_PAGE_FORMAT,
+    CUPS_MSG_1_UP,
+    CUPS_MSG_2_UP,
+    CUPS_MSG_4_UP,
+    CUPS_MSG_IMAGE_SCALING,
+    CUPS_MSG_USE_NATURAL_IMAGE_SIZE,
+    CUPS_MSG_ZOOM_BY_PERCENT,
+    CUPS_MSG_ZOOM_BY_PPI,
+    CUPS_MSG_MIRROR_IMAGE,
+    CUPS_MSG_COLOR_SATURATION,
+    CUPS_MSG_COLOR_HUE,
+    CUPS_MSG_FIT_TO_PAGE,
+    CUPS_MSG_SHADING,
+    CUPS_MSG_DEFAULT_PEN_WIDTH,
+    CUPS_MSG_GAMMA_CORRECTION,
+    CUPS_MSG_BRIGHTNESS,
+    CUPS_MSG_ADD,
+    CUPS_MSG_DELETE,
+    CUPS_MSG_MODIFY,
+    CUPS_MSG_PRINTER_URI,
+    CUPS_MSG_PRINTER_NAME,
+    CUPS_MSG_PRINTER_LOCATION,
+    CUPS_MSG_PRINTER_INFO,
+    CUPS_MSG_PRINTER_MAKE_AND_MODEL,
+    CUPS_MSG_DEVICE_URI,
+    CUPS_MSG_FORMATTING_PAGE,
+    CUPS_MSG_PRINTING_PAGE,
+    CUPS_MSG_INITIALIZING_PRINTER,
+    CUPS_MSG_PRINTER_STATE,
+    CUPS_MSG_ACCEPTING_JOBS,
+    CUPS_MSG_NOT_ACCEPTING_JOBS,
+    CUPS_MSG_PRINT_JOBS,
+    CUPS_MSG_CLASS,
+    CUPS_MSG_LOCAL,
+    CUPS_MSG_REMOTE,
+    CUPS_MSG_DUPLEXING,
+    CUPS_MSG_STAPLING,
+    CUPS_MSG_FAST_COPIES,
+    CUPS_MSG_COLLATED_COPIES,
+    CUPS_MSG_PUNCHING,
+    CUPS_MSG_COVERING,
+    CUPS_MSG_BINDING,
+    CUPS_MSG_SORTING,
+    CUPS_MSG_SMALL,
+    CUPS_MSG_MEDIUM,
+    CUPS_MSG_LARGE,
+    CUPS_MSG_VARIABLE,
+    CUPS_MSG_IDLE,
+    CUPS_MSG_PROCESSING,
+    CUPS_MSG_STOPPED,
+    CUPS_MSG_ALL,
+    CUPS_MSG_ODD,
+    CUPS_MSG_EVEN_PAGES,
+    CUPS_MSG_DARKER_LIGHTER,
+    CUPS_MSG_MEDIA_SIZE,
+    CUPS_MSG_MEDIA_TYPE,
+    CUPS_MSG_MEDIA_SOURCE,
+    CUPS_MSG_ORIENTATION,
+    CUPS_MSG_PORTRAIT,
+    CUPS_MSG_LANDSCAPE,
+    CUPS_MSG_JOB_STATE,
+    CUPS_MSG_JOB_NAME,
+    CUPS_MSG_USER_NAME,
+    CUPS_MSG_PRIORITY,
+    CUPS_MSG_COPIES,
+    CUPS_MSG_FILE_SIZE,
+    CUPS_MSG_PENDING,
+    CUPS_MSG_OUTPUT_MODE,
+    CUPS_MSG_RESOLUTION,
+    CUPS_MSG_TEXT,
+    CUPS_MSG_PRETTYPRINT,
+    CUPS_MSG_MARGINS,
+    CUPS_MSG_LEFT,
+    CUPS_MSG_RIGHT,
+    CUPS_MSG_BOTTOM,
+    CUPS_MSG_TOP,
+    CUPS_MSG_FILENAME,
+    CUPS_MSG_PRINT,
+    CUPS_MSG_OPTIONS_INSTALLED,
+    CUPS_MSG_AUTO,
+    CUPS_MSG_HTTP_BASE:= 200,
+    CUPS_MSG_HTTP_END := 505,
+    CUPS_MSG_MAX
+  );
+
+  //Language Encodings
+  cups_encoding_t=(
+    CUPS_US_ASCII,
+    CUPS_ISO8859_1,
+    CUPS_ISO8859_2,
+    CUPS_ISO8859_3,
+    CUPS_ISO8859_4,
+    CUPS_ISO8859_5,
+    CUPS_ISO8859_6,
+    CUPS_ISO8859_7,
+    CUPS_ISO8859_8,
+    CUPS_ISO8859_9,
+    CUPS_ISO8859_10,
+    CUPS_UTF8,
+    CUPS_ISO8859_13,
+    CUPS_ISO8859_14,
+    CUPS_ISO8859_15,
+    CUPS_WINDOWS_874,
+    CUPS_WINDOWS_1250,
+    CUPS_WINDOWS_1251,
+    CUPS_WINDOWS_1252,
+    CUPS_WINDOWS_1253,
+    CUPS_WINDOWS_1254,
+    CUPS_WINDOWS_1255,
+    CUPS_WINDOWS_1256,
+    CUPS_WINDOWS_1257,
+    CUPS_WINDOWS_1258,
+    CUPS_KOI8_R,
+    CUPS_KOI8_U
+   );
+
+   Pcups_lang_str=^cups_lang_str;
+   cups_lang_str = record
+        next     : Pcups_lang_str;        //Next language in cache
+        used     : longint;               //Number of times this entry has been used
+        encoding : cups_encoding_t;       //Text encoding
+        language : array[0..15] of char;  //Language/locale name
+        messages : array[0..Ord(CUPS_MSG_MAX)-1] of Pchar; //Message array
+   end;
+   cups_lang_t = cups_lang_str;
+   Pcups_lang_t=^cups_lang_t;
+
+
+//
+//
+// CUPS_HTTP types & consts
+//
+//
+const
+  HTTP_MAX_URI	   =	1024;	//Max length of URI string
+  HTTP_MAX_HOST	   =	256;	//Max length of hostname string
+  HTTP_MAX_BUFFER  =	2048;	//Max length of data buffer
+  HTTP_MAX_VALUE   =	256;	//Max header field value length
+
+type
+  //----------------------------------------------------------------------------
+  //   md5.h
+  //----------------------------------------------------------------------------
+  Pmd5_byte_t=^md5_byte_t;
+  md5_byte_t = byte; //8-bit byte
+  md5_word_t=dword; //32-bit word
+
+  //Define the state of the MD5 Algorithm.
+  md5_state_s = record
+          count : array[0..1] of md5_word_t; //message length in bits, lsw first
+          abcd  : array[0..3] of md5_word_t; //digest buffer
+          buf   : array[0..63] of md5_byte_t;//accumulate block
+       end;
+  md5_state_t = md5_state_s;
+  {-----------------------------------------------------------------------------}
+
+  //States are server-oriented
+  http_state_t=(
+    HTTP_WAITING,	//Waiting for command
+    HTTP_OPTIONS,	//OPTIONS command, waiting for blank line
+    HTTP_GET,		//GET command, waiting for blank line
+    HTTP_GET_SEND,	//GET command, sending data
+    HTTP_HEAD,		//HEAD command, waiting for blank line
+    HTTP_POST,		//POST command, waiting for blank line
+    HTTP_POST_RECV,	//POST command, receiving data
+    HTTP_POST_SEND,	//POST command, sending data
+    HTTP_PUT,		//PUT command, waiting for blank line
+    HTTP_PUT_RECV,	//PUT command, receiving data
+    HTTP_DELETE,	//DELETE command, waiting for blank line
+    HTTP_TRACE,		//TRACE command, waiting for blank line
+    HTTP_CLOSE,		//CLOSE command, waiting for blank line
+    HTTP_STATUS		//Command complete, sending status
+  );
+
+  //HTTP version numbers...
+  http_version_t=(
+    HTTP_0_9 := 9,    //HTTP/0.9
+    HTTP_1_0 := 100,  //HTTP/1.0
+    HTTP_1_1 := 101   //HTTP/1.1
+  );
+
+  //HTTP keep-alive values...
+  http_keepalive_t=(
+    HTTP_KEEPALIVE_OFF := 0,
+    HTTP_KEEPALIVE_ON
+  );
+
+  //HTTP transfer encoding values...
+  http_encoding_t=(
+    HTTP_ENCODE_LENGTH,   //Data is sent with Content-Length
+    HTTP_ENCODE_CHUNKED	  //Data is chunked
+  );
+
+  //HTTP encryption values...
+  http_encryption_t=(
+    HTTP_ENCRYPT_IF_REQUESTED,	//Encrypt if requested (TLS upgrade)
+    HTTP_ENCRYPT_NEVER,		//Never encrypt
+    HTTP_ENCRYPT_REQUIRED,	//Encryption is required (TLS upgrade)
+    HTTP_ENCRYPT_ALWAYS		//Always encrypt (SSL)
+  );
+
+  //HTTP authentication types...
+  http_auth_t=(
+    HTTP_AUTH_NONE,		//No authentication in use
+    HTTP_AUTH_BASIC,		//Basic authentication in use
+    HTTP_AUTH_MD5,		//Digest authentication in use
+    HTTP_AUTH_MD5_SESS,		//MD5-session authentication in use
+    HTTP_AUTH_MD5_INT,		//Digest authentication in use for body
+    HTTP_AUTH_MD5_SESS_INT	//MD5-session authentication in use for body
+  );
+
+  //HTTP status codes...
+  http_status_t=(
+    HTTP_ERROR := -1,		//An error response from httpXxxx() */
+
+    HTTP_CONTINUE := 100,	//Everything OK, keep going... */
+    HTTP_SWITCHING_PROTOCOLS,	//HTTP upgrade to TLS/SSL */
+
+    HTTP_OK := 200,		//OPTIONS/GET/HEAD/POST/TRACE command was successful */
+    HTTP_CREATED,		//PUT command was successful */
+    HTTP_ACCEPTED,		//DELETE command was successful */
+    HTTP_NOT_AUTHORITATIVE,	//Information isn't authoritative */
+    HTTP_NO_CONTENT,		//Successful command, no new data */
+    HTTP_RESET_CONTENT,		//Content was reset/recreated */
+    HTTP_PARTIAL_CONTENT,	//Only a partial file was recieved/sent */
+
+    HTTP_MULTIPLE_CHOICES:=300,	//Multiple files match request */
+    HTTP_MOVED_PERMANENTLY,	//Document has moved permanently */
+    HTTP_MOVED_TEMPORARILY,	//Document has moved temporarily */
+    HTTP_SEE_OTHER,		//See this other link... */
+    HTTP_NOT_MODIFIED,		//File not modified */
+    HTTP_USE_PROXY,		//Must use a proxy to access this URI */
+
+    HTTP_BAD_REQUEST := 400,	//Bad request */
+    HTTP_UNAUTHORIZED,		//Unauthorized to access host */
+    HTTP_PAYMENT_REQUIRED,	//Payment required */
+    HTTP_FORBIDDEN,		//Forbidden to access this URI */
+    HTTP_NOT_FOUND,		//URI was not found */
+    HTTP_METHOD_NOT_ALLOWED,	//Method is not allowed */
+    HTTP_NOT_ACCEPTABLE,	//Not Acceptable */
+    HTTP_PROXY_AUTHENTICATION,	//Proxy Authentication is Required */
+    HTTP_REQUEST_TIMEOUT,	//Request timed out */
+    HTTP_CONFLICT,		//Request is self-conflicting */
+    HTTP_GONE,			//Server has gone away */
+    HTTP_LENGTH_REQUIRED,	//A content length or encoding is required */
+    HTTP_PRECONDITION,		//Precondition failed */
+    HTTP_REQUEST_TOO_LARGE,	//Request entity too large */
+    HTTP_URI_TOO_LONG,		//URI too long */
+    HTTP_UNSUPPORTED_MEDIATYPE,	//The requested media type is unsupported */
+    HTTP_UPGRADE_REQUIRED:= 426,//Upgrade to SSL/TLS required */
+
+    HTTP_SERVER_ERROR := 500,	//Internal server error */
+    HTTP_NOT_IMPLEMENTED,	//Feature not implemented */
+    HTTP_BAD_GATEWAY,		//Bad gateway */
+    HTTP_SERVICE_UNAVAILABLE,	//Service is unavailable */
+    HTTP_GATEWAY_TIMEOUT,	//Gateway connection timed out */
+    HTTP_NOT_SUPPORTED		//HTTP version not supported */
+  );
+
+  //HTTP field names...
+  http_field_t=(
+    HTTP_FIELD_UNKNOWN := -1,
+    HTTP_FIELD_ACCEPT_LANGUAGE,
+    HTTP_FIELD_ACCEPT_RANGES,
+    HTTP_FIELD_AUTHORIZATION,
+    HTTP_FIELD_CONNECTION,
+    HTTP_FIELD_CONTENT_ENCODING,
+    HTTP_FIELD_CONTENT_LANGUAGE,
+    HTTP_FIELD_CONTENT_LENGTH,
+    HTTP_FIELD_CONTENT_LOCATION,
+    HTTP_FIELD_CONTENT_MD5,
+    HTTP_FIELD_CONTENT_RANGE,
+    HTTP_FIELD_CONTENT_TYPE,
+    HTTP_FIELD_CONTENT_VERSION,
+    HTTP_FIELD_DATE,
+    HTTP_FIELD_HOST,
+    HTTP_FIELD_IF_MODIFIED_SINCE,
+    HTTP_FIELD_IF_UNMODIFIED_SINCE,
+    HTTP_FIELD_KEEP_ALIVE,
+    HTTP_FIELD_LAST_MODIFIED,
+    HTTP_FIELD_LINK,
+    HTTP_FIELD_LOCATION,
+    HTTP_FIELD_RANGE,
+    HTTP_FIELD_REFERER,
+    HTTP_FIELD_RETRY_AFTER,
+    HTTP_FIELD_TRANSFER_ENCODING,
+    HTTP_FIELD_UPGRADE,
+    HTTP_FIELD_USER_AGENT,
+    HTTP_FIELD_WWW_AUTHENTICATE,
+    HTTP_FIELD_MAX
+   );
+
+   Phttp_t=^http_t;
+   http_t=record
+            fd : longint;            //File descriptor for this socket
+            blocking : longint;      //To block or not to block
+            error : longint;         //Last error on read
+            activity : time_t;       //Time since last read/write
+            state : http_state_t;    //State of client
+            status : http_status_t;  //Status of last request
+            version : http_version_t;//Protocol version
+            keep_alive : http_keepalive_t; //Keep-alive supported?
+            hostaddr : sockaddr_in;        //Address of connected host
+            hostname : array[0..(HTTP_MAX_HOST)-1] of char; //Name of connected host
+            fields : array[0..Ord(HTTP_FIELD_MAX)-1] of array[0..(HTTP_MAX_VALUE)-1] of char; //Field values
+            data : ^char;                                   //Pointer to data buffer
+            data_encoding : http_encoding_t;                //Chunked or not
+            data_remaining : longint;                       //Number of bytes left
+            used : longint;                                 //Number of bytes used in buffer
+            buffer : array[0..(HTTP_MAX_BUFFER)-1] of char; //Buffer for messages
+            auth_type : longint;                            //Authentication in use
+            md5_state : md5_state_t;                        //MD5 state
+            nonce : array[0..(HTTP_MAX_VALUE)-1] of char;   //Nonce value
+            nonce_count : longint;                          //Nonce count
+            tls : pointer;                                  //TLS state information
+            encryption : http_encryption_t;                 //Encryption requirements
+            input_set : Pfd_set;                            //select() set for httpWait()
+         end;
+    TArrayChar32=array[0..32] of char;
+
+
+//
+//
+//  cups_ppd types and consts
+//
+//
+const
+  //PPD size limits (defined in Adobe spec
+  PPD_MAX_NAME = 41;    //Maximum size of name + 1 for nul
+  PPD_MAX_TEXT = 81;    //Maximum size of text + 1 for nul
+  PPD_MAX_LINE = 256;   //Maximum size of line + 1 for nul
+  PPD_VERSION  = '4.3'; //Kept in sync with Adobe version number
+
+Type
+  //UI types ...
+  ppd_ui_t=(
+    PPD_UI_BOOLEAN,		//True or False option
+    PPD_UI_PICKONE,		//Pick one from a list
+    PPD_UI_PICKMANY		//Pick zero or more from a list
+  );
+
+  //Order dependency sections
+  ppd_section_t=(
+    PPD_ORDER_ANY,		//Option code can be anywhere in the file
+    PPD_ORDER_DOCUMENT,		//... must be in the DocumentSetup section
+    PPD_ORDER_EXIT,		//... must be sent prior to the document
+    PPD_ORDER_JCL,		//... must be sent as a JCL command
+    PPD_ORDER_PAGE,		//... must be in the PageSetup section
+    PPD_ORDER_PROLOG		//... must be in the Prolog section
+  );
+
+  //Colorspaces
+  ppd_cs_t=(
+    PPD_CS_CMYK := -4,		//CMYK colorspace
+    PPD_CS_CMY,			//CMY colorspace
+    PPD_CS_GRAY := 1,		//Grayscale colorspace
+    PPD_CS_RGB := 3,		//RGB colorspace
+    PPD_CS_RGBK,		//RGBK (K = gray) colorspace
+    PPD_CS_N			//DeviceN colorspace
+   );
+
+  //Status Codes
+  ppd_status_t=(
+    PPD_OK := 0,		//OK
+    PPD_FILE_OPEN_ERROR,	//Unable to open PPD file
+    PPD_NULL_FILE,		//NULL PPD file pointer
+    PPD_ALLOC_ERROR,		//Memory allocation error
+    PPD_MISSING_PPDADOBE4,	//Missing PPD-Adobe-4.x header
+    PPD_MISSING_VALUE,		//Missing value string
+    PPD_INTERNAL_ERROR,		//Internal error
+    PPD_BAD_OPEN_GROUP,		//Bad OpenGroup
+    PPD_NESTED_OPEN_GROUP,	//openGroup without a CloseGroup first
+    PPD_BAD_OPEN_UI,		//Bad OpenUI/JCLOpenUI
+    PPD_NESTED_OPEN_UI,		//OpenUI/JCLOpenUI without a CloseUI/JCLCloseUI first
+    PPD_BAD_ORDER_DEPENDENCY,	//Bad OrderDependency
+    PPD_BAD_UI_CONSTRAINTS,	//Bad UIConstraints
+    PPD_MISSING_ASTERISK,	//Missing asterisk in column 0
+    PPD_LINE_TOO_LONG,		//Line longer than 255 chars
+    PPD_ILLEGAL_CHARACTER,	//Illegal control character
+    PPD_ILLEGAL_MAIN_KEYWORD,	//Illegal main keyword string
+    PPD_ILLEGAL_OPTION_KEYWORD,	//Illegal option keyword string
+    PPD_ILLEGAL_TRANSLATION	//Illegal translation string
+  );
+
+  //PPD Attribute Structure
+  Pppd_attr_t  =^ppd_attr_t;
+  PPppd_attr_t =^Pppd_attr_t;
+  ppd_attr_t = record
+    name : array[0..(PPD_MAX_NAME)-1] of char;                //Name of attribute (cupsXYZ)
+    spec : array[0..(PPD_MAX_NAME + PPD_MAX_TEXT)-1] of char; //Specifier string, if any
+    value: Pchar;                                             //Value string
+  end;
+
+  //Option choices
+  Pppd_choice_t=^ppd_choice_t;
+  PPppd_choice_t=^Pppd_choice_t;
+  PPPppd_choice_t=^PPppd_choice_t;
+  ppd_choice_t = record
+    marked : Char;                              //0 if not selected, 1 otherwise
+    choice : Array[0..(PPD_MAX_NAME)-1] of char;//Computer-readable option name
+    text   : Array[0..(PPD_MAX_TEXT)-1] of char;//Human-readable option name
+    code   : Pchar;                             //Code to send for this option
+    option : Pointer;                           //Pointer to parent option structure
+  end;
+
+  //Options
+  Pppd_option_t=^ppd_option_t;
+  ppd_option_t = record
+    conflicted : char;                              //0 if no conflicts exist, 1 otherwise
+    keyword    : array[0..(PPD_MAX_NAME)-1] of char;//Option keyword name ("PageSize", etc.)
+    defchoice  : array[0..(PPD_MAX_NAME)-1] of char;//Default option choice
+    text       : array[0..(PPD_MAX_TEXT)-1] of char;//Human-readable text
+    ui         : ppd_ui_t;                          //Type of UI option
+    section    : ppd_section_t;                     //Section for command
+    order      : integer;                           //Order number
+    num_choices: LongInt;                           //Number of option choices
+    choices    : Pppd_choice_t;                     //Option choices
+  end;
+
+  //Groups
+   {Group text strings are limited to 39 chars + nul in order to
+    preserve binary compatibility and allow applications to get
+    the group's keyword name. }
+  Pppd_group_str=^ppd_group_str;
+  ppd_group_str = record
+    text          : array[0..(PPD_MAX_TEXT - PPD_MAX_NAME)-1] of char; //Human-readable group name
+    name          : array[0..(PPD_MAX_NAME)-1] of char;                //Group name
+    num_options   : longint;                                           //Number of options
+    options       : Pppd_option_t;                                     //Options
+    num_subgroups : longint;                                           //Number of sub-groups
+    subgroups     : Pppd_group_str;                                    //Sub-groups (max depth = 1)
+  end;
+  ppd_group_t = ppd_group_str;
+  Pppd_group_t= ^ppd_group_t;
+
+  //Constraints
+  Pppd_const_t=^ppd_const_t;
+  ppd_const_t = record
+    option1 : array[0..(PPD_MAX_NAME)-1] of char; //First keyword
+    choice1 : array[0..(PPD_MAX_NAME)-1] of char; //First option/choice (blank for all)
+    option2 : array[0..(PPD_MAX_NAME)-1] of char; //Second keyword
+    choice2 : array[0..(PPD_MAX_NAME)-1] of char; //Second option/choice (blank for all)
+  end;
+
+  //Page Sizes
+  Pppd_size_t=^ppd_size_t;
+  ppd_size_t = record
+    marked : LongInt;                            //Page size selected?
+    name   : array[0..(PPD_MAX_NAME)-1] of char; //Media size option
+    width  : single;                             //Width of media in points
+    length : single;                             //Length of media in points
+    left   : single;                             //Left printable margin in points
+    bottom : single;                             //Bottom printable margin in points
+    right  : single;                             //Right printable margin in points
+    top    : single;                             //Top printable margin in points
+  end;
+
+  //Emulators
+  Pppd_emul_t=^ppd_emul_t;
+  ppd_emul_t = record
+    name : array[0..(PPD_MAX_NAME)-1] of char; //Emulator name
+    start: Pchar;                              //Code to switch to this emulation
+    stop : Pchar;                              //Code to stop this emulation
+  end;
+
+  //sRGB Color Profiles
+  Pppd_profile_t=^ppd_profile_t;
+  ppd_profile_t = record
+    resolution : array[0..(PPD_MAX_NAME)-1] of char;   //Resolution or "-"
+    media_type : array[0..(PPD_MAX_NAME)-1] of char;   //Media type of "-"
+    density    : single;                               //Ink density to use
+    gamma      : single;                               //Gamma correction to use
+    matrix     : array[0..2] of array[0..2] of single; //Transform matrix
+  end;
+
+  //Files
+  Pppd_file_t=^ppd_file_t;
+  ppd_file_t = record
+    language_level     : longint;                //Language level of device
+    color_device       : longint;                //1=color device, 0=grayscale
+    variable_sizes     : longint;                //1 = supports variable sizes, 0 = doesn't
+    accurate_screens   : longint;                //1 = supports accurate screens, 0 = not
+    contone_only       : longint;                //1 = continuous tone only, 0 = not
+    landscape          : longint;                //-90 or 90
+    model_number       : longint;                //Device-specific model number
+    manual_copies      : longint;                //1 = Copies done manually, 0 = hardware
+    throughput         : longint;                //Pages per minute
+    colorspace         : ppd_cs_t;               //Default colorspace
+    patches            : Pchar;                  //Patch commands to be sent to printer
+    num_emulations     : longint;                //Number of emulations supported
+    emulations         : Pppd_emul_t;            //Emulations and the code to invoke them
+    jcl_begin          : Pchar;                  //Start JCL commands
+    jcl_ps             : Pchar;                  //Enter PostScript interpreter
+    jcl_end            : Pchar;                  //End JCL commands
+    lang_encoding      : Pchar;                  //Language encoding
+    lang_version       : Pchar;                  //Language version (English, Spanish, etc.)
+    modelname          : Pchar;                  //Model name (general)
+    ttrasterizer       : Pchar;                  //Truetype rasterizer
+    manufacturer       : Pchar;                  //Manufacturer name
+    product            : Pchar;                  //Product name (from PS RIP/interpreter)
+    nickname           : Pchar;                  //Nickname (specific)
+    shortnickname      : Pchar;                  //Short version of nickname
+    num_groups         : longint;                //Number of UI groups
+    groups             : Pppd_group_t;           //UI groups
+    num_sizes          : longint;                //Number of page sizes
+    sizes              : Pppd_size_t;            //Page sizes
+    custom_min         : array[0..1] of single;  //Minimum variable page size
+    custom_max         : array[0..1] of single;  //Maximum variable page size
+    custom_margins     : array[0..3] of single;  //Margins around page
+    num_consts         : longint;                //Number of UI/Non-UI constraints
+    consts             : Pppd_const_t;           //UI/Non-UI constraints
+    num_fonts          : longint;                //Number of pre-loaded fonts
+    fonts              : PPchar;                 //Pre-loaded fonts
+    num_profiles       : longint;                //Number of sRGB color profiles
+    profiles           : Pppd_profile_t;         //sRGB color profiles
+    num_filters        : longint;                //Number of filters
+    filters            : PPchar;                 //Filter strings...
+    flip_duplex        : longint;                //1 = Flip page for back sides (New in CUPS 1.1)
+    protocols          : Pchar;                  //Protocols (BCP, TBCP) string (New in CUPS 1.1.19)
+    pcfilename         : Pchar;                  //PCFileName string
+    num_attrs          : longint;                //Number of attributes
+    cur_attr           : longint;                //Current attribute
+    attrs              : PPppd_attr_t;           //Attributes
+  end;
+
+//
+//
+//  cups_ipp types and consts
+//
+//
+const
+  IPP_VERSION =	#1#1;
+   { IPP registered port number...  This is the default value - applications
+    should use the ippPort() function so that you can customize things in
+    /etc/services if needed!}
+  IPP_PORT = 631;
+  IPP_MAX_NAME = 256;  //Common limits...
+  IPP_MAX_VALUES = 10; //Now just an allocation increment
+
+Type
+  //Job States....
+  ipp_jstate_t = (IPP_JOB_PENDING := 3,
+                  IPP_JOB_HELD,
+                  IPP_JOB_PROCESSING,
+                  IPP_JOB_STOPPED,
+                  IPP_JOB_CANCELLED,
+                  IPP_JOB_ABORTED,
+                  IPP_JOB_COMPLETED);
+  //Qualities...
+  ipp_quality_t= (IPP_QUALITY_DRAFT := 3,
+                  IPP_QUALITY_NORMAL,
+                  IPP_QUALITY_HIGH);
+
+  //Orientation...
+  ipp_orient_t = (IPP_PORTRAIT := 3,      //No rotation
+                  IPP_LANDSCAPE,          //90 degrees counter-clockwise
+                  IPP_REVERSE_LANDSCAPE,  //90 degrees clockwise
+                  IPP_REVERSE_PORTRAIT);  //180 degrees
+
+  {Format tags for attribute formats...
+   Mask for copied attribute values
+   Bitflag for copied attribute values  }
+  ipp_tag_t = (IPP_TAG_COPY := (-($7fffffff)) - 1,
+               IPP_TAG_ZERO := $00,
+               IPP_TAG_OPERATION,
+               IPP_TAG_JOB,
+               IPP_TAG_END,
+               IPP_TAG_PRINTER,
+               IPP_TAG_UNSUPPORTED_GROUP,
+               IPP_TAG_SUBSCRIPTION,
+               IPP_TAG_EVENT_NOTIFICATION,
+               IPP_TAG_UNSUPPORTED_VALUE := $10,
+               IPP_TAG_DEFAULT,
+               IPP_TAG_UNKNOWN,
+               IPP_TAG_NOVALUE,
+               IPP_TAG_NOTSETTABLE := $15,
+               IPP_TAG_DELETEATTR,
+               IPP_TAG_ADMINDEFINE,
+               IPP_TAG_INTEGER := $21,
+               IPP_TAG_BOOLEAN,
+               IPP_TAG_ENUM,
+               IPP_TAG_STRING := $30,
+               IPP_TAG_DATE,
+               IPP_TAG_RESOLUTION,
+               IPP_TAG_RANGE,
+               IPP_TAG_BEGIN_COLLECTION,
+               IPP_TAG_TEXTLANG,
+               IPP_TAG_NAMELANG,
+               IPP_TAG_END_COLLECTION,
+               IPP_TAG_TEXT := $41,
+               IPP_TAG_NAME,
+               IPP_TAG_KEYWORD := $44,
+               IPP_TAG_URI,
+               IPP_TAG_URISCHEME,
+               IPP_TAG_CHARSET,
+               IPP_TAG_LANGUAGE,
+               IPP_TAG_MIMETYPE,
+               IPP_TAG_MEMBERNAME,
+               IPP_TAG_MASK := $7fffffff
+               );
+
+  //Resolution units...
+  ipp_res_t = (IPP_RES_PER_INCH := 3,
+               IPP_RES_PER_CM);
+
+  //Finishings...
+  ipp_finish_t = (IPP_FINISHINGS_NONE := 3,
+                  IPP_FINISHINGS_STAPLE,
+                  IPP_FINISHINGS_PUNCH,
+                  IPP_FINISHINGS_COVER,
+                  IPP_FINISHINGS_BIND,
+                  IPP_FINISHINGS_SADDLE_STITCH,
+                  IPP_FINISHINGS_EDGE_STITCH,
+                  IPP_FINISHINGS_FOLD,
+                  IPP_FINISHINGS_TRIM,
+                  IPP_FINISHINGS_BALE,
+                  IPP_FINISHINGS_BOOKLET_MAKER,
+                  IPP_FINISHINGS_JOB_OFFSET,
+                  IPP_FINISHINGS_STAPLE_TOP_LEFT := 20,
+                  IPP_FINISHINGS_STAPLE_BOTTOM_LEFT,
+                  IPP_FINISHINGS_STAPLE_TOP_RIGHT,
+                  IPP_FINISHINGS_STAPLE_BOTTOM_RIGHT,
+                  IPP_FINISHINGS_EDGE_STITCH_LEFT,
+                  IPP_FINISHINGS_EDGE_STITCH_TOP,
+                  IPP_FINISHINGS_EDGE_STITCH_RIGHT,
+                  IPP_FINISHINGS_EDGE_STITCH_BOTTOM,
+                  IPP_FINISHINGS_STAPLE_DUAL_LEFT,
+                  IPP_FINISHINGS_STAPLE_DUAL_TOP,
+                  IPP_FINISHINGS_STAPLE_DUAL_RIGHT,
+                  IPP_FINISHINGS_STAPLE_DUAL_BOTTOM,
+                  IPP_FINISHINGS_BIND_LEFT := 50,
+                  IPP_FINISHINGS_BIND_TOP,
+                  IPP_FINISHINGS_BIND_RIGHT,
+                  IPP_FINISHINGS_BIND_BOTTOM
+                 );
+
+  ipp_status_t = (IPP_OK := $0000,
+                  IPP_OK_SUBST,
+                  IPP_OK_CONFLICT,
+                  IPP_OK_IGNORED_SUBSCRIPTIONS,
+                  IPP_OK_IGNORED_NOTIFICATIONS,
+                  IPP_OK_TOO_MANY_EVENTS,
+                  IPP_OK_BUT_CANCEL_SUBSCRIPTION,
+                  IPP_REDIRECTION_OTHER_SITE := $300,
+                  IPP_BAD_REQUEST := $0400,
+                  IPP_FORBIDDEN,
+                  IPP_NOT_AUTHENTICATED,
+                  IPP_NOT_AUTHORIZED,
+                  IPP_NOT_POSSIBLE,
+                  IPP_TIMEOUT,
+                  IPP_NOT_FOUND,
+                  IPP_GONE,
+                  IPP_REQUEST_ENTITY,
+                  IPP_REQUEST_VALUE,
+                  IPP_DOCUMENT_FORMAT,
+                  IPP_ATTRIBUTES,
+                  IPP_URI_SCHEME,
+                  IPP_CHARSET,IPP_CONFLICT,
+                  IPP_COMPRESSION_NOT_SUPPORTED,
+                  IPP_COMPRESSION_ERROR,
+                  IPP_DOCUMENT_FORMAT_ERROR,
+                  IPP_DOCUMENT_ACCESS_ERROR,
+                  IPP_ATTRIBUTES_NOT_SETTABLE,
+                  IPP_IGNORED_ALL_SUBSCRIPTIONS,
+                  IPP_TOO_MANY_SUBSCRIPTIONS,
+                  IPP_IGNORED_ALL_NOTIFICATIONS,
+                  IPP_PRINT_SUPPORT_FILE_NOT_FOUND,
+                  IPP_INTERNAL_ERROR := $0500,
+                  IPP_OPERATION_NOT_SUPPORTED,
+                  IPP_SERVICE_UNAVAILABLE,
+                  IPP_VERSION_NOT_SUPPORTED,
+                  IPP_DEVICE_ERROR,
+                  IPP_TEMPORARY_ERROR,
+                  IPP_NOT_ACCEPTING,
+                  IPP_PRINTER_BUSY,
+                  IPP_ERROR_JOB_CANCELLED,
+                  IPP_MULTIPLE_JOBS_NOT_SUPPORTED,
+                  IPP_PRINTER_IS_DEACTIVATED);
+
+  //Printer States....
+  ipp_pstate_t = (IPP_PRINTER_IDLE := 3,
+                  IPP_PRINTER_PROCESSING,
+                  IPP_PRINTER_STOPPED);
+
+  //IPP states...
+  ipp_state_t = (IPP_ERROR := -(1), //An error occurred
+                 IPP_IDLE,          //Nothing is happening/request completed
+                 IPP_HEADER,        //The request header needs to be sent/received
+                 IPP_ATTRIBUTE,     //One or more attributes need to be sent/received
+                 IPP_DATA);         //IPP request data needs to be sent/received
+
+   //IPP operations...
+  ipp_op_t = (IPP_PRINT_JOB := $0002,
+              IPP_PRINT_URI,
+              IPP_VALIDATE_JOB,
+              IPP_CREATE_JOB,
+              IPP_SEND_DOCUMENT,
+              IPP_SEND_URI,
+              IPP_CANCEL_JOB,
+              IPP_GET_JOB_ATTRIBUTES,
+              IPP_GET_JOBS,
+              IPP_GET_PRINTER_ATTRIBUTES,
+              IPP_HOLD_JOB,
+              IPP_RELEASE_JOB,
+              IPP_RESTART_JOB,
+              IPP_PAUSE_PRINTER := $0010,
+              IPP_RESUME_PRINTER,
+              IPP_PURGE_JOBS,
+              IPP_SET_PRINTER_ATTRIBUTES,
+              IPP_SET_JOB_ATTRIBUTES,
+              IPP_GET_PRINTER_SUPPORTED_VALUES,
+              IPP_CREATE_PRINTER_SUBSCRIPTION,
+              IPP_CREATE_JOB_SUBSCRIPTION,
+              IPP_GET_SUBSCRIPTION_ATTRIBUTES,
+              IPP_GET_SUBSCRIPTIONS,
+              IPP_RENEW_SUBSCRIPTION,
+              IPP_CANCEL_SUBSCRIPTION,
+              IPP_GET_NOTIFICATIONS,
+              IPP_SEND_NOTIFICATIONS,
+              IPP_GET_PRINT_SUPPORT_FILES := $0021,
+              IPP_ENABLE_PRINTER,
+              IPP_DISABLE_PRINTER,
+              IPP_PAUSE_PRINTER_AFTER_CURRENT_JOB,
+              IPP_HOLD_NEW_JOBS,
+              IPP_RELEASE_HELD_NEW_JOBS,
+              IPP_DEACTIVATE_PRINTER,
+              IPP_ACTIVATE_PRINTER,
+              IPP_RESTART_PRINTER,
+              IPP_SHUTDOWN_PRINTER,
+              IPP_STARTUP_PRINTER,
+              IPP_REPROCESS_JOB,
+              IPP_CANCEL_CURRENT_JOB,
+              IPP_SUSPEND_CURRENT_JOB,
+              IPP_RESUME_JOB,
+              IPP_PROMOTE_JOB,
+              IPP_SCHEDULE_JOB_AFTER,
+              IPP_PRIVATE := $4000,
+              CUPS_GET_DEFAULT,
+              CUPS_GET_PRINTERS,
+              CUPS_ADD_PRINTER,
+              CUPS_DELETE_PRINTER,
+              CUPS_GET_CLASSES,
+              CUPS_ADD_CLASS,
+              CUPS_DELETE_CLASS,
+              CUPS_ACCEPT_JOBS,
+              CUPS_REJECT_JOBS,
+              CUPS_SET_DEFAULT,
+              CUPS_GET_DEVICES,
+              CUPS_GET_PPDS,
+              CUPS_MOVE_JOB,
+              CUPS_ADD_DEVICE,
+              CUPS_DELETE_DEVICE
+             );
+
+  Pipp_uchar_t=^ipp_uchar_t;
+  ipp_uchar_t = byte;   //Unsigned 8-bit integer/character
+
+  //Request Header
+  ipp_request_t = record
+      case longint of
+         0 : (any : record  //Any Header
+                      version : array[0..1] of ipp_uchar_t; //Protocol version number
+                      op_status : longint;                  //Operation ID or status code
+                      request_id : longint;                 //Request ID
+                    end);
+         1 : (op : record  //Operation ID
+                     version : array[0..1] of ipp_uchar_t;  //Protocol version number
+                     operation_id : ipp_op_t;               //Operation ID
+                     request_id : longint;                  //Request ID
+                   end);
+         2 : (status : record //Status Header
+                         version:array[0..1] of ipp_uchar_t;//Protocol version number
+                         status_code : ipp_status_t;        //Status code
+                         request_id : longint;              //Request ID
+                       end);
+      end;
+
+
+  //Attribute Value
+  ipp_value_t = record
+      case longint of
+        0 : ( aInteger : longint );                  //Integer/enumerated value
+        1 : ( aBoolean : char );                     //Boolean value
+        2 : ( aDate : array[0..10] of ipp_uchar_t ); //Date/time value
+        3 : ( resolution : record                    //Resolution value
+                             xres : longint;           //Horizontal resolution
+                             yres : longint;           //Vertical resolution
+                             units : ipp_res_t;        //Resolution units
+                            end );
+        4 : ( range : record                         //Range of integers value
+                        lower : longint;               //Lower value
+                        upper : longint;               //Upper value
+                      end );
+        5 : ( _string : record                       //String with language value
+                          charset: Pchar;              //Character set
+                          text   : Pchar;              //String
+                        end );
+        6 : ( unknown : record                       //Unknown attribute type
+                          length : longint;            //Length of attribute
+                          data : pointer;              //Data in attribute
+                        end );
+     end;
+  Pipp_value_t = ^ipp_value_t;
+
+
+  //Attribute
+  Pipp_attribute_s=^ipp_attribute_s;
+  ipp_attribute_s = record
+         next      : Pipp_attribute_s;   //Next attribute in list
+         group_tag : ipp_tag_t;          //Job/Printer/Operation group tag
+         value_tag : ipp_tag_t;          //What type of value is it?
+         name      : Pchar;              //Name of attribute
+         num_values: longint;            //Number of values
+         values    : array[0..0] of ipp_value_t; //Values
+  end;
+  ipp_attribute_t = ipp_attribute_s;
+  Pipp_attribute_t=^ipp_attribute_t;
+
+  //Request State
+  Pipp_t=^ipp_t;
+  ipp_t = record
+            state   : ipp_state_t;      //State of request
+            request : ipp_request_t;    //Request header
+            attrs   : Pipp_attribute_t; //Attributes
+            last    : Pipp_attribute_t; //Last attribute in list
+            current : Pipp_attribute_t; //Current attribute (for read/write)
+            curtag  : ipp_tag_t;        //Current attribute group tag
+          end;
+
+//
+//
+//
+//
+const
+  MaxcupsLibs=2;
+  cupsLibs :Array[0..MaxcupsLibs] of string = ('libcups.so',
+                                               'libcups.so.2',
+                                               '/usr/lib/libcups.dylib');
+
+const
+  CUPS_VERSION = 1.0119;
+  CUPS_VERSION_MAJOR = 1;
+  CUPS_VERSION_MINOR = 1;
+  CUPS_VERSION_PATCH = 19;
+  CUPS_DATE_ANY = -(1);
+
+  //**** Printer Type/Capability Bits ********
+  //not a typedef'd enum so we can OR
+  CUPS_PRINTER_LOCAL     = $0000;	// Local printer or class
+  CUPS_PRINTER_CLASS     = $0001;	// Printer class
+  CUPS_PRINTER_REMOTE    = $0002;	// Remote printer or class
+  CUPS_PRINTER_BW        = $0004;	// Can do B&W printing
+  CUPS_PRINTER_COLOR     = $0008;	// Can do color printing
+  CUPS_PRINTER_DUPLEX    = $0010;	// Can do duplexing
+  CUPS_PRINTER_STAPLE    = $0020;	// Can staple output
+  CUPS_PRINTER_COPIES    = $0040;	// Can do copies
+  CUPS_PRINTER_COLLATE   = $0080;	// Can collage copies
+  CUPS_PRINTER_PUNCH     = $0100;	// Can punch output
+  CUPS_PRINTER_COVER     = $0200;	// Can cover output
+  CUPS_PRINTER_BIND      = $0400;	// Can bind output
+  CUPS_PRINTER_SORT      = $0800;	// Can sort output
+  CUPS_PRINTER_SMALL     = $1000;	// Can do Letter/Legal/A4
+  CUPS_PRINTER_MEDIUM    = $2000;	// Can do Tabloid/B/C/A3/A2
+  CUPS_PRINTER_LARGE     = $4000;	// Can do D/E/A1/A0
+  CUPS_PRINTER_VARIABLE  = $8000;	// Can do variable sizes
+  CUPS_PRINTER_IMPLICIT  = $10000;	// Implicit class
+  CUPS_PRINTER_DEFAULT   = $20000;	// Default printer on network
+  CUPS_PRINTER_OPTIONS   = $FFFC;	// ~(CLASS | REMOTE | IMPLICIT)
+
+type
+  PPPChar = ^PPChar;
+  cups_ptype_t = dword; //See bit flags consts
+  TFunctionWithParam1 = function (_para1:Pchar):Pchar;
+
+  //Printer Options
+  Pcups_option_t= ^cups_option_t;
+  PPcups_option_t=^Pcups_option_t;
+  cups_option_t = record
+                    name  : PChar; //Name of option
+                    value : PChar; //Value of option
+                  end;
+
+  //Destination
+  Pcups_dest_t=^cups_dest_t;
+  PPcups_dest_t=^Pcups_dest_t;
+  cups_dest_t = record
+                  name       : PChar;          //Printer or class name
+                  instance   : PChar;          //Local instance name or NULL
+                  is_default : Longint;        //Is this printer the default?
+                  num_options: Longint;        //Number of options
+                  options    : Pcups_option_t; //Options
+                end;
+  //Job
+  Pcups_job_t=^cups_job_t;
+  PPcups_job_t=^Pcups_job_t;
+  cups_job_t = record
+                 id               : longint;       //The job ID
+                 dest             : Pchar;         //Printer or class name
+                 title            : Pchar;         //Title/job name
+                 user             : Pchar;         //User the submitted the job
+                 format           : Pchar;         //Document format
+                 state            : ipp_jstate_t;  //Job state
+                 size             : longint;       //Size in kilobytes
+                 priority         : longint;       //Priority (1-100)
+                 completed_time   : time_t;        //Time the job was completed
+                 creation_time    : time_t;        //Time the job was created
+                 processing_time  : time_t;        //Time the job was processed
+               end;
+
+
+var
+  //
+  //cups_language.pp
+  //
+  cupsLangEncoding: function (lang:Pcups_lang_t):Pchar;cdecl;
+  cupsLangFlush: procedure; cdecl;
+  cupsLangFree: procedure (lang:Pcups_lang_t);cdecl;
+  cupsLangGet: function (language:Pchar):Pcups_lang_t;cdecl;
+  //
+  //cups_http.pp
+  //
+  httpCheck: function (http:Phttp_t):longint;cdecl;
+  httpClose: procedure (http_t :Phttp_t); cdecl;
+  httpConnect: function (host:Pchar; port:longint):Phttp_t;cdecl;
+  httpConnectEncrypt: function (host:Pchar; port:longint; encrypt:http_encryption_t):Phttp_t;cdecl;
+  httpDelete: function (http:Phttp_t; uri:Pchar):longint;cdecl;
+  httpEncryption: function (http:Phttp_t; e:http_encryption_t):longint;cdecl;
+  httpError: function (http : longint) : longint; cdecl;
+  httpFlush: procedure (http:Phttp_t);cdecl;
+  httpGet: function (http:Phttp_t; uri:Pchar):longint;cdecl;
+  httpGets: function (line:Pchar; length:longint; http:Phttp_t):Pchar;cdecl;
+  httpGetDateString: function (t:time_t):Pchar;cdecl;
+  httpGetDateTime: function (s:Pchar):time_t;cdecl;
+  httpGetField: function (http,field : longint) : longint; cdecl;
+  //httpGetHostByName: function (name:Pchar):^hostent;cdecl;
+  httpGetSubField: function (http:Phttp_t; field:http_field_t; name:Pchar; value:Pchar):Pchar;cdecl;
+  httpHead: function (http:Phttp_t; uri:Pchar):longint;cdecl;
+  httpInitialize: procedure ;cdecl;
+  httpOptions: function (http:Phttp_t; uri:Pchar):longint;cdecl;
+  httpPost: function (http:Phttp_t; uri:Pchar):longint;cdecl;
+  httpPut: function (http:Phttp_t; uri:Pchar):longint;cdecl;
+  httpRead: function (http:Phttp_t; buffer:Pchar; length:longint):longint;cdecl;
+  httpReconnect: function (http:Phttp_t):longint;cdecl;
+  httpSeparate: procedure (uri:Pchar; method:Pchar; username:Pchar; host:Pchar; port:Plongint; resource:Pchar);cdecl;
+  httpSetField: procedure (http:Phttp_t; field:http_field_t; value:Pchar);cdecl;
+  httpStatus: function (status:http_status_t):Pchar;cdecl;
+  httpTrace: function (http:Phttp_t; uri:Pchar):longint;cdecl;
+  httpUpdate: function (http:Phttp_t):http_status_t;cdecl;
+  httpWait: function (http:Phttp_t; msec:longint):longint;cdecl;
+  httpWrite: function (http:Phttp_t; buffer:Pchar; length:longint):longint;cdecl;
+  //httpEncode64: function (out:Pchar; in:Pchar):Pchar;cdecl;
+  //httpDecode64: function (out:Pchar; in:Pchar):Pchar;cdecl;
+  httpGetLength: function (http:Phttp_t):longint;cdecl;
+  httpMD5: function (_para1:Pchar; _para2:Pchar; _para3:Pchar; {%H-}_para4:TArrayChar32):Pchar;cdecl;
+  httpMD5Final: function (_para1:Pchar; _para2:Pchar; _para3:Pchar; {%H-}_para4:TArrayChar32):Pchar;cdecl;
+  httpMD5String: function (_para1:Pmd5_byte_t; {%H-}_para2:TArrayChar32):Pchar;cdecl;
+
+  //
+  // cups_ppd
+  //
+  ppdClose: procedure (ppd:Pppd_file_t);cdecl;
+  ppdCollect: function (ppd:Pppd_file_t; section:ppd_section_t; choices:PPPppd_choice_t):longint;cdecl;
+  ppdConflicts: function (ppd:Pppd_file_t):longint;cdecl;
+  ppdEmit: function (ppd:Pppd_file_t; fp:PFILE; section:ppd_section_t):longint;cdecl;
+  ppdEmitFd: function (ppd:Pppd_file_t; fd:longint; section:ppd_section_t):longint;cdecl;
+  ppdEmitJCL: function (ppd:Pppd_file_t; fp:PFILE; job_id:longint; user:Pchar; title:Pchar):longint;cdecl;
+  ppdFindChoice: function (o:Pppd_option_t; option:Pchar):Pppd_choice_t;cdecl;
+  ppdFindMarkedChoice: function (ppd:Pppd_file_t; keyword:Pchar):Pppd_choice_t;cdecl;
+  ppdFindOption: function (ppd:Pppd_file_t; keyword:Pchar):Pppd_option_t;cdecl;
+  ppdIsMarked: function (ppd:Pppd_file_t; keyword:Pchar; option:Pchar):longint;cdecl;
+  ppdMarkDefaults: procedure (ppd:Pppd_file_t);cdecl;
+  ppdMarkOption: function (ppd:Pppd_file_t; keyword:Pchar; option:Pchar):longint;cdecl;
+  ppdOpen: function (fp:PFILE):Pppd_file_t;cdecl;
+  ppdOpenFd: function (fd:longint):Pppd_file_t;cdecl;
+  ppdOpenFile: function (filename:Pchar):Pppd_file_t;cdecl;
+  ppdPageLength: function (ppd:Pppd_file_t; name:Pchar):single;cdecl;
+  ppdPageSize: function (ppd:Pppd_file_t; name:Pchar):Pppd_size_t;cdecl;
+  ppdPageWidth: function (ppd:Pppd_file_t; name:Pchar):single;cdecl;
+  {New in CUPS 1.1.19}
+  ppdErrorString: function (status:ppd_status_t):Pchar;cdecl;
+  ppdFindAttr: function (ppd:Pppd_file_t; name:Pchar; spec:Pchar):Pchar;cdecl;
+  ppdFindNextAttr: function (ppd:Pppd_file_t; name:Pchar; spec:Pchar):Pchar;cdecl;
+  ppdLastError: function (line:Plongint):ppd_status_t;cdecl;
+
+  //
+  // cups_ipp
+  //
+  ippAddBoolean: function (ipp:Pipp_t; group:ipp_tag_t; name:Pchar; value:char):Pipp_attribute_t;cdecl;
+  ippAddBooleans: function (ipp:Pipp_t; group:ipp_tag_t; name:Pchar; num_values:longint; values:Pchar):Pipp_attribute_t;cdecl;
+  ippAddDate: function (ipp:Pipp_t; group:ipp_tag_t; name:Pchar; value:Pipp_uchar_t):Pipp_attribute_t;cdecl;
+  ippAddInteger: function (ipp:Pipp_t; group:ipp_tag_t; _type:ipp_tag_t; name:Pchar; value:longint):Pipp_attribute_t;cdecl;
+  ippAddIntegers: function (ipp:Pipp_t; group:ipp_tag_t; _type:ipp_tag_t; name:Pchar; num_values:longint;
+               values:Plongint):Pipp_attribute_t;cdecl;
+  ippAddRange: function (ipp:Pipp_t; group:ipp_tag_t; name:Pchar; lower:longint; upper:longint):Pipp_attribute_t;cdecl;
+  ippAddRanges: function (ipp:Pipp_t; group:ipp_tag_t; name:Pchar; num_values:longint; lower:Plongint;
+               upper:Plongint):Pipp_attribute_t;cdecl;
+  ippAddResolution: function (ipp:Pipp_t; group:ipp_tag_t; name:Pchar; units:ipp_res_t; xres:longint;
+               yres:longint):Pipp_attribute_t;cdecl;
+  ippAddResolutions: function (ipp:Pipp_t; group:ipp_tag_t; name:Pchar; num_values:longint; units:ipp_res_t;
+               xres:Plongint; yres:Plongint):Pipp_attribute_t;cdecl;
+  ippAddSeparator: function (ipp:Pipp_t):Pipp_attribute_t;cdecl;
+  ippAddString: function (ipp:Pipp_t; group:ipp_tag_t; _type:ipp_tag_t; name:Pchar; charset:Pchar;
+               value:Pchar):Pipp_attribute_t;cdecl;
+  ippAddStrings: function (ipp:Pipp_t; group:ipp_tag_t; _type:ipp_tag_t; name:Pchar; num_values:longint;
+               charset:Pchar; values:PPchar):Pipp_attribute_t;cdecl;
+  ippDateToTime: function (date:Pipp_uchar_t):time_t;cdecl;
+  ippDelete: procedure (ipp:Pipp_t);cdecl;
+  ippErrorString: function (error:ipp_status_t):Pchar;cdecl;
+  ippFindAttribute: function (ipp:Pipp_t; name:Pchar; _type:ipp_tag_t):Pipp_attribute_t;cdecl;
+  ippFindNextAttribute: function (ipp:Pipp_t; name:Pchar; _type:ipp_tag_t):Pipp_attribute_t;cdecl;
+  ippLength: function (ipp:Pipp_t):size_t;cdecl;
+  ippNew: function :Pipp_t;cdecl;
+  ippRead: function (http:Phttp_t; ipp:Pipp_t):ipp_state_t;cdecl;
+  ippTimeToDate: function (t:time_t):Pipp_uchar_t;cdecl;
+  ippWrite: function (http:Phttp_t; ipp:Pipp_t):ipp_state_t;cdecl;
+  ippPort: function :longint;cdecl;
+  ippSetPort: procedure (p:longint);cdecl;
+  _ipp_add_attr: function (_para1:Pipp_t; _para2:longint):Pipp_attribute_t;cdecl;
+  _ipp_free_attr: procedure (_para1:Pipp_attribute_t);cdecl;
+
+  //
+  //cups.pp
+  //
+  cupsServer: function :Pchar;cdecl;
+  cupsGetDefault:function :PChar; cdecl;
+  cupsGetPPD:function (printer :Pchar): PChar;cdecl;
+  cupsLastError:function : ipp_status_t; cdecl;
+  cupsGetPrinters:function (printers :PPPchar):longint;cdecl;
+  cupsDoFileRequest:function (http:Phttp_t; request:Pipp_t; const resource:Pchar; const filename:Pchar):Pipp_t;cdecl;
+  cupsCancelJob:function (printer:Pchar; job:longint):longint;cdecl;
+  cupsEncryption:function :http_encryption_t;cdecl;
+  cupsFreeJobs:procedure (num_jobs:longint; jobs:Pcups_job_t);cdecl;
+  cupsGetClasses:function (classes:PPPchar):longint;cdecl;
+  cupsGetJobs:function (jobs:PPcups_job_t; dest:Pchar; myjobs:longint; completed:longint):longint;cdecl;
+  cupsPrintFile:function (printer:Pchar; filename:Pchar; title:Pchar;
+      num_options:longint; options:Pcups_option_t):longint;cdecl;
+  cupsPrintFiles:function (printer:Pchar; num_files:longint; files:PPchar;
+      title:Pchar; num_options:longint; options:Pcups_option_t):longint;cdecl;
+  cupsTempFile:function (filename:Pchar; len:longint):Pchar;cdecl;
+  cupsTempFd:function (filename:Pchar; len:longint):longint;cdecl;
+  cupsAddDest:function (name:Pchar; instance:Pchar; num_dests:longint;
+      dests:PPcups_dest_t):longint;cdecl;
+  cupsFreeDests:procedure (num_dests:longint; dests:Pcups_dest_t);cdecl;
+  cupsGetDest:function (name:Pchar; instance:Pchar;
+      num_dests:longint; dests:Pcups_dest_t):Pcups_dest_t;cdecl;
+  cupsGetDests:function (dests:PPcups_dest_t):longint;cdecl;
+  cupsSetDests:procedure (num_dests:longint; dests:Pcups_dest_t);cdecl;
+  cupsAddOption:function (name:Pchar; value:Pchar; num_options:longint; options:PPcups_option_t):longint;cdecl;
+  cupsEncodeOptions:procedure (ipp:Pipp_t; num_options:longint; options:Pcups_option_t);cdecl;
+  cupsFreeOptions:procedure (num_options:longint; options:Pcups_option_t);cdecl;
+  cupsGetOption:function (name:Pchar; num_options:longint; options:Pcups_option_t):Pchar;cdecl;
+  cupsParseOptions:function (arg:Pchar; num_options:longint; options:PPcups_option_t):longint;cdecl;
+  cupsMarkOptions:function (ppd:Pppd_file_t; num_options:longint; options:Pcups_option_t):longint;cdecl;
+  cupsGetPassword:function (prompt:Pchar):Pchar;cdecl;
+  cupsSetEncryption:procedure (e:http_encryption_t);cdecl;
+  cupsSetPasswordCB:procedure (cb: TFunctionWithParam1);cdecl;
+  cupsSetServer:procedure (server:Pchar);cdecl;
+  cupsSetUser:procedure (user:Pchar);cdecl;
+  cupsUser:function :Pchar;cdecl;
+  
+function cupsDoRequest(ahttp :Phttp_t; aRequest :Pipp_t; aResource :PChar) : Pipp_t;
+function cupsLangDefault : Pcups_lang_t;
+
+procedure InitializeCups;
+procedure FinalizeCups;
+
+function CUPSLibInstalled : Boolean;
+
+var
+  CupsLibHandle: TLibHandle;
+  
+implementation
+
+var RefCount : integer;
+
+procedure InitializeCups;
+var i : integer;
+begin
+  inc(RefCount);
+  //debugln('InitializeCups RefCount=',dbgs(RefCount));
+  if RefCount = 1 then
+  begin
+    for i:=0 to MaxcupsLibs do
+    begin
+      CupsLibHandle := loadlibrary(cupslibs[i]);
+      if CupsLibHandle <> nilhandle then
+        Break;
+    end;
+    
+    if CupsLibHandle = nilhandle then
+    begin
+      //debugln('InitializeCups load cups lib failed');
+      RefCount := 0;
+      raise EInOutError.Create('Can not load cups library');
+    end;
+  end;
+  
+  //WriteLn('CupsLibHandle=', CupsLibHandle);
+  
+  //
+  //cups_language.pp
+  //
+  pointer(cupsLangEncoding) := GetProcedureAddress(CupsLibHandle, 'cupsLangEncoding');
+  pointer(cupsLangFlush) := GetProcedureAddress(CupsLibHandle, 'cupsLangFlush');
+  pointer(cupsLangFree) := GetProcedureAddress(CupsLibHandle, 'cupsLangFree');
+  pointer(cupsLangGet) := GetProcedureAddress(CupsLibHandle, 'cupsLangGet');
+
+  //
+  // cups_http.pp
+  //
+  pointer(httpCheck) := GetProcedureAddress(CupsLibHandle, 'httpCheck');
+  pointer(httpClose) := GetProcedureAddress(CupsLibHandle, 'httpClose');
+  pointer(httpConnect) := GetProcedureAddress(CupsLibHandle, 'httpConnect');
+  pointer(httpConnectEncrypt) := GetProcedureAddress(CupsLibHandle, 'httpConnectEncrypt');
+  pointer(httpDelete) := GetProcedureAddress(CupsLibHandle, 'httpDelete');
+  pointer(httpEncryption) := GetProcedureAddress(CupsLibHandle, 'httpEncryption');
+  pointer(httpError) := GetProcedureAddress(CupsLibHandle, 'httpError');
+  pointer(httpFlush) := GetProcedureAddress(CupsLibHandle, 'httpFlush');
+  pointer(httpGet) := GetProcedureAddress(CupsLibHandle, 'httpGet');
+  pointer(httpGets) := GetProcedureAddress(CupsLibHandle, 'httpGets');
+  pointer(httpGetDateString) := GetProcedureAddress(CupsLibHandle, 'httpGetDateString');
+  pointer(httpGetDateTime) := GetProcedureAddress(CupsLibHandle, 'httpGetDateTime');
+  pointer(httpGetField) := GetProcedureAddress(CupsLibHandle, 'httpGetField');
+  //pointer(httpGetHostByName) := GetProcedureAddress(CupsLibHandle, 'httpGetHostByName');
+  pointer(httpGetSubField) := GetProcedureAddress(CupsLibHandle, 'httpGetSubField');
+  pointer(httpHead) := GetProcedureAddress(CupsLibHandle, 'httpHead');
+  pointer(httpInitialize) := GetProcedureAddress(CupsLibHandle, 'httpInitialize');
+  pointer(httpOptions) := GetProcedureAddress(CupsLibHandle, 'httpOptions');
+  pointer(httpPost) := GetProcedureAddress(CupsLibHandle, 'httpPost');
+  pointer(httpPut) := GetProcedureAddress(CupsLibHandle, 'httpPut');
+  pointer(httpRead) := GetProcedureAddress(CupsLibHandle, 'httpRead');
+  pointer(httpReconnect) := GetProcedureAddress(CupsLibHandle, 'httpReconnect');
+  pointer(httpSeparate) := GetProcedureAddress(CupsLibHandle, 'httpSeparate');
+  pointer(httpSetField) := GetProcedureAddress(CupsLibHandle, 'httpSetField');
+  pointer(httpStatus) := GetProcedureAddress(CupsLibHandle, 'httpStatus');
+  pointer(httpTrace) := GetProcedureAddress(CupsLibHandle, 'httpTrace');
+  pointer(httpUpdate) := GetProcedureAddress(CupsLibHandle, 'httpUpdate');
+  pointer(httpWait) := GetProcedureAddress(CupsLibHandle, 'httpWait');
+  pointer(httpWrite) := GetProcedureAddress(CupsLibHandle, 'httpWrite');
+  //pointer(httpEncode64) := GetProcedureAddress(CupsLibHandle, 'httpEncode64');
+  //pointer(httpDecode64) := GetProcedureAddress(CupsLibHandle, 'httpDecode64');
+  pointer(httpGetLength) := GetProcedureAddress(CupsLibHandle, 'httpGetLength');
+  pointer(httpMD5) := GetProcedureAddress(CupsLibHandle, 'httpMD5');
+  pointer(httpMD5Final) := GetProcedureAddress(CupsLibHandle, 'httpMD5Final');
+  pointer(httpMD5String) := GetProcedureAddress(CupsLibHandle, 'httpMD5String');
+
+  //
+  // cups_ppd
+  //
+  pointer(ppdClose) := GetProcedureAddress(CupsLibHandle, 'ppdClose');
+  pointer(ppdCollect) := GetProcedureAddress(CupsLibHandle, 'ppdCollect');
+  pointer(ppdConflicts) := GetProcedureAddress(CupsLibHandle, 'ppdConflicts');
+  pointer(ppdEmit) := GetProcedureAddress(CupsLibHandle, 'ppdEmit');
+  pointer(ppdEmitFd) := GetProcedureAddress(CupsLibHandle, 'ppdEmitFd');
+  pointer(ppdEmitJCL) := GetProcedureAddress(CupsLibHandle, 'ppdEmitJCL');
+  pointer(ppdFindChoice) := GetProcedureAddress(CupsLibHandle, 'ppdFindChoice');
+  pointer(ppdFindMarkedChoice) := GetProcedureAddress(CupsLibHandle, 'ppdFindMarkedChoice');
+  pointer(ppdFindOption) := GetProcedureAddress(CupsLibHandle, 'ppdFindOption');
+  pointer(ppdIsMarked) := GetProcedureAddress(CupsLibHandle, 'ppdIsMarked');
+  pointer(ppdMarkDefaults) := GetProcedureAddress(CupsLibHandle, 'ppdMarkDefaults');
+  pointer(ppdMarkOption) := GetProcedureAddress(CupsLibHandle, 'ppdMarkOption');
+  pointer(ppdOpen) := GetProcedureAddress(CupsLibHandle, 'ppdOpen');
+  pointer(ppdOpenFd) := GetProcedureAddress(CupsLibHandle, 'ppdOpenFd');
+  pointer(ppdOpenFile) := GetProcedureAddress(CupsLibHandle, 'ppdOpenFile');
+  pointer(ppdPageLength) := GetProcedureAddress(CupsLibHandle, 'ppdPageLength');
+  pointer(ppdPageSize) := GetProcedureAddress(CupsLibHandle, 'ppdPageSize');
+  pointer(ppdPageWidth) := GetProcedureAddress(CupsLibHandle, 'ppdPageWidth');
+  {New in CUPS 1.1.19}
+  pointer(ppdErrorString) := GetProcedureAddress(CupsLibHandle, 'ppdErrorString');
+  pointer(ppdFindAttr) := GetProcedureAddress(CupsLibHandle, 'ppdFindAttr');
+  pointer(ppdFindNextAttr) := GetProcedureAddress(CupsLibHandle, 'ppdFindNextAttr');
+  pointer(ppdLastError) := GetProcedureAddress(CupsLibHandle, 'ppdLastError');
+  
+  //
+  // cups_ipp
+  //
+  pointer(ippAddBoolean) := GetProcedureAddress(CupsLibHandle, 'ippAddBoolean');
+  pointer(ippAddBooleans) := GetProcedureAddress(CupsLibHandle, 'ippAddBooleans');
+  pointer(ippAddDate) := GetProcedureAddress(CupsLibHandle, 'ippAddDate');
+  pointer(ippAddInteger) := GetProcedureAddress(CupsLibHandle, 'ippAddInteger');
+  pointer(ippAddIntegers) := GetProcedureAddress(CupsLibHandle, 'ippAddIntegers');
+  pointer(ippAddRange) := GetProcedureAddress(CupsLibHandle, 'ippAddRange');
+  pointer(ippAddRanges) := GetProcedureAddress(CupsLibHandle, 'ippAddRanges');
+  pointer(ippAddResolution) := GetProcedureAddress(CupsLibHandle, 'ippAddResolution');
+  pointer(ippAddResolutions) := GetProcedureAddress(CupsLibHandle, 'ippAddResolutions');
+  pointer(ippAddSeparator) := GetProcedureAddress(CupsLibHandle, 'ippAddSeparator');
+  pointer(ippAddString) := GetProcedureAddress(CupsLibHandle, 'ippAddString');
+  pointer(ippAddStrings) := GetProcedureAddress(CupsLibHandle, 'ippAddStrings');
+  pointer(ippDateToTime) := GetProcedureAddress(CupsLibHandle, 'ippDateToTime');
+  pointer(ippDelete) := GetProcedureAddress(CupsLibHandle, 'ippDelete');
+  pointer(ippErrorString) := GetProcedureAddress(CupsLibHandle, 'ippErrorString');
+  pointer(ippFindAttribute) := GetProcedureAddress(CupsLibHandle, 'ippFindAttribute');
+  pointer(ippFindNextAttribute) := GetProcedureAddress(CupsLibHandle, 'ippFindNextAttribute');
+  pointer(ippLength) := GetProcedureAddress(CupsLibHandle, 'ippLength');
+  pointer(ippNew) := GetProcedureAddress(CupsLibHandle, 'ippNew');
+  pointer(ippRead) := GetProcedureAddress(CupsLibHandle, 'ippRead');
+  pointer(ippTimeToDate) := GetProcedureAddress(CupsLibHandle, 'ippTimeToDate');
+  pointer(ippWrite) := GetProcedureAddress(CupsLibHandle, 'ippWrite');
+  pointer(ippPort) := GetProcedureAddress(CupsLibHandle, 'ippPort');
+  pointer(ippSetPort) := GetProcedureAddress(CupsLibHandle, 'ippSetPort');
+  pointer(_ipp_add_attr) := GetProcedureAddress(CupsLibHandle, '_ipp_add_attr');
+  pointer(_ipp_free_attr) := GetProcedureAddress(CupsLibHandle, '_ipp_free_attr');
+
+  //
+  // cups.pp
+  //
+  pointer(cupsServer) := GetProcedureAddress(CupsLibHandle, 'cupsServer');
+  pointer(cupsGetDefault) := GetProcedureAddress(CupsLibHandle, 'cupsGetDefault');
+  pointer(cupsGetPPD) := GetProcedureAddress(CupsLibHandle, 'cupsGetPPD');
+  pointer(cupsLastError) := GetProcedureAddress(CupsLibHandle, 'cupsLastError');
+  pointer(cupsGetPrinters) := GetProcedureAddress(CupsLibHandle, 'cupsGetPrinters');
+  pointer(cupsDoFileRequest) := GetProcedureAddress(CupsLibHandle, 'cupsDoFileRequest');
+  pointer(cupsCancelJob) := GetProcedureAddress(CupsLibHandle, 'cupsCancelJob');
+  pointer(cupsEncryption) := GetProcedureAddress(CupsLibHandle, 'cupsEncryption');
+  pointer(cupsFreeJobs) := GetProcedureAddress(CupsLibHandle, 'cupsFreeJobs');
+  pointer(cupsGetClasses) := GetProcedureAddress(CupsLibHandle, 'cupsGetClasses');
+  pointer(cupsGetJobs) := GetProcedureAddress(CupsLibHandle, 'cupsGetJobs');
+  pointer(cupsPrintFile) := GetProcedureAddress(CupsLibHandle, 'cupsPrintFile');
+  pointer(cupsPrintFiles) := GetProcedureAddress(CupsLibHandle, 'cupsPrintFiles');
+  pointer(cupsTempFile) := GetProcedureAddress(CupsLibHandle, 'cupsTempFile');
+  pointer(cupsTempFd) := GetProcedureAddress(CupsLibHandle, 'cupsTempFd');
+  pointer(cupsAddDest) := GetProcedureAddress(CupsLibHandle, 'cupsAddDest');
+  pointer(cupsFreeDests) := GetProcedureAddress(CupsLibHandle, 'cupsFreeDests');
+  pointer(cupsGetDest) := GetProcedureAddress(CupsLibHandle, 'cupsGetDest');
+  pointer(cupsGetDests) := GetProcedureAddress(CupsLibHandle, 'cupsGetDests');
+  pointer(cupsSetDests) := GetProcedureAddress(CupsLibHandle, 'cupsSetDests');
+  pointer(cupsAddOption) := GetProcedureAddress(CupsLibHandle, 'cupsAddOption');
+  pointer(cupsEncodeOptions) := GetProcedureAddress(CupsLibHandle, 'cupsEncodeOptions');
+  pointer(cupsFreeOptions) := GetProcedureAddress(CupsLibHandle, 'cupsFreeOptions');
+  pointer(cupsGetOption) := GetProcedureAddress(CupsLibHandle, 'cupsGetOption');
+  pointer(cupsParseOptions) := GetProcedureAddress(CupsLibHandle, 'cupsParseOptions');
+  pointer(cupsMarkOptions) := GetProcedureAddress(CupsLibHandle, 'cupsMarkOptions');
+  pointer(cupsGetPassword) := GetProcedureAddress(CupsLibHandle, 'cupsGetPassword');
+  pointer(cupsSetEncryption) := GetProcedureAddress(CupsLibHandle, 'cupsSetEncryption');
+  pointer(cupsSetPasswordCB) := GetProcedureAddress(CupsLibHandle, 'cupsSetPasswordCB');
+  pointer(cupsSetServer) := GetProcedureAddress(CupsLibHandle, 'cupsSetServer');
+  pointer(cupsSetUser) := GetProcedureAddress(CupsLibHandle, 'cupsSetUser');
+  pointer(cupsUser) := GetProcedureAddress(CupsLibHandle, 'cupsUser');
+  
+end;
+
+//Return true if CUPS lib can be loaded and
+//initilized.
+function CUPSLibInstalled : Boolean;
+begin
+  Result:=False;
+  if RefCount=0 then begin
+    Try
+      //debugln('CUPSLibInstalled A');
+      InitializeCups;
+    Except
+      exit;
+    end;
+  end;
+  Result:=(RefCount>0);
+end;
+
+procedure FinalizeCups;
+begin
+  //debugln('* FinalizeCups');
+  if RefCount>0 then
+    Dec(RefCount);
+    
+  if RefCount=0 then
+  begin
+    if (CupsLibHandle<>NilHandle) and not UnloadLibrary(CupsLibHandle) then
+      Inc(RefCount)
+    else
+      CupsLibHandle := NilHandle;
+  end;
+end;
+
+function cupsLangDefault : Pcups_lang_t;
+begin
+ Result:=cupsLangGet('');
+end;
+
+function cupsDoRequest(ahttp :Phttp_t; aRequest :Pipp_t;
+  aResource :PChar):Pipp_t;
+begin
+  Result:=cupsDoFileRequest(aHttp,aRequest,aResource,nil);
+end;
+
+INITIALIZATION
+  CupsLibHandle:= NilHandle;
+  
+end.
+