Browse Source

+ Initial implementation of installer tools

michael 20 years ago
parent
commit
73bc40037f
8 changed files with 3618 additions and 0 deletions
  1. 2222 0
      install/Makefile
  2. 40 0
      install/Makefile.fpc
  3. 173 0
      install/fpc.cft
  4. 307 0
      install/fpc.ist
  5. 275 0
      install/fpccfg.inc
  6. 240 0
      install/fpcmkcfg.pp
  7. 242 0
      install/fpcsubst.pp
  8. 119 0
      install/usubst.pp

+ 2222 - 0
install/Makefile

@@ -0,0 +1,2222 @@
+#
+# Don't edit, this file is generated by FPCMake Version 1.1 [2004/12/31]
+#
+default: all
+MAKEFILETARGETS=linux go32v2 win32 os2 freebsd beos netbsd amiga atari sunos qnx netware openbsd wdosx palmos macos darwin emx watcom morphos netwlibc
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) sunos qnx
+LIMIT83fs = go32v2 os2 emx 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 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))
+FPC:=$(shell $(FPCPROG) -PB)
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=ppc386
+endif
+else
+override FPC=ppc386
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+ifndef FPC_VERSION
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FULL_TARGET=$(OS_TARGET)
+FULL_SOURCE=$(OS_SOURCE)
+else
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(OS_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(OS_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(FULL_TARGET))
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(FULL_TARGET))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override PACKAGE_NAME=install
+override PACKAGE_VERSION=1.9.6
+override TARGET_PROGRAMS+=fpcsubst fpcmkcfg
+override CLEAN_UNITS+=usubst
+override INSTALL_FPCPACKAGE=n
+override COMPILER_OPTIONS+=-S2h
+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/$(FULL_TARGET)
+else
+COMPILER_UNITTARGETDIR=units/$(FULL_TARGET)
+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)/$(FULL_SOURCE)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(FULL_TARGET)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(FULL_TARGET)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(FULL_TARGET)
+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
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(FULL_SOURCE))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(FULL_TARGET)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+ifeq ($(OS_SOURCE),linux)
+ifndef GCCLIBDIR
+ifeq ($(CPU_TARGET),i386)
+ifneq ($(findstring x86_64,$(shell uname -a)),)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`)
+endif
+endif
+endif
+endif
+ifndef GCCLIBDIR
+CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(CROSSGCC),)
+GCCLIBDIR:=$(shell dirname `$(CROSSGCC) -print-libgcc-file-name`)
+endif
+endif
+ifndef OTHERLIBDIR
+OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
+endif
+endif
+ifdef inUnix
+ifeq ($(OS_SOURCE),netbsd)
+OTHERLIBDIR+=/usr/pkg/lib
+endif
+export GCCLIBDIR OTHERLIB
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+STATICLIBPREFIX=libp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.asm
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),sunos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(FULL_TARGET)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(FULL_SOURCE)
+ZIPCROSSPREFIX=$(FULL_TARGET)-
+else
+ZIPSUFFIX=.$(FULL_TARGET)
+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 /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vI
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl fcl
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),sparc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),arm)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),go32v2)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),os2)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),freebsd)
+ifeq ($(CPU_TARGET),x86_64)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),beos)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),netbsd)
+ifeq ($(CPU_TARGET),sparc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),amiga)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),atari)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),sunos)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),sunos)
+ifeq ($(CPU_TARGET),sparc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),qnx)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),netware)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),openbsd)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),openbsd)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),wdosx)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),palmos)
+ifeq ($(CPU_TARGET),m68k)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),macos)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),darwin)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+REQUIRE_PACKAGES_PTHREADS=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_IBASE=1
+REQUIRE_PACKAGES_POSTGRES=1
+REQUIRE_PACKAGES_MYSQL=1
+REQUIRE_PACKAGES_SQLITE=1
+endif
+endif
+ifeq ($(OS_TARGET),emx)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),watcom)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),morphos)
+ifeq ($(CPU_TARGET),powerpc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+endif
+ifeq ($(OS_TARGET),netwlibc)
+ifeq ($(CPU_TARGET),i386)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_PASZLIB=1
+REQUIRE_PACKAGES_FCL=1
+REQUIRE_PACKAGES_PASJPEG=1
+REQUIRE_PACKAGES_NETDB=1
+REQUIRE_PACKAGES_LIBASYNC=1
+endif
+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/$(FULL_TARGET)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(FULL_TARGET)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+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/$(FULL_TARGET)),)
+UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)/units/$(FULL_TARGET)
+else
+UNITDIR_PASZLIB=$(PACKAGEDIR_PASZLIB)
+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
+endif
+ifdef REQUIRE_PACKAGES_NETDB
+PACKAGEDIR_NETDB:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /netdb/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_NETDB),)
+ifneq ($(wildcard $(PACKAGEDIR_NETDB)/units/$(FULL_TARGET)),)
+UNITDIR_NETDB=$(PACKAGEDIR_NETDB)/units/$(FULL_TARGET)
+else
+UNITDIR_NETDB=$(PACKAGEDIR_NETDB)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_NETDB)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_NETDB) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_NETDB)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_NETDB=
+UNITDIR_NETDB:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /netdb/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_NETDB),)
+UNITDIR_NETDB:=$(firstword $(UNITDIR_NETDB))
+else
+UNITDIR_NETDB=
+endif
+endif
+ifdef UNITDIR_NETDB
+override COMPILER_UNITDIR+=$(UNITDIR_NETDB)
+endif
+endif
+ifdef REQUIRE_PACKAGES_LIBASYNC
+PACKAGEDIR_LIBASYNC:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /libasync/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_LIBASYNC),)
+ifneq ($(wildcard $(PACKAGEDIR_LIBASYNC)/units/$(FULL_TARGET)),)
+UNITDIR_LIBASYNC=$(PACKAGEDIR_LIBASYNC)/units/$(FULL_TARGET)
+else
+UNITDIR_LIBASYNC=$(PACKAGEDIR_LIBASYNC)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_LIBASYNC)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_LIBASYNC) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_LIBASYNC)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_LIBASYNC=
+UNITDIR_LIBASYNC:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /libasync/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_LIBASYNC),)
+UNITDIR_LIBASYNC:=$(firstword $(UNITDIR_LIBASYNC))
+else
+UNITDIR_LIBASYNC=
+endif
+endif
+ifdef UNITDIR_LIBASYNC
+override COMPILER_UNITDIR+=$(UNITDIR_LIBASYNC)
+endif
+endif
+ifdef REQUIRE_PACKAGES_PTHREADS
+PACKAGEDIR_PTHREADS:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /pthreads/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_PTHREADS),)
+ifneq ($(wildcard $(PACKAGEDIR_PTHREADS)/units/$(FULL_TARGET)),)
+UNITDIR_PTHREADS=$(PACKAGEDIR_PTHREADS)/units/$(FULL_TARGET)
+else
+UNITDIR_PTHREADS=$(PACKAGEDIR_PTHREADS)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_PTHREADS)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_PTHREADS) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_PTHREADS)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_PTHREADS=
+UNITDIR_PTHREADS:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /pthreads/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_PTHREADS),)
+UNITDIR_PTHREADS:=$(firstword $(UNITDIR_PTHREADS))
+else
+UNITDIR_PTHREADS=
+endif
+endif
+ifdef UNITDIR_PTHREADS
+override COMPILER_UNITDIR+=$(UNITDIR_PTHREADS)
+endif
+endif
+ifdef REQUIRE_PACKAGES_FCL
+PACKAGEDIR_FCL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /fcl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_FCL),)
+ifneq ($(wildcard $(PACKAGEDIR_FCL)/units/$(FULL_TARGET)),)
+UNITDIR_FCL=$(PACKAGEDIR_FCL)/units/$(FULL_TARGET)
+else
+UNITDIR_FCL=$(PACKAGEDIR_FCL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_FCL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_FCL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_FCL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_FCL=
+UNITDIR_FCL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /fcl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_FCL),)
+UNITDIR_FCL:=$(firstword $(UNITDIR_FCL))
+else
+UNITDIR_FCL=
+endif
+endif
+ifdef UNITDIR_FCL
+override COMPILER_UNITDIR+=$(UNITDIR_FCL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_PASJPEG
+PACKAGEDIR_PASJPEG:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /pasjpeg/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_PASJPEG),)
+ifneq ($(wildcard $(PACKAGEDIR_PASJPEG)/units/$(FULL_TARGET)),)
+UNITDIR_PASJPEG=$(PACKAGEDIR_PASJPEG)/units/$(FULL_TARGET)
+else
+UNITDIR_PASJPEG=$(PACKAGEDIR_PASJPEG)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_PASJPEG)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_PASJPEG) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_PASJPEG)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_PASJPEG=
+UNITDIR_PASJPEG:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /pasjpeg/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_PASJPEG),)
+UNITDIR_PASJPEG:=$(firstword $(UNITDIR_PASJPEG))
+else
+UNITDIR_PASJPEG=
+endif
+endif
+ifdef UNITDIR_PASJPEG
+override COMPILER_UNITDIR+=$(UNITDIR_PASJPEG)
+endif
+endif
+ifdef REQUIRE_PACKAGES_IBASE
+PACKAGEDIR_IBASE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /ibase/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_IBASE),)
+ifneq ($(wildcard $(PACKAGEDIR_IBASE)/units/$(FULL_TARGET)),)
+UNITDIR_IBASE=$(PACKAGEDIR_IBASE)/units/$(FULL_TARGET)
+else
+UNITDIR_IBASE=$(PACKAGEDIR_IBASE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_IBASE)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_IBASE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_IBASE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_IBASE=
+UNITDIR_IBASE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /ibase/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_IBASE),)
+UNITDIR_IBASE:=$(firstword $(UNITDIR_IBASE))
+else
+UNITDIR_IBASE=
+endif
+endif
+ifdef UNITDIR_IBASE
+override COMPILER_UNITDIR+=$(UNITDIR_IBASE)
+endif
+endif
+ifdef REQUIRE_PACKAGES_POSTGRES
+PACKAGEDIR_POSTGRES:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /postgres/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_POSTGRES),)
+ifneq ($(wildcard $(PACKAGEDIR_POSTGRES)/units/$(FULL_TARGET)),)
+UNITDIR_POSTGRES=$(PACKAGEDIR_POSTGRES)/units/$(FULL_TARGET)
+else
+UNITDIR_POSTGRES=$(PACKAGEDIR_POSTGRES)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_POSTGRES)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_POSTGRES) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_POSTGRES)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_POSTGRES=
+UNITDIR_POSTGRES:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /postgres/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_POSTGRES),)
+UNITDIR_POSTGRES:=$(firstword $(UNITDIR_POSTGRES))
+else
+UNITDIR_POSTGRES=
+endif
+endif
+ifdef UNITDIR_POSTGRES
+override COMPILER_UNITDIR+=$(UNITDIR_POSTGRES)
+endif
+endif
+ifdef REQUIRE_PACKAGES_MYSQL
+PACKAGEDIR_MYSQL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /mysql/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_MYSQL),)
+ifneq ($(wildcard $(PACKAGEDIR_MYSQL)/units/$(FULL_TARGET)),)
+UNITDIR_MYSQL=$(PACKAGEDIR_MYSQL)/units/$(FULL_TARGET)
+else
+UNITDIR_MYSQL=$(PACKAGEDIR_MYSQL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_MYSQL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_MYSQL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_MYSQL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_MYSQL=
+UNITDIR_MYSQL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /mysql/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_MYSQL),)
+UNITDIR_MYSQL:=$(firstword $(UNITDIR_MYSQL))
+else
+UNITDIR_MYSQL=
+endif
+endif
+ifdef UNITDIR_MYSQL
+override COMPILER_UNITDIR+=$(UNITDIR_MYSQL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_SQLITE
+PACKAGEDIR_SQLITE:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /sqlite/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_SQLITE),)
+ifneq ($(wildcard $(PACKAGEDIR_SQLITE)/units/$(FULL_TARGET)),)
+UNITDIR_SQLITE=$(PACKAGEDIR_SQLITE)/units/$(FULL_TARGET)
+else
+UNITDIR_SQLITE=$(PACKAGEDIR_SQLITE)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_SQLITE)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_SQLITE) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_SQLITE)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_SQLITE=
+UNITDIR_SQLITE:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /sqlite/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_SQLITE),)
+UNITDIR_SQLITE:=$(firstword $(UNITDIR_SQLITE))
+else
+UNITDIR_SQLITE=
+endif
+endif
+ifdef UNITDIR_SQLITE
+override COMPILER_UNITDIR+=$(UNITDIR_SQLITE)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(CPU_TARGET)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX) -Xc
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+else
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1
+else
+FPCCPUOPT:=
+endif
+endif
+override FPCOPT+=-Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-OG2p3
+endif
+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
+ifeq ($(OS_TARGET),linux)
+ifeq ($(FPC_VERSION),1.0.6)
+override FPCOPTDEF+=HASUNIX
+endif
+endif
+ifdef GCCLIBDIR
+override FPCOPT+=-Fl$(GCCLIBDIR)
+endif
+ifdef OTHERLIBDIR
+override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+EXECPPAS:=@$(PPAS)
+endif
+endif
+.PHONY: fpc_exes
+ifndef CROSSINSTALL
+ifneq ($(TARGET_PROGRAMS),)
+override EXEFILES=$(addsuffix $(EXEEXT),$(TARGET_PROGRAMS))
+override EXEOFILES:=$(addsuffix $(OEXT),$(TARGET_PROGRAMS)) $(addprefix $(STATICLIBPREFIX),$(addsuffix $(STATICLIBEXT),$(TARGET_PROGRAMS)))
+override ALLTARGET+=fpc_exes
+override INSTALLEXEFILES+=$(EXEFILES)
+override CLEANEXEFILES+=$(EXEFILES) $(EXEOFILES)
+ifeq ($(OS_TARGET),os2)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+ifeq ($(OS_TARGET),emx)
+override CLEANEXEFILES+=$(addsuffix $(AOUTEXT),$(TARGET_PROGRAMS))
+endif
+endif
+endif
+fpc_exes: $(COMPILER_TARGETDIR) $(COMPILER_UNITTARGETDIR) $(EXEFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPUFILES))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(INSTALLPPULINKFILES)))
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(INSTALLEXEFILES))
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(PACKAGE_NAME)
+endif
+endif
+ifndef FULLZIPNAME
+FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+	$(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+	$(MKDIR) $(DIST_DESTDIR)
+	$(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+	echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+	echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+	echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+	/bin/sh $(ZIPWRAPPER)
+else
+	$(ZIPWRAPPER)
+endif
+	$(DEL) $(ZIPWRAPPER)
+else
+	$(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+	$(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared:
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall: fpc_distinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_zipdistinstall
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+fpcsubst$(EXEEXT): fpcsubst.pp usubst.pp
+fpcmkcfg$(EXEEXT): fpcmkcfg.pp usubst.pp fpccfg.inc
+fpccfg.inc: fpc.cft
+	bin2obj -a -o fpccfg.inc -c DefaultConfig fpc.cft
+fpc.iss: fpc.ist
+	fpcsubst -i fpc.ist -o fpc.ist $(FPCISSSUBST)

+ 40 - 0
install/Makefile.fpc

@@ -0,0 +1,40 @@
+#
+#   Makefile.fpc for install utilities
+#
+
+[package]
+name=install
+version=1.9.6
+
+[require]
+packages=fcl
+
+[target]
+programs=fpcsubst fpcmkcfg
+rst=fpcmkcfg fpcsubst
+# removed to reduce dependencies of rpm.
+#dirs_linux_i386=fpde
+#dirs_win32=fpde
+
+[compiler]
+options=-S2h
+
+[install]
+fpcpackage=n
+
+[default]
+fpcdir=..
+
+[clean]
+units=usubst
+
+[rules]
+fpcsubst$(EXEEXT): fpcsubst.pp usubst.pp
+
+fpcmkcfg$(EXEEXT): fpcmkcfg.pp usubst.pp fpccfg.inc
+
+fpccfg.inc: fpc.cft
+	bin2obj -a -o fpccfg.inc -c DefaultConfig fpc.cft
+
+fpc.iss: fpc.ist
+	fpcsubst -i fpc.ist -o fpc.ist $(FPCISSSUBST)

+ 173 - 0
install/fpc.cft

@@ -0,0 +1,173 @@
+# Config file generated by fpcmkcfg on %BUILDDATE% - %BUILDTIME%
+# Example fpc.cfg for Free Pascal Compiler
+#
+
+# ----------------------
+# Defines (preprocessor)
+# ----------------------
+
+#
+# nested #IFNDEF, #IFDEF, #ENDIF, #ELSE, #DEFINE, #UNDEF are allowed
+#
+# -d is the same as #DEFINE
+# -u is the same as #UNDEF
+#
+
+#
+# Some examples (for switches see below, and the -? helppages)
+#
+# Try compiling with the -dRELEASE or -dDEBUG on the commandline
+#
+
+# For a release compile with optimizes and strip debuginfo
+#IFDEF RELEASE
+  -OG2p3
+  -Xs
+  #WRITE Compiling Release Version
+#ENDIF
+
+# For a debug version compile with debuginfo and all codegeneration checks on
+#IFDEF DEBUG
+  -g
+  -Crtoi
+  #WRITE Compiling Debug Version
+#ENDIF
+
+# ----------------
+# Parsing switches
+# ----------------
+
+# All assembler blocks are intel styled by default
+#-Rintel
+
+# All assembler blocks are AT&T styled by default
+#-Ratt
+
+# All assembler blocks are directly copied to asm
+#-Rdirect
+
+# Semantic checking
+#  -S2        switch some Delphi 2 extensions on
+#  -Sc        supports operators like C (*=,+=,/= and -=)
+#  -Sd        tries to be Delphi compatible
+#  -Se<x>     compiler stops after the <x> errors (default is 1)
+#  -Sg        allow LABEL and GOTO
+#  -Sh        Use ansistrings
+#  -Si        support C++ styled INLINE
+#  -Sm        support macros like C (global)
+#  -So        tries to be TP/BP 7.0 compatible
+#  -Sp        tries to be gpc compatible
+#  -Ss        constructor name must be init (destructor must be done)
+#  -St        allow static keyword in objects
+# Allow goto, inline, C-operators
+-Sgic
+
+# ---------------
+# Code generation
+# ---------------
+
+# Uncomment the next line if you always want static/dynamic units by default
+# (can be overruled with -CD, -CS at the commandline)
+#-CS
+#-CD
+
+# Set the default heapsize to 8Mb
+#-Ch8000000
+
+# Set default codegeneration checks (iocheck, overflow, range, stack)
+#-Ci
+#-Co
+#-Cr
+#-Ct
+
+# Optimizer switches
+# -Og        generate smaller code
+# -OG        generate faster code (default)
+# -Or        keep certain variables in registers (still BUGGY!!!)
+# -Ou        enable uncertain optimizations (see docs)
+# -O1        level 1 optimizations (quick optimizations)
+# -O2        level 2 optimizations (-O1 + slower optimizations)
+# -O3        level 3 optimizations (same as -O2u)
+# -Op        target processor
+#     -Op1  set target processor to 386/486
+#     -Op2  set target processor to Pentium/PentiumMMX (tm)
+#     -Op3  set target processor to PPro/PII/c6x86/K6 (tm)
+
+# Optimize always for Size and PentiumII
+#-Og2p3
+
+
+# -----------------------
+# Set Filenames and Paths
+# -----------------------
+
+# Both slashes and backslashes are allowed in paths
+
+# path to the messagefile, not necessary anymore but can be used to override
+# the default language
+#-Fr%basepath%/msg/errore.msg
+#-Fr%basepath%/msg/errorn.msg
+#-Fr%basepath%/msg/errores.msg
+#-Fr%basepath%/msg/errord.msg
+#-Fr%basepath%/msg/errorr.msg
+
+# path to the gcclib
+#-Fl%basepath%/lib
+
+# searchpath for includefiles
+# release them only if you know what you do
+# because this could cause a rebuild of the runtime library
+# if you tell them compiler/ide to build the project (FK)
+#-Fi%basepath%/source/rtl/inc;%basepath%/source/rtl/i386
+
+# searchpath for objectfiles
+#-Fo%basepath%/source/rtl/inc;%basepath%/source/rtl/i386
+
+# searchpath for units and other system dependent things
+-Fu%basepath%/units/$FPCTARGET/
+-Fu%basepath%/units/$FPCTARGET/*
+-Fu%basepath%/units/$FPCTARGET/rtl
+
+# searchpath for libraries
+#-Fl%basepath%/lib
+#-Fl/lib;/usr/lib
+
+# searchpath for tools
+-FD%basepath%/bin/$FPCTARGET
+
+# -------------
+# Linking
+# -------------
+
+# generate always debugging information for GDB (slows down the compiling
+# process)
+#-gl
+
+# always pass an option to the linker
+#-k-s
+
+# Always strip debuginfo from the executable
+-Xs
+
+
+# -------------
+# Miscellaneous
+# -------------
+
+# Write always a nice FPC logo ;)
+-l
+
+# Verbosity
+# e : Show errors (default)       d : Show debug info
+# w : Show warnings               u : Show used files
+# n : Show notes                  t : Show tried files
+# h : Show hints                  m : Show defined macros
+# i : Show general info           p : Show compiled procedures
+# l : Show linenumbers            c : Show conditionals
+# a : Show everything             0 : Show nothing (except errors)
+
+# Display Info, Warnings, Notes and Hints
+-viwn
+# If you don't want so much verbosity use
+#-vw
+

+ 307 - 0
install/fpc.ist

@@ -0,0 +1,307 @@
+;**********************************************************************
+; We don't use the INNO Setup preprocessor. It is unfortunately quite buggy.
+; So, this script must be preprocessed by our own tools.
+; The preprocessor will replace anything enclosed in percent characters
+; by the value specified in it's config file. Standard there are only 
+; the following things;
+; FPCVERSION   Version of FPC.
+; BUILDDIR     Build directory.
+;**********************************************************************
+;
+; ISS Build script generated on %BUILDDATE% - %BUILDTIME%
+;
+[Setup]
+AppName=Free Pascal
+AppVerName=Free Pascal %FPCVERSION%
+AppPublisher=Free Pascal Team
+AppPublisherURL=http://www.freepascal.org/
+AppSupportURL=http://www.freepascal.org/
+AppUpdatesURL=http://www.freepascal.org/
+DefaultDirName={sd}\FPC\%FPCVERSION%
+DefaultGroupName=Free Pascal
+AllowNoIcons=yes
+InfoAfterFile=doc\fpc\whatsnew.txt
+Compression=bzip
+SolidCompression=true
+SourceDir=%BUILDDIR%
+InternalCompressLevel=max
+AppCopyright=GPL
+AppendDefaultDirName=false
+AlwaysShowComponentsList=false
+ShowLanguageDialog=yes
+
+[Files]
+; Base package
+Source: bin\i386-win32\ppc386.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: base
+Source: bin\i386-win32\ppudump.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: base
+Source: bin\i386-win32\ppufiles.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: base
+Source: bin\i386-win32\ppumove.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: base
+Source: bin\i386-win32\ppc386.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: base
+Source: bin\i386-win32\cygwin1.dll; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: base
+Source: bin\i386-win32\fp32_32.ico; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: base
+Source: bin\i386-win32\fpc.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: base
+Source: bin\i386-win32\fpcmkcfg.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: base
+Source: doc\fpc\copying; DestDir: {app}\doc\fpc; Components: base
+Source: doc\fpc\copying.dj; DestDir: {app}\doc\fpc; Components: base
+Source: doc\fpc\copying.emx; DestDir: {app}\doc\fpc; Components: base
+Source: doc\fpc\copying.fpc; DestDir: {app}\doc\fpc; Components: base
+Source: doc\fpc\copying.rsx; DestDir: {app}\doc\fpc; Components: base
+Source: doc\fpc\readme.txt; DestDir: {app}\doc\fpc; Components: base; Flags: isreadme
+Source: doc\fpc\whatsnew.txt; DestDir: {app}\doc\fpc; Components: base
+Source: doc\fpc\faq.txt; DestDir: {app}\doc\fpc; Components: base
+Source: doc\fpc\faq.htm; DestDir: {app}\doc\fpc; Components: base
+Source: msg\*.*; DestDir: {app}\msg; Components: base
+Source: units\i386-win32\rtl\*.*; DestDir: {app}\units\i386-win32\rtl; Components: base
+; Binutils (asld)
+Source: bin\i386-win32\ar.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\as.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\cpp.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\dlltool.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\gcc.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\ld.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\objdump.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\windres.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\windres.h; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\strip.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: binutils
+Source: bin\i386-win32\gdbpas.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: gdb
+; IDE files
+Source: bin\i386-win32\fp.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\fp32.ico; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\fp.ans; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\cvsco.tdf; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\cvsdiff.tdf; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\cvsup.tdf; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\gplprog.pt; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\gplunit.pt; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\unit.pt; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\program.pt; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\tpgrep.tdf; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: bin\i386-win32\grep.tdf; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: ide
+Source: doc\ide\readme.ide; DestDir: {app}\doc\ide; Flags: ignoreversion; Components: ide
+; Make tools
+Source: bin\i386-win32\gdate.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\gecho.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\ginstall.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\gmkdir.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\grep.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\make.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\mv.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\patch.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\pwd.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\rm.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\unzip.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\upx.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\zip.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\cmp.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\cp.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+Source: bin\i386-win32\diff.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: make
+; FPC Utilities
+Source: bin\i386-win32\bin2obj.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\data2inc.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\delp.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\fpcmake.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\fpdoc.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\fpmc.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\fpmcgtk.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\fprcp.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\h2pas.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\h2paspp.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\makeskel.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\plex.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\postw32.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\ppdep.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\ptop.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\pyacc.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\rstconv.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\unitdiff.exe; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\yylex.cod; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: bin\i386-win32\yyparse.cod; DestDir: {app}\bin\i386-win32; Flags: ignoreversion; Components: utils
+Source: units\i386-win32\lexyacc\*.*; DestDir: {app}\units\i386-win32\lexyacc; Flags: ignoreversion; Components: utils
+; Documentation
+Source: doc\*.pdf; DestDir: {app}\doc; Flags: ignoreversion; Components: docs
+
+; FCL
+Source: units\i386-win32\fcl\*.*; DestDir: {app}\units\i386-win32\fcl; Flags: ignoreversion; Components: fcl
+Source: examples\fcl\*.*; DestDir: {app}\examples\fcl; Flags: ignoreversion; Components: fcl
+; FV
+Source: units\i386-win32\fv\*.*; DestDir: {app}\units\i386-win32\fv; Flags: ignoreversion; Components: fv
+Source: examples\fv\*.*; DestDir: {app}\examples\fv; Flags: ignoreversion; Components: fv
+; Various units packages
+; CDROM
+Source: units\i386-win32\cdrom\*.*; DestDir: {app}\units\i386-win32\cdrom; Flags: ignoreversion; Components: packages/cdrom
+Source: examples\cdrom\*.*; DestDir: {app}\examples\cdrom; Flags: ignoreversion; Components: packages/cdrom
+; fpGtk
+Source: units\i386-win32\fpgtk\*.*; DestDir: {app}\units\i386-win32\fpgtk; Flags: ignoreversion; Components: packages/gtk/fpgtk
+; Source: examples\fpgtk\*.*; DestDir: {app}\examples\fpgtk; Flags: ignoreversion; Components: packages/gtk/fpgtk
+; Gtk
+Source: units\i386-win32\gtk\*.*; DestDir: {app}\units\i386-win32\gtk; Flags: ignoreversion; Components: packages/gtk
+Source: examples\gtk\*.*; DestDir: {app}\examples\gtk; Flags: ignoreversion; Components: packages/gtk
+; GDBINT
+Source: units\i386-win32\gdbint\*.*; DestDir: {app}\units\i386-win32\gdbint; Flags: ignoreversion; Components: packages/gdbint
+Source: examples\gdbint\*.*; DestDir: {app}\examples\gdbint; Flags: ignoreversion; Components: packages/gdbint
+; Interbase
+Source: units\i386-win32\ibase\*.*; DestDir: {app}\units\i386-win32\ibase; Flags: ignoreversion; Components: packages/ibase
+Source: examples\ibase\*.*; DestDir: {app}\examples\ibase; Flags: ignoreversion; Components: packages/ibase
+; MD5
+Source: units\i386-win32\md5\*.*; DestDir: {app}\units\i386-win32\md5; Flags: ignoreversion; Components: packages/md5
+Source: examples\md5\*.*; DestDir: {app}\examples\md5; Flags: ignoreversion; Components: packages/md5
+; MMSystem
+Source: units\i386-win32\mmsystem\*.*; DestDir: {app}\units\i386-win32\mmsystem; Flags: ignoreversion; Components: packages/mmsystem
+;Source: examples\mmsystem\*.*; DestDir: {app}\examples\mmsystem; Flags: ignoreversion; Components: packages/mmsystem
+; MySQL
+Source: units\i386-win32\mysql\*.*; DestDir: {app}\units\i386-win32\mysql; Flags: ignoreversion; Components: packages/mysql
+Source: examples\mysql\*.*; DestDir: {app}\examples\mysql; Flags: ignoreversion; Components: packages/mysql
+; Netdb
+Source: units\i386-win32\netdb\*.*; DestDir: {app}\units\i386-win32\netdb; Flags: ignoreversion; Components: packages/netdb
+Source: examples\netdb\*.*; DestDir: {app}\examples\netdb; Flags: ignoreversion; Components: packages/netdb
+; odbc
+Source: units\i386-win32\odbc\*.*; DestDir: {app}\units\i386-win32\odbc; Flags: ignoreversion; Components: packages/odbc
+Source: examples\odbc\*.*; DestDir: {app}\examples\odbc; Flags: ignoreversion; Components: packages/odbc
+; opengl
+Source: units\i386-win32\opengl\*.*; DestDir: {app}\units\i386-win32\opengl; Flags: ignoreversion; Components: packages/opengl
+Source: examples\opengl\*.*; DestDir: {app}\examples\opengl; Flags: ignoreversion; Components: packages/opengl
+; pasjpeg
+Source: units\i386-win32\pasjpeg\*.*; DestDir: {app}\units\i386-win32\pasjpeg; Flags: ignoreversion; Components: packages/pasjpeg
+Source: examples\pasjpeg\*.*; DestDir: {app}\examples\pasjpeg; Flags: ignoreversion; Components: packages/pasjpeg
+; paszlib
+Source: units\i386-win32\paszlib\*.*; DestDir: {app}\units\i386-win32\paszlib; Flags: ignoreversion; Components: packages/paszlib
+Source: examples\paszlib\*.*; DestDir: {app}\examples\paszlib; Flags: ignoreversion; Components: packages/paszlib
+; regexpr
+Source: units\i386-win32\regexpr\*.*; DestDir: {app}\units\i386-win32\regexpr; Flags: ignoreversion; Components: packages/regexp
+Source: examples\regexpr\*.*; DestDir: {app}\examples\regexpr; Flags: ignoreversion; Components: packages/regexp
+; sqlite
+Source: units\i386-win32\sqlite\*.*; DestDir: {app}\units\i386-win32\sqlite; Flags: ignoreversion; Components: packages/sqlite
+; Source: examples\sqlite\*.*; DestDir: {app}\examples\sqlite; Flags: ignoreversion; Components: packages/sqlite
+; tcl
+Source: units\i386-win32\tcl\*.*; DestDir: {app}\units\i386-win32\tcl; Flags: ignoreversion; Components: packages/tcl
+Source: examples\tcl\*.*; DestDir: {app}\examples\tcl; Flags: ignoreversion; Components: packages/tcl
+; unzip
+Source: units\i386-win32\unzip\*.*; DestDir: {app}\units\i386-win32\unzip; Flags: ignoreversion; Components: packages/unzip
+; Source: examples\unzip\*.*; DestDir: {app}\examples\unzip; Flags: ignoreversion; Components: packages/unzip
+; winver
+Source: units\i386-win32\winver\*.*; DestDir: {app}\units\i386-win32\winver; Flags: ignoreversion; Components: packages/winver
+Source: examples\winver\*.*; DestDir: {app}\examples\winver; Flags: ignoreversion; Components: packages/winver
+; zlib
+Source: units\i386-win32\zlib\*.*; DestDir: {app}\units\i386-win32\zlib; Flags: ignoreversion; Components: packages/zlib
+; Source: examples\zlib\*.*; DestDir: {app}\examples\zlib; Flags: ignoreversion; Components: packages/unzip
+
+[INI]
+Filename: {app}\ppc386.url; Section: InternetShortcut; Key: URL; String: http://www.freepascal.org/
+
+[Icons]
+Name: {userdesktop}\Free Pascal IDE; Filename: {app}\bin\i386-win32\fp.exe; components: ide; IconFileName: {app}\bin\i386-win32\fp32.ico;
+Name: {group}\Free Pascal; Filename: {app}\bin\i386-win32\fp.exe; components: ide; IconFileName: {app}\bin\i386-win32\fp32.ico;
+Name: {group}\{cm:ProgramOnTheWeb,Free Pascal}; Filename: {app}\Free Pascal Website.url; IconFileName: {app}\bin\i386-win32\fp32.ico;
+Name: {group}\{cm:UninstallProgram,Free Pascal}; Filename: {uninstallexe}
+
+[UninstallDelete]
+Type: files; Name: {app}\Free Pascal.url
+Type: files; Name: {app}\bin\i386-win32\fpc.cfg; Tasks: createcfg;
+
+[Components]
+Name: base; Description: Basic system for  win32; Flags: fixed; Types: Custom Minimum Full
+Name: binutils; Description: GNU linker and assembler; Flags: fixed; Types: Custom Minimum Full
+Name: docs; Description: Documentation in PDF; Types: Custom Full
+Name: ide; Description: Integrated Development Environment; Types: Custom Full
+Name: utils; Description: Free Pascal Utilities; Types: Custom Full
+Name: make; Description: GNU make; Types: Custom Full
+Name: gdb; Description: GNU debugger; Types: Full Custom
+Name: fcl; Description: FCL (Free Component Library) units; Types: Custom Full
+Name: fv; Description: Free Vision; Types: Custom Full
+Name: packages; Description: Various unit packages; Types: Custom Full
+Name: packages/gtk; Description: GTK units; Types: Custom Full
+Name: packages/gtk/fpgtk; Description: fpGTK units; Types: Custom Full
+Name: packages/opengl; Description: OpenGL units; Types: Custom Full
+Name: packages/ibase; Description: Interbase/Firebird units; Types: Custom Full
+Name: packages/mysql; Description: MySQL units; Types: Custom Full
+Name: packages/mmsystem; Description: MultiMedia System units; Types: Custom Full
+Name: packages/gdbint; Description: GDB access units; Types: Custom Full
+Name: packages/paszlib; Description: Paszlib unit (provide acces to gzipped files); Types: Custom Full
+Name: packages/regexp; Description: Regular Expression support units; Types: Custom Full
+Name: packages/unzip; Description: Unzip units (provide acces to .zip files); Types: Custom Full
+Name: packages/zlib; Description: Interface to libz compression library; Types: Custom Full
+Name: packages/netdb; Description: Portable DNS routines; Types: Custom Full
+Name: packages/pasjpeg; Description: PasJPEG units (provide access to JPEG files); Types: Custom Full
+Name: packages/md5; Description: MD5 checksum units; Types: Custom Full
+Name: packages/cdrom; Description: Portable CD-ROM acces; Types: Custom Full
+Name: packages/odbc; Description: ODBC data acces; Types: Custom Full
+Name: packages/sqlite; Description: SQLITE data access; Types: Custom Full
+Name: packages/tcl; Description: TCL interpreter access; Types: Custom Full
+Name: packages/winver; Description: Windows file version information access; Types: Custom Full
+;Name: sources; Description: Pascal source files; Types: Custom Full
+;Name: sources/base; Description: Base sources, required; Types: Custom Full
+;Name: sources/compiler; Description: Compiler sources; Types: Custom Full
+;Name: sources/utils; Description: Utility sources; Types: Custom Full
+;Name: sources/installer; Description: Installer sources; Types: Custom Full
+;Name: sources/doc; Description: Documentation sources (LaTeX); Types: Custom Full
+;Name: sources/rtl; Description: Run-Time Library sources; Types: Custom Full
+;Name: sources/fcl; Description: FCL (Free Component Library) sources; Types: Custom Full
+;Name: sources/fpgtk; Description: fpGTK source files; Types: Custom Full
+;Name: sources/opengl; Description: OpenGL source files; Types: Custom Full
+;Name: sources/gtk; Description: GTK source files; Types: Custom Full
+;Name: sources/interbase; Description: Interbase/Firebird source files; Types: Custom Full
+;Name: sources/mysql; Description: MySQL source files; Types: Custom Full
+;Name: sources/mmsystem; Description: MultiMedia System source files; Types: Custom Full
+;Name: sources/gdbint; Description: GDB access source files; Types: Custom Full
+;Name: sources/paszlib; Description: Paszlib source files; Types: Custom Full
+;Name: sources/regexp; Description: Regular Expression support source files; Types: Custom Full
+;Name: sources/unzip; Description: Unzip source files; Types: Custom Full
+;Name: sources/zlib; Description: Libz interface source files; Types: Custom Full
+;Name: sources/netdb; Description: Portable DNS routines source files; Types: Custom Full
+;Name: sources/pasjpeg; Description: PasJPEG source files; Types: Custom Full
+;Name: sources/md5; Description: MD5 source files; Types: Custom Full
+;Name: sources/fv; Description: Free Vision source files; Types: Custom Full
+;Name: sources/rexx; Description: REXX source files (OS/2); Types: Custom Full
+;Name: sources/hwvideo; Description: Hardware access source files (OS/2); Types: Custom Full
+;Name: sources/ftpapi; Description: FTP API access source files (OS/2); Types: Custom Full
+;Name: sources/mmtk; Description: MMOS/2 access source files (OS/2); Types: Custom Full
+;Name: sources/clkdll; Description: CLKDLL access source files (OS/2); Types: Custom Full
+;Name: sources/lvm; Description: LVM access source files (OS/2); Types: Custom Full
+;Name: sources/libpng; Description: PNG library access source files (Linux); Types: Custom Full
+;Name: sources/imlib; Description: imlib library access source files (Linux); Types: Custom Full
+;Name: sources/cdrom; Description: Portable CD-ROM access source files; Types: Custom Full
+;Name: sources/odbc; Description: ODBC data acces source files; Types: Custom Full
+;Name: sources/sqlite; Description: SQLITE data access source files; Types: Custom Full
+;Name: sources/tcl; Description: TCL interpreter access source files; Types: Custom Full
+;Name: sources/winver; Description: Windows file version information access source files; Types: Custom Full
+
+[Types]
+Name: Full; Description: Full installation
+Name: Minimum; Description: Minimum installation
+Name: Custom; Description: Custom installation; Flags: iscustom
+
+[Tasks]
+Name: associatepp; Description: "Associate .pp files with Free Pascal IDE"; GroupDescription: "File associations:"; Components: ide;
+Name: associateinc; Description: "Associate .inc files with Free Pascal IDE"; GroupDescription: "File associations:"; Components: ide;
+Name: associatepas; Description: "Associate .pas files with Free Pascal IDE"; GroupDescription: "File associations:"; Components: ide; Flags: unchecked;
+Name: associatedpr; Description: "Associate .dpr files with Free Pascal IDE"; GroupDescription: "File associations:"; Components: ide; Flags: unchecked;
+Name: createdesktopicon; Description: "Create a desktop icon for the Free Pascal IDE"; Components: ide;
+Name: createcfg; Description: "Create a standard configuration file for the compiler";
+
+
+[Registry]
+; Associate .pp with FP IDE
+Root: HKCR; Subkey: ".pp"; ValueType: string; ValueName: ""; ValueData: "FPCPPFile"; Flags: uninsdeletevalue; Tasks: associatepp;
+Root: HKCR; Subkey: "FPCPPFile"; ValueType: string; ValueName: ""; ValueData: "Free Pascal File"; Flags: uninsdeletekey; Tasks: associatepp;
+Root: HKCR; Subkey: "FPCPPFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\i386-Win32\fpc32.ico"; Tasks: associatepp;
+Root: HKCR; Subkey: "FPCPPFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\i386-win32\fp.exe"" ""%1""";Tasks: associatepp;
+; Associate .inc with FP IDE
+Root: HKCR; Subkey: ".inc"; ValueType: string; ValueName: ""; ValueData: "FPCINCFile"; Flags: uninsdeletevalue; Tasks: associatepp;
+Root: HKCR; Subkey: "FPCINCFile"; ValueType: string; ValueName: ""; ValueData: "Free Pascal include File"; Flags: uninsdeletekey; Tasks: associateinc;
+Root: HKCR; Subkey: "FPCINCFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\i386-Win32\fpc32.ico"; Tasks: associateinc;
+Root: HKCR; Subkey: "FPCINCFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\i386-win32\fp.exe"" ""%1""";Tasks: associateinc;
+; Associate .pas with FP IDE
+Root: HKCR; Subkey: ".pas"; ValueType: string; ValueName: ""; ValueData: "FPCPASFile"; Flags: uninsdeletevalue; Tasks: associatepas;
+Root: HKCR; Subkey: "FPPASFile"; ValueType: string; ValueName: ""; ValueData: "Free Pascal File"; Flags: uninsdeletekey; Tasks: associatepas;
+Root: HKCR; Subkey: "FPPASFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\i386-Win32\fpc32.ico"; Tasks: associatepas;
+Root: HKCR; Subkey: "FPPASFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\i386-win32\fp.exe"" ""%1""";Tasks: associatepas;
+; Associate .pas with FP IDE
+Root: HKCR; Subkey: ".dpr"; ValueType: string; ValueName: ""; ValueData: "FPCDPRFile"; Flags: uninsdeletevalue; Tasks: associatedpr;
+Root: HKCR; Subkey: "FPDPRFile"; ValueType: string; ValueName: ""; ValueData: "Free Pascal Project File"; Flags: uninsdeletekey; Tasks: associatedpr;
+Root: HKCR; Subkey: "FPDPRFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\i386-Win32\fpc32.ico"; Tasks: associatedpr;
+Root: HKCR; Subkey: "FPDPRFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\i386-win32\fp.exe"" ""%1""";Tasks: associatedpr;
+; Extend path in NT,2000 or XP. Does not work in 95/98/Me
+Root: HKCU; Subkey: Environment; ValueType: String; ValueName: "PATH"; ValueData: "{reg:HKCU\environment,PATH|};{app}\bin\i386-Win32\";MinVersion: 5.0,4.0
+
+[Run]
+FileName: {app}\bin\i386-win32\fpcmkcfg.exe; Description: "Creating default configuration file for Free Pascal compiler"; Parameters: "-d ""basepath={app}"" -o ""{app}\bin\i386-Win32\fpc.cfg""";

+ 275 - 0
install/fpccfg.inc

@@ -0,0 +1,275 @@
+
+Const
+  DefaultConfig : Array[0..4615] of char = (
+     '#',' ','C','o','n','f','i','g',' ','f','i','l','e',' ','g','e','n',
+     'e','r','a','t','e','d',' ','b','y',' ','f','p','c','m','k','c','f',
+     'g',' ','o','n',' ','%','B','U','I','L','D','D','A','T','E','%',' ',
+     '-',' ','%','B','U','I','L','D','T','I','M','E','%',#13,#10,'#',' ',
+     'E','x','a','m','p','l','e',' ','f','p','c','.','c','f','g',' ','f',
+     'o','r',' ','F','r','e','e',' ','P','a','s','c','a','l',' ','C','o',
+     'm','p','i','l','e','r',#13,#10,'#',#13,#10,#13,#10,'#',' ','-','-',
+     '-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',
+     '-','-','-',#13,#10,'#',' ','D','e','f','i','n','e','s',' ','(','p',
+     'r','e','p','r','o','c','e','s','s','o','r',')',#13,#10,'#',' ','-',
+     '-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',
+     '-','-','-','-',#13,#10,#13,#10,'#',#13,#10,'#',' ','n','e','s','t',
+     'e','d',' ','#','I','F','N','D','E','F',',',' ','#','I','F','D','E',
+     'F',',',' ','#','E','N','D','I','F',',',' ','#','E','L','S','E',',',
+     ' ','#','D','E','F','I','N','E',',',' ','#','U','N','D','E','F',' ',
+     'a','r','e',' ','a','l','l','o','w','e','d',#13,#10,'#',#13,#10,'#',
+     ' ','-','d',' ','i','s',' ','t','h','e',' ','s','a','m','e',' ','a',
+     's',' ','#','D','E','F','I','N','E',#13,#10,'#',' ','-','u',' ','i',
+     's',' ','t','h','e',' ','s','a','m','e',' ','a','s',' ','#','U','N',
+     'D','E','F',#13,#10,'#',#13,#10,#13,#10,'#',#13,#10,'#',' ','S','o',
+     'm','e',' ','e','x','a','m','p','l','e','s',' ','(','f','o','r',' ',
+     's','w','i','t','c','h','e','s',' ','s','e','e',' ','b','e','l','o',
+     'w',',',' ','a','n','d',' ','t','h','e',' ','-','?',' ','h','e','l',
+     'p','p','a','g','e','s',')',#13,#10,'#',#13,#10,'#',' ','T','r','y',
+     ' ','c','o','m','p','i','l','i','n','g',' ','w','i','t','h',' ','t',
+     'h','e',' ','-','d','R','E','L','E','A','S','E',' ','o','r',' ','-',
+     'd','D','E','B','U','G',' ','o','n',' ','t','h','e',' ','c','o','m',
+     'm','a','n','d','l','i','n','e',#13,#10,'#',#13,#10,#13,#10,'#',' ',
+     'F','o','r',' ','a',' ','r','e','l','e','a','s','e',' ','c','o','m',
+     'p','i','l','e',' ','w','i','t','h',' ','o','p','t','i','m','i','z',
+     'e','s',' ','a','n','d',' ','s','t','r','i','p',' ','d','e','b','u',
+     'g','i','n','f','o',#13,#10,'#','I','F','D','E','F',' ','R','E','L',
+     'E','A','S','E',#13,#10,' ',' ','-','O','G','2','p','3',#13,#10,' ',
+     ' ','-','X','s',#13,#10,' ',' ','#','W','R','I','T','E',' ','C','o',
+     'm','p','i','l','i','n','g',' ','R','e','l','e','a','s','e',' ','V',
+     'e','r','s','i','o','n',#13,#10,'#','E','N','D','I','F',#13,#10,#13,
+     #10,'#',' ','F','o','r',' ','a',' ','d','e','b','u','g',' ','v','e',
+     'r','s','i','o','n',' ','c','o','m','p','i','l','e',' ','w','i','t',
+     'h',' ','d','e','b','u','g','i','n','f','o',' ','a','n','d',' ','a',
+     'l','l',' ','c','o','d','e','g','e','n','e','r','a','t','i','o','n',
+     ' ','c','h','e','c','k','s',' ','o','n',#13,#10,'#','I','F','D','E',
+     'F',' ','D','E','B','U','G',#13,#10,' ',' ','-','g',#13,#10,' ',' ',
+     '-','C','r','t','o','i',#13,#10,' ',' ','#','W','R','I','T','E',' ',
+     'C','o','m','p','i','l','i','n','g',' ','D','e','b','u','g',' ','V',
+     'e','r','s','i','o','n',#13,#10,'#','E','N','D','I','F',#13,#10,#13,
+     #10,'#',' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-',
+     '-','-',#13,#10,'#',' ','P','a','r','s','i','n','g',' ','s','w','i',
+     't','c','h','e','s',#13,#10,'#',' ','-','-','-','-','-','-','-','-',
+     '-','-','-','-','-','-','-','-',#13,#10,#13,#10,'#',' ','A','l','l',
+     ' ','a','s','s','e','m','b','l','e','r',' ','b','l','o','c','k','s',
+     ' ','a','r','e',' ','i','n','t','e','l',' ','s','t','y','l','e','d',
+     ' ','b','y',' ','d','e','f','a','u','l','t',#13,#10,'#','-','R','i',
+     'n','t','e','l',#13,#10,#13,#10,'#',' ','A','l','l',' ','a','s','s',
+     'e','m','b','l','e','r',' ','b','l','o','c','k','s',' ','a','r','e',
+     ' ','A','T','&','T',' ','s','t','y','l','e','d',' ','b','y',' ','d',
+     'e','f','a','u','l','t',#13,#10,'#','-','R','a','t','t',#13,#10,#13,
+     #10,'#',' ','A','l','l',' ','a','s','s','e','m','b','l','e','r',' ',
+     'b','l','o','c','k','s',' ','a','r','e',' ','d','i','r','e','c','t',
+     'l','y',' ','c','o','p','i','e','d',' ','t','o',' ','a','s','m',#13,
+     #10,'#','-','R','d','i','r','e','c','t',#13,#10,#13,#10,'#',' ','S',
+     'e','m','a','n','t','i','c',' ','c','h','e','c','k','i','n','g',#13,
+     #10,'#',' ',' ','-','S','2',' ',' ',' ',' ',' ',' ',' ',' ','s','w',
+     'i','t','c','h',' ','s','o','m','e',' ','D','e','l','p','h','i',' ',
+     '2',' ','e','x','t','e','n','s','i','o','n','s',' ','o','n',#13,#10,
+     '#',' ',' ','-','S','c',' ',' ',' ',' ',' ',' ',' ',' ','s','u','p',
+     'p','o','r','t','s',' ','o','p','e','r','a','t','o','r','s',' ','l',
+     'i','k','e',' ','C',' ','(','*','=',',','+','=',',','/','=',' ','a',
+     'n','d',' ','-','=',')',#13,#10,'#',' ',' ','-','S','d',' ',' ',' ',
+     ' ',' ',' ',' ',' ','t','r','i','e','s',' ','t','o',' ','b','e',' ',
+     'D','e','l','p','h','i',' ','c','o','m','p','a','t','i','b','l','e',
+     #13,#10,'#',' ',' ','-','S','e','<','x','>',' ',' ',' ',' ',' ','c',
+     'o','m','p','i','l','e','r',' ','s','t','o','p','s',' ','a','f','t',
+     'e','r',' ','t','h','e',' ','<','x','>',' ','e','r','r','o','r','s',
+     ' ','(','d','e','f','a','u','l','t',' ','i','s',' ','1',')',#13,#10,
+     '#',' ',' ','-','S','g',' ',' ',' ',' ',' ',' ',' ',' ','a','l','l',
+     'o','w',' ','L','A','B','E','L',' ','a','n','d',' ','G','O','T','O',
+     #13,#10,'#',' ',' ','-','S','h',' ',' ',' ',' ',' ',' ',' ',' ','U',
+     's','e',' ','a','n','s','i','s','t','r','i','n','g','s',#13,#10,'#',
+     ' ',' ','-','S','i',' ',' ',' ',' ',' ',' ',' ',' ','s','u','p','p',
+     'o','r','t',' ','C','+','+',' ','s','t','y','l','e','d',' ','I','N',
+     'L','I','N','E',#13,#10,'#',' ',' ','-','S','m',' ',' ',' ',' ',' ',
+     ' ',' ',' ','s','u','p','p','o','r','t',' ','m','a','c','r','o','s',
+     ' ','l','i','k','e',' ','C',' ','(','g','l','o','b','a','l',')',#13,
+     #10,'#',' ',' ','-','S','o',' ',' ',' ',' ',' ',' ',' ',' ','t','r',
+     'i','e','s',' ','t','o',' ','b','e',' ','T','P','/','B','P',' ','7',
+     '.','0',' ','c','o','m','p','a','t','i','b','l','e',#13,#10,'#',' ',
+     ' ','-','S','p',' ',' ',' ',' ',' ',' ',' ',' ','t','r','i','e','s',
+     ' ','t','o',' ','b','e',' ','g','p','c',' ','c','o','m','p','a','t',
+     'i','b','l','e',#13,#10,'#',' ',' ','-','S','s',' ',' ',' ',' ',' ',
+     ' ',' ',' ','c','o','n','s','t','r','u','c','t','o','r',' ','n','a',
+     'm','e',' ','m','u','s','t',' ','b','e',' ','i','n','i','t',' ','(',
+     'd','e','s','t','r','u','c','t','o','r',' ','m','u','s','t',' ','b',
+     'e',' ','d','o','n','e',')',#13,#10,'#',' ',' ','-','S','t',' ',' ',
+     ' ',' ',' ',' ',' ',' ','a','l','l','o','w',' ','s','t','a','t','i',
+     'c',' ','k','e','y','w','o','r','d',' ','i','n',' ','o','b','j','e',
+     'c','t','s',#13,#10,'#',' ','A','l','l','o','w',' ','g','o','t','o',
+     ',',' ','i','n','l','i','n','e',',',' ','C','-','o','p','e','r','a',
+     't','o','r','s',#13,#10,'-','S','g','i','c',#13,#10,#13,#10,'#',' ',
+     '-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',#13,#10,
+     '#',' ','C','o','d','e',' ','g','e','n','e','r','a','t','i','o','n',
+     #13,#10,'#',' ','-','-','-','-','-','-','-','-','-','-','-','-','-',
+     '-','-',#13,#10,#13,#10,'#',' ','U','n','c','o','m','m','e','n','t',
+     ' ','t','h','e',' ','n','e','x','t',' ','l','i','n','e',' ','i','f',
+     ' ','y','o','u',' ','a','l','w','a','y','s',' ','w','a','n','t',' ',
+     's','t','a','t','i','c','/','d','y','n','a','m','i','c',' ','u','n',
+     'i','t','s',' ','b','y',' ','d','e','f','a','u','l','t',#13,#10,'#',
+     ' ','(','c','a','n',' ','b','e',' ','o','v','e','r','r','u','l','e',
+     'd',' ','w','i','t','h',' ','-','C','D',',',' ','-','C','S',' ','a',
+     't',' ','t','h','e',' ','c','o','m','m','a','n','d','l','i','n','e',
+     ')',#13,#10,'#','-','C','S',#13,#10,'#','-','C','D',#13,#10,#13,#10,
+     '#',' ','S','e','t',' ','t','h','e',' ','d','e','f','a','u','l','t',
+     ' ','h','e','a','p','s','i','z','e',' ','t','o',' ','8','M','b',#13,
+     #10,'#','-','C','h','8','0','0','0','0','0','0',#13,#10,#13,#10,'#',
+     ' ','S','e','t',' ','d','e','f','a','u','l','t',' ','c','o','d','e',
+     'g','e','n','e','r','a','t','i','o','n',' ','c','h','e','c','k','s',
+     ' ','(','i','o','c','h','e','c','k',',',' ','o','v','e','r','f','l',
+     'o','w',',',' ','r','a','n','g','e',',',' ','s','t','a','c','k',')',
+     #13,#10,'#','-','C','i',#13,#10,'#','-','C','o',#13,#10,'#','-','C',
+     'r',#13,#10,'#','-','C','t',#13,#10,#13,#10,'#',' ','O','p','t','i',
+     'm','i','z','e','r',' ','s','w','i','t','c','h','e','s',#13,#10,'#',
+     ' ','-','O','g',' ',' ',' ',' ',' ',' ',' ',' ','g','e','n','e','r',
+     'a','t','e',' ','s','m','a','l','l','e','r',' ','c','o','d','e',#13,
+     #10,'#',' ','-','O','G',' ',' ',' ',' ',' ',' ',' ',' ','g','e','n',
+     'e','r','a','t','e',' ','f','a','s','t','e','r',' ','c','o','d','e',
+     ' ','(','d','e','f','a','u','l','t',')',#13,#10,'#',' ','-','O','r',
+     ' ',' ',' ',' ',' ',' ',' ',' ','k','e','e','p',' ','c','e','r','t',
+     'a','i','n',' ','v','a','r','i','a','b','l','e','s',' ','i','n',' ',
+     'r','e','g','i','s','t','e','r','s',' ','(','s','t','i','l','l',' ',
+     'B','U','G','G','Y','!','!','!',')',#13,#10,'#',' ','-','O','u',' ',
+     ' ',' ',' ',' ',' ',' ',' ','e','n','a','b','l','e',' ','u','n','c',
+     'e','r','t','a','i','n',' ','o','p','t','i','m','i','z','a','t','i',
+     'o','n','s',' ','(','s','e','e',' ','d','o','c','s',')',#13,#10,'#',
+     ' ','-','O','1',' ',' ',' ',' ',' ',' ',' ',' ','l','e','v','e','l',
+     ' ','1',' ','o','p','t','i','m','i','z','a','t','i','o','n','s',' ',
+     '(','q','u','i','c','k',' ','o','p','t','i','m','i','z','a','t','i',
+     'o','n','s',')',#13,#10,'#',' ','-','O','2',' ',' ',' ',' ',' ',' ',
+     ' ',' ','l','e','v','e','l',' ','2',' ','o','p','t','i','m','i','z',
+     'a','t','i','o','n','s',' ','(','-','O','1',' ','+',' ','s','l','o',
+     'w','e','r',' ','o','p','t','i','m','i','z','a','t','i','o','n','s',
+     ')',#13,#10,'#',' ','-','O','3',' ',' ',' ',' ',' ',' ',' ',' ','l',
+     'e','v','e','l',' ','3',' ','o','p','t','i','m','i','z','a','t','i',
+     'o','n','s',' ','(','s','a','m','e',' ','a','s',' ','-','O','2','u',
+     ')',#13,#10,'#',' ','-','O','p',' ',' ',' ',' ',' ',' ',' ',' ','t',
+     'a','r','g','e','t',' ','p','r','o','c','e','s','s','o','r',#13,#10,
+     '#',' ',' ',' ',' ',' ','-','O','p','1',' ',' ','s','e','t',' ','t',
+     'a','r','g','e','t',' ','p','r','o','c','e','s','s','o','r',' ','t',
+     'o',' ','3','8','6','/','4','8','6',#13,#10,'#',' ',' ',' ',' ',' ',
+     '-','O','p','2',' ',' ','s','e','t',' ','t','a','r','g','e','t',' ',
+     'p','r','o','c','e','s','s','o','r',' ','t','o',' ','P','e','n','t',
+     'i','u','m','/','P','e','n','t','i','u','m','M','M','X',' ','(','t',
+     'm',')',#13,#10,'#',' ',' ',' ',' ',' ','-','O','p','3',' ',' ','s',
+     'e','t',' ','t','a','r','g','e','t',' ','p','r','o','c','e','s','s',
+     'o','r',' ','t','o',' ','P','P','r','o','/','P','I','I','/','c','6',
+     'x','8','6','/','K','6',' ','(','t','m',')',#13,#10,#13,#10,'#',' ',
+     'O','p','t','i','m','i','z','e',' ','a','l','w','a','y','s',' ','f',
+     'o','r',' ','S','i','z','e',' ','a','n','d',' ','P','e','n','t','i',
+     'u','m','I','I',#13,#10,'#','-','O','g','2','p','3',#13,#10,#13,#10,
+     #13,#10,'#',' ','-','-','-','-','-','-','-','-','-','-','-','-','-',
+     '-','-','-','-','-','-','-','-','-','-',#13,#10,'#',' ','S','e','t',
+     ' ','F','i','l','e','n','a','m','e','s',' ','a','n','d',' ','P','a',
+     't','h','s',#13,#10,'#',' ','-','-','-','-','-','-','-','-','-','-',
+     '-','-','-','-','-','-','-','-','-','-','-','-','-',#13,#10,#13,#10,
+     '#',' ','B','o','t','h',' ','s','l','a','s','h','e','s',' ','a','n',
+     'd',' ','b','a','c','k','s','l','a','s','h','e','s',' ','a','r','e',
+     ' ','a','l','l','o','w','e','d',' ','i','n',' ','p','a','t','h','s',
+     #13,#10,#13,#10,'#',' ','p','a','t','h',' ','t','o',' ','t','h','e',
+     ' ','m','e','s','s','a','g','e','f','i','l','e',',',' ','n','o','t',
+     ' ','n','e','c','e','s','s','a','r','y',' ','a','n','y','m','o','r',
+     'e',' ','b','u','t',' ','c','a','n',' ','b','e',' ','u','s','e','d',
+     ' ','t','o',' ','o','v','e','r','r','i','d','e',#13,#10,'#',' ','t',
+     'h','e',' ','d','e','f','a','u','l','t',' ','l','a','n','g','u','a',
+     'g','e',#13,#10,'#','-','F','r','%','b','a','s','e','p','a','t','h',
+     '%','/','m','s','g','/','e','r','r','o','r','e','.','m','s','g',#13,
+     #10,'#','-','F','r','%','b','a','s','e','p','a','t','h','%','/','m',
+     's','g','/','e','r','r','o','r','n','.','m','s','g',#13,#10,'#','-',
+     'F','r','%','b','a','s','e','p','a','t','h','%','/','m','s','g','/',
+     'e','r','r','o','r','e','s','.','m','s','g',#13,#10,'#','-','F','r',
+     '%','b','a','s','e','p','a','t','h','%','/','m','s','g','/','e','r',
+     'r','o','r','d','.','m','s','g',#13,#10,'#','-','F','r','%','b','a',
+     's','e','p','a','t','h','%','/','m','s','g','/','e','r','r','o','r',
+     'r','.','m','s','g',#13,#10,#13,#10,'#',' ','p','a','t','h',' ','t',
+     'o',' ','t','h','e',' ','g','c','c','l','i','b',#13,#10,'#','-','F',
+     'l','%','b','a','s','e','p','a','t','h','%','/','l','i','b',#13,#10,
+     #13,#10,'#',' ','s','e','a','r','c','h','p','a','t','h',' ','f','o',
+     'r',' ','i','n','c','l','u','d','e','f','i','l','e','s',#13,#10,'#',
+     ' ','r','e','l','e','a','s','e',' ','t','h','e','m',' ','o','n','l',
+     'y',' ','i','f',' ','y','o','u',' ','k','n','o','w',' ','w','h','a',
+     't',' ','y','o','u',' ','d','o',#13,#10,'#',' ','b','e','c','a','u',
+     's','e',' ','t','h','i','s',' ','c','o','u','l','d',' ','c','a','u',
+     's','e',' ','a',' ','r','e','b','u','i','l','d',' ','o','f',' ','t',
+     'h','e',' ','r','u','n','t','i','m','e',' ','l','i','b','r','a','r',
+     'y',#13,#10,'#',' ','i','f',' ','y','o','u',' ','t','e','l','l',' ',
+     't','h','e','m',' ','c','o','m','p','i','l','e','r','/','i','d','e',
+     ' ','t','o',' ','b','u','i','l','d',' ','t','h','e',' ','p','r','o',
+     'j','e','c','t',' ','(','F','K',')',#13,#10,'#','-','F','i','%','b',
+     'a','s','e','p','a','t','h','%','/','s','o','u','r','c','e','/','r',
+     't','l','/','i','n','c',';','%','b','a','s','e','p','a','t','h','%',
+     '/','s','o','u','r','c','e','/','r','t','l','/','i','3','8','6',#13,
+     #10,#13,#10,'#',' ','s','e','a','r','c','h','p','a','t','h',' ','f',
+     'o','r',' ','o','b','j','e','c','t','f','i','l','e','s',#13,#10,'#',
+     '-','F','o','%','b','a','s','e','p','a','t','h','%','/','s','o','u',
+     'r','c','e','/','r','t','l','/','i','n','c',';','%','b','a','s','e',
+     'p','a','t','h','%','/','s','o','u','r','c','e','/','r','t','l','/',
+     'i','3','8','6',#13,#10,#13,#10,'#',' ','s','e','a','r','c','h','p',
+     'a','t','h',' ','f','o','r',' ','u','n','i','t','s',' ','a','n','d',
+     ' ','o','t','h','e','r',' ','s','y','s','t','e','m',' ','d','e','p',
+     'e','n','d','e','n','t',' ','t','h','i','n','g','s',#13,#10,'-','F',
+     'u','%','b','a','s','e','p','a','t','h','%','/','u','n','i','t','s',
+     '/','$','F','P','C','T','A','R','G','E','T','/',#13,#10,'-','F','u',
+     '%','b','a','s','e','p','a','t','h','%','/','u','n','i','t','s','/',
+     '$','F','P','C','T','A','R','G','E','T','/','*',#13,#10,'-','F','u',
+     '%','b','a','s','e','p','a','t','h','%','/','u','n','i','t','s','/',
+     '$','F','P','C','T','A','R','G','E','T','/','r','t','l',#13,#10,#13,
+     #10,'#',' ','s','e','a','r','c','h','p','a','t','h',' ','f','o','r',
+     ' ','l','i','b','r','a','r','i','e','s',#13,#10,'#','-','F','l','%',
+     'b','a','s','e','p','a','t','h','%','/','l','i','b',#13,#10,'#','-',
+     'F','l','/','l','i','b',';','/','u','s','r','/','l','i','b',#13,#10,
+     #13,#10,'#',' ','s','e','a','r','c','h','p','a','t','h',' ','f','o',
+     'r',' ','t','o','o','l','s',#13,#10,'-','F','D','%','b','a','s','e',
+     'p','a','t','h','%','/','b','i','n','/','$','F','P','C','T','A','R',
+     'G','E','T',#13,#10,#13,#10,'#',' ','-','-','-','-','-','-','-','-',
+     '-','-','-','-','-',#13,#10,'#',' ','L','i','n','k','i','n','g',#13,
+     #10,'#',' ','-','-','-','-','-','-','-','-','-','-','-','-','-',#13,
+     #10,#13,#10,'#',' ','g','e','n','e','r','a','t','e',' ','a','l','w',
+     'a','y','s',' ','d','e','b','u','g','g','i','n','g',' ','i','n','f',
+     'o','r','m','a','t','i','o','n',' ','f','o','r',' ','G','D','B',' ',
+     '(','s','l','o','w','s',' ','d','o','w','n',' ','t','h','e',' ','c',
+     'o','m','p','i','l','i','n','g',#13,#10,'#',' ','p','r','o','c','e',
+     's','s',')',#13,#10,'#','-','g','l',#13,#10,#13,#10,'#',' ','a','l',
+     'w','a','y','s',' ','p','a','s','s',' ','a','n',' ','o','p','t','i',
+     'o','n',' ','t','o',' ','t','h','e',' ','l','i','n','k','e','r',#13,
+     #10,'#','-','k','-','s',#13,#10,#13,#10,'#',' ','A','l','w','a','y',
+     's',' ','s','t','r','i','p',' ','d','e','b','u','g','i','n','f','o',
+     ' ','f','r','o','m',' ','t','h','e',' ','e','x','e','c','u','t','a',
+     'b','l','e',#13,#10,'-','X','s',#13,#10,#13,#10,#13,#10,'#',' ','-',
+     '-','-','-','-','-','-','-','-','-','-','-','-',#13,#10,'#',' ','M',
+     'i','s','c','e','l','l','a','n','e','o','u','s',#13,#10,'#',' ','-',
+     '-','-','-','-','-','-','-','-','-','-','-','-',#13,#10,#13,#10,'#',
+     ' ','W','r','i','t','e',' ','a','l','w','a','y','s',' ','a',' ','n',
+     'i','c','e',' ','F','P','C',' ','l','o','g','o',' ',';',')',#13,#10,
+     '-','l',#13,#10,#13,#10,'#',' ','V','e','r','b','o','s','i','t','y',
+     #13,#10,'#',' ','e',' ',':',' ','S','h','o','w',' ','e','r','r','o',
+     'r','s',' ','(','d','e','f','a','u','l','t',')',' ',' ',' ',' ',' ',
+     ' ',' ','d',' ',':',' ','S','h','o','w',' ','d','e','b','u','g',' ',
+     'i','n','f','o',#13,#10,'#',' ','w',' ',':',' ','S','h','o','w',' ',
+     'w','a','r','n','i','n','g','s',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+     ' ',' ',' ',' ',' ',' ','u',' ',':',' ','S','h','o','w',' ','u','s',
+     'e','d',' ','f','i','l','e','s',#13,#10,'#',' ','n',' ',':',' ','S',
+     'h','o','w',' ','n','o','t','e','s',' ',' ',' ',' ',' ',' ',' ',' ',
+     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','t',' ',':',' ','S','h','o',
+     'w',' ','t','r','i','e','d',' ','f','i','l','e','s',#13,#10,'#',' ',
+     'h',' ',':',' ','S','h','o','w',' ','h','i','n','t','s',' ',' ',' ',
+     ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','m',' ',
+     ':',' ','S','h','o','w',' ','d','e','f','i','n','e','d',' ','m','a',
+     'c','r','o','s',#13,#10,'#',' ','i',' ',':',' ','S','h','o','w',' ',
+     'g','e','n','e','r','a','l',' ','i','n','f','o',' ',' ',' ',' ',' ',
+     ' ',' ',' ',' ',' ',' ','p',' ',':',' ','S','h','o','w',' ','c','o',
+     'm','p','i','l','e','d',' ','p','r','o','c','e','d','u','r','e','s',
+     #13,#10,'#',' ','l',' ',':',' ','S','h','o','w',' ','l','i','n','e',
+     'n','u','m','b','e','r','s',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
+     ' ',' ','c',' ',':',' ','S','h','o','w',' ','c','o','n','d','i','t',
+     'i','o','n','a','l','s',#13,#10,'#',' ','a',' ',':',' ','S','h','o',
+     'w',' ','e','v','e','r','y','t','h','i','n','g',' ',' ',' ',' ',' ',
+     ' ',' ',' ',' ',' ',' ',' ',' ','0',' ',':',' ','S','h','o','w',' ',
+     'n','o','t','h','i','n','g',' ','(','e','x','c','e','p','t',' ','e',
+     'r','r','o','r','s',')',#13,#10,#13,#10,'#',' ','D','i','s','p','l',
+     'a','y',' ','I','n','f','o',',',' ','W','a','r','n','i','n','g','s',
+     ',',' ','N','o','t','e','s',' ','a','n','d',' ','H','i','n','t','s',
+     #13,#10,'-','v','i','w','n',#13,#10,'#',' ','I','f',' ','y','o','u',
+     ' ','d','o','n',#39,'t',' ','w','a','n','t',' ','s','o',' ','m','u',
+     'c','h',' ','v','e','r','b','o','s','i','t','y',' ','u','s','e',#13,
+     #10,'#','-','v','w',#13,#10,#13,#10);

+ 240 - 0
install/fpcmkcfg.pp

@@ -0,0 +1,240 @@
+{$mode objfpc}
+{$H+}
+{
+    $Id$
+    This file is part of Free Pascal Build tools
+    Copyright (c) 2005 by Michael Van Canneyt
+
+    Create a configuration file
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+program fpcmkcfg;
+
+uses usubst,SysUtils,Classes;
+
+{
+  The fpccfg.inc file must be built from a template with the bin2obj
+  command.  it needs options:
+  bin2obj -a -o fpccfg.inc -c DefaultConfig fpc.cft
+  where fpc.cft is the template file.
+}
+
+{$i fpccfg.inc}
+
+Const
+  BuildVersion={$I %FPCVERSION%};
+  BuildTarget={$I %FPCTARGET%};
+
+
+Resourcestring
+  SUsage00 = 'Usage: %s [options]';
+  SUsage10 = 'Where options is one or more of';
+  SUSage20 = '  -t filename   Template file name. Default is built-in';
+  SUSage30 = '  -o filename   Set output file. Default is standard output.';
+  SUsage40 = '  -d name=value define name=value pair.';
+  SUsage50 = '  -h            show this help and exit.';
+  SUsage60 = '  -u name       remove name from list of name/value pairs.';
+  SUsage70 = '  -l filename   read name/value pairs from filename';
+  SUsage80 = '  -b            show builtin template and exit.';
+  SUsage90 = '  -v            be verbose.';
+  SErrUnknownOption   = 'Error: Unknown option.';
+  SErrArgExpected     = 'Error: Option "%s" requires an argument.';
+  SErrNoSuchFile      = 'Error: File "%s" does not exist.';
+  SErrBackupFailed    = 'Error: Backup of file "%s" to "%s" failed.';
+  SErrDelBackupFailed = 'Error: Delete of old backup file "%s" failed.';
+  SWarnIgnoringFile   = 'Warning: Ignoring non-existent file: ';
+  SWarnIgnoringPair   = 'Warning: ignoring wrong name/value pair: ';
+  SStats              = 'Replaced %d placeholders in %d lines.';
+  SSubstInLine        = 'Replaced %s placeholders in line %d.';
+
+
+Var
+  Verbose : Boolean;
+  SkipBackup : Boolean;
+  List,Cfg : TStringList;
+  TemplateFileName,
+  OutputFileName : String;
+
+
+
+
+procedure Init;
+
+begin
+  Verbose:=False;
+  List:=TStringList.Create;
+  AddToList(List,'FPCVERSION',BuildVersion);
+  AddToList(List,'FPCTARGET',BuildTarget);
+  AddToList(List,'PWD',GetCurrentDir);
+  AddToList(List,'BUILDDATE',DateToStr(Date));
+  AddToList(List,'BUILDTIME',TimeToStr(Time));
+  Cfg:=TStringList.Create;
+  Cfg.Text:=StrPas(Addr(DefaultConfig));
+end;
+
+Procedure Done;
+
+begin
+  FreeAndNil(List);
+  FreeAndNil(Cfg);
+end;
+
+Procedure Usage;
+
+begin
+  Writeln(Format(SUsage00,[ExtractFileName(Paramstr(0))]));
+  Writeln(SUsage10);
+  Writeln(SUsage20);
+  Writeln(SUsage30);
+  Writeln(SUsage40);
+  Writeln(SUsage50);
+  Writeln(SUsage60);
+  Writeln(SUsage70);
+  Writeln(SUsage80);
+  Writeln(SUsage90);
+  Halt(1);
+end;
+
+Procedure UnknownOption(Const S : String);
+
+begin
+  Writeln(SErrUnknownOption,S);
+  Usage;
+end;
+
+Procedure ShowBuiltIn;
+
+Var
+  I : Integer;
+
+
+begin
+  For I:=0 to Cfg.Count-1 do
+    Writeln(Cfg[I]);
+end;
+
+
+Procedure ProcessCommandline;
+
+Var
+  I,P,l : Integer;
+  T,S : String;
+
+  Function GetOptArg : String;
+
+  begin
+    If I=ParamCount then
+      begin
+      Writeln(StdErr,Format(SErrArgExpected,[S]));
+      Halt(1);
+      end;
+    inc(I);
+    Result:=ParamStr(I);
+  end;
+
+begin
+  I:=1;
+  While( I<=ParamCount) do
+    begin
+    S:=Paramstr(i);
+    If Length(S)<=1 then
+      UnknownOption(S)
+    else
+      case S[2] of
+        'v' : Verbose:=True;
+        'h' : Usage;
+        'b' : begin
+              ShowBuiltin;
+              halt(0);
+              end;
+        't' : TemplateFileName:=GetOptArg;
+        'd' : AddPair(List,GetOptArg);
+        'u' : AddPair(List,GetOptArg+'=');
+        'o' : OutputFileName:=GetoptArg;
+        's' : SkipBackup:=True;
+      else
+        UnknownOption(S);
+      end;
+    Inc(I);
+    end;
+  If (TemplateFileName<>'') then
+    begin
+    If Not FileExists(TemplateFileName) then
+      begin
+      Writeln(StdErr,Format(SErrNoSuchFile,[TemplateFileName]));
+      Halt(1);
+      end;
+    Cfg.LoadFromFile(TemplateFileName);
+    AddToList(List,'TEMPLATEFILE',TemplateFileName);
+    end
+  else
+    AddToList(List,'TEMPLATEFILE','builtin');
+end;
+
+
+Procedure CreateFile;
+
+Var
+  Fout : Text;
+  S,BFN : String;
+  I,RCount : INteger;
+
+begin
+  If (OutputFileName<>'')
+     and FileExists(OutputFileName)
+     and not SkipBackup then
+    begin
+    BFN:=ChangeFileExt(OutputFileName,'.bak');
+    If FileExists(BFN) and not DeleteFile(BFN) then
+      begin
+      Writeln(StdErr,Format(SErrDelBackupFailed,[BFN]));
+      Halt(1);
+      end;
+    If not RenameFile(OutputFileName,BFN) then
+      begin
+      Writeln(StdErr,Format(SErrBackupFailed,[OutputFileName,BFN]));
+      Halt(1);
+      end;
+    end;
+  Assign(Fout,OutputFileName);
+  Rewrite(FOut);
+  Try
+    For I:=0 to Cfg.Count-1 do
+      begin
+      S:=Cfg[i];
+      Inc(RCount,DoSubstitutions(List,S));
+      Writeln(FOut,S);
+      end;
+    If Verbose then
+      Writeln(StdErr,Format(SStats,[RCount,Cfg.Count]));
+  Finally
+    Close(Fout);
+  end;
+end;
+
+begin
+  Init;
+  Try
+    ProcessCommandLine;
+    CreateFile;
+  Finally
+    Done;
+  end;
+end.
+{
+  $Log$
+  Revision 1.1  2005-01-09 13:36:12  michael
+  + Initial implementation of installer tools
+
+  Revision 1.2  2002/09/07 15:40:47  peter
+    * old logs removed and tabs fixed
+
+}
+

+ 242 - 0
install/fpcsubst.pp

@@ -0,0 +1,242 @@
+{$Mode objfpc}
+{$H+}
+program fpcsubst;
+
+uses SysUtils,Classes,Usubst;
+
+Const
+  BuildVersion={$I %FPCVERSION%};
+  BuildTarget={$I %FPCTARGET%};
+
+Resourcestring
+  SUsage00 = 'Usage: %s [options]';
+  SUsage10 = 'Where options is one or more of';
+  SUSage20 = '  -i filename   Set input file. Default is standard input';
+  SUSage30 = '  -o filename   Set output file. Default is standard output.';
+  SUsage40 = '  -d name=value define name=value pair.';
+  SUsage50 = '  -h            show this help and exit.';
+  SUsage60 = '  -u name       remove name from list of name/value pairs.';
+  SUsage70 = '  -l filename   read name/value pairs from filename';
+  SUsage80 = '  -b            show builtin list and exit.';
+  SUsage90 = '  -v            be verbose.';
+  SErrUnknownOption = 'Error: Unknown option.';
+  SErrArgExpected = 'Error: Option "%s" requires an argument.';
+  SErrNoSuchFile = 'Error: File "%s" does not exist.';
+  SErrBackupFailed = 'Error: Backup of file "%s" to "%s" failed.';
+  SErrDelBackupFailed = 'Error: Delete of old backup file "%s" failed.';
+  SWarnIgnoringFile = 'Warning: Ignoring non-existent file: ';
+  SWarnIgnoringPair = 'Warning: ignoring wrong name/value pair: ';
+  SStats = 'Replaced %d placeholders in %d lines.';
+  SSubstInLine = 'Replaced %s placeholders in line %d.';
+
+
+Var
+  List : TStringList;
+  InputFileName : String;
+  OutputFileName : String;
+  Verbose : Boolean;
+  SkipBackup : Boolean;
+
+
+
+
+
+procedure Init;
+
+begin
+  Verbose:=False;
+  List:=TStringList.Create;
+  AddToList(List,'FPCVERSION',BuildVersion);
+  AddToList(List,'FPCTARGET',BuildTarget);
+  AddToList(List,'PWD',GetCurrentDir);
+  AddToList(List,'BUILDDATE',DateToStr(Date));
+  AddToList(List,'BUILDTIME',TimeToStr(Time));
+end;
+
+Procedure Done;
+
+begin
+  FreeAndNil(List);
+end;
+
+Procedure Usage;
+
+begin
+  Writeln(Format(SUsage00,[ExtractFileName(Paramstr(0))]));
+  Writeln(SUsage10);
+  Writeln(SUsage20);
+  Writeln(SUsage30);
+  Writeln(SUsage40);
+  Writeln(SUsage50);
+  Writeln(SUsage60);
+  Writeln(SUsage70);
+  Writeln(SUsage80);
+  Writeln(SUsage90);
+  Halt(1);
+end;
+
+Procedure ShowBuiltIns;
+
+var
+  I : Integer;
+
+begin
+  for I:=0 to List.Count-1 do
+    Writeln(List[i]);
+end;
+
+
+
+
+Procedure AddFromFile(FN : String);
+
+Var
+  F : Text;
+  S : String;
+
+begin
+  If Not FileExists(FN) then
+    begin
+    Writeln(StdErr,SWarnIgnoringFile,FN);
+    Exit;
+    end;
+  Assign(F,FN);
+  Reset(F);
+  Try
+    While not EOF(F) do
+      begin
+      ReadLn(F,S);
+      If (Length(S)>0) and (not (S[1] in ['#',';'])) then
+        If not AddPair(List,S) then
+         If Verbose then
+           Writeln(StdErr,SWarnIgnoringPair,S)
+      end;
+  finally
+    Close(F);
+  end;
+end;
+
+Procedure UnknownOption(Const S : String);
+
+begin
+  Writeln(SErrUnknownOption,S);
+  Usage;
+end;
+
+Procedure ProcessCommandline;
+
+Var
+  I,P,l : Integer;
+  T,S : String;
+
+  Function GetOptArg : String;
+
+  begin
+    If I=ParamCount then
+      begin
+      Writeln(StdErr,Format(SErrArgExpected,[S]));
+      Halt(1);
+      end;
+    inc(I);
+    Result:=ParamStr(I);
+  end;
+
+begin
+  I:=1;
+  While( I<=ParamCount) do
+    begin
+    S:=Paramstr(i);
+    If (Length(S)<=1) or (S[1]<>'-') then
+      UnknownOption(S)
+    else
+      case S[2] of
+        'v' : Verbose:=True;
+        'h' : Usage;
+        'b' : begin
+              ShowBuiltins;
+              halt(0);
+              end;
+        'l' : AddFromFile(GetOptArg);
+        'd' : AddPair(List,GetOptArg);
+        'u' : AddPair(List,GetOptArg+'=');
+        'i' : InputFileName:=GetOptArg;
+        'o' : OutputFileName:=GetoptArg;
+        's' : SkipBackup:=True;
+      else
+        UnknownOption(S);
+      end;
+    Inc(I);
+    end;
+end;
+
+
+
+Procedure DoFile;
+
+Var
+  Fin,Fout : Text;
+  S,BFN : String;
+  N,LCount,RCount : Integer;
+
+
+begin
+  If (InputFileName<>'') and not FileExists(InputFIleName) then
+    begin
+    Writeln(StdErr,Format(SErrNoSuchFile,[InputFileName]));
+    Halt(1)
+    end;
+  If (OutputFileName<>'')
+     and FileExists(OutputFileName)
+     and not SkipBackup then
+    begin
+    BFN:=ChangeFileExt(OutputFileName,'.bak');
+    If FileExists(BFN) and not DeleteFile(BFN) then
+      begin
+      Writeln(StdErr,Format(SErrDelBackupFailed,[BFN]));
+      Halt(1);
+      end;
+    If not RenameFile(OutputFileName,BFN) then
+      begin
+      Writeln(StdErr,Format(SErrBackupFailed,[OutputFileName,BFN]));
+      Halt(1);
+      end;
+    end;
+  Assign(Fin,InputFileName);
+  Assign(Fout,OutputFileName);
+  Reset(Fin);
+  Try
+    Rewrite(FOut);
+    Try
+      LCount:=0;
+      RCount:=0;
+      While Not EOF(Fin) do
+        begin
+        Inc(LCount);
+        ReadLn(Fin,S);
+        N:=DoSubstitutions(List,S);
+        If Verbose and (N>0) then
+          Writeln(StdErr,Format(SSubstInLine,[N,LCount]));
+        Inc(RCount,N);
+        Writeln(Fout,S);
+        end;
+     If Verbose then
+       Writeln(StdErr,Format(SStats,[RCount,LCount]));
+    Finally
+      Close(Fout);
+    end;
+  Finally
+    Close(Fin);
+  end;
+
+end;
+
+begin
+  Init;
+  Try
+    ProcessCommandLine;
+    DoFile;
+  Finally
+    Done;
+  end;
+end.
+

+ 119 - 0
install/usubst.pp

@@ -0,0 +1,119 @@
+{$mode objfpc}
+{$H+}
+{
+    $Id$
+    This file is part of Free Pascal build tools
+    Copyright (c) 2005 by Michael Van Canneyt
+
+    Implements string substitutions
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ **********************************************************************}
+unit usubst;
+
+interface
+
+uses SysUtils,Classes;
+
+// Add N=V pair to list.
+Procedure AddToList(List : TStrings; Const N,V : String);
+// Split NV to N/V and call AddToList
+Function  AddPair(List : TStrings; Const NV : String) : Boolean;
+// Perform substitutions in S, from List.
+Function  DoSubStitutions(List : TStrings; Var S : String) : Integer;
+
+implementation
+
+Procedure AddToList(List : TStrings; Const N,V : String);
+
+var
+  I : Integer;
+
+begin
+  I:=List.IndexOfName(N);
+  If (V='') then
+    begin
+    If (I<>-1) then
+      List.Delete(I)
+    end
+  else
+    begin
+    If (I=-1) then
+      List.Add(N+'='+V)
+    else
+      List[I]:=N+'='+V;
+    end;
+end;
+
+Function AddPair(List : TStrings; Const NV : String) : Boolean;
+
+Var
+  P,I : Integer;
+  N,V : string;
+
+begin
+  P:=Pos('=',NV);
+  Result:=(P<>0);
+  If Result then
+    begin
+    V:=NV;
+    N:=Copy(V,1,P-1);
+    Delete(V,1,P);
+    AddToList(List,N,V);
+    end;
+end;
+
+Function DoSubstitutions(List : TStrings; Var S : String) : Integer;
+
+Var
+  N,T : String;
+  P : Integer;
+
+begin
+  Result:=0;
+  T:=S;
+  S:='';
+  P:=Pos('%',T);
+  While (P>0) do
+    begin
+    S:=S+Copy(T,1,P-1);
+    Delete(T,1,P);
+    If (Length(T)>0) then
+      if (T[1]='%') then
+        begin
+        S:=S+'%';
+        Delete(T,1,1);
+        end
+      else
+        begin
+        P:=Pos('%',T);
+        If (P=0) then
+          S:=S+'%'
+        else
+          begin
+          N:=Copy(T,1,P-1);
+          Delete(T,1,P);
+          S:=S+List.Values[N];
+          end;
+        end;
+    P:=Pos('%',T);
+    end;
+  S:=S+T;
+end;
+
+end.
+{
+  $Log$
+  Revision 1.1  2005-01-09 13:36:12  michael
+  + Initial implementation of installer tools
+
+
+}
+
+